From f0d5bc7d44db7d4275636c1ad6e5f87638b346d4 Mon Sep 17 00:00:00 2001 From: abraxas914 Date: Sun, 23 Aug 2026 17:12:58 +0800 Subject: [PATCH 1/6] feat(desktop): integrate Desktop 2.0 runtime services --- frontends/conductor.py | 249 +- frontends/cost_tracker.py | 254 +- frontends/data_backup.py | 857 ++++ frontends/desktop/src-tauri/Cargo.lock | 506 ++- frontends/desktop/src-tauri/Cargo.toml | 11 +- frontends/desktop/src-tauri/build.rs | 36 +- .../src-tauri/capabilities/default.json | 32 +- .../desktop/src-tauri/capabilities/setup.json | 16 + .../permissions/bridge-commands.toml | 47 +- frontends/desktop/src-tauri/src/lib.rs | 3766 ++++++++++++++--- frontends/desktop/src-tauri/tauri.conf.json | 63 +- .../desktop/src-tauri/tauri.e2e.conf.json | 19 + frontends/desktop_bridge.py | 1306 ++++-- frontends/desktop_settings.py | 161 + 14 files changed, 6195 insertions(+), 1128 deletions(-) create mode 100644 frontends/data_backup.py create mode 100644 frontends/desktop/src-tauri/capabilities/setup.json create mode 100644 frontends/desktop/src-tauri/tauri.e2e.conf.json create mode 100644 frontends/desktop_settings.py diff --git a/frontends/conductor.py b/frontends/conductor.py index 9202ce7dc..cbd205ac0 100644 --- a/frontends/conductor.py +++ b/frontends/conductor.py @@ -9,32 +9,62 @@ from pydantic import BaseModel def _resolve_ga_root() -> str: - """External core dir when launched as the bundle's conductor (design 三). - Prefer GA_ROOT env (set by the desktop bridge), else derive from own location.""" - val = (os.environ.get("GA_ROOT", "") or "").strip() - if val: - root = os.path.abspath(os.path.expanduser(val)) + """Use the external core selected by the package-owned desktop bridge when valid.""" + value = (os.environ.get("GA_ROOT", "") or "").strip() + if value: + root = os.path.abspath(os.path.expanduser(value)) if os.path.exists(os.path.join(root, "agentmain.py")): return root return os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + ROOT = _resolve_ga_root() if ROOT not in sys.path: sys.path.insert(0, ROOT) from agentmain import GenericAgent HOST = "127.0.0.1" -PORT = 8900 +DEFAULT_PORT = 8900 +E2E_CONDUCTOR_PORT_ENV = "GA_DESKTOP_E2E_CONDUCTOR_PORT" +E2E_REPORT_DIR_ENV = "GA_DESKTOP_E2E_REPORT_DIR" + + +def _parse_conductor_port(value: Any) -> int: + raw = str(value).strip() + if not raw.isascii() or not raw.isdigit(): + raise argparse.ArgumentTypeError("conductor port must be an integer between 1 and 65535") + port = int(raw) + if not 1 <= port <= 65535: + raise argparse.ArgumentTypeError("conductor port must be an integer between 1 and 65535") + return port + + +def _default_conductor_port() -> int: + """Keep production on :8900; only the isolated package journey may override it. + + The renderer and production CSP intentionally target :8900. Treating this as a + general runtime setting would make the backend claim configurability the renderer + cannot honor, so the override is gated by the existing package-evidence marker. + """ + if not os.environ.get(E2E_REPORT_DIR_ENV): + return DEFAULT_PORT + raw = os.environ.get(E2E_CONDUCTOR_PORT_ENV) + return DEFAULT_PORT if raw is None else _parse_conductor_port(raw) + + +PORT = _default_conductor_port() HTML_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "conductor.html") parser = argparse.ArgumentParser() parser.add_argument("--host", default=HOST) -parser.add_argument("--port", type=int, default=PORT) +parser.add_argument("--port", type=_parse_conductor_port, default=PORT) parser.add_argument("--key") parser.add_argument("--no-browser", action="store_true") args = parser.parse_args() if args.host not in ("127.0.0.1", "localhost", "::1") and not args.key: parser.error("--key is required for non-loopback listening") +HOST = args.host +PORT = args.port def _settings_doc() -> dict: @@ -63,47 +93,109 @@ def _client_usable(agent: "GenericAgent") -> bool: return hasattr(getattr(agent, "llmclient", None), "backend") -def _fallback_usable_model(agent: "GenericAgent") -> None: - for i, client in enumerate(getattr(agent, "llmclients", []) or []): - if not hasattr(client, "backend"): - continue - agent.llm_no = i - agent.llmclient = client +def _parse_model_no(value: Any) -> Optional[int]: + if value is None or isinstance(value, bool): + return None + try: + return int(value) + except (TypeError, ValueError): + return None + + +def _usable_model(agent: "GenericAgent", no: Optional[int]) -> bool: + clients = getattr(agent, "llmclients", []) or [] + return no is not None and 0 <= no < len(clients) and hasattr(clients[no], "backend") + + +def _activate_model(agent: "GenericAgent", no: int) -> None: + if not _usable_model(agent, no): + raise ValueError(f"llm index out of range or unavailable: {no}") + agent.next_llm(no) + + +def _runtime_model_state(agent: "GenericAgent", configured: Optional[int], reason: Optional[str]) -> dict: + effective = getattr(agent, "llm_no", None) if _client_usable(agent) else None + current = None + if _client_usable(agent): with suppress(Exception): - agent.llmclient.last_tools = '' - return + current = str(agent.llmclient.backend.name) + return {"configured": configured, "effective": effective, + "fallbackReason": reason, "current": current} -def _apply_desktop_model(agent: "GenericAgent") -> None: +def _apply_desktop_model(agent: "GenericAgent") -> dict: """Make the conductor's session reflect the current desktop config before a task: switch to its bound model if one is set, otherwise still refresh sessions from mykey so live key/model edits (e.g. importing keys) take effect without a restart. next_llm() already reloads internally; the no-bound-model branch must reload too, or a conductor started on an empty/stale mykey would never pick up imported keys.""" - no = _conductor_llm_no() - if no is not None: + doc = _settings_doc() + conductor_cfg = doc.get("conductor") if isinstance(doc.get("conductor"), dict) else {} + ui_cfg = doc.get("ui") if isinstance(doc.get("ui"), dict) else {} + raw_configured = conductor_cfg.get("llmNo") + configured = _parse_model_no(raw_configured) + ui_default = _parse_model_no(ui_cfg.get("llmNo")) + + try: + agent.load_llm_sessions() # mtime-guarded; rebuilds only when mykey changed + except Exception as e: + print(f"[conductor] failed to refresh model sessions: {e}", file=sys.stderr) + + clients = getattr(agent, "llmclients", []) or [] + + configured_failed = False + if _usable_model(agent, configured): try: - agent.next_llm(int(no)) + _activate_model(agent, configured) + return _runtime_model_state(agent, configured, None) except Exception as e: - print(f"[conductor] failed to apply conductor model #{no}: {e}", file=sys.stderr) - else: - agent.load_llm_sessions() # mtime-guarded; rebuilds only when mykey changed - if not _client_usable(agent): - print("[conductor] selected model is unavailable; falling back to first usable model", file=sys.stderr) - _fallback_usable_model(agent) + configured_failed = True + print(f"[conductor] configured model #{configured} is unavailable: {e}", file=sys.stderr) + + if _usable_model(agent, ui_default): + if raw_configured is None: + reason = "ui_default" + elif configured_failed: + reason = "configured_unavailable" + elif configured is not None: + reason = "configured_unavailable" if 0 <= configured < len(clients) else "invalid_configured" + else: + reason = "invalid_configured" + try: + _activate_model(agent, ui_default) + return _runtime_model_state(agent, configured, reason) + except Exception as e: + print(f"[conductor] UI default model #{ui_default} is unavailable: {e}", file=sys.stderr) + + for i, client in enumerate(clients): + if hasattr(client, "backend"): + try: + _activate_model(agent, i) + return _runtime_model_state(agent, configured, "first_available") + except Exception: + continue + + print("[conductor] no usable model is available", file=sys.stderr) + return {"configured": configured, "effective": None, + "fallbackReason": "no_models", "current": None} def _select_llm(agent: "GenericAgent", llm: Any) -> bool: if llm is None or str(llm).strip() == "": return False q = str(llm).strip() - if isinstance(llm, int) or q.isdigit(): agent.next_llm(int(q)); return True + if isinstance(llm, int) or q.isdigit(): + agent.load_llm_sessions() + _activate_model(agent, int(q)) + return True q = q.lower(); agent.load_llm_sessions() for i, c in enumerate(agent.llmclients): + if not hasattr(c, "backend"): + continue vals = [] for fn in (lambda: agent.get_llm_name(c), lambda: agent.get_llm_name(c, model=True), lambda: c.backend.name, lambda: c.backend.model): try: vals.append(str(fn()).lower()) except Exception: pass - if any(q in v for v in vals): agent.next_llm(i); return True + if any(q in v for v in vals): _activate_model(agent, i); return True raise ValueError(f"llm not found: {llm}") @@ -362,8 +454,8 @@ def keyinfo_subagent(self, sid: str, msg: str) -> dict: GET /file?path=...\t下载文件 POST /file?name=...\t上传到temp/uploads POST /subagent/{{id}}\tbody: {{"action": "keyinfo", "msg": "..."}}\t注入key_info(agent下轮可见) -POST /subagent/{{id}}\tbody: {{"action": "input", "msg": "..."}}\t对subagent输入下一条指令;指定模型加参数llm(数字/名称) -POST /subagent/{{id}}\tbody: {{"action": "stop"}}\t中断执行但保留(可继续input) +POST /subagent/{{id}}\tbody: {{"action": "input", "msg": "..."}}\t开新一轮任务;指定模型加参数llm(数字/名称) +POST /subagent/{{id}}\tbody: {{"action": "stop"}}\t中断执行但保留(可继续input/reply) GET /chat?last=N\t返回最近N条对话(默认20) GET /subagent\t返回 {{"items": [...]}}\t查看所有subagent状态 GET /subagent/{{id}}?max_len=N\t返回单个subagent详情,reply经清洗后截取尾部max_len字(默认5000)。仅在摘要不够判断时使用 @@ -401,10 +493,56 @@ def __init__(self): self.inbox: "queue.Queue[dict]" = queue.Queue() # 收件箱:唯一对外接口 self.agent: Optional[GenericAgent] = None self.started = False + self._runner_thread: Optional[threading.Thread] = None self.log: list = [] + self._model_lock = threading.RLock() + self._model_state = { + "configured": None, + "effective": None, + "fallbackReason": "no_models", + "current": None, + "running": False, + } + + def model_snapshot(self) -> dict: + with self._model_lock: + return dict(self._model_state) + + def _publish_model_state(self, state: dict, running: bool) -> None: + snapshot = {**state, "running": bool(running)} + with self._model_lock: + self._model_state = snapshot + schedule_broadcast({"type": "model", "model": snapshot}) def notify(self, event: dict): self.inbox.put(event) + def _wait_for_agent_idle(self, timeout: float = 10.0) -> None: + """Queue.join semantics with a bounded runner-health escape hatch.""" + tasks = self.agent.task_queue + deadline = time.monotonic() + timeout + with tasks.all_tasks_done: + while tasks.unfinished_tasks: + if self._runner_thread is not None and not self._runner_thread.is_alive(): + raise RuntimeError("conductor agent runner stopped before task cleanup") + remaining = deadline - time.monotonic() + if remaining <= 0: + raise TimeoutError("conductor agent task cleanup timed out") + tasks.all_tasks_done.wait(min(0.25, remaining)) + + def _record_unavailable_model(self, events: list) -> None: + event_label = ",".join(event.get("type", "") for event in events) or "wake" + item = { + "id": short_id(), + "ts": now_ms(), + "event": event_label, + "turn": None, + "text": "Conductor paused: no usable model profiles are configured; events are deferred.", + } + self.log.append(item) + if len(self.log) > self.LOG_MAX: + self.log.pop(0) + schedule_broadcast({"type": "log", "item": item}) + def _build_prompt(self, events: list) -> str: running, stopped = pool.counts() unread = sum(1 for m in chat_messages if m.get("role") == "user" and not m.get("read")) @@ -460,33 +598,55 @@ def flush(): def _run(self): self.agent.inc_out = True - start_agent_runner(self.agent, "conductor-agent") + self._runner_thread = start_agent_runner(self.agent, "conductor-agent") self.started = True + deferred_events: list = [] while True: # Block until first event arrives first = self.inbox.get() self.inbox.task_done() # Short debounce: collect any additional events that arrived meanwhile time.sleep(0.3) - events = [first] + events = [*deferred_events, first] + deferred_events = [] while not self.inbox.empty(): try: events.append(self.inbox.get_nowait()) self.inbox.task_done() except Exception: break - kind = first.get("type"); others = [e for e in events if e.get("type") != kind]; events = [e for e in events if e.get("type") == kind] or [first] - for e in others: self.inbox.put(e) try: + # GenericAgent publishes the display ``done`` item before its + # runner finishes history persistence and task cleanup. Do not + # mutate the live client until that previous task has reached + # ``task_done``; the queue join is the authoritative idle barrier. + self._wait_for_agent_idle() + # Settings can change while this long-lived process remains healthy. + # Refresh only at the task boundary so an in-flight task keeps its + # client, while the next task observes the newly persisted binding. + model_state = _apply_desktop_model(self.agent) + if model_state.get("effective") is None: + self._publish_model_state(model_state, running=False) + self._record_unavailable_model(events) + deferred_events = events + continue + kind = events[0].get("type") + other_events = [event for event in events if event.get("type") != kind] + events = [event for event in events if event.get("type") == kind] + for event in other_events: + self.inbox.put(event) prompt = self._build_prompt(events) - dq = self.agent.put_task(prompt, source="conductor") - self._drain(dq, events) - except Exception as e: - print(f"Conductor error: {e}") - add_chat(f"⚠ 回复失败:{e}", role="error") + self._publish_model_state(model_state, running=True) + try: + dq = self.agent.put_task(prompt, source="conductor") + self._drain(dq, events) + finally: + self._publish_model_state(model_state, running=False) + except Exception as e: print(f"Conductor error: {e}") def start(self): - self.agent = GenericAgent(); _apply_desktop_model(self.agent) + self.agent = GenericAgent() + self._publish_model_state(_apply_desktop_model(self.agent), running=False) threading.Thread(target=self._run, name="conductor-loop", daemon=True).start() @@ -494,9 +654,6 @@ def start(self): # ---- IM poller: 探测conductor_im_plugins/下各插件,信号变化→唤醒总管 ---- def _resolve_im_dir() -> str: - # 方案三: conductor.py itself is bundle-owned, but IM plugins are user/environment - # integrations. Prefer the external core's plugins when GA_ROOT points at one; fall back - # to the bundle templates/examples when the external core has no plugin directory. external = os.path.join(ROOT, "frontends", "conductor_im_plugins") if os.path.isdir(external): return external @@ -640,12 +797,12 @@ async def websocket(ws: WebSocket): ws_clients.add(ws) try: running = any(s.status == "running" for s in pool.subagents.values()) - await ws.send_json({"type": "hello", "subagents": pool.snapshot(), "chat": chat_messages, "log": conductor.log, "running": running, "llms": conductor.agent.list_llms(), "llm": conductor.agent.llm_no}) + await ws.send_json({"type": "hello", "subagents": pool.snapshot(), "chat": chat_messages, + "log": conductor.log, "running": running, + "model": conductor.model_snapshot(), + "llms": conductor.agent.list_llms(), "llm": conductor.agent.llm_no}) while True: data = await ws.receive_json() - if "llm" in data: - if type(n := data["llm"]) is int and 0 <= n < len(conductor.agent.list_llms()): conductor.agent.next_llm(n) - continue msg = (data.get("msg") or "").strip() if not msg: continue add_chat(msg, role="user", files=data.get("files") or [], images=data.get("images") or []) diff --git a/frontends/cost_tracker.py b/frontends/cost_tracker.py index 744258982..c83ccfe7c 100644 --- a/frontends/cost_tracker.py +++ b/frontends/cost_tracker.py @@ -9,8 +9,9 @@ same `[Cache]` / `[Output]` print lines from `temp/*/stdout.log`. """ from __future__ import annotations -import glob, os, re, threading, time +import glob, json, os, re, threading, time from dataclasses import dataclass, field +from pathlib import Path @dataclass @@ -70,6 +71,247 @@ def current_input_chars(backend) -> int: _INSTALLED = False _SUBAGENT_GLOB = os.path.join("temp", "*", "stdout.log") +# ── Per-call ledger ────────────────────────────────────────────────────────── + +_ledger_path: Path | None = None +_ledger_fd = None +_ledger_lock = threading.RLock() +_ledger_uncompacted_bytes = 0 +_LEDGER_FILENAME = "token_ledger.jsonl" +_LEGACY_HISTORY_FILENAME = "desktop_token_history.json" +_COMPACT_THRESHOLD = 10 * 1024 * 1024 # 10MB + + +def _migrate_legacy_history_unlocked() -> None: + """Seed an empty ledger from the previous aggregate JSON format once.""" + global _ledger_uncompacted_bytes + if _ledger_path is None or _ledger_fd is None: + return + legacy_path = _ledger_path.with_name(_LEGACY_HISTORY_FILENAME) + try: + if _ledger_path.stat().st_size or not legacy_path.is_file(): + return + doc = json.loads(legacy_path.read_text(encoding="utf-8")) + if not isinstance(doc, dict) or not isinstance(doc.get("snap"), dict): + return + metadata: dict[str, dict] = {} + for entry in doc.get("history", []): + if not isinstance(entry, dict): + continue + sid = entry.get("sessionId") or entry.get("id") + if not isinstance(sid, str) or not sid: + continue + key = sid if sid.startswith("GA-") else f"GA-{sid}" + try: + ts = float(entry.get("ts", 0) or 0) + except (TypeError, ValueError): + ts = 0 + if key not in metadata or ts >= metadata[key]["ts"]: + metadata[key] = { + "ts": ts, + "model": entry.get("model") if isinstance(entry.get("model"), str) else "", + "title": entry.get("title") if isinstance(entry.get("title"), str) else "", + } + fallback_ts = legacy_path.stat().st_mtime + for key, totals in doc["snap"].items(): + if not isinstance(key, str) or not key or not isinstance(totals, dict): + continue + try: + values = { + "i": int(totals.get("input", 0) or 0), + "o": int(totals.get("output", 0) or 0), + "cc": int(totals.get("cacheCreate", totals.get("cacheWrite", 0)) or 0), + "cr": int(totals.get("cacheRead", 0) or 0), + } + except (TypeError, ValueError): + continue + meta = metadata.get(key, {}) + line = json.dumps( + {"t": meta.get("ts") or fallback_ts, "k": key, **values, + "m": meta.get("model", ""), "n": meta.get("title", ""), "_migrated": True}, + separators=(",", ":"), + ) + "\n" + _ledger_fd.write(line) + _ledger_uncompacted_bytes += len(line.encode("utf-8")) + _ledger_fd.flush() + except Exception: + return + + +def init_ledger(root: str) -> None: + """Call once at bridge startup to set the ledger file path.""" + global _ledger_path, _ledger_fd, _ledger_uncompacted_bytes + with _ledger_lock: + if _ledger_fd is not None: + try: + _ledger_fd.close() + except Exception: + pass + _ledger_path = Path(root) / "temp" / _LEDGER_FILENAME + _ledger_path.parent.mkdir(parents=True, exist_ok=True) + _ledger_fd = open(_ledger_path, "a", encoding="utf-8") + try: + _ledger_uncompacted_bytes = _ledger_path.stat().st_size + if _ledger_uncompacted_bytes == 0: + _migrate_legacy_history_unlocked() + if _ledger_uncompacted_bytes >= _COMPACT_THRESHOLD: + _compact_ledger() + except OSError: + _ledger_uncompacted_bytes = 0 + + +def _append_ledger(thread_key: str, inp: int, out: int, cc: int, cr: int) -> None: + global _ledger_uncompacted_bytes + # TUI and conductor processes install the in-memory tracker but never call + # init_ledger(). Keep their historical hot path to one lock-free branch: + # no clock lookup, JSON encoding, byte counting, or ledger lock acquisition. + if _ledger_fd is None: + return + line = json.dumps( + {"t": time.time(), "k": thread_key, "i": inp, "o": out, "cc": cc, "cr": cr}, + separators=(",", ":"), + ) + "\n" + with _ledger_lock: + if _ledger_fd is None: + return + try: + _ledger_fd.write(line) + _ledger_fd.flush() + _ledger_uncompacted_bytes += len(line.encode("utf-8")) + if _ledger_uncompacted_bytes >= _COMPACT_THRESHOLD: + _compact_ledger() + except Exception: + pass + + +def _iter_ledger_unlocked(): + if _ledger_path is None or not _ledger_path.is_file(): + return + try: + with open(_ledger_path, "r", encoding="utf-8") as f: + for line in f: + line = line.strip() + if not line: + continue + try: + entry = json.loads(line) + if isinstance(entry, dict): + yield entry + except (json.JSONDecodeError, ValueError): + continue + except OSError: + return + + +def read_ledger() -> list[dict]: + """Read all valid lines from the ledger. Skips corrupted lines.""" + with _ledger_lock: + return list(_iter_ledger_unlocked()) + + +def _aggregate_sessions(entries) -> dict[str, dict]: + sessions: dict[str, dict] = {} + for e in entries: + k = e.get("k", "") + if not isinstance(k, str) or not k: + continue + try: + ts = float(e.get("t", 0) or 0) + inp = int(e.get("i", 0) or 0) + out = int(e.get("o", 0) or 0) + cc = int(e.get("cc", 0) or 0) + cr = int(e.get("cr", 0) or 0) + except (TypeError, ValueError): + continue + if k not in sessions: + sessions[k] = {"input": 0, "output": 0, "cacheCreate": 0, "cacheRead": 0, + "model": "", "title": "", "first_ts": ts, "last_ts": ts} + s = sessions[k] + s["input"] += inp + s["output"] += out + s["cacheCreate"] += cc + s["cacheRead"] += cr + s["first_ts"] = min(s["first_ts"], ts) + s["last_ts"] = max(s["last_ts"], ts) + if isinstance(e.get("m"), str) and e["m"]: + s["model"] = e["m"] + if isinstance(e.get("n"), str) and e["n"]: + s["title"] = e["n"] + return sessions + + +def _format_aggregate(sessions: dict[str, dict]) -> dict: + history = [] + snap = {} + for k, s in sessions.items(): + sid = k.removeprefix("GA-") + history.append({ + "sessionId": sid, + "title": s["title"] or sid, + "input": s["input"], + "output": s["output"], + "cacheCreate": s["cacheCreate"], + "cacheRead": s["cacheRead"], + "model": s["model"], + "ts": s["last_ts"], + }) + snap[k] = { + "input": s["input"], + "output": s["output"], + "cacheCreate": s["cacheCreate"], + "cacheRead": s["cacheRead"], + } + return {"history": history, "snap": snap} + + +def aggregate_ledger() -> dict: + """Aggregate ledger into {history: [...], snap: {...}} for /token-history.""" + with _ledger_lock: + return _format_aggregate(_aggregate_sessions(_iter_ledger_unlocked())) + + +def _compact_ledger() -> None: + """Compact ledger by aggregating into per-session totals and rewriting.""" + if _ledger_path is None: + return + global _ledger_fd, _ledger_uncompacted_bytes + with _ledger_lock: + temp_path = _ledger_path.with_suffix(".jsonl.tmp") + try: + if _ledger_fd is not None: + _ledger_fd.flush() + sessions = _aggregate_sessions(_iter_ledger_unlocked()) + with open(temp_path, "w", encoding="utf-8") as f: + for k, s in sessions.items(): + line = json.dumps( + {"t": s["last_ts"], "k": k, "i": s["input"], "o": s["output"], + "cc": s["cacheCreate"], "cr": s["cacheRead"], "m": s["model"], + "n": s["title"], + "_compacted": True}, + separators=(",", ":"), + ) + f.write(line + "\n") + f.flush() + os.fsync(f.fileno()) + if _ledger_fd is not None: + _ledger_fd.close() + _ledger_fd = None + os.replace(temp_path, _ledger_path) + _ledger_fd = open(_ledger_path, "a", encoding="utf-8") + _ledger_uncompacted_bytes = 0 + except Exception: + try: + temp_path.unlink(missing_ok=True) + except Exception: + pass + if _ledger_fd is None: + try: + _ledger_fd = open(_ledger_path, "a", encoding="utf-8") + except Exception: + pass + + +# ── Core API ───────────────────────────────────────────────────────────────── def scan_subagent_logs(since: float = 0.0, root: str | None = None) -> TokenStats: """Aggregate subagent tokens from `temp//stdout.log` files; pass @@ -135,6 +377,7 @@ def record_patched(usage, api_mode): if usage: t = get(threading.current_thread().name) t.requests += 1 + inp = cc = cr = 0 if api_mode == 'messages': inp = int(usage.get('input_tokens', 0) or 0) cc = int(usage.get('cache_creation_input_tokens', 0) or 0) @@ -144,18 +387,24 @@ def record_patched(usage, api_mode): # output_tokens here; SSE message_start carries a 1-token # placeholder to skip. out = int(usage.get('output_tokens', 0) or 0) - if out > 1: t.output += out; t.last_output = out + if out > 1: + t.output += out; t.last_output = out + _append_ledger(threading.current_thread().name, inp, out, cc, cr) + else: + _append_ledger(threading.current_thread().name, inp, 0, cc, cr) t.last_input = inp + cc + cr elif api_mode == 'chat_completions': cached = int((usage.get('prompt_tokens_details') or {}).get('cached_tokens', 0) or 0) inp = int(usage.get('prompt_tokens', 0) or 0) - cached t.input += inp; t.cache_read += cached t.last_input = inp + cached + _append_ledger(threading.current_thread().name, inp, 0, 0, cached) elif api_mode == 'responses': cached = int((usage.get('input_tokens_details') or {}).get('cached_tokens', 0) or 0) inp = int(usage.get('input_tokens', 0) or 0) - cached t.input += inp; t.cache_read += cached t.last_input = inp + cached + _append_ledger(threading.current_thread().name, inp, 0, 0, cached) except Exception: pass return orig_record(usage, api_mode) llmcore._record_usage = record_patched @@ -168,6 +417,7 @@ def print_patched(*args, **kwargs): t = get(threading.current_thread().name) n = int(m.group(1)) t.output += n; t.last_output = n + _append_ledger(threading.current_thread().name, 0, n, 0, 0) except Exception: pass return orig_print(*args, **kwargs) llmcore.print = print_patched diff --git a/frontends/data_backup.py b/frontends/data_backup.py new file mode 100644 index 000000000..10e83f99b --- /dev/null +++ b/frontends/data_backup.py @@ -0,0 +1,857 @@ +"""Safe, dependency-free import/export helpers for desktop data snapshots.""" +from __future__ import annotations + +import contextlib +import datetime as dt +import errno +import json +import math +import os +import re +import shutil +import stat +import tempfile +import uuid +import zipfile +from pathlib import Path, PurePosixPath +from typing import Any, Callable, Iterable, Iterator + + +BACKUP_SCHEMA = "genericagent.data-backup" +BACKUP_FORMAT_VERSION = 1 +MAX_ARCHIVE_ENTRIES = 100_000 +MAX_ARCHIVE_UNCOMPRESSED_BYTES = 2 * 1024 * 1024 * 1024 + +_DATA_PREFIXES = ( + PurePosixPath("memory"), + PurePosixPath("temp/model_responses"), + PurePosixPath("temp/desktop_sessions"), +) + +_DESKTOP_SESSION_ID_RE = re.compile(r"[A-Za-z0-9][A-Za-z0-9_-]{0,127}") + + +class BackupFormatError(ValueError): + """Raised when a backup cannot be trusted or is not compatible.""" + + +def _is_relative_to(path: PurePosixPath, parent: PurePosixPath) -> bool: + return path == parent or parent in path.parents + + +def _is_native_relative_to(path: Path, parent: Path) -> bool: + try: + path.relative_to(parent) + return True + except ValueError: + return False + + +def _is_link_or_reparse(path: Path) -> bool: + """Recognise POSIX links plus Windows junction/reparse-point indirection.""" + try: + if path.is_symlink(): + return True + is_junction = getattr(path, "is_junction", None) + if callable(is_junction) and is_junction(): + return True + attributes = int(getattr(os.lstat(path), "st_file_attributes", 0) or 0) + reparse_flag = int(getattr(stat, "FILE_ATTRIBUTE_REPARSE_POINT", 0x400)) + return bool(attributes & reparse_flag) + except OSError: + return False + + +def _resolved_directory(value: str | Path, label: str) -> Path: + raw = Path(value).expanduser() + if _is_link_or_reparse(raw): + raise ValueError(f"{label} cannot be a link or reparse point") + try: + resolved = raw.resolve(strict=True) + except OSError as error: + raise ValueError(f"{label} is unavailable") from error + if not resolved.is_dir() or _is_link_or_reparse(resolved): + raise ValueError(f"{label} is unavailable") + return resolved + + +def _assert_contained(path: Path, root: Path, label: str) -> Path: + try: + resolved = path.resolve(strict=True) + except OSError as error: + raise ValueError(f"{label} is unavailable") from error + if not _is_native_relative_to(resolved, root): + raise ValueError(f"{label} escapes its data root") + return resolved + + +def _archive_path(name: str) -> PurePosixPath: + if not name or "\\" in name: + raise BackupFormatError("invalid backup entry path") + if any(part in ("", ".", "..") for part in name.split("/")): + raise BackupFormatError("invalid backup entry path") + path = PurePosixPath(name) + if path.is_absolute() or any(part in ("", ".", "..") for part in path.parts): + raise BackupFormatError("invalid backup entry path") + return path + + +def _is_allowed_data_path(path: PurePosixPath) -> bool: + return any(_is_relative_to(path, prefix) for prefix in _DATA_PREFIXES) + + +def _iter_regular_files(root: Path) -> Iterator[tuple[Path, PurePosixPath]]: + root = root.resolve() + for folder, dirs, files in os.walk(root, followlinks=False): + folder_path = Path(folder) + if _is_link_or_reparse(folder_path): + raise ValueError(f"data folder contains a link or reparse point: {folder_path}") + safe_dirs: list[str] = [] + for name in sorted(dirs): + candidate = folder_path / name + if _is_link_or_reparse(candidate): + raise ValueError(f"data folder contains a link or reparse point: {candidate}") + _assert_contained(candidate, root, "data folder") + safe_dirs.append(name) + dirs[:] = safe_dirs + for name in sorted(files): + source = folder_path / name + if _is_link_or_reparse(source): + raise ValueError(f"data folder contains a link or reparse point: {source}") + if not source.is_file(): + raise ValueError(f"data folder contains an unsupported file: {source}") + _assert_contained(source, root, "data file") + relative = PurePosixPath(source.relative_to(root).as_posix()) + yield source, relative + + +def _source_files(root: Path) -> list[tuple[Path, PurePosixPath]]: + files: list[tuple[Path, PurePosixPath]] = [] + for prefix in _DATA_PREFIXES: + source_root = root.joinpath(*prefix.parts) + if not source_root.exists(): + continue + if _is_link_or_reparse(source_root) or not source_root.is_dir(): + raise ValueError(f"data folder is not a safe directory: {source_root}") + for source, relative in _iter_regular_files(source_root): + files.append((source, prefix / relative)) + return files + + +def _content_counts(paths: list[PurePosixPath]) -> dict[str, int]: + return { + "memory": sum(_is_relative_to(path, _DATA_PREFIXES[0]) for path in paths), + "responses": sum(_is_relative_to(path, _DATA_PREFIXES[1]) for path in paths), + "sessions": sum(_is_relative_to(path, _DATA_PREFIXES[2]) for path in paths), + } + + +def _normalise_source_mode(value: str) -> str: + if value not in ("included", "localRepository"): + raise BackupFormatError("invalid backup source mode") + return value + + +def _manifest(source_mode: str, paths: list[PurePosixPath]) -> dict: + exported_at = dt.datetime.now(dt.timezone.utc).replace(microsecond=0) + return { + "schema": BACKUP_SCHEMA, + "formatVersion": BACKUP_FORMAT_VERSION, + "exportedAt": exported_at.isoformat().replace("+00:00", "Z"), + "sourceMode": _normalise_source_mode(source_mode), + "content": _content_counts(paths), + } + + +def export_data_backup( + ga_root: str, + destination_path: str, + source_mode: str, + *, + forbidden_roots: Iterable[str | Path] = (), +) -> dict: + root = _resolved_directory(ga_root, "current data source") + raw_destination = Path(destination_path).expanduser() + if _is_link_or_reparse(raw_destination): + raise ValueError("backup destination cannot be a link or reparse point") + destination = raw_destination.resolve() + if destination.suffix.lower() != ".zip": + raise ValueError("backup destination must be a zip file") + if not destination.parent.is_dir() or _is_link_or_reparse(destination.parent): + raise ValueError("backup destination folder does not exist") + protected_roots = [root.joinpath(*prefix.parts).resolve() for prefix in _DATA_PREFIXES] + protected_roots.extend(Path(value).expanduser().resolve() for value in forbidden_roots) + if any(_is_native_relative_to(destination, protected) for protected in protected_roots): + raise ValueError("backup destination is inside protected application data") + + files = _source_files(root) + paths = [relative for _, relative in files] + if not paths: + raise BackupFormatError("backup contains no importable data") + manifest = _manifest(source_mode, paths) + manifest_bytes = ( + json.dumps(manifest, ensure_ascii=False, indent=2) + "\n" + ).encode("utf-8") + if len(files) + 1 > MAX_ARCHIVE_ENTRIES: + raise BackupFormatError("backup contains too many files") + total_bytes = len(manifest_bytes) + for source, _relative in files: + _assert_contained(source, root, "data file") + total_bytes += source.stat().st_size + if total_bytes > MAX_ARCHIVE_UNCOMPRESSED_BYTES: + raise BackupFormatError("backup is too large") + + temp_handle = tempfile.NamedTemporaryFile( + prefix=f".{destination.stem}.", + suffix=".tmp", + dir=destination.parent, + delete=False, + ) + temp_path = Path(temp_handle.name) + temp_handle.close() + try: + with zipfile.ZipFile( + temp_path, + "w", + compression=zipfile.ZIP_DEFLATED, + compresslevel=6, + ) as archive: + archive.writestr("manifest.json", manifest_bytes) + for source, relative in files: + if _is_link_or_reparse(source): + raise ValueError(f"data file became a link or reparse point: {source}") + _assert_contained(source, root, "data file") + archive.write(source, relative.as_posix()) + # Validate the bytes that will actually replace the destination. A source + # can change after the preflight stat, and ZipFile only finalises CRCs and + # the central directory when it closes. + with zipfile.ZipFile(temp_path, "r") as archive: + _validated_zip(archive) + os.replace(temp_path, destination) + except Exception: + with contextlib.suppress(OSError): + temp_path.unlink() + raise + + return { + "ok": True, + "path": str(destination), + "formatVersion": BACKUP_FORMAT_VERSION, + "exportedAt": manifest["exportedAt"], + "sourceMode": manifest["sourceMode"], + "content": manifest["content"], + } + + +def _validated_zip(archive: zipfile.ZipFile) -> tuple[dict, list[zipfile.ZipInfo]]: + infos = archive.infolist() + if len(infos) > MAX_ARCHIVE_ENTRIES: + raise BackupFormatError("backup contains too many files") + total_bytes = sum(info.file_size for info in infos) + if total_bytes > MAX_ARCHIVE_UNCOMPRESSED_BYTES: + raise BackupFormatError("backup is too large") + if archive.testzip() is not None: + raise BackupFormatError("backup is corrupt") + + manifest_info: zipfile.ZipInfo | None = None + data_infos: list[zipfile.ZipInfo] = [] + seen_paths: set[str] = set() + for info in infos: + path = _archive_path(info.filename.rstrip("/")) + folded_path = path.as_posix().casefold() + if folded_path in seen_paths: + raise BackupFormatError("backup contains duplicate file paths") + seen_paths.add(folded_path) + unix_mode = (info.external_attr >> 16) & 0o170000 + if unix_mode == stat.S_IFLNK: + raise BackupFormatError("backup contains links") + if path == PurePosixPath("manifest.json"): + if info.is_dir() or manifest_info is not None: + raise BackupFormatError("backup manifest is invalid") + manifest_info = info + continue + if not _is_allowed_data_path(path): + raise BackupFormatError("backup contains unsupported files") + if not info.is_dir(): + data_infos.append(info) + + if manifest_info is None: + raise BackupFormatError("backup manifest is missing") + try: + manifest = json.loads(archive.read(manifest_info).decode("utf-8")) + except Exception as error: + raise BackupFormatError("backup manifest is invalid") from error + if not isinstance(manifest, dict): + raise BackupFormatError("backup manifest is invalid") + if manifest.get("schema") != BACKUP_SCHEMA: + raise BackupFormatError("backup format is not supported") + if manifest.get("formatVersion") != BACKUP_FORMAT_VERSION: + raise BackupFormatError("backup version is not supported") + _normalise_source_mode(str(manifest.get("sourceMode") or "")) + if not isinstance(manifest.get("exportedAt"), str) or not manifest["exportedAt"]: + raise BackupFormatError("backup export time is missing") + + actual_counts = _content_counts([ + _archive_path(info.filename) for info in data_infos + ]) + if not data_infos: + raise BackupFormatError("backup contains no importable data") + if manifest.get("content") != actual_counts: + raise BackupFormatError("backup content summary does not match its files") + return manifest, data_infos + + +def _legacy_inspection(root: Path) -> dict: + files = _source_files(root) + paths = [relative for _, relative in files] + session_items, _sessions_found, _sessions_skipped = _read_source_sessions(root) + counts = _content_counts(paths) + counts["sessions"] = len(session_items) + if not any(counts.values()): + raise BackupFormatError("not a GA data source (no importable data)") + return { + "ok": True, + "sourceType": "legacyFolder", + "formatVersion": None, + "exportedAt": None, + "sourceMode": None, + "content": counts, + } + + +def inspect_import_source(source_path: str) -> dict: + raw_source = Path(source_path).expanduser() + if _is_link_or_reparse(raw_source): + raise BackupFormatError("import source cannot be a link or reparse point") + source = raw_source.resolve() + if source.is_dir() and not _is_link_or_reparse(source): + return _legacy_inspection(source) + if not source.is_file() or source.suffix.lower() != ".zip": + raise BackupFormatError("select a compatible backup or data folder") + try: + with zipfile.ZipFile(source, "r") as archive: + manifest, _ = _validated_zip(archive) + except zipfile.BadZipFile as error: + raise BackupFormatError("backup is corrupt") from error + return { + "ok": True, + "sourceType": "backupZip", + "formatVersion": manifest["formatVersion"], + "exportedAt": manifest["exportedAt"], + "sourceMode": manifest["sourceMode"], + "content": manifest["content"], + } + + +@contextlib.contextmanager +def materialize_import_source(source_path: str) -> Iterator[Path]: + raw_source = Path(source_path).expanduser() + if _is_link_or_reparse(raw_source): + raise BackupFormatError("import source cannot be a link or reparse point") + source = raw_source.resolve() + inspection = inspect_import_source(str(source)) + if inspection["sourceType"] == "legacyFolder": + yield source + return + + with tempfile.TemporaryDirectory(prefix="genericagent-data-import-") as temp_dir: + target_root = _resolved_directory(temp_dir, "import staging") + try: + with zipfile.ZipFile(source, "r") as archive: + _, data_infos = _validated_zip(archive) + for info in data_infos: + relative = _archive_path(info.filename) + target = target_root.joinpath(*relative.parts) + _assert_safe_new_target(target_root, target) + target.parent.mkdir(parents=True, exist_ok=True) + _assert_contained(target.parent, target_root, "import destination") + if target.exists() or _is_link_or_reparse(target): + raise BackupFormatError("backup contains duplicate or unsafe paths") + with archive.open(info, "r") as reader, target.open("wb") as writer: + shutil.copyfileobj(reader, writer) + _assert_contained(target, target_root, "import destination") + except zipfile.BadZipFile as error: + raise BackupFormatError("backup is corrupt") from error + yield target_root + + +def _is_desktop_session_id(value: object) -> bool: + if not isinstance(value, str): + return False + session_id = value + return ( + not session_id.startswith("tui_") + and _DESKTOP_SESSION_ID_RE.fullmatch(session_id) is not None + ) + + +def _finite_timestamp(value: object, default: float) -> float: + if value is None: + return default + if isinstance(value, bool) or not isinstance(value, (int, float)): + raise BackupFormatError("session timestamp is invalid") + timestamp = float(value) + if not math.isfinite(timestamp): + raise BackupFormatError("session timestamp is invalid") + return timestamp + + +def _non_negative_integer(value: object, default: int, label: str) -> int: + if value is None: + return default + if isinstance(value, bool) or not isinstance(value, int) or value < 0: + raise BackupFormatError(f"session {label} is invalid") + return value + + +def _record_list(value: object, default: list[dict], label: str) -> list[dict]: + if value is None: + return list(default) + if not isinstance(value, list) or not all(isinstance(item, dict) for item in value): + raise BackupFormatError(f"session {label} is invalid") + return value + + +def canonical_session_record( + item: object, + *, + default_cwd: str = "", + now: float | None = None, +) -> dict[str, Any]: + """Validate and reduce an imported/persisted Desktop session to its schema.""" + if not isinstance(item, dict): + raise BackupFormatError("session record is invalid") + session_id = item.get("id") + if not _is_desktop_session_id(session_id): + raise BackupFormatError("session id is invalid") + current_time = float(now if now is not None else dt.datetime.now().timestamp()) + title = item.get("title", "New chat") + cwd = item.get("cwd", default_cwd) + plan_path = item.get("plan_path", "") + if not isinstance(title, str) or not isinstance(cwd, str) or not isinstance(plan_path, str): + raise BackupFormatError("session text field is invalid") + messages = _record_list(item.get("messages"), [], "messages") + llm_history_value = item.get("llm_history") + llm_history = None if llm_history_value is None else _record_list( + llm_history_value, [], "llm history" + ) + llm_no_value = item.get("llm_no") + llm_no = None if llm_no_value is None else _non_negative_integer( + llm_no_value, 0, "model index" + ) + pinned = item.get("pinned", False) + untitled = item.get("untitled", True) + if not isinstance(pinned, bool) or not isinstance(untitled, bool): + raise BackupFormatError("session boolean field is invalid") + return { + "id": session_id, + "title": title, + "cwd": cwd, + "created_at": _finite_timestamp(item.get("created_at"), current_time), + "updated_at": _finite_timestamp(item.get("updated_at"), current_time), + "messages": messages, + "msg_seq": _non_negative_integer(item.get("msg_seq"), 0, "message sequence"), + "pinned": pinned, + "untitled": untitled, + "plan_scan_baseline": _non_negative_integer( + item.get("plan_scan_baseline"), 0, "plan baseline" + ), + "plan_path": plan_path, + "llm_no": llm_no, + "llm_history": llm_history, + } + + +def _read_source_sessions(source: Path) -> tuple[list[dict], bool, int]: + """Read supported Desktop session stores without trusting filenames. + + Corrupt/non-Desktop records are skipped. The skipped count is intentionally + record-oriented; an unreadable file counts as one skipped source record. + """ + items: list[dict] = [] + found = False + skipped = 0 + sessions_dir = source / "temp" / "desktop_sessions" + if sessions_dir.exists() and _is_link_or_reparse(sessions_dir): + raise ValueError(f"session source contains a link or reparse point: {sessions_dir}") + if sessions_dir.is_dir(): + for session_file in sorted(sessions_dir.glob("*.json")): + if _is_link_or_reparse(session_file): + raise ValueError( + f"session source contains a link or reparse point: {session_file}" + ) + if not session_file.is_file(): + raise ValueError(f"session source contains an unsupported file: {session_file}") + found = True + try: + raw_item = json.loads(session_file.read_text(encoding="utf-8")) + item = canonical_session_record(raw_item) + except (OSError, UnicodeError, json.JSONDecodeError, ValueError): + skipped += 1 + continue + items.append(item) + + for legacy in ( + source / "temp" / "desktop_sessions.json", + source / "temp" / "desktop_sessions.json.migrated", + ): + if _is_link_or_reparse(legacy): + raise ValueError(f"session source contains a link or reparse point: {legacy}") + if not legacy.is_file(): + continue + found = True + try: + document = json.loads(legacy.read_text(encoding="utf-8")) + except (OSError, UnicodeError, json.JSONDecodeError, ValueError): + skipped += 1 + continue + if not isinstance(document, list): + skipped += 1 + continue + for item in document: + try: + items.append(canonical_session_record(item)) + except ValueError: + skipped += 1 + return items, found, skipped + + +def _existing_session_ids(destination_root: Path) -> set[str]: + ids: set[str] = set() + sessions_dir = destination_root / "temp" / "desktop_sessions" + if _is_link_or_reparse(sessions_dir): + raise ValueError(f"session destination contains a link or reparse point: {sessions_dir}") + if not sessions_dir.is_dir(): + return ids + for session_file in sorted(sessions_dir.glob("*.json")): + if _is_link_or_reparse(session_file): + raise ValueError( + f"session destination contains a link or reparse point: {session_file}" + ) + if not session_file.is_file(): + raise ValueError(f"session destination contains an unsupported file: {session_file}") + if _is_desktop_session_id(session_file.stem): + ids.add(session_file.stem) + try: + item = canonical_session_record( + json.loads(session_file.read_text(encoding="utf-8")) + ) + except (OSError, UnicodeError, json.JSONDecodeError, ValueError): + continue + ids.add(item["id"]) + return ids + + +def _remove_path(path: Path) -> None: + if _is_link_or_reparse(path) or path.is_file(): + path.unlink() + elif path.is_dir(): + shutil.rmtree(path) + + +def _copy_tree_strict(source: Path, destination: Path) -> None: + """Copy a complete tree while refusing links and special files.""" + if _is_link_or_reparse(source) or not source.is_dir(): + raise ValueError(f"cannot safely copy data folder: {source}") + destination.mkdir(parents=True, exist_ok=False) + for item in sorted(source.iterdir(), key=lambda path: path.name): + if _is_link_or_reparse(item): + raise ValueError(f"data folder contains a link or reparse point: {item}") + _assert_contained(item, source, "data item") + target = destination / item.name + if item.is_dir(): + _copy_tree_strict(item, target) + elif item.is_file(): + shutil.copy2(item, target) + else: + raise ValueError(f"data folder contains an unsupported file: {item}") + + +def _prepare_overlay_target(root: Path, relative: PurePosixPath) -> Path: + current = root + for part in relative.parts[:-1]: + current = current / part + if _is_link_or_reparse(current): + raise ValueError(f"memory destination contains a link or reparse point: {current}") + if current.exists() and not current.is_dir(): + _remove_path(current) + current.mkdir(exist_ok=True) + _assert_contained(current, root, "memory destination") + target = root.joinpath(*relative.parts) + if _is_link_or_reparse(target): + raise ValueError(f"memory destination contains a link or reparse point: {target}") + if target.is_dir(): + _remove_path(target) + return target + + +def _assert_safe_new_target(root: Path, target: Path) -> None: + relative = target.relative_to(root) + current = root + for part in relative.parts[:-1]: + current = current / part + if _is_link_or_reparse(current): + raise ValueError(f"data destination contains a link or reparse point: {current}") + if current.exists() and not current.is_dir(): + raise ValueError(f"data destination parent is not a directory: {current}") + if current.exists(): + _assert_contained(current, root, "data destination") + if _is_link_or_reparse(target): + raise ValueError(f"data destination contains a link or reparse point: {target}") + + +def _new_backup_path(destination_root: Path) -> Path: + timestamp = dt.datetime.now().strftime("%Y%m%d_%H%M%S_%f") + backup_parent = destination_root / "temp" + for suffix in range(1000): + tail = "" if suffix == 0 else f"_{suffix}" + candidate = backup_parent / f"memory_import_backup_{timestamp}{tail}" + if not candidate.exists() and not _is_link_or_reparse(candidate): + return candidate + raise OSError("cannot allocate a unique memory backup directory") + + +def _create_memory_backup(destination_root: Path, memory_root: Path) -> Path: + backup_dir = _new_backup_path(destination_root) + backup_parent = backup_dir.parent + if _is_link_or_reparse(backup_parent) or ( + backup_parent.exists() and not backup_parent.is_dir() + ): + raise ValueError("current backup destination is not a safe directory") + backup_parent.mkdir(parents=True, exist_ok=True) + _assert_contained(backup_parent, destination_root, "backup destination") + staging = backup_parent / f".{backup_dir.name}.staging-{uuid.uuid4().hex}" + try: + staging.mkdir() + _copy_tree_strict(memory_root, staging / "memory") + os.replace(staging, backup_dir) + except Exception: + with contextlib.suppress(OSError): + _remove_path(staging) + raise + return backup_dir + + +def _install_file_add_only(staged: Path, target: Path) -> None: + """Install one staged file without ever replacing an existing path.""" + try: + os.link(staged, target, follow_symlinks=False) + except OSError as error: + unsupported_link_errors = { + errno.EINVAL, + errno.EPERM, + errno.EXDEV, + getattr(errno, "ENOTSUP", errno.EINVAL), + getattr(errno, "EOPNOTSUPP", errno.EINVAL), + } + if error.errno not in unsupported_link_errors: + raise + + # Some removable/network filesystems do not implement hard links. + # O_EXCL retains the add-only contract there; a failed copy removes + # only the path this call successfully created. + flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL + flags |= getattr(os, "O_BINARY", 0) + descriptor: int | None = None + created = False + try: + descriptor = os.open(target, flags, stat.S_IMODE(staged.stat().st_mode)) + created = True + with staged.open("rb") as reader, os.fdopen(descriptor, "wb") as writer: + descriptor = None + shutil.copyfileobj(reader, writer) + writer.flush() + os.fsync(writer.fileno()) + except Exception: + if descriptor is not None: + with contextlib.suppress(OSError): + os.close(descriptor) + if created: + with contextlib.suppress(OSError): + target.unlink() + raise + with contextlib.suppress(OSError): + staged.unlink() + + +def merge_data_files( + source_dir: str, + ga_root: str, + *, + existing_session_ids: Iterable[str] | None = None, + session_preparer: Callable[[dict], object] | None = None, +) -> dict[str, Any]: + """Transactionally merge a validated data tree into ``ga_root``. + + ``memory`` is source-wins after a durable full backup, responses and + Desktop sessions are add-only, and any activation error rolls back files + installed by this call. ``session_preparer`` lets the bridge validate and + construct its in-memory Session objects before any destination is changed. + """ + source = _resolved_directory(source_dir, "source data folder") + destination_root = _resolved_directory(ga_root, "current data destination") + if source == destination_root: + raise ValueError("source is the same as current data") + + inspection = _legacy_inspection(source) + source_memory = source.joinpath(*_DATA_PREFIXES[0].parts) + source_responses = source.joinpath(*_DATA_PREFIXES[1].parts) + destination_memory = destination_root.joinpath(*_DATA_PREFIXES[0].parts) + destination_responses = destination_root.joinpath(*_DATA_PREFIXES[1].parts) + has_source_memory = source_memory.is_dir() and not _is_link_or_reparse(source_memory) + + memory_files = list(_iter_regular_files(source_memory)) if has_source_memory else [] + response_files: list[tuple[Path, PurePosixPath, Path]] = [] + responses_skipped = 0 + if source_responses.exists() and _is_link_or_reparse(source_responses): + raise ValueError(f"response source contains a link or reparse point: {source_responses}") + if source_responses.is_dir(): + for item, relative in _iter_regular_files(source_responses): + target = destination_responses.joinpath(*relative.parts) + if target.exists() or _is_link_or_reparse(target): + responses_skipped += 1 + continue + _assert_safe_new_target(destination_root, target) + response_files.append((item, relative, target)) + + source_session_items, sessions_found, sessions_skipped = _read_source_sessions(source) + known_session_ids = _existing_session_ids(destination_root) + if existing_session_ids is not None: + known_session_ids.update( + str(value) for value in existing_session_ids if _is_desktop_session_id(value) + ) + planned_session_ids: set[str] = set() + session_files: list[tuple[str, dict, Path, object]] = [] + for item in source_session_items: + session_id = item.get("id") + if not _is_desktop_session_id(session_id): + sessions_skipped += 1 + continue + session_id = str(session_id) + target = destination_root / "temp" / "desktop_sessions" / f"{session_id}.json" + if ( + session_id in known_session_ids + or session_id in planned_session_ids + or target.exists() + or _is_link_or_reparse(target) + ): + sessions_skipped += 1 + continue + _assert_safe_new_target(destination_root, target) + try: + prepared = session_preparer(item) if session_preparer is not None else item + except Exception: + sessions_skipped += 1 + continue + planned_session_ids.add(session_id) + session_files.append((session_id, item, target, prepared)) + + backup_dir = "" + prepared_sessions = [entry[3] for entry in session_files] + with tempfile.TemporaryDirectory( + prefix=".genericagent-memory-import-", + dir=destination_root, + ) as temp_dir: + staging_root = Path(temp_dir) + if _is_link_or_reparse(staging_root): + raise ValueError("import staging cannot be a link or reparse point") + _assert_contained(staging_root, destination_root, "import staging") + staged_memory = staging_root / "memory" + if has_source_memory: + if _is_link_or_reparse(destination_memory) or ( + destination_memory.exists() and not destination_memory.is_dir() + ): + raise ValueError("current memory destination is not a safe directory") + if destination_memory.is_dir(): + _copy_tree_strict(destination_memory, staged_memory) + else: + staged_memory.mkdir() + for item, relative in memory_files: + target = _prepare_overlay_target(staged_memory, relative) + target.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(item, target) + + staged_responses: list[tuple[Path, Path]] = [] + for item, relative, target in response_files: + staged = staging_root / "responses" / Path(*relative.parts) + staged.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(item, staged) + staged_responses.append((staged, target)) + + staged_sessions: list[tuple[Path, Path]] = [] + for session_id, item, target, _prepared in session_files: + staged = staging_root / "sessions" / f"{session_id}.json" + staged.parent.mkdir(parents=True, exist_ok=True) + staged.write_text( + json.dumps(item, ensure_ascii=False, default=str), + encoding="utf-8", + ) + staged_sessions.append((staged, target)) + + memory_nonempty = ( + destination_memory.is_dir() + and next(destination_memory.iterdir(), None) is not None + ) + if has_source_memory and memory_nonempty: + backup_dir = str(_create_memory_backup(destination_root, destination_memory)) + + installed_files: list[Path] = [] + previous_memory = staging_root / "previous-memory" + memory_original_moved = False + memory_activated = False + memory_existed = destination_memory.is_dir() + try: + if has_source_memory: + if memory_existed: + os.replace(destination_memory, previous_memory) + memory_original_moved = True + os.replace(staged_memory, destination_memory) + memory_activated = True + + for staged, target in (*staged_responses, *staged_sessions): + if target.exists() or _is_link_or_reparse(target): + raise OSError(f"data destination changed during import: {target}") + _assert_safe_new_target(destination_root, target) + target.parent.mkdir(parents=True, exist_ok=True) + # Staging shares the destination filesystem. A hard link gives + # POSIX/Windows create-if-absent semantics: unlike replace(), it + # cannot overwrite a response/session created concurrently. + _install_file_add_only(staged, target) + installed_files.append(target) + except Exception as error: + rollback_errors: list[str] = [] + for target in reversed(installed_files): + try: + target.unlink() + except OSError as rollback_error: + rollback_errors.append(str(rollback_error)) + if memory_activated or memory_original_moved: + try: + if destination_memory.exists() or _is_link_or_reparse(destination_memory): + _remove_path(destination_memory) + if memory_original_moved: + os.replace(previous_memory, destination_memory) + except OSError as rollback_error: + rollback_errors.append(str(rollback_error)) + if rollback_errors: + raise OSError( + f"data import failed: {error}; rollback failed: " + + "; ".join(rollback_errors) + ) from error + raise + + result: dict[str, Any] = { + "ok": True, + "memoryCopied": len(memory_files), + "memorySkipped": 0, + "responsesCopied": len(response_files), + "responsesSkipped": responses_skipped, + "sessionsAdded": len(session_files), + "sessionsSkipped": sessions_skipped, + "sessionsFileFound": sessions_found, + "backupDir": backup_dir, + "sourceType": inspection["sourceType"], + } + if session_preparer is not None: + result["_preparedSessions"] = prepared_sessions + return result diff --git a/frontends/desktop/src-tauri/Cargo.lock b/frontends/desktop/src-tauri/Cargo.lock index b2e5389dc..3c5d829e6 100644 --- a/frontends/desktop/src-tauri/Cargo.lock +++ b/frontends/desktop/src-tauri/Cargo.lock @@ -229,7 +229,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" dependencies = [ "atk-sys", - "glib", + "glib 0.18.5", "libc", ] @@ -239,10 +239,10 @@ version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" dependencies = [ - "glib-sys", - "gobject-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps", + "system-deps 6.2.2", ] [[package]] @@ -257,6 +257,58 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "axum" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" +dependencies = [ + "axum-core", + "bytes", + "form_urlencoded", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "serde_core", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "base64" version = "0.21.7" @@ -395,7 +447,7 @@ checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ "bitflags 2.11.1", "cairo-sys-rs", - "glib", + "glib 0.18.5", "libc", "once_cell", "thiserror 1.0.69", @@ -407,9 +459,9 @@ version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" dependencies = [ - "glib-sys", + "glib-sys 0.18.1", "libc", - "system-deps", + "system-deps 6.2.2", ] [[package]] @@ -488,7 +540,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" dependencies = [ "smallvec", - "target-lexicon", + "target-lexicon 0.12.16", +] + +[[package]] +name = "cfg-expr" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb693542bcafa528e198be0ebd9d3632ca5b7c93dbe7237460e199910835997c" +dependencies = [ + "smallvec", + "target-lexicon 0.13.5", ] [[package]] @@ -1191,7 +1253,7 @@ dependencies = [ [[package]] name = "ga-desktop" -version = "0.1.8" +version = "0.2.0" dependencies = [ "dirs 5.0.1", "rfd", @@ -1199,7 +1261,10 @@ dependencies = [ "serde_json", "tauri", "tauri-build", + "tauri-plugin-opener", "tauri-plugin-single-instance", + "tauri-plugin-wdio", + "tauri-plugin-wdio-webdriver", ] [[package]] @@ -1212,7 +1277,7 @@ dependencies = [ "gdk-pixbuf", "gdk-sys", "gio", - "glib", + "glib 0.18.5", "libc", "pango", ] @@ -1225,7 +1290,7 @@ checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" dependencies = [ "gdk-pixbuf-sys", "gio", - "glib", + "glib 0.18.5", "libc", "once_cell", ] @@ -1236,11 +1301,11 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps", + "system-deps 6.2.2", ] [[package]] @@ -1251,13 +1316,13 @@ checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", "pango-sys", "pkg-config", - "system-deps", + "system-deps 6.2.2", ] [[package]] @@ -1267,11 +1332,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" dependencies = [ "gdk-sys", - "glib-sys", - "gobject-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", "pkg-config", - "system-deps", + "system-deps 6.2.2", ] [[package]] @@ -1283,7 +1348,7 @@ dependencies = [ "gdk", "gdkx11-sys", "gio", - "glib", + "glib 0.18.5", "libc", "x11", ] @@ -1295,9 +1360,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" dependencies = [ "gdk-sys", - "glib-sys", + "glib-sys 0.18.1", "libc", - "system-deps", + "system-deps 6.2.2", "x11", ] @@ -1357,8 +1422,8 @@ dependencies = [ "futures-core", "futures-io", "futures-util", - "gio-sys", - "glib", + "gio-sys 0.18.1", + "glib 0.18.5", "libc", "once_cell", "pin-project-lite", @@ -1372,13 +1437,26 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" dependencies = [ - "glib-sys", - "gobject-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps", + "system-deps 6.2.2", "winapi", ] +[[package]] +name = "gio-sys" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0071fe88dba8e40086c8ff9bbb62622999f49628344b1d1bf490a48a29d80f22" +dependencies = [ + "glib-sys 0.21.5", + "gobject-sys 0.21.5", + "libc", + "system-deps 7.0.8", + "windows-sys 0.61.2", +] + [[package]] name = "glib" version = "0.18.5" @@ -1391,10 +1469,10 @@ dependencies = [ "futures-executor", "futures-task", "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-macros 0.18.5", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", "memchr", "once_cell", @@ -1402,6 +1480,27 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "glib" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16de123c2e6c90ce3b573b7330de19be649080ec612033d397d72da265f1bd8b" +dependencies = [ + "bitflags 2.11.1", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys 0.21.5", + "glib-macros 0.21.5", + "glib-sys 0.21.5", + "gobject-sys 0.21.5", + "libc", + "memchr", + "smallvec", +] + [[package]] name = "glib-macros" version = "0.18.5" @@ -1416,6 +1515,19 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "glib-macros" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf59b675301228a696fe01c3073974643365080a76cc3ed5bc2cbc466ad87f17" +dependencies = [ + "heck 0.5.0", + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "glib-sys" version = "0.18.1" @@ -1423,7 +1535,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" dependencies = [ "libc", - "system-deps", + "system-deps 6.2.2", +] + +[[package]] +name = "glib-sys" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d95e1a3a19ae464a7286e14af9a90683c64d70c02532d88d87ce95056af3e6c" +dependencies = [ + "libc", + "system-deps 7.0.8", ] [[package]] @@ -1438,9 +1560,20 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" dependencies = [ - "glib-sys", + "glib-sys 0.18.1", "libc", - "system-deps", + "system-deps 6.2.2", +] + +[[package]] +name = "gobject-sys" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dca35da0d19a18f4575f3cb99fe1c9e029a2941af5662f326f738a21edaf294" +dependencies = [ + "glib-sys 0.21.5", + "libc", + "system-deps 7.0.8", ] [[package]] @@ -1456,7 +1589,7 @@ dependencies = [ "gdk", "gdk-pixbuf", "gio", - "glib", + "glib 0.18.5", "gtk-sys", "gtk3-macros", "libc", @@ -1474,12 +1607,12 @@ dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", "pango-sys", - "system-deps", + "system-deps 6.2.2", ] [[package]] @@ -1589,6 +1722,12 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + [[package]] name = "hyper" version = "1.9.0" @@ -1602,6 +1741,7 @@ dependencies = [ "http", "http-body", "httparse", + "httpdate", "itoa", "pin-project-lite", "smallvec", @@ -1819,6 +1959,25 @@ version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + [[package]] name = "itoa" version = "1.0.18" @@ -1832,7 +1991,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" dependencies = [ "bitflags 1.3.2", - "glib", + "glib 0.18.5", "javascriptcore-rs-sys", ] @@ -1842,10 +2001,10 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" dependencies = [ - "glib-sys", - "gobject-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps", + "system-deps 6.2.2", ] [[package]] @@ -1949,7 +2108,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" dependencies = [ - "glib", + "glib 0.18.5", "gtk", "gtk-sys", "libappindicator-sys", @@ -2039,6 +2198,12 @@ dependencies = [ "web_atoms", ] +[[package]] +name = "matchit" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" + [[package]] name = "memchr" version = "2.8.0" @@ -2187,9 +2352,17 @@ checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ "bitflags 2.11.1", "block2", + "libc", "objc2", + "objc2-cloud-kit", + "objc2-core-data", "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-text", + "objc2-core-video", "objc2-foundation", + "objc2-quartz-core", ] [[package]] @@ -2209,6 +2382,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ + "bitflags 2.11.1", "objc2", "objc2-foundation", ] @@ -2269,6 +2443,19 @@ dependencies = [ "objc2-core-graphics", ] +[[package]] +name = "objc2-core-video" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-io-surface", +] + [[package]] name = "objc2-encode" version = "4.1.0" @@ -2292,6 +2479,7 @@ checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ "bitflags 2.11.1", "block2", + "libc", "objc2", "objc2-core-foundation", ] @@ -2307,6 +2495,16 @@ dependencies = [ "objc2-core-foundation", ] +[[package]] +name = "objc2-javascript-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a1e6550c4caed348956ce3370c9ffeca70bb1dbed4fa96112e7c6170e074586" +dependencies = [ + "objc2", + "objc2-core-foundation", +] + [[package]] name = "objc2-quartz-core" version = "0.3.2" @@ -2319,6 +2517,17 @@ dependencies = [ "objc2-foundation", ] +[[package]] +name = "objc2-security" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-core-foundation", +] + [[package]] name = "objc2-ui-kit" version = "0.3.2" @@ -2362,6 +2571,8 @@ dependencies = [ "objc2-app-kit", "objc2-core-foundation", "objc2-foundation", + "objc2-javascript-core", + "objc2-security", ] [[package]] @@ -2370,6 +2581,17 @@ version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" +[[package]] +name = "open" +version = "5.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd8d3b65c44123a56e0133d2cd06ce4361bd3ca99d41198b2f25e3c3db9b8b4a" +dependencies = [ + "dunce", + "is-wsl", + "libc", +] + [[package]] name = "option-ext" version = "0.2.0" @@ -2393,7 +2615,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" dependencies = [ "gio", - "glib", + "glib 0.18.5", "libc", "once_cell", "pango-sys", @@ -2405,10 +2627,10 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" dependencies = [ - "glib-sys", - "gobject-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps", + "system-deps 6.2.2", ] [[package]] @@ -2920,6 +3142,12 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + [[package]] name = "same-file" version = "1.0.6" @@ -3087,6 +3315,17 @@ dependencies = [ "zmij", ] +[[package]] +name = "serde_path_to_error" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +dependencies = [ + "itoa", + "serde", + "serde_core", +] + [[package]] name = "serde_repr" version = "0.1.20" @@ -3116,6 +3355,18 @@ dependencies = [ "serde_core", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "serde_with" version = "3.20.0" @@ -3270,7 +3521,7 @@ checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" dependencies = [ "futures-channel", "gio", - "glib", + "glib 0.18.5", "libc", "soup3-sys", ] @@ -3281,11 +3532,11 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps", + "system-deps 6.2.2", ] [[package]] @@ -3382,13 +3633,26 @@ version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ - "cfg-expr", + "cfg-expr 0.15.8", "heck 0.5.0", "pkg-config", "toml 0.8.2", "version-compare", ] +[[package]] +name = "system-deps" +version = "7.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396a35feb67335377e0251fcbc1092fc85c484bd4e3a7a54319399da127796e7" +dependencies = [ + "cfg-expr 0.20.8", + "heck 0.5.0", + "pkg-config", + "toml 1.1.2+spec-1.1.0", + "version-compare", +] + [[package]] name = "tao" version = "0.35.2" @@ -3446,6 +3710,12 @@ version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" +[[package]] +name = "target-lexicon" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" + [[package]] name = "tauri" version = "2.11.1" @@ -3559,6 +3829,44 @@ dependencies = [ "tauri-utils", ] +[[package]] +name = "tauri-plugin" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74be5dd4bed9afbd145e5716b5fa2ec28cbc29c34ffa61c258c9273d896c8020" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri-utils", + "walkdir", +] + +[[package]] +name = "tauri-plugin-opener" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17e1bea14edce6b793a04e2417e3fd924b9bc4faae83cdee7d714156cceeed29" +dependencies = [ + "dunce", + "glob", + "objc2-app-kit", + "objc2-foundation", + "open", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror 2.0.18", + "url", + "windows", + "zbus", +] + [[package]] name = "tauri-plugin-single-instance" version = "2.4.2" @@ -3574,6 +3882,56 @@ dependencies = [ "zbus", ] +[[package]] +name = "tauri-plugin-wdio" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8aa9b559f110924b9897793767a3bb4880c195db75838030eb224f94d21565d9" +dependencies = [ + "log", + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin", + "thiserror 1.0.69", + "tokio", + "uuid", +] + +[[package]] +name = "tauri-plugin-wdio-webdriver" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30c5bffe978c41b06ad44a5f4b5b543405918cf316b98756c678a6431061f2e9" +dependencies = [ + "async-trait", + "axum", + "base64 0.22.1", + "block2", + "cairo-rs", + "glib 0.21.5", + "gtk", + "javascriptcore-rs", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-web-kit", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "tempfile", + "thiserror 2.0.18", + "tokio", + "tracing", + "uuid", + "webkit2gtk", + "webview2-com", + "windows", + "windows-core 0.61.2", +] + [[package]] name = "tauri-runtime" version = "2.11.1" @@ -3627,9 +3985,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.9.1" +version = "2.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d57200389a2f82b4b0a40ae29ca19b6978116e8f4d4e974c3234ce40c0ffbdec" +checksum = "3e176a18e67764923c4f1ce66f25ae4abe5f688384d5eb1a0fa6c77f3d90f887" dependencies = [ "anyhow", "brotli", @@ -3804,9 +4162,21 @@ dependencies = [ "mio", "pin-project-lite", "socket2", + "tokio-macros", "windows-sys 0.61.2", ] +[[package]] +name = "tokio-macros" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6328af13490e73a9b4694030fafd93f8c8c6a9dede33e821c3fc63eddf8042ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "tokio-util" version = "0.7.18" @@ -3953,6 +4323,7 @@ dependencies = [ "tokio", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -3991,6 +4362,7 @@ version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -4451,10 +4823,10 @@ dependencies = [ "gdk", "gdk-sys", "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib 0.18.5", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "gtk", "gtk-sys", "javascriptcore-rs", @@ -4473,15 +4845,15 @@ dependencies = [ "bitflags 1.3.2", "cairo-sys-rs", "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "gtk-sys", "javascriptcore-rs-sys", "libc", "pkg-config", "soup3-sys", - "system-deps", + "system-deps 6.2.2", ] [[package]] diff --git a/frontends/desktop/src-tauri/Cargo.toml b/frontends/desktop/src-tauri/Cargo.toml index 3914e307e..d11d9c00a 100644 --- a/frontends/desktop/src-tauri/Cargo.toml +++ b/frontends/desktop/src-tauri/Cargo.toml @@ -1,19 +1,26 @@ [package] name = "ga-desktop" -version = "0.1.8" +version = "0.2.0" edition = "2021" [build-dependencies] tauri-build = { version = "2", features = [] } [dependencies] -tauri = { version = "2", features = ["devtools"] } +tauri = { version = "2", features = ["devtools", "tray-icon"] } tauri-plugin-single-instance = "2" +tauri-plugin-opener = "2" +tauri-plugin-wdio = { version = "1.2.0", optional = true } +tauri-plugin-wdio-webdriver = { version = "1.2.0", optional = true } serde = { version = "1", features = ["derive"] } serde_json = "1" dirs = "5" rfd = "0.15" +[features] +default = [] +e2e = ["dep:tauri-plugin-wdio", "dep:tauri-plugin-wdio-webdriver"] + [lib] name = "ga_desktop_lib" crate-type = ["lib", "cdylib", "staticlib"] diff --git a/frontends/desktop/src-tauri/build.rs b/frontends/desktop/src-tauri/build.rs index 97ab5de72..2b5d70c5c 100644 --- a/frontends/desktop/src-tauri/build.rs +++ b/frontends/desktop/src-tauri/build.rs @@ -1,25 +1,39 @@ use std::process::Command; +fn git_text(args: &[&str]) -> Option { + Command::new("git") + .args(args) + .output() + .ok() + .filter(|output| output.status.success()) + .map(|output| String::from_utf8_lossy(&output.stdout).trim().to_string()) + .filter(|value| !value.is_empty()) +} + fn main() { // Build identity used to decide whether a bridge already holding :14168 belongs to THIS // build. commit hash + build timestamp → distinct on every build, even when the human // version in tauri.conf.json is unchanged (so same-version re-publishes still take over // a stale bridge). The bridge reports this back via GET /services/identity. - let commit = Command::new("git") - .args(["rev-parse", "--short", "HEAD"]) - .output() - .ok() - .filter(|o| o.status.success()) - .map(|o| String::from_utf8_lossy(&o.stdout).trim().to_string()) - .filter(|s| !s.is_empty()) - .unwrap_or_else(|| "nogit".to_string()); + let source_revision = git_text(&["rev-parse", "HEAD"]).unwrap_or_else(|| "nogit".to_string()); + let short_revision: String = source_revision.chars().take(12).collect(); let stamp = std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) .map(|d| d.as_secs()) .unwrap_or(0); - println!("cargo:rustc-env=GA_BUILD_ID={}-{}", commit, stamp); - // Re-run when the checked-out commit changes so the id stays fresh. - println!("cargo:rerun-if-changed=../../../.git/HEAD"); + println!("cargo:rustc-env=GA_BUILD_ID={}-{}", short_revision, stamp); + println!("cargo:rustc-env=GA_SOURCE_REVISION={source_revision}"); + // Watch both HEAD and its resolved branch ref. This works in ordinary + // checkouts, detached CI checkouts, and linked worktrees; watching only + // `/.git/HEAD` misses branch advances and is invalid in a worktree. + if let Some(head_path) = git_text(&["rev-parse", "--git-path", "HEAD"]) { + println!("cargo:rerun-if-changed={head_path}"); + } + if let Some(head_ref) = git_text(&["symbolic-ref", "-q", "HEAD"]) { + if let Some(ref_path) = git_text(&["rev-parse", "--git-path", &head_ref]) { + println!("cargo:rerun-if-changed={ref_path}"); + } + } tauri_build::build() } diff --git a/frontends/desktop/src-tauri/capabilities/default.json b/frontends/desktop/src-tauri/capabilities/default.json index e5401c2cf..5ae79f0d9 100644 --- a/frontends/desktop/src-tauri/capabilities/default.json +++ b/frontends/desktop/src-tauri/capabilities/default.json @@ -1,29 +1,29 @@ { "identifier": "default", - "description": "Default capabilities for all windows", - "windows": ["main", "setup"], - "remote": { - "urls": ["http://127.0.0.1:14168", "http://localhost:14168"] - }, + "description": "Least-privilege capabilities for the main application window", + "windows": ["main"], "permissions": [ - "core:default", - "core:window:default", - "core:window:allow-show", - "core:window:allow-hide", - "core:window:allow-set-focus", + "core:event:allow-listen", + "core:event:allow-unlisten", + "core:window:allow-minimize", + "core:window:allow-toggle-maximize", "core:window:allow-close", - "core:window:allow-get-all-windows", - "core:webview:default", + "core:window:allow-start-dragging", "allow-start-bridge", - "allow-start-bridge-with-config", - "allow-get-config", + "allow-retry-bootstrap", + "allow-get-bootstrap-snapshot", "allow-export-mykey", "allow-pick-directory", + "allow-pick-data-backup-file", + "allow-pick-data-export-path", + "allow-reveal-in-file-manager", "allow-get-ga-source", + "allow-validate-ga-source", "allow-set-ga-source", "allow-clear-ga-source", - "allow-move-ga-runtime", "allow-shortcut-should-ask", - "allow-shortcut-decide" + "allow-shortcut-decide", + "opener:allow-open-url", + "opener:allow-default-urls" ] } diff --git a/frontends/desktop/src-tauri/capabilities/setup.json b/frontends/desktop/src-tauri/capabilities/setup.json new file mode 100644 index 000000000..4e94ab66b --- /dev/null +++ b/frontends/desktop/src-tauri/capabilities/setup.json @@ -0,0 +1,16 @@ +{ + "identifier": "setup", + "description": "Startup-recovery commands for the setup window only", + "windows": ["setup"], + "permissions": [ + "core:event:allow-listen", + "core:event:allow-unlisten", + "allow-start-bridge-with-config", + "allow-retry-bootstrap", + "allow-get-bootstrap-snapshot", + "allow-get-config", + "allow-discover-python-for-project", + "allow-pick-directory", + "allow-pick-python-interpreter" + ] +} diff --git a/frontends/desktop/src-tauri/permissions/bridge-commands.toml b/frontends/desktop/src-tauri/permissions/bridge-commands.toml index 27dc07df9..002b7f1d3 100644 --- a/frontends/desktop/src-tauri/permissions/bridge-commands.toml +++ b/frontends/desktop/src-tauri/permissions/bridge-commands.toml @@ -8,11 +8,26 @@ identifier = "allow-start-bridge-with-config" description = "Spawn bridge from setup with explicit python/project paths." commands.allow = ["start_bridge_with_config"] +[[permission]] +identifier = "allow-retry-bootstrap" +description = "Retry the unified desktop bootstrap with validated Python and project paths." +commands.allow = ["retry_bootstrap"] + +[[permission]] +identifier = "allow-get-bootstrap-snapshot" +description = "Read the current desktop bootstrap state and filtered diagnostics." +commands.allow = ["get_bootstrap_snapshot"] + [[permission]] identifier = "allow-get-config" description = "Read saved bridge spawn configuration." commands.allow = ["get_config"] +[[permission]] +identifier = "allow-discover-python-for-project" +description = "Discover a usable Python environment for a selected application folder." +commands.allow = ["discover_python_for_project"] + [[permission]] identifier = "allow-export-mykey" description = "Save mykey.py via native file dialog." @@ -20,14 +35,39 @@ commands.allow = ["export_mykey"] [[permission]] identifier = "allow-pick-directory" -description = "Pick a source directory via native folder dialog (import memory)." +description = "Pick a local application, data, or repository directory via a native folder dialog." commands.allow = ["pick_directory"] +[[permission]] +identifier = "allow-pick-python-interpreter" +description = "Pick a Python environment through a native file dialog." +commands.allow = ["pick_python_interpreter"] + +[[permission]] +identifier = "allow-pick-data-backup-file" +description = "Pick a desktop data backup ZIP via a native file dialog." +commands.allow = ["pick_data_backup_file"] + +[[permission]] +identifier = "allow-pick-data-export-path" +description = "Choose the destination for a desktop data backup ZIP." +commands.allow = ["pick_data_export_path"] + +[[permission]] +identifier = "allow-reveal-in-file-manager" +description = "Reveal a completed local export in the system file manager." +commands.allow = ["reveal_in_file_manager"] + [[permission]] identifier = "allow-get-ga-source" description = "Read the user-set external GenericAgent source directory." commands.allow = ["get_ga_source"] +[[permission]] +identifier = "allow-validate-ga-source" +description = "Validate a local repository without persisting or reconnecting." +commands.allow = ["validate_ga_source"] + [[permission]] identifier = "allow-set-ga-source" description = "Point the desktop shell at an external GenericAgent source and restart the bridge." @@ -47,8 +87,3 @@ commands.allow = ["shortcut_should_ask"] identifier = "allow-shortcut-decide" description = "Persist the user's desktop-shortcut choice and create it if enabled." commands.allow = ["shortcut_decide"] - -[[permission]] -identifier = "allow-move-ga-runtime" -description = "Copy the current GA workspace to a user-selected folder and switch to it." -commands.allow = ["move_ga_runtime"] diff --git a/frontends/desktop/src-tauri/src/lib.rs b/frontends/desktop/src-tauri/src/lib.rs index c0b63df0f..1286bd094 100644 --- a/frontends/desktop/src-tauri/src/lib.rs +++ b/frontends/desktop/src-tauri/src/lib.rs @@ -1,27 +1,394 @@ -use std::process::{Command, Child, Stdio}; -use std::io::{BufRead, BufReader}; -use std::sync::Mutex; -use std::net::TcpStream; -use std::time::{Duration, Instant}; -use std::thread; +use serde::{Deserialize, Serialize}; +use std::collections::VecDeque; +use std::fs::OpenOptions; +use std::io::{BufRead, BufReader, Write}; +use std::net::{SocketAddr, TcpStream, ToSocketAddrs}; use std::path::{Path, PathBuf}; -use tauri::Manager; +use std::process::{Child, Command, Stdio}; +use std::sync::{LazyLock, Mutex}; +use std::thread; +use std::time::{Duration, Instant}; +use tauri::{Emitter, Manager}; #[cfg(windows)] use std::os::windows::process::CommandExt; +#[cfg(windows)] +use tauri::menu::{MenuBuilder, MenuItemBuilder}; +#[cfg(windows)] +use tauri::tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}; + static BRIDGE_PROCESS: Mutex> = Mutex::new(None); +static BRIDGE_LOG_READERS: Mutex>> = Mutex::new(Vec::new()); +static SETTINGS_WRITE_LOCK: Mutex<()> = Mutex::new(()); + +#[derive(Clone, Debug, PartialEq)] +struct BridgeEndpoint { + host: String, + port: u16, +} + +impl BridgeEndpoint { + fn socket_addr(&self) -> String { + format!("{}:{}", self.host, self.port) + } + + fn tcp_addr(&self) -> Option { + (self.host.as_str(), self.port) + .to_socket_addrs() + .ok()? + .find(|addr| addr.ip().is_loopback()) + } +} + +fn bridge_endpoint_from_values( + host: Option<&str>, + port: Option<&str>, +) -> Result { + let host = host.unwrap_or("127.0.0.1").trim(); + if host != "127.0.0.1" && host != "localhost" && host != "::1" { + return Err("BRIDGE_HOST must be loopback".to_string()); + } + let port = port + .unwrap_or("14168") + .parse::() + .map_err(|_| "BRIDGE_PORT must be between 1 and 65535".to_string())?; + if port == 0 { + return Err("BRIDGE_PORT must be between 1 and 65535".to_string()); + } + Ok(BridgeEndpoint { + host: host.to_string(), + port, + }) +} + +fn bridge_endpoint() -> BridgeEndpoint { + bridge_endpoint_from_values( + std::env::var("BRIDGE_HOST").ok().as_deref(), + std::env::var("BRIDGE_PORT").ok().as_deref(), + ) + .unwrap_or(BridgeEndpoint { + host: "127.0.0.1".to_string(), + port: 14168, + }) +} + +const MAX_DIAGNOSTIC_LINES: usize = 100; +const MAX_DIAGNOSTIC_LINE_BYTES: usize = 2 * 1024; + +fn sanitize_diagnostic_line(line: &str) -> String { + let lower = line.to_ascii_lowercase(); + const SENSITIVE_MARKERS: [&str; 12] = [ + "apikey", + "api_key", + "authorization", + "bearer", + "secret", + "token", + "mykey", + "[session]", + "[turn]", + "memory", + "conversation", + "llm_history", + ]; + if SENSITIVE_MARKERS + .iter() + .any(|marker| lower.contains(marker)) + { + return "[redacted sensitive diagnostic line]".to_string(); + } + + let mut end = line.len().min(MAX_DIAGNOSTIC_LINE_BYTES); + while end > 0 && !line.is_char_boundary(end) { + end -= 1; + } + line[..end].to_string() +} + +fn push_bounded_log(logs: &mut VecDeque, line: &str) { + logs.push_back(sanitize_diagnostic_line(line)); + while logs.len() > MAX_DIAGNOSTIC_LINES { + logs.pop_front(); + } +} + +#[derive(Debug, PartialEq)] +enum ListenerIdentity { + Owned, + KnownGenericAgent, + Foreign, +} + +fn classify_listener_identity( + identity: Option<&serde_json::Value>, + project_dir: &str, +) -> ListenerIdentity { + let Some(identity) = identity else { + return ListenerIdentity::Foreign; + }; + let reported_root = identity + .get("ga_root") + .and_then(|value| value.as_str()) + .unwrap_or(""); + let reported_build = identity + .get("build_id") + .and_then(|value| value.as_str()) + .unwrap_or(""); + let reported_pid = identity + .get("pid") + .and_then(|value| value.as_u64()) + .unwrap_or(0); + if reported_root.is_empty() || reported_pid == 0 { + return ListenerIdentity::Foreign; + } + let same_root = { + let (reported, expected) = (norm_path(reported_root), norm_path(project_dir)); + #[cfg(windows)] + { + reported.eq_ignore_ascii_case(&expected) + } + #[cfg(not(windows))] + { + reported == expected + } + }; + if same_root && reported_build == env!("GA_BUILD_ID") { + ListenerIdentity::Owned + } else { + ListenerIdentity::KnownGenericAgent + } +} + +#[cfg(any(windows, test))] +fn should_retry_without_breakaway(raw_os_error: Option) -> bool { + raw_os_error == Some(5) +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "snake_case")] +enum BootstrapMode { + HotStart, + ColdStart, + Prepare, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "snake_case")] +enum BootstrapPhase { + Idle, + Resolving, + Preparing, + StartingService, + OpeningUi, + Ready, + Failed, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +enum BootstrapFailureCode { + ConfigUnresolved, + PrepareFailed, + SpawnFailed, + BridgeShutdownRefused, + PortConflict, + ServiceTimeout, + ServiceExited, + UiNavigationFailed, + Unknown, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "snake_case")] +enum PortState { + Free, + Owned, + Foreign, + Unknown, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +struct BootstrapFailure { + code: BootstrapFailureCode, + detail: String, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +struct BootstrapDiagnostics { + build_id: String, + platform: String, + project_dir: String, + python_path: String, + port_state: PortState, + bridge_identity: Option, + recent_logs: Vec, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +struct BootstrapSnapshot { + seq: u64, + mode: BootstrapMode, + phase: BootstrapPhase, + stage: Option, + progress: u8, + failure: Option, + diagnostics: BootstrapDiagnostics, +} + +fn current_platform() -> String { + #[cfg(windows)] + { + "windows".to_string() + } + #[cfg(target_os = "macos")] + { + "macos".to_string() + } + #[cfg(all(not(windows), not(target_os = "macos")))] + { + "linux".to_string() + } +} -/// Last first-run prepare error, surfaced to the setup window (fallback.html) so the -/// user sees WHY the install failed instead of a generic "configure paths" screen. -static PREPARE_ERROR: Mutex> = Mutex::new(None); +static BOOTSTRAP_STATE: LazyLock> = LazyLock::new(|| { + Mutex::new(BootstrapSnapshot { + seq: 0, + mode: BootstrapMode::ColdStart, + phase: BootstrapPhase::Idle, + stage: None, + progress: 0, + failure: None, + diagnostics: BootstrapDiagnostics { + build_id: env!("GA_BUILD_ID").to_string(), + platform: current_platform(), + project_dir: String::new(), + python_path: String::new(), + port_state: PortState::Unknown, + bridge_identity: None, + recent_logs: Vec::new(), + }, + }) +}); + +fn write_e2e_bootstrap_snapshot(snapshot: &BootstrapSnapshot) { + let Some(report_dir) = std::env::var_os("GA_DESKTOP_E2E_REPORT_DIR") else { + return; + }; + let report_dir = PathBuf::from(report_dir); + if report_dir.as_os_str().is_empty() { + return; + } + if std::fs::create_dir_all(&report_dir).is_err() { + return; + } + + let Ok(line) = serde_json::to_string(snapshot) else { + return; + }; + if let Ok(mut file) = OpenOptions::new() + .create(true) + .append(true) + .open(report_dir.join("bootstrap-events.jsonl")) + { + let _ = writeln!(file, "{line}"); + } + + if let Ok(json) = serde_json::to_vec_pretty(snapshot) { + let _ = std::fs::write(report_dir.join("bootstrap-latest.json"), json); + } +} + +fn snapshot_update( + app_handle: Option<&tauri::AppHandle>, + update: impl FnOnce(&mut BootstrapSnapshot), +) -> BootstrapSnapshot { + let snapshot = { + let mut state = BOOTSTRAP_STATE.lock().unwrap(); + update(&mut state); + state.seq = state.seq.saturating_add(1); + state.clone() + }; + if let Some(app_handle) = app_handle { + let _ = app_handle.emit("bootstrap", snapshot.clone()); + } + write_e2e_bootstrap_snapshot(&snapshot); + snapshot +} + +fn begin_bootstrap( + app_handle: &tauri::AppHandle, + mode: BootstrapMode, + python_path: &str, + project_dir: &str, +) { + snapshot_update(Some(app_handle), |snapshot| { + snapshot.mode = mode; + snapshot.phase = BootstrapPhase::Resolving; + snapshot.stage = Some("validate".to_string()); + snapshot.progress = 5; + snapshot.failure = None; + snapshot.diagnostics.project_dir = project_dir.to_string(); + snapshot.diagnostics.python_path = python_path.to_string(); + snapshot.diagnostics.port_state = PortState::Unknown; + snapshot.diagnostics.bridge_identity = None; + snapshot.diagnostics.recent_logs.clear(); + }); +} + +fn set_bootstrap_phase( + app_handle: &tauri::AppHandle, + phase: BootstrapPhase, + stage: Option<&str>, + progress: u8, +) { + snapshot_update(Some(app_handle), |snapshot| { + snapshot.phase = phase; + snapshot.stage = stage.map(str::to_string); + snapshot.progress = progress.min(100); + snapshot.failure = None; + }); +} + +fn record_diagnostic_log(app_handle: &tauri::AppHandle, line: &str) { + if matches!( + BOOTSTRAP_STATE.lock().unwrap().phase, + BootstrapPhase::Ready | BootstrapPhase::Failed + ) { + return; + } + snapshot_update(Some(app_handle), |snapshot| { + let mut logs: VecDeque = snapshot.diagnostics.recent_logs.drain(..).collect(); + push_bounded_log(&mut logs, line); + snapshot.diagnostics.recent_logs = logs.into_iter().collect(); + }); +} + +fn set_port_diagnostics( + app_handle: &tauri::AppHandle, + port_state: PortState, + identity: Option<&serde_json::Value>, +) { + snapshot_update(Some(app_handle), |snapshot| { + snapshot.diagnostics.port_state = port_state; + snapshot.diagnostics.bridge_identity = identity.map(ToString::to_string); + }); +} + +#[tauri::command] +fn get_bootstrap_snapshot() -> BootstrapSnapshot { + BOOTSTRAP_STATE.lock().unwrap().clone() +} /// Get project root (parent of frontends/) fn project_root() -> PathBuf { std::env::current_exe() .expect("cannot get exe path") - .parent().expect("cannot get exe dir") // frontends/ - .parent().expect("cannot get project root") // project root + .parent() + .expect("cannot get exe dir") // frontends/ + .parent() + .expect("cannot get project root") // project root .to_path_buf() } @@ -53,7 +420,12 @@ fn bundle_anchor_dir() -> Option { while let Some(dir) = d { if dir.extension().and_then(|s| s.to_str()) == Some("app") { let resources = dir.join("Contents").join("Resources"); - if resources.join("runtime").join("app").join("agentmain.py").exists() { + if resources + .join("runtime") + .join("app") + .join("agentmain.py") + .exists() + { return Some(resources); } if let Some(parent) = dir.parent() { @@ -74,53 +446,135 @@ fn bundle_python() -> Option { let p = root.join("python").join("python.exe"); #[cfg(not(windows))] let p = root.join("python").join("bin").join("python3"); - if p.exists() { Some(p) } else { None } + if p.exists() { + Some(p) + } else { + None + } +} + +fn platform_python_name() -> &'static str { + #[cfg(windows)] + { + "python" + } + #[cfg(not(windows))] + { + "python3" + } +} + +fn project_venv_python(project: &Path) -> PathBuf { + #[cfg(windows)] + { + project.join(".venv").join("Scripts").join("python.exe") + } + #[cfg(not(windows))] + { + project.join(".venv").join("bin").join("python") + } +} + +fn portable_python(project: &Path) -> Option { + let root = project.join(".portable").join("uv-python"); + #[cfg(windows)] + let direct = root.join("python.exe"); + #[cfg(not(windows))] + let direct = root.join("bin").join("python3"); + if direct.is_file() { + return Some(direct); + } + + let mut children = std::fs::read_dir(root) + .ok()? + .flatten() + .map(|entry| entry.path()) + .filter(|path| path.is_dir()) + .collect::>(); + children.sort(); + children.into_iter().find_map(|path| { + #[cfg(windows)] + let python = path.join("python.exe"); + #[cfg(not(windows))] + let python = path.join("bin").join("python3"); + python.is_file().then_some(python) + }) +} + +fn discover_python_for_project_path(project: &Path, saved_python: Option<&str>) -> String { + if let Some(python) = bundle_python() { + return display_path(&python); + } + let venv = project_venv_python(project); + if venv.is_file() { + return display_path(&venv); + } + if let Some(python) = portable_python(project) { + return display_path(&python); + } + if let Some(python) = saved_python + .map(str::trim) + .filter(|python| python_interpreter_resolves(python)) + { + return python.to_string(); + } + let fallback = platform_python_name(); + if python_interpreter_resolves(fallback) { + fallback.to_string() + } else { + String::new() + } } -/// Find python executable: -/// 1. The embedded bundle python (runtime/python) — deps are installed directly into it -/// (no venv), and its path is resolved relative to the bundle anchor at runtime, so the -/// package stays relocatable (moving the folder doesn't break absolute venv paths). -/// 2. .portable/uv-python/ 下找 python.exe (Windows) 或 python3 (Unix) -/// 3. Fallback to system PATH +/// Resolve package, project-local, portable, saved, then PATH Python in that order. fn find_python() -> String { - if let Some(p) = bundle_python() { - return p.to_string_lossy().to_string(); - } - let root = project_root(); - let portable_python_dir = root.join(".portable").join("uv-python"); - - if portable_python_dir.exists() { - // uv installs python like: uv-python/cpython-3.12.x-windows-x86_64/python.exe - // We need to search for python.exe inside subdirectories - if let Ok(entries) = std::fs::read_dir(&portable_python_dir) { - for entry in entries.flatten() { - let path = entry.path(); - if path.is_dir() { - #[cfg(windows)] - { - let py = path.join("python.exe"); - if py.exists() { - return py.to_string_lossy().to_string(); - } - } - #[cfg(not(windows))] - { - let py = path.join("bin").join("python3"); - if py.exists() { - return py.to_string_lossy().to_string(); - } - } + let discovered = discover_python_for_project_path(&project_root(), None); + if discovered.is_empty() { + platform_python_name().to_string() + } else { + discovered + } +} + +fn python_interpreter_resolves(python_path: &str) -> bool { + let python_path = python_path.trim(); + if python_path.is_empty() { + return false; + } + + let explicit_path = python_path.contains('/') || python_path.contains('\\'); + if explicit_path { + return PathBuf::from(python_path).is_file(); + } + + let Some(path_entries) = std::env::var_os("PATH") else { + return false; + }; + for directory in std::env::split_paths(&path_entries) { + if directory.join(python_path).is_file() { + return true; + } + #[cfg(windows)] + { + let extensions = + std::env::var("PATHEXT").unwrap_or_else(|_| ".EXE;.CMD;.BAT".to_string()); + for extension in extensions + .split(';') + .filter(|extension| !extension.is_empty()) + { + if directory + .join(format!("{python_path}{extension}")) + .is_file() + || directory + .join(format!("{python_path}{}", extension.to_ascii_lowercase())) + .is_file() + { + return true; } } } } - - // Fallback: system PATH - #[cfg(windows)] - { "python".to_string() } - #[cfg(not(windows))] - { "python3".to_string() } + false } /// Find the project directory (folder containing agentmain.py). @@ -151,49 +605,287 @@ fn find_project_dir() -> Option { None } -/// Settings file path: ~/.ga_desktop_settings.json -fn settings_path() -> PathBuf { - dirs::home_dir() +fn resolve_settings_path(home_dir: Option, e2e_override: Option<&str>) -> PathBuf { + if let Some(path) = e2e_override.filter(|path| !path.trim().is_empty()) { + return PathBuf::from(path); + } + home_dir .unwrap_or_else(|| PathBuf::from(".")) .join(".ga_desktop_settings.json") } +/// Settings file path: ~/.ga_desktop_settings.json. +/// +/// Windows resolves the home directory through Known Folders and ignores an overridden +/// USERPROFILE. E2E builds therefore accept an explicit sandbox-owned settings file; the +/// production feature set never reads this override. +fn settings_path() -> PathBuf { + #[cfg(feature = "e2e")] + let e2e_override = if std::env::var("GA_E2E").ok().as_deref() == Some("1") { + std::env::var("GA_E2E_SETTINGS_PATH").ok() + } else { + None + }; + #[cfg(not(feature = "e2e"))] + let e2e_override: Option = None; + + resolve_settings_path(dirs::home_dir(), e2e_override.as_deref()) +} + +fn read_settings_from_strict( + path: &Path, +) -> Result, String> { + if !path.exists() { + return Ok(serde_json::Map::new()); + } + let content = std::fs::read_to_string(path) + .map_err(|error| format!("cannot read Desktop settings: {error}"))?; + match serde_json::from_str(&content) { + Ok(serde_json::Value::Object(object)) => Ok(object), + Ok(_) => Err("Desktop settings must be a JSON object".to_string()), + Err(error) => Err(format!("cannot parse Desktop settings: {error}")), + } +} + +fn read_settings_from(path: &Path) -> serde_json::Map { + read_settings_from_strict(path).unwrap_or_default() +} + /// Read the settings file as a JSON object (empty object when missing/unparseable). fn read_settings() -> serde_json::Map { - let path = settings_path(); - if let Ok(content) = std::fs::read_to_string(&path) { - if let Ok(serde_json::Value::Object(m)) = serde_json::from_str(&content) { - return m; + read_settings_from(&settings_path()) +} + +#[cfg(windows)] +fn atomic_replace(source: &Path, destination: &Path) -> std::io::Result<()> { + use std::os::windows::ffi::OsStrExt; + + #[link(name = "Kernel32")] + extern "system" { + fn MoveFileExW( + existing_file_name: *const u16, + new_file_name: *const u16, + flags: u32, + ) -> i32; + } + + const MOVEFILE_REPLACE_EXISTING: u32 = 0x1; + const MOVEFILE_WRITE_THROUGH: u32 = 0x8; + let source_wide: Vec = source.as_os_str().encode_wide().chain(Some(0)).collect(); + let destination_wide: Vec = destination + .as_os_str() + .encode_wide() + .chain(Some(0)) + .collect(); + let result = unsafe { + MoveFileExW( + source_wide.as_ptr(), + destination_wide.as_ptr(), + MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH, + ) + }; + if result == 0 { + Err(std::io::Error::last_os_error()) + } else { + Ok(()) + } +} + +struct SettingsFileLock { + path: PathBuf, + token: String, +} + +impl SettingsFileLock { + fn acquire(settings: &Path) -> Result { + const TIMEOUT: Duration = Duration::from_secs(5); + const STALE_AFTER: Duration = Duration::from_secs(30); + let parent = settings + .parent() + .ok_or_else(|| "settings path has no parent".to_string())?; + std::fs::create_dir_all(parent) + .map_err(|error| format!("create settings directory: {error}"))?; + let name = settings + .file_name() + .and_then(|part| part.to_str()) + .unwrap_or("ga_desktop_settings.json"); + let path = settings.with_file_name(format!("{name}.lock")); + let nonce = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap_or_default() + .as_nanos(); + let token = format!("{}:{nonce}", std::process::id()); + let deadline = Instant::now() + TIMEOUT; + loop { + match std::fs::create_dir(&path) { + Ok(()) => { + if let Err(error) = std::fs::write(path.join("owner"), &token) { + let _ = std::fs::remove_dir(&path); + return Err(format!("write settings lock owner: {error}")); + } + return Ok(Self { path, token }); + } + Err(error) if error.kind() == std::io::ErrorKind::AlreadyExists => { + let metadata = std::fs::symlink_metadata(&path) + .map_err(|error| format!("inspect settings lock: {error}"))?; + if metadata.file_type().is_symlink() || !metadata.is_dir() { + return Err(format!( + "settings lock is not a directory: {}", + display_path(&path) + )); + } + let stale = metadata + .modified() + .ok() + .and_then(|modified| modified.elapsed().ok()) + .map(|age| age > STALE_AFTER) + .unwrap_or(false); + if stale { + let tombstone = path.with_file_name(format!("{name}.lock.stale.{nonce}")); + if std::fs::rename(&path, &tombstone).is_ok() { + let _ = std::fs::remove_dir_all(tombstone); + continue; + } + } + if Instant::now() >= deadline { + return Err(format!( + "timed out waiting for settings lock: {}", + display_path(&path) + )); + } + thread::sleep(Duration::from_millis(50)); + } + Err(error) => return Err(format!("create settings lock: {error}")), + } + } + } +} + +impl Drop for SettingsFileLock { + fn drop(&mut self) { + let owner = self.path.join("owner"); + if std::fs::read_to_string(&owner).ok().as_deref() == Some(self.token.as_str()) { + let _ = std::fs::remove_file(owner); + let _ = std::fs::remove_dir(&self.path); } } - serde_json::Map::new() +} + +#[cfg(not(windows))] +fn atomic_replace(source: &Path, destination: &Path) -> std::io::Result<()> { + std::fs::rename(source, destination) +} + +fn write_settings_atomically(path: &Path, value: &serde_json::Value) -> std::io::Result<()> { + let parent = path.parent().ok_or_else(|| { + std::io::Error::new( + std::io::ErrorKind::InvalidInput, + "settings path has no parent", + ) + })?; + std::fs::create_dir_all(parent)?; + let text = serde_json::to_string_pretty(value) + .map_err(|error| std::io::Error::new(std::io::ErrorKind::InvalidData, error))?; + let nonce = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap_or_default() + .as_nanos(); + let name = path + .file_name() + .and_then(|part| part.to_str()) + .unwrap_or("ga_desktop_settings.json"); + let temporary = parent.join(format!(".{name}.{}.{}.tmp", std::process::id(), nonce)); + let result = (|| { + let mut file = OpenOptions::new() + .write(true) + .create_new(true) + .open(&temporary)?; + file.write_all(text.as_bytes())?; + file.write_all(b"\n")?; + file.sync_all()?; + atomic_replace(&temporary, path)?; + #[cfg(unix)] + std::fs::File::open(parent)?.sync_all()?; + Ok(()) + })(); + if result.is_err() { + let _ = std::fs::remove_file(&temporary); + } + result +} + +fn update_settings_at( + path: &Path, + mutator: impl FnOnce(&mut serde_json::Map), +) -> Result<(), String> { + let _file_lock = SettingsFileLock::acquire(path)?; + let mut object = read_settings_from_strict(path)?; + mutator(&mut object); + write_settings_atomically(path, &serde_json::Value::Object(object)) + .map_err(|error| format!("cannot write Desktop settings: {error}")) +} + +fn update_settings( + mutator: impl FnOnce(&mut serde_json::Map), +) -> Result<(), String> { + let _guard = SETTINGS_WRITE_LOCK + .lock() + .unwrap_or_else(|poisoned| poisoned.into_inner()); + update_settings_at(&settings_path(), mutator) } /// Merge `updates` into the existing settings file and write it back, preserving any keys /// we don't touch. The old code rewrote the file with only python_path/project_dir, which /// would silently drop sibling keys like `desktop_shortcut`. Always go through here. -fn merge_settings(updates: serde_json::Value) { - let mut obj = read_settings(); - if let serde_json::Value::Object(m) = updates { - for (k, v) in m { - obj.insert(k, v); - } +fn merge_settings(updates: serde_json::Value) -> Result<(), String> { + if let serde_json::Value::Object(updates) = updates { + return update_settings(move |object| { + for (key, value) in updates { + object.insert(key, value); + } + }); + } + Err("settings update must be a JSON object".to_string()) +} + +fn valid_ga_source_override_from( + settings: &serde_json::Map, +) -> Option { + let source = settings + .get("ga_source_override") + .and_then(|value| value.as_str()) + .unwrap_or("") + .trim(); + if source.is_empty() { + return None; } - let val = serde_json::Value::Object(obj); - if let Ok(text) = serde_json::to_string_pretty(&val) { - let _ = std::fs::write(settings_path(), text); + let path = PathBuf::from(source); + if path.join("agentmain.py").exists() { + Some(display_path(&path)) + } else { + None } } +fn effective_ga_root_from( + project_dir: &str, + settings: &serde_json::Map, +) -> String { + valid_ga_source_override_from(settings) + .unwrap_or_else(|| display_path(&builtin_ga_root(project_dir))) +} + /// Desktop-shortcut preference stored in settings under `desktop_shortcut`. /// None = never asked (first run) /// Some(true)/Some(false) = user's remembered choice. fn read_shortcut_pref() -> Option { - read_settings().get("desktop_shortcut").and_then(|v| v.as_bool()) + read_settings() + .get("desktop_shortcut") + .and_then(|v| v.as_bool()) } -fn write_shortcut_pref(enabled: bool) { - merge_settings(serde_json::json!({ "desktop_shortcut": enabled })); +fn write_shortcut_pref(enabled: bool) -> Result<(), String> { + merge_settings(serde_json::json!({ "desktop_shortcut": enabled })) } /// Create (or overwrite) a desktop shortcut pointing at the CURRENT exe. Overwriting on every @@ -201,10 +893,17 @@ fn write_shortcut_pref(enabled: bool) { /// the shortcut is rewritten to the new path. Windows-only (uses a .lnk via WScript.Shell). #[cfg(windows)] fn ensure_desktop_shortcut() { - let Ok(exe) = std::env::current_exe() else { return; }; - let Some(desktop) = dirs::desktop_dir() else { return; }; + let Ok(exe) = std::env::current_exe() else { + return; + }; + let Some(desktop) = dirs::desktop_dir() else { + return; + }; let lnk = desktop.join("GenericAgent.lnk"); - let work_dir = exe.parent().map(|p| p.to_path_buf()).unwrap_or_else(|| exe.clone()); + let work_dir = exe + .parent() + .map(|p| p.to_path_buf()) + .unwrap_or_else(|| exe.clone()); let exe_s = exe.to_string_lossy().replace('\'', "''"); let lnk_s = lnk.to_string_lossy().replace('\'', "''"); @@ -219,11 +918,19 @@ fn ensure_desktop_shortcut() { $sc.WorkingDirectory = '{work}'; \ $sc.IconLocation = '{exe}'; \ $sc.Save()", - lnk = lnk_s, exe = exe_s, work = work_s + lnk = lnk_s, + exe = exe_s, + work = work_s ); let mut cmd = Command::new("powershell.exe"); - cmd.args(["-NoProfile", "-ExecutionPolicy", "Bypass", "-Command", &script]); + cmd.args([ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-Command", + &script, + ]); cmd.creation_flags(0x08000000); // CREATE_NO_WINDOW let _ = cmd.status(); } @@ -232,8 +939,12 @@ fn ensure_desktop_shortcut() { fn ensure_desktop_shortcut() { // Launch target: the AppImage path when running as one, else the current exe. Writing the // current path on every enabled launch keeps a relocated bundle's launcher valid. - let Some(target) = std::env::var_os("APPIMAGE").map(PathBuf::from) - .or_else(|| std::env::current_exe().ok()) else { return; }; + let Some(target) = std::env::var_os("APPIMAGE") + .map(PathBuf::from) + .or_else(|| std::env::current_exe().ok()) + else { + return; + }; let exec = target.to_string_lossy().replace('"', ""); // Linux .desktop Icon= needs an image file (or themed name), not the AppImage path. The CI // ships GenericAgent.png next to the AppImage; fall back to a generic themed icon otherwise. @@ -245,7 +956,8 @@ fn ensure_desktop_shortcut() { let entry = format!( "[Desktop Entry]\nType=Application\nName=GenericAgent\nComment=GenericAgent Desktop\n\ Exec=\"{exec}\"\nIcon={icon}\nTerminal=false\nCategories=Utility;Development;\n", - exec = exec, icon = icon + exec = exec, + icon = icon ); let write_desktop = |path: &std::path::Path| { if std::fs::write(path, &entry).is_ok() { @@ -272,14 +984,21 @@ fn ensure_desktop_shortcut() { #[cfg(target_os = "macos")] fn ensure_desktop_shortcut() { // The .app is the launchable unit; drop a symlink to it on the Desktop. - let Ok(exe) = std::env::current_exe() else { return; }; + let Ok(exe) = std::env::current_exe() else { + return; + }; let mut app: Option = None; let mut d = exe.parent(); while let Some(dir) = d { - if dir.extension().and_then(|s| s.to_str()) == Some("app") { app = Some(dir.to_path_buf()); break; } + if dir.extension().and_then(|s| s.to_str()) == Some("app") { + app = Some(dir.to_path_buf()); + break; + } d = dir.parent(); } - let (Some(app), Some(desktop)) = (app, dirs::desktop_dir()) else { return; }; + let (Some(app), Some(desktop)) = (app, dirs::desktop_dir()) else { + return; + }; let link = desktop.join("GenericAgent.app"); let _ = std::fs::remove_file(&link); let _ = std::os::unix::fs::symlink(&app, &link); @@ -310,120 +1029,426 @@ fn shortcut_should_ask() -> bool { bundle_root().is_some() && read_shortcut_pref().is_none() } -/// Returns the last first-run prepare error (if any) so the setup window can display it. -#[tauri::command] -fn get_prepare_error() -> Option { - PREPARE_ERROR.lock().unwrap().clone() -} - /// Frontend reports the user's choice. Persists it and creates the shortcut when enabled. #[tauri::command] -fn shortcut_decide(create: bool) { - write_shortcut_pref(create); +fn shortcut_decide(create: bool) -> Result<(), String> { + write_shortcut_pref(create)?; if create { ensure_desktop_shortcut(); } + Ok(()) } -/// True when this binary is running from inside a macOS .app bundle (packaged build). -/// Used to refuse stale ~/.ga_desktop_settings.json that could point at an old checkout -/// when App Translocation hides our own runtime/ from current_exe(). #[cfg(target_os = "macos")] fn running_inside_app_bundle() -> bool { std::env::current_exe() .ok() - .map(|p| { - p.components().any(|c| { - c.as_os_str().to_string_lossy().ends_with(".app") - }) + .map(|path| { + path.components() + .any(|component| component.as_os_str().to_string_lossy().ends_with(".app")) }) .unwrap_or(false) } -/// User-set external GenericAgent source directory (方案三: bundle shell + external core). -/// Returns the path only when it still looks like a GA core checkout (agentmain.py exists). -/// The bundle's own bridge/frontend/conductor are used; the saved source only becomes GA_ROOT. -/// An invalid/missing override returns None so callers fall back to the bundle runtime/app. +/// User-set external GenericAgent core. The desktop bridge and conductor remain package-owned; +/// this path is only injected as GA_ROOT. A moved or deleted core falls back to the bundled one. fn valid_ga_source_override() -> Option { - let s = read_settings() - .get("ga_source_override") - .and_then(|v| v.as_str()) - .unwrap_or("") - .trim() - .to_string(); - if s.is_empty() { - return None; - } - let p = PathBuf::from(&s); - if p.join("agentmain.py").exists() { - Some(p.to_string_lossy().to_string()) - } else { - None - } + valid_ga_source_override_from(&read_settings()) } /// Remove a single key from the settings file (merge_settings can only add/overwrite). -fn remove_setting(key: &str) { - let mut obj = read_settings(); - obj.remove(key); - let val = serde_json::Value::Object(obj); - if let Ok(text) = serde_json::to_string_pretty(&val) { - let _ = std::fs::write(settings_path(), text); - } +fn remove_setting(key: &str) -> Result<(), String> { + let key = key.to_string(); + update_settings(move |object| { + object.remove(&key); + }) } -fn restore_setting(key: &str, value: Option) { +fn restore_setting(key: &str, value: Option) -> Result<(), String> { match value { - Some(v) => merge_settings(serde_json::json!({ key: v })), + Some(value) => merge_settings(serde_json::json!({ key: value })), None => remove_setting(key), } } -fn copy_dir_replace(src: &Path, dst: &Path) -> Result<(), String> { - std::fs::create_dir_all(dst).map_err(|e| format!("create {:?}: {}", dst, e))?; - for entry in std::fs::read_dir(src).map_err(|e| format!("read {:?}: {}", src, e))? { - let entry = entry.map_err(|e| e.to_string())?; - let sp = entry.path(); - let dp = dst.join(entry.file_name()); - let ft = entry.file_type().map_err(|e| e.to_string())?; - if ft.is_dir() { - if dp.exists() && !dp.is_dir() { - std::fs::remove_file(&dp).map_err(|e| format!("remove {:?}: {}", dp, e))?; - } - copy_dir_replace(&sp, &dp)?; - } else if ft.is_file() { - if let Some(parent) = dp.parent() { - std::fs::create_dir_all(parent).map_err(|e| e.to_string())?; - } - std::fs::copy(&sp, &dp).map_err(|e| format!("copy {:?} -> {:?}: {}", sp, dp, e))?; - } +const RUNTIME_MARKER_FILENAME: &str = ".ga-package-runtime.json"; +const RUNTIME_MARKER_SCHEMA: u32 = 1; +const PRESERVED_RUNTIME_PATHS: [&str; 4] = ["mykey.py", "mykey.json", "memory", "temp"]; + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +struct RuntimePackageMarker { + schema: u32, + package: String, + package_version: String, + build_id: String, + source_revision: String, +} + +#[derive(Debug, Eq, PartialEq)] +enum RuntimeCopyStatus { + Current, + Installed, + Refreshed, +} + +fn expected_runtime_marker() -> RuntimePackageMarker { + RuntimePackageMarker { + schema: RUNTIME_MARKER_SCHEMA, + package: env!("CARGO_PKG_NAME").to_string(), + package_version: env!("CARGO_PKG_VERSION").to_string(), + build_id: env!("GA_BUILD_ID").to_string(), + source_revision: env!("GA_SOURCE_REVISION").to_string(), } - Ok(()) } -fn bundled_project_dir() -> Option { - let app = bundle_root()?.join("app"); - if app.join("agentmain.py").exists() { Some(app) } else { None } +fn runtime_marker_path(runtime: &Path) -> PathBuf { + runtime.join(RUNTIME_MARKER_FILENAME) } -fn same_path(a: &Path, b: &Path) -> bool { - let aa = a.canonicalize().unwrap_or_else(|_| a.to_path_buf()); - let bb = b.canonicalize().unwrap_or_else(|_| b.to_path_buf()); - #[cfg(windows)] - { display_path(&aa).eq_ignore_ascii_case(&display_path(&bb)) } - #[cfg(not(windows))] - { aa == bb } +fn read_runtime_marker(runtime: &Path) -> Option { + let text = std::fs::read_to_string(runtime_marker_path(runtime)).ok()?; + serde_json::from_str(&text).ok() } -fn display_path(path: &Path) -> String { - let s = path.to_string_lossy().to_string(); - #[cfg(windows)] - { - if let Some(rest) = s.strip_prefix("\\\\?\\") { +fn runtime_copy_is_current(runtime: &Path, expected: &RuntimePackageMarker) -> bool { + runtime.join("agentmain.py").is_file() + && runtime + .join("frontends") + .join("desktop_bridge.py") + .is_file() + && read_runtime_marker(runtime).as_ref() == Some(expected) +} + +fn remove_fs_path(path: &Path) -> Result<(), String> { + if path.is_symlink() || path.is_file() { + std::fs::remove_file(path).map_err(|error| format!("remove {:?}: {error}", path)) + } else if path.is_dir() { + std::fs::remove_dir_all(path).map_err(|error| format!("remove {:?}: {error}", path)) + } else { + Ok(()) + } +} + +fn copy_dir_replace(src: &Path, dst: &Path) -> Result<(), String> { + if src.is_symlink() || !src.is_dir() { + return Err(format!("refusing to copy unsafe directory {:?}", src)); + } + std::fs::create_dir_all(dst).map_err(|error| format!("create {:?}: {error}", dst))?; + for entry in std::fs::read_dir(src).map_err(|error| format!("read {:?}: {error}", src))? { + let entry = entry.map_err(|error| error.to_string())?; + let source = entry.path(); + let destination = dst.join(entry.file_name()); + let file_type = entry.file_type().map_err(|error| error.to_string())?; + if file_type.is_symlink() { + return Err(format!("refusing to copy symbolic link {:?}", source)); + } + if file_type.is_dir() { + if destination.exists() && !destination.is_dir() { + remove_fs_path(&destination)?; + } + copy_dir_replace(&source, &destination)?; + } else if file_type.is_file() { + if destination.exists() && !destination.is_file() { + remove_fs_path(&destination)?; + } + if let Some(parent) = destination.parent() { + std::fs::create_dir_all(parent).map_err(|error| error.to_string())?; + } + std::fs::copy(&source, &destination) + .map_err(|error| format!("copy {:?} -> {:?}: {error}", source, destination))?; + } else { + return Err(format!("refusing to copy special file {:?}", source)); + } + } + Ok(()) +} + +fn copy_preserved_runtime_data(existing: &Path, staging: &Path) -> Result<(), String> { + for relative in PRESERVED_RUNTIME_PATHS { + let source = existing.join(relative); + if !source.exists() && !source.is_symlink() { + continue; + } + if source.is_symlink() { + return Err(format!( + "refusing to preserve symbolic-link user data {:?}", + source + )); + } + let destination = staging.join(relative); + remove_fs_path(&destination)?; + if source.is_dir() { + copy_dir_replace(&source, &destination)?; + } else if source.is_file() { + if let Some(parent) = destination.parent() { + std::fs::create_dir_all(parent).map_err(|error| error.to_string())?; + } + std::fs::copy(&source, &destination) + .map_err(|error| format!("preserve {:?} -> {:?}: {error}", source, destination))?; + } else { + return Err(format!("refusing to preserve special file {:?}", source)); + } + } + Ok(()) +} + +fn unique_runtime_sibling(parent: &Path, label: &str) -> Result { + let nanos = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .map(|duration| duration.as_nanos()) + .unwrap_or(0); + for suffix in 0..1000_u32 { + let candidate = parent.join(format!( + ".app-{label}-{}-{nanos}-{suffix}", + std::process::id() + )); + if !candidate.exists() && !candidate.is_symlink() { + return Ok(candidate); + } + } + Err(format!("cannot allocate runtime {label} path")) +} + +fn refresh_runtime_copy_with_activation( + source: &Path, + destination: &Path, + preserved_source: Option<&Path>, + expected: &RuntimePackageMarker, + activate: F, +) -> Result +where + F: FnOnce(&Path, &Path) -> std::io::Result<()>, +{ + if runtime_copy_is_current(destination, expected) { + return Ok(RuntimeCopyStatus::Current); + } + if source.is_symlink() + || !source.join("agentmain.py").is_file() + || !source.join("frontends").join("desktop_bridge.py").is_file() + { + return Err(format!( + "bundled core is incomplete at {}", + display_path(source) + )); + } + if destination.is_symlink() || (destination.exists() && !destination.is_dir()) { + return Err(format!( + "writable runtime is not a safe directory at {}", + display_path(destination) + )); + } + let parent = destination + .parent() + .ok_or_else(|| "writable runtime has no parent directory".to_string())?; + std::fs::create_dir_all(parent) + .map_err(|error| format!("create writable runtime parent: {error}"))?; + let staging = unique_runtime_sibling(parent, "staging")?; + std::fs::create_dir(&staging) + .map_err(|error| format!("create writable runtime staging dir: {error}"))?; + + let prepare_result = (|| { + copy_dir_replace(source, &staging)?; + if let Some(existing) = + preserved_source.or_else(|| destination.is_dir().then_some(destination)) + { + copy_preserved_runtime_data(existing, &staging)?; + } + let marker = serde_json::to_string_pretty(expected) + .map_err(|error| format!("serialize runtime marker: {error}"))?; + std::fs::write(runtime_marker_path(&staging), marker + "\n") + .map_err(|error| format!("write runtime marker: {error}"))?; + if !runtime_copy_is_current(&staging, expected) { + return Err("staged writable runtime failed validation".to_string()); + } + Ok(()) + })(); + if let Err(error) = prepare_result { + let _ = remove_fs_path(&staging); + return Err(error); + } + + let existed = destination.is_dir(); + let rollback = match unique_runtime_sibling(parent, "rollback") { + Ok(path) => path, + Err(error) => { + let _ = remove_fs_path(&staging); + return Err(error); + } + }; + if existed { + if let Err(error) = std::fs::rename(destination, &rollback) { + let _ = remove_fs_path(&staging); + return Err(format!("backup previous writable runtime: {error}")); + } + } + + if let Err(error) = activate(&staging, destination) { + let _ = remove_fs_path(&staging); + if existed { + if destination.exists() || destination.is_symlink() { + let _ = remove_fs_path(destination); + } + if let Err(rollback_error) = std::fs::rename(&rollback, destination) { + return Err(format!( + "activate writable runtime: {error}; restore previous runtime from {}: {rollback_error}", + display_path(&rollback) + )); + } + } + return Err(format!("activate writable runtime: {error}")); + } + + if existed { + // The activated tree already contains copied user data. This old tree is + // retained until activation succeeds, then removed on a best-effort basis. + let _ = remove_fs_path(&rollback); + Ok(RuntimeCopyStatus::Refreshed) + } else { + Ok(RuntimeCopyStatus::Installed) + } +} + +fn refresh_runtime_copy( + source: &Path, + destination: &Path, + expected: &RuntimePackageMarker, +) -> Result { + refresh_runtime_copy_with_activation(source, destination, None, expected, |staging, active| { + std::fs::rename(staging, active) + }) +} + +fn trusted_legacy_runtime(runtime_parent: &Path) -> Result, String> { + if !runtime_parent.is_dir() { + return Ok(None); + } + let mut candidates = Vec::new(); + for entry in std::fs::read_dir(runtime_parent) + .map_err(|error| format!("read legacy runtime parent: {error}"))? + { + let entry = entry.map_err(|error| format!("read legacy runtime entry: {error}"))?; + let version_dir = entry.path(); + if entry.file_name() == "app" + || entry + .file_type() + .map_err(|error| error.to_string())? + .is_symlink() + { + continue; + } + let version_name = entry.file_name().to_string_lossy().to_string(); + let version_key = version_name + .split('-') + .next() + .unwrap_or("") + .split('.') + .map(str::parse::) + .collect::, _>>(); + let Ok(version_key) = version_key else { + continue; + }; + if version_key.is_empty() { + continue; + } + let app = version_dir.join("app"); + if app.is_symlink() + || !app.is_dir() + || !app.join("agentmain.py").is_file() + || !app.join("frontends").join("desktop_bridge.py").is_file() + { + continue; + } + let Some(marker) = read_runtime_marker(&app) else { + continue; + }; + if marker.schema != RUNTIME_MARKER_SCHEMA + || marker.package != env!("CARGO_PKG_NAME") + || marker.package_version != version_name + { + continue; + } + candidates.push((version_key, app)); + } + candidates.sort_by(|left, right| left.0.cmp(&right.0)); + Ok(candidates.pop().map(|(_, path)| path)) +} + +fn refresh_runtime_copy_from_legacy( + source: &Path, + legacy: &Path, + destination: &Path, + expected: &RuntimePackageMarker, +) -> Result { + let result = refresh_runtime_copy_with_activation( + source, + destination, + Some(legacy), + expected, + |staging, active| std::fs::rename(staging, active), + )?; + let _ = remove_fs_path(legacy); + if let Some(parent) = legacy.parent() { + let _ = std::fs::remove_dir(parent); + } + Ok(result) +} + +fn builtin_ga_root(project_dir: &str) -> PathBuf { + #[cfg(target_os = "macos")] + { + if running_inside_app_bundle() { + if let Some(data_dir) = dirs::data_dir() { + return data_dir.join("GenericAgent").join("runtime").join("app"); + } + } + } + PathBuf::from(project_dir) +} + +fn ensure_builtin_ga_root(project_dir: &str) -> Result<(), String> { + if valid_ga_source_override().is_some() { + return Ok(()); + } + let source = PathBuf::from(project_dir); + let destination = builtin_ga_root(project_dir); + if same_path(&source, &destination) { + return Ok(()); + } + let expected = expected_runtime_marker(); + if !destination.exists() { + if let Some(parent) = destination.parent() { + if let Some(legacy) = trusted_legacy_runtime(parent)? { + return refresh_runtime_copy_from_legacy(&source, &legacy, &destination, &expected) + .map(|_| ()); + } + } + } + refresh_runtime_copy(&source, &destination, &expected).map(|_| ()) +} + +fn same_path(a: &Path, b: &Path) -> bool { + let a = a.canonicalize().unwrap_or_else(|_| a.to_path_buf()); + let b = b.canonicalize().unwrap_or_else(|_| b.to_path_buf()); + #[cfg(windows)] + { + display_path(&a).eq_ignore_ascii_case(&display_path(&b)) + } + #[cfg(not(windows))] + { + a == b + } +} + +fn display_path(path: &Path) -> String { + let value = path.to_string_lossy().to_string(); + #[cfg(windows)] + { + if let Some(rest) = value.strip_prefix("\\\\?\\") { return rest.to_string(); } } - s + value } /// Read config from settings file, or auto-discover and save. @@ -432,15 +1457,13 @@ fn display_path(path: &Path) -> String { pub fn get_or_discover_config() -> (String, String) { let path = settings_path(); - // NOTE: the external GA source override does NOT change which project_dir/bridge we run. - // 方案三: we always run the bundle's own bridge + frontend, and inject the external核 via - // the GA_ROOT env (see sanitize_bundle_env). So project_dir stays the bundle here. - + // An external core never replaces project_dir: project_dir locates the package-owned bridge, + // while sanitize_bundle_env injects the selected core as GA_ROOT. if bundle_root().is_some() { let python = find_python(); let project = find_project_dir().unwrap_or_default(); if !python.is_empty() && !project.is_empty() { - merge_settings(serde_json::json!({ + let _ = merge_settings(serde_json::json!({ "python_path": python, "project_dir": project })); @@ -448,29 +1471,32 @@ pub fn get_or_discover_config() -> (String, String) { } } - // Try reading existing settings. - // On macOS, a packaged .app must never trust ~/.ga_desktop_settings.json: App - // Translocation can run the bundle from a random read-only copy where bundle_root() - // fails to see our own runtime/, and an old settings file would then silently point - // the bridge at a previously installed checkout. In that case fall through to - // auto-discovery (which still resolves the bundle via .app-relative search below). #[cfg(target_os = "macos")] let trust_settings = !running_inside_app_bundle(); #[cfg(not(target_os = "macos"))] let trust_settings = true; + // A packaged macOS app never trusts a stale path from a previous install/translocation. if trust_settings && path.exists() { if let Ok(content) = std::fs::read_to_string(&path) { if let Ok(val) = serde_json::from_str::(&content) { - let python = val.get("python_path") + let python = val + .get("python_path") .and_then(|v| v.as_str()) .unwrap_or("") .to_string(); - let project = val.get("project_dir") + let project = val + .get("project_dir") .and_then(|v| v.as_str()) .unwrap_or("") .to_string(); - if !python.is_empty() && !project.is_empty() { + if python_interpreter_resolves(&python) + && !project.is_empty() + && PathBuf::from(&project) + .join("frontends") + .join("desktop_bridge.py") + .exists() + { return (python, project); } } @@ -478,12 +1504,16 @@ pub fn get_or_discover_config() -> (String, String) { } // Auto-discover - let python = find_python(); let project = find_project_dir().unwrap_or_default(); + let python = if project.is_empty() { + find_python() + } else { + discover_python_for_project_path(Path::new(&project), None) + }; // Save discovered config if !python.is_empty() && !project.is_empty() { - merge_settings(serde_json::json!({ + let _ = merge_settings(serde_json::json!({ "python_path": python, "project_dir": project })); @@ -513,33 +1543,42 @@ fn prepared_marker() -> Option { /// True when this is a self-contained bundle whose python env has not been prepared yet /// (embedded python present but deps not yet installed into it). fn needs_first_run_prepare(project_dir: &str) -> bool { - if project_dir.is_empty() { return false; } + if project_dir.is_empty() { + return false; + } bundle_python().is_some() && prepared_marker().map(|m| !m.exists()).unwrap_or(false) } /// Clear env vars a host launcher injects pointing at its own runtime. The Linux AppImage exports /// PYTHONHOME/PYTHONPATH (-> bundled python crashes with "No module named 'encodings'") and /// LD_LIBRARY_PATH (-> wrong shared libs). Our bundled python / prepare / bridge must run clean. -fn sanitize_bundle_env(cmd: &mut Command) { +fn sanitize_bundle_env(cmd: &mut Command, project_dir: &str) { cmd.env_remove("PYTHONHOME"); cmd.env_remove("PYTHONPATH"); cmd.env_remove("LD_LIBRARY_PATH"); + cmd.env("PYTHONDONTWRITEBYTECODE", "1"); // Stamp the bridge we spawn with this build's id so a later app launch can tell whether the // bridge holding :14168 is ours (see bridge_identity_matches / GET /services/identity). cmd.env("GA_BUILD_ID", env!("GA_BUILD_ID")); - // 方案三: when the user has set a valid external GA source, inject it as GA_ROOT so the - // (bundle's own) bridge + conductor import the external核 and read/write its data. When - // unset/invalid we leave GA_ROOT unset → the bridge falls back to its own bundle runtime. - match valid_ga_source_override() { - Some(src) => { cmd.env("GA_ROOT", src); } - None => { cmd.env_remove("GA_ROOT"); } + let ga_root = effective_ga_root(project_dir); + if ga_root.is_empty() { + cmd.env_remove("GA_ROOT"); + } else { + cmd.env("GA_ROOT", ga_root); } + let endpoint = bridge_endpoint(); + cmd.env("BRIDGE_HOST", &endpoint.host); + cmd.env("BRIDGE_PORT", endpoint.port.to_string()); } /// Run the offline prepare (install_windows.ps1 -Mode PrepareOnly) using bundled python + wheels. /// Streams the script's stdout and forwards GAPROGRESS markers to `report(pct, message)`. /// Blocking; intended to run on a background thread. Writes ~/.ga_desktop_settings.json. -fn run_offline_prepare(project_dir: &str, report: &dyn Fn(i32, &str)) -> Result<(), String> { +fn run_offline_prepare( + project_dir: &str, + report: &dyn Fn(i32, &str), + log: &dyn Fn(&str), +) -> Result<(), String> { let root = bundle_root().ok_or("cannot locate bundle root")?; let wheels = root.join("wheels"); @@ -568,10 +1607,14 @@ fn run_offline_prepare(project_dir: &str, report: &dyn Fn(i32, &str)) -> Result< let mut c = Command::new("powershell.exe"); c.args(["-NoProfile", "-ExecutionPolicy", "Bypass", "-File"]) .arg(&script) - .arg("-PythonPath").arg(&py) - .arg("-ProjectDir").arg(project_dir) - .arg("-WheelDir").arg(&wheels) - .arg("-ExtraPipPackages").arg("fastapi uvicorn websockets") + .arg("-PythonPath") + .arg(&py) + .arg("-ProjectDir") + .arg(project_dir) + .arg("-WheelDir") + .arg(&wheels) + .arg("-ExtraPipPackages") + .arg("fastapi uvicorn websockets") // -NoVenv: install deps straight into the embedded python (no venv) so the // bundle is relocatable. See prepared_marker / find_python. .args(["-Mode", "PrepareOnly", "-SkipNpmInstall", "-NoVenv"]); @@ -581,10 +1624,14 @@ fn run_offline_prepare(project_dir: &str, report: &dyn Fn(i32, &str)) -> Result< let mut cmd = { let mut c = Command::new("bash"); c.arg(&script) - .arg("--python-path").arg(&py) - .arg("--project-dir").arg(project_dir) - .arg("--wheel-dir").arg(&wheels) - .arg("--extra-packages").arg("fastapi uvicorn websockets") + .arg("--python-path") + .arg(&py) + .arg("--project-dir") + .arg(project_dir) + .arg("--wheel-dir") + .arg(&wheels) + .arg("--extra-packages") + .arg("fastapi uvicorn websockets") // --no-venv: install deps straight into the embedded python (no venv) so the // bundle is relocatable. See prepared_marker / find_python. .args(["--mode", "PrepareOnly", "--no-venv"]); @@ -592,70 +1639,64 @@ fn run_offline_prepare(project_dir: &str, report: &dyn Fn(i32, &str)) -> Result< }; cmd.stdout(Stdio::piped()).stderr(Stdio::piped()); - sanitize_bundle_env(&mut cmd); + sanitize_bundle_env(&mut cmd, project_dir); #[cfg(windows)] cmd.creation_flags(0x08000000); // CREATE_NO_WINDOW - let mut child = cmd.spawn().map_err(|e| format!("failed to launch prepare: {}", e))?; - - // Keep only the last N lines of a stream (pip errors are at the end; a full capture - // could be huge and the setup window only needs the tail to explain the failure). - const TAIL: usize = 40; - fn push_tail(buf: &mut Vec, line: String) { - if buf.len() >= TAIL { - buf.remove(0); - } - buf.push(line); + let mut child = cmd + .spawn() + .map_err(|e| format!("failed to launch prepare: {}", e))?; + + // Drain both streams concurrently so a verbose prepare cannot deadlock on a full pipe. + // Only stable stage keys reach the main copy; raw output is retained in diagnostics. + let (sender, receiver) = std::sync::mpsc::channel::>(); + let mut stream_count = 0; + if let Some(stdout) = child.stdout.take() { + stream_count += 1; + let sender = sender.clone(); + thread::spawn(move || { + for line in BufReader::new(stdout).lines().map_while(Result::ok) { + let _ = sender.send(Some(line)); + } + let _ = sender.send(None); + }); } - - // Drain stderr on a helper thread (both pipes must be drained concurrently or the child - // can deadlock on a full pipe buffer). pip/install errors land here. - let stderr_tail = std::sync::Arc::new(Mutex::new(Vec::::new())); - let stderr_thread = child.stderr.take().map(|err| { - let tail = std::sync::Arc::clone(&stderr_tail); + if let Some(stderr) = child.stderr.take() { + stream_count += 1; + let sender = sender.clone(); thread::spawn(move || { - for line in BufReader::new(err).lines().flatten() { - push_tail(&mut tail.lock().unwrap(), line); + for line in BufReader::new(stderr).lines().map_while(Result::ok) { + let _ = sender.send(Some(line)); } - }) - }); - - // Forward the script's ASCII progress keys to the loading window, which localizes them - // (window.gaProgress maps key -> zh/en by navigator.language). Non-progress stdout is - // kept (tail only) so a failure can show what the script was doing when it died. - let mut stdout_tail: Vec = Vec::new(); - if let Some(out) = child.stdout.take() { - for line in BufReader::new(out).lines().flatten() { - if let Some(key) = line.trim().strip_prefix("GAPROGRESS|") { - match key.trim() { - "venv" => report(15, "venv"), - "deps" => report(45, "deps"), - "done" => report(90, "done"), - _ => {} + let _ = sender.send(None); + }); + } + drop(sender); + + let mut completed_streams = 0; + while completed_streams < stream_count { + match receiver.recv() { + Ok(Some(line)) => { + if let Some(key) = line.trim().strip_prefix("GAPROGRESS|") { + match key.trim() { + "venv" => report(25, "python"), + "deps" => report(50, "dependencies"), + "done" => report(75, "dependencies"), + _ => {} + } + } else { + log(&line); } - } else if !line.trim().is_empty() { - push_tail(&mut stdout_tail, line); } + Ok(None) => completed_streams += 1, + Err(_) => break, } } - let status = child.wait().map_err(|e| format!("prepare wait failed: {}", e))?; - if let Some(h) = stderr_thread { - let _ = h.join(); - } + let status = child + .wait() + .map_err(|e| format!("prepare wait failed: {}", e))?; if !status.success() { - // Surface the real installer output, not just the exit code (shown in the setup - // window via get_prepare_error and written to prepare_error.log). - let mut msg = format!("prepare exited with status {:?}", status.code()); - let err_lines = stderr_tail.lock().unwrap(); - if !err_lines.is_empty() { - msg.push_str("\n\n--- stderr (tail) ---\n"); - msg.push_str(&err_lines.join("\n")); - } - if !stdout_tail.is_empty() { - msg.push_str("\n\n--- output (tail) ---\n"); - msg.push_str(&stdout_tail.join("\n")); - } - return Err(msg); + return Err(format!("prepare exited with status {:?}", status.code())); } // Record success so later launches (and relocated copies) skip the prepare step. if let Some(marker) = prepared_marker() { @@ -664,213 +1705,773 @@ fn run_offline_prepare(project_dir: &str, report: &dyn Fn(i32, &str)) -> Result< Ok(()) } +const MAX_IDENTITY_RESPONSE_BYTES: usize = 32 * 1024; +const MAX_IDENTITY_PATH_BYTES: usize = 2 * 1024; +const MAX_IDENTITY_BUILD_BYTES: usize = 256; +const MAX_SHUTDOWN_RESPONSE_BYTES: usize = 4 * 1024; + +#[derive(Debug, PartialEq, Eq)] +enum BridgeShutdownResponse { + Accepted, + Refused { status: u16, maintenance: bool }, + Indeterminate, +} + +fn normalize_bridge_identity(identity: serde_json::Value) -> Option { + let ga_root = identity.get("ga_root")?.as_str()?; + let build_id = identity + .get("build_id") + .and_then(|value| value.as_str()) + .unwrap_or(""); + let pid = identity.get("pid")?.as_u64()?; + if ga_root.is_empty() + || ga_root.len() > MAX_IDENTITY_PATH_BYTES + || build_id.len() > MAX_IDENTITY_BUILD_BYTES + || pid == 0 + { + return None; + } + Some(serde_json::json!({ + "ga_root": ga_root, + "build_id": build_id, + "pid": pid + })) +} + /// GET /services/identity from a running bridge; returns the parsed JSON (or None when the /// endpoint is absent — i.e. an older/foreign bridge). fn bridge_reported_identity() -> Option { use std::io::{Read, Write}; - let mut stream = TcpStream::connect_timeout( - &"127.0.0.1:14168".parse().unwrap(), - Duration::from_millis(800), - ).ok()?; + let endpoint = bridge_endpoint(); + let addr = endpoint.tcp_addr()?; + let mut stream = TcpStream::connect_timeout(&addr, Duration::from_millis(800)).ok()?; let _ = stream.set_read_timeout(Some(Duration::from_millis(800))); let _ = stream.set_write_timeout(Some(Duration::from_millis(600))); - let req = b"GET /services/identity HTTP/1.1\r\nHost: 127.0.0.1\r\nConnection: close\r\n\r\n"; - stream.write_all(req).ok()?; + let req = format!( + "GET /services/identity HTTP/1.1\r\nHost: {}\r\nConnection: close\r\n\r\n", + endpoint.socket_addr(), + ); + stream.write_all(req.as_bytes()).ok()?; let mut buf = Vec::new(); - let _ = stream.read_to_end(&mut buf); + stream + .take((MAX_IDENTITY_RESPONSE_BYTES + 1) as u64) + .read_to_end(&mut buf) + .ok()?; + if buf.len() > MAX_IDENTITY_RESPONSE_BYTES { + return None; + } let text = String::from_utf8_lossy(&buf); - let body = text.split("\r\n\r\n").nth(1)?; - serde_json::from_str(body.trim()).ok() + let mut response = text.splitn(2, "\r\n\r\n"); + let headers = response.next()?; + let status = headers.lines().next()?; + if !(status.starts_with("HTTP/1.1 200 ") || status.starts_with("HTTP/1.0 200 ")) { + return None; + } + let body = response.next()?; + normalize_bridge_identity(serde_json::from_str(body.trim()).ok()?) } fn norm_path(p: &str) -> String { std::fs::canonicalize(p) - .map(|c| display_path(&c)) + .map(|c| c.to_string_lossy().to_string()) .unwrap_or_else(|_| p.to_string()) } -/// A running bridge is "ours" only when it serves the same install path AND was spawned by the -/// same build. The build id (commit+timestamp, see build.rs) changes on every build, so an -/// in-place upgrade or a same-version re-publish still counts as a different bridge → take over. -/// An old bridge with no /identity (None) or no build_id field ("") never matches → taken over. -fn bridge_identity_matches(project_dir: &str) -> bool { - let Some(id) = bridge_reported_identity() else { return false; }; - let reported_root = id.get("ga_root").and_then(|v| v.as_str()).unwrap_or(""); - let reported_build = id.get("build_id").and_then(|v| v.as_str()).unwrap_or(""); - if reported_build != env!("GA_BUILD_ID") { - return false; +fn effective_ga_root(project_dir: &str) -> String { + effective_ga_root_from(project_dir, &read_settings()) +} + +fn bootstrap_failure(code: BootstrapFailureCode, detail: impl AsRef) -> BootstrapFailure { + BootstrapFailure { + code, + detail: sanitize_diagnostic_line(detail.as_ref()), } - path_matches(reported_root, project_dir) } -/// Last resort when a stale bridge ignores POST /services/bridge/exit (e.g. an old build with -/// no such endpoint): force-kill whatever process is listening on :14168 so the new bridge can -/// bind it. Only called after an identity mismatch, so we never kill a bridge that is ours. -fn force_free_bridge_port() { - #[cfg(windows)] - { - // netstat -ano: last column is the PID for the :14168 LISTENING row. - if let Ok(out) = Command::new("netstat").args(["-ano", "-p", "tcp"]).output() { - let text = String::from_utf8_lossy(&out.stdout); - for line in text.lines() { - if line.contains(":14168") && line.to_uppercase().contains("LISTENING") { - if let Some(pid) = line.split_whitespace().last() { - let mut c = Command::new("taskkill"); - c.args(["/F", "/PID", pid]); - c.creation_flags(0x08000000); - let _ = c.status(); - } - } - } - } +fn parse_bridge_shutdown_response(response: &[u8]) -> BridgeShutdownResponse { + // The HTTP status line is authoritative even if an error body is truncated + // or contains non-UTF-8 bytes. Lossy decoding cannot turn an invalid status + // line into one of the exact HTTP/version/status tokens accepted below. + let text = String::from_utf8_lossy(response); + let Some((status_line, _)) = text.split_once("\r\n") else { + return BridgeShutdownResponse::Indeterminate; + }; + let mut parts = status_line.split_ascii_whitespace(); + let Some(version) = parts.next() else { + return BridgeShutdownResponse::Indeterminate; + }; + if version != "HTTP/1.0" && version != "HTTP/1.1" { + return BridgeShutdownResponse::Indeterminate; } - #[cfg(not(windows))] - { - // lsof prints the listening PIDs; kill -9 each. - if let Ok(out) = Command::new("lsof").args(["-ti", "tcp:14168", "-sTCP:LISTEN"]).output() { - for pid in String::from_utf8_lossy(&out.stdout).split_whitespace() { - let _ = Command::new("kill").args(["-9", pid]).status(); - } - } + let Some(raw_status) = parts.next() else { + return BridgeShutdownResponse::Indeterminate; + }; + if raw_status.len() != 3 || !raw_status.bytes().all(|byte| byte.is_ascii_digit()) { + return BridgeShutdownResponse::Indeterminate; + } + let Ok(status) = raw_status.parse::() else { + return BridgeShutdownResponse::Indeterminate; + }; + if (200..300).contains(&status) { + return BridgeShutdownResponse::Accepted; + } + let body = text + .split_once("\r\n\r\n") + .map(|(_, body)| body.trim()) + .unwrap_or(""); + let maintenance = status == 409 + && serde_json::from_str::(body) + .ok() + .and_then(|document| { + document + .get("code") + .and_then(serde_json::Value::as_str) + .map(|code| code == "maintenance_conflict") + }) + .unwrap_or(false); + BridgeShutdownResponse::Refused { + status, + maintenance, } } -fn request_bridge_shutdown() { +fn request_bridge_shutdown() -> BridgeShutdownResponse { + request_bridge_shutdown_at(&bridge_endpoint()) +} + +fn request_bridge_shutdown_at(endpoint: &BridgeEndpoint) -> BridgeShutdownResponse { use std::io::{Read, Write}; - let Ok(mut stream) = TcpStream::connect_timeout( - &"127.0.0.1:14168".parse().unwrap(), - Duration::from_millis(800), - ) else { - return; + let Some(addr) = endpoint.tcp_addr() else { + return BridgeShutdownResponse::Indeterminate; + }; + let Ok(mut stream) = TcpStream::connect_timeout(&addr, Duration::from_millis(800)) else { + return BridgeShutdownResponse::Indeterminate; }; let _ = stream.set_read_timeout(Some(Duration::from_millis(600))); let _ = stream.set_write_timeout(Some(Duration::from_millis(600))); - let req = b"POST /services/bridge/exit HTTP/1.1\r\nHost: 127.0.0.1\r\nContent-Length: 0\r\nConnection: close\r\n\r\n"; - let _ = stream.write_all(req); - let _ = stream.read(&mut [0u8; 512]); + let req = format!( + "POST /services/bridge/exit HTTP/1.1\r\nHost: {}\r\nContent-Length: 0\r\nConnection: close\r\n\r\n", + endpoint.socket_addr(), + ); + if stream.write_all(req.as_bytes()).is_err() { + return BridgeShutdownResponse::Indeterminate; + } + let mut response = Vec::new(); + // A timeout or oversized body must not erase an already received explicit + // non-2xx status. Parse the bounded prefix; an incomplete status line stays + // indeterminate and retains the established own-child fallback. + let _ = stream + .take(MAX_SHUTDOWN_RESPONSE_BYTES as u64) + .read_to_end(&mut response); + parse_bridge_shutdown_response(&response) } -fn takeover_stale_bridge(project_dir: &str) { - if project_dir.is_empty() || !is_bridge_running() { - return; - } - if bridge_identity_matches(project_dir) { - return; - } - eprintln!("[tauri] a different/stale bridge holds 127.0.0.1:14168; taking over"); - request_bridge_shutdown(); - let start = Instant::now(); - while is_bridge_running() && start.elapsed() < Duration::from_secs(10) { - thread::sleep(Duration::from_millis(200)); +fn shutdown_refusal_failure(response: BridgeShutdownResponse) -> Option { + let BridgeShutdownResponse::Refused { + status, + maintenance, + } = response + else { + return None; + }; + let detail = if maintenance { + "the Desktop bridge is busy with data maintenance and refused a safe restart".to_string() + } else { + format!("the Desktop bridge refused a safe restart with HTTP {status}") + }; + Some(bootstrap_failure( + BootstrapFailureCode::BridgeShutdownRefused, + detail, + )) +} + +fn is_bridge_running() -> bool { + bridge_endpoint() + .tcp_addr() + .is_some_and(|addr| TcpStream::connect(addr).is_ok()) +} + +fn resolve_existing_listener( + app_handle: &tauri::AppHandle, + project_dir: &str, +) -> Result { + if !is_bridge_running() { + if BRIDGE_PROCESS.lock().unwrap().is_some() { + record_diagnostic_log( + app_handle, + "A tracked bridge process no longer owns the local listener; stopping it before retry.", + ); + stop_tracked_bridge(); + } + set_port_diagnostics(app_handle, PortState::Free, None); + return Ok(false); } - // Old bridges have no /services/bridge/exit endpoint and ignore the request above — if the - // port is still held, force-kill the listener so our fresh bridge can bind it. - if is_bridge_running() { - eprintln!("[tauri] stale bridge did not exit; force-freeing :14168"); - force_free_bridge_port(); - let start = Instant::now(); - while is_bridge_running() && start.elapsed() < Duration::from_secs(5) { - thread::sleep(Duration::from_millis(200)); + + let identity = bridge_reported_identity(); + match classify_listener_identity(identity.as_ref(), project_dir) { + ListenerIdentity::Owned => { + set_port_diagnostics(app_handle, PortState::Owned, identity.as_ref()); + Ok(true) + } + ListenerIdentity::Foreign => { + set_port_diagnostics(app_handle, PortState::Foreign, None); + Err(bootstrap_failure( + BootstrapFailureCode::PortConflict, + format!( + "{} is held by an unidentified process", + bridge_endpoint().socket_addr() + ), + )) + } + ListenerIdentity::KnownGenericAgent => { + set_port_diagnostics(app_handle, PortState::Foreign, identity.as_ref()); + record_diagnostic_log( + app_handle, + "A previous GenericAgent bridge was found; requesting graceful shutdown.", + ); + if let Some(failure) = shutdown_refusal_failure(request_bridge_shutdown()) { + record_diagnostic_log(app_handle, &failure.detail); + return Err(failure); + } + let start = Instant::now(); + while is_bridge_running() && start.elapsed() < Duration::from_secs(10) { + thread::sleep(Duration::from_millis(200)); + } + + if is_bridge_running() { + let remaining_identity = bridge_reported_identity(); + if classify_listener_identity(remaining_identity.as_ref(), project_dir) + != ListenerIdentity::KnownGenericAgent + { + set_port_diagnostics( + app_handle, + PortState::Foreign, + remaining_identity.as_ref(), + ); + return Err(bootstrap_failure( + BootstrapFailureCode::PortConflict, + "the local listener changed identity while waiting for shutdown", + )); + } + record_diagnostic_log( + app_handle, + "The identified old bridge ignored graceful shutdown; it will not be force-stopped.", + ); + return Err(bootstrap_failure( + BootstrapFailureCode::PortConflict, + format!( + "the identified old bridge did not release {}", + bridge_endpoint().socket_addr() + ), + )); + } + + if is_bridge_running() { + set_port_diagnostics( + app_handle, + PortState::Foreign, + bridge_reported_identity().as_ref(), + ); + Err(bootstrap_failure( + BootstrapFailureCode::PortConflict, + format!( + "the identified old bridge did not release {}", + bridge_endpoint().socket_addr() + ), + )) + } else { + // A bridge spawned by this desktop process may release the socket slightly + // before its process and pipe readers finish. Reap only that tracked child; + // an untracked bridge that exited gracefully is left untouched. + let tracked_child = BRIDGE_PROCESS.lock().unwrap().is_some(); + if tracked_child { + stop_tracked_bridge(); + } + set_port_diagnostics(app_handle, PortState::Free, None); + Ok(false) + } } } } -fn is_bridge_running() -> bool { - TcpStream::connect(("127.0.0.1", 14168)).is_ok() +fn bridge_command(python_path: &str, project_dir: &str) -> Result { + if python_path.trim().is_empty() { + return Err(bootstrap_failure( + BootstrapFailureCode::SpawnFailed, + "Python interpreter path is empty", + )); + } + let dir = PathBuf::from(project_dir); + let script = dir.join("frontends").join("desktop_bridge.py"); + if !script.exists() { + return Err(bootstrap_failure( + BootstrapFailureCode::ConfigUnresolved, + format!("desktop bridge not found under {}", dir.display()), + )); + } + + let mut cmd = Command::new(python_path); + cmd.arg(&script).current_dir(&dir); + cmd.stdout(Stdio::piped()).stderr(Stdio::piped()); + sanitize_bundle_env(&mut cmd, project_dir); + Ok(cmd) } -fn wait_for_port(port: u16, timeout: Duration) -> bool { - let start = Instant::now(); - while start.elapsed() < timeout { - if TcpStream::connect(("127.0.0.1", port)).is_ok() { - return true; +fn capture_bridge_output( + app_handle: tauri::AppHandle, + stream_name: &'static str, + stream: R, +) -> thread::JoinHandle<()> { + thread::spawn(move || { + for line in BufReader::new(stream).lines().map_while(Result::ok) { + record_diagnostic_log(&app_handle, &format!("{stream_name}: {line}")); } - thread::sleep(Duration::from_millis(100)); + }) +} + +fn join_bridge_log_readers() { + let readers = std::mem::take(&mut *BRIDGE_LOG_READERS.lock().unwrap()); + for reader in readers { + let _ = reader.join(); } - false } -fn path_matches(a: &str, b: &str) -> bool { - let (a, b) = (norm_path(a), norm_path(b)); +fn spawn_bridge_process( + app_handle: &tauri::AppHandle, + python_path: &str, + project_dir: &str, +) -> Result<(), BootstrapFailure> { + if is_bridge_running() { + return Err(bootstrap_failure( + BootstrapFailureCode::PortConflict, + format!( + "cannot spawn while {} is already in use", + bridge_endpoint().socket_addr() + ), + )); + } + + let mut command = bridge_command(python_path, project_dir)?; #[cfg(windows)] - { a.eq_ignore_ascii_case(&b) } + command.creation_flags(0x08000000 | 0x01000000); // CREATE_NO_WINDOW | CREATE_BREAKAWAY_FROM_JOB + + let spawn_result = command.spawn(); + #[cfg(windows)] + let mut child = match spawn_result { + Ok(child) => child, + Err(error) if should_retry_without_breakaway(error.raw_os_error()) => { + record_diagnostic_log( + app_handle, + "Windows denied CREATE_BREAKAWAY_FROM_JOB; retrying with CREATE_NO_WINDOW.", + ); + let mut fallback = bridge_command(python_path, project_dir)?; + fallback.creation_flags(0x08000000); // CREATE_NO_WINDOW + fallback.spawn().map_err(|fallback_error| { + bootstrap_failure( + BootstrapFailureCode::SpawnFailed, + format!("bridge spawn fallback failed: {fallback_error}"), + ) + })? + } + Err(error) => { + return Err(bootstrap_failure( + BootstrapFailureCode::SpawnFailed, + format!("bridge spawn failed: {error}"), + )); + } + }; #[cfg(not(windows))] - { a == b } + let mut child = spawn_result.map_err(|error| { + bootstrap_failure( + BootstrapFailureCode::SpawnFailed, + format!("bridge spawn failed: {error}"), + ) + })?; + + let mut readers = Vec::new(); + if let Some(stdout) = child.stdout.take() { + readers.push(capture_bridge_output(app_handle.clone(), "stdout", stdout)); + } + if let Some(stderr) = child.stderr.take() { + readers.push(capture_bridge_output(app_handle.clone(), "stderr", stderr)); + } + *BRIDGE_LOG_READERS.lock().unwrap() = readers; + *BRIDGE_PROCESS.lock().unwrap() = Some(child); + Ok(()) +} + +fn bridge_exit_status() -> Result, BootstrapFailure> { + let result = { + let mut process = BRIDGE_PROCESS.lock().unwrap(); + let result = match process.as_mut() { + Some(child) => child.try_wait().map_err(|error| { + bootstrap_failure( + BootstrapFailureCode::ServiceExited, + format!("failed to inspect bridge process: {error}"), + ) + })?, + None => None, + }; + if result.is_some() { + *process = None; + } + result + }; + if let Some(status) = result { + join_bridge_log_readers(); + return Ok(Some(format!("bridge exited with status {status}"))); + } + Ok(None) } -fn wait_for_bridge_identity(expected_ga_root: &str, timeout: Duration) -> bool { +fn stop_tracked_bridge() { + if let Some(mut child) = BRIDGE_PROCESS.lock().unwrap().take() { + let _ = child.kill(); + let _ = child.wait(); + } + join_bridge_log_readers(); +} + +fn wait_for_owned_bridge( + app_handle: &tauri::AppHandle, + project_dir: &str, + timeout: Duration, +) -> Result<(), BootstrapFailure> { let start = Instant::now(); + let mut unidentified_since: Option = None; while start.elapsed() < timeout { - if let Some(id) = bridge_reported_identity() { - let reported_root = id.get("ga_root").and_then(|v| v.as_str()).unwrap_or(""); - let reported_build = id.get("build_id").and_then(|v| v.as_str()).unwrap_or(""); - if reported_build == env!("GA_BUILD_ID") && path_matches(reported_root, expected_ga_root) { - return true; + if let Some(detail) = bridge_exit_status()? { + return Err(bootstrap_failure( + BootstrapFailureCode::ServiceExited, + detail, + )); + } + + if let Some(identity) = bridge_reported_identity() { + match classify_listener_identity(Some(&identity), project_dir) { + ListenerIdentity::Owned => { + set_port_diagnostics(app_handle, PortState::Owned, Some(&identity)); + return Ok(()); + } + ListenerIdentity::KnownGenericAgent => { + set_port_diagnostics(app_handle, PortState::Foreign, Some(&identity)); + return Err(bootstrap_failure( + BootstrapFailureCode::PortConflict, + "a different GenericAgent bridge answered during readiness", + )); + } + ListenerIdentity::Foreign => { + set_port_diagnostics(app_handle, PortState::Foreign, None); + return Err(bootstrap_failure( + BootstrapFailureCode::PortConflict, + "a foreign identity response answered during readiness", + )); + } + } + } + + if is_bridge_running() { + let since = unidentified_since.get_or_insert_with(Instant::now); + if BRIDGE_PROCESS.lock().unwrap().is_none() || since.elapsed() >= Duration::from_secs(2) + { + set_port_diagnostics(app_handle, PortState::Foreign, None); + return Err(bootstrap_failure( + BootstrapFailureCode::PortConflict, + "an unidentified process answered during readiness", + )); } + } else { + unidentified_since = None; } thread::sleep(Duration::from_millis(150)); } - false + + Err(bootstrap_failure( + BootstrapFailureCode::ServiceTimeout, + format!( + "bridge identity did not become ready within {} seconds", + timeout.as_secs() + ), + )) } -fn spawn_bridge_process(python_path: &str, project_dir: &str) -> Result<(), String> { - if is_bridge_running() { - return Ok(()); +fn main_ui_url_from_current(mut current_url: tauri::Url) -> Result { + if current_url.cannot_be_a_base() { + return Err("current main window URL cannot resolve an application asset".to_string()); } - let py = PathBuf::from(python_path); - let dir = PathBuf::from(project_dir); - let script = dir.join("frontends").join("desktop_bridge.py"); - if !script.exists() { - return Err(format!("desktop_bridge.py not found at {:?}", script)); + current_url.set_path("/index.html"); + current_url.set_query(None); + current_url.set_fragment(None); + Ok(current_url) +} + +fn open_main_window(app_handle: &tauri::AppHandle, dev_mode: bool) -> Result<(), BootstrapFailure> { + let main_window = app_handle.get_webview_window("main").ok_or_else(|| { + bootstrap_failure( + BootstrapFailureCode::UiNavigationFailed, + "main window is unavailable", + ) + })?; + // Derive the target from the webview's current loading.html URL so each + // platform keeps the asset scheme Tauri selected for it. WebView2 uses + // http://tauri.localhost while WKWebView uses tauri://localhost. + let current_url = main_window.url().map_err(|error| { + bootstrap_failure( + BootstrapFailureCode::UiNavigationFailed, + format!("main window URL could not be read: {error}"), + ) + })?; + let url = main_ui_url_from_current(current_url.clone()) + .map_err(|error| bootstrap_failure(BootstrapFailureCode::UiNavigationFailed, error))?; + // Source switches are invoked from index.html. Navigating that same webview while its + // Tauri command is in flight destroys the JavaScript callback, so the caller never sees + // the command resolve and a subsequent clear_ga_source can remain blocked. Initial + // bootstrap still moves loading.html to index.html; hot restarts keep the current page. + if current_url != url { + main_window.navigate(url).map_err(|error| { + bootstrap_failure( + BootstrapFailureCode::UiNavigationFailed, + format!("main window navigation failed: {error}"), + ) + })?; + } + main_window.show().map_err(|error| { + bootstrap_failure( + BootstrapFailureCode::UiNavigationFailed, + format!("main window could not be shown: {error}"), + ) + })?; + main_window.set_focus().map_err(|error| { + bootstrap_failure( + BootstrapFailureCode::UiNavigationFailed, + format!("main window could not be focused: {error}"), + ) + })?; + + if dev_mode { + main_window.open_devtools(); + } else { + let _ = main_window.eval( + r#" + document.addEventListener('keydown', function(e) { + if (e.key === 'F12' || e.key === 'F5' || + (e.ctrlKey && e.key === 'r') || + (e.ctrlKey && e.shiftKey && e.key === 'I')) { + e.preventDefault(); + } + }); + document.addEventListener('contextmenu', function(e) { + e.preventDefault(); + }); + "#, + ); } - let mut cmd = Command::new(&py); - cmd.arg(&script).current_dir(&dir); - sanitize_bundle_env(&mut cmd); - #[cfg(windows)] - cmd.creation_flags(0x08000000); // CREATE_NO_WINDOW - let child = cmd.spawn().map_err(|e| format!("Failed to spawn: {}", e))?; - *BRIDGE_PROCESS.lock().unwrap() = Some(child); + if let Some(setup_window) = app_handle.get_webview_window("setup") { + let _ = setup_window.hide(); + } Ok(()) } -fn show_bridge_window(app_handle: &tauri::AppHandle) { - if let Some(main_win) = app_handle.get_webview_window("main") { - let url = tauri::Url::parse("http://127.0.0.1:14168/").unwrap(); - let _ = main_win.navigate(url); - let _ = main_win.show(); - let _ = main_win.set_focus(); +fn show_bootstrap_recovery(app_handle: &tauri::AppHandle) { + if let Some(main_window) = app_handle.get_webview_window("main") { + let _ = main_window.hide(); } - if let Some(setup_win) = app_handle.get_webview_window("setup") { - let _ = setup_win.hide(); + if let Some(setup_window) = app_handle.get_webview_window("setup") { + let _ = setup_window.show(); + let _ = setup_window.set_focus(); } } -#[tauri::command] -fn start_bridge_with_config(app_handle: tauri::AppHandle, python_path: String, project_dir: String) -> Result<(), String> { - // Save to settings (merge so sibling keys like desktop_shortcut survive). - merge_settings(serde_json::json!({"python_path": python_path, "project_dir": project_dir})); - - spawn_bridge_process(&python_path, &project_dir)?; +static BOOTSTRAP_RUN_LOCK: Mutex<()> = Mutex::new(()); + +fn bootstrap_inner( + app_handle: &tauri::AppHandle, + python_path: &str, + project_dir: &str, + dev_mode: bool, +) -> Result<(), BootstrapFailure> { + let project = PathBuf::from(project_dir); + if project_dir.trim().is_empty() + || !project.join("agentmain.py").exists() + || !project.join("frontends").join("desktop_bridge.py").exists() + { + return Err(bootstrap_failure( + BootstrapFailureCode::ConfigUnresolved, + format!("GenericAgent source was not found at {}", project.display()), + )); + } + if !python_interpreter_resolves(python_path) { + return Err(bootstrap_failure( + BootstrapFailureCode::SpawnFailed, + format!("Python interpreter was not found at {python_path}"), + )); + } + + ensure_builtin_ga_root(project_dir) + .map_err(|detail| bootstrap_failure(BootstrapFailureCode::PrepareFailed, detail))?; + + set_bootstrap_phase(app_handle, BootstrapPhase::Resolving, Some("validate"), 10); + let expected_ga_root = effective_ga_root(project_dir); + let prepare_needed = needs_first_run_prepare(project_dir); + let already_ready = resolve_existing_listener(app_handle, &expected_ga_root)?; + if already_ready { + snapshot_update(Some(app_handle), |snapshot| { + snapshot.mode = BootstrapMode::HotStart + }); + } else { + snapshot_update(Some(app_handle), |snapshot| { + snapshot.mode = if prepare_needed { + BootstrapMode::Prepare + } else { + BootstrapMode::ColdStart + }; + }); + if prepare_needed { + set_bootstrap_phase(app_handle, BootstrapPhase::Preparing, Some("validate"), 15); + let report = |progress: i32, stage: &str| { + set_bootstrap_phase( + app_handle, + BootstrapPhase::Preparing, + Some(stage), + progress.clamp(0, 100) as u8, + ); + }; + let log = |line: &str| record_diagnostic_log(app_handle, line); + run_offline_prepare(project_dir, &report, &log) + .map_err(|detail| bootstrap_failure(BootstrapFailureCode::PrepareFailed, detail))?; + } - // Wait for port - if !wait_for_port(14168, Duration::from_secs(20)) { - return Err("Bridge did not become ready within 20s".into()); + set_bootstrap_phase( + app_handle, + BootstrapPhase::StartingService, + Some("service"), + 82, + ); + spawn_bridge_process(app_handle, python_path, project_dir)?; } - show_bridge_window(&app_handle); + set_bootstrap_phase( + app_handle, + BootstrapPhase::StartingService, + Some("service"), + 90, + ); + let timeout = if prepare_needed && !already_ready { + Duration::from_secs(60) + } else { + Duration::from_secs(30) + }; + wait_for_owned_bridge(app_handle, &expected_ga_root, timeout)?; + + set_bootstrap_phase(app_handle, BootstrapPhase::OpeningUi, Some("ui"), 98); + open_main_window(app_handle, dev_mode)?; + set_bootstrap_phase(app_handle, BootstrapPhase::Ready, None, 100); + maybe_setup_shortcut(); Ok(()) } +fn execute_bootstrap( + app_handle: &tauri::AppHandle, + python_path: String, + project_dir: String, + dev_mode: bool, +) -> Result<(), String> { + let _run_guard = BOOTSTRAP_RUN_LOCK + .lock() + .map_err(|_| "bootstrap lock poisoned".to_string())?; + let initial_mode = if needs_first_run_prepare(&project_dir) { + BootstrapMode::Prepare + } else { + BootstrapMode::ColdStart + }; + begin_bootstrap(app_handle, initial_mode, &python_path, &project_dir); + + match bootstrap_inner(app_handle, &python_path, &project_dir, dev_mode) { + Ok(()) => Ok(()), + Err(failure) => { + if should_force_stop_tracked_bridge(failure.code) { + // This handle only ever refers to a child spawned by this desktop process. + // It is safe to stop; the unidentified listener itself is never targeted. + stop_tracked_bridge(); + } + record_diagnostic_log(app_handle, &failure.detail); + snapshot_update(Some(app_handle), |snapshot| { + snapshot.phase = BootstrapPhase::Failed; + snapshot.progress = snapshot.progress.min(99); + snapshot.failure = Some(failure.clone()); + }); + show_bootstrap_recovery(app_handle); + Err(failure.detail) + } + } +} + +fn should_force_stop_tracked_bridge(code: BootstrapFailureCode) -> bool { + matches!( + code, + BootstrapFailureCode::ServiceTimeout | BootstrapFailureCode::PortConflict + ) +} + +async fn execute_bootstrap_async( + app_handle: tauri::AppHandle, + python_path: String, + project_dir: String, + dev_mode: bool, +) -> Result<(), String> { + tauri::async_runtime::spawn_blocking(move || { + execute_bootstrap(&app_handle, python_path, project_dir, dev_mode) + }) + .await + .map_err(|error| format!("bootstrap task failed: {error}"))? +} + +fn resolve_requested_bootstrap_config( + requested_python: String, + requested_project: String, +) -> Result<(String, String), String> { + if bundle_root().is_some() { + return Ok(get_or_discover_config()); + } + let python = if requested_python.trim().is_empty() { + let settings = read_settings(); + let saved = settings.get("python_path").and_then(|value| value.as_str()); + discover_python_for_project_path(Path::new(requested_project.trim()), saved) + } else { + requested_python + }; + merge_settings(serde_json::json!({ + "python_path": python, + "project_dir": requested_project + }))?; + Ok((python, requested_project)) +} + +#[tauri::command] +async fn retry_bootstrap( + app_handle: tauri::AppHandle, + python_path: String, + project_dir: String, +) -> Result<(), String> { + let (python_path, project_dir) = resolve_requested_bootstrap_config(python_path, project_dir)?; + execute_bootstrap_async(app_handle, python_path, project_dir, false).await +} + #[tauri::command] -fn start_bridge(app_handle: tauri::AppHandle) -> Result<(), String> { +async fn start_bridge_with_config( + app_handle: tauri::AppHandle, + python_path: String, + project_dir: String, +) -> Result<(), String> { + let (python_path, project_dir) = resolve_requested_bootstrap_config(python_path, project_dir)?; + execute_bootstrap_async(app_handle, python_path, project_dir, false).await +} + +#[tauri::command] +async fn start_bridge(app_handle: tauri::AppHandle) -> Result<(), String> { let (python_path, project_dir) = get_or_discover_config(); - spawn_bridge_process(&python_path, &project_dir)?; - if !wait_for_port(14168, Duration::from_secs(20)) { - return Err("Bridge did not become ready within 20s".into()); - } - show_bridge_window(&app_handle); - Ok(()) + execute_bootstrap_async(app_handle, python_path, project_dir, false).await } #[tauri::command] @@ -878,6 +2479,11 @@ fn get_config() -> (String, String) { get_or_discover_config() } +#[tauri::command] +fn discover_python_for_project(project_dir: String, current_python: Option) -> String { + discover_python_for_project_path(Path::new(project_dir.trim()), current_python.as_deref()) +} + #[tauri::command] fn export_mykey(content: String) -> Result, String> { let path = rfd::FileDialog::new() @@ -904,173 +2510,223 @@ fn pick_directory(title: Option) -> Option { dlg.pick_folder().map(|p| p.to_string_lossy().into_owned()) } -/// Stop the current bridge (ours or a stale one) and free :14168 before respawning. -fn stop_current_bridge() { - request_bridge_shutdown(); - if let Some(mut child) = BRIDGE_PROCESS.lock().unwrap().take() { - let _ = child.kill(); - let _ = child.wait(); +#[tauri::command] +fn pick_python_interpreter(title: Option) -> Result, String> { + let mut dialog = rfd::FileDialog::new(); + #[cfg(windows)] + { + dialog = dialog.add_filter("Python", &["exe"]); } - let start = Instant::now(); - while is_bridge_running() && start.elapsed() < Duration::from_secs(6) { - thread::sleep(Duration::from_millis(150)); + if let Some(value) = title.filter(|value| !value.is_empty()) { + dialog = dialog.set_title(&value); } - if is_bridge_running() { - force_free_bridge_port(); - let start = Instant::now(); - while is_bridge_running() && start.elapsed() < Duration::from_secs(5) { - thread::sleep(Duration::from_millis(150)); - } + let Some(path) = dialog.pick_file() else { + return Ok(None); + }; + if !path.is_file() { + return Err("the selected Python environment is unavailable".to_string()); } + Ok(Some(display_path(&path))) } -/// Restart the bridge with whatever get_or_discover_config() now resolves to, then reload the -/// webview so it reconnects. Shared by set_ga_source / clear_ga_source. -fn switch_bridge(app_handle: &tauri::AppHandle) -> Result { - stop_current_bridge(); - let (py, project) = get_or_discover_config(); - if project.is_empty() { - return Err("no GenericAgent source resolved".into()); - } - let expected_ga_root = valid_ga_source_override().unwrap_or_else(|| project.clone()); - spawn_bridge_process(&py, &project)?; - if !wait_for_port(14168, Duration::from_secs(20)) { - return Err("bridge did not become ready within 20s".into()); - } - if !wait_for_bridge_identity(&expected_ga_root, Duration::from_secs(10)) { - return Err(format!("bridge did not switch to GA workspace: {}", expected_ga_root)); - } - show_bridge_window(app_handle); - Ok(expected_ga_root) +#[tauri::command] +fn pick_data_backup_file(title: Option) -> Option { + let mut dialog = rfd::FileDialog::new().add_filter("ZIP", &["zip"]); + if let Some(value) = title.filter(|value| !value.is_empty()) { + dialog = dialog.set_title(&value); + } + dialog + .pick_file() + .map(|path| path.to_string_lossy().into_owned()) } #[tauri::command] -fn get_ga_source() -> String { - read_settings() - .get("ga_source_override") - .and_then(|v| v.as_str()) - .unwrap_or("") - .to_string() +fn pick_data_export_path(default_name: String, title: Option) -> Option { + let safe_default = Path::new(&default_name) + .file_name() + .and_then(|name| name.to_str()) + .filter(|name| name.to_ascii_lowercase().ends_with(".zip")) + .unwrap_or("GenericAgent-data-backup.zip"); + let mut dialog = rfd::FileDialog::new() + .add_filter("ZIP", &["zip"]) + .set_file_name(safe_default); + if let Some(value) = title.filter(|value| !value.is_empty()) { + dialog = dialog.set_title(&value); + } + dialog.save_file().map(|mut path| { + if path.extension().and_then(|value| value.to_str()) != Some("zip") { + path.set_extension("zip"); + } + path.to_string_lossy().into_owned() + }) } #[tauri::command] -fn move_ga_runtime(app_handle: tauri::AppHandle, dir: String) -> Result { - let previous_override = read_settings() - .get("ga_source_override") - .and_then(|v| v.as_str()) - .map(|s| s.to_string()); - let src_s = valid_ga_source_override().or_else(|| find_project_dir()).unwrap_or_default(); - let src = PathBuf::from(src_s.trim()); - let parent = PathBuf::from(dir.trim()); - if src_s.trim().is_empty() { - return Err("current GA workspace is empty; wait for the bridge to become ready and try again".into()); - } - if dir.trim().is_empty() { - return Err("target parent directory is empty".into()); - } - if !src.is_dir() || !src.join("agentmain.py").exists() { - return Err(format!("current GA workspace is invalid: {}", src.to_string_lossy())); - } - std::fs::create_dir_all(&parent).map_err(|e| format!("cannot create target parent dir: {}", e))?; - let src_c = src.canonicalize().unwrap_or(src.clone()); - let parent_c = parent.canonicalize().unwrap_or(parent.clone()); - let name = src_c.file_name().and_then(|s| s.to_str()).unwrap_or("GenericAgent"); - let folder_name = if name == "app" { "GenericAgent" } else { name }; - let dst = parent_c.join(folder_name); - let dst_c = if dst.exists() { dst.canonicalize().unwrap_or(dst.clone()) } else { dst.clone() }; - if same_path(&src_c, &dst_c) { - merge_settings(serde_json::json!({ "ga_source_override": display_path(&dst_c) })); - return switch_bridge(&app_handle).map_err(|err| { - restore_setting("ga_source_override", previous_override.clone()); - err - }); - } - if dst_c.starts_with(&src_c) { - return Err("target directory cannot be inside the current GA workspace".into()); - } - if dst_c.exists() { - return Err(format!("target GA workspace already exists: {}", display_path(&dst_c))); - } - copy_dir_replace(&src_c, &dst_c)?; - merge_settings(serde_json::json!({ "ga_source_override": display_path(&dst_c) })); - if let Err(err) = switch_bridge(&app_handle) { - restore_setting("ga_source_override", previous_override); - return Err(err); +fn reveal_in_file_manager(path: String) -> Result<(), String> { + let target = PathBuf::from(path.trim()); + if !target.is_file() { + return Err("the selected file is unavailable".to_string()); } + #[cfg(target_os = "macos")] + let mut command = { + let mut command = Command::new("open"); + command.arg("-R").arg(&target); + command + }; + #[cfg(windows)] + let mut command = { + let mut command = Command::new("explorer"); + command.arg("/select,").arg(&target); + command.creation_flags(0x08000000); + command + }; + #[cfg(all(unix, not(target_os = "macos")))] + let mut command = { + let mut command = Command::new("xdg-open"); + command.arg(target.parent().unwrap_or(Path::new("."))); + command + }; + command + .spawn() + .map(|_| ()) + .map_err(|error| format!("cannot reveal the selected file: {error}")) +} - // The packaged bundle's own runtime/app is still needed by the desktop shell and - // bridge. Only remove the old source when it is already a user-selected external copy. - let bundled = bundled_project_dir(); - if !bundled.as_ref().map(|p| same_path(&src_c, p)).unwrap_or(false) { - if let Err(e) = std::fs::remove_dir_all(&src_c) { - eprintln!("remove old runtime {:?}: {}", src_c, e); - } - } - Ok(display_path(&dst_c)) +#[tauri::command] +fn get_ga_source() -> String { + valid_ga_source_override().unwrap_or_default() +} + +fn saved_ga_source_override() -> Option { + read_settings() + .get("ga_source_override") + .and_then(|value| value.as_str()) + .map(str::to_string) } -/// Run the contract probe (frontends/ga_contract_probe.py, shipped with the bundle) against a -/// target ga_root using the bundle python. Returns Ok(()) if the核 satisfies the bridge/conductor -/// contract, or Err(message) listing what's missing / why it's incompatible. fn probe_ga_source(dir: &str) -> Result<(), String> { - let (py, bundle_project) = get_or_discover_config(); - if py.is_empty() { - return Err("no python available to run the compatibility probe".into()); + let (python, bundle_project) = get_or_discover_config(); + if python.is_empty() { + return Err("no python available to run the compatibility probe".to_string()); } - let probe = PathBuf::from(&bundle_project).join("frontends").join("ga_contract_probe.py"); + let probe = PathBuf::from(&bundle_project) + .join("frontends") + .join("ga_contract_probe.py"); if !probe.exists() { - // No probe shipped → skip the check rather than block (backward compatible). - return Ok(()); + return Err("the packaged compatibility probe is missing".to_string()); } - let mut cmd = Command::new(&py); - cmd.arg(&probe).arg(dir); - sanitize_bundle_env(&mut cmd); - // If switching from one external core to another, validate the candidate core, not the - // previously saved GA_ROOT that sanitize_bundle_env may have injected. - cmd.env("GA_ROOT", dir); + + let mut command = Command::new(python); + command.arg(probe).arg(dir); + sanitize_bundle_env(&mut command, &bundle_project); + command.env("GA_ROOT", dir); #[cfg(windows)] - cmd.creation_flags(0x08000000); - let out = cmd.output().map_err(|e| format!("probe failed to run: {}", e))?; - let stdout = String::from_utf8_lossy(&out.stdout); - // The probe prints a JSON line: {"ok":bool,"missing":[..],"error":".."}. - if let Some(line) = stdout.lines().rev().find(|l| l.trim_start().starts_with('{')) { - if let Ok(v) = serde_json::from_str::(line.trim()) { - if v.get("ok").and_then(|b| b.as_bool()).unwrap_or(false) { + command.creation_flags(0x08000000); + let output = command + .output() + .map_err(|error| format!("compatibility probe failed to run: {error}"))?; + let stdout = String::from_utf8_lossy(&output.stdout); + if let Some(line) = stdout + .lines() + .rev() + .find(|line| line.trim_start().starts_with('{')) + { + if let Ok(verdict) = serde_json::from_str::(line.trim()) { + if verdict.get("ok").and_then(|value| value.as_bool()) == Some(true) { return Ok(()); } - let missing = v.get("missing") - .and_then(|m| m.as_array()) - .map(|a| a.iter().filter_map(|x| x.as_str()).collect::>().join(", ")) + let missing = verdict + .get("missing") + .and_then(|value| value.as_array()) + .map(|items| { + items + .iter() + .filter_map(|item| item.as_str()) + .collect::>() + .join(", ") + }) .unwrap_or_default(); - let err = v.get("error").and_then(|e| e.as_str()).unwrap_or(""); - let mut msg = String::from("this GenericAgent core is not compatible"); - if !missing.is_empty() { msg = format!("{}: missing {}", msg, missing); } - if !err.is_empty() { msg = format!("{} ({})", msg, err); } - return Err(msg); + let detail = verdict + .get("error") + .and_then(|value| value.as_str()) + .unwrap_or(""); + let mut message = "this GenericAgent core is not compatible".to_string(); + if !missing.is_empty() { + message.push_str(&format!(": missing {missing}")); + } + if !detail.is_empty() { + message.push_str(&format!(" ({detail})")); + } + return Err(message); } } - Err(format!("compatibility probe returned no verdict: {}", - String::from_utf8_lossy(&out.stderr).lines().last().unwrap_or(""))) + let stderr = String::from_utf8_lossy(&output.stderr); + Err(format!( + "compatibility probe returned no verdict: {}", + stderr.lines().last().unwrap_or("") + )) } -#[tauri::command] -fn set_ga_source(app_handle: tauri::AppHandle, dir: String) -> Result { - let p = PathBuf::from(&dir); - if !p.join("agentmain.py").exists() { - return Err("not a GenericAgent source: agentmain.py not found".into()); +fn validated_ga_source(dir: &str) -> Result { + let source = PathBuf::from(dir.trim()); + if !source.join("agentmain.py").exists() { + return Err("not a GenericAgent source: agentmain.py not found".to_string()); + } + let source = source.canonicalize().unwrap_or(source); + let source_text = display_path(&source); + probe_ga_source(&source_text)?; + Ok(source_text) +} + +async fn restart_for_current_source(app_handle: tauri::AppHandle) -> Result { + let (python_path, project_dir) = get_or_discover_config(); + let expected_ga_root = effective_ga_root(&project_dir); + execute_bootstrap_async(app_handle, python_path, project_dir, false).await?; + Ok(expected_ga_root) +} + +async fn apply_ga_source_with_rollback( + app_handle: tauri::AppHandle, + next_override: Option, + previous_override: Option, +) -> Result { + restore_setting("ga_source_override", next_override)?; + match restart_for_current_source(app_handle.clone()).await { + Ok(root) => Ok(root), + Err(error) => { + restore_setting("ga_source_override", previous_override).map_err(|rollback_error| { + format!( + "{error}; restoring the previous workspace setting failed: {rollback_error}" + ) + })?; + match restart_for_current_source(app_handle).await { + Ok(_) => Err(error), + Err(rollback_error) => Err(format!( + "{error}; restoring the previous workspace also failed: {rollback_error}" + )), + } + } } - // 方案三: we do NOT copy files into 本体. We run the bundle's own bridge/frontend and point - // its ga_root at this external核 via GA_ROOT. Verify the核 satisfies the contract first so a - // stale/incompatible核 fails up front with a clear message instead of a runtime crash. - probe_ga_source(&dir)?; - merge_settings(serde_json::json!({ "ga_source_override": dir })); - switch_bridge(&app_handle) } #[tauri::command] -fn clear_ga_source(app_handle: tauri::AppHandle) -> Result { - remove_setting("ga_source_override"); - switch_bridge(&app_handle) +async fn validate_ga_source(dir: String) -> Result { + tauri::async_runtime::spawn_blocking(move || validated_ga_source(&dir)) + .await + .map_err(|error| format!("compatibility probe task failed: {error}"))? +} + +#[tauri::command] +async fn set_ga_source(app_handle: tauri::AppHandle, dir: String) -> Result { + let source_text = validate_ga_source(dir).await?; + let previous_override = saved_ga_source_override(); + apply_ga_source_with_rollback(app_handle, Some(source_text), previous_override).await +} + +#[tauri::command] +async fn clear_ga_source(app_handle: tauri::AppHandle) -> Result { + let previous_override = saved_ga_source_override(); + apply_ga_source_with_rollback(app_handle, None, previous_override).await } #[cfg_attr(mobile, tauri::mobile_entry_point)] @@ -1079,174 +2735,154 @@ pub fn run() { let no_autostart = args.iter().any(|a| a == "--no-autostart"); let dev_mode = args.iter().any(|a| a == "--dev"); - // Resolve the effective config once. project_dir is ALWAYS the bundle's own (方案三: we run - // our own bridge/frontend); the external核, if any, is injected via GA_ROOT in - // sanitize_bundle_env. Identity/takeover must compare against the EFFECTIVE ga_root (what the - // bridge will report), not the bundle script dir. let (eff_py, eff_project) = get_or_discover_config(); - let effective_ga_root = valid_ga_source_override().unwrap_or_else(|| eff_project.clone()); - let needs_prepare = needs_first_run_prepare(&eff_project); - - takeover_stale_bridge(&effective_ga_root); - - let bridge_ok = is_bridge_running(); - let mut spawned_bridge = false; - // Skip the early spawn when a first-run prepare is required (no venv yet); - // the setup thread prepares the env first and then starts the bridge. - if !bridge_ok && !no_autostart && !needs_prepare { - let dir = PathBuf::from(&eff_project); - let script = dir.join("frontends").join("desktop_bridge.py"); - if script.exists() { - let mut cmd = Command::new(&eff_py); - cmd.arg(&script).current_dir(&dir); - sanitize_bundle_env(&mut cmd); - #[cfg(windows)] - cmd.creation_flags(0x08000000); - if let Ok(child) = cmd.spawn() { - *BRIDGE_PROCESS.lock().unwrap() = Some(child); - spawned_bridge = true; - } - } - } - tauri::Builder::default() + let builder = tauri::Builder::default() + .plugin(tauri_plugin_opener::init()) .plugin(tauri_plugin_single_instance::init(|app, _args, _cwd| { - if let Some(w) = app.get_webview_window("main") { - let _ = w.unminimize(); - let _ = w.show(); - let _ = w.set_focus(); + let bootstrap_failed = matches!( + BOOTSTRAP_STATE.lock().unwrap().phase, + BootstrapPhase::Failed + ); + if bootstrap_failed { + if let Some(window) = app.get_webview_window("setup") { + let _ = window.show(); + let _ = window.set_focus(); + } + } else if let Some(window) = app.get_webview_window("main") { + let _ = window.unminimize(); + let _ = window.show(); + let _ = window.set_focus(); } - })) - .invoke_handler(tauri::generate_handler![start_bridge_with_config, start_bridge, get_config, export_mykey, pick_directory, get_ga_source, set_ga_source, clear_ga_source, move_ga_runtime, shortcut_should_ask, shortcut_decide, get_prepare_error]) + })); + + #[cfg(feature = "e2e")] + let builder = if std::env::var("GA_E2E").ok().as_deref() == Some("1") { + builder + .plugin(tauri_plugin_wdio::init()) + .plugin(tauri_plugin_wdio_webdriver::init()) + } else { + builder + }; + + builder + .invoke_handler(tauri::generate_handler![ + start_bridge_with_config, + start_bridge, + retry_bootstrap, + get_bootstrap_snapshot, + get_config, + discover_python_for_project, + export_mykey, + pick_directory, + pick_python_interpreter, + pick_data_backup_file, + pick_data_export_path, + reveal_in_file_manager, + get_ga_source, + validate_ga_source, + set_ga_source, + clear_ga_source, + shortcut_should_ask, + shortcut_decide + ]) .setup(move |app| { // Show the loading window immediately so the first-run prepare isn't a blank screen. // The window starts on loading.html (a local page), so no "connection refused" flash. if let Some(w) = app.get_webview_window("main") { + // Windows: remove native decorations at runtime (config keeps them for macOS + // traffic lights). titleBarStyle:"Overlay" is macOS-only in Tauri v2. + #[cfg(windows)] + let _ = w.set_decorations(false); let _ = w.show(); } - let handle = app.handle().clone(); - let project_dir = eff_project.clone(); - thread::spawn(move || { - // Progress reporter: push status into the loading window (window.gaProgress). - let main_win = handle.get_webview_window("main"); - - let report = |pct: i32, msg: &str| { - if let Some(w) = &main_win { - let js = format!( - "window.gaProgress && window.gaProgress({}, {})", - pct, - serde_json::to_string(msg).unwrap_or_else(|_| "\"\"".to_string()) - ); - let _ = w.eval(&js); - } - }; - - // First-run (self-contained bundle): prepare the embedded python env offline, - // then start the bridge with the freshly created venv. - if needs_prepare { - report(5, "start"); - if let Err(e) = run_offline_prepare(&project_dir, &report) { - eprintln!("[tauri] first-run prepare failed: {}", e); - // Persist the error for the setup window and to a log file next to the - // bundle, so the failure is explicit instead of a silent config screen. - *PREPARE_ERROR.lock().unwrap() = Some(e.clone()); - if let Some(root) = bundle_root() { - let _ = std::fs::write(root.join("prepare_error.log"), &e); - } - if let Some(sw) = handle.get_webview_window("setup") { let _ = sw.show(); } - if let Some(mw) = handle.get_webview_window("main") { let _ = mw.hide(); } - return; - } - report(95, "starting"); - if !is_bridge_running() { - let (py_str, dir_str) = get_or_discover_config(); - let dir = PathBuf::from(&dir_str); - let script = dir.join("frontends").join("desktop_bridge.py"); - if script.exists() { - let mut cmd = Command::new(&py_str); - cmd.arg(&script).current_dir(&dir); - sanitize_bundle_env(&mut cmd); - #[cfg(windows)] - cmd.creation_flags(0x08000000); - if let Ok(child) = cmd.spawn() { - *BRIDGE_PROCESS.lock().unwrap() = Some(child); + // Windows: system tray so the app can hide-on-close instead of exiting. + #[cfg(windows)] + { + let show_item = MenuItemBuilder::with_id("show", "显示主窗口").build(app)?; + let quit_item = MenuItemBuilder::with_id("quit", "退出").build(app)?; + let menu = MenuBuilder::new(app) + .item(&show_item) + .separator() + .item(&quit_item) + .build()?; + + let _tray = TrayIconBuilder::new() + .icon(app.default_window_icon().unwrap().clone()) + .tooltip("GenericAgent") + .menu(&menu) + .on_menu_event(|app, event| match event.id().as_ref() { + "show" => { + if let Some(w) = app.get_webview_window("main") { + let _ = w.show(); + let _ = w.unminimize(); + let _ = w.set_focus(); } } - } - } - - // First run (prepare) and cold bridge start may take a while; allow up to 60s. - let wait = if needs_prepare || spawned_bridge { - Duration::from_secs(60) - } else { - Duration::from_secs(2) - }; - let bridge_ready = wait_for_port(14168, wait); - - if bridge_ready { - // The bridge auto-starts conductor + scheduler itself (on_startup), so we do - // NOT probe their ports here: that would self-detect the bridge's own - // just-started extras and falsely report "ports busy". - if !wait_for_port(14168, Duration::from_secs(15)) { - eprintln!("[tauri] bridge not reachable before navigate"); - if let Some(w) = &main_win { - let msg = "无法连接 bridge (127.0.0.1:14168),请关闭程序后重试。"; - let js = format!( - "alert({})", - serde_json::to_string(msg).unwrap_or_else(|_| "\"\"".to_string()) - ); - let _ = w.eval(&js); + "quit" => { + app.exit(0); } - return; - } - // Navigate to the bridge HTTP only after it is ready. - if let Some(w) = handle.get_webview_window("main") { - if let Ok(url) = tauri::Url::parse("http://127.0.0.1:14168/") { - let _ = w.navigate(url); - } - if dev_mode { - w.open_devtools(); - } else { - // Disable F5/F12/Ctrl+R/right-click in production - let _ = w.eval(r#" - document.addEventListener('keydown', function(e) { - if (e.key === 'F12' || e.key === 'F5' || - (e.ctrlKey && e.key === 'r') || - (e.ctrlKey && e.shiftKey && e.key === 'I')) { - e.preventDefault(); - } - }); - document.addEventListener('contextmenu', function(e) { - e.preventDefault(); - }); - "#); + _ => {} + }) + .on_tray_icon_event(|tray, event| { + if let TrayIconEvent::Click { + button: MouseButton::Left, + button_state: MouseButtonState::Up, + .. + } = event + { + if let Some(w) = tray.app_handle().get_webview_window("main") { + let _ = w.show(); + let _ = w.unminimize(); + let _ = w.set_focus(); + } } - let _ = w.show(); - let _ = w.set_focus(); - } - if let Some(sw) = handle.get_webview_window("setup") { let _ = sw.hide(); } - // App is up and reachable: ask-once / self-heal the desktop shortcut. - // Runs last so it never blocks the loading/navigation path. - maybe_setup_shortcut(); + }) + .build(app)?; + } + + let handle = app.handle().clone(); + let python_path = eff_py.clone(); + let project_dir = eff_project.clone(); + thread::spawn(move || { + if no_autostart && !is_bridge_running() { + begin_bootstrap( + &handle, + BootstrapMode::ColdStart, + &python_path, + &project_dir, + ); + let failure = bootstrap_failure( + BootstrapFailureCode::Unknown, + "automatic bridge startup was disabled by --no-autostart", + ); + snapshot_update(Some(&handle), |snapshot| { + snapshot.phase = BootstrapPhase::Failed; + snapshot.failure = Some(failure); + }); + show_bootstrap_recovery(&handle); } else { - // Bridge never came up -> let the user fix paths in the setup window. - if let Some(sw) = handle.get_webview_window("setup") { - if dev_mode { sw.open_devtools(); } - let _ = sw.show(); - } - if let Some(mw) = handle.get_webview_window("main") { let _ = mw.hide(); } + let _ = execute_bootstrap(&handle, python_path, project_dir, dev_mode); } }); Ok(()) }) .on_window_event(|window, event| { - if let tauri::WindowEvent::CloseRequested { .. } = event { + if let tauri::WindowEvent::CloseRequested { api, .. } = event { let label = window.label(); if label == "main" { - // Persistent backend: closing the window does NOT stop the bridge or its - // services, so relaunching attaches to the warm backend on 14168. - window.app_handle().exit(0); + #[cfg(windows)] + { + // Windows: hide to tray instead of exiting. Bridge stays alive. + api.prevent_close(); + let _ = window.hide(); + } + #[cfg(not(windows))] + { + let _ = api; + window.app_handle().exit(0); + } } else if label == "setup" { // Setup closed -> exit if main is not visible if let Some(main_win) = window.app_handle().get_webview_window("main") { @@ -1262,3 +2898,799 @@ pub fn run() { .run(tauri::generate_context!()) .expect("error while running tauri application"); } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn sensitive_diagnostic_lines_are_replaced_and_long_lines_are_bounded() { + assert_eq!( + sanitize_diagnostic_line("Authorization: Bearer super-secret"), + "[redacted sensitive diagnostic line]" + ); + assert_eq!( + sanitize_diagnostic_line("API_KEY=should-not-leak"), + "[redacted sensitive diagnostic line]" + ); + assert_eq!( + sanitize_diagnostic_line("[session] Quarterly planning"), + "[redacted sensitive diagnostic line]" + ); + assert_eq!( + sanitize_diagnostic_line("restored memory entry: personal note"), + "[redacted sensitive diagnostic line]" + ); + assert!(sanitize_diagnostic_line(&"x".repeat(4096)).len() <= MAX_DIAGNOSTIC_LINE_BYTES); + } + + #[test] + fn recent_log_buffer_keeps_only_the_last_hundred_lines() { + let mut logs = VecDeque::new(); + for index in 0..125 { + push_bounded_log(&mut logs, &format!("line-{index}")); + } + assert_eq!(logs.len(), MAX_DIAGNOSTIC_LINES); + assert_eq!(logs.front().map(String::as_str), Some("line-25")); + assert_eq!(logs.back().map(String::as_str), Some("line-124")); + } + + #[test] + fn listener_identity_distinguishes_owned_known_and_foreign_ports() { + let project = std::env::current_dir().unwrap(); + let project_text = project.to_string_lossy(); + let owned = serde_json::json!({ + "ga_root": project_text, + "build_id": env!("GA_BUILD_ID"), + "pid": 100 + }); + let old = serde_json::json!({ + "ga_root": project_text, + "build_id": "older-build", + "pid": 101 + }); + assert_eq!( + classify_listener_identity(Some(&owned), &project_text), + ListenerIdentity::Owned + ); + assert_eq!( + classify_listener_identity(Some(&old), &project_text), + ListenerIdentity::KnownGenericAgent + ); + assert_eq!( + classify_listener_identity(None, &project_text), + ListenerIdentity::Foreign + ); + assert_eq!( + classify_listener_identity(Some(&serde_json::json!({"status": "ok"})), &project_text), + ListenerIdentity::Foreign + ); + } + + #[test] + fn bridge_identity_is_bounded_and_only_keeps_allowlisted_fields() { + let normalized = normalize_bridge_identity(serde_json::json!({ + "ga_root": "/tmp/GenericAgent", + "build_id": "build-1", + "pid": 42, + "authorization": "must-not-survive" + })) + .unwrap(); + assert_eq!( + normalized.get("ga_root").and_then(|value| value.as_str()), + Some("/tmp/GenericAgent") + ); + assert_eq!( + normalized.get("build_id").and_then(|value| value.as_str()), + Some("build-1") + ); + assert_eq!( + normalized.get("pid").and_then(|value| value.as_u64()), + Some(42) + ); + assert!(normalized.get("authorization").is_none()); + + assert!(normalize_bridge_identity(serde_json::json!({ + "ga_root": "x".repeat(MAX_IDENTITY_PATH_BYTES + 1), + "build_id": "build-1", + "pid": 42 + })) + .is_none()); + assert!(normalize_bridge_identity(serde_json::json!({ + "ga_root": "/tmp/GenericAgent", + "build_id": "x".repeat(MAX_IDENTITY_BUILD_BYTES + 1), + "pid": 42 + })) + .is_none()); + } + + #[test] + fn bridge_shutdown_response_distinguishes_acceptance_and_explicit_refusal() { + assert_eq!( + parse_bridge_shutdown_response(b"HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\n{}"), + BridgeShutdownResponse::Accepted + ); + assert_eq!( + parse_bridge_shutdown_response( + b"HTTP/1.1 409 Conflict\r\nContent-Type: application/json\r\n\r\n{\"code\":\"maintenance_conflict\"}" + ), + BridgeShutdownResponse::Refused { + status: 409, + maintenance: true, + } + ); + assert_eq!( + parse_bridge_shutdown_response(b"HTTP/1.0 503 Unavailable\r\n\r\n"), + BridgeShutdownResponse::Refused { + status: 503, + maintenance: false, + } + ); + assert_eq!( + parse_bridge_shutdown_response(b"HTTP/1.1 409"), + BridgeShutdownResponse::Indeterminate + ); + assert_eq!( + parse_bridge_shutdown_response(b"NOT-HTTP 200 OK\r\n\r\n"), + BridgeShutdownResponse::Indeterminate + ); + let mut non_utf8_refusal = b"HTTP/1.1 503 Unavailable\r\n\r\n".to_vec(); + non_utf8_refusal.push(0xff); + assert_eq!( + parse_bridge_shutdown_response(&non_utf8_refusal), + BridgeShutdownResponse::Refused { + status: 503, + maintenance: false, + } + ); + } + + #[test] + fn explicit_shutdown_refusal_never_allows_force_stopping_the_tracked_bridge() { + let failure = shutdown_refusal_failure(BridgeShutdownResponse::Refused { + status: 409, + maintenance: true, + }) + .unwrap(); + assert_eq!(failure.code, BootstrapFailureCode::BridgeShutdownRefused); + assert!(failure.detail.contains("data maintenance")); + assert!(!should_force_stop_tracked_bridge(failure.code)); + assert!(should_force_stop_tracked_bridge( + BootstrapFailureCode::PortConflict + )); + assert!(should_force_stop_tracked_bridge( + BootstrapFailureCode::ServiceTimeout + )); + } + + #[test] + fn shutdown_request_honors_a_live_bridge_maintenance_refusal() { + use std::io::{Read, Write}; + use std::net::TcpListener; + use std::sync::mpsc; + + let listener = TcpListener::bind("127.0.0.1:0").unwrap(); + let port = listener.local_addr().unwrap().port(); + let (request_sender, request_receiver) = mpsc::channel(); + let server = thread::spawn(move || { + let (mut stream, _) = listener.accept().unwrap(); + let mut request = [0u8; 1024]; + let length = stream.read(&mut request).unwrap(); + request_sender.send(request[..length].to_vec()).unwrap(); + let body = br#"{"code":"maintenance_conflict"}"#; + write!( + stream, + "HTTP/1.1 409 Conflict\r\nContent-Type: application/json\r\nContent-Length: {}\r\nConnection: close\r\n\r\n", + body.len() + ) + .unwrap(); + stream.write_all(body).unwrap(); + }); + let endpoint = BridgeEndpoint { + host: "127.0.0.1".to_string(), + port, + }; + + assert_eq!( + request_bridge_shutdown_at(&endpoint), + BridgeShutdownResponse::Refused { + status: 409, + maintenance: true, + } + ); + let request = String::from_utf8(request_receiver.recv().unwrap()).unwrap(); + assert!(request.starts_with("POST /services/bridge/exit HTTP/1.1\r\n")); + server.join().unwrap(); + } + + #[test] + fn breakaway_fallback_is_limited_to_access_denied() { + assert!(should_retry_without_breakaway(Some(5))); + assert!(!should_retry_without_breakaway(Some(2))); + assert!(!should_retry_without_breakaway(None)); + } + + #[test] + fn python_validation_rejects_an_unresolvable_explicit_path() { + let current_exe = std::env::current_exe().unwrap(); + assert!(python_interpreter_resolves(¤t_exe.to_string_lossy())); + assert!(!python_interpreter_resolves( + "/definitely/missing/genericagent-python" + )); + } + + #[test] + fn project_python_discovery_prefers_venv_then_sorted_portable_then_saved() { + let root = std::env::temp_dir().join(format!( + "ga-python-discovery-{}-{}", + std::process::id(), + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_nanos() + )); + let portable_a = root.join(".portable").join("uv-python").join("a"); + let portable_z = root.join(".portable").join("uv-python").join("z"); + #[cfg(windows)] + let portable_a_python = portable_a.join("python.exe"); + #[cfg(not(windows))] + let portable_a_python = portable_a.join("bin").join("python3"); + #[cfg(windows)] + let portable_z_python = portable_z.join("python.exe"); + #[cfg(not(windows))] + let portable_z_python = portable_z.join("bin").join("python3"); + std::fs::create_dir_all(portable_a_python.parent().unwrap()).unwrap(); + std::fs::create_dir_all(portable_z_python.parent().unwrap()).unwrap(); + std::fs::write(&portable_a_python, []).unwrap(); + std::fs::write(&portable_z_python, []).unwrap(); + + let current_exe = std::env::current_exe().unwrap(); + assert_eq!( + discover_python_for_project_path(&root, Some(current_exe.to_str().unwrap())), + display_path(&portable_a_python) + ); + + let venv = project_venv_python(&root); + std::fs::create_dir_all(venv.parent().unwrap()).unwrap(); + std::fs::write(&venv, []).unwrap(); + assert_eq!( + discover_python_for_project_path(&root, Some(current_exe.to_str().unwrap())), + display_path(&venv) + ); + std::fs::remove_dir_all(&root).unwrap(); + } + + #[test] + fn bridge_endpoint_uses_defaults_and_validates_overrides() { + let default = bridge_endpoint_from_values(None, None).unwrap(); + assert_eq!(default.host, "127.0.0.1"); + assert_eq!(default.port, 14168); + assert_eq!(default.socket_addr(), "127.0.0.1:14168"); + + let custom = bridge_endpoint_from_values(Some("localhost"), Some("24168")).unwrap(); + assert_eq!(custom.host, "localhost"); + assert_eq!(custom.port, 24168); + + assert!(bridge_endpoint_from_values(Some("0.0.0.0"), Some("24168")).is_err()); + assert!(bridge_endpoint_from_values(Some("127.0.0.1"), Some("0")).is_err()); + assert!(bridge_endpoint_from_values(Some("127.0.0.1"), Some("bad")).is_err()); + } + + #[test] + fn main_ui_url_keeps_the_platform_asset_origin() { + let windows = main_ui_url_from_current( + tauri::Url::parse("http://tauri.localhost/loading.html?phase=ready#status").unwrap(), + ) + .unwrap(); + assert_eq!(windows.as_str(), "http://tauri.localhost/index.html"); + + let macos = + main_ui_url_from_current(tauri::Url::parse("tauri://localhost/loading.html").unwrap()) + .unwrap(); + assert_eq!(macos.as_str(), "tauri://localhost/index.html"); + + let dev = main_ui_url_from_current( + tauri::Url::parse("http://localhost:5173/loading.html").unwrap(), + ) + .unwrap(); + assert_eq!(dev.as_str(), "http://localhost:5173/index.html"); + + let current = tauri::Url::parse("tauri://localhost/index.html").unwrap(); + assert_eq!(main_ui_url_from_current(current.clone()).unwrap(), current); + } + + #[test] + fn main_ui_url_rejects_non_hierarchical_urls() { + let data_url = tauri::Url::parse("data:text/plain,loading").unwrap(); + assert!(main_ui_url_from_current(data_url).is_err()); + } + + #[test] + fn explicit_e2e_settings_path_wins_over_platform_home_resolution() { + let resolved = resolve_settings_path( + Some(PathBuf::from("C:\\Users\\runneradmin")), + Some("C:\\sandbox\\home\\.ga_desktop_settings.json"), + ); + assert_eq!( + resolved, + PathBuf::from("C:\\sandbox\\home\\.ga_desktop_settings.json") + ); + + assert_eq!( + resolve_settings_path(Some(PathBuf::from("/home/user")), None), + PathBuf::from("/home/user/.ga_desktop_settings.json") + ); + } + + fn runtime_test_root(label: &str) -> PathBuf { + let root = std::env::temp_dir().join(format!( + "ga-runtime-{label}-{}-{}", + std::process::id(), + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_nanos() + )); + std::fs::create_dir_all(&root).unwrap(); + root + } + + #[test] + fn settings_update_rejects_malformed_json_without_overwriting_it() { + let root = runtime_test_root("settings-malformed"); + let settings = root.join(".ga_desktop_settings.json"); + let malformed = b"{\"ga_source_override\":"; + std::fs::write(&settings, malformed).unwrap(); + + let error = update_settings_at(&settings, |document| { + document.insert("desktop_shortcut".to_string(), serde_json::json!(true)); + }) + .unwrap_err(); + + assert!(error.contains("cannot parse Desktop settings")); + assert_eq!(std::fs::read(&settings).unwrap(), malformed); + assert!(!settings + .with_file_name(".ga_desktop_settings.json.lock") + .exists()); + std::fs::remove_dir_all(root).unwrap(); + } + + #[test] + fn settings_lock_serializes_read_modify_replace_and_preserves_union() { + use std::sync::mpsc; + + let root = runtime_test_root("settings-union"); + let settings = root.join(".ga_desktop_settings.json"); + std::fs::write(&settings, "{}\n").unwrap(); + let (locked_sender, locked_receiver) = mpsc::channel(); + let (release_sender, release_receiver) = mpsc::channel(); + let first_path = settings.clone(); + let first = thread::spawn(move || { + let _lock = SettingsFileLock::acquire(&first_path).unwrap(); + let mut document = read_settings_from_strict(&first_path).unwrap(); + locked_sender.send(()).unwrap(); + release_receiver.recv().unwrap(); + document.insert("ui".to_string(), serde_json::json!({"lang": "en"})); + write_settings_atomically(&first_path, &serde_json::Value::Object(document)).unwrap(); + }); + locked_receiver.recv().unwrap(); + let second_path = settings.clone(); + let second = thread::spawn(move || { + update_settings_at(&second_path, |document| { + document.insert("conductor".to_string(), serde_json::json!({"llmNo": 2})); + }) + .unwrap(); + }); + thread::sleep(Duration::from_millis(100)); + assert!(!second.is_finished()); + release_sender.send(()).unwrap(); + first.join().unwrap(); + second.join().unwrap(); + + let document = read_settings_from_strict(&settings).unwrap(); + assert_eq!(document.get("ui"), Some(&serde_json::json!({"lang": "en"}))); + assert_eq!( + document.get("conductor"), + Some(&serde_json::json!({"llmNo": 2})) + ); + assert!(!settings + .with_file_name(".ga_desktop_settings.json.lock") + .exists()); + let residue = std::fs::read_dir(&root) + .unwrap() + .filter_map(Result::ok) + .filter(|entry| entry.file_name().to_string_lossy().ends_with(".tmp")) + .count(); + assert_eq!(residue, 0); + std::fs::remove_dir_all(root).unwrap(); + } + + #[test] + fn preserved_external_override_drives_spawn_and_listener_identity() { + let root = runtime_test_root("external-identity"); + let package = root.join("bundle").join("app"); + let external = root.join("external-core"); + std::fs::create_dir_all(&package).unwrap(); + std::fs::create_dir_all(&external).unwrap(); + std::fs::write(external.join("agentmain.py"), "# external").unwrap(); + let mut settings = serde_json::Map::new(); + settings.insert( + "ga_source_override".to_string(), + serde_json::json!(display_path(&external)), + ); + settings.insert("conductor".to_string(), serde_json::json!({"llmNo": 3})); + settings.insert("desktop_shortcut".to_string(), serde_json::json!(true)); + settings.insert("unknown".to_string(), serde_json::json!({"keep": true})); + settings.insert( + "python_path".to_string(), + serde_json::json!("/bundle/python"), + ); + settings.insert( + "project_dir".to_string(), + serde_json::json!(display_path(&package)), + ); + settings.insert( + "bridge_script".to_string(), + serde_json::json!(display_path(&package.join("frontends/desktop_bridge.py"))), + ); + + let expected_root = effective_ga_root_from(&display_path(&package), &settings); + let identity = serde_json::json!({ + "ga_root": expected_root, + "build_id": env!("GA_BUILD_ID"), + "pid": 42 + }); + + assert_eq!(expected_root, display_path(&external)); + assert_eq!( + classify_listener_identity(Some(&identity), &expected_root), + ListenerIdentity::Owned + ); + assert_eq!(settings["conductor"], serde_json::json!({"llmNo": 3})); + assert_eq!(settings["desktop_shortcut"], serde_json::json!(true)); + assert_eq!(settings["unknown"], serde_json::json!({"keep": true})); + std::fs::remove_dir_all(root).unwrap(); + } + + fn seed_package_runtime(root: &Path, agent_text: &str, bridge_text: &str) { + std::fs::create_dir_all(root.join("frontends")).unwrap(); + std::fs::create_dir_all(root.join("memory")).unwrap(); + std::fs::create_dir_all(root.join("temp")).unwrap(); + std::fs::write(root.join("agentmain.py"), agent_text).unwrap(); + std::fs::write( + root.join("frontends").join("desktop_bridge.py"), + bridge_text, + ) + .unwrap(); + std::fs::write(root.join("memory").join("package-default.md"), "package").unwrap(); + std::fs::write(root.join("temp").join("package-cache.txt"), "package").unwrap(); + std::fs::write(root.join("mykey_template.py"), "# template").unwrap(); + } + + fn write_runtime_marker(root: &Path, marker: &RuntimePackageMarker) { + std::fs::write( + runtime_marker_path(root), + serde_json::to_string_pretty(marker).unwrap(), + ) + .unwrap(); + } + + fn runtime_tree_bytes(root: &Path) -> Vec<(PathBuf, Vec)> { + fn collect(root: &Path, folder: &Path, output: &mut Vec<(PathBuf, Vec)>) { + for entry in std::fs::read_dir(folder).unwrap() { + let path = entry.unwrap().path(); + if path.is_dir() { + collect(root, &path, output); + } else { + output.push(( + path.strip_prefix(root).unwrap().to_path_buf(), + std::fs::read(path).unwrap(), + )); + } + } + } + + let mut output = Vec::new(); + collect(root, root, &mut output); + output.sort_by(|left, right| left.0.cmp(&right.0)); + output + } + + #[test] + fn fresh_runtime_install_never_writes_the_packaged_source() { + let root = runtime_test_root("fresh-install"); + let package = root + .join("GenericAgent.app") + .join("Contents") + .join("Resources"); + let runtime = root.join("application-support").join("app"); + seed_package_runtime(&package, "packaged agent", "packaged bridge"); + let package_before = runtime_tree_bytes(&package); + let expected = expected_runtime_marker(); + + let result = refresh_runtime_copy(&package, &runtime, &expected).unwrap(); + + assert_eq!(result, RuntimeCopyStatus::Installed); + assert_eq!(runtime_tree_bytes(&package), package_before); + assert!(!runtime_marker_path(&package).exists()); + assert_eq!(read_runtime_marker(&runtime), Some(expected)); + assert_eq!( + std::fs::read_to_string(runtime.join("agentmain.py")).unwrap(), + "packaged agent" + ); + std::fs::remove_dir_all(root).unwrap(); + } + + #[test] + fn stale_same_version_runtime_refreshes_package_code_and_preserves_user_data() { + let root = runtime_test_root("refresh"); + let package = root.join("signed-package-app"); + let runtime = root.join("application-support").join("app"); + seed_package_runtime(&package, "new agent", "new bridge"); + seed_package_runtime(&runtime, "old fork agent", "old fork bridge"); + + std::fs::write(runtime.join("mykey.py"), "user key").unwrap(); + std::fs::write(runtime.join("mykey.json"), "user json key").unwrap(); + std::fs::write(runtime.join("memory").join("user.md"), "remember me").unwrap(); + std::fs::remove_file(runtime.join("memory").join("package-default.md")).unwrap(); + let responses = runtime.join("temp").join("model_responses"); + let sessions = runtime.join("temp").join("desktop_sessions"); + std::fs::create_dir_all(&responses).unwrap(); + std::fs::create_dir_all(&sessions).unwrap(); + std::fs::write(responses.join("response.txt"), "response").unwrap(); + std::fs::write(sessions.join("sess-one.json"), "session").unwrap(); + std::fs::write( + runtime.join("temp").join("tui_v3_settings.json"), + "settings", + ) + .unwrap(); + std::fs::write(runtime.join("temp").join("token_ledger.jsonl"), "ledger").unwrap(); + let host_settings = root.join(".ga_desktop_settings.json"); + std::fs::write(&host_settings, "host settings").unwrap(); + + let expected = expected_runtime_marker(); + let mut old_marker = expected.clone(); + old_marker.build_id = "old-fork-build".to_string(); + old_marker.source_revision = "old-fork-source".to_string(); + write_runtime_marker(&runtime, &old_marker); + + let result = refresh_runtime_copy(&package, &runtime, &expected).unwrap(); + + assert_eq!(result, RuntimeCopyStatus::Refreshed); + assert_eq!( + std::fs::read_to_string(runtime.join("agentmain.py")).unwrap(), + "new agent" + ); + assert_eq!( + std::fs::read_to_string(runtime.join("frontends").join("desktop_bridge.py")).unwrap(), + "new bridge" + ); + assert_eq!( + std::fs::read_to_string(runtime.join("mykey.py")).unwrap(), + "user key" + ); + assert_eq!( + std::fs::read_to_string(runtime.join("mykey.json")).unwrap(), + "user json key" + ); + assert_eq!( + std::fs::read_to_string(runtime.join("memory").join("user.md")).unwrap(), + "remember me" + ); + assert!(!runtime.join("memory").join("package-default.md").exists()); + assert_eq!( + std::fs::read_to_string(responses.join("response.txt")).unwrap(), + "response" + ); + assert_eq!( + std::fs::read_to_string(sessions.join("sess-one.json")).unwrap(), + "session" + ); + assert_eq!( + std::fs::read_to_string(runtime.join("temp").join("tui_v3_settings.json")).unwrap(), + "settings" + ); + assert_eq!( + std::fs::read_to_string(runtime.join("temp").join("token_ledger.jsonl")).unwrap(), + "ledger" + ); + assert_eq!(read_runtime_marker(&runtime), Some(expected)); + assert_eq!( + std::fs::read_to_string(&host_settings).unwrap(), + "host settings" + ); + assert_eq!( + std::fs::read_to_string(package.join("agentmain.py")).unwrap(), + "new agent" + ); + assert!(!runtime_marker_path(&package).exists()); + std::fs::remove_dir_all(root).unwrap(); + } + + #[test] + fn matching_runtime_marker_keeps_hot_start_copy_untouched() { + let root = runtime_test_root("current"); + let package = root.join("signed-package-app"); + let runtime = root.join("application-support").join("app"); + seed_package_runtime(&package, "new package bytes", "new package bridge"); + seed_package_runtime(&runtime, "already active bytes", "already active bridge"); + let expected = expected_runtime_marker(); + write_runtime_marker(&runtime, &expected); + + let result = refresh_runtime_copy(&package, &runtime, &expected).unwrap(); + + assert_eq!(result, RuntimeCopyStatus::Current); + assert_eq!( + std::fs::read_to_string(runtime.join("agentmain.py")).unwrap(), + "already active bytes" + ); + std::fs::remove_dir_all(root).unwrap(); + } + + #[test] + fn failed_runtime_activation_restores_old_code_marker_and_user_data() { + let root = runtime_test_root("rollback"); + let package = root.join("signed-package-app"); + let runtime = root.join("application-support").join("app"); + seed_package_runtime(&package, "new agent", "new bridge"); + seed_package_runtime(&runtime, "old agent", "old bridge"); + std::fs::write(runtime.join("mykey.py"), "user key").unwrap(); + std::fs::write(runtime.join("memory").join("user.md"), "user memory").unwrap(); + let expected = expected_runtime_marker(); + let mut old_marker = expected.clone(); + old_marker.build_id = "old-build".to_string(); + write_runtime_marker(&runtime, &old_marker); + + let error = refresh_runtime_copy_with_activation( + &package, + &runtime, + None, + &expected, + |_staging, _destination| { + Err(std::io::Error::new( + std::io::ErrorKind::PermissionDenied, + "simulated activation failure", + )) + }, + ) + .unwrap_err(); + + assert!(error.contains("simulated activation failure")); + assert_eq!( + std::fs::read_to_string(runtime.join("agentmain.py")).unwrap(), + "old agent" + ); + assert_eq!( + std::fs::read_to_string(runtime.join("mykey.py")).unwrap(), + "user key" + ); + assert_eq!( + std::fs::read_to_string(runtime.join("memory").join("user.md")).unwrap(), + "user memory" + ); + assert_eq!(read_runtime_marker(&runtime), Some(old_marker)); + let leftovers = std::fs::read_dir(runtime.parent().unwrap()) + .unwrap() + .filter_map(Result::ok) + .filter(|entry| entry.file_name().to_string_lossy().starts_with(".app-")) + .count(); + assert_eq!(leftovers, 0); + assert_eq!( + std::fs::read_to_string(package.join("agentmain.py")).unwrap(), + "new agent" + ); + assert!(!runtime_marker_path(&package).exists()); + std::fs::remove_dir_all(root).unwrap(); + } + + #[test] + fn legacy_versioned_runtime_migrates_into_stable_root_with_all_user_data() { + let root = runtime_test_root("legacy-migration"); + let package = root.join("signed-package-app"); + let runtime_parent = root.join("application-support").join("runtime"); + let legacy = runtime_parent.join("0.2.0").join("app"); + let stable = runtime_parent.join("app"); + seed_package_runtime(&package, "new agent", "new bridge"); + seed_package_runtime(&legacy, "old agent", "old bridge"); + std::fs::write(legacy.join("mykey.py"), "user key").unwrap(); + std::fs::write(legacy.join("mykey.json"), "user json key").unwrap(); + std::fs::write(legacy.join("memory").join("user.md"), "memory").unwrap(); + std::fs::create_dir_all(legacy.join("temp").join("desktop_sessions")).unwrap(); + std::fs::write( + legacy + .join("temp") + .join("desktop_sessions") + .join("sess.json"), + "session", + ) + .unwrap(); + std::fs::write(legacy.join("temp").join("token_ledger.jsonl"), "ledger").unwrap(); + let mut legacy_marker = expected_runtime_marker(); + legacy_marker.package_version = "0.2.0".to_string(); + legacy_marker.build_id = "old-build".to_string(); + write_runtime_marker(&legacy, &legacy_marker); + let mut expected = expected_runtime_marker(); + expected.package_version = "0.2.1".to_string(); + expected.build_id = "new-build".to_string(); + + assert_eq!( + trusted_legacy_runtime(&runtime_parent).unwrap(), + Some(legacy.clone()) + ); + let result = + refresh_runtime_copy_from_legacy(&package, &legacy, &stable, &expected).unwrap(); + + assert_eq!(result, RuntimeCopyStatus::Installed); + assert_eq!( + std::fs::read_to_string(stable.join("agentmain.py")).unwrap(), + "new agent" + ); + assert_eq!( + std::fs::read_to_string(stable.join("mykey.py")).unwrap(), + "user key" + ); + assert_eq!( + std::fs::read_to_string(stable.join("mykey.json")).unwrap(), + "user json key" + ); + assert_eq!( + std::fs::read_to_string(stable.join("memory").join("user.md")).unwrap(), + "memory" + ); + assert_eq!( + std::fs::read_to_string( + stable + .join("temp") + .join("desktop_sessions") + .join("sess.json") + ) + .unwrap(), + "session" + ); + assert_eq!( + std::fs::read_to_string(stable.join("temp").join("token_ledger.jsonl")).unwrap(), + "ledger" + ); + assert_eq!(read_runtime_marker(&stable), Some(expected)); + assert!(!legacy.exists()); + std::fs::remove_dir_all(root).unwrap(); + } + + #[test] + fn failed_legacy_runtime_activation_leaves_legacy_data_and_no_stable_root() { + let root = runtime_test_root("legacy-rollback"); + let package = root.join("signed-package-app"); + let legacy = root.join("runtime").join("0.2.0").join("app"); + let stable = root.join("runtime").join("app"); + seed_package_runtime(&package, "new agent", "new bridge"); + seed_package_runtime(&legacy, "old agent", "old bridge"); + std::fs::write(legacy.join("mykey.py"), "user key").unwrap(); + let expected = expected_runtime_marker(); + + let error = refresh_runtime_copy_with_activation( + &package, + &stable, + Some(&legacy), + &expected, + |_staging, _active| { + Err(std::io::Error::new( + std::io::ErrorKind::PermissionDenied, + "simulated migration activation failure", + )) + }, + ) + .unwrap_err(); + + assert!(error.contains("simulated migration activation failure")); + assert!(!stable.exists()); + assert_eq!( + std::fs::read_to_string(legacy.join("agentmain.py")).unwrap(), + "old agent" + ); + assert_eq!( + std::fs::read_to_string(legacy.join("mykey.py")).unwrap(), + "user key" + ); + std::fs::remove_dir_all(root).unwrap(); + } +} diff --git a/frontends/desktop/src-tauri/tauri.conf.json b/frontends/desktop/src-tauri/tauri.conf.json index 6db15a9ee..73f06974d 100644 --- a/frontends/desktop/src-tauri/tauri.conf.json +++ b/frontends/desktop/src-tauri/tauri.conf.json @@ -1,41 +1,90 @@ { "productName": "GenericAgent", - "version": "0.1.8", + "version": "0.2.0", "identifier": "com.genericagent.app", "build": { - "frontendDist": "../static" + "frontendDist": "../dist" }, "app": { "withGlobalTauri": true, "security": { - "csp": null + "csp": { + "default-src": "'self' tauri: asset:", + "script-src": "'self'", + "style-src": "'self' 'unsafe-inline'", + "font-src": "'self' data: asset: http://asset.localhost", + "img-src": "'self' data: blob: asset: http://asset.localhost http://127.0.0.1:14168 http://localhost:14168", + "media-src": "'self' data: blob: http://127.0.0.1:14168 http://localhost:14168", + "connect-src": "'self' ipc: http://ipc.localhost http://127.0.0.1:14168 http://localhost:14168 ws://127.0.0.1:14168 ws://localhost:14168 http://127.0.0.1:8900 http://localhost:8900 ws://127.0.0.1:8900 ws://localhost:8900", + "worker-src": "'self' blob:", + "object-src": "'none'", + "base-uri": "'self'", + "form-action": "'none'", + "frame-src": "'none'", + "frame-ancestors": "'none'" + }, + "devCsp": { + "default-src": "'self' tauri: asset: http://localhost:5173", + "script-src": "'self' 'unsafe-inline' 'unsafe-eval' http://localhost:5173", + "style-src": "'self' 'unsafe-inline' http://localhost:5173", + "font-src": "'self' data: asset: http://asset.localhost http://localhost:5173", + "img-src": "'self' data: blob: asset: http://asset.localhost http://localhost:5173 http://127.0.0.1:14168 http://localhost:14168", + "media-src": "'self' data: blob: http://127.0.0.1:14168 http://localhost:14168", + "connect-src": "'self' ipc: http://ipc.localhost http://localhost:5173 ws://localhost:5173 http://127.0.0.1:14168 http://localhost:14168 ws://127.0.0.1:14168 ws://localhost:14168 http://127.0.0.1:8900 http://localhost:8900 ws://127.0.0.1:8900 ws://localhost:8900", + "worker-src": "'self' blob:", + "object-src": "'none'", + "base-uri": "'self'", + "form-action": "'none'", + "frame-src": "'none'", + "frame-ancestors": "'none'" + }, + "capabilities": ["default", "setup"] }, "windows": [ { - "title": "GenericAgent", + "title": "", "label": "main", "width": 1280, "height": 800, "resizable": true, "maximized": false, "visible": false, + "titleBarStyle": "Overlay", + "trafficLightPosition": { "x": 13, "y": 22 }, + "dragDropEnabled": false, "url": "loading.html" }, { - "title": "GenericAgent — Setup", + "title": "", "label": "setup", "width": 600, "height": 580, "resizable": false, "visible": false, "center": true, - "url": "fallback.html" + "url": "setup.html" } ] }, "bundle": { "active": true, "targets": ["nsis", "dmg"], - "icon": ["icons/icon.ico", "icons/icon.png", "icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png"] + "icon": ["icons/icon.ico", "icons/icon.png", "icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png"], + "macOS": { + "dmg": { + "windowSize": { + "width": 540, + "height": 380 + }, + "appPosition": { + "x": 140, + "y": 200 + }, + "applicationFolderPosition": { + "x": 400, + "y": 200 + } + } + } } } diff --git a/frontends/desktop/src-tauri/tauri.e2e.conf.json b/frontends/desktop/src-tauri/tauri.e2e.conf.json new file mode 100644 index 000000000..0df11198e --- /dev/null +++ b/frontends/desktop/src-tauri/tauri.e2e.conf.json @@ -0,0 +1,19 @@ +{ + "app": { + "security": { + "csp": { + "connect-src": "'self' ipc: http://ipc.localhost http://127.0.0.1:* ws://127.0.0.1:* http://localhost:14168 ws://localhost:14168 http://127.0.0.1:8900 http://localhost:8900 ws://127.0.0.1:8900 ws://localhost:8900" + }, + "capabilities": [ + "default", + "setup", + { + "identifier": "e2e", + "description": "Test-only WebdriverIO capability", + "windows": ["main", "setup"], + "permissions": ["wdio:default"] + } + ] + } + } +} diff --git a/frontends/desktop_bridge.py b/frontends/desktop_bridge.py index a42388d8f..438ea51c7 100644 --- a/frontends/desktop_bridge.py +++ b/frontends/desktop_bridge.py @@ -28,6 +28,9 @@ POST /services/stop-extras stop conductor + scheduler (127.0.0.1 only) POST /services/start-extras start conductor + scheduler (127.0.0.1 only) POST /services/bridge/exit stop managed services, then exit bridge (127.0.0.1 only) + POST /memory/import/inspect validate a data backup or legacy folder + POST /memory/import safely merge memory and sessions + POST /memory/export write a point-in-time data backup ZIP WS API (state sync): GET /ws -> on connect sends services.snapshot; service.changed on updates @@ -36,33 +39,78 @@ """ from __future__ import annotations -import asyncio, atexit, contextlib, importlib, json, os, re, shutil, subprocess, sys +import asyncio, atexit, contextlib, copy, importlib, json, os, re, shutil, subprocess, sys from collections import Counter, deque import threading, time, traceback, uuid from dataclasses import dataclass, field from pathlib import Path from typing import Any, Dict, List, Optional, Set from aiohttp import web, WSMsgType +from data_backup import ( + BackupFormatError, + canonical_session_record, + export_data_backup, + inspect_import_source, + materialize_import_source, + merge_data_files, +) +from desktop_settings import DesktopSettingsError, read_settings, update_settings APP_DIR = Path(__file__).resolve().parent +DEFAULT_CONDUCTOR_PORT = 8900 +E2E_CONDUCTOR_PORT_ENV = "GA_DESKTOP_E2E_CONDUCTOR_PORT" +E2E_REPORT_DIR_ENV = "GA_DESKTOP_E2E_REPORT_DIR" + + +def _configured_conductor_port() -> int: + """Return the package-journey conductor port without changing production :8900. + + Desktop's compiled renderer and production CSP intentionally use :8900. The + alternate port exists only to isolate real-package evidence from an installed + user's conductor; both E2E variables are required before it is honored. + """ + if not os.environ.get(E2E_REPORT_DIR_ENV): + return DEFAULT_CONDUCTOR_PORT + raw = os.environ.get(E2E_CONDUCTOR_PORT_ENV) + if raw is None: + return DEFAULT_CONDUCTOR_PORT + value = raw.strip() + if not value.isascii() or not value.isdigit() or not 1 <= int(value) <= 65535: + raise RuntimeError(f"{E2E_CONDUCTOR_PORT_ENV} must be an integer between 1 and 65535") + return int(value) + +# ─── Bridge self-log ring buffer ─── +import datetime as _dt, io as _io + +_bridge_log: deque = deque(maxlen=500) + + +def bridge_print(*args, **kwargs): + """Print to stderr AND capture into bridge ring buffer (timestamped).""" + kwargs.pop("file", None) + buf = _io.StringIO() + print(*args, file=buf, **kwargs) + text = buf.getvalue().rstrip("\n") + ts = _dt.datetime.now().strftime("%H:%M:%S") + for line in text.split("\n"): + _bridge_log.append(f"[{ts}] {line}") + print(*args, file=sys.stderr, **kwargs) def _ga_root_override() -> Optional[Path]: - """External core dir injected by the desktop shell (design 三: bundle bridge + external核). - Priority: --ga-root arg, then GA_ROOT env. Only honored when it holds agentmain.py; - an invalid/missing value returns None so we fall back to the bundle's own derivation.""" - val = "" - for i, a in enumerate(sys.argv): - if a == "--ga-root" and i + 1 < len(sys.argv): - val = sys.argv[i + 1] - elif a.startswith("--ga-root="): - val = a.split("=", 1)[1] - if not val: - val = os.environ.get("GA_ROOT", "") - val = (val or "").strip() - if not val: + """Resolve an external core while keeping this bundled bridge as the executable surface.""" + value = "" + for index, argument in enumerate(sys.argv): + if argument == "--ga-root" and index + 1 < len(sys.argv): + value = sys.argv[index + 1] + elif argument.startswith("--ga-root="): + value = argument.split("=", 1)[1] + if not value: + value = os.environ.get("GA_ROOT", "") + value = (value or "").strip() + if not value: return None - root = Path(val).expanduser().resolve() + root = Path(value).expanduser().resolve() return root if (root / "agentmain.py").exists() else None @@ -110,6 +158,68 @@ def normalize_final_turn_segs(full: str, outputs: Any) -> Optional[List[str]]: return None +# ─── Empty-turn microcopy (i18n) ─── + +_EMPTY_TURN_MICROCOPY = { + "zh": '⚠️ 这一轮结束了,但没有产出可见回复。你可以发送"继续"重试。', + "en": '⚠️ This turn ended without a visible response. You can send "continue" to retry.', +} + + +def _get_ui_lang() -> str: + try: + p = Path.home() / ".ga_desktop_settings.json" + doc = json.loads(p.read_text(encoding="utf-8")) if p.is_file() else {} + if not isinstance(doc, dict): + return "zh" + ui = doc.get("ui") + candidates = ( + ui.get("lang") if isinstance(ui, dict) else None, + doc.get("lang"), # legacy Desktop settings + ) + return next( + (lang for lang in candidates + if isinstance(lang, str) and lang in _EMPTY_TURN_MICROCOPY), + "zh", + ) + except Exception: + return "zh" + + +def empty_turn_fallback() -> str: + lang = _get_ui_lang() + return _EMPTY_TURN_MICROCOPY.get(lang, _EMPTY_TURN_MICROCOPY["zh"]) + + +# ─── Test-only control plane ──────────────────────────────────────────────── + +_E2E_CONTROL_LOCK = threading.Lock() +_E2E_NEXT_TURN: Optional[str] = None + + +def _e2e_control_token() -> Optional[str]: + if os.environ.get("GA_E2E") != "1": + return None + token = os.environ.get("GA_E2E_CONTROL_TOKEN", "").strip() + return token or None + + +def _set_e2e_next_turn(mode: str) -> None: + if mode != "empty": + raise ValueError("mode must be empty") + global _E2E_NEXT_TURN + with _E2E_CONTROL_LOCK: + _E2E_NEXT_TURN = mode + + +def _consume_e2e_next_turn() -> Optional[str]: + global _E2E_NEXT_TURN + with _E2E_CONTROL_LOCK: + mode = _E2E_NEXT_TURN + _E2E_NEXT_TURN = None + return mode + + for _s in (sys.stdout, sys.stderr): with contextlib.suppress(Exception): _s.reconfigure(encoding="utf-8", errors="replace") @@ -143,6 +253,44 @@ class Session: # 该会话绑定的模型下标(mykey.py 配置块顺序,== agent.llmclients 下标)。 # None = 未绑定,发消息时回退到全局默认 ui.llmNo,保持旧会话平滑迁移。 llm_no: Optional[int] = None + # 当前正在执行的 turn 使用的模型。仅运行期存在,不写入 session JSON。 + running_llm_no: Optional[int] = None + running_model: Optional[str] = None + + +class MaintenanceConflict(RuntimeError): + def __init__( + self, + message: str, + *, + code: str = "maintenance_conflict", + running_sessions: Optional[List[str]] = None, + running_extras: Optional[List[str]] = None, + ): + super().__init__(message) + self.code = code + self.running_sessions = sorted(set(running_sessions or [])) + self.running_extras = sorted(set(running_extras or [])) + + def payload(self) -> dict: + return { + "ok": False, + "error": str(self), + "code": self.code, + "runningSessions": self.running_sessions, + "runningExtras": self.running_extras, + } + + +def _is_desktop_session_id(session_id: Any) -> bool: + """Keep internal TUI/Conductor worker artifacts out of Desktop sessions.""" + if not isinstance(session_id, str): + return False + value = session_id + return ( + not value.startswith("tui_") + and re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9_-]{0,127}", value) is not None + ) def _load_plan_baseline(item: dict, msgs: list) -> int: @@ -170,6 +318,10 @@ def __init__(self): self.ga_root = str(DEFAULT_GA_ROOT) self.config: Dict[str, Any] = {} self.sessions: Dict[str, Session] = {} + self._retired_sessions: Dict[str, Session] = {} + self._maintenance_token: Optional[str] = None + self._maintenance_kind: Optional[str] = None + self._shutdown_requested = False self.active_session_id: Optional[str] = None self._sessions_dir = Path(self.ga_root) / "temp" / "desktop_sessions" # Legacy monolithic store; migrated into _sessions_dir on first load, then retired. @@ -199,18 +351,90 @@ def _session_dict(self, s: "Session") -> dict: def _session_file(self, sid: str) -> Path: return self._sessions_dir / f"{sid}.json" - def _persist_session(self, s: "Session"): + @staticmethod + def _session_has_unfinished_work(session: "Session") -> bool: + agent = session.agent + task_queue = getattr(agent, "task_queue", None) + unfinished = int(getattr(task_queue, "unfinished_tasks", 0) or 0) + agent_running = bool(getattr(agent, "is_running", False)) + thread_running = bool(session.thread and session.thread.is_alive()) + return session.status == "running" or unfinished > 0 or agent_running or thread_running + + def _running_session_ids_locked(self) -> List[str]: + retired_sessions = getattr(self, "_retired_sessions", {}) + self._retired_sessions = retired_sessions + for sid, retired in list(retired_sessions.items()): + if not self._session_has_unfinished_work(retired): + retired_sessions.pop(sid, None) + running = [ + sid for sid, session in self.sessions.items() + if self._session_has_unfinished_work(session) + ] + running.extend( + sid for sid, session in retired_sessions.items() + if self._session_has_unfinished_work(session) + ) + return sorted(set(running)) + + def _assert_mutation_allowed_locked(self) -> None: + if getattr(self, "_shutdown_requested", False): + raise MaintenanceConflict( + "Desktop bridge shutdown is in progress", + code="shutdown_in_progress", + ) + if getattr(self, "_maintenance_token", None) is not None: + raise MaintenanceConflict( + f"data {getattr(self, '_maintenance_kind', None) or 'maintenance'} is in progress" + ) + + @contextlib.contextmanager + def mutation(self): + with self.lock: + self._assert_mutation_allowed_locked() + yield + + def begin_maintenance(self, kind: str, running_extras_fn) -> str: + with self.lock: + self._assert_mutation_allowed_locked() + running_sessions = self._running_session_ids_locked() + running_extras = list(running_extras_fn()) + if running_sessions or running_extras: + raise MaintenanceConflict( + "stop running sessions and managed services before data maintenance", + running_sessions=running_sessions, + running_extras=running_extras, + ) + token = uuid.uuid4().hex + self._maintenance_token = token + self._maintenance_kind = kind + return token + + def end_maintenance(self, token: str) -> None: + with self.lock: + if self._maintenance_token != token: + raise RuntimeError("maintenance token does not own the active gate") + self._maintenance_token = None + self._maintenance_kind = None + + def _persist_session(self, s: "Session", *, strict: bool = False): """Write a single session file. Cost is O(one session), independent of how many sessions exist — this is the fix for the monolithic-file scaling problem.""" + tmp = self._sessions_dir / f"{s.id}.json.tmp" try: self._sessions_dir.mkdir(parents=True, exist_ok=True) with self.lock: data = self._session_dict(s) - tmp = self._sessions_dir / f"{s.id}.json.tmp" + data["messages"] = copy.deepcopy(data["messages"]) + if data.get("llm_history"): + data["llm_history"] = copy.deepcopy(data["llm_history"]) tmp.write_text(json.dumps(data, ensure_ascii=False, default=str), encoding="utf-8") - os.replace(tmp, self._session_file(s.id)) # atomic swap + os.replace(tmp, self._session_file(s.id)) except Exception as e: - print(f"[bridge] persist session {s.id} failed: {e}", file=sys.stderr) + with contextlib.suppress(OSError): + tmp.unlink() + bridge_print(f"[bridge] persist session {s.id} failed: {e}") + if strict: + raise OSError(f"could not persist session {s.id}: {e}") from e def _delete_session_file(self, sid: str): try: @@ -218,30 +442,31 @@ def _delete_session_file(self, sid: str): if f.exists(): f.unlink() except Exception as e: - print(f"[bridge] delete session file {sid} failed: {e}", file=sys.stderr) + bridge_print(f"[bridge] delete session file {sid} failed: {e}") - def _persist(self): + def _persist(self, *, strict: bool = False): """Write every session (one file each). Used for bulk ops (import) / full flush.""" with self.lock: sessions = list(self.sessions.values()) for s in sessions: - self._persist_session(s) + self._persist_session(s, strict=strict) def _session_from_item(self, item: dict) -> "Session": - msgs = item.get("messages", []) - return Session(id=item["id"], title=item.get("title", "New chat"), - cwd=item.get("cwd", self.ga_root), - created_at=item.get("created_at", time.time()), - updated_at=item.get("updated_at", time.time()), + item = canonical_session_record(item, default_cwd=self.ga_root) + msgs = item["messages"] + return Session(id=item["id"], title=item["title"], + cwd=item["cwd"], + created_at=item["created_at"], + updated_at=item["updated_at"], messages=msgs, - msg_seq=item.get("msg_seq", 0), - pinned=item.get("pinned", False), - untitled=item.get("untitled", True), + msg_seq=item["msg_seq"], + pinned=item["pinned"], + untitled=item["untitled"], plan_scan_baseline=_load_plan_baseline(item, msgs), - plan_path=_sanitize_desktop_plan_path(item["id"], item.get("plan_path") or ""), + plan_path=_sanitize_desktop_plan_path(item["id"], item["plan_path"]), status="idle", agent=None, - llm_history=item.get("llm_history"), - llm_no=item.get("llm_no")) + llm_history=item["llm_history"], + llm_no=item["llm_no"]) def _load_sessions(self): # New format: one file per session under temp/desktop_sessions/. @@ -250,32 +475,36 @@ def _load_sessions(self): for f in self._sessions_dir.glob("*.json"): try: item = json.loads(f.read_text(encoding="utf-8")) + if not _is_desktop_session_id(item.get("id")): + continue sess = self._session_from_item(item) self.sessions[sess.id] = sess except Exception as e: - print(f"[bridge] load session {f.name} failed: {e}", file=sys.stderr) + bridge_print(f"[bridge] load session {f.name} failed: {e}") except Exception as e: - print(f"[bridge] load sessions dir failed: {e}", file=sys.stderr) + bridge_print(f"[bridge] load sessions dir failed: {e}") # One-time migration from the legacy monolithic desktop_sessions.json. try: if self._sessions_file.exists(): arr = json.loads(self._sessions_file.read_text(encoding="utf-8")) for item in arr: - if not isinstance(item, dict) or item.get("id") in self.sessions: + if (not isinstance(item, dict) + or not _is_desktop_session_id(item.get("id")) + or item.get("id") in self.sessions): continue try: sess = self._session_from_item(item) self.sessions[sess.id] = sess self._persist_session(sess) except Exception as e: - print(f"[bridge] migrate session failed: {e}", file=sys.stderr) + bridge_print(f"[bridge] migrate session failed: {e}") # Retire the legacy file so we do not migrate again next launch. with contextlib.suppress(Exception): self._sessions_file.rename( self._sessions_file.parent / (self._sessions_file.name + ".migrated")) except Exception as e: - print(f"[bridge] migrate sessions failed: {e}", file=sys.stderr) + bridge_print(f"[bridge] migrate sessions failed: {e}") if self.sessions: self.active_session_id = max(self.sessions.values(), key=lambda s: s.updated_at).id @@ -318,18 +547,22 @@ def import_sessions(self, source_dir: str) -> dict: added = 0 skipped = 0 new_sessions: List["Session"] = [] - with self.lock: + with self.mutation(): for item in items: sid = item.get("id") - if not sid or sid in self.sessions: + if not _is_desktop_session_id(sid) or sid in self.sessions: + skipped += 1 + continue + try: + sess = self._session_from_item(item) + except ValueError: skipped += 1 continue - sess = self._session_from_item(item) self.sessions[sid] = sess new_sessions.append(sess) added += 1 - for sess in new_sessions: - self._persist_session(sess) + for sess in new_sessions: + self._persist_session(sess) return {"sessionsAdded": added, "sessionsSkipped": skipped, "sessionsFileFound": True} def _mykey_file(self) -> Path: @@ -472,7 +705,7 @@ def _reload_live_agents(self) -> None: llmcore._mykey_mtime = None # 让本次 reload_mykeys() 视为“已变更”,触发真正重建 fn() except Exception as e: - print(f"[bridge] reload live agent failed: {e}", file=sys.stderr) + bridge_print(f"[bridge] reload live agent failed: {e}") def add_model_profile(self, data: dict) -> dict: cfg = self._build_cfg(data) @@ -565,7 +798,7 @@ def list_model_profiles(self): try: keys, mk = self._mykey_vars() except Exception as e: - print(f"get model profiles failed: {e}", file=sys.stderr) + bridge_print(f"get model profiles failed: {e}") return [] # A profile can be referenced by any mixin channel, not only the first one. # Keep each mixin row's own members for display, but mark native profiles as @@ -656,18 +889,22 @@ def reorder_mixin(self, members: list) -> dict: def _live_model(sess: Session) -> Optional[dict]: """该会话 agent 当前真正在用的模型(渠道组会随故障转移变化)。 agent 还没建(没跑过 turn)时返回静态绑定信息,前端据 llmNo 回显选择器。 - llmNo: agent 存活取 agent.llm_no(权威运行态),否则取 sess.llm_no(可能 None)。""" + llmNo: 始终以 sess.llm_no 为权威(用户选择),agent.llm_no 在初始化窗口可能滞后。""" ag = getattr(sess, "agent", None) if ag is None: - return {"current": None, "isMixin": False, "llmNo": sess.llm_no} + return {"current": None, "isMixin": False, "llmNo": sess.llm_no, + "runningLlmNo": sess.running_llm_no, "runningModel": sess.running_model} try: back = ag.llmclient.backend - live_no = getattr(ag, "llm_no", sess.llm_no) + live_no = sess.llm_no if sess.llm_no is not None else getattr(ag, "llm_no", 0) if "Mixin" in type(back).__name__: - return {"current": back.current_name, "isMixin": True, "llmNo": live_no} - return {"current": back.name, "isMixin": False, "llmNo": live_no} + return {"current": back.current_name, "isMixin": True, "llmNo": live_no, + "runningLlmNo": sess.running_llm_no, "runningModel": sess.running_model} + return {"current": back.name, "isMixin": False, "llmNo": live_no, + "runningLlmNo": sess.running_llm_no, "runningModel": sess.running_model} except Exception: - return {"current": None, "isMixin": False, "llmNo": sess.llm_no} + return {"current": None, "isMixin": False, "llmNo": sess.llm_no, + "runningLlmNo": sess.running_llm_no, "runningModel": sess.running_model} def snapshot(self, sess: Session, include_messages: bool = True) -> dict: out = { @@ -703,11 +940,11 @@ def add_message(self, sess: Session, role: str, content: str, **extra) -> dict: def create_session(self, cwd: Optional[str] = None) -> Session: sid = "sess-" + uuid.uuid4().hex[:12] sess = Session(id=sid, cwd=str(cwd or self.ga_root), llm_no=_global_default_llm_no()) - with self.lock: + with self.mutation(): self.sessions[sid] = sess self.active_session_id = sid - emit_session_state(sess, "created") - self._persist_session(sess) + emit_session_state(sess, "created") + self._persist_session(sess) return sess def get_session(self, sid: str) -> Session: @@ -718,23 +955,37 @@ def get_session(self, sid: str) -> Session: return sess def delete_session(self, sid: str) -> dict: - with self.lock: + with self.mutation(): sess = self.sessions.pop(sid, None) if not sess: raise web.HTTPNotFound(text=json.dumps({"error": f"session not found: {sid}"}, ensure_ascii=False), content_type="application/json") if self.active_session_id == sid: self.active_session_id = next(iter(self.sessions), None) + # Retire the turn identity before aborting so a late runner cannot + # persist and resurrect the deleted session file. + sess.cancel_requested = True + sess.active_turn_id = "" + sess.status = "cancelled" + sess.partial = None if sess.agent and hasattr(sess.agent, "abort"): with contextlib.suppress(Exception): sess.agent.abort() - emit_session_state(sess, "closed") - self._delete_session_file(sid) - _purge_session_uploads(sid) + if self._session_has_unfinished_work(sess): + self._retired_sessions[sid] = sess + emit_session_state(sess, "closed") + self._delete_session_file(sid) + _purge_session_uploads(sid) return {"ok": True, "sessionId": sid} def submit_prompt(self, sid: str, prompt: Any, images: Optional[list] = None, display: Optional[str] = None, files_meta: Optional[list] = None, image_metas: Optional[list] = None) -> dict: prompt, image_ids = normalize_prompt(prompt, images) - with self.lock: + # Build agent_prompt with file paths prepended (agent sees paths, UI sees clean text) + agent_prompt = prompt + if files_meta: + paths = [m["path"] for m in files_meta if m.get("path")] + if paths: + agent_prompt = " ".join(paths) + "\n" + prompt + with self.mutation(): sess = self.sessions.get(sid) if not sess: raise web.HTTPNotFound(text=json.dumps({"error": f"session not found: {sid}"}, ensure_ascii=False), content_type="application/json") @@ -756,28 +1007,114 @@ def submit_prompt(self, sid: str, prompt: Any, images: Optional[list] = None, di sess.active_turn_id = turn_id sess.last_error = "" sess.partial = {"id": sess.msg_seq + 1, "role": "assistant", "content": "", "ts": time.time(), "partial": True, - "curr_turn": 0, "turn_segs": []} # turn_segs[i]=第i轮全文(权威结构化,前端按轮渲染);content保留双轨兜底 - t = threading.Thread(target=self.run_agent_turn, args=(sess, prompt, None, turn_id), daemon=True, name=f"Turn-{sid}") + "curr_turn": 0, "turn_segs": []} # turn_segs[i]=第i轮全文(权威结构化,前端按轮渲染);content保留双轮兜底 + image_paths = [m["path"] for m in (image_metas or []) if m.get("path")] + t = threading.Thread( + target=self.run_agent_turn, + args=(sess, agent_prompt, image_paths or None, turn_id), + daemon=True, + name=f"Turn-{sid}", + ) sess.thread = t t.start() seq = sess.msg_seq emit_session_state(sess, "running") return {"ok": True, "sessionId": sid, "accepted": True, "userMessageId": user_msg["id"], "seq": seq} - def run_agent_turn(self, sess: Session, prompt: str, images: Optional[list] = None, turn_id: str = ""): + @staticmethod + def _patch_chat_for_images(client, image_paths): + """Monkey-patch backend.ask to inject base64 image blocks on the first LLM call.""" + import base64 as b64, mimetypes + try: + from llmcore import NativeToolClient + except ImportError: + return + if not isinstance(client, NativeToolClient): + return + backend = client.backend + original_ask = backend.ask + + _VISION_MIMES = {'image/png', 'image/jpeg', 'image/gif', 'image/webp'} + + def patched_ask(msg): + try: + del backend.ask + except AttributeError: + backend.ask = original_ask + if isinstance(msg, dict) and isinstance(msg.get("content"), list): + for p in image_paths: + try: + mime = mimetypes.guess_type(p)[0] or 'image/png' + if mime not in _VISION_MIMES: + # Unsupported image format (e.g. SVG) — inject as text path reference + msg["content"].append({"type": "text", "text": f"[attached file: {p}]"}) + continue + with open(p, 'rb') as f: + raw = f.read() + data = b64.b64encode(raw).decode() + msg["content"].append({"type": "image", "source": {"type": "base64", "media_type": mime, "data": data}}) + except Exception: + pass + resp = yield from original_ask(msg) + return resp + + backend.ask = patched_ask + + def run_agent_turn( + self, + sess: Session, + prompt: str, + images: Optional[list] = None, + turn_id: str = "", + ): def turn_state() -> tuple[bool, bool]: with self.lock: return sess.active_turn_id == turn_id, sess.cancel_requested try: + is_current, _ = turn_state() + if not is_current: + return + if _consume_e2e_next_turn() == "empty": + with self.lock: + if sess.active_turn_id != turn_id: + return + sess.partial = None + self.add_message(sess, "assistant", empty_turn_fallback()) + sess.running_llm_no = None + sess.running_model = None + sess.status = "idle" + sess.active_turn_id = "" + sess.last_error = "" + emit_session_state(sess, "idle") + return if sess.agent is None: sess.agent = self.make_agent(sess) + if sess.llm_history: + try: + sess.agent.llmclient.backend.history = sess.llm_history + except Exception: + pass agent = sess.agent # 模型取会话绑定 sess.llm_no,未绑定回退全局默认。切换走 set_session_model。 no = sess.llm_no if sess.llm_no is not None else _global_default_llm_no() if no is not None and hasattr(agent, "next_llm"): with contextlib.suppress(Exception): agent.next_llm(int(no)) + with self.lock: + sess.running_llm_no = getattr(agent, "llm_no", no) + try: + running_backend = agent.llmclient.backend + sess.running_model = str( + getattr(running_backend, "current_name", None) + or getattr(running_backend, "name", None) + or getattr(running_backend, "model", None) + or "" + ) or None + except Exception: + sess.running_model = None + if images: + self._patch_chat_for_images(agent.llmclient, images) full = "" done_outputs = None # done时agent给的全量轮文本(turn_resps.copy()) if hasattr(agent, "put_task"): @@ -815,6 +1152,10 @@ def turn_state() -> tuple[bool, bool]: _segs[_idx] = str(_outs[-1]) if len(_outs) >= 2 and _idx >= 1: _segs[_idx - 1] = str(_outs[-2]) + # Push partial to frontend via WS for real-time streaming + hub.emit({"type": "partial-update", "sessionId": sess.id, + "content": sess.partial["content"], + "turn_segs": list(_segs), "curr_turn": _idx}) if "done" in item: full = strip_final_info_marker(item.get("done") or "") done_outputs = normalize_final_turn_segs(full, item.get("outputs")) # done时=turn_resps.copy()全量轮 @@ -837,9 +1178,13 @@ def turn_state() -> tuple[bool, bool]: is_current, is_cancelled = turn_state() if not is_current: return + if not full: + full = empty_turn_fallback() if is_cancelled: with self.lock: sess.partial = None + sess.running_llm_no = None + sess.running_model = None if sess.active_turn_id == turn_id: sess.active_turn_id = "" # Ensure status stays cancelled (don't overwrite) @@ -848,8 +1193,6 @@ def turn_state() -> tuple[bool, bool]: sess.updated_at = time.time() emit_session_state(sess, "cancelled") return - if not full: - full = "(completed)" with self.lock: if sess.active_turn_id != turn_id: return @@ -865,6 +1208,8 @@ def turn_state() -> tuple[bool, bool]: self.add_message(sess, "assistant", full) try: sess.llm_history = json.loads(json.dumps(agent.llmclient.backend.history, ensure_ascii=False, default=str)) except Exception: pass + sess.running_llm_no = None + sess.running_model = None sess.status = "idle" sess.active_turn_id = "" sess.last_error = "" @@ -875,10 +1220,13 @@ def turn_state() -> tuple[bool, bool]: if sess.active_turn_id != turn_id: return sess.partial = None + sess.running_llm_no = None + sess.running_model = None sess.status = "error" sess.active_turn_id = "" sess.last_error = str(e) self.add_message(sess, "error", str(e)) + bridge_print(f"[turn] error: {e}") print(tb, file=sys.stderr) emit_session_state(sess, "error") @@ -894,6 +1242,7 @@ def messages(self, sid: str, after: int = 0, limit: int = 200) -> dict: return { "sessionId": sid, "status": sess.status, + "hasUnfinishedWork": self._session_has_unfinished_work(sess), "messages": msgs, "partial": dict(sess.partial) if sess.partial else None, "plan": plan_state.desktop_plan_payload_from_session(sess, self.ga_root), @@ -915,7 +1264,7 @@ def plan_snapshot(self, sid: str) -> dict: } def cancel(self, sid: str) -> dict: - with self.lock: + with self.mutation(): sess = self.sessions.get(sid) if not sess: raise web.HTTPNotFound(text=json.dumps({"error": f"session not found: {sid}"}, ensure_ascii=False), content_type="application/json") @@ -952,7 +1301,7 @@ def restore_context(self, sid: str) -> dict: try: agent.llmclient.backend.history = sess.llm_history except Exception as e: - print(f"[bridge] restore llm_history failed: {e}", file=sys.stderr) + bridge_print(f"[bridge] restore llm_history failed: {e}") else: history = [] for m in sess.messages: @@ -966,25 +1315,29 @@ def restore_context(self, sid: str) -> dict: try: agent.llmclient.backend.history = history except Exception as e: - print(f"[bridge] inject history failed: {e}", file=sys.stderr) + bridge_print(f"[bridge] inject history failed: {e}") with self.lock: sess.agent = agent sess.status = "idle" return {"ok": True, "sessionId": sid, "restored": True, "messageCount": len(sess.llm_history or sess.messages)} def set_session_model(self, sid: str, llm_no: int) -> dict: - """前端申请切换某会话的模型(唯一入口)。写 sess.llm_no(权威)并持久化; - agent 存活时立即 next_llm 让运行态跟上。返回该会话的运行态模型快照。""" - with self.lock: + """Bind a model to a session. + + An idle agent switches immediately. A running turn keeps its captured client; + the new binding is applied at the start of the next turn. + """ + with self.mutation(): sess = self.sessions.get(sid) if not sess: raise web.HTTPNotFound(text=json.dumps({"error": f"session not found: {sid}"}, ensure_ascii=False), content_type="application/json") sess.llm_no = int(llm_no) - if sess.agent is not None and hasattr(sess.agent, "next_llm"): + if (sess.status != "running" and sess.agent is not None + and hasattr(sess.agent, "next_llm")): with contextlib.suppress(Exception): sess.agent.next_llm(int(llm_no)) sess.updated_at = time.time() - self._persist_session(sess) + self._persist_session(sess) return {"ok": True, "sessionId": sid, "llmNo": sess.llm_no, "model": self._live_model(sess)} @@ -1014,6 +1367,13 @@ def normalize_prompt(prompt: Any, images: Optional[list] = None): manager = AgentManager() +# Initialize per-call token ledger +try: + import cost_tracker + cost_tracker.init_ledger(manager.ga_root) +except Exception: + pass + # --------------------------------------------------------------------------- # Transport layer: WS state push @@ -1094,17 +1454,35 @@ def discover_extra_services(ga_root: Path) -> List[dict]: # conductor 跟 scheduler 一样,bridge 启动时自动拉起。--no-browser 是关键: # conductor.py 默认会用 webbrowser.open 在用户浏览器弹一个 8900 端口 UI, # 桌面版自启时不需要这个独立 UI(用户从「指挥家」页直接访问)。 - # 方案三:conductor 深度桌面耦合,恒用 bundle 自带的那份(APP_DIR 侧), - # 通过 GA_ROOT(见 start_service env)让它 import 外部核。 + # The desktop conductor evolves with this bridge. Keep both package-owned and inject the + # external core through GA_ROOT instead of executing arbitrary UI glue from that checkout. conductor = APP_DIR / "conductor.py" if conductor.is_file(): + conductor_port = _configured_conductor_port() out.append({ "id": "frontends/conductor.py", - "cmd": [sys.executable, str(conductor), "--no-browser"], + "cmd": [ + sys.executable, + str(conductor), + "--no-browser", + "--port", + str(conductor_port), + ], + "port": conductor_port, }) return out +def _port_alive(port: Optional[int]) -> bool: + """Check if something is listening on localhost:port.""" + if not port: + return False + import socket + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.settimeout(0.3) + return s.connect_ex(("127.0.0.1", port)) == 0 + + def _mem_mb(pid: Optional[int]) -> Optional[int]: if not pid: return None @@ -1145,10 +1523,28 @@ def _cpu_pct(pid: Optional[int]) -> Optional[float]: return None +_ERROR_PATTERNS: list[tuple[re.Pattern, str, str]] = [ + (re.compile(r"errno 48|address already in use", re.I), "transient", "err.portBusy"), + (re.compile(r"Exception in thread conductor", re.I), "fatal", "err.conductorCrash"), + (re.compile(r"ModuleNotFoundError|ImportError", re.I), "fatal", "err.missingModule"), + (re.compile(r"ConnectionRefusedError|Connection refused", re.I), "warning", "err.connRefused"), + (re.compile(r"TimeoutError|timed out", re.I), "warning", "err.timeout"), +] + + +def _classify_log_error(line: str) -> tuple[str, str] | None: + """Classify a log line by severity. Returns (severity, i18n_key) or None.""" + for pattern, severity, key in _ERROR_PATTERNS: + if pattern.search(line): + return (severity, key) + return None + + class ServiceManager: """hub.pyw ServiceManager + HTTP/WS glue.""" def __init__(self, ga_root: str, emit_fn): + self.lock = threading.RLock() self.ga_root = Path(ga_root) self.procs: Dict[str, subprocess.Popen] = {} self.buffers: Dict[str, deque] = {} @@ -1166,7 +1562,34 @@ def _is_configured(self, sid: str) -> bool: mykeys = _load_mykeys(self.ga_root) return all(str(mykeys.get(k) or "").strip() for k in keys) + def _scan_errors(self, sid: str, n: int = 20) -> dict: + """Scan last N buffer lines, classify by severity. + Returns {"fatal": (line, key) | None, "warning": (line, key) | None}. + Transient errors (e.g. port-busy retry) are discarded. + """ + buf = self.buffers.get(sid) + if not buf: + return {"fatal": None, "warning": None} + lines = [ln.strip() for ln in list(buf)[-n:] if ln.strip()] + if not lines: + return {"fatal": None, "warning": None} + result: dict = {"fatal": None, "warning": None} + for line in lines: + classified = _classify_log_error(line) + if classified is None: + continue + severity, key = classified + if severity == "fatal": + result["fatal"] = (line[:300], key) + elif severity == "warning": + result["warning"] = (line[:300], key) + return result + def _log_tail(self, sid: str, n: int = 3) -> str: + """Legacy: return last fatal error line for lastError field.""" + scan = self._scan_errors(sid, n=20) + if scan["fatal"]: + return scan["fatal"][0] buf = self.buffers.get(sid) if not buf: return "" @@ -1175,27 +1598,71 @@ def _log_tail(self, sid: str, n: int = 3) -> str: def _state(self, sid: str, *, err: str = "") -> dict: proc = self.procs.get(sid) - running = proc is not None and proc.poll() is None - status = "running" if running else "offline" + owned = proc is not None and proc.poll() is None + running = owned + status = "running" if owned else "offline" last_error = err - if proc is not None and proc.poll() is not None: + error_key = "" + last_warning = "" + warning_key = "" + scan = self._scan_errors(sid) + catalog_port = self._catalog.get(sid, {}).get("port") + port_alive = _port_alive(catalog_port) + external = bool(catalog_port and port_alive and not owned) + if proc is not None and not owned: if sid in self._stopping: status, last_error = "offline", "" + elif external: + status = "error" + last_error = err or f"port {catalog_port} is occupied by an untracked process" + error_key = "err.portBusy" else: status = "error" - last_error = err or self._log_tail(sid) or f"exit code {proc.returncode}" + if scan["fatal"]: + last_error = scan["fatal"][0] + error_key = scan["fatal"][1] + elif err: + last_error = err + else: + last_error = f"exit code {proc.returncode}" + elif external: + status = "error" + last_error = err or f"port {catalog_port} is occupied by an untracked process" + error_key = "err.portBusy" + elif owned: + if scan["warning"]: + last_warning = scan["warning"][0] + warning_key = scan["warning"][1] elif err: status, running = "error", False + last_error = err + if scan["fatal"]: + error_key = scan["fatal"][1] return { "id": sid, "status": status, "running": running, - "pid": proc.pid if running else None, + "owned": owned, + "external": external, + "portConflict": external, + "port": catalog_port, + "pid": proc.pid if owned and proc is not None else None, "lastError": last_error, + "errorKey": error_key, + "lastWarning": last_warning, + "warningKey": warning_key, } def list_state(self) -> List[dict]: - return [self._state(sid) for sid in sorted(self._im_catalog)] + with self.lock: + return [self._state(sid) for sid in sorted(self._im_catalog)] + + def running_managed_ids(self) -> List[str]: + with self.lock: + return [ + sid for sid in sorted(self._catalog) + if self._state(sid).get("owned") is True + ] def _bridge_state(self) -> dict: pid = os.getpid() @@ -1212,19 +1679,23 @@ def _bridge_state(self) -> dict: "lastError": "", } + def _managed_state(self, sid: str, *, err: str = "") -> dict: + item = self._state(sid, err=err) + item["name"] = sid + item["memMb"] = _mem_mb(item.get("pid")) + item["cpuPct"] = _cpu_pct(item.get("pid")) + item["managed"] = True + return item + def list_panel_state(self) -> List[dict]: - out = [self._bridge_state()] - for sid in sorted(self._catalog, key=lambda s: (s in self._im_catalog, s)): - item = self._state(sid) - item["name"] = sid - item["memMb"] = _mem_mb(item.get("pid")) - item["cpuPct"] = _cpu_pct(item.get("pid")) - item["managed"] = True - out.append(item) - return out + with self.lock: + out = [self._bridge_state()] + for sid in sorted(self._catalog, key=lambda s: (s in self._im_catalog, s)): + out.append(self._managed_state(sid)) + return out def _notify(self, sid: str, *, err: str = "") -> None: - self._emit({"type": "service.changed", "service": self._state(sid, err=err)}) + self._emit({"type": "service.changed", "service": self._managed_state(sid, err=err)}) def _wait_started(self, proc: subprocess.Popen, timeout: float = 2.0) -> None: deadline = time.time() + timeout @@ -1242,36 +1713,52 @@ def _reader(self, sid: str, proc: subprocess.Popen) -> None: self._notify(sid) def start_service(self, sid: str) -> dict: - svc = self._catalog.get(sid) - if not svc: - raise KeyError(sid) - proc = self.procs.get(sid) - if proc is not None and proc.poll() is None: - return {"ok": True, "service": self._state(sid)} - if not self._is_configured(sid): - keys = ", ".join(_SERVICE_KEYS.get(sid, ())) - err = f"not configured in mykey.py ({keys})" - self._notify(sid, err=err) - return {"ok": False, "error": "not_configured", "service": self._state(sid, err=err)} - self.buffers[sid] = deque(maxlen=500) - # Pass the effective ga_root so bundle-side extras (conductor) import the external核. - env = {**os.environ, "PYTHONUNBUFFERED": "1", "PYTHONIOENCODING": "utf-8", - "GA_ROOT": str(self.ga_root)} - kw: Dict[str, Any] = dict( - cwd=str(self.ga_root), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, - text=True, encoding="utf-8", errors="replace", bufsize=1, env=env, - ) - if sys.platform == "win32": - kw["creationflags"] = subprocess.CREATE_NO_WINDOW - proc = subprocess.Popen(svc["cmd"], **kw) - self.procs[sid] = proc - threading.Thread(target=self._reader, args=(sid, proc), daemon=True).start() - self._wait_started(proc) - item = self._state(sid) - self._notify(sid) - if item["status"] == "error": - return {"ok": False, "error": item["lastError"] or "start_failed", "service": item} - return {"ok": True, "service": item} + # Lock order is always AgentManager -> ServiceManager. This makes a + # service start atomic with maintenance-gate admission. + with manager.mutation(), self.lock: + svc = self._catalog.get(sid) + if not svc: + raise KeyError(sid) + proc = self.procs.get(sid) + if proc is not None and proc.poll() is None: + return {"ok": True, "service": self._managed_state(sid)} + catalog_port = svc.get("port") + if catalog_port and _port_alive(catalog_port): + err = f"port {catalog_port} is occupied by an untracked process" + item = self._managed_state(sid, err=err) + self._notify(sid, err=err) + return {"ok": False, "error": "port_conflict", "service": item} + if not self._is_configured(sid): + keys = ", ".join(_SERVICE_KEYS.get(sid, ())) + err = f"not configured in mykey.py ({keys})" + self._notify(sid, err=err) + return { + "ok": False, + "error": "not_configured", + "service": self._managed_state(sid, err=err), + } + self.buffers[sid] = deque(maxlen=500) + env = { + **os.environ, + "PYTHONUNBUFFERED": "1", + "PYTHONIOENCODING": "utf-8", + "GA_ROOT": str(self.ga_root), + } + kw: Dict[str, Any] = dict( + cwd=str(self.ga_root), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, + text=True, encoding="utf-8", errors="replace", bufsize=1, env=env, + ) + if sys.platform == "win32": + kw["creationflags"] = subprocess.CREATE_NO_WINDOW + proc = subprocess.Popen(svc["cmd"], **kw) + self.procs[sid] = proc + threading.Thread(target=self._reader, args=(sid, proc), daemon=True).start() + self._wait_started(proc) + item = self._managed_state(sid) + self._notify(sid) + if item["running"] is not True: + return {"ok": False, "error": item["lastError"] or "start_failed", "service": item} + return {"ok": True, "service": item} def autostart_extras(self) -> None: """Auto-start non-IM services on bridge boot. Currently: @@ -1283,7 +1770,7 @@ def autostart_extras(self) -> None: tag = "ok" if res.get("ok") else f"fail: {res.get('error')}" except Exception as e: tag = f"exception {type(e).__name__}: {e}" - print(f"[autostart] {sid}: {tag}", file=sys.stderr) + bridge_print(f"[autostart] {sid}: {tag}") def stop_all_extras(self) -> None: for sid in sorted(set(self._catalog) - set(self._im_catalog)): @@ -1319,25 +1806,45 @@ def restart_broken_extras(self) -> None: tag = "ok" if res.get("ok") else f"fail: {res.get('error')}" except Exception as e: tag = f"exception {type(e).__name__}: {e}" - print(f"[restart-broken] {sid}: {tag}", file=sys.stderr) + bridge_print(f"[restart-broken] {sid}: {tag}") def stop_service(self, sid: str) -> dict: - if sid not in self._catalog: - raise KeyError(sid) - self._stopping.add(sid) - proc = self.procs.get(sid) - if proc and proc.poll() is None: - proc.terminate() - proc.wait() - self.procs.pop(sid, None) - self._stopping.discard(sid) - item = self._state(sid) - self._notify(sid) - return {"ok": True, "service": item} + with self.lock: + if sid not in self._catalog: + raise KeyError(sid) + self._stopping.add(sid) + proc = self.procs.get(sid) + stop_error = "" + if proc and proc.poll() is None: + try: + proc.terminate() + try: + proc.wait(timeout=5.0) + except subprocess.TimeoutExpired: + proc.kill() + proc.wait(timeout=2.0) + except Exception as exc: + stop_error = f"failed to stop managed process: {type(exc).__name__}: {exc}" + if proc is None or proc.poll() is not None: + self.procs.pop(sid, None) + self._stopping.discard(sid) + item = self._managed_state(sid, err=stop_error) + self._notify(sid, err=stop_error) + if item.get("external") is True: + return {"ok": False, "error": "not_owned", "service": item} + return { + "ok": not stop_error, + "error": "stop_failed" if stop_error else "", + "service": item, + } def read_logs(self, sid: str, tail: int = 200) -> dict: if sid == BRIDGE_ID: - return {"ok": True, "lines": [f"GenericAgent bridge pid={os.getpid()}"]} + tail = max(1, min(int(tail or 200), 2000)) + lines = list(_bridge_log)[-tail:] + if not lines: + lines = [f"GenericAgent bridge pid={os.getpid()}"] + return {"ok": True, "lines": lines} if sid not in self._catalog: raise KeyError(sid) tail = max(1, min(int(tail or 200), 2000)) @@ -1358,6 +1865,9 @@ def _bridge_shutdown_services() -> None: def emit_session_state(sess: Session, state_name: str): + if state_name != "created": + title = (sess.title or sess.id)[:20] + bridge_print(f"[session] {title}: {state_name}") hub.emit({ "type": "session-state", "sessionId": sess.id, @@ -1370,6 +1880,12 @@ def emit_session_state(sess: Session, state_name: str): async def ws_handler(request): + origin_error = _request_origin_error(request) + if origin_error: + return web.json_response( + {"ok": False, "error": origin_error, "code": "origin_forbidden"}, + status=403, + ) ws = web.WebSocketResponse(heartbeat=30) await ws.prepare(request) hub.websockets.add(ws) @@ -1382,7 +1898,7 @@ async def ws_handler(request): }, ensure_ascii=False)) await ws.send_str(json.dumps({ "type": "services.snapshot", - "services": services.list_state(), + "services": services.list_panel_state(), }, ensure_ascii=False, default=str)) async for msg in ws: if msg.type == WSMsgType.TEXT: @@ -1399,26 +1915,95 @@ async def ws_handler(request): # Transport layer: HTTP command/data API # --------------------------------------------------------------------------- -def cors_headers(): - return { - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Methods": "GET,POST,PUT,DELETE,OPTIONS", - "Access-Control-Allow-Headers": "Content-Type", +def _valid_port(value: str, default: int) -> int: + if not re.fullmatch(r"[0-9]{1,5}", value or ""): + return default + port = int(value) + return port if 1 <= port <= 65535 else default + + +def _allowed_request_origins() -> Set[str]: + bridge_port = _valid_port(os.environ.get("BRIDGE_PORT", "14168"), 14168) + origins = { + "tauri://localhost", + "http://tauri.localhost", + "http://localhost:5173", + f"http://127.0.0.1:{bridge_port}", + f"http://localhost:{bridge_port}", + f"http://[::1]:{bridge_port}", } + if os.environ.get("GA_E2E") == "1": + vite_port = os.environ.get("VITE_PORT", "") + if re.fullmatch(r"[0-9]{1,5}", vite_port or ""): + parsed_port = int(vite_port) + if 1 <= parsed_port <= 65535: + origins.add(f"http://127.0.0.1:{parsed_port}") + return origins + + +def _request_origin_error(request) -> Optional[str]: + origin = request.headers.get("Origin") + if origin is not None: + if origin not in _allowed_request_origins(): + return "request origin is not allowed" + return None + if request.headers.get("Sec-Fetch-Site", "").strip().lower() == "cross-site": + return "cross-site request without an Origin header is not allowed" + return None + + +def _add_cors_response_headers(response: web.StreamResponse, origin: Optional[str]) -> None: + if origin is None: + return + response.headers["Access-Control-Allow-Origin"] = origin + vary = [part.strip() for part in response.headers.get("Vary", "").split(",") if part.strip()] + if not any(part.lower() == "origin" for part in vary): + vary.append("Origin") + response.headers["Vary"] = ", ".join(vary) + response.headers["Access-Control-Allow-Methods"] = "GET,POST,PUT,PATCH,DELETE,OPTIONS,HEAD" + response.headers["Access-Control-Allow-Headers"] = "Content-Type, X-GA-E2E-Token" @web.middleware async def cors_middleware(request, handler): + origin = request.headers.get("Origin") + origin_error = _request_origin_error(request) + if origin_error: + return web.json_response( + {"ok": False, "error": origin_error, "code": "origin_forbidden"}, + status=403, + ) if request.method == "OPTIONS": - return web.Response(status=204, headers=cors_headers()) - resp = await handler(request) - for k, v in cors_headers().items(): - resp.headers[k] = v - return resp + response: web.StreamResponse = web.Response(status=204) + else: + try: + response = await handler(request) + except MaintenanceConflict as error: + response = web.json_response(error.payload(), status=409) + except web.HTTPException as error: + response = web.Response( + status=error.status, + reason=error.reason, + body=error.body, + headers=error.headers, + ) + except asyncio.CancelledError: + raise + except Exception as error: + bridge_print(f"[bridge] unhandled request error: {type(error).__name__}: {error}") + response = web.json_response( + {"ok": False, "error": "internal server error"}, status=500 + ) + _add_cors_response_headers(response, origin) + return response def json_ok(data: dict, status: int = 200): - return web.json_response(data, status=status, headers=cors_headers(), dumps=lambda x: json.dumps(x, ensure_ascii=False, default=str)) + return web.json_response( + data, + status=status, + dumps=lambda x: json.dumps(x, ensure_ascii=False, default=str), + ) async def read_json(request) -> dict: @@ -1440,6 +2025,7 @@ async def status_handler(request): "mykeyPath": manager.mykey_path, "sessionCount": len(manager.sessions), "activeSessionId": manager.active_session_id, + "maintenance": getattr(manager, "_maintenance_kind", None), "ws": "/ws", "transport": {"http": True, "wsEventsOnly": True}, }) @@ -1450,15 +2036,11 @@ async def status_handler(request): def _settings_doc() -> dict: - try: - doc = json.loads(_SETTINGS.read_text(encoding="utf-8")) if _SETTINGS.is_file() else {} - return doc if isinstance(doc, dict) else {} - except Exception: - return {} + return read_settings(_SETTINGS, strict=False) -def _write_settings_doc(doc: dict) -> None: - _SETTINGS.write_text(json.dumps(doc, ensure_ascii=False, indent=2), encoding="utf-8") +def _update_settings_doc(mutate) -> dict: + return update_settings(_SETTINGS, mutate) def _desktop_ui() -> dict: @@ -1480,6 +2062,34 @@ def _global_default_llm_no() -> int: return 0 +def _parse_model_no(value: Any) -> Optional[int]: + if value is None or isinstance(value, bool): + return None + try: + return int(value) + except (TypeError, ValueError): + return None + + +def _resolve_conductor_model_state(doc: dict, profile_count: int) -> dict: + """Resolve persisted Conductor config without relying on modulo selection.""" + count = max(0, int(profile_count or 0)) + conductor = doc.get("conductor") if isinstance(doc, dict) else None + ui = doc.get("ui") if isinstance(doc, dict) else None + raw_configured = conductor.get("llmNo") if isinstance(conductor, dict) else None + configured = _parse_model_no(raw_configured) + ui_default = _parse_model_no(ui.get("llmNo")) if isinstance(ui, dict) else None + + if count <= 0: + return {"configured": configured, "effective": None, "fallbackReason": "no_models"} + if configured is not None and 0 <= configured < count: + return {"configured": configured, "effective": configured, "fallbackReason": None} + if ui_default is not None and 0 <= ui_default < count: + reason = "invalid_configured" if raw_configured is not None else "ui_default" + return {"configured": configured, "effective": ui_default, "fallbackReason": reason} + return {"configured": configured, "effective": 0, "fallbackReason": "first_available"} + + async def get_config_handler(request): profiles = manager.list_model_profiles() active = next((p["id"] for p in profiles if p.get("active")), manager.config.get("llmNo", 0)) @@ -1495,17 +2105,20 @@ async def save_config_handler(request): data = await read_json(request) cfg = data.get("config", data) if isinstance(cfg, dict): - patch = {k: cfg[k] for k in _UI_KEYS if k in cfg} - if patch: - try: - doc = _settings_doc() - ui = doc["ui"] if isinstance(doc.get("ui"), dict) else {} - ui.update(patch) - doc["ui"] = ui - _write_settings_doc(doc) - except Exception as e: - print(f"[bridge] save ui prefs failed: {e}", file=sys.stderr) - manager.config.update(cfg) + with manager.mutation(): + patch = {k: cfg[k] for k in _UI_KEYS if k in cfg} + if patch: + try: + def update_ui(doc): + ui = doc["ui"] if isinstance(doc.get("ui"), dict) else {} + ui.update(patch) + doc["ui"] = ui + + _update_settings_doc(update_ui) + except DesktopSettingsError as error: + bridge_print(f"[bridge] save ui prefs failed: {error}") + return json_ok({"ok": False, "error": str(error)}, status=500) + manager.config.update(cfg) return json_ok({"ok": True, "gaRoot": manager.ga_root, "mykeyPath": manager.mykey_path, "config": manager.config}) @@ -1517,13 +2130,20 @@ async def model_profiles_handler(request): if request.method == "GET": return json_ok({"profile": manager.get_model_profile(profile_id)}) if request.method == "PUT": - return json_ok({"ok": True, **manager.update_model_profile(profile_id, await read_json(request))}) + data = await read_json(request) + with manager.mutation(): + return json_ok({"ok": True, **manager.update_model_profile(profile_id, data)}) if request.method == "DELETE": - return json_ok({"ok": True, **manager.delete_model_profile(profile_id)}) + with manager.mutation(): + return json_ok({"ok": True, **manager.delete_model_profile(profile_id)}) return json_ok({"ok": False, "error": "method not allowed"}, status=405) if request.method == "POST": - return json_ok({"ok": True, **manager.add_model_profile(await read_json(request))}) + data = await read_json(request) + with manager.mutation(): + return json_ok({"ok": True, **manager.add_model_profile(data)}) return json_ok({"profiles": manager.list_model_profiles()}) + except MaintenanceConflict: + raise except ValueError as e: return json_ok({"ok": False, "error": str(e)}, status=400) except Exception as e: @@ -1534,11 +2154,14 @@ async def mixin_handler(request): """聚合渠道成员管理:POST 加入 / DELETE 移出 主聚合渠道。""" try: profile_id = int(request.match_info.get("id")) - if request.method == "POST": - return json_ok({"ok": True, **manager.add_to_mixin(profile_id)}) - if request.method == "DELETE": - return json_ok({"ok": True, **manager.remove_from_mixin(profile_id)}) + with manager.mutation(): + if request.method == "POST": + return json_ok({"ok": True, **manager.add_to_mixin(profile_id)}) + if request.method == "DELETE": + return json_ok({"ok": True, **manager.remove_from_mixin(profile_id)}) return json_ok({"ok": False, "error": "method not allowed"}, status=405) + except MaintenanceConflict: + raise except ValueError as e: return json_ok({"ok": False, "error": str(e)}, status=400) except Exception as e: @@ -1549,7 +2172,10 @@ async def mixin_order_handler(request): """渠道组成员拖拽排序:PUT {members:[name,...]}。""" try: data = await read_json(request) - return json_ok({"ok": True, **manager.reorder_mixin(data.get("members") or [])}) + with manager.mutation(): + return json_ok({"ok": True, **manager.reorder_mixin(data.get("members") or [])}) + except MaintenanceConflict: + raise except ValueError as e: return json_ok({"ok": False, "error": str(e)}, status=400) except Exception as e: @@ -1558,7 +2184,8 @@ async def mixin_order_handler(request): async def list_sessions_handler(request): with manager.lock: - sessions = [manager.snapshot(s, include_messages=False) for s in manager.sessions.values()] + sessions = [manager.snapshot(s, include_messages=False) + for s in manager.sessions.values() if _is_desktop_session_id(s.id)] return json_ok({"sessions": sessions, "activeSessionId": manager.active_session_id}) @@ -1581,20 +2208,21 @@ async def delete_session_handler(request): async def patch_session_handler(request): sid = request.match_info["sid"] - sess = manager.get_session(sid) data = await read_json(request) - if "title" in data: - sess.title = data["title"] - sess.untitled = False - if "pinned" in data: - sess.pinned = bool(data["pinned"]) - if "untitled" in data: - sess.untitled = bool(data["untitled"]) - if "plan_scan_baseline" in data: - sess.plan_scan_baseline = int(data["plan_scan_baseline"]) - sess.updated_at = time.time() - manager._persist_session(sess) - return json_ok({"ok": True, "session": manager.snapshot(sess, include_messages=False)}) + with manager.mutation(): + sess = manager.get_session(sid) + if "title" in data: + sess.title = data["title"] + sess.untitled = False + if "pinned" in data: + sess.pinned = bool(data["pinned"]) + if "untitled" in data: + sess.untitled = bool(data["untitled"]) + if "plan_scan_baseline" in data: + sess.plan_scan_baseline = int(data["plan_scan_baseline"]) + sess.updated_at = time.time() + manager._persist_session(sess) + return json_ok({"ok": True, "session": manager.snapshot(sess, include_messages=False)}) async def prompt_handler(request): @@ -1625,7 +2253,8 @@ async def cancel_handler(request): async def restore_handler(request): sid = request.match_info["sid"] - return json_ok(manager.restore_context(sid)) + with manager.mutation(): + return json_ok(manager.restore_context(sid)) async def session_model_handler(request): @@ -1764,8 +2393,9 @@ async def upload_handler(request): if not blob: return json_ok({"ok": False, "error": "empty file"}) safe_name = name or "file" - fpath = _session_upload_dir(data.get("sid") or "") / f"{uuid.uuid4().hex[:12]}__{safe_name}" - fpath.write_bytes(blob) + with manager.mutation(): + fpath = _session_upload_dir(data.get("sid") or "") / f"{uuid.uuid4().hex[:12]}__{safe_name}" + fpath.write_bytes(blob) return json_ok({"ok": True, "path": str(fpath)}) @@ -1774,13 +2404,16 @@ async def upload_delete_handler(request): data = await read_json(request) raw = data.get("path") or "" try: - target = Path(raw).resolve() - upload_root = _WEB_UPLOAD_DIR.resolve() - if upload_root not in target.parents: - return json_ok({"ok": False, "error": "path outside upload dir"}) - if target.exists(): - target.unlink() + with manager.mutation(): + target = Path(raw).resolve() + upload_root = _WEB_UPLOAD_DIR.resolve() + if upload_root not in target.parents: + return json_ok({"ok": False, "error": "path outside upload dir"}) + if target.exists(): + target.unlink() return json_ok({"ok": True}) + except MaintenanceConflict: + raise except Exception as e: return json_ok({"ok": False, "error": str(e)}) @@ -1890,98 +2523,133 @@ async def mykey_save_handler(request): if content is None: return json_ok({"ok": False, "error": "missing_content"}, status=400) try: - profiles = manager._save_mykey_text(str(content)) + with manager.mutation(): + profiles = manager._save_mykey_text(str(content)) + # Importing/rewriting mykey may recover only extras that are already + # broken. Healthy tasks keep their current process/model snapshot. + services.restart_broken_extras() + except MaintenanceConflict: + raise except Exception as e: return json_ok({"ok": False, "error": str(e)}, status=400) - # 导入/整体重写 mykey 后,只有「已崩坏」的 conductor/scheduler 才重启(死了才救); - # 健康运行中的进程不打断,它们会在下个任务靠自身 mtime 热重载读到新 key。 - services.restart_broken_extras() return json_ok({"ok": True, "path": str(manager._mykey_file()), "profiles": profiles}) def _import_memory_from(source_dir: str, ga_root: str) -> dict: - """把 source_dir 的 memory/ 与 temp/model_responses/ 导入到 ga_root。 + """Compatibility wrapper for the transactional Desktop data import.""" + return merge_data_files(source_dir, ga_root) - memory/: 先整体备份现有 ga_root/memory 到 temp/memory_import_backup_/,再覆盖同名文件、补齐新文件。 - temp/model_responses/: 文件名带 pid/logid 天然唯一,只拷目标端不存在的,已存在的跳过。 - """ - src = Path(source_dir).expanduser().resolve() - dst_root = Path(ga_root).resolve() - if not src.is_dir(): - raise ValueError(f"source is not a directory: {src}") - if src == dst_root: - raise ValueError("source is the same as current GA root") - - src_mem = src / "memory" - src_resp = src / "temp" / "model_responses" - if not src_mem.is_dir() and not src_resp.is_dir(): - raise ValueError("not a GA directory (no memory/ or temp/model_responses/)") - - memory_copied = 0 - responses_copied = 0 - responses_skipped = 0 - backup_dir = "" - - # --- memory/: 备份后覆盖 --- - if src_mem.is_dir(): - dst_mem = dst_root / "memory" - if dst_mem.is_dir() and any(dst_mem.iterdir()): - ts = time.strftime("%Y%m%d_%H%M%S") - backup_root = dst_root / "temp" / f"memory_import_backup_{ts}" - backup_root.mkdir(parents=True, exist_ok=True) - shutil.copytree(dst_mem, backup_root / "memory") - backup_dir = str(backup_root) - dst_mem.mkdir(parents=True, exist_ok=True) - for item in src_mem.rglob("*"): - rel = item.relative_to(src_mem) - target = dst_mem / rel - if item.is_dir(): - target.mkdir(parents=True, exist_ok=True) - else: - target.parent.mkdir(parents=True, exist_ok=True) - shutil.copy2(item, target) - memory_copied += 1 - - # --- temp/model_responses/: 补齐缺失 --- - if src_resp.is_dir(): - dst_resp = dst_root / "temp" / "model_responses" - dst_resp.mkdir(parents=True, exist_ok=True) - for item in src_resp.rglob("*"): - if item.is_dir(): - continue - rel = item.relative_to(src_resp) - target = dst_resp / rel - if target.exists(): - responses_skipped += 1 + +async def _run_worker_to_completion(function, *args): + """A cancelled HTTP task must not release a worker-owned maintenance gate.""" + worker = asyncio.create_task(asyncio.to_thread(function, *args)) + try: + return await asyncio.shield(worker) + except asyncio.CancelledError as cancellation: + while not worker.done(): + try: + await asyncio.shield(worker) + except asyncio.CancelledError: continue - target.parent.mkdir(parents=True, exist_ok=True) - shutil.copy2(item, target) - responses_copied += 1 + except Exception: + break + with contextlib.suppress(Exception): + worker.result() + raise cancellation - return { - "ok": True, - "memoryCopied": memory_copied, - "responsesCopied": responses_copied, - "responsesSkipped": responses_skipped, - "backupDir": backup_dir, - } + +async def memory_import_inspect_handler(request): + data = await read_json(request) + source_path = str(data.get("sourcePath") or data.get("sourceDir") or "").strip() + if not source_path: + return json_ok({"ok": False, "error": "missing_sourcePath"}, status=400) + try: + result = await asyncio.to_thread(inspect_import_source, source_path) + except (BackupFormatError, OSError, ValueError) as error: + return json_ok({"ok": False, "error": str(error)}, status=400) + return json_ok(result) + + +def _import_data_source(source_path: str) -> dict: + with materialize_import_source(source_path) as source_root: + token = manager.begin_maintenance("import", services.running_managed_ids) + try: + with manager.lock: + existing_session_ids = set(manager.sessions) + result = merge_data_files( + str(source_root), + manager.ga_root, + existing_session_ids=existing_session_ids, + session_preparer=manager._session_from_item, + ) + prepared_sessions = result.pop("_preparedSessions", []) + if prepared_sessions: + # Files are already committed atomically by merge_data_files. Adopt the + # prevalidated objects without a second persistence pass that could + # partially fail or overwrite an existing Desktop session. + with manager.lock: + for session in prepared_sessions: + manager.sessions.setdefault(session.id, session) + return result + finally: + manager.end_maintenance(token) async def memory_import_handler(request): data = await read_json(request) - source_dir = (data.get("sourceDir") or "").strip() - if not source_dir: + source_path = str(data.get("sourcePath") or data.get("sourceDir") or "").strip() + if not source_path: return json_ok({"ok": False, "error": "missing_sourceDir"}, status=400) try: - result = _import_memory_from(source_dir, manager.ga_root) - result.update(manager.import_sessions(source_dir)) - except Exception as e: - return json_ok({"ok": False, "error": str(e)}, status=400) + result = await _run_worker_to_completion(_import_data_source, source_path) + except MaintenanceConflict as error: + return json_ok(error.payload(), status=409) + except (BackupFormatError, ValueError) as error: + return json_ok({"ok": False, "error": str(error)}, status=400) + except OSError as error: + return json_ok({"ok": False, "error": str(error)}, status=500) + return json_ok(result) + + +def _export_data_source(destination_path: str, source_mode: str) -> dict: + token = manager.begin_maintenance("export", services.running_managed_ids) + try: + manager._persist(strict=True) + return export_data_backup( + manager.ga_root, + destination_path, + source_mode, + forbidden_roots=( + _WEB_UPLOAD_DIR, + APP_DIR / "desktop" / "static", + ), + ) + finally: + manager.end_maintenance(token) + + +async def memory_export_handler(request): + data = await read_json(request) + destination_path = str(data.get("destinationPath") or "").strip() + source_mode = str(data.get("sourceMode") or "").strip() + if not destination_path: + return json_ok({"ok": False, "error": "missing_destinationPath"}, status=400) + try: + result = await _run_worker_to_completion( + _export_data_source, destination_path, source_mode + ) + except MaintenanceConflict as error: + return json_ok(error.payload(), status=409) + except (BackupFormatError, ValueError) as error: + return json_ok({"ok": False, "error": str(error)}, status=400) + except OSError as error: + return json_ok({"ok": False, "error": str(error)}, status=500) return json_ok(result) async def conductor_model_get_handler(request): - return json_ok({"model": _conductor_settings()}) + state = _resolve_conductor_model_state(_settings_doc(), len(manager.list_model_profiles())) + return json_ok({"model": state}) async def conductor_model_save_handler(request): @@ -1990,15 +2658,23 @@ async def conductor_model_save_handler(request): llm_no = int(data.get("llmNo")) except (TypeError, ValueError): return json_ok({"ok": False, "error": "invalid_llmNo"}, status=400) + profile_count = len(manager.list_model_profiles()) + if llm_no < 0 or llm_no >= profile_count: + return json_ok({"ok": False, "error": "model_out_of_range"}, status=400) try: - doc = _settings_doc() - conductor = doc["conductor"] if isinstance(doc.get("conductor"), dict) else {} - conductor["llmNo"] = llm_no - doc["conductor"] = conductor - _write_settings_doc(doc) + with manager.mutation(): + def update_conductor(doc): + conductor = doc["conductor"] if isinstance(doc.get("conductor"), dict) else {} + conductor["llmNo"] = llm_no + doc["conductor"] = conductor + + doc = _update_settings_doc(update_conductor) + except MaintenanceConflict: + raise except Exception as e: return json_ok({"ok": False, "error": str(e)}, status=500) - return json_ok({"ok": True, "model": conductor}) + state = _resolve_conductor_model_state(doc, profile_count) + return json_ok({"ok": True, "model": state}) async def service_start_handler(request): @@ -2047,7 +2723,8 @@ async def stop_extras_handler(request): async def start_extras_handler(request): if not _is_local_peer(request.remote or ""): return json_ok({"ok": False, "error": "forbidden"}, status=403) - services.autostart_extras() + with manager.mutation(): + services.autostart_extras() return json_ok({"ok": True}) @@ -2065,10 +2742,32 @@ def _exit_bridge() -> None: async def bridge_exit_handler(request): if not _is_local_peer(request.remote or ""): return json_ok({"ok": False, "error": "forbidden"}, status=403) - _exit_bridge() + with manager.mutation(): + # Make graceful shutdown admission irreversible before scheduling the + # delayed process exit. Otherwise a new import/export could acquire the + # maintenance gate during the response-to-exit timer window. + manager._shutdown_requested = True + _exit_bridge() return json_ok({"ok": True}) +async def e2e_next_turn_handler(request): + token = _e2e_control_token() + if token is None: + raise web.HTTPNotFound() + if not _is_local_peer(request.remote or ""): + return json_ok({"ok": False, "error": "forbidden"}, status=403) + if request.headers.get("X-GA-E2E-Token", "") != token: + return json_ok({"ok": False, "error": "forbidden"}, status=403) + try: + body = await request.json() + with manager.mutation(): + _set_e2e_next_turn(str(body.get("mode", ""))) + except (ValueError, TypeError, json.JSONDecodeError): + return json_ok({"ok": False, "error": "mode must be empty"}, status=400) + return json_ok({"ok": True, "mode": "empty"}) + + async def token_stats_handler(request): try: sys.path.insert(0, str(APP_DIR)) if str(APP_DIR) not in sys.path else None @@ -2090,30 +2789,25 @@ async def token_stats_handler(request): return json_ok({"records": records}) -_TOKEN_HISTORY_FILE = None - -def _tok_file() -> Path: - global _TOKEN_HISTORY_FILE - if _TOKEN_HISTORY_FILE is None: - _TOKEN_HISTORY_FILE = Path(manager.ga_root) / "temp" / "desktop_token_history.json" - return _TOKEN_HISTORY_FILE - async def get_token_history_handler(request): - f = _tok_file() - if f.is_file(): - try: - data = json.loads(f.read_text(encoding="utf-8")) - return json_ok(data) - except Exception: - pass - return json_ok({"history": [], "snap": {}}) - -async def post_token_history_handler(request): - data = await read_json(request) - f = _tok_file() - f.parent.mkdir(parents=True, exist_ok=True) - f.write_text(json.dumps(data, ensure_ascii=False), encoding="utf-8") - return json_ok({"ok": True}) + try: + import cost_tracker + data = cost_tracker.aggregate_ledger() + # Enrich session titles from manager + for entry in data.get("history", []): + sid = entry.get("sessionId", "") + with manager.lock: + sess = manager.sessions.get(sid) + if sess and sess.title: + entry["title"] = sess.title + if not entry.get("model") and sess and sess.agent: + try: + entry["model"] = sess.agent.get_llm_name(model=True) or "" + except Exception: + pass + return json_ok(data) + except Exception: + return json_ok({"history": [], "snap": {}}) async def subscription_portal_handler(request): @@ -2127,7 +2821,8 @@ async def subscription_portal_handler(request): return json_ok({"available": bool(sp)}) if not sp: return json_ok({"ok": False, "available": False}, status=404) - sp() + with manager.mutation(): + sp() return json_ok({"ok": True}) @@ -2162,7 +2857,6 @@ def create_app(): app.router.add_get("/upload/raw", upload_raw_handler) app.router.add_get("/token-stats", token_stats_handler) app.router.add_get("/token-history", get_token_history_handler) - app.router.add_post("/token-history", post_token_history_handler) app.router.add_get("/subscription-portal", subscription_portal_handler) app.router.add_post("/subscription-portal", subscription_portal_handler) app.router.add_post("/services/start", service_start_handler) @@ -2171,13 +2865,17 @@ def create_app(): app.router.add_get("/services/panel", service_panel_handler) app.router.add_get("/services/mykey", mykey_get_handler) app.router.add_post("/services/mykey", mykey_save_handler) + app.router.add_post("/memory/import/inspect", memory_import_inspect_handler) app.router.add_post("/memory/import", memory_import_handler) + app.router.add_post("/memory/export", memory_export_handler) app.router.add_get("/services/conductor/model", conductor_model_get_handler) app.router.add_post("/services/conductor/model", conductor_model_save_handler) app.router.add_post("/services/stop-extras", stop_extras_handler) app.router.add_post("/services/start-extras", start_extras_handler) app.router.add_get("/services/identity", identity_handler) app.router.add_post("/services/bridge/exit", bridge_exit_handler) + if _e2e_control_token() is not None: + app.router.add_post("/__e2e__/next-turn", e2e_next_turn_handler) # Serve static frontend (desktop/static/) static_dir = APP_DIR / "desktop" / "static" @@ -2206,5 +2904,5 @@ async def on_shutdown(app): if __name__ == "__main__": host = os.environ.get("BRIDGE_HOST", "127.0.0.1") port = int(os.environ.get("BRIDGE_PORT", "14168")) - print(f"GenericAgent Web2 bridge: http://{host}:{port} ws://{host}:{port}/ws", file=sys.stderr) + bridge_print(f"GenericAgent Web2 bridge: http://{host}:{port} ws://{host}:{port}/ws") web.run_app(create_app(), host=host, port=port, print=None) diff --git a/frontends/desktop_settings.py b/frontends/desktop_settings.py new file mode 100644 index 000000000..afe80b1f5 --- /dev/null +++ b/frontends/desktop_settings.py @@ -0,0 +1,161 @@ +"""Shared, crash-safe Desktop settings storage for bridge and package tools.""" + +from __future__ import annotations + +import contextlib +import json +import os +import shutil +import stat +import time +import uuid +from pathlib import Path +from typing import Callable + + +LOCK_TIMEOUT_SECONDS = 5.0 +LOCK_STALE_SECONDS = 30.0 +PACKAGE_PATH_KEYS = ("python_path", "project_dir", "bridge_script") + + +class DesktopSettingsError(RuntimeError): + pass + + +def _lock_path(settings_path: Path) -> Path: + return settings_path.with_name(f"{settings_path.name}.lock") + + +@contextlib.contextmanager +def settings_lock( + settings_path: Path, + *, + timeout: float = LOCK_TIMEOUT_SECONDS, + stale_after: float = LOCK_STALE_SECONDS, +): + lock_path = _lock_path(settings_path) + token = f"{os.getpid()}:{uuid.uuid4().hex}" + deadline = time.monotonic() + timeout + settings_path.parent.mkdir(parents=True, exist_ok=True) + while True: + try: + os.mkdir(lock_path, 0o700) + (lock_path / "owner").write_text(token, encoding="ascii") + break + except FileExistsError: + try: + lock_stat = lock_path.lstat() + if not stat.S_ISDIR(lock_stat.st_mode) or stat.S_ISLNK(lock_stat.st_mode): + raise DesktopSettingsError(f"settings lock is not a directory: {lock_path}") + stale = time.time() - lock_stat.st_mtime > stale_after + except FileNotFoundError: + continue + if stale: + tombstone = lock_path.with_name(f"{lock_path.name}.stale.{uuid.uuid4().hex}") + try: + os.rename(lock_path, tombstone) + except FileNotFoundError: + continue + except OSError: + pass + else: + shutil.rmtree(tombstone, ignore_errors=True) + continue + if time.monotonic() >= deadline: + raise DesktopSettingsError(f"timed out waiting for settings lock: {lock_path}") + time.sleep(0.05) + try: + yield + finally: + try: + owner = lock_path / "owner" + if owner.read_text(encoding="ascii") == token: + owner.unlink() + lock_path.rmdir() + except (FileNotFoundError, OSError): + pass + + +def read_settings(settings_path: Path, *, strict: bool = True) -> dict: + if not settings_path.exists(): + return {} + try: + document = json.loads(settings_path.read_text(encoding="utf-8-sig")) + except (OSError, UnicodeError, json.JSONDecodeError) as error: + if strict: + raise DesktopSettingsError(f"cannot read Desktop settings: {error}") from error + return {} + if not isinstance(document, dict): + if strict: + raise DesktopSettingsError(f"Desktop settings must be a JSON object: {settings_path}") + return {} + return document + + +def write_settings_atomically(settings_path: Path, document: dict) -> None: + if not isinstance(document, dict): + raise DesktopSettingsError("Desktop settings must be a JSON object") + mode = stat.S_IMODE(settings_path.stat().st_mode) if settings_path.exists() else 0o600 + payload = (json.dumps(document, ensure_ascii=False, indent=2) + "\n").encode("utf-8") + temporary = settings_path.with_name( + f".{settings_path.name}.{os.getpid()}.{uuid.uuid4().hex}.tmp" + ) + try: + descriptor = os.open(temporary, os.O_WRONLY | os.O_CREAT | os.O_EXCL, mode) + with os.fdopen(descriptor, "wb") as stream: + stream.write(payload) + stream.flush() + os.fsync(stream.fileno()) + os.replace(temporary, settings_path) + if os.name != "nt": + directory = os.open(settings_path.parent, os.O_RDONLY) + try: + os.fsync(directory) + finally: + os.close(directory) + except OSError as error: + raise DesktopSettingsError(f"cannot write Desktop settings: {error}") from error + finally: + temporary.unlink(missing_ok=True) + + +def update_settings(settings_path: Path, mutate: Callable[[dict], None]) -> dict: + with settings_lock(settings_path): + document = read_settings(settings_path, strict=True) + mutate(document) + write_settings_atomically(settings_path, document) + return document + + +def merge_package_paths( + settings_path: Path, + *, + python_path: str, + project_dir: str, + bridge_script: str, +) -> dict: + updates = { + "python_path": python_path, + "project_dir": project_dir, + "bridge_script": bridge_script, + } + return update_settings(settings_path, lambda document: document.update(updates)) + + +def _path_is_within(value: str, bundle_root: str) -> bool: + try: + candidate = os.path.normcase(os.path.abspath(os.path.expanduser(value))) + bundle = os.path.normcase(os.path.abspath(os.path.expanduser(bundle_root))) + return os.path.commonpath((candidate, bundle)) == bundle + except (OSError, ValueError): + return False + + +def remove_bundle_paths(settings_path: Path, bundle_root: str) -> dict: + def remove_owned(document: dict) -> None: + for key in PACKAGE_PATH_KEYS: + value = document.get(key) + if isinstance(value, str) and _path_is_within(value, bundle_root): + document.pop(key, None) + + return update_settings(settings_path, remove_owned) From 6cc27a78c8192e63ffeb2a72affd89ff350add66 Mon Sep 17 00:00:00 2001 From: abraxas914 Date: Sun, 23 Aug 2026 17:18:25 +0800 Subject: [PATCH 2/6] build(desktop): publish compiled React Desktop 2.0 distribution Co-authored-by: yiqi-017 <22300246009@m.fudan.edu.cn> --- .gitattributes | 4 + .github/workflows/desktop-release-package.yml | 805 +++++++++++------- .gitignore | 2 + frontends/desktop/dist/README.md | 66 ++ .../desktop/dist/THIRD_PARTY_NOTICES.txt | 83 ++ .../desktop/dist/assets/Animation-TKQfYYOo.js | 1 + .../dist/assets/CollabPage-CG38jm3S.css | 1 + .../dist/assets/CollabPage-bnm43hIR.js | 1 + .../desktop/dist/assets/IconFile-CgfQSwGI.js | 1 + .../assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 | Bin 0 -> 28076 bytes .../assets/KaTeX_AMS-Regular-DMm9YOAa.woff | Bin 0 -> 33516 bytes .../assets/KaTeX_AMS-Regular-DRggAlZN.ttf | Bin 0 -> 63632 bytes .../KaTeX_Caligraphic-Bold-ATXxdsX0.ttf | Bin 0 -> 12368 bytes .../KaTeX_Caligraphic-Bold-BEiXGLvX.woff | Bin 0 -> 7716 bytes .../KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 | Bin 0 -> 6912 bytes .../KaTeX_Caligraphic-Regular-CTRA-rTL.woff | Bin 0 -> 7656 bytes .../KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 | Bin 0 -> 6908 bytes .../KaTeX_Caligraphic-Regular-wX97UBjC.ttf | Bin 0 -> 12344 bytes .../assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf | Bin 0 -> 19584 bytes .../assets/KaTeX_Fraktur-Bold-BsDP51OF.woff | Bin 0 -> 13296 bytes .../assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 | Bin 0 -> 11348 bytes .../assets/KaTeX_Fraktur-Regular-CB_wures.ttf | Bin 0 -> 19572 bytes .../KaTeX_Fraktur-Regular-CTYiF6lA.woff2 | Bin 0 -> 11316 bytes .../KaTeX_Fraktur-Regular-Dxdc4cR9.woff | Bin 0 -> 13208 bytes .../assets/KaTeX_Main-Bold-Cx986IdX.woff2 | Bin 0 -> 25324 bytes .../dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff | Bin 0 -> 29912 bytes .../dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf | Bin 0 -> 51336 bytes .../KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 | Bin 0 -> 16780 bytes .../assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf | Bin 0 -> 32968 bytes .../KaTeX_Main-BoldItalic-SpSLRI95.woff | Bin 0 -> 19412 bytes .../assets/KaTeX_Main-Italic-3WenGoN9.ttf | Bin 0 -> 33580 bytes .../assets/KaTeX_Main-Italic-BMLOBm91.woff | Bin 0 -> 19676 bytes .../assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 | Bin 0 -> 16988 bytes .../assets/KaTeX_Main-Regular-B22Nviop.woff2 | Bin 0 -> 26272 bytes .../assets/KaTeX_Main-Regular-Dr94JaBh.woff | Bin 0 -> 30772 bytes .../assets/KaTeX_Main-Regular-ypZvNtVU.ttf | Bin 0 -> 53580 bytes .../assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf | Bin 0 -> 31196 bytes .../KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 | Bin 0 -> 16400 bytes .../KaTeX_Math-BoldItalic-iY-2wyZ7.woff | Bin 0 -> 18668 bytes .../assets/KaTeX_Math-Italic-DA0__PXp.woff | Bin 0 -> 18748 bytes .../assets/KaTeX_Math-Italic-flOr_0UB.ttf | Bin 0 -> 31308 bytes .../assets/KaTeX_Math-Italic-t53AETM-.woff2 | Bin 0 -> 16440 bytes .../assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf | Bin 0 -> 24504 bytes .../KaTeX_SansSerif-Bold-D1sUS0GD.woff2 | Bin 0 -> 12216 bytes .../assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff | Bin 0 -> 14408 bytes .../KaTeX_SansSerif-Italic-C3H0VqGB.woff2 | Bin 0 -> 12028 bytes .../KaTeX_SansSerif-Italic-DN2j7dab.woff | Bin 0 -> 14112 bytes .../KaTeX_SansSerif-Italic-YYjJ1zSn.ttf | Bin 0 -> 22364 bytes .../KaTeX_SansSerif-Regular-BNo7hRIc.ttf | Bin 0 -> 19436 bytes .../KaTeX_SansSerif-Regular-CS6fqUqJ.woff | Bin 0 -> 12316 bytes .../KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 | Bin 0 -> 10344 bytes .../assets/KaTeX_Script-Regular-C5JkGWo-.ttf | Bin 0 -> 16648 bytes .../KaTeX_Script-Regular-D3wIWfF6.woff2 | Bin 0 -> 9644 bytes .../assets/KaTeX_Script-Regular-D5yQViql.woff | Bin 0 -> 10588 bytes .../assets/KaTeX_Size1-Regular-C195tn64.woff | Bin 0 -> 6496 bytes .../assets/KaTeX_Size1-Regular-Dbsnue_I.ttf | Bin 0 -> 12228 bytes .../assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 | Bin 0 -> 5468 bytes .../assets/KaTeX_Size2-Regular-B7gKUWhC.ttf | Bin 0 -> 11508 bytes .../assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 | Bin 0 -> 5208 bytes .../assets/KaTeX_Size2-Regular-oD1tc_U0.woff | Bin 0 -> 6188 bytes .../assets/KaTeX_Size3-Regular-CTq5MqoE.woff | Bin 0 -> 4420 bytes .../assets/KaTeX_Size3-Regular-DgpXs0kz.ttf | Bin 0 -> 7588 bytes .../assets/KaTeX_Size4-Regular-BF-4gkZK.woff | Bin 0 -> 5980 bytes .../assets/KaTeX_Size4-Regular-DWFBv043.ttf | Bin 0 -> 10364 bytes .../assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 | Bin 0 -> 4928 bytes .../KaTeX_Typewriter-Regular-C0xS9mPB.woff | Bin 0 -> 16028 bytes .../KaTeX_Typewriter-Regular-CO6r4hn1.woff2 | Bin 0 -> 13568 bytes .../KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf | Bin 0 -> 27556 bytes .../dist/assets/MarkdownPart-Bhe_jloX.js | 271 ++++++ .../dist/assets/MarkdownPart-Cp90Gu77.css | 1 + .../dist/assets/ServicesPage-Cbm5nbW7.css | 1 + .../dist/assets/ServicesPage-DrjRw530.js | 4 + .../dist/assets/SummaryPart-D48OOFSQ.js | 1 + .../desktop/dist/assets/TokenPage-C6-RA6yj.js | 2 + .../dist/assets/TokenPage-DwLDOw_j.css | 1 + .../dist/assets/WindowsTitlebar-CrkUa1UM.js | 1 + .../dist/assets/WindowsTitlebar-U0YG9JNA.css | 1 + .../desktop/dist/assets/codicon-DjkITdqj.ttf | Bin 0 -> 125828 bytes .../desktop/dist/assets/feishu-9hxxyz3-.svg | 12 + frontends/desktop/dist/assets/ga-logo.svg | 58 ++ .../desktop/dist/assets/index-Bpi3BHKj.js | 1 + .../desktop/dist/assets/index-ClU1uQYs.css | 1 + .../desktop/dist/assets/index-D0pGtk0y.css | 1 + .../desktop/dist/assets/index-D_sWIqse.js | 1 + .../desktop/dist/assets/index-DkG9Cu-r.css | 1 + .../desktop/dist/assets/index-DpGuh58E.js | 1 + .../desktop/dist/assets/index-DwVcZP0M.js | 4 + .../desktop/dist/assets/index-gTPS8Hpa.css | 1 + .../desktop/dist/assets/loading-6Qy4iUUr.css | 1 + .../desktop/dist/assets/loading-VXGdS4iv.js | 2 + .../desktop/dist/assets/main-Knf6L_en.js | 33 + .../desktop/dist/assets/main-uLcKKTNv.css | 1 + .../assets/markdown-preprocess-Bvg4n8KE.js | 295 +++++++ .../assets/markdown-preprocess-Cp579UoJ.css | 1 + .../desktop/dist/assets/setup-BtYdaXRD.js | 2 + .../desktop/dist/assets/setup-D74O8rBf.css | 1 + .../dist/assets/tauri-compat-BTcpEvqB.css | 1 + .../dist/assets/tauri-compat-tfiFK9EG.js | 47 + frontends/desktop/dist/build-provenance.json | 9 + frontends/desktop/dist/fallback.html | 80 ++ frontends/desktop/dist/index.html | 38 + frontends/desktop/dist/loading.html | 36 + frontends/desktop/dist/setup.html | 54 ++ frontends/desktop/package.json | 8 +- .../packaging/dmg-build-requirements.txt | 5 + .../packaging/python-runtime-requirements.txt | 37 + .../packaging/scripts/linux/install_linux.sh | 74 +- .../packaging/scripts/linux/uninstall.sh | 37 +- .../packaging/scripts/macos/install_macos.sh | 43 +- .../packaging/scripts/macos/uninstall.command | 34 +- .../scripts/merge_desktop_settings.py | 39 + .../scripts/windows/install_windows.ps1 | 61 +- .../packaging/scripts/windows/uninstall.bat | 2 +- .../scripts/windows/uninstall_windows.ps1 | 37 +- frontends/desktop/scripts/gen_ds_store.py | 68 ++ frontends/desktop/scripts/post-dmg.sh | 153 ++++ 116 files changed, 2129 insertions(+), 398 deletions(-) create mode 100644 frontends/desktop/dist/README.md create mode 100644 frontends/desktop/dist/THIRD_PARTY_NOTICES.txt create mode 100644 frontends/desktop/dist/assets/Animation-TKQfYYOo.js create mode 100644 frontends/desktop/dist/assets/CollabPage-CG38jm3S.css create mode 100644 frontends/desktop/dist/assets/CollabPage-bnm43hIR.js create mode 100644 frontends/desktop/dist/assets/IconFile-CgfQSwGI.js create mode 100644 frontends/desktop/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Script-Regular-D5yQViql.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Size1-Regular-C195tn64.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf create mode 100644 frontends/desktop/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff create mode 100644 frontends/desktop/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 create mode 100644 frontends/desktop/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf create mode 100644 frontends/desktop/dist/assets/MarkdownPart-Bhe_jloX.js create mode 100644 frontends/desktop/dist/assets/MarkdownPart-Cp90Gu77.css create mode 100644 frontends/desktop/dist/assets/ServicesPage-Cbm5nbW7.css create mode 100644 frontends/desktop/dist/assets/ServicesPage-DrjRw530.js create mode 100644 frontends/desktop/dist/assets/SummaryPart-D48OOFSQ.js create mode 100644 frontends/desktop/dist/assets/TokenPage-C6-RA6yj.js create mode 100644 frontends/desktop/dist/assets/TokenPage-DwLDOw_j.css create mode 100644 frontends/desktop/dist/assets/WindowsTitlebar-CrkUa1UM.js create mode 100644 frontends/desktop/dist/assets/WindowsTitlebar-U0YG9JNA.css create mode 100644 frontends/desktop/dist/assets/codicon-DjkITdqj.ttf create mode 100644 frontends/desktop/dist/assets/feishu-9hxxyz3-.svg create mode 100644 frontends/desktop/dist/assets/ga-logo.svg create mode 100644 frontends/desktop/dist/assets/index-Bpi3BHKj.js create mode 100644 frontends/desktop/dist/assets/index-ClU1uQYs.css create mode 100644 frontends/desktop/dist/assets/index-D0pGtk0y.css create mode 100644 frontends/desktop/dist/assets/index-D_sWIqse.js create mode 100644 frontends/desktop/dist/assets/index-DkG9Cu-r.css create mode 100644 frontends/desktop/dist/assets/index-DpGuh58E.js create mode 100644 frontends/desktop/dist/assets/index-DwVcZP0M.js create mode 100644 frontends/desktop/dist/assets/index-gTPS8Hpa.css create mode 100644 frontends/desktop/dist/assets/loading-6Qy4iUUr.css create mode 100644 frontends/desktop/dist/assets/loading-VXGdS4iv.js create mode 100644 frontends/desktop/dist/assets/main-Knf6L_en.js create mode 100644 frontends/desktop/dist/assets/main-uLcKKTNv.css create mode 100644 frontends/desktop/dist/assets/markdown-preprocess-Bvg4n8KE.js create mode 100644 frontends/desktop/dist/assets/markdown-preprocess-Cp579UoJ.css create mode 100644 frontends/desktop/dist/assets/setup-BtYdaXRD.js create mode 100644 frontends/desktop/dist/assets/setup-D74O8rBf.css create mode 100644 frontends/desktop/dist/assets/tauri-compat-BTcpEvqB.css create mode 100644 frontends/desktop/dist/assets/tauri-compat-tfiFK9EG.js create mode 100644 frontends/desktop/dist/build-provenance.json create mode 100644 frontends/desktop/dist/fallback.html create mode 100644 frontends/desktop/dist/index.html create mode 100644 frontends/desktop/dist/loading.html create mode 100644 frontends/desktop/dist/setup.html create mode 100644 frontends/desktop/packaging/dmg-build-requirements.txt create mode 100644 frontends/desktop/packaging/python-runtime-requirements.txt create mode 100644 frontends/desktop/packaging/scripts/merge_desktop_settings.py create mode 100644 frontends/desktop/scripts/gen_ds_store.py create mode 100644 frontends/desktop/scripts/post-dmg.sh diff --git a/.gitattributes b/.gitattributes index b3ebfcb8b..e98a36777 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,3 +3,7 @@ *.command text eol=lf *.ps1 text eol=crlf *.bat text eol=crlf + +# Preserve the byte-exact third-party notice in source and generated delivery trees. +frontends/desktop/public/THIRD_PARTY_NOTICES.txt text eol=lf +frontends/desktop/dist/THIRD_PARTY_NOTICES.txt text eol=lf diff --git a/.github/workflows/desktop-release-package.yml b/.github/workflows/desktop-release-package.yml index 4c320ddb1..54a714df4 100644 --- a/.github/workflows/desktop-release-package.yml +++ b/.github/workflows/desktop-release-package.yml @@ -23,34 +23,55 @@ name: Build Desktop Portable Packages - "macos" permissions: - contents: write + contents: read + +env: + NODE_VERSION: "22.23.2" + RUST_TOOLCHAIN: "1.95.0" + PBS_RELEASE: "20260814" + PBS_PYTHON_VERSION: "3.12.14" + MACOS_PACKAGING_PYTHON_VERSION: "3.12.10" + PYTHONDONTWRITEBYTECODE: "1" jobs: # ---------------------------------------------------------------------------- build-windows: name: Windows portable - if: ${{ startsWith(github.ref, 'refs/tags/') || github.event.inputs.target == 'all' || github.event.inputs.target == 'windows' }} - runs-on: windows-latest + if: ${{ (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/desktop-portable-')) || (github.event_name == 'workflow_dispatch' && (github.event.inputs.target == 'all' || github.event.inputs.target == 'windows')) }} + runs-on: windows-2025 + permissions: + contents: read steps: - name: Checkout repository - uses: actions/checkout@v5 + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: - node-version: 20 + node-version: ${{ env.NODE_VERSION }} - name: Set up Rust - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable action snapshot + with: + toolchain: ${{ env.RUST_TOOLCHAIN }} - name: Cache Rust build - uses: Swatinem/rust-cache@v2 + uses: Swatinem/rust-cache@63fed3e2fecf6f7b51dc6f043341b79ef82a9ae7 # v2.9.2 with: workspaces: frontends/desktop/src-tauri -> target - name: Install desktop dependencies working-directory: frontends/desktop - run: npm install + run: | + npm install --package-lock=false + node -e "const v=require('./node_modules/@tauri-apps/cli/package.json').version; if(v!=='2.11.4') throw new Error('unexpected Tauri CLI '+v)" + test ! -e package-lock.json + + - name: Verify tracked compiled renderer bytes + working-directory: frontends/desktop + run: npm run test:dist - name: Build Windows desktop exe working-directory: frontends/desktop @@ -58,11 +79,23 @@ jobs: - name: Assemble self-contained portable bundle shell: bash - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | set -euo pipefail + purge_runtime_bytecode() { + local runtime_root="$1" + find "$runtime_root" -type d -name '__pycache__' -prune -exec rm -rf {} + + find "$runtime_root" -type f \( -name '*.pyc' -o -name '*.pyo' \) -delete + if find "$runtime_root" -type d -name '__pycache__' -print -quit | grep -q .; then + echo "Python bytecode cache directory remains in packaged runtime: $runtime_root" >&2 + return 1 + fi + if find "$runtime_root" -type f \( -name '*.pyc' -o -name '*.pyo' \) -print -quit | grep -q .; then + echo "Python bytecode remains in packaged runtime: $runtime_root" >&2 + return 1 + fi + } + EXE_SRC="$(find frontends/desktop/src-tauri/target/release -maxdepth 1 -type f -name 'ga-desktop.exe' | head -n 1)" [[ -n "$EXE_SRC" ]] || { echo "ga-desktop.exe not found" >&2; exit 1; } @@ -73,22 +106,24 @@ jobs: # exe at the top level, named GenericAgent (typical portable form) cp "$EXE_SRC" "$PKG/GenericAgent.exe" cp frontends/desktop/packaging/scripts/windows/install_windows.ps1 "$RUNTIME/install_windows.ps1" + cp frontends/desktop/packaging/scripts/merge_desktop_settings.py "$RUNTIME/merge_desktop_settings.py" # Uninstaller: double-click entry at top level, worker script under runtime/. cp frontends/desktop/packaging/scripts/windows/uninstall.bat "$PKG/uninstall.bat" cp frontends/desktop/packaging/scripts/windows/uninstall_windows.ps1 "$RUNTIME/uninstall_windows.ps1" - # Embedded Python (python-build-standalone, windows x86_64, 3.12 install_only). - # browser_download_url is URL-encoded ('+' -> '%2B'); match loosely with '.*'. - PBS_URL="$(curl -fsSL -H "Authorization: Bearer $GH_TOKEN" https://api.github.com/repos/astral-sh/python-build-standalone/releases/latest \ - | grep -o '"browser_download_url": *"[^"]*"' \ - | grep 'cpython-3\.12\.[0-9].*x86_64-pc-windows-msvc-install_only\.tar\.gz' \ - | head -1 | sed -E 's/.*"(https[^"]+)"/\1/')" - [[ -n "$PBS_URL" ]] || { echo "Could not resolve python-build-standalone download URL" >&2; exit 1; } + # Fixed python-build-standalone Windows x86_64 archive. + PBS_URL="https://github.com/astral-sh/python-build-standalone/releases/download/${PBS_RELEASE}/cpython-${PBS_PYTHON_VERSION}%2B${PBS_RELEASE}-x86_64-pc-windows-msvc-install_only.tar.gz" + PBS_SHA256="7330282b47cd43a66b702d39078d2e5a88e580cee351d82f95045f21f5ee042a" + command -v cygpath >/dev/null 2>&1 || { echo "cygpath not found on Windows runner" >&2; exit 1; } + RUNNER_TEMP_POSIX="$(cygpath -u "$RUNNER_TEMP")" + [[ "$RUNNER_TEMP_POSIX" == /* ]] || { echo "cygpath did not return an absolute POSIX path" >&2; exit 1; } + PBS_ARCHIVE="${RUNNER_TEMP_POSIX}/pbs-windows-x86_64.tar.gz" echo "Python build-standalone: $PBS_URL" - curl -fsSL -o /tmp/pbs.tar.gz "$PBS_URL" - tar -xzf /tmp/pbs.tar.gz -C "$RUNTIME" # extracts a 'python/' dir (python.exe at top) + curl --proto '=https' --tlsv1.2 --fail --location --retry 3 --output "$PBS_ARCHIVE" "$PBS_URL" + printf '%s %s\n' "$PBS_SHA256" "$PBS_ARCHIVE" | sha256sum --check --strict - + tar -xzf "$PBS_ARCHIVE" -C "$RUNTIME" # extracts a 'python/' dir (python.exe at top) PY="$RUNTIME/python/python.exe" - "$PY" --version + PYTHONDONTWRITEBYTECODE=1 "$PY" -c 'import platform, sys; assert sys.version_info[:3] == (3, 12, 14); assert platform.machine().lower() in ("amd64", "x86_64"); print(sys.version)' # App-local UCRT: python-build-standalone links the Universal CRT dynamically # and does NOT bundle it. Win10/11 ship UCRT in-box, but stripped/older images @@ -104,18 +139,36 @@ jobs: test -f "$RUNTIME/python/api-ms-win-crt-runtime-l1-1-0.dll" \ || { echo "UCRT DLLs missing after copy" >&2; exit 1; } - # Offline wheels (native win_amd64 wheels for the embedded python) + # Offline binary-only wheels. requirements.txt pins direct and transitive versions. mkdir -p "$RUNTIME/wheels" - "$PY" -m pip download --dest "$RUNTIME/wheels" \ - "requests>=2.28" "beautifulsoup4>=4.12" "bottle>=0.12" "simple-websocket-server>=0.4" "aiohttp>=3.9" psutil \ - fastapi uvicorn websockets pydantic setuptools wheel + cp frontends/desktop/packaging/python-runtime-requirements.txt "$RUNTIME/wheels/requirements.txt" + PYTHONDONTWRITEBYTECODE=1 "$PY" -m pip download --only-binary=:all: --dest "$RUNTIME/wheels" \ + --requirement "$RUNTIME/wheels/requirements.txt" # Runtime source (project root minus heavy/dev/build dirs) mkdir -p "$RUNTIME/app" tar \ --exclude='./.git' --exclude='./.github' \ + --exclude='./frontends/tests' \ --exclude='./frontends/desktop/src-tauri' \ + --exclude='./frontends/desktop/src' \ + --exclude='./frontends/desktop/public' \ + --exclude='./frontends/desktop/scripts' \ + --exclude='./frontends/desktop/e2e' \ + --exclude='./frontends/desktop/tests' \ + --exclude='./frontends/desktop/testing' \ + --exclude='./frontends/desktop/spec' \ --exclude='./frontends/desktop/node_modules' \ + --exclude='./frontends/desktop/dist' \ + --exclude='./frontends/desktop/DESIGN.md' \ + --exclude='./frontends/desktop/package.json' \ + --exclude='./frontends/desktop/package-lock.json' \ + --exclude='./frontends/desktop/.npmrc' \ + --exclude='./frontends/desktop/index.html' \ + --exclude='./frontends/desktop/loading.html' \ + --exclude='./frontends/desktop/setup.html' \ + --exclude='./frontends/desktop/tsconfig*.json' \ + --exclude='./frontends/desktop/vite.config.ts' \ --exclude='./frontends/desktop/packaging' --exclude='./docs' \ --exclude='./assets/demo' --exclude='./assets/images' \ --exclude='./assets/GenericAgent_Technical_Report.pdf' \ @@ -127,9 +180,15 @@ jobs: test -f "$RUNTIME/app/agentmain.py" test -f "$RUNTIME/app/frontends/desktop_bridge.py" test -f "$RUNTIME/app/frontends/desktop/static/index.html" + test ! -e "$RUNTIME/app/frontends/desktop/dist" + test ! -e "$RUNTIME/app/frontends/desktop/src" + test ! -e "$RUNTIME/app/frontends/desktop/public" + test ! -e "$RUNTIME/app/frontends/desktop/package-lock.json" + test ! -e "$RUNTIME/app/frontends/desktop/node_modules" # Drop python debug symbols (.pdb) to slim the package (~80MB) find "$RUNTIME/python" -name '*.pdb' -delete 2>/dev/null || true + purge_runtime_bytecode "$RUNTIME" cat > "$PKG/readme.txt" <<'EOF' ================ 中文 ================ @@ -144,13 +203,14 @@ jobs: 使用 1. 解压到任意目录(路径建议不含特殊字符)。 2. 双击 GenericAgent.exe。 - 3. 首次启动会自动离线准备运行环境(建虚拟环境、装依赖),界面显示进度,完成后进入主界面。 + 3. 首次启动会离线校验并补齐随包 Python 运行时依赖,界面显示进度,完成后进入主界面。 4. 之后启动直接秒进。 说明 - 想真正对话,仍需在程序里配置模型 / API Key。 - 如果 Windows Defender 防火墙拦截 `127.0.0.1` / `localhost` 回环连接,程序可能无法启动或连接本机服务。请允许 `GenericAgent.exe` 和 `runtime\python\python.exe` 通过防火墙,然后重启桌面端。 - - 首次准备完成后不要移动本文件夹;若已移动,删除 runtime\app\.venv 后重新启动即可重建。 + - 本便携版尚未使用 Windows 代码签名证书;SmartScreen 可能显示警告。运行前请用随包发布的 SHA256SUMS-windows.txt 核对 ZIP。 + - 可整体移动本文件夹;重启后会自动刷新路径。若需强制重新准备,请删除 runtime\.prepared 后重启。 - runtime\ 是内置运行环境与源码,正常使用无需改动。 ================ English ================ @@ -165,14 +225,16 @@ jobs: Usage 1. Extract anywhere (a path without special characters is recommended). 2. Double-click GenericAgent.exe. - 3. The first launch prepares the runtime offline (creates a venv, installs deps) with a + 3. The first launch verifies and completes the bundled Python runtime offline with a progress UI, then opens the main window. 4. Subsequent launches start instantly. Notes - To actually chat, configure a model / API key inside the app. - If Windows Defender Firewall blocks the `127.0.0.1` / `localhost` loopback connection, the app may fail to start or reach its local service. Allow `GenericAgent.exe` and `runtime\python\python.exe` through the firewall, then restart the desktop app. - - Do not move this folder after the first setup; if you did, delete runtime\app\.venv and relaunch to rebuild. + - This portable build is not Windows code-signed, so SmartScreen may warn. Verify the ZIP against the published SHA256SUMS-windows.txt before running it. + - You may move the whole folder; relaunching refreshes its saved paths. To force a new + preparation pass, delete runtime\.prepared and relaunch. - runtime\ holds the bundled runtime and source; no need to touch it. EOF sed -i 's/^ //' "$PKG/readme.txt" @@ -192,7 +254,7 @@ jobs: Get-ChildItem artifacts/windows/out | Format-Table Name, Length - name: Upload workflow artifact - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: GenericAgent-Desktop-Windows-Portable-${{ github.run_number }} path: | @@ -200,71 +262,37 @@ jobs: artifacts/windows/out/SHA256SUMS-windows.txt if-no-files-found: error - - name: Publish into unified Release (tag push only) - if: ${{ startsWith(github.ref, 'refs/tags/') }} - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - shell: bash - run: | - set -euo pipefail - TAG_NAME="${{ github.ref_name }}" - TITLE="GenericAgent Desktop ${TAG_NAME}" - cat > "${RUNNER_TEMP:-/tmp}/ga_notes.md" <<'EOF' - GenericAgent Desktop 桌面版 / Desktop - - 无需自行安装 Python、无需联网安装依赖、无需源码;首次启动会自动准备内置运行环境。 - No separate Python install, no internet for dependencies, no source checkout required; the bundled runtime is prepared on first launch. - - ## 安装方法 / Installation - - Windows: 下载 `GenericAgent-Desktop-Windows-Portable.zip`,解压后双击 `GenericAgent.exe` 启动。卸载时先退出应用,再双击包内 `uninstall.bat`,最后删除整个解压目录。 - Download `GenericAgent-Desktop-Windows-Portable.zip`, extract it, then double-click `GenericAgent.exe`. To uninstall, quit the app, double-click `uninstall.bat`, then delete the extracted folder. - - Linux: 下载 `GenericAgent-Desktop-Linux-Portable.tar.gz`,解压后执行 `chmod +x GenericAgent.AppImage`,再运行 `./GenericAgent.AppImage`。卸载时先退出应用,再运行 `./uninstall.sh`,最后删除整个解压目录。 - Download `GenericAgent-Desktop-Linux-Portable.tar.gz`, extract it, run `chmod +x GenericAgent.AppImage`, then launch `./GenericAgent.AppImage`. To uninstall, quit the app, run `./uninstall.sh`, then delete the extracted folder. - - macOS: 下载 `GenericAgent-Desktop-macOS.dmg`,双击打开 DMG,把 `GenericAgent.app` 拖入 `Applications`,之后在“应用程序 / Applications”中启动。若出现“无法验证开发者”等提示,先双击 DMG 内的 `open_anyway.command`,再启动。卸载时先退出应用,再从 Applications 删除 `GenericAgent.app`。 - Download `GenericAgent-Desktop-macOS.dmg`, open it, drag `GenericAgent.app` to `Applications`, then launch it from Applications. If macOS says the developer cannot be verified, double-click `open_anyway.command` inside the DMG first, then launch again. To uninstall, quit the app, then delete `GenericAgent.app` from Applications. - - ## 首次启动 / First launch - 首次启动会自动离线准备运行环境(安装依赖),有进度条,完成后进入主界面;之后启动会更快。 - The first launch prepares the runtime offline (installs deps) with a progress bar, then opens the main window; later launches are faster. - - ## 说明 / Notes - - 想真正对话需在程序内配置模型 / API Key。Configure a model / API key in-app to start chatting. - - Windows Defender 防火墙可能会拦截 `127.0.0.1` / `localhost` 回环连接,导致程序无法启动或连接本机服务;请允许 `GenericAgent.exe` 和随包的 `python.exe` 通过防火墙后重启。Windows Defender Firewall may block the local loopback connection; allow `GenericAgent.exe` and the bundled `python.exe` through the firewall, then restart the app. - - Windows/Linux 为便携包,可整体移动到任意目录后继续使用。Windows/Linux packages are portable and can be moved as a whole folder. - - Windows/Linux 包内附 `readme.txt`(中英)。Windows/Linux packages include a bilingual `readme.txt`. - EOF - # Create the shared release if it does not exist yet (another OS job may win the race). - # Race-safe: the 3 OS jobs share ONE release. Retry create until the release - # actually exists (a simultaneous create from another job can fail), so the - # upload below never races a not-yet-created release. - for _ in $(seq 1 15); do - gh release view "$TAG_NAME" >/dev/null 2>&1 && break - gh release create "$TAG_NAME" --target "${{ github.sha }}" --title "$TITLE" --notes-file "${RUNNER_TEMP:-/tmp}/ga_notes.md" --prerelease 2>/dev/null || true - sleep 3 - done - gh release upload "$TAG_NAME" artifacts/windows/out/* --clobber - # ---------------------------------------------------------------------------- build-linux: name: Linux portable - if: ${{ startsWith(github.ref, 'refs/tags/') || github.event.inputs.target == 'all' || github.event.inputs.target == 'linux' }} - runs-on: ubuntu-24.04 + if: ${{ (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/desktop-portable-')) || (github.event_name == 'workflow_dispatch' && (github.event.inputs.target == 'all' || github.event.inputs.target == 'linux')) }} + runs-on: ubuntu-22.04 + permissions: + contents: read steps: - name: Checkout repository - uses: actions/checkout@v5 + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: - node-version: 20 + node-version: ${{ env.NODE_VERSION }} - name: Set up Rust - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable action snapshot + with: + toolchain: ${{ env.RUST_TOOLCHAIN }} - name: Cache Rust build - uses: Swatinem/rust-cache@v2 + uses: Swatinem/rust-cache@63fed3e2fecf6f7b51dc6f043341b79ef82a9ae7 # v2.9.2 with: + # Keep registry/git downloads, but never restore binaries built on a newer glibc image. + prefix-key: "v1-rust-release-ubuntu-22.04-glibc-2.35" workspaces: frontends/desktop/src-tauri -> target + cache-targets: "false" + cache-bin: "false" - name: Install Tauri Linux dependencies run: | @@ -274,11 +302,21 @@ jobs: libgtk-3-dev \ libayatana-appindicator3-dev \ librsvg2-dev \ - patchelf + patchelf \ + binutils \ + file \ + xvfb - name: Install desktop dependencies working-directory: frontends/desktop - run: npm install + run: | + npm install --package-lock=false + node -e "const v=require('./node_modules/@tauri-apps/cli/package.json').version; if(v!=='2.11.4') throw new Error('unexpected Tauri CLI '+v)" + test ! -e package-lock.json + + - name: Verify tracked compiled renderer bytes + working-directory: frontends/desktop + run: npm run test:dist - name: Build Linux AppImage working-directory: frontends/desktop @@ -286,10 +324,23 @@ jobs: - name: Assemble self-contained portable bundle shell: bash - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | set -euo pipefail + + purge_runtime_bytecode() { + local runtime_root="$1" + find "$runtime_root" -type d -name '__pycache__' -prune -exec rm -rf {} + + find "$runtime_root" -type f \( -name '*.pyc' -o -name '*.pyo' \) -delete + if find "$runtime_root" -type d -name '__pycache__' -print -quit | grep -q .; then + echo "Python bytecode cache directory remains in packaged runtime: $runtime_root" >&2 + return 1 + fi + if find "$runtime_root" -type f \( -name '*.pyc' -o -name '*.pyo' \) -print -quit | grep -q .; then + echo "Python bytecode remains in packaged runtime: $runtime_root" >&2 + return 1 + fi + } + APPIMAGE_SRC="$(find frontends/desktop/src-tauri/target/release/bundle/appimage -maxdepth 1 -type f -name '*.AppImage' | head -n 1)" [[ -n "$APPIMAGE_SRC" ]] || { echo "No AppImage found" >&2; exit 1; } @@ -303,35 +354,53 @@ jobs: # Icon for the generated .desktop launcher (Icon= needs a real image file on Linux). cp frontends/desktop/src-tauri/icons/icon.png "$PKG/GenericAgent.png" cp frontends/desktop/packaging/scripts/linux/install_linux.sh "$RUNTIME/install_linux.sh" + cp frontends/desktop/packaging/scripts/merge_desktop_settings.py "$RUNTIME/merge_desktop_settings.py" chmod +x "$RUNTIME/install_linux.sh" # Uninstaller: top-level entry next to the AppImage. cp frontends/desktop/packaging/scripts/linux/uninstall.sh "$PKG/uninstall.sh" chmod +x "$PKG/uninstall.sh" - # Embedded Python (python-build-standalone, linux x86_64, 3.12 install_only). - PBS_URL="$(curl -fsSL -H "Authorization: Bearer $GH_TOKEN" https://api.github.com/repos/astral-sh/python-build-standalone/releases/latest \ - | grep -o '"browser_download_url": *"[^"]*"' \ - | grep 'cpython-3\.12\.[0-9].*x86_64-unknown-linux-gnu-install_only\.tar\.gz' \ - | head -1 | sed -E 's/.*"(https[^"]+)"/\1/')" - [[ -n "$PBS_URL" ]] || { echo "Could not resolve python-build-standalone download URL" >&2; exit 1; } + # Fixed python-build-standalone Linux x86_64 archive. + PBS_URL="https://github.com/astral-sh/python-build-standalone/releases/download/${PBS_RELEASE}/cpython-${PBS_PYTHON_VERSION}%2B${PBS_RELEASE}-x86_64-unknown-linux-gnu-install_only.tar.gz" + PBS_SHA256="3297691ae34f75fed81ac424e040145fccb0bafe8e581cd5cadbddfa1c0766c0" + PBS_ARCHIVE="${RUNNER_TEMP}/pbs-linux-x86_64.tar.gz" echo "Python build-standalone: $PBS_URL" - curl -fsSL -o /tmp/pbs.tar.gz "$PBS_URL" - tar -xzf /tmp/pbs.tar.gz -C "$RUNTIME" # extracts a 'python/' dir + curl --proto '=https' --tlsv1.2 --fail --location --retry 3 --output "$PBS_ARCHIVE" "$PBS_URL" + printf '%s %s\n' "$PBS_SHA256" "$PBS_ARCHIVE" | sha256sum --check --strict - + tar -xzf "$PBS_ARCHIVE" -C "$RUNTIME" # extracts a 'python/' dir PY="$RUNTIME/python/bin/python3" - "$PY" --version + PYTHONDONTWRITEBYTECODE=1 "$PY" -c 'import platform, sys; assert sys.version_info[:3] == (3, 12, 14); assert platform.machine() == "x86_64"; print(sys.version)' - # Offline wheels (native linux wheels for the embedded python) + # Offline binary-only wheels. requirements.txt pins direct and transitive versions. mkdir -p "$RUNTIME/wheels" - "$PY" -m pip download --dest "$RUNTIME/wheels" \ - "requests>=2.28" "beautifulsoup4>=4.12" "bottle>=0.12" "simple-websocket-server>=0.4" "aiohttp>=3.9" psutil \ - fastapi uvicorn websockets pydantic setuptools wheel + cp frontends/desktop/packaging/python-runtime-requirements.txt "$RUNTIME/wheels/requirements.txt" + PYTHONDONTWRITEBYTECODE=1 "$PY" -m pip download --only-binary=:all: --dest "$RUNTIME/wheels" \ + --requirement "$RUNTIME/wheels/requirements.txt" # Runtime source (project root minus heavy/dev/build dirs) mkdir -p "$RUNTIME/app" tar \ --exclude='./.git' --exclude='./.github' \ + --exclude='./frontends/tests' \ --exclude='./frontends/desktop/src-tauri' \ + --exclude='./frontends/desktop/src' \ + --exclude='./frontends/desktop/public' \ + --exclude='./frontends/desktop/scripts' \ + --exclude='./frontends/desktop/e2e' \ + --exclude='./frontends/desktop/tests' \ + --exclude='./frontends/desktop/testing' \ + --exclude='./frontends/desktop/spec' \ --exclude='./frontends/desktop/node_modules' \ + --exclude='./frontends/desktop/dist' \ + --exclude='./frontends/desktop/DESIGN.md' \ + --exclude='./frontends/desktop/package.json' \ + --exclude='./frontends/desktop/package-lock.json' \ + --exclude='./frontends/desktop/.npmrc' \ + --exclude='./frontends/desktop/index.html' \ + --exclude='./frontends/desktop/loading.html' \ + --exclude='./frontends/desktop/setup.html' \ + --exclude='./frontends/desktop/tsconfig*.json' \ + --exclude='./frontends/desktop/vite.config.ts' \ --exclude='./frontends/desktop/packaging' --exclude='./docs' \ --exclude='./assets/demo' --exclude='./assets/images' \ --exclude='./assets/GenericAgent_Technical_Report.pdf' \ @@ -343,9 +412,13 @@ jobs: test -f "$RUNTIME/app/agentmain.py" test -f "$RUNTIME/app/frontends/desktop_bridge.py" test -f "$RUNTIME/app/frontends/desktop/static/index.html" + test ! -e "$RUNTIME/app/frontends/desktop/dist" + test ! -e "$RUNTIME/app/frontends/desktop/src" + test ! -e "$RUNTIME/app/frontends/desktop/public" + test ! -e "$RUNTIME/app/frontends/desktop/package-lock.json" + test ! -e "$RUNTIME/app/frontends/desktop/node_modules" - # Drop python debug/cache bits to slim the package - find "$RUNTIME/python" -name '__pycache__' -type d -prune -exec rm -rf {} + 2>/dev/null || true + purge_runtime_bytecode "$RUNTIME" cat > "$PKG/readme.txt" <<'EOF' ================ 中文 ================ @@ -354,7 +427,7 @@ jobs: 无需安装 Python、无需联网装依赖、无需源码仓库——全部已内置。 前置条件 - - Linux x86_64(glibc,常见发行版即可) + - Linux x86_64,glibc 2.35 或更高版本(如 Ubuntu 22.04、Debian 12) - 桌面环境 + FUSE(运行 AppImage 所需;多数发行版自带) 使用 @@ -362,12 +435,12 @@ jobs: 2. 给 AppImage 执行权限并运行: chmod +x GenericAgent.AppImage ./GenericAgent.AppImage - 3. 首次启动会自动离线准备运行环境(建虚拟环境、装依赖),界面显示进度,完成后进入主界面。 + 3. 首次启动会离线校验并补齐随包 Python 运行时依赖,界面显示进度,完成后进入主界面。 4. 之后启动直接秒进。 说明 - 想真正对话,仍需在程序里配置模型 / API Key。 - - 首次准备完成后不要移动本文件夹;若已移动,删除 runtime/app/.venv 后重新启动即可重建。 + - 可整体移动本文件夹;重启后会自动刷新路径。若需强制重新准备,请删除 runtime/.prepared 后重启。 - runtime/ 是内置运行环境与源码,正常使用无需改动。 ================ English ================ @@ -376,7 +449,7 @@ jobs: No Python install, no internet for dependencies, no source checkout — everything is bundled. Requirements - - Linux x86_64 (glibc; common distributions work) + - Linux x86_64 with glibc 2.35 or newer (for example Ubuntu 22.04 or Debian 12) - A desktop environment + FUSE (required to run the AppImage; preinstalled on most distros) Usage @@ -384,13 +457,14 @@ jobs: 2. Make the AppImage executable and run it: chmod +x GenericAgent.AppImage ./GenericAgent.AppImage - 3. The first launch prepares the runtime offline (creates a venv, installs deps) with a + 3. The first launch verifies and completes the bundled Python runtime offline with a progress UI, then opens the main window. 4. Subsequent launches start instantly. Notes - To actually chat, configure a model / API key inside the app. - - Do not move this folder after the first setup; if you did, delete runtime/app/.venv and relaunch to rebuild. + - You may move the whole folder; relaunching refreshes its saved paths. To force a new + preparation pass, delete runtime/.prepared and relaunch. - runtime/ holds the bundled runtime and source; no need to touch it. EOF sed -i 's/^ //' "$PKG/readme.txt" @@ -404,8 +478,63 @@ jobs: head -40 /tmp/pkglist.txt ls -lh artifacts/linux/out + # Exercise the exact archived candidate on the oldest supported builder. + SMOKE_ROOT="${RUNNER_TEMP}/ga-linux-package-smoke" + mkdir -p "$SMOKE_ROOT" + tar -xzf artifacts/linux/out/GenericAgent-Desktop-Linux-Portable.tar.gz -C "$SMOKE_ROOT" + SMOKE_PACKAGE="$SMOKE_ROOT/GenericAgent-Desktop-Linux-Portable" + APPIMAGE_ABS="$(realpath "$SMOKE_PACKAGE/GenericAgent.AppImage")" + APPIMAGE_SCAN="$SMOKE_ROOT/appimage-scan" + mkdir -p "$APPIMAGE_SCAN" + (cd "$APPIMAGE_SCAN" && "$APPIMAGE_ABS" --appimage-extract >/dev/null) + MAX_GLIBC="" + ELF_COUNT=0 + while IFS= read -r -d '' candidate; do + file -b "$candidate" | grep -q '^ELF' || continue + ELF_COUNT=$((ELF_COUNT + 1)) + candidate_max="$(readelf --version-info "$candidate" 2>/dev/null \ + | sed -n 's/.*Name: GLIBC_\([0-9][0-9.]*\).*/\1/p' \ + | sort -V | tail -n 1)" + [[ -n "$candidate_max" ]] || continue + if [[ -z "$MAX_GLIBC" \ + || "$(printf '%s\n%s\n' "$MAX_GLIBC" "$candidate_max" | sort -V | tail -n 1)" == "$candidate_max" ]]; then + MAX_GLIBC="$candidate_max" + fi + done < <(find "$SMOKE_PACKAGE" "$APPIMAGE_SCAN/squashfs-root" -type f -print0) + [[ "$ELF_COUNT" -gt 0 && -n "$MAX_GLIBC" ]] \ + || { echo "No GLIBC symbol versions found in final Linux package ELFs" >&2; exit 1; } + [[ "$(printf '%s\n%s\n' "$MAX_GLIBC" '2.35' | sort -V | tail -n 1)" == "2.35" ]] \ + || { echo "Final package requires GLIBC_$MAX_GLIBC; maximum allowed is GLIBC_2.35" >&2; exit 1; } + echo "Scanned $ELF_COUNT final package ELFs; maximum symbol is GLIBC_$MAX_GLIBC" + APPIMAGE_EXTRACT_AND_RUN=1 WEBKIT_DISABLE_COMPOSITING_MODE=1 \ + xvfb-run -a "$SMOKE_PACKAGE/GenericAgent.AppImage" >"$SMOKE_ROOT/app.log" 2>&1 & + SMOKE_PID=$! + cleanup_smoke() { + kill "$SMOKE_PID" 2>/dev/null || true + wait "$SMOKE_PID" 2>/dev/null || true + } + trap cleanup_smoke EXIT + IDENTITY="" + for _ in $(seq 1 120); do + IDENTITY="$(curl --fail --silent --max-time 1 http://127.0.0.1:14168/services/identity || true)" + [[ -n "$IDENTITY" ]] && break + sleep 1 + done + [[ -n "$IDENTITY" ]] || { cat "$SMOKE_ROOT/app.log" >&2; exit 1; } + EXPECTED_APP_DIR="$SMOKE_PACKAGE/runtime/app/frontends" \ + IDENTITY="$IDENTITY" python3 - <<'PY' + import json, os, pathlib + identity = json.loads(os.environ["IDENTITY"]) + actual = pathlib.Path(identity["app_dir"]).resolve() + expected = pathlib.Path(os.environ["EXPECTED_APP_DIR"]).resolve() + assert actual == expected, (actual, expected) + PY + curl --fail --silent --max-time 3 -X POST http://127.0.0.1:14168/services/bridge/exit >/dev/null + cleanup_smoke + trap - EXIT + - name: Upload workflow artifact - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: GenericAgent-Desktop-Linux-Portable-${{ github.run_number }} path: | @@ -413,132 +542,146 @@ jobs: artifacts/linux/out/SHA256SUMS-linux.txt if-no-files-found: error - - name: Publish into unified Release (tag push only) - if: ${{ startsWith(github.ref, 'refs/tags/') }} - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - shell: bash - run: | - set -euo pipefail - TAG_NAME="${{ github.ref_name }}" - TITLE="GenericAgent Desktop ${TAG_NAME}" - cat > "${RUNNER_TEMP:-/tmp}/ga_notes.md" <<'EOF' - GenericAgent Desktop 桌面版 / Desktop - - 无需自行安装 Python、无需联网安装依赖、无需源码;首次启动会自动准备内置运行环境。 - No separate Python install, no internet for dependencies, no source checkout required; the bundled runtime is prepared on first launch. - - ## 安装方法 / Installation - - Windows: 下载 `GenericAgent-Desktop-Windows-Portable.zip`,解压后双击 `GenericAgent.exe` 启动。卸载时先退出应用,再双击包内 `uninstall.bat`,最后删除整个解压目录。 - Download `GenericAgent-Desktop-Windows-Portable.zip`, extract it, then double-click `GenericAgent.exe`. To uninstall, quit the app, double-click `uninstall.bat`, then delete the extracted folder. - - Linux: 下载 `GenericAgent-Desktop-Linux-Portable.tar.gz`,解压后执行 `chmod +x GenericAgent.AppImage`,再运行 `./GenericAgent.AppImage`。卸载时先退出应用,再运行 `./uninstall.sh`,最后删除整个解压目录。 - Download `GenericAgent-Desktop-Linux-Portable.tar.gz`, extract it, run `chmod +x GenericAgent.AppImage`, then launch `./GenericAgent.AppImage`. To uninstall, quit the app, run `./uninstall.sh`, then delete the extracted folder. - - macOS: 下载 `GenericAgent-Desktop-macOS.dmg`,双击打开 DMG,把 `GenericAgent.app` 拖入 `Applications`,之后在“应用程序 / Applications”中启动。若出现“无法验证开发者”等提示,先双击 DMG 内的 `open_anyway.command`,再启动。卸载时先退出应用,再从 Applications 删除 `GenericAgent.app`。 - Download `GenericAgent-Desktop-macOS.dmg`, open it, drag `GenericAgent.app` to `Applications`, then launch it from Applications. If macOS says the developer cannot be verified, double-click `open_anyway.command` inside the DMG first, then launch again. To uninstall, quit the app, then delete `GenericAgent.app` from Applications. - - ## 首次启动 / First launch - 首次启动会自动离线准备运行环境(安装依赖),有进度条,完成后进入主界面;之后启动会更快。 - The first launch prepares the runtime offline (installs deps) with a progress bar, then opens the main window; later launches are faster. - - ## 说明 / Notes - - 想真正对话需在程序内配置模型 / API Key。Configure a model / API key in-app to start chatting. - - Windows Defender 防火墙可能会拦截 `127.0.0.1` / `localhost` 回环连接,导致程序无法启动或连接本机服务;请允许 `GenericAgent.exe` 和随包的 `python.exe` 通过防火墙后重启。Windows Defender Firewall may block the local loopback connection; allow `GenericAgent.exe` and the bundled `python.exe` through the firewall, then restart the app. - - Windows/Linux 为便携包,可整体移动到任意目录后继续使用。Windows/Linux packages are portable and can be moved as a whole folder. - - Windows/Linux 包内附 `readme.txt`(中英)。Windows/Linux packages include a bilingual `readme.txt`. - EOF - # Race-safe: the 3 OS jobs share ONE release. Retry create until the release - # actually exists (a simultaneous create from another job can fail), so the - # upload below never races a not-yet-created release. - for _ in $(seq 1 15); do - gh release view "$TAG_NAME" >/dev/null 2>&1 && break - gh release create "$TAG_NAME" --target "${{ github.sha }}" --title "$TITLE" --notes-file "${RUNNER_TEMP:-/tmp}/ga_notes.md" --prerelease 2>/dev/null || true - sleep 3 - done - gh release upload "$TAG_NAME" artifacts/linux/out/* --clobber - # ---------------------------------------------------------------------------- build-macos: - name: macOS DMG - if: ${{ startsWith(github.ref, 'refs/tags/') || github.event.inputs.target == 'all' || github.event.inputs.target == 'macos' }} - runs-on: macos-latest + name: macOS arm64 DMG + if: ${{ (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/desktop-portable-')) || (github.event_name == 'workflow_dispatch' && (github.event.inputs.target == 'all' || github.event.inputs.target == 'macos')) }} + runs-on: macos-15 + permissions: + contents: read steps: - name: Checkout repository - uses: actions/checkout@v5 + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: - node-version: 20 + node-version: ${{ env.NODE_VERSION }} - name: Set up Rust - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable action snapshot + with: + toolchain: ${{ env.RUST_TOOLCHAIN }} - name: Cache Rust build - uses: Swatinem/rust-cache@v2 + uses: Swatinem/rust-cache@63fed3e2fecf6f7b51dc6f043341b79ef82a9ae7 # v2.9.2 with: workspaces: frontends/desktop/src-tauri -> target - name: Install desktop dependencies working-directory: frontends/desktop - run: npm install + run: | + npm install --package-lock=false + node -e "const v=require('./node_modules/@tauri-apps/cli/package.json').version; if(v!=='2.11.4') throw new Error('unexpected Tauri CLI '+v)" + test ! -e package-lock.json + + - name: Set up Python DMG tooling runtime + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + with: + python-version: ${{ env.MACOS_PACKAGING_PYTHON_VERSION }} + + - name: Install Python packaging tools + run: >- + python3 -m pip install --require-hashes --only-binary=:all: + --requirement frontends/desktop/packaging/dmg-build-requirements.txt + + - name: Assert macOS runner architecture + run: test "$(uname -m)" = arm64 + + - name: Verify tracked compiled renderer bytes + working-directory: frontends/desktop + run: npm run test:dist - name: Build macOS .app working-directory: frontends/desktop run: npm run tauri build -- --bundles app - - name: Assemble self-contained portable bundle and DMG app + - name: Assemble self-contained DMG app shell: bash - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | set -euo pipefail + + purge_runtime_bytecode() { + local runtime_root="$1" + find "$runtime_root" -type d -name '__pycache__' -prune -exec rm -rf {} + + find "$runtime_root" -type f \( -name '*.pyc' -o -name '*.pyo' \) -delete + if find "$runtime_root" -type d -name '__pycache__' -print -quit | grep -q .; then + echo "Python bytecode cache directory remains in packaged runtime: $runtime_root" >&2 + return 1 + fi + if find "$runtime_root" -type f \( -name '*.pyc' -o -name '*.pyo' \) -print -quit | grep -q .; then + echo "Python bytecode remains in packaged runtime: $runtime_root" >&2 + return 1 + fi + } + APP_SRC="$(find frontends/desktop/src-tauri/target/release/bundle/macos -maxdepth 1 -name '*.app' -type d | head -n 1)" [[ -n "$APP_SRC" ]] || { echo "No .app found" >&2; exit 1; } - # Build one runtime/ tree, then reuse it for both macOS deliverables: - # 1) Portable zip: GenericAgent.app + runtime/ + helper scripts. - # 2) Standard DMG: GenericAgent.app with runtime embedded in Contents/Resources/runtime. + # Build one runtime tree and embed it only in the final DMG application. RUNTIME_SRC="artifacts/macos/runtime-src" mkdir -p "$RUNTIME_SRC" cp frontends/desktop/packaging/scripts/macos/install_macos.sh "$RUNTIME_SRC/install_macos.sh" + cp frontends/desktop/packaging/scripts/merge_desktop_settings.py "$RUNTIME_SRC/merge_desktop_settings.py" chmod +x "$RUNTIME_SRC/install_macos.sh" - # Embedded Python (python-build-standalone, macOS, 3.12 install_only; aarch64 preferred). - PBS_URL="$(python3 - <<'PY' - import json, os, urllib.request - api='https://api.github.com/repos/astral-sh/python-build-standalone/releases/latest' - req=urllib.request.Request(api) - token=os.environ.get('GH_TOKEN') - if token: - req.add_header('Authorization', 'Bearer ' + token) - data=json.load(urllib.request.urlopen(req, timeout=60)) - assets=data.get('assets', []) - for arch in ('aarch64-apple-darwin', 'x86_64-apple-darwin'): - for a in assets: - name=a.get('name','') - if 'cpython-3.12' in name and arch in name and name.endswith('install_only.tar.gz') and 'stripped' not in name: - print(a['browser_download_url']); raise SystemExit - raise SystemExit('No suitable python-build-standalone macOS asset found') - PY - )" + # Fixed python-build-standalone macOS arm64 archive. + PBS_URL="https://github.com/astral-sh/python-build-standalone/releases/download/${PBS_RELEASE}/cpython-${PBS_PYTHON_VERSION}%2B${PBS_RELEASE}-aarch64-apple-darwin-install_only.tar.gz" + PBS_SHA256="4572133a5542f306b9bdb155da5800f9e38950cd0a98d469b832ce256fe299ea" + PBS_ARCHIVE="${RUNNER_TEMP}/pbs-macos-aarch64.tar.gz" echo "Python build-standalone: $PBS_URL" - curl -L --fail --retry 3 -o /tmp/pbs-macos.tar.gz "$PBS_URL" - tar -xzf /tmp/pbs-macos.tar.gz -C "$RUNTIME_SRC" # extracts a 'python/' dir + curl --proto '=https' --tlsv1.2 --fail --location --retry 3 --output "$PBS_ARCHIVE" "$PBS_URL" + printf '%s %s\n' "$PBS_SHA256" "$PBS_ARCHIVE" | shasum -a 256 --check - + tar -xzf "$PBS_ARCHIVE" -C "$RUNTIME_SRC" # extracts a 'python/' dir PY="$RUNTIME_SRC/python/bin/python3" - "$PY" --version + PYTHONDONTWRITEBYTECODE=1 "$PY" -c 'import platform, sys; assert sys.version_info[:3] == (3, 12, 14); assert platform.machine() == "arm64"; print(sys.version)' - # Offline wheels + # Offline binary-only wheels. requirements.txt pins direct and transitive versions. mkdir -p "$RUNTIME_SRC/wheels" - "$PY" -m pip download --dest "$RUNTIME_SRC/wheels" \ - "requests>=2.28" "beautifulsoup4>=4.12" "bottle>=0.12" "simple-websocket-server>=0.4" "aiohttp>=3.9" psutil \ - fastapi uvicorn websockets pydantic setuptools wheel + cp frontends/desktop/packaging/python-runtime-requirements.txt "$RUNTIME_SRC/wheels/requirements.txt" + PYTHONDONTWRITEBYTECODE=1 "$PY" -m pip download --only-binary=:all: --dest "$RUNTIME_SRC/wheels" \ + --requirement "$RUNTIME_SRC/wheels/requirements.txt" + + # macOS applications must be immutable at first launch. Install from the downloaded + # wheelhouse before the runtime enters the signed .app, then carry a durable marker. + # The binary-only offline repair path needs neither setuptools nor wheel. Remove any + # copies shipped in the base interpreter; bytecode writes are disabled at runtime too. + PYTHONDONTWRITEBYTECODE=1 "$PY" -m pip install --no-compile --no-index --find-links "$RUNTIME_SRC/wheels" \ + --requirement "$RUNTIME_SRC/wheels/requirements.txt" + PYTHONDONTWRITEBYTECODE=1 "$PY" -m pip uninstall --yes setuptools wheel + PYTHONDONTWRITEBYTECODE=1 "$PY" -m pip check + + PYTHONDONTWRITEBYTECODE=1 "$PY" -c 'import aiohttp, fastapi, importlib.util, pydantic, uvicorn, websockets; assert all(importlib.util.find_spec(name) is None for name in ("setuptools", "wheel", "pkg_resources"))' + purge_runtime_bytecode "$RUNTIME_SRC" + printf 'ok\n' > "$RUNTIME_SRC/.prepared" + test -s "$RUNTIME_SRC/.prepared" # Runtime source (project root minus heavy/dev/build dirs) — bsdtar exclude syntax. mkdir -p "$RUNTIME_SRC/app" tar \ --exclude='.git' --exclude='.github' \ + --exclude='frontends/tests' \ --exclude='frontends/desktop/src-tauri' \ + --exclude='frontends/desktop/src' \ + --exclude='frontends/desktop/public' \ + --exclude='frontends/desktop/scripts' \ + --exclude='frontends/desktop/e2e' \ + --exclude='frontends/desktop/tests' \ + --exclude='frontends/desktop/testing' \ + --exclude='frontends/desktop/spec' \ --exclude='frontends/desktop/node_modules' \ + --exclude='frontends/desktop/dist' \ + --exclude='frontends/desktop/DESIGN.md' \ + --exclude='frontends/desktop/package.json' \ + --exclude='frontends/desktop/package-lock.json' \ + --exclude='frontends/desktop/.npmrc' \ + --exclude='frontends/desktop/index.html' \ + --exclude='frontends/desktop/loading.html' \ + --exclude='frontends/desktop/setup.html' \ + --exclude='frontends/desktop/tsconfig*.json' \ + --exclude='frontends/desktop/vite.config.ts' \ --exclude='frontends/desktop/packaging' --exclude='docs' \ --exclude='assets/demo' --exclude='assets/images' \ --exclude='assets/GenericAgent_Technical_Report.pdf' \ @@ -550,172 +693,188 @@ jobs: test -f "$RUNTIME_SRC/app/agentmain.py" test -f "$RUNTIME_SRC/app/frontends/desktop_bridge.py" test -f "$RUNTIME_SRC/app/frontends/desktop/static/index.html" + test ! -e "$RUNTIME_SRC/app/frontends/desktop/dist" + test ! -e "$RUNTIME_SRC/app/frontends/desktop/src" + test ! -e "$RUNTIME_SRC/app/frontends/desktop/public" + test ! -e "$RUNTIME_SRC/app/frontends/desktop/package-lock.json" + test ! -e "$RUNTIME_SRC/app/frontends/desktop/node_modules" - PORTABLE="artifacts/macos/GenericAgent-Desktop-macOS-Portable" DMG_STAGE="artifacts/macos/dmg-stage" DMG_APP="$DMG_STAGE/GenericAgent.app" - mkdir -p "$PORTABLE" "$DMG_STAGE" - - # Portable zip: keep the existing release shape and helper scripts. - ditto "$APP_SRC" "$PORTABLE/GenericAgent.app" - ditto "$RUNTIME_SRC" "$PORTABLE/runtime" - cp frontends/desktop/packaging/scripts/macos/uninstall.command "$PORTABLE/uninstall.command" - chmod +x "$PORTABLE/uninstall.command" - cat > "$PORTABLE/Start GenericAgent.command" <<'EOF' - #!/bin/bash - DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - xattr -cr "$DIR/GenericAgent.app" 2>/dev/null || true - open "$DIR/GenericAgent.app" - EOF - chmod +x "$PORTABLE/Start GenericAgent.command" - - cat > "$PORTABLE/readme.txt" <<'EOF' - ================ 中文 ================ - GenericAgent Desktop — macOS 便携版(自包含) - - 无需安装 Python、无需联网装依赖、无需源码仓库——全部已内置。 - - 使用 - 推荐:双击 “Start GenericAgent.command” 启动。也可直接双击 GenericAgent.app。 - 请保持目录结构不变:GenericAgent.app 与 runtime/ 必须在同一目录下。 - - 卸载 - 双击 uninstall.command,或退出程序后删除整个便携文件夹。 - - ================ English ================ - GenericAgent Desktop — macOS Portable (self-contained) - - No Python install, no internet for dependencies, no source checkout — everything is bundled. + mkdir -p "$DMG_STAGE" - Usage - Recommended: double-click "Start GenericAgent.command". You can also double-click GenericAgent.app. - Keep the folder layout intact: GenericAgent.app and runtime/ must stay in the same directory. - - Uninstall - Double-click uninstall.command, or quit the app and delete the whole portable folder. - EOF - sed -i '' 's/^ //' "$PORTABLE/readme.txt" - - codesign --force --deep --sign - "$PORTABLE/GenericAgent.app" - codesign --verify --deep --strict "$PORTABLE/GenericAgent.app" || true - - # Standard DMG: GenericAgent.app + Applications alias + first-launch helper/guide. + # Standard DMG: GenericAgent.app + Applications alias. The post-build + # repackager below writes the curated two-icon Finder layout. ditto "$APP_SRC" "$DMG_APP" mkdir -p "$DMG_APP/Contents/Resources" ditto "$RUNTIME_SRC" "$DMG_APP/Contents/Resources/runtime" + test -s "$DMG_APP/Contents/Resources/runtime/.prepared" + DMG_RUNTIME="$DMG_APP/Contents/Resources/runtime" + PYTHONDONTWRITEBYTECODE=1 "$DMG_RUNTIME/python/bin/python3" \ + -c 'import aiohttp, fastapi, pydantic, uvicorn, websockets' + purge_runtime_bytecode "$DMG_RUNTIME" + # Ad-hoc signing only: this is not Developer ID signing or notarization. codesign --force --deep --sign - "$DMG_APP" - codesign --verify --deep --strict "$DMG_APP" || true + codesign --verify --deep --strict "$DMG_APP" ln -s /Applications "$DMG_STAGE/Applications" - cat > "$DMG_STAGE/open_anyway.command" <<'EOF' - #!/bin/bash - set -e - DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - TARGET="/Applications/GenericAgent.app" - if [[ ! -d "$TARGET" ]]; then - TARGET="$DIR/GenericAgent.app" - fi - xattr -cr "$TARGET" 2>/dev/null || true - osascript -e 'display dialog "GenericAgent 已处理完成。请将 GenericAgent.app 拖入 Applications 后,从 Applications 中启动;如果已经安装,可以直接重新打开。" buttons {"OK"} default button "OK"' >/dev/null 2>&1 || true - EOF - chmod +x "$DMG_STAGE/open_anyway.command" - - cat > "$DMG_STAGE/readme.txt" <<'EOF' - ================ 中文 ================ - GenericAgent Desktop — macOS DMG 安装版 - - 安装 - 1. 双击打开 GenericAgent-Desktop-macOS.dmg。 - 2. 将 GenericAgent.app 拖入 Applications。 - 3. 打开“应用程序 / Applications”,双击 GenericAgent.app 启动。 - - 若出现“无法验证开发者”“Apple 无法检查其是否包含恶意软件”或无法打开: - 1. 回到 DMG 窗口。 - 2. 双击“open_anyway.command”。 - 3. 再从 Applications 中打开 GenericAgent.app。 - 也可以右键 GenericAgent.app,选择“打开”。 - - 卸载 - 先退出 GenericAgent,再从 Applications 删除 GenericAgent.app。 - - ================ English ================ - GenericAgent Desktop — macOS DMG installer - - Installation - 1. Open GenericAgent-Desktop-macOS.dmg. - 2. Drag GenericAgent.app to Applications. - 3. Open Applications and launch GenericAgent.app. - - If macOS says the developer cannot be verified, Apple cannot check it for malicious software, or the app cannot be opened: - 1. Go back to the DMG window. - 2. Double-click "open_anyway.command". - 3. Launch GenericAgent.app from Applications again. - You can also right-click GenericAgent.app and choose Open. - - Uninstall - Quit GenericAgent, then delete GenericAgent.app from Applications. - EOF - sed -i '' 's/^ //' "$DMG_STAGE/readme.txt" - mkdir -p artifacts/macos/out hdiutil create \ -volname "GenericAgent Desktop" \ -srcfolder "$DMG_STAGE" \ -ov \ -format UDZO \ - "artifacts/macos/out/GenericAgent-Desktop-macOS.dmg" - shasum -a 256 "artifacts/macos/out/GenericAgent-Desktop-macOS.dmg" \ - > "artifacts/macos/out/GenericAgent-Desktop-macOS.dmg.sha256" + "artifacts/macos/out/GenericAgent-Desktop-macOS-aarch64.dmg" + + # Restore the intentionally minimal Finder presentation: only the app + # and Applications shortcut, with the established window/icon layout. + bash frontends/desktop/scripts/post-dmg.sh "artifacts/macos/out/GenericAgent-Desktop-macOS-aarch64.dmg" + + ( + cd artifacts/macos/out + shasum -a 256 "GenericAgent-Desktop-macOS-aarch64.dmg" \ + > "GenericAgent-Desktop-macOS-aarch64.dmg.sha256" + ) echo "DMG stage tree:" find "$DMG_STAGE" -maxdepth 2 -print | sort - name: Upload workflow artifact - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: - name: GenericAgent-Desktop-macOS-DMG-${{ github.run_number }} - path: artifacts/macos/out/* + name: GenericAgent-Desktop-macOS-aarch64-DMG-${{ github.run_number }} + path: | + artifacts/macos/out/GenericAgent-Desktop-macOS-aarch64.dmg + artifacts/macos/out/GenericAgent-Desktop-macOS-aarch64.dmg.sha256 if-no-files-found: error - - name: Publish into unified Release (tag push only) - if: ${{ startsWith(github.ref, 'refs/tags/') }} + # ---------------------------------------------------------------------------- + publish-release: + name: Publish one atomic prerelease + needs: [build-windows, build-linux, build-macos] + if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/desktop-portable-') && needs.build-windows.result == 'success' && needs.build-linux.result == 'success' && needs.build-macos.result == 'success' }} + runs-on: ubuntu-24.04 + permissions: + contents: write + steps: + - name: Download Windows candidate + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + with: + name: GenericAgent-Desktop-Windows-Portable-${{ github.run_number }} + path: ${{ runner.temp }}/release-assets + + - name: Download Linux candidate + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + with: + name: GenericAgent-Desktop-Linux-Portable-${{ github.run_number }} + path: ${{ runner.temp }}/release-assets + + - name: Download macOS arm64 candidate + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + with: + name: GenericAgent-Desktop-macOS-aarch64-DMG-${{ github.run_number }} + path: ${{ runner.temp }}/release-assets + + - name: Validate six assets and publish prerelease env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG_NAME: ${{ github.ref_name }} + TARGET_SHA: ${{ github.sha }} shell: bash run: | set -euo pipefail - TAG_NAME="${{ github.ref_name }}" + + ASSET_DIR="${RUNNER_TEMP}/release-assets" + EXPECTED=( + GenericAgent-Desktop-Linux-Portable.tar.gz + GenericAgent-Desktop-Windows-Portable.zip + GenericAgent-Desktop-macOS-aarch64.dmg + GenericAgent-Desktop-macOS-aarch64.dmg.sha256 + SHA256SUMS-linux.txt + SHA256SUMS-windows.txt + ) + + if find "$ASSET_DIR" -mindepth 1 -maxdepth 1 ! -type f -print -quit | grep -q .; then + echo "Release staging contains a non-regular entry" >&2 + find "$ASSET_DIR" -mindepth 1 -maxdepth 1 -print >&2 + exit 1 + fi + mapfile -t ACTUAL < <(find "$ASSET_DIR" -mindepth 1 -maxdepth 1 -type f -printf '%f\n' | LC_ALL=C sort) + if ! diff -u <(printf '%s\n' "${EXPECTED[@]}") <(printf '%s\n' "${ACTUAL[@]}"); then + echo "Release staging must contain exactly the six expected files" >&2 + exit 1 + fi + for filename in "${EXPECTED[@]}"; do + test -s "$ASSET_DIR/$filename" || { echo "Missing or empty release asset: $filename" >&2; exit 1; } + done + + verify_checksum_manifest() { + local manifest="$1" + local payload="$2" + local normalized="${RUNNER_TEMP}/${manifest}.normalized" + tr -d '\r' < "$ASSET_DIR/$manifest" > "$normalized" + awk -v expected="$payload" ' + NF == 2 && $1 ~ /^[0-9a-fA-F]{64}$/ && $2 == expected { valid += 1 } + END { exit !(NR == 1 && valid == 1) } + ' "$normalized" + (cd "$ASSET_DIR" && sha256sum --check --strict "$normalized") + } + verify_checksum_manifest SHA256SUMS-windows.txt GenericAgent-Desktop-Windows-Portable.zip + verify_checksum_manifest SHA256SUMS-linux.txt GenericAgent-Desktop-Linux-Portable.tar.gz + verify_checksum_manifest GenericAgent-Desktop-macOS-aarch64.dmg.sha256 GenericAgent-Desktop-macOS-aarch64.dmg + + [[ "$TAG_NAME" =~ ^desktop-portable-[A-Za-z0-9._-]+$ ]] \ + || { echo "Invalid release tag: $TAG_NAME" >&2; exit 1; } + [[ "$TARGET_SHA" =~ ^[0-9a-f]{40}$ ]] \ + || { echo "Invalid release target SHA" >&2; exit 1; } TITLE="GenericAgent Desktop ${TAG_NAME}" - cat > "${RUNNER_TEMP:-/tmp}/ga_notes.md" <<'EOF' + NOTES_FILE="${RUNNER_TEMP}/ga-release-notes.md" + cat > "$NOTES_FILE" <<'EOF' GenericAgent Desktop 桌面版 / Desktop - 无需自行安装 Python、无需联网安装依赖、无需源码;首次启动会自动准备内置运行环境。 - No separate Python install, no internet for dependencies, no source checkout required; the bundled runtime is prepared on first launch. + 三个平台产物来自同一提交,并在公开发布前统一验证。All three platform artifacts come from one commit and are validated before publication. ## 安装方法 / Installation - - Windows: 下载 `GenericAgent-Desktop-Windows-Portable.zip`,解压后双击 `GenericAgent.exe` 启动。卸载时先退出应用,再双击包内 `uninstall.bat`,最后删除整个解压目录。 - Download `GenericAgent-Desktop-Windows-Portable.zip`, extract it, then double-click `GenericAgent.exe`. To uninstall, quit the app, double-click `uninstall.bat`, then delete the extracted folder. - - Linux: 下载 `GenericAgent-Desktop-Linux-Portable.tar.gz`,解压后执行 `chmod +x GenericAgent.AppImage`,再运行 `./GenericAgent.AppImage`。卸载时先退出应用,再运行 `./uninstall.sh`,最后删除整个解压目录。 - Download `GenericAgent-Desktop-Linux-Portable.tar.gz`, extract it, run `chmod +x GenericAgent.AppImage`, then launch `./GenericAgent.AppImage`. To uninstall, quit the app, run `./uninstall.sh`, then delete the extracted folder. - - macOS: 下载 `GenericAgent-Desktop-macOS.dmg`,双击打开 DMG,把 `GenericAgent.app` 拖入 `Applications`,之后在“应用程序 / Applications”中启动。若出现“无法验证开发者”等提示,先双击 DMG 内的 `open_anyway.command`,再启动。卸载时先退出应用,再从 Applications 删除 `GenericAgent.app`。 - Download `GenericAgent-Desktop-macOS.dmg`, open it, drag `GenericAgent.app` to `Applications`, then launch it from Applications. If macOS says the developer cannot be verified, double-click `open_anyway.command` inside the DMG first, then launch again. To uninstall, quit the app, then delete `GenericAgent.app` from Applications. - - ## 首次启动 / First launch - 首次启动会自动离线准备运行环境(安装依赖),有进度条,完成后进入主界面;之后启动会更快。 - The first launch prepares the runtime offline (installs deps) with a progress bar, then opens the main window; later launches are faster. - - ## 说明 / Notes - - 想真正对话需在程序内配置模型 / API Key。Configure a model / API key in-app to start chatting. - - Windows Defender 防火墙可能会拦截 `127.0.0.1` / `localhost` 回环连接,导致程序无法启动或连接本机服务;请允许 `GenericAgent.exe` 和随包的 `python.exe` 通过防火墙后重启。Windows Defender Firewall may block the local loopback connection; allow `GenericAgent.exe` and the bundled `python.exe` through the firewall, then restart the app. - - Windows/Linux 为便携包,可整体移动到任意目录后继续使用。Windows/Linux packages are portable and can be moved as a whole folder. - - Windows/Linux 包内附 `readme.txt`(中英)。Windows/Linux packages include a bilingual `readme.txt`. + - Windows x64:下载 `GenericAgent-Desktop-Windows-Portable.zip`,解压后双击 `GenericAgent.exe`。卸载时运行 `uninstall.bat`,再删除解压目录。 + Windows x64: extract `GenericAgent-Desktop-Windows-Portable.zip`, then launch `GenericAgent.exe`. Run `uninstall.bat` before deleting the extracted directory. + - Linux x86_64:下载并解压 `GenericAgent-Desktop-Linux-Portable.tar.gz`,执行 `chmod +x GenericAgent.AppImage` 后运行它。卸载时运行 `uninstall.sh`,再删除解压目录。 + Linux x86_64: extract `GenericAgent-Desktop-Linux-Portable.tar.gz`, run `chmod +x GenericAgent.AppImage`, then launch it. Run `uninstall.sh` before deleting the extracted directory. + - macOS Apple silicon (arm64):打开 `GenericAgent-Desktop-macOS-aarch64.dmg`,把 `GenericAgent.app` 拖入 Applications。 + macOS Apple silicon (arm64): open `GenericAgent-Desktop-macOS-aarch64.dmg` and drag `GenericAgent.app` to Applications. + + ## 签名状态 / Signing status + Windows 便携版尚未使用代码签名证书,SmartScreen 可能显示警告;运行前请核对 `SHA256SUMS-windows.txt`。 + The Windows portable build is not code-signed, so SmartScreen may warn; verify `SHA256SUMS-windows.txt` before running it. + + macOS 应用仅使用 ad-hoc 签名,未使用 Apple Developer ID,也未 notarize。首次打开可能需要右键选择“打开”或在“隐私与安全性”中允许。 + The macOS app is ad-hoc signed only. It is neither Developer ID signed nor notarized; first launch may require Open from the context menu or approval in Privacy & Security. + + SHA-256 清单与各产物一同发布。SHA-256 manifests are included with the artifacts. EOF - # Race-safe: the 3 OS jobs share ONE release. Retry create until the release - # actually exists (a simultaneous create from another job can fail), so the - # upload below never races a not-yet-created release. - for _ in $(seq 1 15); do - gh release view "$TAG_NAME" >/dev/null 2>&1 && break - gh release create "$TAG_NAME" --target "${{ github.sha }}" --title "$TITLE" --notes-file "${RUNNER_TEMP:-/tmp}/ga_notes.md" --prerelease 2>/dev/null || true - sleep 3 + sed -i 's/^ //' "$NOTES_FILE" + + if gh release view "$TAG_NAME" >/dev/null 2>&1; then + echo "A release already exists for $TAG_NAME; refusing to overwrite it" >&2 + exit 1 + fi + + ASSETS=() + for filename in "${EXPECTED[@]}"; do + ASSETS+=("$ASSET_DIR/$filename") done - gh release upload "$TAG_NAME" artifacts/macos/out/* --clobber + # Keep the release invisible while all assets upload; only the final edit publishes it. + gh release create "$TAG_NAME" "${ASSETS[@]}" \ + --target "$TARGET_SHA" \ + --title "$TITLE" \ + --notes-file "$NOTES_FILE" \ + --draft \ + --prerelease + + mapfile -t REMOTE_ASSETS < <(gh release view "$TAG_NAME" --json assets --jq '.assets[].name' | LC_ALL=C sort) + diff -u <(printf '%s\n' "${EXPECTED[@]}") <(printf '%s\n' "${REMOTE_ASSETS[@]}") + test "$(gh release view "$TAG_NAME" --json isDraft --jq '.isDraft')" = true + test "$(gh release view "$TAG_NAME" --json isPrerelease --jq '.isPrerelease')" = true + + gh release edit "$TAG_NAME" --draft=false --prerelease + test "$(gh release view "$TAG_NAME" --json isDraft --jq '.isDraft')" = false + test "$(gh release view "$TAG_NAME" --json isPrerelease --jq '.isPrerelease')" = true diff --git a/.gitignore b/.gitignore index 232f07953..19b91d92f 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ venv/ env/ build/ dist/ +!frontends/desktop/dist/ +!frontends/desktop/dist/** *.egg-info/ .streamlit/ diff --git a/frontends/desktop/dist/README.md b/frontends/desktop/dist/README.md new file mode 100644 index 000000000..e1276895c --- /dev/null +++ b/frontends/desktop/dist/README.md @@ -0,0 +1,66 @@ +# GenericAgent React Desktop 2.0 — compiled distribution + +This directory contains generated HTML, JavaScript, CSS, fonts, images, and license notices for the +GenericAgent React Desktop 2.0 renderer. It is build output, not the React development tree. + +## Source and contributions + +The public React source of truth and the place for renderer issues, pull requests, and design feedback is: + +- +- Exact source used for this distribution: + [`21f12f6dfe57ada8572bb21fe6604caac230b1cf`](https://github.com/abraxas914/GenericAgent/commit/21f12f6dfe57ada8572bb21fe6604caac230b1cf) + +Over the two-month React Desktop 2.0 development cycle, [abraxas914](https://github.com/abraxas914) led the new +renderer architecture and UI, Desktop bridge and Tauri integration, startup and recovery surfaces, package +validation, browser/native end-to-end coverage, renderer security hardening, and bundle optimization. Please +open an Issue or pull request in the fork above when proposing React renderer changes so source and generated +output stay synchronized. + +[yiqi-017](https://github.com/yiqi-017) contributed user-facing help and feedback contacts that remain in the +compiled renderer, including the +[`help and feedback` settings work](https://github.com/abraxas914/GenericAgent/commit/5ddf03bb152666637bdfcfa44f1fac3cff5a66b6) +and [`startup recovery` support contacts](https://github.com/abraxas914/GenericAgent/commit/2fb55d944e4444b08cb9ad76c13aef7a5788186b). +He also produced an earlier +[`compiled-only delivery` prototype](https://github.com/abraxas914/GenericAgent/commit/3e7ca6a2b20eefdb3ee335dc0d520c3b6d9d57f8) +that helped establish this upstream packaging boundary. The current generated tree was rebuilt by abraxas914 +from the exact merged source commit recorded above. + +## Third-party software: Semi Design + +This distribution contains code from these nine Semi Design packages, all resolved at version `2.101.0`: + +- `@douyinfe/semi-animation` +- `@douyinfe/semi-animation-react` +- `@douyinfe/semi-animation-styled` +- `@douyinfe/semi-foundation` +- `@douyinfe/semi-icons` +- `@douyinfe/semi-illustrations` +- `@douyinfe/semi-json-viewer-core` +- `@douyinfe/semi-theme-default` +- `@douyinfe/semi-ui` + +- Project: +- Website: +- Copyright (c) 2021 DouyinFE +- License: MIT + +The complete license text and bundled third-party notices are in +[`THIRD_PARTY_NOTICES.txt`](./THIRD_PARTY_NOTICES.txt) in this directory. + +## Repository boundary + +- `frontends/desktop/dist/**` is the generated React Desktop 2.0 renderer used by the packaged Tauri app. +- `frontends/desktop/static/**` remains the independent legacy Desktop v1 implementation; this distribution + neither replaces nor modifies its source files. +- The complete Desktop 2.0 integration also uses the repository's Desktop-specific bridge, conductor, cost + tracking, data-backup, bootstrap, permissions, and Tauri shell code. +- The integration does **not** modify GenericAgent's Agent, LLM, Harness, inference, tool-calling, or memory + scheduling core runtime. +- `build-provenance.json` records the source repository, exact source commit, generated file count, and a + content-manifest SHA-256. This README and the provenance file are excluded from that manifest. The manifest + identifies this exact generated tree; it is not a claim that later builds are bit-for-bit reproducible. + +Upstream maintainers can package the tracked distribution directly without the React source. React changes +should be built and validated in the fork, then submitted here as a refreshed generated tree with updated +provenance and matching Desktop integration contracts. diff --git a/frontends/desktop/dist/THIRD_PARTY_NOTICES.txt b/frontends/desktop/dist/THIRD_PARTY_NOTICES.txt new file mode 100644 index 000000000..c21c5cc79 --- /dev/null +++ b/frontends/desktop/dist/THIRD_PARTY_NOTICES.txt @@ -0,0 +1,83 @@ +MIT License + +Copyright (c) 2021 DouyinFE + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +The code implementation of the external library is referenced by DouyinFe are: + +- animate.css + + The MIT License (MIT) + + Copyright (c) 2020 Daniel Eden + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + +- Ant Design + MIT LICENSE + + Copyright (c) 2015-present Ant UED, https://xtech.antfin.com/ + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +- rc-tree + + MIT LICENSE + + Copyright (c) 2015-present Alipay.com, https://www.alipay.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/frontends/desktop/dist/assets/Animation-TKQfYYOo.js b/frontends/desktop/dist/assets/Animation-TKQfYYOo.js new file mode 100644 index 000000000..def12695c --- /dev/null +++ b/frontends/desktop/dist/assets/Animation-TKQfYYOo.js @@ -0,0 +1 @@ +import{g as q}from"./tauri-compat-tfiFK9EG.js";var x,P;function Q(){if(P)return x;P=1;var i=4,t=.001,e=1e-7,s=10,n=11,a=1/(n-1),c=typeof Float32Array=="function";function l(u,o){return 1-3*o+3*u}function g(u,o){return 3*o-6*u}function T(u){return 3*u}function r(u,o,f){return((l(o,f)*u+g(o,f))*u+T(o))*u}function h(u,o,f){return 3*l(o,f)*u*u+2*g(o,f)*u+T(o)}function C(u,o,f,p,y){var m,_,F=0;do _=o+(f-o)/2,m=r(_,p,y)-u,m>0?f=_:o=_;while(Math.abs(m)>e&&++F=t?b(v,A,o,p):k===0?A:C(v,S,S+a,o,p)}return function(S){return S===0?0:S===1?1:r(F(S),f,y)}},x}var K=Q();const z=q(K);function B(i,t,e){return Math.min(Math.max(i,t),e)}function W(i){const t=/\(([^)]+)\)/.exec(i);return t?t[1].split(",").map(e=>parseFloat(e)):[]}function V(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:.5;const e=B(i,1,10),s=B(t,.1,2);return n=>n===0||n===1?n:-e*Math.pow(2,10*(n-1))*Math.sin((n-1-s/(Math.PI*2)*Math.asin(1/e))*(Math.PI*2)/s)}const N=(()=>{const i=["Quad","Cubic","Quart","Quint","Sine","Expo","Circ","Back","Elastic"],t={In:[[.55,.085,.68,.53],[.55,.055,.675,.19],[.895,.03,.685,.22],[.755,.05,.855,.06],[.47,0,.745,.715],[.95,.05,.795,.035],[.6,.04,.98,.335],[.6,-.28,.735,.045],V],Out:[[.25,.46,.45,.94],[.215,.61,.355,1],[.165,.84,.44,1],[.23,1,.32,1],[.39,.575,.565,1],[.19,1,.22,1],[.075,.82,.165,1],[.175,.885,.32,1.275],(s,n)=>a=>1-V(s,n)(1-a)],InOut:[[.455,.03,.515,.955],[.645,.045,.355,1],[.77,0,.175,1],[.86,0,.07,1],[.445,.05,.55,.95],[1,0,0,1],[.785,.135,.15,.86],[.68,-.55,.265,1.55],(s,n)=>a=>a<.5?V(s,n)(a*2)/2:1-V(s,n)(a*-2+2)/2]},e={linear:[.25,.25,.75,.75]};for(const s of Object.keys(t))t[s].forEach((n,a)=>{e["ease"+s+i[a]]=n});return e})();function D(i){if(typeof i=="function")return i;!i||typeof i!="string"?i="linear":i=i.trim();let t=i.split("(")[0];const e=W(i);let s;return t==="cubic-bezier"||t==="cubicBezier"?z(...e.length?e:N.linear):((!t||typeof t!="string"||typeof t=="string"&&N[t]==null)&&(t="linear"),s=N[t],typeof s=="function"?s(...e):e.length?z(...e):z(...s))}class Z{constructor(){this._eventMap=new Map}on(t,e){return t&&typeof e=="function"&&(this._eventMap.has(t)||this._eventMap.set(t,[]),this._eventMap.get(t).push(e)),this}once(t,e){var s=this;if(t&&typeof e=="function"){const n=function(){e(...arguments),s.off(t,n)};this.on(t,n)}}off(t,e){if(t)if(typeof e=="function"){const s=this._eventMap.get(t);if(Array.isArray(s)&&s.length){let n=-1;for(;(n=s.findIndex(a=>a===e))>-1;)s.splice(n,1)}}else e==null&&this._eventMap.delete(t);return this}emit(t){for(var e=arguments.length,s=new Array(e>1?e-1:0),n=1;na(...s)),!0):!1}}function M(i){return!!(i&&typeof i=="object"&&(i.duration>0||typeof i.easing=="string"||typeof i.easing=="function"))}function H(i,t,e,s,n){for(const a of Object.keys(t)){const c=t[a],l=typeof c=="number"?c:c.val;if(!(typeof c=="object"&&c.done)){if(M(c)&&s&&n&&c.duration){if(c.duration+s<=n||l!==i[a])return!1}else if(typeof e[a]=="number"&&e[a]!==0)return!1;if(i[a]!==l)return!1}}return!0}function E(i){const t={};for(const e in i)Object.prototype.hasOwnProperty.call(i,e)&&(t[e]=typeof i[e]=="number"?i[e]:i[e].val);return t}const I=[0,0];function L(i,t,e,s,n,a,c){const l=-n*(t-s),g=-a*e,T=l+g,r=e+T*i,h=t+r*i;return Math.abs(r)1&&arguments[1]!==void 0?arguments[1]:{};if(M(t)){const s=D(t.easing),n=typeof t.duration=="number"&&t.duration>0?t.duration:1e3;t=Object.assign(Object.assign({},t),{easing:s,duration:n})}let e=Object.assign(Object.assign(Object.assign({},Y),t),{done:!1});if(i&&typeof i=="object"&&"val"in i){if(M(i)){const s=D(i.easing),n=typeof i.duration=="number"&&i.duration>0?i.duration:parseInt(t.duration)||1e3;i=Object.assign(Object.assign({},i),{easing:s,duration:n})}e=Object.assign(Object.assign({},e),i)}else e=Object.assign(Object.assign({},e),{val:i});return e}const w=()=>Date.now(),O=1e3/60;class tt extends Z{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),this._props=Object.assign({},t),this._config=Object.assign({},e),this.initStates()}_wrapConfig(t,e){e=e&&typeof e=="object"?e:this._config;const s={};for(const n of Object.keys(t))s[n]=G(t[n],e);return s}initStates(t,e){t=t&&typeof t=="object"?t:this._props,e=e&&typeof e=="object"?e:this._config;const{from:s,to:n}=t;if(this._from={},s)for(const l of Object.keys(s))this._from[l]=typeof s[l]=="object"&&s[l].val?s[l].val:s[l];this._to=this._wrapConfig(n,e),this._delay=parseInt(e.delay)||0;const a=this._from&&E(this._from)||E(this._to),c=J(a);this._currentStyle=Object.assign({},a),this._currentVelocity=Object.assign({},c),this._lastIdealStyle=Object.assign({},a),this._lastIdealVelocity=Object.assign({},c),this.resetPlayStates(),this._frameCount=0,this._prevTime=0}animate(){this._timer==null&&(this._timer=requestAnimationFrame(t=>{const e=w();if(H(this._currentStyle,this._to,this._currentVelocity,this._startedTime||e,e)||this._ended||this._stopped){this._wasAnimating&&!this._ended&&!this._stopped&&(this._timer=setTimeout(()=>{clearTimeout(this._timer),this._timer=null,this._ended=!0,this.emit("rest",this.getCurrentStates())},O)),this.resetPlayStates();return}this._started||(this._started=!0,this.emit("start",this.getCurrentStates())),this._stopped=!1,this._paused=!1,this._wasAnimating=!0,this._startedTime===0&&(this._startedTime=e);const s=e,n=s-this._prevTime;this._prevTime=s,s-this._startedTime=this._startedTime+f&&(d=b,h.done=!0),a[r]=d,l[r]=d}else if(b!=null&&b===this._currentStyle[r])l[r]=b,g[r]=0,a[r]=b,c[r]=0;else{const o=(this._accumulatedTime[r]-Math.floor(this._accumulatedTime[r]/O)*O)/O,f=Math.floor(this._accumulatedTime[r]/O);for(let m=0;m{const n=setInterval(()=>a(Date.now()),1e3);return()=>clearInterval(n)},[]),l.jsx(l.Fragment,{children:R(c-e)})}const D=200;function P({message:e}){const c=e.role==="user",a=e.role==="conductor";return l.jsx("div",{className:`collab-msg collab-msg--${e.role}`,"data-slot":"collab-msg",children:l.jsxs("div",{className:`collab-bubble ${c?"collab-bubble--user":a?"collab-bubble--conductor":"collab-bubble--system"}`,children:[e.images&&e.images.length>0&&l.jsx("div",{className:"collab-msg-images",children:e.images.map((n,s)=>l.jsx("img",{src:n.base64||n.path,alt:n.name,className:"collab-msg-img"},s))}),e.files&&e.files.length>0&&l.jsx("div",{className:"collab-msg-files",children:e.files.map((n,s)=>l.jsx("span",{className:"collab-msg-file-chip",children:n.name},s))}),a||e.role==="system"?l.jsx(w,{content:e.msg}):l.jsx("span",{className:"collab-msg-text",children:e.msg})]})})}function B({since:e}){const{t:c}=N();return l.jsx("div",{className:"collab-msg collab-msg--conductor","data-slot":"collab-typing",children:l.jsxs("div",{className:"collab-thinking-bar",children:[l.jsx("span",{className:"collab-thinking-dot"}),l.jsx("span",{className:"collab-thinking-label",children:c("collab.typing")}),l.jsx("span",{className:"collab-thinking-time",children:l.jsx($,{since:e})})]})})}function I(){const e=i(o=>o.messages),c=i(o=>o.conductorTyping),a=i(o=>o.connectionStatus),{t:n}=N(),{scrollRef:s}=C(),[u,x]=r.useState(1),d=r.useRef(null),p=r.useRef(0);r.useEffect(()=>{(a==="connecting"||e.length===0)&&x(1)},[a,e.length]);const b=D*u,m=Math.max(0,e.length-b),k=e.slice(m),t=m,g=r.useCallback(()=>{const o=s.current;o&&(d.current=o.scrollHeight-o.scrollTop),x(h=>h+1)},[s]);r.useLayoutEffect(()=>{if(d.current==null)return;if(m>=p.current){d.current=null,p.current=m;return}const o=s.current;o&&(o.scrollTop=o.scrollHeight-d.current),d.current=null,p.current=m},[m,s]),r.useEffect(()=>{p.current=m},[m]);const j=[...e].reverse().find(o=>o.role==="user"),y=o=>o>1e12?o:o*1e3,f=r.useRef(Date.now());return j!=null&&j.ts&&(f.current=y(j.ts)),a==="connecting"?l.jsx("div",{className:"collab-messages-area","data-slot":"collab-messages",children:l.jsxs("div",{className:"collab-connecting",children:[l.jsx("span",{className:"collab-connecting-dot"}),l.jsx("span",{children:n("status.connecting")})]})}):e.length===0?l.jsx("div",{className:"collab-messages-area","data-slot":"collab-messages",children:l.jsx("div",{className:"collab-empty",children:l.jsx("p",{children:n("collab.placeholder")})})}):l.jsx("div",{className:"collab-messages-area","data-slot":"collab-messages",ref:s,children:l.jsxs("div",{className:"collab-messages-scroll",children:[t>0&&l.jsxs("button",{type:"button","data-slot":"show-earlier-btn",onClick:g,children:["Show ",t," earlier"]}),k.map((o,h)=>l.jsx(P,{message:o},o.id||m+h)),c&&l.jsx(B,{since:f.current})]})})}function F(){const e=i(t=>t.sendMessage),c=i(t=>t.conductorTyping),a=i(t=>t.connectionStatus),n=i(t=>t.modelConfig),s=i(t=>t.runtimeModel),u=i(t=>t.loadModel),x=i(t=>t.selectModel),d=S(t=>t.defaultModelNo);r.useEffect(()=>{u()},[u]);const p=r.useCallback((t,g)=>{var f,o;const j=(f=g==null?void 0:g.files)==null?void 0:f.map(h=>({name:h.name,path:h.path})),y=(o=g==null?void 0:g.images)==null?void 0:o.map(h=>({name:h.name,path:h.path,base64:h.base64}));e(t,j,y)},[e]),b=r.useCallback(()=>{},[]),m=a!=="ready",k=(n==null?void 0:n.effective)??(n==null?void 0:n.configured)??d;return l.jsx("div",{className:"collab-composer-wrap","data-slot":"collab-composer","data-disabled":m||void 0,children:l.jsx(M,{onSend:p,onStop:b,isGenerating:c,hideStatusStack:!0,modelControl:l.jsx(T,{selectedNo:k,runningNo:s!=null&&s.running?s.effective:null,isRunning:!!(s!=null&&s.running),onSelect:x})})})}const H=[{key:"1",icon:"comment"},{key:"2",icon:"symbol-misc"},{key:"3",icon:"graph"},{key:"4",icon:"edit"}],L=["collab.chipProgress","collab.chipPause","collab.chipSummary"];function O({onChipClick:e}){const{t:c}=N();return l.jsxs("div",{className:"collab-welcome","data-slot":"collab-welcome",children:[l.jsx("h2",{className:"collab-welcome-title",children:c("collab.guideTitle")}),l.jsx("p",{className:"collab-welcome-sub",children:c("collab.guideWhen")}),l.jsx("div",{className:"collab-welcome-steps",children:H.map(a=>l.jsxs("div",{className:"collab-welcome-step",children:[l.jsx("span",{className:"collab-welcome-step-icon",children:l.jsx(v,{name:a.icon,size:"1rem"})}),l.jsxs("span",{className:"collab-welcome-step-text",children:[l.jsx("span",{className:"collab-welcome-step-label",children:c(`collab.guideStep${a.key}t`)}),l.jsx("span",{className:"collab-welcome-step-desc",children:c(`collab.guideStep${a.key}d`)})]})]},a.key))}),l.jsx("div",{className:"collab-welcome-chips",children:L.map(a=>l.jsx("button",{type:"button",className:"collab-welcome-chip",onClick:()=>e(c(a)),children:c(a)},a))})]})}function A(){const e=i(s=>s.workers),c=e.filter(s=>s.status==="running").length,a=e.filter(s=>s.status==="reported").length,n=e.filter(s=>s.status==="failed").length;return l.jsxs("div",{className:"collab-rail","data-slot":"collab-rail",children:[c>0&&l.jsxs("span",{className:"collab-rail-badge collab-rail-badge--running","data-slot":"collab-rail-run",children:[l.jsx("span",{className:"collab-rail-dot collab-rail-dot--running"}),l.jsx("span",{className:"collab-rail-n",children:c}),l.jsx("span",{className:"collab-rail-label",children:"active"})]}),a>0&&l.jsxs("span",{className:"collab-rail-badge collab-rail-badge--done","data-slot":"collab-rail-done",children:[l.jsx("span",{className:"collab-rail-dot collab-rail-dot--done"}),l.jsx("span",{className:"collab-rail-n",children:a}),l.jsx("span",{className:"collab-rail-label",children:"reported"})]}),n>0&&l.jsxs("span",{className:"collab-rail-badge collab-rail-badge--issue","data-slot":"collab-rail-issue",children:[l.jsx("span",{className:"collab-rail-dot collab-rail-dot--issue"}),l.jsx("span",{className:"collab-rail-n",children:n}),l.jsx("span",{className:"collab-rail-label",children:"failed"})]})]})}function G(e){if(!e)return"";const c=e>1e12?e:e*1e3,a=Math.max(0,Math.floor((Date.now()-c)/1e3));if(a<10)return"just now";if(a<60)return`${a}s ago`;const n=Math.floor(a/60);if(n<60)return`${n}m ago`;const s=Math.floor(n/60);return s<24?`${s}h ago`:`${Math.floor(s/24)}d ago`}function z({status:e}){switch(e){case"running":return l.jsx("span",{className:"collab-card-glyph collab-card-glyph--running"});case"reported":return l.jsx("span",{className:"collab-card-glyph collab-card-glyph--done",children:"✓"});case"paused":return l.jsx("span",{className:"collab-card-glyph collab-card-glyph--paused",children:"⏸"});case"failed":return l.jsx("span",{className:"collab-card-glyph collab-card-glyph--failed",children:"!"});case"terminated":return l.jsx("span",{className:"collab-card-glyph collab-card-glyph--terminated",children:"×"})}}function J({worker:e,onClick:c}){const{t:a}=N(),n=i(u=>u.killWorker),s=r.useCallback(u=>{u.preventDefault(),E.confirm({title:a("collab.terminateWorker"),content:a("collab.terminateWorkerConfirm",{name:e.title}),okText:a("collab.terminateWorker"),cancelText:a("common.cancel"),okType:"danger",onOk:async()=>{try{await n(e.id)}catch{W.error({content:a("collab.terminateWorkerFailed")})}}})},[e.id,e.title,n,a]);return l.jsxs("article",{className:`collab-card collab-card--${e.status}`,"data-slot":"collab-card",onClick:()=>c(e),onContextMenu:s,children:[l.jsxs("div",{className:"collab-card-status",children:[l.jsx(z,{status:e.status}),l.jsx("span",{className:"collab-card-status-text",children:e.status}),e.updatedAt&&l.jsx("span",{className:"collab-card-time",children:G(e.updatedAt)})]}),l.jsx("div",{className:"collab-card-title",children:e.title}),l.jsx("div",{className:"collab-card-summary",children:e.summary})]})}function K({worker:e,onClose:c}){return l.jsxs("div",{className:"collab-drawer-wrap","data-slot":"collab-drawer-wrap",children:[l.jsx("div",{className:"collab-drawer-backdrop",onClick:c}),l.jsxs("aside",{className:"collab-drawer","data-slot":"collab-drawer",children:[l.jsxs("div",{className:"collab-drawer-head",children:[l.jsx("span",{className:"collab-drawer-title",children:e.title}),l.jsx("button",{className:"collab-drawer-close",onClick:c,"aria-label":"Close",children:l.jsx("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",children:l.jsx("path",{d:"M4 4l8 8M12 4l-8 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})})]}),l.jsx("div",{className:"collab-drawer-body",children:e.fullReply?l.jsx(w,{content:e.fullReply}):l.jsx("p",{className:"collab-drawer-empty",children:"No output yet."})})]})]})}function U({collapsed:e,onToggle:c}){const a=i(d=>d.workers),[n,s]=r.useState(null),u=r.useCallback(d=>{s(d)},[]),x=r.useCallback(()=>{s(null)},[]);return l.jsxs(l.Fragment,{children:[l.jsxs("div",{className:`collab-worker-panel ${e?"collab-worker-panel--collapsed":""}`,"data-slot":"collab-worker-panel",children:[l.jsxs("div",{className:"collab-worker-panel-head",children:[!e&&l.jsxs(l.Fragment,{children:[l.jsx("span",{className:"collab-worker-panel-title",children:"Agents"}),l.jsx("span",{className:"collab-worker-panel-count",children:a.length})]}),l.jsx("button",{className:"collab-panel-collapse-btn",onClick:c,"aria-label":e?"Show agents panel":"Hide agents panel",children:l.jsx(v,{name:e?"layout-sidebar-right-off":"layout-sidebar-right",size:"1rem"})})]}),!e&&(a.length>0?l.jsx("div",{className:"collab-worker-list",children:a.map(d=>l.jsx(J,{worker:d,onClick:u},d.id))}):l.jsx("div",{className:"collab-worker-empty",children:"No agents yet"}))]}),n&&l.jsx(K,{worker:n,onClose:x})]})}function Z(){const{t:e}=N(),c=i(b=>b.connectionStatus),a=i(b=>b.messages),n=i(b=>b.connect),s=i(b=>b.sendMessage),[u,x]=r.useState(!0);r.useEffect(()=>{n()},[n]);const d=r.useCallback(b=>{s(b)},[s]);if(c==="offline")return l.jsx("div",{className:"collab-page","data-slot":"collab-page",children:l.jsxs("div",{className:"collab-offline",children:[l.jsx("div",{className:"collab-offline-icon",children:"⚡"}),l.jsx("h3",{children:e("collab.offlineTitle")}),l.jsx("p",{children:e("collab.offlineSub")}),l.jsx("button",{className:"collab-retry-btn",onClick:n,children:e("collab.retry")})]})});const p=c==="ready"&&a.length===0;return l.jsxs("div",{className:"collab-page","data-slot":"collab-page","data-empty":p||void 0,children:[l.jsxs("div",{className:"collab-main",children:[l.jsx(A,{}),l.jsxs("div",{className:"collab-chat-area",children:[p?l.jsx(O,{onChipClick:d}):l.jsx(I,{}),l.jsx(F,{})]})]}),l.jsx(U,{collapsed:!u,onToggle:()=>x(b=>!b)})]})}export{Z as CollabPage}; diff --git a/frontends/desktop/dist/assets/IconFile-CgfQSwGI.js b/frontends/desktop/dist/assets/IconFile-CgfQSwGI.js new file mode 100644 index 000000000..72767cb05 --- /dev/null +++ b/frontends/desktop/dist/assets/IconFile-CgfQSwGI.js @@ -0,0 +1 @@ +import{c as t,b as e}from"./tauri-compat-tfiFK9EG.js";function n(a){return e.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},a),e.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 2a1 1 0 0 0-1-1H6a2 2 0 0 0-2 2v18c0 1.1.9 2 2 2h12a2 2 0 0 0 2-2V10a1 1 0 0 0-1-1h-5a2 2 0 0 1-2-2V2ZM7 8a1 1 0 0 1 1-1h1a1 1 0 0 1 0 2H8a1 1 0 0 1-1-1Zm0 5a1 1 0 0 1 1-1h8a1 1 0 1 1 0 2H8a1 1 0 0 1-1-1Zm1 4a1 1 0 1 0 0 2h8a1 1 0 1 0 0-2H8Zm11.07-9.5H14.5a1 1 0 0 1-1-1V1.93a.8.8 0 0 1 1.37-.56l4.76 4.76a.8.8 0 0 1-.56 1.37Z",fill:"currentColor"}))}const l=t(n,"file");export{l as I}; diff --git a/frontends/desktop/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 b/frontends/desktop/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0acaaff03d4bb7606de02a827aeee338e5a86910 GIT binary patch literal 28076 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf b/frontends/desktop/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c6f9a5e7c03f9e64e9c7b4773a8e37ade8eaf406 GIT binary patch literal 63632 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 G2<`xUL{2yW literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff b/frontends/desktop/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff new file mode 100644 index 0000000000000000000000000000000000000000..9bdd534fd2beb9b878f0219da9d63ffba56677e2 GIT binary patch literal 7656 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 Mepdy)y#Y}F4=Hd9=l}o! literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 b/frontends/desktop/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..75344a1f98e37e2c631e178065854c3a81fb842f GIT binary patch literal 6908 zcmV8Fb8N1fhQaGDMf{_aR5Q!Ty=u~ zF9)2+5IRGd_aY*eXu*h4iwC8kb*{C_QN)VA7RMQTu+u)>xr{eg*P|+Ht6ytXr+d(m zZ~p#e2L!$$0|$%oOtI@cwhS2;jT&TD-BQw*ROSFERP599O_J6$GcUwoCkE!d0F$=B3ebZj) z%u2tl(MPUHcVnr%0uq2j$ZD?mW>&vQa*^&_boaZ?MJ~Oeyzo++dtr6}Y?ubX02szi zP*4Emv9VMKu55x7Pupj&vGqTAnT&D>y#d1ekyijf!(aEQSqT*TC&1j-cL)Ens*}5? zPXgozu7BUTz|2A2s#l8S0Ji^=-i#RP8zmtu&neZRA0(Ii3yrZrSlxAws(Hqkb;`{* z>R>b_>h+hM-@KF)45>S=iBNAa{5HRC7)rg~bN2%<09URSqJ=Y{XKexK#T$p9aTxCW zfMVV)pb*Y6X;Za6?`mTJ+yNk09iWQdW&i=IJjein4Vw%ws6B*-E-71rPx9U-XsEPF zmm?rfMCvR9vKSm8 zq$9HmqSC~h)zlKsuL8;5bO!Ba-LHXeIRiMz`dc@Z)3MNyNr{1@gs@BI+wX*usD~DY zPbI0rltnBWa6U%^ibIti;Oq^dR0Nl(5D1CA$jm7K1rY25IClUJc5L*Dj!LVl}LP@DA-7)NFisBt(l7XuEUU)kCh);s~U%Lr_B4Qz@mcgX6JTs?GR zquI!~$-qH^+!ku^dIm1q5=7u|ekQMzc`M*b@!WE016~Afc1}oVh}5E{0vI?n|P+~7zu3sKt42i}YK>7#Vt>J#blPO4(ls}XZP(i&kVgM|renp|k zuM`>VpVR@eKX-~SBuLUgIrRYeMKe4Xhju*60=Zq?eJ{e>&aRqV9M2FA0O^;w21s}o zrk^+wvH>P1_M*uX718dVBO;=F7ZXsUtW_mc_Lfy0XYLTOG1DT;#>T{U+$K(n8qJs+ zU-rnl72oxW-<-Y!p>G*9hITXEAZQZb@wTX&1g52vWZZ;F&A{0J3h#omqk38k3uZt( zDz8rq0W{-PAelERFf2+PbrY9^k|7cjCUXWY6EPQ)BW+O;aJ5R~$vTnQ9j#J`stC9- z9&_n(D%j|02cht~kcj~r)ZONOgejuA)uJzvCZ7Ad#st(&+{AyUv&GoUSZ59}Y&6;o81%yY-c{dOdBeheh9b>eAvKUb2uq;Ac z1f*r^X9Ua-AiT{1F?D&Sf^wd8lg16fMcJUlf|?X09Th4*1zTb#{KHfWPChmR8h8S^Gvowg;Kj&N zTItVfHH&h zW_Ap`=D)vMNyU&NtN8i8u+ph1Skh8vN>25-WSLmb-Yig5!|r3;N1#VyI(RIHaSl&T zY9ANFc=#kzy0jQ_vQGnx_H_Z>A{Q`*c+`~DD+HpXV5k{)PzEl`d$y8APY7^BV#VMQ z6h*7EkJDIp(Z}kalQaqY0q=*kT5XnG!}6?e7;%Xd%wU%If-(((YL;F(pi2FYn^kmV zxL(1?J<4{rGQc9rxeu5R1*pg_G26GfcdBkhCgET zp9UC%7m?xl_tP5bzwmNbW%45qd)}WEv9qs3l*ydrJc`Gt7oz9kC_Ur5VS1c_TosFI zRa#C`^HAmhax4J*Cyv@yi3G6!r{qQ^DKONVhTH0R3s*)1%}1T%rpH<(feTxr#D;^qxpXBbQBfwRvHVap_k85D>8&}5 z;ytfkPFGl*3S%|*rwrT2i3s`3QZ8QO)?50ExWZgf zD-Kx7%J%~*G;oh99SgpoZJT*=mzq$~DRK#88K${>f;yfWY$A{+wldpf?clzq;M;gJ zp+s+yPOC*Ls1Ih<^ieJG}N z@t~-V_`hb}7Nbro+N!urzqw#1ZoWj)?T4lo%giLb>9Dd zg=pkByj>PpRO_J`BuCq<+>_T_dYlZ)$lmT&YE4;J-ecRcC~Bh}m3ngK>eyA*@?3hO zDAS5xPV`Kc_+cl~XGc%gx&ejoHnH}UFornXV1Squ7B6b*E=~_6Qs*5Dia(xHWOz%i zLtW6!ZZ6aVCF4@_CXCXRCI@_NSxBtjpQVh%?|^He!sZW?!?rv`UT0}2qsPKH4G!u+ zKIN;B54kRF+VO$SH{#0=Iq;_b5{ZUIzxt{==TT0C)?0ySR?e$}L_3IatmN6Ksa9U5Du$7~ErjlW#IaM76x> z9le1qqFy*M!Hd-wM_lqfX1(r=!sorLFGFuunypI9cGptzpmq; z6{iqo^uO?SQfdc=Kd0JiJ75D|%0FY_YQY>K! z9j4kSPT0~}NvP$iyfTb(O26P=%?gw6=( z#_Cs;R>aM4xzS7pSCj%pBdSJy!u8`bf1xu&`P;@mcd*4%Wai5$`rv+3b8Sghdq%P? z_0o5!_9bHl4TOb|(7ms|302$|d0NTns;EKrEY;9Z{j9p3qE8EeG;1}={LeOXOLzGX z5(tF!Fi`xGsJ;P)f%~qPQJnlG**z?X!!B3fOuO_z*AG>gmZiy;B?viQ*xSZ*AGhtF z_}OWRC`{1`3@vO~&z?VdTqeD70^68Vta4qGTXqkAlo0rLZw_Xj&QNOdA4p88VNqGZ zX&V#*E))CB=31AN7Uzk#>r(uyJ6$MI+evYmNXq|NJ{r)=-x2Tq6sTADdL5T?Irt)^ z9;kxBiDa6h^avLkJ9av3Shx}A6XAz-@%z@dx&ri>!i>>SI%DL0Hq({Nmww7Xf@8Hg z*~d*MyjB%M@#uo6%!HZ*y=a+thJCZ6N5W>}(sJLG#uRsFhkUtDGIaWH1i$m04codW z0TY8ERE`XFx)K7j2p*YmYDSasqP%y<-af@Gi(h45VFHZFLWM(8g$cQ_Z&Dhe|5$G0VP4veZ?b=0ZxD9Bl_bS#@gyi3QPI8G5 zO_^>&9R!-R=Y#kVelpB(zavI7geJM004o57IA!%~CrQwJHf4tU2UTtZE>hKW=I!C% z`N<%^-@o5`hOjU~QCz5Tuqrd*!$nK_(?@Ow@|kqIIJwSeM;QzSrUSYa%jm2RLeKk{ zk2Njw9(mUnioCT0X#B9Xt#=jz^E=Z;{MQ-QrSd%0`0oDb$6Na2ht0o#iGbmSCsDYSF!@(Bg6KbXaBEkPXcO7M4G}Bnlt^GLXgoJ;~T%V2F1@Vg1Br| z0kh7l-fx3>sv-^SNE6Uk3cxkCDSoRo;|ULu8Dih_V-@}%>)IaXN{qw$pFpXTn;S-5 zmkF&XUR7POId&`Iw|PP4?|hPj*?lIYX0oUlQ_4Wb^+cEsX@1}GVp_6dzv=>8?)3)y z9i>HJ@uBk9Um4n@@$wF?i&5TGxG=O>Tq6F!zTMlmDM8A{A=zkS-sz8GWw*9aRDSXO z%26rFVX(gs)aDB^jeGqID97&nygCfpk3`wZc!aF}7VzV8&~;}u+0O8E?~{QC?thj@ zgVIv9W2XEde?+-xgqTdf*AjqEPsobI(e4T_Ho=O$S?s*xz`ee|?W2&SbF$(i)DHqcN-t^IFaoXDbJ$m;g z$9~Cyid7_ff$Efy@>6|uB+s39zb1|HWPUDr8xuOdpU!@)}e3lsV2%0cZk z;}+A@`oKI4`VnRgvi;A@BD1Y~?1>_ui6IYy@3TOl0IHfrc<%vYlCjdK+1Rfe>;cJi zYG>GX>w<4*qWR|wiw0{_#7W*Q`wn*)T#~r3E8oVAFQzbNy(u$c!cfjew*}=fX}U@0 zv&^mAnDrPnH_su6w-@cM9w$l?xZFjFEvdq>z(`io)RAvN0giSmlMERp%{*(L`?EmG zjrxsBsE>ZL&`MWe&LGFQX^+-Lr9+}%K7{Y;oRmZBah=q9TP)XRE4-xN75r}K+PC3` zqjDQcJKsinv(aFGkW00|zbJI`22b^vlG4;vw_98~PLpvvH^%sD(|rL8J9TEVJ}6+c zGGJ_PetSs5hN?`~W0lKU;aEg5i01JJ3nLuO~JGjek7<2W!ey6w$yR45g{R{W8lyrez_-r28_YB5LT|I+*NTuf1bl@;e4xt&82kTjAbdG{)gR2NGU z9V|cRaATskab66|c#=Q7uqknJUvyToHtN)fTEt|yKU?kes}N&8L9w-y^;y?dq)62m znBeU})(ZKgc;>;hF^+he75!}FCodj@{makaAJ)_XRZz!SX{k0@7rTYUVbaEHviJ$& zu&?YNLV0s})vcF44dv7HEq8-2V;rt_+c%xDb(_9HB`zKzajG{&1_x=p;=WL4M9%(d zq1s=g6$=y02fv6OS9D396|~{Gm0_#Snee-9F!C2+HtgnvbT56w;j+_9b-|=)rYONQ z3~KT_7B#uuezSjK^E$)YOx`=m*yshuhVSPIxFZ}<NKwTQdr#D@u>5alBOER& z86Y_dk6)KGqpOBD7UUKV?JaCsSh(8JhQT^9l5tx==;DRR?)U7UK+S`Y)UHil<&j*) zr!vBp`ehc%JrbHrsw7*^fvt-td{u@(3G~nGPkBkOE_jvxBT+nwE#_nm5arx~aywC` z$k|}vpsrd`C!au|;~s0c(ww=X85_?KpfvE-qSBLm7B!VaaEBGrjWVUrZ_I@7Svm7* zAibC|5PQvs*8jbg*@ta~1W}w!cYjx-KNLXM30~$B9*0f*~*9!c`VoQa(BUyB6 z>cM#BL|OB~ubY}v(iYV9S}>7NW^owABN83kl}Ou|Ih+~$H5x~8zzqK9{jPUX~H|{Bqt*km+SQFYc4+C#AnixIm(Igk3ouVbmK0} z;W&JsPbL<(RM)Km*&mJwVQx5p&z7RJ#X#SL!A_5himYSg(A7fb%Ix>cvj{c=l8OI_ zPA?`GsY7cS^|)ENDg^}|fO&K_oCxhYk{TB+hHUrAqXX)&bXpPHmGB?IuF!-fMx(Xj1@Z7LYtX7*GKa~9YoWe#0HD$rG`)06%$wu&iQ#MvU0`5~0RX^efNUa2 zZSzD3+vSO{Y!4?QY^R+_OTUV|PKgKEAqv9YjP z7^8%(Woe3At!^D|%a~&V)^fGr0K+B?$7$kVv{ew=IR&*I;~1NG)Rd7{gHklieW*|c zm$aDmVy8z3H=aqhT7!E5_T;7GwQJM!%3a>py0xYxUTHYW>>iA}9j(dvs_lZyX-}+7 zoFf$OIk*nx-eB8}bhQCw`;`)c-JI(#jK(22GL&^dfZskZ8U{ zZpm?1v+{19?dAb+K&ka>49`*k+iqC7Pt2=95j`a(ok#2TlS`#p!{thM?>5Fc3f6J| zfn7eOSP-@vO6|dYa~gM8mbvObT)Ued#WJ}*oFe}O#yD*{RqXQ&)dcl z>#WkUD+QDFIIhLYl4U)@;goriI|7?oty?vf+>uSRrXYG+fdBZLWr&xm8$s?~a&)S) z=~n$m^kvi1(eq*8%a6YRMkeMG`n7EW1ql`+lwFu`5h6t$MDMK{E%#qrRLTpuzU~fy z;QaCn{F{BFJ^;}F?i%uYGyh5;Aifzzx)E&ofgNMaOcjRa0;hZ<7~no@b=K~7zvI17 z4mHY9J&pkzn%F31$=u~mVv~R^d}j6K1iCxXAvOZC{a$!SER?`981pokH CFgb+) literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf b/frontends/desktop/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f522294ff0f3f8c52dfdaef7ebfaa06ebfcfaabf GIT binary patch literal 12344 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 b/frontends/desktop/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..395f28beac23c7b0f7f3a1e714bd8dac253dd3bc GIT binary patch literal 11348 zcmV-aEUVLZPew8T0RR9104!7h4gdfE08HQj04x0f0RR9100000000000000000000 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 bnfbLfgSm6Day;iB;wah|00962|Nj6Fv8wea literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf b/frontends/desktop/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4060e627dc341c1854260cbc3f7386e222a4d297 GIT binary patch literal 51336 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 Y{My=5Zj3WbM|mX<0#Lulu=APmKiR?A3IG5A literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 b/frontends/desktop/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5931794de4a2a485fa70099bf2659b145976d043 GIT binary patch literal 16780 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf b/frontends/desktop/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dc007977ee709a236d9e82719cf7d4e5577a81b9 GIT binary patch literal 32968 zcmdSCd7Kk zfy;7nh>eLMgtY9K?UDq@1+tKYB$u6B2oB5V5@PZmB;Z&x_j{_kN0O0~kazDNPoti$ zt~ya0$h9li-+L_o6vth?h2zNR zkyAIP=?jqq9Cyb8t{*sd{qbuLcb~h9>D1qI+;NQO>L+kQ8Q^jMtNs|Db0@C7`L?-z8-5GdKf`fUI(glZ zm0O>>;)5J_>^?kSx_0HZ>q$+=wPVX1$EDw}a_yBXfqTD<`Fw!mgh#Kx?xvep-mpEu zargFO{A1VOc;)q1evUrGaksx6CvYc*<|`*Dq& z#h3^2-52N=xfs{MDKBQ?8b@noQVSXZS)#Henb~4tpx@W1*BiAl+E?ehZ zd_=8KFqk(LqJV<+so0kSURF5WzlxhC1^e(?O^_HB~SCmmYuEMIpmJG$q-PS>!M za4M4E^zqWn2G{IvjFuJA=~ZYT$o#7p z9`bU)kolcEiG8p=a?)A%@zkTMlJmYB2qll-Z1TL%sd)LqcCiu0J6S$A8 z{V{)*{v+4N&2b00YdP11cKp!x`LThRBDBa2;xd$kf_*h$!$yw8Sv&{Sa@>H$2gNL7 zQAw7H0c%{NJ^<9pI3Y{oYxo5>Y}D#}z`Eo4fn?|4ct?FjbS9F4`DvDj}<%(*ypV8%~Hm2_*X&qb5E=Vu@+p&6l!_Jt!tg*e8y zIy2={w=LARhSIw?s17aaG}3!-R4MH(sNSKlo(M%sDlckIGjgb)nHfnh*Bww=bV-lv z)o9PPeG5uxbU+n+d^j$I6XA3fn#`j+hI*XtR9NyjD0ODiwblQJ7^06?93Xx}fcYWZ zx5zH?0cemgC%vGH_vtm6 z4nne$xUZYwzG8q8o{^(bhXQZ()j~lKoc%C@l9`x`D)Bv9;&<-yt8Ndkc*iO?R|CV+ zk98tsPJU=|;6udR@06+Nbk`@JdFArmXAUatN%1wAyoe{o7zFG|q~DTP7zSB#g9R8b z*vwKO{)nz3t7h^U$Ks zp758XM&E=d?7$P|<9LEU%XqBb*G(<<0{nyb_GLP9|0s&3ucls_QrgQ-PEvP zW~>TSG-T=L88J!jBaz`SuO$6GC*N71yhO!};SG^KSxLD@MA7j&gG@ggbcaOVlrQL{ z+Yxc_iXP0!vP?RQB%U3Wy&=C_;_nefL+K#&(xWzrK6}(o%HVzX+I#o|^Z=I!ygrU$ z)G`TjrltJ@FvU#L{Qag)Pi80@b-Kyr%jHPUFy8ZSvYD!0ho3Aw@wSjpde^%Pd0wFh zyiV!y$1No+h^yb^Jsu~?QKA}tg(vTPo94!|_pObQIQO*0j}D4wH(+pUE#-=bTCzRB z9)HtNX+hMt4>@Jg@0`uM<61H|Q5xPCGB(`Qp$0ul-+WY-v$*F0?zhNk5`cFkz2Ic` z^xNzQibxm%7_Q@$d+rfczo6WG5APyQk*9(xZczk61Sjrr6VMXjJ^*h`dO>9vvCO?i zWDr)8K9&T0JxQm(hmPfv4mHs!@Pc!o)WCOBkc8*JJ-+sLTmB4ZI}orTK;4^MeqKEH zNvgO4iY!yQz^n8hy)ISMUR|P!*M%8~#+_g2HuKYNqcbUrsj%+V2F-9!m-mIZ za>uE^@a#J@a`n^O58R*YtYxYnyge5)VtI+G-Rb}KdyGrqdr}vDCszerpd8~8BS5Jf zfM7Fv$xMZVP|&|@Zhd|Jew+lhndn%vt&?9E3-jcdsH&pe8NH@(*cVc$K*f6fq`R}% zCrW~#y35_$>Q4GjkF@%?tA9@@6|{g)V_ebP9vZM%g~BhY6n z7fZ3V+ym+5Ol7#SrI;)#@9=rj182IbNk`bo9SNEde}ac7gkz#0dJd0>E?qCyMlxR6 z$0H0L?}c z4ml#JKEB^&6e|6o?8&vC(wl(0W58XM;m-1VZ6dajC)-H05C!Zox7hN0B<#BzZqUzSR?6dse9;ZQPB@}mih1zjSL#8hc3$+rG_e0is4i$ zBvGmag4rQ6?DKg2`2v-xLlkm7zG%wfa8B$W3Tp0%Ci8qmbOzNJd0#Qz*E{MVd2`&a zzo90P!q)D}_(oBynNELsFcFM)DzMgq&!L;)&7%p!FG1oZrNC23&80hfgSFXY${W@l zPE8SvF0bJlX1qVRHb%4b9o$A>D9(6aw6!_l0n^J8(<%LoFZ}FR3qIyRGt2;Dph|`Z z(^q4Lftf(dU56qeyFxLKH(bb=vwqF#a{A)ZSC^D%M3ao9WPb2!pVT!HAf{q=C-TX# zAR>;DsEZI!E$MXeil`Jn7c>QD&x6$s-XeJ*~+`&vS<8^w2q3&3qC#9%fpP=rgqUsvow6Mho0A*3& z9XGr&&r{tk$>pAHSIGW*mXdzY#>wuXWF+1Vk4tg~gDzie|AA1a?8$4OpDdBRyhy}Y zR1!p=E;&x{gM)zA*tsbl+k2x|gf=}5NN)tE_j8-zvrg12X=qap%*q^4OdB_m0~P_> zIs<1~urhgIc7)k;(A=UsE*j9hHuGZu`BBOcJ@C;xX8e9b>FTR(2*#b>tZZr>GmWvr z4Asr@Q&+oh=evFG@RZV>iJL(!6c0i?RY5nx0{KaAr%FXcg6dEyznMs-c&4K#-8Ivt znsPc4t=t^(UAOP(quPKvkA?- z4hZyFy`}mXsEkKLL0dsvRD>?)Eui}?&$=O*h{e6zosNkUVNnf6czIwDE^#Cwz(XDE z4|z40Q&Ivw4PN8fNnZcxUb!n%c2P&)Z#xA+fRkOXs61FtIB|mTM3N0T=2nvtQRS5> z-hs$mqP~|_o7r+saC*#-{ezbf^{s)K?12JoJ+tVSx;VmU&_F z2lCj^Sk?#>%@&vuWb7LZg_w0DObIb2E<(dIWiOGRraNTg9Y;1Da>8ZaGN}|K|84t6 zQWH)x8q6m~sGDC238LWd>=TMgYW4F626t*i5RK{}_2jDL`oPArFS&Tb(4aH!oZOR9 z3!~BCrYoJ1G10MeAYgoGNF#LCBPveClg#Cu<<&Ru8tD==ud4fVMOVy_O%LdaXn+2vVa@J|m51s_T4CI!D`*JwlAyHoPc(ZfC za7wAvXNt8-U^-tN&dc`@N3M8gUo`lV`hDx{E`qNzkMeq!0^)PmRUtFYLR`A>()r#Uy` z0p-PrM`d11+alLMCgvUUt!xF{Y35VC8ZUGNgGA%wh0$v-@UKX;5U-@XJTVi+k<}ku z>~7&%`_?wJo>j)P62415OKy9Wpt&sBTmwdsAQ*)UAKV-&PHCZWy<3!3Me@}WQJ*Tu zG8fI^o2B8M(cG>D5BzJ%p*r2=YPU>HD?h_s%by~Ta2jV|E^dcl!Oc9NjO9#==MTRW zG6b@TY&48>ed~v0tJ?}u{}m`zs>)4w9Uxiw}=5e*f}+KD6NL>n&&;zct?jXRJ|=uMTH=m zlc>NGRds{~Sq|?PU0b7WKmQmBd1SZ0W1wnyXkj)&ZlsiP`MrN_#-YJS1s zMcvKZxu{2g!6sDj=>0*msjD;Oq>IFp@C2i}zvK?7-gKsC^#>QE=P37qwO=6D@cZ0u z?l3TL`QB2DVSw>F1J3$kEN=ywmVE^{%nM=A+P*)-5W_>E$dF;lizP+CRO?cZ4K7-@ zw3IsRb)6r)=}4xuu)!ah$%M#v?mz7@bG%IC;O+YV@0_OkX@PT+<5VvxiS8dc_r)IXpi8KYD>$ zkDy0NN0%bm#^CNPdyXi?c(Aws^54ybcvDL6-kiiXcn^4Ff#diN@W_;9*%oHXjPo+g8L#&>YK3Calw~LqD+IEEwDAMx0h|a)V8lW} zpK%@^wm`DFnTOL-1e(?WMQfhE$XPGBZ4~`pz*o|Hd~01H66=R{aCW zwmnAwklO;QKALA%z0Lj10RasgV`8mdv#7{)fdxKfU|sB?b3-8uK`d;;0H*qwJI)Im zMxNZ?p9&t@zjtHR5Bto61d=E)NmrB49P&kOdV5g8+y|aH5;lhyOrcbQgJw(sw6N}E zq$A|JoA+Ha@xY$G?K|iDM&V;h1W|~f$f3RWI{CwksjhnOo=w}2>OwpvCR3EUgw-`3 zUXCQ_$RAN|4Ai|D)Gcxoknrx#xDNicC~JjgmLxL{wG^e8X89YH~rB8lXoQK9Y`?sAJ-P;qPg6i=04M3O`~owR&;4nO%d1m_=D@ct$rLr|Z$-GN4sBR1cBq>B>y(%yUP;u1)qjRM zz*OUbpo^40QU-50>-j^111y2>Yw9Z^Ttb`Ufvrhk%K)}m?77c%F}7ZVtbU-PTP!2v zAj`Jkwk#jG8Q5f;4qTZ~@JIum#}CtXl6@KIwXxJIO2~%O@OdODj!2+05tkYyl?)a9 zNuQ{NfP_g{c#p};iCi=#y9I#^58H~ZH+ggCalgS}<>3Zd*bxQ9GDujqkP{qMjijMN z&k6i(w-HsJ^+_yDS^Za0^+;OW2s_B_u}O~`I(1#)c@))yqyRAU%-T=+M8M*fCq6r#D{z#CAg~@qw%Q z-+MsTJRS1(j$e^=TJ4oW5#^q_S~|G0x41zUT+YEEo9%j%R~_-i-A>6&VL48gCOU_= z81At>Y5#k#AKa=C;;Owy_&vtNUYz$Wjy<@)Z`<~4Ou_o#Iywje`okjsB`RiFY{O*h z$IudY04JL*Zh4LFhu_0&9PDx z29#&A>Y{gyZfL<_4Bomw5n~@<4s)aKv^R44ipzTABY%`lgnJz@(O8cpVyz^TzlZr= zhXc2>j^&>X-!n~Swsgkx-Bvb~RaQIg-myKSCARkIXlXZ@Pl4z8^G~ln|c6JVMDKYXL>L_db|gk1MLt zPg!<{_^@K!VvUPEE1UJf8xNlr9(ssZ*$Kt>H@~YmMd&v`Fq{4 zUM%XT5;w%c7VD0WgQ>>~yL(u!P>Yg-g1RcT3}&0F8UHee!4glrTU_lgoyMYKKscvd zU@^2QKJaqG-(uw!IYIPL06C2s7S@nqJ+Gn83#aX3AOUhASNH~) z-v`#QS%Vh)c^<4`^BH3yjNaoB1ksV|_syR7p0GyZ;L|2g?taDuq3G>*QkR8*+PXdy z+<~L{+!gEk?4d8d2`kdFY6JzDZX=Tu+DH)DeL;44cPA6uAmITRN)jMgzF+r{kqLU~ zobh?W4Nw8B!0RjuXrZhnN^K6HVY2$CU+wl18O9SHXdi)DT|FmCl0X8CQ7*I=dx6p5 zuVVDPe8A!I*C8=*vNF*{3rNO@SXXB% zk|}$Jz;n;=K#@qxt5N59vkB-a_kKhSEA$Vz0M`YNIv;GU9NCJ*Vw$!u4NKQ@6o_|2~9U5f`k_fXh1-BV3P6%s2b|A8YfMIbrP{UeWjNiAnI` zD$M&66d2&*k+ug%z9~;nl;e$=NHya3xpi+_eg%!!nL|dz@j=Oms=IG+QF2{mMAxy# z0(VbhR-@&#v8dp=8w4d8Sr`t6bkr5`pu)ICg??@yw}Pnk^2NDEQbW|5xAS{8S24(~ z!V<8b4VQ%jJCKv%zyTo)LcSgJS#pfbCcHljT}FU$E&lUNh^_ozgZ@-;2%5VxullMb z>a1iJ?~aAelQZ_FWz=;z!oeL*DKI+|cI_OF`n*W;9wQ`)cthO#d zJQ?yB3z()1JHKupFU2!$uCmZ(f6G?%Hsk!^pBhxTKBK344!X65zody_U66!eRFI;n ziWd8CZco-ZF+j%1IzJuD9}cu40`k}5$4eEZn2VR)u8mAU6?%qt4Z8FD`>U=4y$adDE1^1~AirN$_*?sDRoY4C=H2@}wKt`L zt|LP#iKRprDi(y8;DAGb)w={_RhY|k?Hd{N5tBG~*Ylk#z3~pEN_FAuf}%)bM!Ijb z$Ej4k%n>MGov*z$Cs$;OxX;rZ~1|YhPL8l4n{GHpG#Oj+xSW3&rd!KLt9->s$Asa4Gi)0 zWJG;)x41%dM-u#kf0ortY;nWtNtr3}I88k5T{#$XyZ-!h>sEi=Gy2*OeNOj&5_r@{ z?t{XmvT~8BqpR1*%XfjUUj?Lp14w58sh2^@>JT8zuwk%bsIrh{fKe>)e5+aoDM8!+ zW%j#ZqH@n?z-@xDxBOqr((`{9fJxA6215MRdqv(EOJFsNluD(dOXW3B_mRkoN2jVN zYPtUkRL|nN6}`!-?=mxc$ckvyyft9sv(k7JZljV9Zkcl#yhA{OV}r*3&Wnnhh9guJ z@~_$lBI*oK&|#ZYNQ;)8C1V0-ed6qyLcywNnSzsv{J^XZ}Te} zzxwsnKXU@nD0~pfdsT6Dr}cr!KJzl(53D{8tWGi>u`=P7-a|s5P=t3c8ORjZ`dX&L z3bLe@@dd(ILY1L;ofH=kLXtZv)FO;>02CTvULzQ3Ot5^$M#C~vU`D7HUY7lBx5ef? ziF_YnFI+&?>6H2-e5fn9hdA=0f>I7aDTep$_C?{jV3~C!i4^6jTl(vKxxzbCN%B;V zMURC7JgW_JAatU`B%hulQaQv}P9UNp`7cZF@kWt;2@a=Jfp!iJ1_Jj~%FGo4BOc7> zRxH1fkcVdYXf1p>Tt|4>wi5$1GQt>&EbO)+!j^8oy0{oUy zBLP0QY*rQmYb$3PyLC%J1D8zJ-N>e~>LWWbL3amE6px3q0DqwB&GpSyI8QW-)p|%AOzqok4B^9fR#BG1qAn23Tpl> zPy87#s-lwz?*Lb*(D5nv#%Da9SMb4(Rb&i?z9uJUUe0&Fn)%|4xT&&Z1{nV z4ZsGLNT9dcRcTCXg;++D{kQpr2`PBbW=JenAdG_r*7>Z>kadz2rJw$ks2W*CRY+qY zwrNvBQX__-?Lpft&Pa{vzjprYS)FW7Y zAN>R>|4~oMGrGVDf<#-%6HtUPV{1*ZNIpj&!bEuwk%SNPvdZ7W8V=lk1qyP{4wUAk z1WgidB*=1|;w4qm{RFr>y!J=*)Y?CDE<6Do3EZI&v{hV*2OV~a=$#~TI>FncV}4)D`J%;Kg=Q1 zNG<0M`VEXml+Bmbwwy+qF3Y6c-yO^3DRG5ElI+zYf~>iG@q+B1EUJUox^j{~o$^Jz z262`K%aT@7_HWs<`xX>UB)~I7j|Sz3-|7_IQeY_vnexPQi4F&?NJVm_=prfK*zE4C zPs}&u($fsCs{mITRmdG!%Trz)El1dDrCn16;xb3`yx`k1ft)`?!wvu>J79(BVi3WH z0fAs9!3lNZ+`PyO^{@3 zC7=nBKjL~p->8*8#gZH*!=!<+4&Z?xpO5R1oWUu4UXQ!KTj@SL=|r=Lfz^`vcWpi4 z66MHSPv~>$bhjB!6|#v$XIS@nZ|}?rBTkordXnj}QLoRPPF-=k8VhygYKdSeA-e;$ z_yUZd%{dPO!xP+IV0imX_CgHXa|^L7;6Buf4}Du;RjeYp^HvDHM& z*F8^^b!*?^D$|suMk~PXL%Y%Ub{?5ur^(y4*0zPrw;UbbCi*sypG;E657UusvXKZD zh6hu3ZXat=CEj~@cxdYtwO+S>L(FiLKNpOvD6kyJz$1k^<)2^N~7WN;7_ zx3GgFBSO$!IW(CLc4s50lpy(K$;(6dCnu}{;?ztygZht31Izj2s7*tM18iL`{2r-y zfAVdxW~>%h!1}OpQ)($4Ol14wVKYH}{$skSBI(w;eE*B12P>m)S}B@n0;Al(TAdDp z8dYu<)EMtiun6B?&9Wjg%h81{vjyCeY1@0X1>SNEfQojFGh5}e^%+Y3uI%i&zUWom zsq9r7sJoGulb&E=c$frF?|Z81@`cle;7)do>eO);DhD?>g~60p({kx#!Z3_osamW! z(p?)9Nka5SLduW-o;1d`4g}?RC>iF;6lM7E=2bO+kYlShEjUz93f>YH91!Z!6(;*J-|5d5V zWO%-BW_p{Tbs37!hfWhLjbhQB_v{_)nRJhm0*@4J-4dBPB%CpggAcvH~i9G6EBdPw6b#`=(s+8{zhh+rJ z)tI27VMY#g&N%$laZJ6tm!0p8qjH*o8KAXPFy1LsG{E${6)PZ$qO0`I@o_^(_sk)* z@Ck~$w8P6+%Tz^m%3XI6>&g{wc12KUIJ)-zwFY?_@HtRnsJvJ+!NrW8Ezm$inb8)m zm)LT>&da1Nb0B%k6Jgk348T-B9F#hV^`JwjClgA0MQ3u*10NkrCYlP6g62@JIGT_7 zeR@^!>}^ET^^m*Uj3jv{d}*HV4DeS9^hB~Z5lK{&-_RYySvcod zxuGwp-P2Av<&T)X$!N&O%Hxd@mAoa~;?fO(>>6;XwVn`SC0?)P%eHlum|3_4$1a<|0Hd&#cw@`&vUIzVxR_&YBivi1-ax)Tl`k%I zbnxL+XPU^Fl5f;>3(o8OR3)+!gm{WdKmwK==D3r0%KZysGVbFI9~KUkXy8INwrsTc z+0VH=g}y+T-&Nfp#KV~mNmSylA=AkR#ucw~P)7Ka_Ls2YASll8!4OXyJyKfE>Rz&Y zA>s%!nclPZ3vxNI#nwRkSx>_B^|QVu>vi12=80np)lr7KT&$0&sc&I34+q;M7)a|1K(jEtI`Yb>&|NQ@;jYZVqOKRxXW@!Ak)T zEzdmIC3vtwt`k}?8+J1-=(mGWOS3bXwhdcsQxvxxU<+&rKk>(4p>J@b?-p8&H*$k&$Si`OA7gxKrFef2s^|A8!!a~2sf zeSnCQ9O>!YzR3Gd9~b=9VklB{NRCHa@GI%S6TS$mc@!Pdk`&&r*Au-iZ;5y1Q!H3Y zC0)k8Z2{v1@9j}>xttr#snmG{dT7BHdqsU=@spexIM z^u4ZpSphBd6r)-TYKzva8=ZMpZN2lCs8esN63?)yX+tGN=^5>s(UtC8IMo}-h66^3 z&*Vk9WCYr3e`~Y(v!<zxM*@l_2h4^s=IH&6wAo$j&P9^KkZV*8ie3ltQ%8TH+%sSDC(@OeKc3J!JQ`Y* zWMp-6Qn zG*5BPV09c!Grtp5SOhe!-YXV0*b>jUqHXj55X+UfFyGe980cf5S`AFN0!GZh2mrrjq6UW&4q!2FCN`s zs-bYF^5DSR26R^{)M4?P7IYh1HIhpyC~x0W>5gvjDoG^a;u5S<40Q~DO`K{Z5wS-L z>c)c4WvV{i)q=eP`hZD|gHf{8OA4?VZ-KEcjR=dZ7}U1&17KGSCO=4<9$AZSDo2vP z6)^oE#`&PZXcQ{l6MDuN@wkS|0&hlZ6qVfIzM-?=5?Hp5f(ZVy&Xn& zaZ`3yiaqCbCc@r$5~XCee_~+PS76pw|LwXzZTl3EpVy!KuTYRRTI0V>K^ATRs$eVK z1Ly%6y{DQq^Syy$e>gMU8Blu$n*nsnW}^;Sl>IVzQ1kDql|V(k;1DK@F}P=SWO0p> zkr<*hlJa^SD3uLKJnDpQir4!(svqdw5_N_h&Ynjyb4ws*zY%N^v$ly*(#Rg|H;nng zNJ4ddT?Qc|NR#|Xb_H{3#pw=pEkzyal-{D?0dVg!aIuHQ{I(8Z@C>xN4M3-L9=1}# zHmGd{*eF=OT?=gX#S6SPOT(~VZ6ye9$*`dWZSaB8A z>suA%_lCL)jd-{>EP67o{NjV2ptpgZdlp|&y|&rOQh-Cfg@Jgu2bu`7T!)|W-_ge+ zy)ec)>svX$Ulry{$nrQHL)U#vklUQp(yd4jf+v6+NW=hGgbZxl31PNbzzT}dT-(u- zWj*U~^j5NpsRSHwGsAImj89!LJAF7VcOlyrQoP>L9#nuK5KAhPQ}wrA!~oS9$r5HG zd$0syu4s>Eww2&a#=`RINp(*n*U)`tH4#dO6mdS?#qujCKVfn)08N$x^vuUBvx;6n zfMF>@^jBD9#Rmo#`!S%(EVhRq&zA03Mw6Fp(?LYZv=pGOHmoKS1L{?eP0KWk_nfZ>nu4uX)K%|%0gu5N;ni<@uIekJC1!6 zKEV080(dLSa#DFj>p)&B1H%^47&cjlQ_;2?Hgd^Pk(Wmx9F40wbOfH)MO>0vinw6D zg`RFfqkI6noAmnqMXwWE)d(cvc6oWPfC3L_QPxwt5p|2bSl2p@)mG)j#~#9J0;@Q& z9?VDv$l0^O;AoFV*lhdlR!3aue8P-n4;XtRm)SO2_5?#bs&y@HZ`Ji!Wj)s2*d1H` z7kDINfe76QEnz|(kp3(ZQWAOv8e~3#9S2NfOKjR1K-X$?gGN96TquaFCyxTIIElIN zi`N3!V@EWi@$I#ACOCx5ttbnqU{uMB;&M8%agL~XyuGnRf>bA_GuR&?0Wo3~AFNkm z)q|xjN1{v;iAU$>G_o8dLtDM-sq`3@3at$c*m5_TAW-feAlUu^OR}izz~bz8c+^q} zifcm3XPqib%IUrhXoN=N-RjE0tFI!R zCeFEm-&oEk7Pd@E4!4_srZBxUIgv|yCG}0jS5%K3J9fOVC7iu+C>)N_(+hWwPkrRF zP3WA68d!T)rEH#}Y@ANskXCO!x$BrNCbtO^Dyl@`Dzn~qa%DL;ntqmSx-Ol*^Uk~O zDk!nr`j4E1hFSYLtj!CkfIJ16cmuOG(4@>p)cr6L>x^jY-bQ1X1}|_PWeIATb?e)* z3#@?Em^5J!y9Hy$Hm>Z?;9VO>2vsb+V)GLAox4q!%cZ(|!=!;O36u?;;#DPhbdgd? z@`?*b;qz)6#u>HqUNrAhs$aLzyCIkIN7G)f6L}R;;XN5msdy!~SIEcQ8vmaJ>>ofKVvyU~2P?zK8ZnoxQEw?E;NJ3CiV|rpf!Q)I zBF3+eQwxnm*>OymTzE&cj;vtDNb1v*-Lo#q8M*UV4Xdx+2xn)?z0jt;=5CcQ?`gv(Gj2h6^0D5e5XE7Gtf}%K=tE-|_ zi0g@y9$!b%NiIW=Wq|A@YDp0MkDc)Ny08<~zWbx`YJ`X zEh(}?8mv1iyZrLC?{%Tyj$BXOnn+I)t+Xi>Iq??j+_g`8^~9c;jY<+*Lp*sHoAjVE zUk~ltI*~_h75p`1|3PmSf27+Ui%r-6Os@a&UpK)|p8ii|^|=>ORrNtg{xz^l%8Pft zp})keaRDL<#$&a7Hm6?HN7o{pm14kUyEr4r+Az+WDJJ*bd>MXCpKZ`=j)ufT_?hCg z3UpiEm`zmsNp=1sG?|O_W>`rmnOum@bRcc@9)nusHTAiBDx!dP zTNk-MIqgONyy&VGE?@7%Q-0>K`Yj~&zB_!O_|*rOuEI`4$TlMdZ5br&Ze+em>u{Ff}Sf5w2 zGz2pmur;=shNfVcZHo@mm?pN8xj;$e1J}RjZXUK8G*pC$5fCDjevb!F1H{?MMkB z*Fq_lS2lq4M-FWE2adkOz%rBGH#F(?#lo8)IYY^vZ6&eNFJ^q9{Qm7`KrClt({KJ# zI4%YcyNIq7n9ceATAkbriJ5@Jbg^{=wl>J1YcC*K{9u`qfDRS0&UJ13!dTM>uTW!Y zlyc&NMI+))_jdKxHZdBBit3W9g8%rq>?#j;XT#|bUy1NX;TGO%Wl_f3>qVNJ7)&SY z6_oO*sxOev)?;5#2j&%0%BT9`!Fa+wE0eeC*!AlFekBY^keBH}`Y@LQc2KDd?6mqU zLRMohtC*9D%n4!gSMMX61nd{`07`h!_pa-uN)a_3(rwr>ieM`!fj*4=)Oa-H!x=F` z0XS>?9&{=Rrd4nCbDE`h(j(R`V3PGLX2k710<1IwBeFvh&z@x&V3Z1FWz~`4Sx!^P z*p*1+6#0MY3jH*CC|dh~wel|@Tig6&p0pB5ro^}CiYlTnhCV3!>8BH+TtL{$cCrb$ zP!`PJDIps`D&%M6$EW}Z;eI}=28@y2@-rBVK#y3^lS(xfa4UrrlB&dm7G9!C;!T2+ z-W=(5Ym+0`L4|i?_aE4Lx+t*yuSlA_O7F({RfgSJWtg=sE)Z##k7CMgmj`EHt|YQ& zxG>clb_l8-5q&G8vT?cT!X_=)PLt3#r;44yq)YP1uEs7WS%_wQs$WIbCAu02_e&Zi zPa%SG<7u*mTPp#<+;MhiL}?pR`R*LAri+!NLW7xPzKXiIWVWVKzR0J^*a79q;VC+W)!OlMehF!6zcc5cws&AJzFjJY9J)8CZ`LnG3<32gX@8 z|Jw_8=TDK9U^bZbE61?~2R2|JWctO|o}j;p{^hV=IS7xyrJ(@wR{6CjKtJ@F(O;nJ zdK&Qe{kuKtc9sp(LQ_S1zc-7Wpp_X@SpmaE?dRl`_0DRFB~N$Bv!PBNAvarVExzzA zW%N$B+FM_*vz!lfMAGiKj74*D?%OQZWIfVyy8(=?mh6OEwv0V5LeM9`WK`#wmA49} zVOp@61@M_kGh||a3x9!!nh4eCHKM4?aVQP?oJLnqufCC2WuE-A=opS{ncMT8Fa0_F z0>UU%O&nkw1`{-j)8CNPbDzD6R4>2&&)L32Poo0;UUX&$VdV}nPq11-yx;N!@nDON zFm#9ytjJe9U#|kRwS7J2D~l{l?nAnPInTBi$q>r~6}4FiU+vANSfF9)!>`QjIdE?> z7U=xp2d+93(!}7iM#DJ89bAp*LB|0qb81)qBURY;2-2QKYFH! zj0~Cx70W+^wgknCX1fc|FwKB{Na#O-CbQrygK370y;`?!^--?LKtbWPFNA$+7|>Ar zz}5wsf<_I!iJ(@nrMk$VXGe5akD!iO3#WXT$O+6Q9@A*Zp|QQMSOGMzDE@=FENj6L zogJMdMs64!)M^nl9U@nvNmlR;X5#5B2)nUS!ROxhKC6`3!}eWn7dgL~r=LH11lyyb zi;#K!i}ulBSBoqnv06?EE=S9KK@h8XoGW}moan6$a>IX!4oZzW>DbB)=d2W zf@Zo5{8PN7X0ofjfl#K4)@4R!F5(5s$li40-x+k_h8aI@?{on@b#Wj5dXN4i1Wo#{ zy?SXi*4p6WLe*vMXS3dokItaixyYo5)ry})PHhfYzz&VjY8M0{;EYzT%u+Q7u3Ot- zFpbhG%K@{=HWxAF$1DotO#X`Vc`jNT&b(porcIQ8-@Ex6ZjWy&cP3>~GMsQ>_Oo=> zH&?$QIH*RZ`2#y0#PX0n+D=ySUNs|(_DRB-N3c;0f6txJnAmZ$xFrB5TA6t~VsNz_da2#3(}Exr2pJYQEfZ+=Aobsh0^laK zHXUUm)lwX7Bjm4>ua|n}oT#UXMz9{UuN&q63F(NNSF2+a)BUp!Z0r$1(}|?_jQ3We z#Nk)Xwq3fdyXzK~yGG~5_}CT~`J0j9oCD6LC_Cd_lL(G{50h-rcc@yMsApWLDB}f( zF6raL$Arq3^kc8JQKWYRG{{E)^AKox5Ie%$3k`DW`oouROTb#>t;H*5C9LGYC3>}5 z?Rm^1Fm)oswy+=DO^|U8i=ij4 zRkUqKT%w+Q*X3y4bq)`)^?$%_H10{?5J8VSXgG!vEE(c1_nViq(v;cC%n{kC+Ze+Z zxVN5)m2Alwzmg=A#NA(WDK20B?`0SVl633AYPU;ZuvIBzMjQvX1^L&ReFR$q(8S?44tty8RC3;PmyU!wI)f{U?@bynT2G zF>YTY9tt=kOp3k%%s&Opv)(G~%*$+1n@w0f1d|GedWH;(1eP*sVQc{X;Lzx;@i0VC z(>9`QVjyeCB+B}+l@L?#R!_=#qJTNG@ZH-SMO-fZx)L^&b74uw-95q=i0159$l;rz z$1g%WDoDo1tDz{Matb@rXe;cMKpr*dPy_nl_q8?weBo1z*R^yCkBw7&n{r+0LLv~R z*f~#|B6BzlxLdcn9@? z%bS7A1CZQfz-85{dCgjt_srL^q>$kdEVu5)FgGVuv(uzDeqr=%--vw!2|r{2+W510 z_<|d?F+0#tXLp?}^Jvr*4{Zr!35%$L5s_f9`D(!_h2xsK@1{@Q@R&#FPi(Ea&2*On zdu1Ru3=3Ea1hA2S^*zDAsUwuYHlc4`e)6#YXyCvQ^6S8^L;8S-%~K>C6eS;`Eh^{y zjj>WXfAzj=c5d|qH*M|S+3)K>r!H#lyP@9D6mzhv3yUB4woH99k8bUo9d$=f0!N1t z7o8%N^L-xv*X{E_-!;-Htws;R-Ov3}_~50#$+Y_-naxY}BESXfTYq<>g@xCgMx^oohrbTOG#bes1@Du1 zeVKlqJA~&hlA~*{((T9!Zs!hLuK;%y4RBYsj*pSIVxNHkHf!0=&13u=#(y85=Sc^* z2l$x7Gv;uOjrZdG5%SL%^FwYgxu4q$yv^a<9Qys{D7xEd4cC6m?uEJl;1=&XZ(vnD zz#Zq;xQ&4QY5MN9p9Ah)xZeVMo^T8IB0e7`_v5+NJV^rAevV_{l2q_YW85$K7m;tm zeenu0oM3J{+5Pw;aLI9t7Jf#!Lpb*m?#Jl(4ZPosdmR>@;_k;iK8M%0Fz1)KPlNX0 z9s0{Pi8~-X1wOe=c*WwV7L!FIqp&WoqU(WBJG7k@8h_aJ={P1 zq|G!wywBm= zA}68uX$0#wmm!w813OKpLa-ZP7fZb%j!~KB!1*t*@c5?S-|EtUbH-uC<5P?q9oe?drAKns2q|+;5(H z|GBrHd-B!)`Rcb`{l=?bd-bcY{*PDx=GDLc?p5DC_T8fvl$g-}*MCi}l5TQ)7iX8! z>CKE)@e zCaE;j%g4H!v|?t=Ojnbyq>sM92Mlg%y6K-zFE3A>rGe?Gvw42HNvHSRmTo#t989kq zZ3;VXd!AB?+cYy*#xv~f^SVK%;%OY3Q_uT}AJ@z#w`1|jrRRf$jqGX)l_pRj#Y~gWFYUT)5rboA7SqigJ8)`ZDVA;y zvZKMJrSw^QG-g!7sn(}-vzJ}(Wg|bcV=)bEoLNaXwH=GgIFn}AG4dn(B0! z{rNHr>k2-aQzqEOoLXtp!^fKB2qw~$JG+`{CCz5511y0%j3Jos#PSjwvOHtWR;xU( z>fH3~RA*+LaU7M48Odqig_JRcX@I_*o;_o(Frr$>=3&2$WtY|j#;HCJZrN4Q?+ z>&+a#g)gszcHx(F#{cHj3oa+e&w@lTGqcnQCU#fOQaal_x-!$%^i%*sI^A?nZ(@+) z02FF^*r#3i}`QqsV|5lp=4onB6#Sxz^-KwDSSSJ}L0@vLxkW+~TnU1{Fd z)$~_3?_Aux+ddh~;Jn{DAE=z=eA9au&-#4RO|ml8^p=^(fwiX2y4f!eeloe zN8oAkgHhq|XX|G7EH-`SRC>0lgZ*3(?B%KS^2ftrg7PmvH#IfIFc82svT`<{l$&oZ z$FgAWAYe4gUCmJCEMf0q;G4ZiDrb529<7`e*n6yUR%Gw-%2|oMCn{%U_MWVqRoHu~ za#m&U~CT{r>M zi#DhX&I{qo0KPQll?8n4-2{B>JqP&Mdmiwy_X6N!??u4J-b;Xwy>|dU_TCBj*n4*+ zJ!%P3PbIzF3@@jl^vE*fi50vzyBW{+R+>HKW)I}C3Q?E`$6it(&6PouDfWMJ1lX~w zS!TrIIkz$xGx3Buz==2ODY)My9)gK5 zl`KJtfEXee4i@A!Gr=8Kn6+Y);PJbqNzXqE%re@>MH({@3oTrjqd?P!^-E0+$|Rkh zGw0bu85PIc*DPRcOgFhbi{0r_7<4v!YM;bS*GbWo^7yn7m)3n3n~1;4dCO*tTG0Gm z&GGirEbO<)wagrx*Mi(8@dWfoH^bswGc>)pBL90385VX75iz&`pATu^D*qC2| zgEnP@&e++6q;*5`Y=Gt}XEoRw#{CxO|9UJve<=q0&u}rrH`8OI=3p#y0l#FHTJxNT z0v;~6v9f?qBjpUE8N*8pnspRx1PTmW?BSh2!u{RNI;4El>zv<=+mV33*}#}BmF5uM zwlXZv0^R937~wXywpAEIH@5=K+bho_Ai=>791wP}v+_L3%5bm?2iBS0Y|K2)>|tZr z!Cp3o9qeOc*unnF3($tsI9kLJY&(vYDlZ`HVMhmWWS_f?jU(*bK{n1hx}1%(j;>(i ztfNEhnX?$S%$~^(R@gJy!D04Hc5sA^S-`lss5BJ^ zm1fD(=mw=(rt(;W>x#|U8mkU!jq?sF`5W*Vb1W}7s0431s0438JKo^;w#`|7?>MOB z7adgccd0q<_+4^P2`)RR1n)t6tikV!%~^i$JE-IzIH=@n)I8?+U3E|iK6FqCKI&g@ zw^z2+NcVau5PX`OCeCGZ$ph7Bwi@h7ukM`C2ZS5I?@n?#X|8dubGLlOnzST0dbtPa zQ?%I~?PN&H;fEvph!uiclQ&y5&=!z(a_z~Rl3>x?S9({Ts`Z$)6WkE2&1ycAs`YCA zMpRsZq~^M7k807^(Tie2iM9C|OUVZPZSIeDg#sOYH_Y~xYUpE5(y5JbCL*bny(;*t zzx#;zv1pWlFE2~r8zMBM%oM-CTfRpFpECnx%Y3{2JM&C+`xe_>{&7pEd|RcY5rt4I z_&Te@hWNtuI_8Q&w(2;@_eQ?2w()x!+(YPC0pN7 zxE7-=S0$>fC9t-+5?J+7S<|$yDbklXMwE89MpL%U?Ql@PG;a&4+ilJE%8jAbGOJGu z_87s+S*f=z;#rA0gG4DSydR?t&9r3|!9y%%Y^%p^k+L#g)nhZ)@a_Cob=jZ? z{!+e>&6cHte~@7gn;sf@!lh5e>*+*2O@^QG@_EnZM&hI4nT2e{i%fa>*D_vU)(@op i@U(vhf>Xt^pIa;h(+hquUG`mtiMZOI%P1nkoqqrx3emU# literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff b/frontends/desktop/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff new file mode 100644 index 0000000000000000000000000000000000000000..67807b0bd4f867853271f5917fb3adf377f93f53 GIT binary patch literal 19412 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff b/frontends/desktop/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff new file mode 100644 index 0000000000000000000000000000000000000000..6f43b594b6c1d863a0e3f93b001f8dd503316464 GIT binary patch literal 19676 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 b/frontends/desktop/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b50920e138807f385d0b0359f4f0f09891f18406 GIT binary patch literal 16988 zcmV(>K-j-`Pew8T0RR91076^<4gdfE0E4su073x(0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 b/frontends/desktop/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..eb24a7ba282b03d830fa6c63ee897d92a5188736 GIT binary patch literal 26272 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�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 bkH82T%!~T~dOL3iZSfI!+IWoKhyte*`46Vs literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff b/frontends/desktop/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff new file mode 100644 index 0000000000000000000000000000000000000000..21f5812968c42392a3eaea9b0c6320870b6b8b38 GIT binary patch literal 30772 zcmY&;Q;;r9tnD|p_t>^=+qP}nwr$(?9^1C|*tX7p>YkU|Rjay_TB|yF>U1UU@?v5D zAi#gig9QNpzx#sB|Fi%1{Qoa`WqKw6z~bmXukwE|5bcxVG`2N#001mG003Yt002aV zZ0}US*v*9i0C1}KkHhsJw190f+07ixZ2@XBpBBLOzc5i3*0K1{`Clx<|JelpfdmQz z0^Y*b#p6F-%zv@`#{+elC*ydxu{ZvYXM*vckNZFH^=qeE+ZuZOcdzl=|7i(;=HTb; z3~f#Si}}CYfb##-dgxdCCOFtTy8r+#A^+u71^_^asJbaN9Tqy4u;eOgen$MYFMjKr&ti>na+jqz-Ybx;jUT7rpi=M zufa(yA-TkdCn1q)EGvM2_hiax`gmi(0EflrdclzrY4)wlE?XoOGM65Zbzu31KryOv zDKlP~=VUIvYc(&_n4V2Nx|(ZkU{Ya`SLxl|_7eInvM;JKdC-~hF59%J{8gZ8s*xA(-Zy@VkPzVn;oDCiUoZ~y zd`=a4_!T~VIKf`-zr{LHRR`Z6oArG{z)^ZL&nGLA+uSoxbS8Ol`V7aokBT3Xo(hP( z+9AA$K0@4d8K?G(+Z{kE=#z$hPB}TJAG|HIE* zTQ)h#44y8HVIs_R_t=|UHjp!==565A(?KYTQlro?#(5^lyUz(WLb73Dy7B!}-xD1P zBH1c+Te}vNYtBs%bFya8%x)LtSejr>!emav;;Tc**d7miFAk0r&T!Ij7OY$jnucxy z%HMehZ4oCYujr8myR;h2H!=^$hH>=^?wg_l19r=c?+gwXnd~g$Cboc^n#T;Gt@e15 zn;uQUSO<7RPYBQesCs?#bF7jh#u$!u`;-2GfOQ>eAgjw|dNTNpOt#&dof28b+4b-D z1fmEtM39qlX9b~H_kRdEv@cz%FS=d&YVOA|qbvJy8))2-CdMgS5Wl}~c^%9v&l3l- zS+#zbDbs7Mcu{2*_CV!qJn2B{UA9m%FVT}&&KZ`nx4;WB%$(@KPfUVSfPtjFo-EwJfkt27^E z8Z)JXmXhG|m;gy3`tV#s08jr&+bll_DV@5LksaIScMWbwYM|7_m z*q7eiB(rN%wd`+50sA4=p8%zW24;l;l4=}Qre-<E_K3s81mK+|tN8@qM z@~FGC@FbM5wrjISp(V$f=I=6`o)0`4&8lfVAS#R~s{pImvBny$#a@WXCicNcM3rwr z`-uMJHht8Q6Am=sG#SWExcG^#6K@)Ywm`%UXh>yIZIxgkcN<5=Rp4C$Hy4XsKO|q6 z8Ah@dL1L9~vD(b4?ty|*nqYZL65V+vT2wCqWK=vUKmSi}pA38d*ZRRP<9Ny^nKR_g zJ!Mr2PCX~Dn0GYi;7d{_r@d3urdBG|ab=$i%To_h)LHWcu9_x}06{$Beo8A2s6@(^4B_=o#4

Yqh7OdB% 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�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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf b/frontends/desktop/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dd45e1ed2e18b32c516d9b481ebed3cb8bffa711 GIT binary patch literal 53580 zcmd442bd&Rc`n@NRIci-?&_|t>YUT0p3ptrljF|J##wFDMrl{lYJ<`$AR#0nAqkX0 zB*_AcWPEL|Ot6Fyw%{5tV8CQ!urb%h27>@|eYu1m8*T6Zo>M&=KoUHD{`)-t&g@Kg zRdv<(edo*JjF0$yKGS!HPw*Yux?^x;=`S{p`+QG+5JwMPdez~Rm4EvFoX_`^?ehsc zFTL@G9K9;u_W3?l!})!epFDciCG}Ic`g|WchMV}09=`r0j)#1{udKsw_2`v1U;ang zqqx`bO~kGc*cp6`!wRHLPmGDvmsI z*~kcup8C-U`BPl8>Lb3tqM!E#eQBTiv=h=P9qEfSTa6JXYEwln7OE8*aqz}_J=$!o z7UQvUjZiC0No_WsO9mo67A?{@M+#7xRgd8%o*f;Adap z7`erk{R?~jMllgDR&oQ=t)6u71r7nWvC}hx2H1A^4g$7)yG9gFg?0n5F_>%`Rl2Vk zS@6aqNKsMjF33eiW)uPv;nDW_Z*UBE0+PjwgdglPjrN%N)7~CY^oQv-@=?5!bvbYW zc`~TW7hP;eZ@5m@gX{wD@HrQlp^w#qxue_+?)KiMBp9)GK>h2_pSM9N-iiqZLd zfhqyNBy8S71ljPe(3JowQ+`SJr4k5AxI&T%er^Wa``V{JLq0-j#9Xz|4Rs5=j&G^x88+PKDM3+Xqqt5z`Sj zn{mbT9x>RH=o#8Lp45f9d{HGU5Gmc8nWti;Sa0+SGNqH6K>DW}&pJ7wIwBGhC6p3- zXK&xk0oPFLbrP8D8@Hs0lXaaeq3aCtpMnui9U5IZ5!DCl;feZOSc

viU|OFj=e4 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 T)YS6}E-Q5R&CfXgJ?`xQe`ny2 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 b/frontends/desktop/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..29657023adc09956249f6295746c8ce4469b50d3 GIT binary patch literal 16400 zcmV+rK<~eIPew8T0RR9106-7`4gdfE0D43K06(+<0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff b/frontends/desktop/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff new file mode 100644 index 0000000000000000000000000000000000000000..0ae390d74c9f665cf8b1e5ea5483395da7513444 GIT binary patch literal 18668 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�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 J00IC101u*7EU^Fp literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff b/frontends/desktop/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff new file mode 100644 index 0000000000000000000000000000000000000000..eb5159d4c1ca83fb92b3190223698427df0e010c GIT binary patch literal 18748 zcmY(KV{~sl(CGiQZQHhOoZ7bCp4zr;+qP}@)a|L=Q@d}Ud*2WDPS$THGixT<$;#Rv zGCOYa;^F`xz>i4r0^t9vJ!Su|{$Kn57kOm{W&nV%`^T#MgMnCtOo_3rp#uQGkNBe} z{xA(n^1^29>Ou$rh<*I%fH;6L&3utxNs-sXnRKe1A*KR%HE z3!=G=hZz6>Bnkj<%>n@WuAwnb85X97CIA30>W>fme;8v3|FQTn{=7@}k52FdDFi-n zsfDeJ`;VXOPrSkp?GF<0G&c6eKYl#_jj{6|tRy&!wubIMs@uCFQ%mqlgW|L&R{miT3OGXxosjhEk7N2MOo3FTxj0^^rd!OlPSx3D& zi)_yKqvM{0hOWnoi)`hxN*@0JPeQ~O$PFN5!~j8(jc_%b1*Ol6xwQ)m{kJOak7OO? zo{zL!s24#&I2Dk|xg*&C4T4M7%^1(ER%tPdRmlnsDzuJxhRxQ$a@~q~*>iw8qN zo`isapt~`IAqWr=pf48ous4J1ZOdk!yC%F%r$Y*lti8MYsOz}YuBzB<`<8Y}RRkqj zoo=ZjS)s|ICa4f_V{l~*Su5%O&E$CElN%odXcJy+q;O*7qiCm(R{Ir& z_IJ!gfgPIXhF{l3f!F-qFLtqgL%}jwtV&dz+H~yQ4#RO1y<)wzpMd}6KNlVgb2`3`UJK|*zEshFwUNS5 zC6%-UB-j+9Nv*j1g*bCdw689CnRMq$o=Dt_>RN~ny=N{hY$b+L-VSgYoh}Oxdm1q7 zA(jN|8VDLqLu1Uvp-G?}4p2hx?XSFb5GBZRzvh}~+z=onD(%|XJ93W+@~^N&;;EM+ zoVGX3XU)hQnbFG+rR}o>H1s#CTo1eR#W0`C73tZpm06Z8IZ;(MYvtG(z)@_3^R%kO z*3mr+C^}ivsPZUc{qyoj4GkUzHHAE!h|(1Gu{?v5He&J(M;1l^0-w=KLPo;X=f#1$ zi+Y^s>dgr9Moj31gf(tBU2h^N9bcPMrX|kV45d~Oz6VbDCX1fE`4(4q{5`SiwKo(X zHnD0_HY_XZuez&U1H{mO>ieByK<|AESpF(|A z8|i?G#EEiGvsnf!?#j!998j!Ti+dJ*ymUe_CXVjTo^p!iv{*hXzwBv+!s6dFmA zMGW;4>e3l&@yhyJH(!_b-}P|jtRxbpu`EWXlbZw@&E_wT$=YW|3DJqW?TrmVsdB>)ugcV!5AlK6OhU zN&e^H;ERPm@B~}$h}Z`;82z3qfzuiow-|!u*qK(^Vd%0?P`OIgh@HW|5N$P#S?qX8 zxpQ&-iRi|0-7eQ1O9TCag3zUc2W-}EbTRRIUeK~z5>BzzC21p)Azdi>; z$LOq}6sNkv(#R1j)i_b}=bIeWzfCPxp_U5@_dziO-qLvVQG*Vww$v$fX}#u_&05P6 z%bdn$-zL1gtu%XQ)d>911j*Uek~uRi)?yEMvmv`2?P_U}=c)|WYX@)$piwY=fy2B5 z9{c)_BVona!r1CdAe*6;-VR>F=@lyn`>vgfFrj99PeVez%slMu9aSgFY83)W^8uoZ zGgh9%uyzycu}FUtIwHzKxZ~bl4htssZN}<>n$6{&*z8_w2kt~^)U7U#q#rdBlkTwC>v0R@8#85t!F?eq0cq#~ALE5(LZ zI5iJC+uns#YVyE36F7*I9Jz+gPRQhIu(vF=lAh_r6IWDomoLOiYyDX1JWwrz136>u zIkQ7BU|u7u64Se5p2bTp8g7&8yX^>ymykxQg~}mk6&Te;WB~uC=ksr|q^y z&i@aI7?V+sHJ2VUx*Nxi&U6IGni7?na`tk)=($eA)vI{gjTf?{JVS$%_?Uk0QxE_Y zpHLs+uT`>0iS~9JD5`r!J6B!lznm-$L?~LKq32MA2XMICrNlm(eA9=GVF7sCIwk=7 zx1Xwp_6_@uJ%gtfzegVpjEpJUr0MB5ZHpgDTkg<$MCc;0pR=6K7FD6jlfK+ddRxE6 zR>T5HJVz;*y8msK(i|Th#*vUI$8xsZx$XHUGTJI&`O1{KV~6cgVyXqNymL=|`e@mZ}+ z@;n|7F^_)U_5qDoFnlfcJ((4gP4<+Af@JcZ$=EE)$)s6(V|Pa#4)6G2ykBQ|T=0tB zH6mf0&=3Co>Sg?x4*-Pdy+IZL_B-y*?A>U@<*eTO{y~7aNzcyGd1b$fZ573AI#O-4 zcImH{KO>IeB`bRE9HjA8thlDBx0O%53O6{x0XM2wsdT;S-F{Z94Co)P?+gw>loK)@ zk*;(!K&lU*74JnW6Dm+5CK6{uO>J!-vdn%=R9vQZM2_MO+MAku%J(*25*H8a1mBug z!k*|5>~Rt*`Ipk~`D_$3t0;p3kPdH<3XcqO%k4h)3hzH)Bq1A=8>$Qcq$$F)&^5km zWD}!Zzy{dujn&6N2WDfDBPIJ_f$jER+mpJsNnX;I_E>HHdcu*Q&*|R2yS*1e7w*h| zw&EyjxK_1#NYxwAytTWEg`v;6Ph*y#&C%g_dJw-9w0`;p;ie2$5Pu_kC;W%K{}FN4 zg(=7hPJ%k|cvX&n?y;o!`N={6_@7xiu!@3ri!(+%JLY0@W!D!^0?cZk*6vlSq$=N*K1Cs5y=($$Jfb^Ge8UJ^Oht;(?e_R>TSb*&mRHDJKL>DJ|hrZmRM|rGEYLx3B4jgQWNI=8k)nprL8c3v#>>;>F0^pTe5!Fnj z;&oRGn3os4CRVtR1)@~~i~={DcHj;JfeRubAH9;}9N*Rt4B;+T4q*9O{nD zBsEoM-Zo@Q>}7-%O2gd!Vh~9$BthS`_>n*e0sR@#@Ti?fH^)2lX;l8`Zm!c>k+2Ut zWu!pvwkWuO=Vg&4<~s?~LyxvtG##P#kg_VKUCF4%Yqx^aT&rK3na6k>=W@^IL7Uz~ z8TPdFO(S6YPLNd=_RRp?z)@jOu1rE5fYy}a8!pg1cp^5ildqk6V!u;i9~=M9`Py%T ze)&A|7njTTFcMMq$@aM6VzB_X}_X z1F;K)Op2?Gz~=>2fDSI0-D^4>?4;UmwRF_QfTZ#O5yYuAHzD9-Z#rMtwlUa3+}n`* zalq2cVkz=4Z#&+#tT%{HW@NgTCyhM&{~Oh1;A?DS66kw#m-1Tkd7b`OXD3iKCIoM;`;SaA^6N1>_@S_j?GE_+-Be5dSy9|(e3ATVEbo8`xZxLO90*rf)pgA zWdY8foA7n;D@GsT*X1J61YdQ&5&h3Va)o>BhD}lq(>;o@h2FEtT(W z4MYaZXIR@)R7SDy$@@i~an{&+BBZ5&UMW9XFt$0YQyz@^k}FMYHjJyW{@`)a-+;qk zuk*K&iJSP*kZpFR*2l_|VhpzGgm;Q5$G&Z;g{w3VkDxpp@3ax2^jElTp@>vaO6>hc zu2r?$+r5_HN+T5cqJyUV&;Ow-EKK zgqps&Lf`~0?x{Wn)e`G{M3oNuLn&QhP2f~88XD~LdakupFmNWk&WGyj-Wb z^4l29OF_ThS+2~}D4gsX&R_aNb%z@0Yqu(0_2$nmYXYn9$*!o%`sVv(|{qzf+ zak2>*L|1Z_rMZiL&Ukc5`^2oVrP26Ue9fg;B-YsMulFY9Y^!S;rNr)2{i5E{VYGzh z({=bcvv5=zg$V;7##dv^f1r+?REYd$$kGaombM1<0FjyhjZ zYMmybnYFYhulQbk0-BgN5~^DM*lS(vTz{f>YjzqX-_^xL(+=Z}Io&U?lwzx8*}bqS z(dki5+eILOGYq;F=TY)0LwivSPZ#5<0@BqY!7-XTY@ZBxb1--%g}W*6kAZt{fd!!` zL)!(RMOTJaWP4LhZl%Z5sYBOY7zAl7(r3*qs ze$WUa0%1Z{<+ykfLj&(SoZT;HnGX{NGTvI97OM<&PWO`_rvXjX6r`T89>+`;2V`Au zlqu5pEbK4oe#R(sT=@`txH=cW)|D#XH!39lNt6neu$*hlTX$ARM8we^wR2Gkc7^zt zGP`VReVgc-V^s06>@_H{A~ z@u8c8Q;g$}BSIKm%cWkgg*9Aj_F-z5f6YAA{dZKavbh0Wmjy$1pr>1W)PpCE8nN>W z+`LqZQd5W@H`+5s$id)PNc)~!m8aHZg0s51JH&=l9CD1{UpNJHfnZ}fP+6L9FrtIv zK$vBGME!0&4s1r~1(Ew+Kwk;AbGnVj{@9Dq$4bzcji({mZvjhUmZ6VvM-{LUhR{T5R&w-hvD#rbmpCY$Zn>(XMZx8W6 zQublwiKZ>+Fx1~WCbhnjEfobTz_3K1h@_sGRd4Wwm)4K~gaL(hC;W$2&AZz^z8IJT zw>$q>o;Wc5^~a-Nweet)thD7_Rn(*63R#+U zpAC_}WJZ}e#>U%}3>O733cu9sv~eFjQJsnF|H>|j&SW9Vam$S+y|-)BbocLQd@!J^ zf)8xLM3$V|+p3LLA^Y))K>W>im48D%ZU)>BR)5gkG85As6K6k8ihXC(D2GOe#(I_* z3TVqBDME)7RQi33sYdT{$WKdeaWLp?aT1Q-uOK2HxHmYk*OrxAb**mS;)Z*~3yq`; zgLcvba#OyM`zfTOnc^g=#6i*YeC>YsYN*kMikcgZwUYsf5Ar<^rg@hT29&#ly2qFz z0>}&dzC1`L;lVN{u%Qy@Wr6UL*_l(g9pM9tJr9hOizVV@HhSGO&Nnk_Dyla^}<=8~1ftJZZq{1cdl4@#S!A$|@; zoN2`&_gaPpgdF^T_sDUKiMm&Ks>^Ar&=4iPaPwud(_<#AwLQAmYi6EXw` zp4Wmg{&*4YtYg++=i_1NlLfvV&A{(#`vm`v$4$uu4m*rEeMul;K*7pEqJ&U8)r9bLPsw1-pY&Hl$|ew{65 z$EyD3&D*=pn}nTXx&TFmxs*W7n4n-!=IBms@@;S38V+qnH@}kAUlF>B?s_Vpvue-F z9yX!Kt+k&t-fVBz6;I1*l>1t1V%eIAVv6+S7)*Ac$OY(w6M{wDSSDOBQkkZ9m)8;b zY5PO@_=PF0nTi;zeW$bD$D}z~5~)+5aY1qazV$?qX{QOJtHMjCRXP&swbr@*RSCrP;QuBCF zFnA9dDwxtO0fcgnV9Y~<9!gWF0`r@sv1*rmiowv)ZQF6Hz&0{ipS%*$7BzdDffEfU zTjAoGvL#O3yIn*1s$xaqEu?n13}WDsZ|b)%m?;|jSvxs&)GOG>zdu|2ULURtUTZl9 zdry_1<6W#?z3`HjZTcRhihtHkJN0VjN>SUgwRIiS@AfLhKM$u&%hN!&&BA=(5X+lJ zzD~WXoABJ724?Co7zq<6v6!q)@!1Bq=M&}!*)q0s7ufTXMyM_su+^-2?#pU#Hwuq$yVYBp)u&3t|REymN-{|D+Ju_;@xfQ)844 z?cP#S=x2oqK>lXp_)WQimUE>#G-#U=U?CSM~9~`?V$}TDSYM^necCKEEoL^Y{;-+OmNbKe3$o zE>~f`m2HzSj54)aD3FmmT27R)j9rw+Q7!D}%myW6Y=F0;v)r|{`zkuZY?E|^g&5n5 z`(H+4x8@?7$Jssj5)$BWbRa-|A2 z5^Gsftg7Is#N_RUCOC|~wuIKDn&ccM+T=SKa9~l;$|zEnG`d!F$Oq5i#S}a2B;3Mb zE?$di;`X3?86gtW_nKw-vcNlRM8QJGg1De`fb~MR>f@SzwVaCvu{qpgxjt zS*6AE4+0i7$fQ(chNUTs6N>+_@Jx2vCJ(2Vb>#4+KUTdf)o2xHQE{J1_p7upAF!H# z1aL8uky+zdVytr)l5WbCnTaP`wKRsRkg1rADg=={ayRNkgR;tv^LER0)gj7uHO`H< zPPXLQmsMd_pcSn*p`It(%5PG%Mn6y?L9ODEd9jkPiT?U^F)4c^r05K*8hR}ukV$HF z9T9^_#3gFMBudE#CY9`ljswFYY^o$VT+YNHJ)5*V_A3zN-o+ki2VSyYB|bb_8ThvK zVo2i?6IhoqB%7dw4M#ThVsg@3o($5E+5i-4R}?9wN+6#E?nDf9yn7EAF(798llkv` zhV^$OLm1O7+rIYksC|cl^ZAfo+(weK$jZO(A&R#)cnqo8Ue!OA>_r_TJ7MzY*HGE1 zM=DmAzAA3Y6(8bSK&Dp@KJ?*_>qcjx^};Ud<2LJO;_M}Es`v@;GmSqv-H_yPn!=Jx zk77)$bkk5R^JXXy|P0Dd$_72}i zKnDxo+?7d6K7*w8cfVwS!f0V;mpagL92fAnE%r(52D^);Krv75c~`P!sr{ytyn@Pe z-4>tgUNQ^=1aTP2MT;BztE6O2@56n@k;YiZpa<$i;?+imYx@MUOqcCb(QP*ylE4Ap zkt4^_y?C(V&2!C8M`#FFkb2J!Npg@pOq5FzaEIn;zwkdM+sZ2Z7tFpH$ zhI@om4C{vG#I^zEK6Z7q>>|UG%wh6s+(jYU%{B>K#Qfdqw12a;mseP|W}&7pX_nmr zRJFZ2TaTaU-JjoU;4a}K_B4dX z_Q3aYCEL?IbWRUn=&>4wv^pw_OWz@xHpJ!3QljvkHH>Ci<`E5_gPgCLS9(zN9A4xq z(~mp#BJ-?vZsS@TR*Q@^QiU%uH(Qs)+RtHU;vN@GS_=@Gdhlb0@;#~t+xrlEUx*-K zn9^t1&G(q>AH(ibN9^)>92CbyH4eY%Umx21eU#fv$2I`{GyWWh5!1-}i?@_1LQZ}z zyJt=;r1=b8v|qS#O^5aH46DbUxZZ5{Su}Q~Z@H}|Q4-)EK5DZ;lc53%3`{QU+rF&* zhuE{$D$7)a(6`O%B9WBEKD9IDZRjFY+s66KJ;oKahudi50heAk`>(wa8D1y?$_6xn zjU0Dqx@SBl{@ToYWAyZ|DdNIP8p@_K&n|X`0xPuRla4$fW^R$OAuBOwT%iGrSb@>Y z2rWE=D!4_%r6LVcC(FL1Dh$!FuYL$1#ew;N{xcRrf-#(eTP z&hAihMYwI*9beo690olHr5jIDT!GP~R`xT?{Vs%JsvK=h{A55wsXQsNJDIgoKkmiyHZ;Up3%!zhzdI zC{lMD{D#;e5MXUsVy@na6{nSd)oC}8s`*VZTK}FtlRvz)Q)T-Y)llArpA*|G(W3Tn zs}0K1kDNm}&>xAEee>70cCO#Za9KNF{(BNssFu{?mM*mRGoz&V8253qmy37~jdiRppmE{z z&)y6)C(0PGyqPe-V`NQB@1CjzMG(kC`6w6Z5W!$ zl$LOpK2@ua*C?=b0vE+sw;5)|)_!cXSp1s#ISwDlFKwX$JoaZr(&A$CK4uN-z3R+K z+h@_94-AG|XBxEd9K$P_|>j~*tF>%$unchjAgnf`5 zaU2y^7Ef^Ute7q`cv5rRS7>5oxgyl^8v%}kt>_Pt_vN3F8*v5cLpE~eA2tJT-*(6# z4^BDdrb1@u{n(q+N8CypYP5ny{Z?;DjP^Mg_{yss9=GsZNDEIf#iYSb+0wb`U3#4_ ztGbu77C|mQCq7t?r&goCnkd|OD!cfbDx(cQk^-P|y3BgwjSUn?>M;FmUGCt!=SA_1QZVZe1jz$*!p3kmN9%~plY12zx zKr-F;*>xT>FpWMcnGG!0xFHctU_s<kjqaq8EuAq&_S zEKI*Ba3onj6LC4aczWZmXs{bm2cw!d`BwWDQ^f&w44)5?vqS^s#~3BkSSym3W_IXP zIe&(y1R#3UrKi~QA_CQ1?Iv^XS_D$2V#fKXk|b?2`VYQKluXZ1jIq~joL-V2s{$q1 z#Ac%yd8p8ekSx?H4i0lFDk^~7?q)~jJLWeK%<@f7V>PkmYxSU@aAiErQ!9V(dl$2q zi?HM^DUc#5dX(FivsPX%ercMvSca_O?4jTdY>TG^=evh3rlH=`FrOQJ#LH+`m_l*Z z>qU}de5?lKn2ce=cm^v}5p^(XSW@sGAL2X*N}M$B+r1-|VJv1jJsloe{jxR`C?vu2 zGaB)??UQhHNnm%cJx|r^0zQX{%yl}x0us{g`{Q3zUc|Dh70N5(HS_PSAA-G2JYAuB z6(c6b$&9-#m6wW<#rIhugSXval7RhYPneHXB-Jwcio|MqolKO4qwOR>Q+9N#w*mi^ zqDK22t`dg2Je-;Ed!vX=AIO%+LOB zf2N7m`z`m=Cy6MLB27GFueYtY*lOAO6>brQ_n9MFlzZo5T_vc|;L`4XNxt75)W(N> zl#2sv)XfG+vf8$WT57jS#}K|(YnUT1;x1C(IDTUDI8|{b+bGbIm9ipA<2m+^VlF_t zgW?Q(%O@P>AYBapG|Gr;$u7q8+<8kPqVi!(*Xt~QduGlKI0mbk{bVhi_nl;8=?~K5FlS^M37QeT>29amZe$m|c4?J4R z!GCCYKzp$_;$`4gmA=RB+SJL+Ju)F7{bwd~@UF9K^mw*MOaNq3V@2>_P|r71LSpQi z*U^X|=jU8r2cxg~v6a>7r}fM=iwV$C7Bd$K);eB{)d~uAbMj~a|MA_^LoqFO@>P#~ z?VSh1*hxr`#TQdx$f!do>5_#FBm{jXsu{}%tL8X?A^<1-oNDkyM#a+nkD7nj!)e11 z#(~G z<5o&{PFDySNUB;R?p3416uZn3=dd0WpVf;l{yMoVNBJ%-AN2xQIHp;BO3xO@QhyA_ z&77ndsi@Mq^FTHM} zH?QxQ)$!g(W<-DWeOu&GQi*{z74ns@V_iV(tM7fw8>5>nXOg3snBi)lz>pZ+6%BnU(v(MXsk?+W8bBl{ zPvxFT@lI`_iQz{)iCx8(Y?mw0$AG&qT-o_772>!s#m=;xa#PcNpehRw&mq~Pl76nZ zo<03?9*gX}!p)m1A>dYf0FBDQMK<*$CAkIrcW(cX);(=JG-=gDp1gzX6GV#RtA2zt zRQGy`z}B=H5MhJT;Vw%}NUvLxVKaY1p&yjteSXkcyN9EkS-f&QJC{lqAw9yi31u?Z z*+p#Md$M9$eH!R@bG)usQ(R)obj$oqkG07H#B2Ma)Ov}ICnKx@QAyQHYgygoZ9*Uh zj?#7CGpSQ%?IA0TL6dRrj|%rCR^pKMb#WS2s5w%IsOojGVCZxRvh&v)SAztrZ~;Vu zU+T<@>gnKJG7ln!ly*!w276vuC54s{5>Xg-0oC~b=J6VK1WyS?q?{Mxqf?&P#L*z*Lcq8A-1tsJiiT`tK;Di@Nw~ zy3(wa)tYd@Nem4Kda_Fur>mFs{Z+Cy)LThuX`|$eUIEDn9V{z7G z=%sKoF2<$NNVINDOR8FHnK;Cw}%&_vxd{r)jv96hwrxjE6 z@iBKxc7Ox!1%;N>2NgQ8BzuML@_m!yD_vwVO*6(8Y0>)8~q{Jzi>+ zv#Oh`1Hr-r(5oV4DQefsRS^O3qOK38b?-?_7{T-7-^DEOp*+vc0XN>Qb@%O1V8K}2 z*WXb+9=0?^*SoQt@ZaEL`|GFghG4mKIXxs_|4?1%#h*vp;NeaoVAZYG(1@2-)|;aP zkQIw67Rxous(NYFxtWPA-B(vFA8GI@-%6SDXu^So3bpg5xcPROozr@2rA?yVFKp6@ zHV5yHY3}%IMa_V zYV=?sA^et_?FdtQb9#oSinyZuc=w-y(3k?}@pfm;QT6E|00hvxn8dj=(1N~uA>oXz9DQrIIFWqMeJ5qHB{)%f zG6ES56aBS0*j(sQXtB`=LokMW@jDn^>q$0b*(y*CGVRj=rn0cR9CUksy}DdGGuqVx z9`@HKhKN*7!7B0lZCJ5Q_gY6p7A4FbaaxI+Eyj8QEy!%>?$EL!ZEWI%G$B%4SX}x= z=5n?K*O{4_Ka$zY00W%`+zd&Lz^jYJ3i-SoM``P5+WakDq-5SZ5CC@O#&5lUQS5oU zPsLax|5UqI)m){1^b(UHdsqNN{C12p53vw3clf41E6zwAx#J9uN=m|U1cMKE4bs>- zw#LT^kIiv3-f6}!HbXN1n2u1e>8Ul)gO=gN%vcj$6tkp;utvC7D}BOZ(*w$K=_Tye zrDKauZ_iJ3DTNouhXA*pQS!=LVvvw=x&1RfaskJUHV{M}3G@5y zF;ueWkvb{GrSb4|q<1DPp!-PZM%TAAx6ATXy8*jXsF72rHf2SlYg=a>>oEwG2^|3{ ztkO{)`q2-}jTB~2$gCNWv;^vxbBFs$GIjMzIDss5F_i1-o^)=PfZb1A z(ehIQcpLq&B!zYKhi2DHMcsN-T_%4p42i&Q1;LYqO!_ujAYzEgikkPOpdk|XrVc<3r1{Y?U53L9U|rwpJjBp>+=%-qk$zyThUa!Y|6$Rq z{ubvxz}$H=omv&J14g%I(7-6gXgoRt0xsIUao0O(r$BcR3V*tIG_J~NLp!Ykqf_vD z-l<39Rd+Vm@}_xd&A1k9&gD&P;o(v>Nz{*H*ugpdS1uqh*j1qF482XMJaTY4x+L{g z+u$$tX8f=1Ht|f1(Xspx^=miviRj{GVd_<>G}yV;F2khz&Q6t=w7_PRCfc-WvWQLET#qA;=#0Ye zSh&PUaaAI#bAy7l?KHA={4cVwqzU!*Mmf?pxR#eJB@0b|PJz}_W4QQldZ<%tdR}Vq zE(x(2b102`gE*aS1TGEQ9=>M1`lh(!zw7BfLlY+1o%`#>EO|WHb!K28N1Vbxc^;jz z-$*djDB-ucZYOzMyj6&_>KZm__ovbt>f3nI9VXLwrRnGi0S%8AET&2r{G68`(IYM@&iL%a5 z2)Q@Wc~Y+S8&bC8=YT(GIc8l|`m5zyQ0m_51+=Ph);&r1ZNzy99vrq6*@=x{5n zL06TffsH7E>%tNBOQP!_iV}N8zDJg*y$1n9FEUsNM{OfzhS5F^HHafs#3?`(?S18V z&*S8F(H1WST?NJ61MN)7SJPHO6B0^}0}Z(OnDf1Bv6<)iogSnA{sZF+$nKodfN)M4~+vMYY#+=00%hsF3*Az=#+|5w4koFRU8D z;nTpEH8M%ghv>MOg`<_?g}1k9qb-%^=Y)qpw<%b`s=9*@>CEJcJ*Kz`p#~uebk+6S z!Dsx9Mbg`3VP+uZs2ASdjIg<>ZW{5SW^42t9<|1CQBL=ZH*d$8L0I+$zds*Wub#Q7 z3C5gHrr*!+aSnrH!n~It!~7oOI#U~C!8uPz@Sy`i{8I0IqiVR=RWNlrs z&Cda1%BB(L<;dXbC-Mi?rY^BH{HDdSd2Bl71vePr>M)=L?KOsFD2Gm}q0;NTyIH&- znFdwBoPwlisEW8=ofGm{8qD>tD80|>9A8HsQ6wTVrk*Xo$Ds=4=YaKvB40bIE|*>1 zY`GL%le@DJru-N=3#mYb>A@8{g7322-3F_gU{e#}e8f5s12iWy;mF8=Rogj>lK>@-R>g#T z6;$brYnft}{!JQzwnR;6fQ^bR{nFOW*Ua66+|DrT5G=@4c7?mg!D8<6F=9s`(NKZ&Uo(kexI`D(1ScV9`0nkQ|oXxPF5(J5BO$& z*}xPO+(fQP_AKQy(K*!dfv55`FF>$ZYq>Pgf95S~|45YyQfz~{12W`m)lNhodTqAb zXy^xRYKaF~xY@L&pVA{K*?C|rK|r)lGrR0br^=ixxgWm)J;e8~KesynyANvzCLn?0<$ILH^&O07wQr0oeo105bt+0bhccf-HcFgKmI{f;EFHfuBOS zLMlRbKtVyxLCZpaz<9w-!K%P+!)3uE!{;L4BP1ZoA^{;qB3&WtA&;Qopk$&vp&Fo0 zqOqc-p?#spq5s7Qz_`O?!JNk8#Y)2l$F{*fz!Ack!qvn*!87?O^Z1bX83X`=Izn;6 zIwB^bUE**OQj$VaL{eMQZ8AQxPI63g2l5sQS_)f=B}#nC7Ro0o4XSdgFKP+uXzB+V zQ<^`tI<$*)W_0`X2K2KGI1JVdT|cw?Z~i}kX7poYGi1`s1>|Kxx>v_yWs7v$xL;aM? z9romI6oVdaU-=OVrU8wm4TTJIPwAbW3k=VrHP|n@NV!zyyBYk`-(Rh%rR$ruv@P1 zb%$3r?B>T73B*Y1DtFj7-YqsZe`CAj{KGYmzbPpp zQ0z^5~0tKJ=S#M(lqpcy%fPj>MfQl$f1P~ArgkUr8euMGxVSi9;Ow1h^#%>Ro z1Bl{|QbtZjN?vAjwHNyV#1WU&{ZwEO5kFiOg=e|a6+tp+*k}Ol8&dsGpR$o9Sik_( zV1!svGXOIbG_q#UD0Xx}SJzTHz-?+A*urZ!Z1djj8AJh?5C8``;#@TknjiG!TXC}l zjDs7#^h-b_nt2wriMD=>t(s0aJ?<=vQ`+uF!)cU%1= zrL@T8VnUAzY4Js5q`LOQ)=2@=yHzJMK@21~fDR2m$$$H*T5Zj9Qx+bt^5;{5TI!!M ze!&(NxwH*4*37>B_!Om^b?Og-1{gQalh_HF?apXl|PrOFt@+|SiNFI)f^>Ae91 z*!zYrTybb@d{)KH$!5b3#v$Ikr&mb`yo>c&v>XOlYElBDYT3C26S2{1&cNPLj9sff6l~maUl5P4<>#Se2K3A;Cf62);n%UqZ+YMgLGdP+d@< zW~ew95Qr$~@<3reVp$*0sWJXDqdu1k5L9Gt4e2v-^8B0!y!L+aP;0ZJdyZq_x{wj9 zsAz1Xa4L0X?P?T}P2YA?ah?DM5E_8a=HrAJGDD9N?xiwk{#ER_sqJ-HjSE?Ryj^fd zP@F|`IpSrOqk|xjI*)Wc^k2XWs16K>D-_3~6@;p}fr`akPD3oXxnvH0@%|<1P--#7 zDUo|abpAG(cKQ|~D9TzaWYOxR1&IuklN2X^F{O|q23Snx{{)T*arYF^=aFHN_b7`g ztzd?RcuXa^oQLgb!@+Syt^hcuU-JR9pbp_U?{;W6p7v`((JCbch=Ueo#t9ul90E=d zZ4OSVH+z0kXm11$apX{baukZk!0(?@vSI0jBTK4VD=>#fbqP9gM3H31=MQvFTRo^IA9Elh+cOX5qT zSm_vsk#?)9L?UwDo{y8#1rJB1izAXo&V}&%&6|dp5M|-IE;CRen-L|IejER5n-7St z8ey#34&G3S!SW{Y&GME?@+@zwq`=ZtNs;9pm6TZCRY@Pqdn)N?d0!<1ENvxw{9`F3 zrX@7c_y^w>2h|B_+;dou(rX{))VB(cFWJFD=K zjgRO)K2`utxTKphnv?usztY2G^iO&%PDV=}PaHm;Ns30*^Jjw;<KY7k)4Mn>Gr$2pLAzqA_?R@B{!+Zk}_-(P7-OB5H3n0Ig2DqND_z==xRLc00)^8QglX%B0dPFyD z#xm-$^7EZ&+nn<576^Roih%epa;*;gBNX^lI6WJ^85{Y{ti9= z&^hDa6MFCkJ@}3amG)(uE2%2{`}4O$f130$m};%bm8ElktA{hcFYDSLV@v@@c-ms{ z-obDJP@^;)Rt$jQFSc&gsdl?TI6#eaGC((|-M(33?)DJ<{B&^_5ya#^Bq|;}{D%mf zlbo)R*l$s`!D~Dz_V|chW;-l6jQ|=TAuX8XG_V%kvI-R7MVrLe`CVvz-L*XMqTQC4 zJX)a*+^Q)2QZDZUC6t@Gb+xGtzkiQGa zHwN(m%-0`Oc-mrMVBlmZVqj)qWZ?v|7XdMZ&B!1E3_J|mAZ#G%#Bd18W?@ib zWP!3-8Jrl^plmiIabBhr#tbN%kHLib44_rAKyft)g7Ak!PBG~7`15slH*|@+5YO$m zsC8F*qzEPRcZYdev>7Y4LWwdx0-wq8MR$_8>MuWx654?U3UtkF64)mvToBIb{7zui zI7;MM=LG31=RXA2#mU%pmYh(Y0uAZcg%5;JIAv3~C*CSOp}L%NEGef+&v!>j1^Y++ z+JD*)>3`gEc%E@YLEidqX9W^Owf_tCR7EoMb+@Fe(7gE4fmwgFQ+#=4pTEDn)ApHQ z=!&Xiem_;+Bcc~Qnc~X_PULoC4YRawaBd}kCn9FW?+WbsyVOqxI`f392?n;vNL_ej zYEdGp19!Q5OSdmn6dIDDW4#%8dhVJMoz)l4J3ZL5VD%~+y0>YYd((O2mV^5K$bTVv z>t(ld0~rR|75$zet5d(-=t#ziv+Nr8_$Mz-N7WXNsk-DmwKhHBsJ6VWdK_b0`i-|} z&Hym&uH^s#c-mrMVgQ5x%?w5i*gzhDAh!O_Xt z#nsK-!_&*#=SvVg7%&U~003KN+gojX+-IAZnweWzT3OrJ+SxleIyt+zy19FJdU^Z! z`uR@=flwrtNM&+`Ql-{tb^6s<<22}45JS6l)N!$E{Yv34uW39vc&52r=-u5VkCk1oCcjlMqM(2}y2%Nz0r*N zbk(V<^WWD~BQQY_+`?-GQCL54xUaGB=<=@%!l`?4bp6!L8@EaM{}{ygZ{hn_Pu+cI zMp{k%vmo4Y8sBd?d)u`)pX|NxfFPXyHQdCwcH@rQaNH{h_s`=~yY{C0&OY*{+uwun zKMKN$yRSR5ar#tv7Wdkq>xZtx0X4-xg!>=C_ri5I-+Awk7Tpz`|0O|S&)#(Fsf~er z{2-R{FwXzw%^UaL#^UZT;X7TQxn<+#GbeuKfe_a7hk_v8e%q~g-1+T~f8$eva4(+E zF5GtencH6ZW%q9i!tHI$e@fs&1D{{wK|retLetmum7BhNR5@={S_4DPMkpA_=h#56n9r5+IYq@!Fc=7hL(RsdI5=27eeEl* z|Ko4413g!rlIKwi-70pWODE`|kb$(~8wb)W;G5U!T6aK0D`A1M$&X z#lVt&nf7TS3-5`k>ijqnmy)PRchlgcDK3Yj zT`{(QbYfycF@uUPX@;GK=unt6$+fXZXsv*TcnERE%0*y_KSK{%8y^^jz#> zUjiME0ET^ofFVo-R8-Zb7_G2eDwpzkT5@Bk1w`Ty)*P~zOn}&^C#Z2;+0!^xRin{xCKdG<-J?!1-!)y# zO{QgrKjjTA7}6$>8hn4Yn9P846Bj4hpRqp_MubUl?$~G}4$cj?nvKR#V^V6h28l$a z!NHadSTpQvhQdK`PKUSXo0=!G<;yJ}ApWe9lw7JVtCGx_`0BGs&W**zw@RYluUr8( zlCEIfX%@VngDE26FOcv>$J24?54}h9TGMb0 zX1fzXH#=SGibf7KjIWVWbA)8s>>dw! zMh*xTpLMa{hlU;yc7xAmhI(@(>!jfb{kCun4%(!!0R=T6OpQ>}LIR|VZ~zYUmx$qP z@GVXwy?77U$)zifc+Xt5tW@@T-BZ1dkY^}fDl)h3=6hG2%I@irk?{kmuLttoiHN~O zZ+xH}?=zkK>0sFHQoJ)`uT>rM+!!6dV!W1Yxr2=9ue+wJdEKv63S)!O6#I-P7Moct z8)LDaMBmv{xhUYu1GqosUlnGBWx%y(As_&*CfQqPrV^2h?4i(tM1l4ECP5kwVf_H+ zvN`2ENfDT{K`2rDyo~Q^xbdI9J^sajrht36OrMfSaCtl^GEtPB=Hciy zNyDBK7}AX&<_b*e^^2l%F(}8qeaEl87TQbpx*Z|L7eRy%IY=URW!^pwHTP#Za z*vy29ZwU<5vQ7jU$ym#>wN2XxFy(;~SQ(CiC2@2R*NSuyi0K$UI><6yk~BqE4JiV1 zB+3$d9TVLP!ngNpY57)ijF<4rKvp*cmO6i1+ptT zBwkn`YX@VYh%a!pStxD(Lv<9!jlX%L->7-{hK3;e^v&7j$-C5vXzro@ThT#z6Li$R9H zH7Pe6DKSh3iJvW%3;u=NhQc&~{zAUtq$pWXbteYktCh;OPRIgFm;u7_=aghId+$+6 z71=~M>X;evDh{lW%c>$PFmf!L6~&kc`yVh@29&Ar{52EF{+W`lghl0gS={{Yx0VP) znx8PlACt6Nn)HCed(;@?rlGRW>El|p*8#vqRs0vud<7?5Jc1vrFSCbV&!H89F@I9i zf)`=Kn5=tOt_(rlsGIPkum~G}GVj7Np+?-M2oLMez?)mR`zPS;I^gbX+_JW|uy51; zB_W3AazOXZ*xD*%R@ujwj25r+Vzu(wSXbMB<%4m*r5f3 z!^c*@=q#IQjVoCXoD0$+3at7R2YwWQ88v5HnT%pAMlIC&x`CIM2U_B?E+>;qeg|+R zD(u16K_Pg|AyE?{XtFF`6eLwv-HAX-RbKOe!4=ZH3g4j{P6JmV0l1RMq*-i3X5l3T zzY~~%Uo5xR;zNr$ZC+|ZkZe`rmh+ZnR2AT~Jb()nHhcGbf4*8ErE>ZnlLz`9P==2C z#7MliXd|KPbZp7vhEfDKX^NvPu>qjXk(MPXdsFBguX=ff5rL-Z`TV11aHQu-wYQ+1 zkTr=Zk`FjwnuwqXcw%n$bqKqh*P&X|C0ho?`=Dcf1-Mx^Eg5{VU9mwW^NHw9>By!U zXf_e<4i5Bk%LoxZ5#te3wr5&OM^&J9;P^pLS^Pt{$dOBXnN@&HbdMo;oO!ABva-iqo!D&OaVv!6EuYQ zJr|d7Pd(_6Iq#g*u+j_PfLh?HXp@JLXKmX%8Mk0>cti#}TsrN9j@~whpjr$n;HRM4 zJg7FC-;#bCQ}BHnR+tK*HW6tm^qV8h1^;i6=IQ8_0RRE%aw`)a zAi}5^$}X-?1R$=WB)XUOw5A=pL&i9e&bkzFDVJ0ATE;@4w+KFyb+}6~$&B|rS&Oj< z6dRPN%OfGsb9nI~LWymD@A1bpC|MhN(q&SzOpzbw|)_=Z#j)Az(1w z;2>}s>2p#}WCTq1dsj!XP$V_FuaEEdIxQ3Caa0w4pBQ}Lz{I}pTusi#G&R;=+U=F@ z;jb`c)kET8sU5ex8CND&C;IcvYO+h_qMDqm8|;5}w5@nA*7q3JcZKgVDcQ2ZTl#>I zi+`%vfcpsrYVkUW1~IT@r|C3YH2e#b?Y4flNB{`8sMQ!85IuZLCTx$rWJwP_5_cq} zZSIhVjv=?j!3Qyy5Y&v^IN|(~zW{C33i_4N zCkh1^H9ZvGHyzO6^4|U$5CEBxolYQ=Bc>ZD@Vo4TZkNxK67agk18;uKpD`#cR?d1&kg+D6Z1N=r3tkU^V2b9L z56F-3!K49A1rPkhzAzX6P-H`c(?Ng&aKHkhdv`oG=W?q&uxP%6``z$!ytjAIqqx!# zIj)P669%Z@;0au02URdqn|?+5lW(|VvMRbn4XETm2V_tzUU*97{P@`Bke0PIAVdne zweR!4<-tSWzVL9{pH;xTW7(L+mTQl78~;D@G1p zf5VN7dzpDMk-3#s7AD-jpm(wr&h$=?G-Kh3v3puc{ycNP^_Dl>cc?i(zvqFx{^%W< z#8uzkd(r?rHM2PO$>U3>eOhV%QzvMBh=%w-gF3Uql~~{5rQXY3#`@<%O|QUW2}1n)2pHpgWmf zitp;Cd{*P)q(!j-VMVwKxq)K`_s;bDksFZVn02x`9iIRN0-KOff{2<3OW;#tOE+xM_CAZ=A9@9OPL4#nH0e-O z2UojyMWelifkL0`+IPak=F0>1#_@YSY$zfxs=ZalV+lFYwc>25lH|NZeJ63mBmXdf ziU`=Yoa)QC9ZLAVymO4@2I`K%Pv5I&?`ou?)jxXBnYwN;sMV$)4eI%9IhM0{5JUdA+*27? zx)g2O%mjq);HHj2;UD{$`^vte6n>zpsB^OHj<}_gS5}NbB-Nz_uR{hEvaE4W#S@rV z$Yd{hp@kEXW8|h?a#PQ-#o+vu5%YuF*zCgo*i7CV+G4dWeZXD)UHy7st>u$TOU6Jw zolkPlfLk%la@EPFyb-6%tHtyYZzG~|_Ta-PE$nbWFZrji!p@Kj+$e7TCrGY1>*3{8 z8rpLJ`s4Nde+Y-5Jr{$Pk3_hj7#+-Z3E{aia%@m0R>WYLlprxooeZcgrd4exe4gGEM2jzyZe@PKA=1-RtHDA znoE-Eysl>~G@`fyfJvL*b9^#g)p%a=R*sGgy)waD&U9MR#J@+%-V=?@OmpY{rWT$K zvpjb#4>WE}R-J5mS~1k`D#-B5SwI^EyFJf;T{sD7`!3nyyya@!zFCtXf(wq&W=m0G zWJR7ho(+Y=0ZK@K`|`P7UWNyPXi7wC4ov^AZS28^ptc2njRdI?gB^C0(B!BbujOCfcU5X0tTXYznaw5|kmD%Gi_e9PGM+~|I zrW%<|D>;d91CC$*vH1$~Bm3cqrLGET3RjLVbo=QJ@aDb+w1L(#Qv*ZMaLS9g9#;0k zHze!4EV>cP0QY1=$H4`gkia$Ir6)i(lyXiM8eZN^T9rbe#;?RB;tOVZ z{>0~Q(T<)82EoJ0n!>RvRk+PFBm=gGl_&QsU~X$;OH_ti>$|y9bNZ|h$k{V>caXezNk;iEDUPz;yMKYpHA+tNk6MIB;sorGga@uj z7d|SIzah%}Udd^>1eQY%?;8Q#ri=mfH9)mdy#X$`^n*v=H)4gbOcGl*m$RE3qEfd-kB z#YJ=3H|vM1g}kX_Di{0hw{pewNMhCq-H=``FeTvUus7ax#F8JQXH>5`UBv+JpeO0~ z@GSeK16)*!**aPgtF$>^saB!tKyhN8M z8JlBViK6Tiwpak-;|Y~0z7 zkAjK-*s0^JqRz7i%`o`GEpfjB~Y6Ae2zAG9X02~!a4 zmLp@$bk^xpx#kD%DX>Ikq6?D3r4#Gy{l6wTnC3*VOM#^aAF9TG@CRJe{R-%&yJTQG zB`{9;l@q{pneq|EfYsPROl>t)bOJ6?@GYn+#07*WaxE@NaV|(QOdf=dcQSZGml6RT zo<@kz%JV)4rKpZfAF`M(UyjOREZTj@;m>CfD?oD@^@;oa7RM^a@M#?K#!8VJRR?MU zs6@GUMVc`b)*1IN)f^AKE*2kgiYjtWfR0#;DY|^^wRinJa;J8rZlT4cxa7_6;9mY@ zE%7Sd?y4N|)$|_7D?7E9y7JhEo6-ZV!)K z_$`D{%rU>)n~LhTfA|yjQ}#*ZnfAaxoE@qL$v+HGhSFM^<#Jr||AHl3Fh~k4>fwAN zOf+P6C551|-DQA|>KXg&a>C(+RhPIX`NdEsoSlN@#cJz)ihs6}V(LPDbh^>yO}PS_ z&!khytkEs;rZd#tHQ_}d$j-Sozisv~EwDF06%*q~CfpBi3!z|5XRYeISDC)6Q0q^5 zH@{h^MzpFXeO)s`mHFy{qoNm4QrE>Fvk&o42tCLRYR^nm1Jsw~x3wt1B>Z;*feugu zt=14E-4=9&xX2$^x)#a+Fj)bB?VGK!w=iRulIt;I#=zt+UzLpQR~k+33#bxeZYWLh zrxUP8NC=ClS}754B%6z-eJ1~?)1htt0P>kY9nm;4ecRKn{40_P_SLV#Sj&Dl(k1U* zVa^G}`|M46I$Do-GvT?#C2(C1&^*bW6NbTc1Kq@RohAr?(QK5lZsNG@Ra)e+@|!ke zUZPoueYBMHhXP(0J*Pj{s>L#1=alC2c&`~pQO1FgGd6i5=8;KxuQA9i)Ke*eyhhC-~3jwfV`tAb3({gYeRmXcR*s zAv9?7Svoa1syPavjiz2Wuj@aDgl;{_ZGnpjVP1(Vt>RL$R@@{{i^fyfl_h*EjlYA^JuDz2vayS`qO=_ zqc+W!*i8e0g6#^3g zzG_*#2O;U$1ysyzT|pq@3Mi4g<2>v$CK9Z#57|H{CwIASiou?)N}<0HujU=5k#uOL zt5rkypr>~@Ty*3{ic57m_d%s6%jVuiHp}$D@n(EoKT*u0ha}n6Q}oG7DRpKRZXDUM z`+u+NT|=3!Y^ob)NXzLLo9wS3H4Uq~XlAIAAX?a6AC`f#LM$ z=nGf@EV(f7rr%d?=zT7+-_+)sYAz$Y(nk1+ErHQU(DtZfi>+DF(QCqSNc6i!1d@`` zpYiK`MQ`H1c~5wZyAQeE@SqX*MEKq~`IxhhD#AM)D`*t zNH{wIuH%~LST5LGcKP^y_l5MR58)kU(SMp zkqm@Tp8<;j3R_Jp=<)18(Slwig#cH%#k>Y=rN}eZ~B-7 z2imPEsd_HY-14%Y^*2TDzP@OrT<)u|8}W1pRs=jpPdDtjaxmfTej1R=Itfgf)NjUWYSodZGbtx*9tJgp7HN@a|#}<`^o2cMLMAcgN!Q^CCBLo^lQDqCaZ}UE^ApCwc(Qz`iRpW~KU5m%mB6N#v?eJN!bvy;fukSzf>y~+RUWMk zvDYGs5*5iI>tY1{JUocEh{i8)=9autB4oKxCiAL^s_tyo43v;C8LlZ@TC3m0sW~rv z#*LsUiF5?_9)rImOKQtIqf^a4c=5;L8g$?tSY@KK$^nyFA1sn>Nfdbqr1*$>O>1C< zNiU-=E_oF%Qafd2Z^+%V&JavJpUscYiu_nOc$E z0Vy_bMoaOCyK0a|+SRXSv$87{(ZrnQbM83g^u$=d>M;tc|00{!&2lk_9FwAmlJ9QBm=^2=^~l}zaBQhhb30xVX41XnS^iH%0)C+c zt(6JsmsdNKPBLm}NbK}XZ36(4k#=Xasik!B(Z`RWk;3!V<-U?>?kgb|R&a8yu9Eh@ zgjGVB?W%V)WVuY0mK5^z4eHaeQ!S){@>T-LYI(dwBb&opWbw$Q!Od(6*v@@YartAB zfYVvE`O&LGLVzSyEuy)+7@5`Zal6k zp>k%(H2vmQ0Kh_usFg=!k!eSd6Hfo(>Au$NDO2f|*~bvTTS6>(4V7CNNaUUny8f|S zc64{Rxq9P`O2pY+E9CYs2b6;W|cQoVgnB@|$4zH3L+HjJ6mOOCm*T`vrOZ`LEpp=#cAI~=+i>{kN0;@L@0Al*aIk&m{A-)?o< z)cl}H%L-5k@mRW*2BYPc0NNn&9`vH+roq-(#IcK~lv=YzR<*)}H^f!B(XC?-hY^sR z{n27iq3PiHJZm;7dB#xo8T1E5Bj@t_C8vnKJRBC)8w*9o=6jf9(Hn$-aXmBRPZU#{ z-+cT{l(O--0p7|%CBeKdW4Etc*Gaw%^=6-bwB&WY*bMi1A}vj+0=4KcF5r%a#UL$XrL!w>}idF!%D$1;%}klz`l-68Au6PT7R)_?HC9OH#9=FEG86O+bzgJ)tPvf7Trs<2+`D z7kk1QD|m}xIFdajf8&tis?EDYwZhy%uKX-Xbw_a&Emw83DwPVAEE;wa8Og<-^tfH$ z^Eo38zj6O~L)IH9mp@cs&Z+7z)F1G&bRwCWo{BrVuD^`FDRbGw`wD@+yZc>TwFyTU z>5IExrJ|A|oY-NY{LSc&q2@f`HL9lI2Xu*l|+dK;8Vj;^Ss>Qf& zp5LbSB)2g~wn52{A`jZP=vMP%E|*xWcQ>IjBMqmH%yP*T2e_CB_skmz2>skQ*f+4N zkgPd;qY=H3s2~RhuhwI@3o&OxajQ&@g=@1eF1ukJ;lVFD5!v{pp1xeVCuH{e;Ky)p zL;C}l#}i2`R*?2*`ebi$s^;O{zHq7s!M&vkk(D)X3lFEnxDiP#)EuJ4FHQC@z|AS( zW|{WhfY+@^eoK{hB$NP!inW?4fs(<24%hq_;tyFM{<1N-#V=oX2TrQq#lE4wy>Z@Ec`Q{B?hbm3T_SN!Z1Zk^|KUii?vCaB z{tnQ1ICriLXGsgjUrI0RDrb7T{ah*DIzXBs5)QC;yjQX86ZnRG6Sz4F-1IWy8*l=3 zK-j|Fq^QIK4b!YZuWqDjvWM`^UziL;)>vZ}(8a3gS zhrt!7%JV-$k2vK_a-;#RdJ#kfF{d5(*eDpML0tcOnbjNbT13nyB zFXXSlmP!;Ow;K_5^ue=>b}u;UHFCNVUt6SB`^Oby7aFsE_9^(xyf z?$~i!3D>*Oz)aoq7rudBMf3_%8<-3~u#P%d0K0zzLIR$1JYrDZq^PLb4AeBbE?cdJ zwbGD@0wm7~fsBYKVe^U2x1(NwFjG?%pCq#ny@pMU^Ua6Zf4~l-GnGFFc}1pO;$c@cy)=3q~L%0cq zRI zJ4)!QdL{a*t~gjP8}>fIRu+4#$V63y>~ES=9T^E_Lbe)Mz`}c;yS~p>p!^2jxeY z5}qDiYUYoBB6L+@0GrZvF?fvec=o%S-vuj-{<7uYiY&nrA}Yd?$I#dp^@_GXtfQi# zZ+=&V$Z=PoGJL!RJD=#j(o~)7d(_*2z{}~A*fMJJCKy3czm2Y3&_4lP@o7|Ct^`E3 zAD5$sFVcIIg;N9Y%WX9n4q1lTitZ7aP-sgbd|d1A%g-8~o`=}PM|Gz>a9psGI#9NZw>2@P}ejVG=e)~sEfP$EPx)M)@x2T;({ z`b!%I?2r>3Q$WYh!^M!@NkiCyOG{fkO;ofb>AE6S#c_xV;DbwZ}#Jg}{U#^Kyt)iFG`4{w<|{`mvm&g(91zv2V9jw zX7rUu;;NQx$UPZYYiR07Fzkukx0c6t_t48?I{aa$lJd!-($yn%>rQbv_L)EZQ&*Vh|o1b1_d+@0XM`HVI)r_GoE(&)D#_ySn>^!~13u zet*EoGrv=IM&SWrr)IGrife0l`-d}T_I1UYD|5@cPWYjk$RLH5&RT{!08%ed%anbx&84T2&;6X9)2Oy1!NqU;&z^t6ADN*I3^_ zyRW(H38Slb;ZPx1>e6MrFo#o)nO}*>V;FB2(Vp2q*1O#i0PY9}0W;K=1t$a>YK?Hy zIRd=o%4LfI;euPp-cCeA&y@#CgT1niES45M((Dy*g8E~$HCamTb|UV?Ca#D~`6b2K z6I18I;-Io;dGQK6U)|ds%M1^yF4Xh!M>T@k(855}M~Um*Gs#kN&sA<&W!_si+>wKj zX}?RwJ5`KOdP&WTJv(#Sn!8Izoab=leWjj>Y|gX0IK7)-52H7I0$M(Y=tFyEwC1w< z0RV~F5j85SSuPPNeGAYs`ht-^4ATTlV8IJG!7a}Sywk!#2qYmRsk~o`*JGjDF!xAP z2Zrme=9@S4_*zMt<|b>E3d$ft6Zd4$Gq4(yXBiu796u}PdnyM+_vgqFx!-+cJm)EC zYWr(oa_yTvd_lRO(5A5Rh9hFiP04-hVejTo9kO?L<}KGLqj`5)RZ&Y4oEN)z z8npw;(^g2sux%!{SlU|R6t{o?M-y`8PLmfrs!pKD?1I)|9hmB}~zO+9#Isy;s0 z<3RV3Z{|2Wl4GmmQOW5&akh+bh6@GcYCq4vhT7dCs4_RwA4TM3_0&*>5;_tnCw13> zhnNsvIS`H?4De&StQ05!+n*ikioF)-X4Jt6q%h=2i3LTgLHTm5~g$Xnp!nt&nj=buAo>tq*$^dc*8dPskC^2GV|?16%8u;&O&`hfA%D>>gJ* zw)t0^wOpf8^#xT&G@Xm(>vGzI^;c0#|1)S>%2f4 zepE?DERznJ*hR!Lf5>C{9k4^upzNj&SExs*M32+0 zA(dq)rMK-J8Mrzp_xSq_Z!FXA;hHa?8KTF@lYzVmZRY5GpwYVe(^c6A$b)!$%)did zQnnTwNB^tZ2Pj9Rv;c;JumWj6ASFUutspO5{jjR9R*8|{ExIyplil~Cn(EI~KQ2`j zjm?S@_qkN|y`9BUcyoD3)z_ixVnR10OaGllrI0|p4DN%H+olT0WXThe0j?tT58i#LSa>ETz_2fy^1x!0YoOx-o*M9{W-_n-OH2PWoY#>@h6UB`O& z0@w8ZFm$>iBes!$s~^eZEjA>t{jiWdSPAVJQD`OT zB_IpYBn#;y85c0dDONOKw2a55bUPl@Ih1S-s6KAaqcHhMx z@j5yuN`N+Gzb_3QK5Zk!FN8DDI|LkH=!h!CZUE>*KL7Cu`#SR)nm!+OTr)mCK4F*z zO@7nD{AnqWR(1X>E=}y?7e3GHF3sWgUE~W33%iVr+fW~!h4~9PYv?#)u*zLlU7zwa zUg~QOTe)x>Z{qOm1Remzi?Q{h-&1<>?>O;u-mJZSbsy1-sWZZ`bJdP}5B>@_vX6Ktpy(b zXPet?rwB~aF;nCQB66m07?zlkgi2>h++0Ax5V|}S@|H$)Nn@?3FB~;kGN0;=xfYTR z?&=nw7rV3BYWf&Gq8xApP5wzXi`tBwk1PbPyNG*>Y-BA)~*#aWk;4g>AWIW5zb4#Brn3@>^f7G~8y|9}+8C{xp- zkyeYolx9@t3dX|80779;(%8HhPWWV}Gx5GVB8t}&(~zPvuZR1i2GdUNTk2a|GA&=b zi)}&@($>!1O3vE33(4;I+T>}6ErkkVgQ0AfL7-rZI8hCSER{c+?+UsjKCPN56-vQxrF8aor8RI2X-MPP%-To7awLA+Moe?F zAMfcM>rJ1U&vzH{OC%HNi|=6X!1_iY6MeK}KWx7>ZJU=ZB|}J5NC{fYA}I)ktz#W2 zu%P%WU&!R=_!zxN?9~T@k$N@+9p}tsm+sJ6g}+-e!q`LN3--BGMGGy4P58|FS#AL@ zKyWQz=azg zyNmhG#!+-GZ&`BKPN>Y*(6b9iqOoHGkraFETp+ECjmzfI;oaf)UoqBQ4r-P1P^~-U zbRM4{92v$28Ic)gTE{!E`ffWqjCV$5S1R4>#Yj(oUuCV2u;;z_Z^*+uDO7;HPFD!= zAsDgqU{Vs6x+6`}!B`IZ1T6Yow&6s3PH(^5D#6GZc*9mRkWVQe{D2%l3G?GDo#Ara zmDN93SPkIKYuXUrrla|1d~vFjgj_L7?|tyYvIj{Os!F579aU+1$Cggkdb^@-G1j)s zfV0RCQ@5JzY#|}NcgbP{PqtqQ?Zv(ojrl#n$u*zpe!|N{t?)B_1JQwaw!4mUVP9V* z7_96KYALrQS@ree@>u0HDdl#_6*g+?msOLG6au|nR26(pZ?&%ZZrU9;D+vReNJ2%@ zK8=edegpV&7~S89hQ`p%dO1uvxD;SXi}<8>tpU7m+s(G#onpIh1Y!7+K-ql2elk4H zeS7z;B{Q*%m+lUsLbuKbCO29d6~7NBRuT zp4&g^_nz6mgx9b9hA)IZIoEHJn;lqR3M5`Tqe=Sk)rnBl(@OZ5KXj~hW3}{amHNtJ zZn?&f^o>wAYxLp(Uj>A;8?j0qAAZZVunh__4piyvfMcg1tkNf#2yl03S}t2dJIxA{ z12m9`g1pLnKub*T%{g7sIIQIVLLZ*V`Th4fvgKUJ9YcdkkY3J|^LstcL+NC~hGy#%H0y4wD4XI{+cptc9P>nh0S3h>~t<+H=7P!Z)4k<4~2w*(U6c*%vf zs!rSN0HSZVL|l?oj*`8e7(Q->SFp*dcQD|+#TguM>nirm`F1&3PnV(83us)>OuHR%o*)3=aE*;;tfWS*aJ>;@5+0V>OQWv4EdeazEk@{vgC5;;f?)@r#a5BsmWjN zsk+31Zd9via}s55DP27f4)&$Ic#9Q;ms5W)A4JS`5d9$9GbfJJXs7>nZM)DgTxxB1(ZtQbSp3mheA}A8yxufTrv@kB%)zsA~m)$ zA~}7|dKGVL1sGxiJ?ISFI^5OsCW(imKhuJjuC{oS#l;ZP8fk7^t6-yB_~cSD zTpK*HCPkz5g}ECjfp^Qk(Gdgtml3B+3G7w8`s2m;okqfU^vsJJ^ag9;=h@e~i{a3G zRyB6@VAGrKyk;_hv@PCw+T?SPjRtn^9YAcldwygn!YDSiEt!?6-ZHb0fewqnv_Q=9 z*N#LWK z))kdEOP_rGDtEA<1iQld=q0y~UC*3SAmoggik4f=_Gn1 z?LZKApaQWk5WbkXW!EqR76T~z+OGMkcZa9=$hs0dh&R>2WnhZK=pDJ&@8rloW9gc% zn@eA`d`I2qEoX|QQt-EXhHHNYe(Jc6*R(xsk3-iJYF8+(yR?8aXcz`IdN@$5{|fn% zk+GRVSA(2MX6)ZF zK;*x@O-EqZr_*G&VSVUsP_5lLVD^x05KYo+TVkD~}8hRhtgPt-yodN=QtM-C*Sc%voxmx6GM@ImM-`h!*hR7u~2-w8KDMeC1=+8+I^2yYjD z!fs_>>`9F$h#6OaDNq;WS%O6(`DSxlttsT@p>2NsyK;Nss;C!X?E5;GyFI>Oq zHr?;@q&#o)?)5R>Ip05-*O*`M$Nlg1|0J*;_;PR{_^#k)=q;hY3BNA%ZKY?*)$+~dZ*--)p6U8Y_iFctyEl6ldmiukQRPhKTh*(oe_T6T`|IBI-mmw? z`)=&R|3+ZJ4;)DEeg41+&-jl8kNEc;xVJyBXP|^PfPD=IC|0rm{1mc)KWra<{S==+ z63X~@4F9V5*Molv{A+Z^EqqpJ%zr54`M(Pp{uQAijtg1-H$s{}B&0^N%6}83k`P42b(}8>O|gxC<3fZl2q_#J z;XWbDeoN@W|C*5F8peN&^?hGxvA+;>J}uPQn&4-@gv^)&;~t?T-hz9r3PJW=A;-|XEWzcm|q8``F|J)*Q_G$K3LB`B;{L?u3xc$lgO6X@>^tY~g ztswlfSNO+&+PcBY*@e@{rDy)8C1x%T3&+7Tf1VM9w_HO>s!xJ0f{?MEM|UBK3*a|B zKOjiLv-s@6c}dXmdqg;nH_m-Pe7pE=@fXGSi60PuRs4|n5%KrMKN9~`{8#bEf8GB# zt&10NO$Pag8Fa{fKzw4y++PD9p~a{d1Z1_1W`0FgJU?D9*L{+>v`TZ6lAt+{Wp)v~urLu)?@a zJ9{RPrK3;bUFNfi42JpHr~J&1bNRNgvU+CisSu-?wYF4kicXMUw@kZE=j$}{`IXfSuyJl9)7Dp3*Ks66=X4qk(P(HrzP`4$76-Q4#@wm4aA>tH zEYsvHzQ>o_DH^4gH=gwhr)b8rvT$;3?exZ4n^o4{_iYS2GKlwp82z zOzPaqYFo|Ewzd2$D1b}WYi-3sH!zVoeO^5|o1v2gZrolz{ciL1g;Q<0CySGFnRA(Q zc-Hy4Tm*&=uCA}dHx8|>=GU@onfCPIRh)|xUOG#uwbg3dF;}7g+Qq`UhOhbAJlG{a zyV2$+&$ihqETpaW)Y^_}hF0qaSdwrOQ?TCY^);HZK5wm7uRi5)3v&yzJ=tx>aaJ#9 zB*VT7t6&Lp0DV2Pa4x?=M75AD#EBs7OdN~cS|v!E-1Bd6Ap= zKR^4l%Mio`kSLzduJwS4J=OD^FSJi@%-7o9DnQ6&+Mc;R1Q`aPP}@u24&j^EqL&Xh z@>)pA00*bA@V0MmJ#%h7)Aj*vwYFJZKC*gVIz7KuXuHnj@2$1{)#Zb$%ZKfQ@hpz} zt>b~}dBL1Jx_aI;=h|#zw(YBs$bq$H&wJ>X7r)vp1X_s2mDTekhd|ftIZzmn_4Z`* zxNK_-exUPo2_%`$t^txotbY+lFDKT^knlX5vpkSI*A^z9VvJe*5UdLLFMSq{thUYk zY-XYD2K%`n*z2>I_1}p^nBc=U!P(ha!axA$*v9#QR%t(0iRZxHA;1`{)Y{?dc}AZR z;F~_9)$<~K#;WHf`ixi4%k-J3o>%BISv{}PXR3N$qtA5pyn{X~Rba!$e_L4xrt_KJ zHoKanrPi+QI2qbL`3n1FZO6&d_Q~7rlbNc}_EcULP5||c4JyI86TU3q%V1qOz(=2X zz(=12z(=1&z(=1Yz(=2Dz(=25fR8@A0Uv$#06zNct!Bn8LF%h!*4vTw43r*QC!W~A zXS(4Nf6sYz8Z4|r zDH0W%JJ9oTa|WuJL2KoMxSM^Sg`ZUu&^|A@S~@O-K5p5v`N{n7`2iLrSciZQ0PvF6 ztV38fhHLFswKqIoYY+cdQ^DA$Fnt6h5<^S3?H;EEYdJz z!2mEk3f&cIhcQipIxSk$&KtsP+c{S`bFMd^$&8=FJ;yGemg%+c*H-egTeCCmb>dV5fDQL!@+{QXeGGg23adw zgoxiAO?v5BV3zSMTx75Uxzxc$ejI3;*gnzoCQjp?>2=lx!M#ay*LTG=^a>!Pg( z&R5%Gm2+S};<0m(^p{&32-@4OV~GnE$i&7a8}l1*&}MDWiJkM1v|dP_4bZOYc^$Tf zxZmRZ|1*|ed?^O|f5XLuZ_;Dq`QdnW2ft+3I_q470v@ewVPy&5#wuB&8R4Y^%{B^l z0|h}_?BSh2!u`GNAxQb2mpQ(S+p&PZ-NKx`)%FNJ_7N5rfbPsL7~w5!?XMC;xAy_f z2dYmA!Y&L}Fkmz|Sbd6FM-E|N9XU*M7IEqb&7r|jnnQzQG=~OPRG)@6oWp1pBiMF~ z)~Zh<4586+jO=4q(mY1TuA+I?=xUm0jjo}2*60L1a{<%V>6tXxpl8zHBt4S`r)bU+ z2B&Eb4bIRU8l0s$G`QAU*E~koS?i+F_13y*bc3}n8r^8Ei$*tD>!Q)k*1BkPi?uEq z-3lC!Zxiq~>sxyoCthI>XE3~-kWSOuv-oxgY%PW~=T3V_bMCU{&!_K+sL3Uep7@Aqo!n{~g}*h8BBT6;*-UxzCv z?fX4w4{5?f_K+q#jJZ?W_j|qd&AQ(s_K>E(!5-4|H{!}E`+kqwLz-~T9@2!zs!w6l z6+GLv5`PNYwH6RG!IrJfR@&N`wpduXcgvvH1O$LzIs|u;y&1O74*707FQ~Im*Aw{9 z*J$)iUh`lBwLPvW_>TiKSmdi_5NABYxT42Q(NCL%bxd9%=-lUB#uv7 z^FD!jpJ317dy~Ffe;mT?6!A-F3qsC~asV`Di2py>8FRr9KG7MAc&pjxI%5fW8L2at zg;`eWjFlb7UHmk=u5;Wi42WM9=I~DD+l2e@)a!+7@xRvGiEKd^_N#W|vw^%p9eIYD zHR{JWgPmk&@a`6xdkelD#?0$+n*#>$p4K7#Qo-uk!?<2x~LH-2vjH{sc*gk6B(7JR4A+p(@QxK{%!pw*6A z_x;)HYnR>OrJiv4jAOX#?H1hhtc=i)`}gCGY8gEDPP~(7L%0i{w_;`2TWcX4-fhhq z#>^(L`CnnX6vz~{aAZsTMUEBOD8B9}k$#tz*!E~DDc zCs*<8dw?0DTn0Ub#6g75yYc%pj%-mdWBp%hH{&RA!_QKUxJm~v5SH(_?7G8%^DORv z53ai1y562)a|rP#J&~Su7skX{w_{A}p=TWiH|)jd0Z0PP-MON@7LRS+f#~wmyg+Na zw6e>eo58B?#=q;qu^Ylk{QiGByRx2yfgs$WwDpR3AOSI60g<4AT8SaX2Q)y88Zk)J zs1FM?u(4NYn;2jH8U9%Pwitc!$u`a2Gqbxhn{;P(R$%=d5f)*rLuV>#2H@HmP$oFb zL%fXF$Jh!9^^oUdR)qvwKeJl~|gqA$>aF8IbWRY;TXC^QxgQ$KccxaCQUqwr~RB z9Gb8TP=1A(zlQ$c2HerXICe40caZo8>~TIyPtr5gt+0L*c67MIW{Rfab#|8KaPDND z60|^zv_#94q!mixxL%qvv`Sf8lRj{KZ=E)1leTCZ-nVmN=M#qN2m&6N%xqC(g6x#c=?d&K3o&nFG)HHBH;h{bzo zr3?imWnfwX)67Zr_!|mjQ5Xooaqc4e!aR?uR)k{$=kzS*gt1qyxi;^Qfn_{$RbSxM zl_-z{7HZ))2_8u3<3mz$ZF9)f2)G_cfv!e5`UEb#Rf%pI&8i3+x)G%t2L@DPVr~h$ G#ECDig^RoZ literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 b/frontends/desktop/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..215c143fd7805a5c2b222bd7892a1a2b09610020 GIT binary patch literal 16440 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 b/frontends/desktop/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..cfaa3bda59246b49e94298478d6de3b3208066c8 GIT binary patch literal 12216 zcmV;pFGtXKPew8T0RR91057-z4gdfE0AMHp054wv0RR9100000000000000000000 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 G>;nKVNojrn literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff b/frontends/desktop/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff new file mode 100644 index 0000000000000000000000000000000000000000..8d47c02d9408d34b2a9d566c0fe0d42bf82fb735 GIT binary patch literal 14408 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 b/frontends/desktop/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..349c06dc609f896392fd5bc8b364d3bc3efc9330 GIT binary patch literal 12028 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 ZM6wWJqL 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf b/frontends/desktop/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf new file mode 100644 index 0000000000000000000000000000000000000000..537279f6bd2184ed32f1a5168850609147d58ee6 GIT binary patch literal 19436 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff b/frontends/desktop/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff new file mode 100644 index 0000000000000000000000000000000000000000..31b84829b42edae20d0148eeec0d922dad2108c4 GIT binary patch literal 12316 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 DqysK0 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 b/frontends/desktop/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a90eea85f6f7bded69ff5d40114447a6d8b48cfe GIT binary patch literal 10344 zcmV-uD3{lFPew8T0RR9104Qhx4gdfE08C&204NXu0RR9100000000000000000000 z00006U;u&y2wDl83=s$l;$X`j0X7081A}f0fqDQ0AO(pa2ZI3&fifGaK4piDbvuxV z6#5b(Dmas7|Nm{dAu`ZEP~ECnb|eyPwiTFUR5y*Mx2Ne~jX@c8uTXpvCb3wegGR;m z%=c2Wc%sfsG@ovJqNOc3b(O8mWQ$5aQt&6euR0L)w!<=-Mo2Q-4$p7%|J(~)E-8qF zjfJA9fY?*gpf8b%N?0{@F4INkf2*e}_oBAFibc9tdw-pWYuQY8lBF!cG4Br*%mc*Lwiq#xeHSOGr0 zb3DaLRH-%IWLxZU$ni)jzs}Tmb-AwfieA&}dsA=e?Y*n_u7vzZe(VRLZ(9jDAAg~< z{-(~=#k$(dkGQkKjyzQ`)$g9TN+Uh6(FO&9*7@)=wBO=IbUWS1Wr7ZL3;5In&{ouKr^jC~kC6N*wp;O?) z3D7S;P+b2CTv%oIF)ooGAILnNYNE-vh3pz@2_Ax4+7TexkKPf%YFRomh!yLo0K>jA zcX`b>42T$gVRMZytzMGx+X|FM#wHD#E(Iml{*pw z7WQ zIZj`BRFq{Z4eVMa#dW*I~SqUlfrfocRB3HkDq$pXxlk!f8y-9NoqE^A3>wv;wqSRw&jw+~g zG6HO4qBYgc3kdN@iLA9GwoR(d5Z3`k3v4b$-t;j$bRS7t=AB< z*o!nNAci4QlH@U)ksB2TLq{Om8nakk<&LpTD&E!F@)yP8HQ2lW(B_8N*qG|~tuaw{ z`(TY&UAK-73hUYBcTLLCMQ{Lg_@3LpTIQ8*3aqN@D&ny%V357wgydUpRP-2;zl>Rv z$XhnFqF zS^@8V3-rySqivp+krj`4oGzUaPcDl0UV9Q&O{_{d6nu}>yXqLD06QELrbtrCNRBEb zPl*&LCq*hqiK?VbHBzDac>@Uct`z0Nw;-s9uPuf7d50NYW6#HNM_t>V&pWJ&HO_{P zQ;5~!9WIM>gBtLm4hjuWXo5lu6xyKB0fjCo^gy8xni&JNw~~oHGA(H2tTy&!%vu<( zdWKs#!UNNEoC27^k!eXA(y6zfDU9Z1F1Sw@dtf)%I^wihc$)9R1JzKSH_dFYGYh~| zrO#c&+HxVg@)E>QqfJ^GIREfk(7u$7vXJKWyhE0N8Z*^Rf|{7mE~C0yFN?L3k1-Sd zqZL+Bn8c0>GeS~J$-c|8efwAmVb}DyoiIPHq%?nN-Ej>B&UfMs@^2uIS)`mxnw;$A zu>o~nffHD7KqX42C_+GX5^w!U#huHrPkKSkKIIE5>U-H~29XKv?$XFGzrwfiq zC5Ukla;Aa&CnFgYv6pKV9!mmclPuG;VS>%zl+2fagq22YgeJD~@0f6>71j?oL3Z zddf6}XY;+Aw*)QNW}qvM66WudwqFqW&?Ac*td`|AWM6X!qCo^%+Izy#o4E$mT9qu# zO*+TlJ^kGD3*Rf&ZtxA>2iKyqrU&49U61x{#c8Fe#J-h$1> zr?8AqMI{@elSe3qj(ao5{rL+q3t-d-`><=)vSDnfG+I@W9G?e8fe1gz*uBxp7Bwkq zKAdXon2(Imy2BTxZcELRa+WOwAe2b^6&g=ub7NJXyT%?2-b+cic~ z0(Am|A~9tEi$>UN(5Qn;;>rLXjorsS0Z9%52}#%kAd(_t2n9`OG^NpuCUSY8&;r+_ zlmRLlQL{m(4K7J519WKAu1X+FJ-E~dSsK8lAzT{4r7>KZz-LWSXv2EyEM<`Qo;e6& zVer5T#PG5T0A5?IK~UFhF9>2YnHYhv^)RsWFxq|vA~^tn_Z&g+oIoV!$;66+i-(1) zhlQJmg}ahT9$t{A7yJcXIe2?G_;@(@dN}wgOY--E44ru~^NwG0R@;PPb)=r{&_S%R zs(wPPOJ%EH4b(0!4nUy6ha9i+MEs>82bNW7?i3l2P2O1Y~_ zBG-??&bBS5!!&G~)+nYy#xHr3)&tKiIDX&vY_lgRjQWqrWZTivv}l^DVHJ@lYF$f_ z)%3M}Yg*F!enh3~9P=^Hz$i8C6@mb331l>akR}K-8m$`UHpTPdQ#MCIR=I~Ft5{3S zN;(IYuW1%y)?yB&@mzViE)*fhXa<)2eayJTmZoW6a=Mn_SkzrrMGf~eZjeQsJk_d& zAfVVd+K>g!Qr{h-5Cl~u!62dTDHBt9t1Co(7FKrYguMU{bu|OP#~%|G(gL66nL9LN zED-zrech#*cn+*fDEN3)H?a$cIut&aIsd6intT6lha3Kud{e@8eNUbF*%PYz?3C)< zU_Q0>TG-m9vb^ov3q!C#ekSfktG=WM;y#zA$30S}a9a+2Y}ic{+lBRGdx2(}b1=A8 z;rE-Si@aoLWF{uq1XvGivM5aCv%zo8CcKvYjjqtfqcetz4Z&};ddk!GGzvvGyk*3s zqM2SHSj;(cWVGg`(aFR#)kt&>zT~D@uR;OzpKsQ3{S0>GFYd%k|y|gtOUd_7KlCW+eEzfhz zLnt6fZ0fKp2N?N*9a2B6VXduPnkY^tPG`pr?F}>Yy{+c`^NVeZ=4^mTLbz!YB{q6> z*Xyo7CfuW$EfdX+Q^dW`-M&-ZDZsQ1*Hx~*((HgmX*32DEabPFW7m7Z@{e2zu2aOD=UkZ$ej<+M>G&4S_?pEW zE;wH_Smf$n?e#mpGfv%e3{uxInR&(772kEA-I(Op*Uvjr`WQ(Jn4cT~phT8Q)AP8N zvSrOL7xy)WFN2b8^&x@x%j2G^z6t}eNccqk0Q9K^eAg@rVyEw;*gDxD8#fM@h_<%3 zRXrkE<#ltyK2X(bq0vQb**0CsDt9cUH>~*h0IS(c!xTYCCWREWZSmEJO@F7rg%f+@ zi|be1v>mGU_Scvaf8i6(aDcSohPX}>`yKVfw+X^$wU4fsZY?pI2y`p%`v)9rsbOeK z%u+R3(lr>V_W3JVfu2QqoFkj4_b)i)oq7Wjy?0U6y(bhdVA?}$UsfzijRI!*tfMas z!%`InG$+THB`_a@nn0gLP!}6F()mo9XZ!;rSG2TiP(WEH*LM@!7;C@vjIJNA!gX2Z z5qsCv#akhj`I-;*2Kr4Dayw6S_F7wB1T-<7VjP7&3KF79P%=Ud&4EHn^HA{TvMoSA z(6L*X9|LND1qFa6qzWS)!X%Vnq^D@u6qd;)<{hD$k2Th^Dz>OVjhhaM0#Z2 zk%xcPKyNNrThv`tWGfFbQ>+E_AD}kl*VoUsC#Yel{tke$yVy)BDcR21#BzlqQ{D63 zoQq0cum=2hp|*w^E0t;{A~@I5sW0n)Flnn@abKtAr6pDq1bYLpmZTlVxYrsIs-*m$ z9U5b`#E@pCVvbPW2#uJUM6kDGkZip7i)_PE=p%zgQmB;qPD`k$P1HMv9g=C8MecQT z3^6Jv`^{BgbmK$f>DHHh{!Uqpdt%E347CJVBeEGE=^>I+INp;PV|{I6?XNJcIz$ny2vAhJ~?n@BIQPY zbFzvD{0$>LP)Dw+0?kKgpS;;Bn0IV)X=VolMV@XQzFD{N)~n9Z3^tBpp~(}Si3D?; z$RMgPhG0Yf;2)qU!iw~QEssZFR(Hp)QHZ~Z&vbxjlmQ=3{$w~?8w(ix-{ zsiNMggF!-dh-T_1${jEj4)d9BMKMB1ey99_c+UswwrjTJc2=20(T250Bu(@+B^xLT zHM$;6sj72_#r*aEK)h|?Vv8>vQG~_R;&9n!zNu0CyJbky#U||Hg+59ZKt^C9no&@=bZVQz7R0)yC1!C6vcY4pAd{tGEaLdw<=v+QEe2EUAtV-ziQe7k||V{b@1^rTpI;~ z&t&xVXw%vOsz&Lfw=}<)(M^VFpsvrinRw9An)S(tvvy#Zo!O&N*{Ly9ZN!p5SBOj% zp#aTaV*Zv1nCXtGu|!DDC<^WsdBGqttJTkS*rfu^9G2MDo3lP%hGHPV%v-gtjTZy; z3DnG)?tYKGO$@{z?c5vcyF!=Px=k}+3Ee~i%$bR68#07@^BBd5Hi_bPkr$16(@IHM z7w|TwT`my!K2+vSyb6w{Q6o%~82rRUW=-6QYjhL$?x$7MJMSvW25NNOoBEqrEF(Bg zh8wZgIdWQ!-n4>?oNi#+>z8F+=(;|`Q(yp1F&KX7Sg%bOvjqs>whjPSc824XCW9#Y-@7pG2ol98}`e$3*(Mx zi)2}Ulm=#9{&B0bB+!97|0;63w9AP6%7ny#kgr3!TNYvY0J9#8ev1^}TqF}PFPl8w)~>s>4ldrR{qk%r@e~h0-$@hcMBr_reB15)_(}0L>D{{k4m)~LE1K`4ogY6Q zvgRfgP>ClHyjcXGn%cW(?iD>FtRt2jPa(iy^R#<(t?uJ|c_JAJiN(%KBPjQ~& zmjP>7m9?Fxg*`px9{>Bly*=RfLpv8vW}Bs_OL86xE*DrUEMI6v~bM z4OXcUbQp!%(D7H{vkJ|9w#vempPw<)G^Mz&C3T~CKg+{TAz5isHm%r@uf`{SQf5!+$FcDM(nmlL%!adf zb+qsML0owlwmP#?KZ{9^o0Tj=3$IM)<&VeH4q^6e4-}lixFSgu9G@N`SH+P%RxF8V z<-I%i0K>ZVJ7<5Jtup}RYURP)xpO@Dt5qPSjjT0HWOFex*@2pb*C>^NwE#9Yl{ z?33w>+kVu`_A#>WHzhh9$LeD;k}8n=yHV#eR)LipNVJah^jo}JKeyf<)t;V#c7>wgCXkX3(aXY__R3sZ4=?ZSB_!sRd65kz6k%rOhs)}g-OM8e8?u5W_Ysh#xnN#M)VOFq*gHD^YZ zTZ^*43zILIW)MvnL!+C-KKbOZSgNv8Gk1Ayr6zmdda%K{*sM_xD|c)qBY6v-`^AMh z#T7-l67}AZY=Hn8fx5Z01H!b|=~C^l2h24v6L(IlA;Lf7aq@ryXXO;Bh>vDSE5u|y zLU&H?cXyi2^Fj!HA=I|B%22hrW;1LU`&0kVoGrb00_s@sIB#-95@biO=N8C~kYb98 z>!I_irFfIl_c3`PQF*@Uy-6;}XQz%bE(j-gdk>@3wLQ@)!yAr5eN({UOAGUOk z%vRtX$*Jn5Q4a5&#?nO&_Q8x<;Bxoaj2G5B~<_>q01EI;7#WAJP4 z+L?!6m-i4Atk^zwqr>B}^`~X>vdOU$Zz`v?Hwc2C7 zsgrI|DHlpW>C+QoPbY#hrh%5WIwR1HXsuwEp7H0$5mIIR zkAh+bPn=Ql*69VISL&SZNTQI*Bxe=vuZWT{>Ktg1vDnycrwdGF{29^$4g1y};dK}xc8~mMWNR=UT)M91W z{4s{#2s>&rLYa3P;s#Dl>MgAiR~pll{4%eKhv36}K&sZ31j6cEq`viC!Rn=z+)Ida zs42A~wQ0_(E7XX~ysbk>+|=B9ZZtyB_>6k3kHQm$a zK2&NTsQ+H*kB;WeJqI_LZS!sxeRniAgLMxrNcGTMBYc3?vu5palxbM8sE2j{HqIOJ zNq~st4NQIJ@IxQCX*qjTFMysAS5q{)vS_A=3NLcxAd%xZ1Ancn7@+9Vh5>V zb4z#4ZX2_k!|uiy{@tj1Xwf3@xr5r#rw=cuDch@c=u)pMd`DZI1(+ku7Ess9WO)dj z>?tuQHxY=-3QY6H@iWv%NrJ8_R}~AIrpnh&dWQl_{r~D2JlH)AYI*ZEyJJLFVxH33 zwA(?!XcBwgYMHsOGq@28Tgv7rU@?TchvqK=Q=57`qwL~hYmI_Cxc#WqF7<5^%K+qB z>s+%U_i*dyR$#qvtpc-bET)PrV25kb!_3-!HQ`^yQkl=HsA+QRrQ@Ret*I*SDE>OO zqSt7483ct8qYflW&1KQKGF9d-b~qjXDe~gS54EW3OFUC1hhk>9C}wd8Nvg%_u*s8v zzsWxdAkNR9Ha!EM=;oXas$y&9F)9Rf?){ zTh5nQUqR!I?ar~#hJDYvp~UVjIoeVe1kD|qJ2X~R+|*OaODFGX-4A1V=7Zh34Z zMMZ)N<>B*o){4C zUPVGhBIeZ_=Ai4=cvE*>a&Wo_Bo#Rf+*xf!LLZ(L8G~2skJZ0S2r(ECGZmke7|lpb zuH9>hjiB5tE;xejTw#(_MHUVg^cxF~+>~nE#Z3Cz5ovctE z*tNsA5p2X?(kJEI_aZZ=`G&lRO5XH#*2#yx!>H^2Q?qAfxEBQ@kmbx@nQ0GW&@g2L zl#p~WSqhQ`H8NFNNoNEY*?;~b=L?1>&905^R#5}hG-XS?XY_!ZM2*KRG}`$J zm912w>c>JSj-+v)y5iBD%PXWo_H?;?w%KW)rlMo4%6Wazf4<4y2w3u@kg2#Ww~Z<- ztIEr<%|ZEBeAP2FC?ytKw|sS>cb@Og%F9MLnjqIqE7|b(oYcq(stiN6veF|fRJzc8 zGnGmk(Ms;IsaNnof4}z&hZZ^gowYI!YHZLatEK0vsIfn;AiZpDOX}lloE0WRWdavR zH?P#BRmlHILt{6cds$RSC_WogsMdU=K#@X!cscxTMKP5=)J#<84vaNwu_^W`v$eCw zfH6@Mnv}F{NG0Wv?+`d>zmsU*qbE*S>l^l_2GybtKF?Z1M2>7b4&bb8n8~Vz7J({K zoF4YV+fN|0Q&mD6ljtCk@EZO5tB$yeM@^A9K<%Md6n+`$jtwS{Q(fif2p!S*N)jSS zo+n&9l%74Jx{93q`{VQV#kykM)|Z7k2}qg0=eeW4@{iA<_4NwZui|k7XZWSA(8-&~ z8Ble#`U-%u#hQ-P7=*}>rPc1 zh6uZL4U+an^|J~;9S>^ow~CJAlC1a^2Gop2uaipPa z21f#)0H}4$y6q{cNA`26G|q-EQqq>M=g_FzslriWVOksdQFD?-Ab@p6p6l@|fyjK-J*x5x*^RHN@JN^-H#rjIVETTy@H_uh#gC!Op6N;!F z(O?3_`0*6Pew67e_0K7Xt`NY}9I1{#elpn`1SA7NCbKon%E-4A8d3!W14)25<89TE z5lvRZDn#VNgy_O|Y}K9YEJ&bU&GBCB4RsyefUR2#LddsOn>=mbUp+T_0CX1u-DPYu zF7nn_J9mwMo49Km9B964^^u>ZP`a4f5iGS~EhWGfv*_JQ+pm}=-$gwf8+W*ux$zKv z0;#q95ifhspV|dA-CgV5jPA&c+VWW2;$Vx|Sm@1B1R4Y61yx<1#!gR{2hPU|@tpGc zAE8(jo)_g8u5DIwGet0x<#La5zln7XyFj74+)Z{Kh7I*i%d2YCWgZ$bD#4v$%rLF_mB66DpRp~@w{)B$$^B$^R>S@i8CYk)V{da4 z%Lw$06Z^9oc0WmS;}rC_P7C`p_%p(76UpYGp z3j~l~{New#hQ!-uUif)kZvt?3{?M}^@aq1TMkV86X~rOvMu5n$U~K`~*<%H{S((vz zoHRp0HI^64GLpCq1Q4nd_+6&*xTj(2HxI_s=q(R)*%Lv=GHBUdkNLM05NDaHg5|P| zthT8GoEbIJ^j5yraTNjuTKr$mdd-L_G}WwSnhzn6p8BvavNYyvH3Q*0+|ZzZC1C~s zvtgx#(4uLse;i=3a@|9{_^PLxw!boe2Q^2Ho>Ac2U5*K*K*2IIvWQfaLa8C^0|vNJZ13RGwel`n*PheE~c zg!XeLDMTOUTLLfne{R|-g%p#&@i8`$k?mqy4iJKdLkOTS}(zoh908lUhW;qjdUZuZ7F5p%1t2M!E zkuJMKC**ZmXirC;;CI_x#MnGZi1%&cc1Gf6~4~UsJ zAq^QKeT~He#qAg6*LnpBV)o^&DWJH1y+51ZI~L5!GJFb%^VlPHzS}ejFKJL6DyWH6u8A%3K~me+Y^I^cj}OkYL3`Dq3xS zUS8_~btoUc?*9yjrRykKn!-}`@UYVunQ|r348rO5AJA(*Ity@)<|qcL4O_;%QD<2) zY(Nx>Rn*|71Z8jrYzb{R>et^$tMxj^l^`9nXa%tn>A3iT=a=*56Cu(I!y|;VKTmvw z@A^>_wIECg1Au2?KmH7rfHHt&G#qG%1h6f59s`N9Z48X=voSa(KaRo6O3WAnRdn+r zv@x{mfEGMeI$6J_)~U-lqcv;Pq!(YBAR)Ju5)&(wnQ)2C=hLXy1LGYTw?$^5o(E?x zDpc)i^RkeI4v~;S0oV6czd%sN{6ds#H;(=Q`!u&&HYV?3wSFCIVBPGE`n2&Ev2vX~ zwU_YGl3FiE%~E=EitxoOATybhK-Eb_T%^vJL{{R(8}E(0q0jp`)~PAhcOapT0q}yf zC36Vfu%tu@ib#yo|CYzYI8{S3uv2{kBjP;mQb>sS(zw8b`c}q zWqI}|(Icoo%XzQmS%6|fNZ<9dnUyoZqp;UA{4gV_NfZAmLFm5|eCL89A)}z8p$o&n z6pkeV8wVFpq$ts1#EQe0C`qyu0;$pnrOP0aDN8mn38@@1x$@*IP^d_;QA(6jP*Tw- zQ?5cKEgd}rBNH=>g_Vt+gOiJ!hgX$qKK{U9kr}SL5FEJZX7CUJLckSQU31Be5Fr#I zL1c&mQ6U;chr%F6n2tDV$T1%q9PR697K@b`87R%k@18Yi?|oa&+}Hw{>>lu%_n3_F(PJ`6#Nt`0$e zVdM667!VJSrU5Md*nBWr3&X?YWO#~TS1HorDI&lFFbZ`;84eT_6+glOnwMmpd*ME$ znCnhRh^EDlqhO1f>8t3&+ewp?=v2^<=Io&TCcf@{Fjiv@!SwVG`7mp=@P$dv*MtxP GG{*pT{>~Tx literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf b/frontends/desktop/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fd679bf374af72f2a183b97b40c9c7e9e51fbe5e GIT binary patch literal 16648 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 b/frontends/desktop/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b3048fc115681ee6c1bc86b0aa158cfbbf59daa3 GIT binary patch literal 9644 zcmV;dB~#jWPew8T0RR91041yd4gdfE06`=G03}%f0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Script-Regular-D5yQViql.woff b/frontends/desktop/dist/assets/KaTeX_Script-Regular-D5yQViql.woff new file mode 100644 index 0000000000000000000000000000000000000000..0e7da821eee0dd05a0a6f0b16c2c1345dc573a84 GIT binary patch literal 10588 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf b/frontends/desktop/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf new file mode 100644 index 0000000000000000000000000000000000000000..871fd7d19d8658f64d8696ed9cdfc82c821ed76d GIT binary patch literal 12228 zcmdUV32S#oTTXWHV<#re-U|M~axp9Nr?G3IAyn8Zq(xApYp%MZ0Pw%}2;mZlDr52u3b zB8)9WmCI8nju`;(S@IQp`S%>&dtkEr*LN@$mr?cZEgwCM_6Ej!zJ}7ZcmL@?HTN=OO?RPf=oU1n4~mz-?<1%$zU9ENQ->$qx1pcLe`Eilsq)G7 zx8IGrf%@cu@~Ok@Fa6&~9aUx=EFai?^LIXGK_1}CXAU1adhFp}{@tH2);$7wKX&-Y z?!zB@dd1V|hfM5?Ot3zb-xLvOt1;Fe><^~;gJ$3FPWSbR$fbYk;}yo)!__DFA4ywT z2qHFwvi;FWSW|-yF)GdE!ymrAS=B8|SDSAi;xl|{S(RkZ^VPen_kGhNOKJ%eOi)+~ z3Q@+|!$LFLl7mCppT~-z|B|%Y6O~>+ za)7f>z2<*y4T}=-R2OjKEYn9aTtU#@kTFPcv$M}czsKUd^0%g zgA5meu^t>?3m74pN(~I+i=bq3Z~(@kXDI8G{r!DIef|A0vb(CORN&EKup2oc7Nvq; zRDJ&T$;AN|=Q3{`ZPmT9?A2RG8)eS9E08)E;zG!(@T;!OMvubP*5pQSU{_m6;fiNt z##Q~Y>RHqsN<7w-x>XlF3BN3>UZ^Yk6FuIRPd?rfUfQB^)gKbx?q>g^kEk83$px}% zbjO?3M;`SzcY8%>o_6bC;cOq-4Noi_AsKB!9VH+?DWM`11{^K3Lp3Pt*kN!0Ww$Va za8OYc-<)pV^%<8dv)=3IwRm!Iv&yB&b**8Qb0yTaE8zX$Vp1x6ldP#+leTc^6-+!% zdU4)5?302a$v4~zr5;O!x)*s=zYm59w}cm{UwA}qj&~cX+}i7?)z`{}B!U6PXI~R3 zF(7`%!th(0Y^IWM&rmiSm1A&AD!G`))atLf+btSH>k{`%JgT}8BT98v{K1J(i0gVs z=mX;S7rqFuScMG@J>14A6vKc*`r_ZIu&P#tp zFXaH_WRVsH+mEnxEEYkarGjP<@u&@Ehxl4W+jzI)o!sP0`!-E_m9t{A+jF8TP_#Ybc=vd0O!_?Q$gHkfcD8 zkXFzGoU&OY%NX$-vUP+gBpWG8^Ew7Q&#~tEs?{~#6Z7O7&;Nq&uijSY%s>D1)2_j` zI_D?m3z-;#MY6N1bV|I+7Bi+qWBrlDU_XhG2sX~EK>~9y5iwyADdgSgul|L9b%Rtr zz~^A8VYOdc0CbjWF!RIYBWPSh)DEsbWeAWpj1d1BR{&vQN(2r$1&OyBq) z#FQBEQDVgTLvL2*xXv*G_s!De99zzYq3KVdDPo{;D3OS@h!_%#ZQn#&B+6n@jUzMk z4Z#5P^g~<4NZH8~CK>1v1J_CX%lwa*=rLV{!_o5f**z`QU*0S6F^(ncbNlx99$YWq zdi~*Ly00TJ9HN93V_fx!pmU_jwq3I!$3#dIK`yA$c`^89Fi zc{ZJJ>sK~l!Vzu$1)KJU-$LC{@13xIr6vc~nRg_|TLgPcgB_XGZ;45%o#h#e_Su^- zRnx-Gis3|s^Nk>hqPw=VQgpx-Z5nMIoQGDG!GUd^%}v}TOCGr)*63^U1_S_lb^ z`LAI{Sqe17-aj+eEc{*^fVB}GP?~BUc=11v5B|&gu@(Z(OuA+Wyw5Y~y@$YiAL+!7 zorCtUV+?23tL7o>-|dCV-p-GTY!)wNrfcOTBr$9s?1ZNIg{EP`o!ZC6QU^?2~_{F`hV5HZx#ks$t8VG ziiG59|4)CS%fSVWQs)~NwMLu1CJ}wwf7&@!Q$_sc!M$I-Q*p}+ySgS<-=K5hZf)@h;UC^{GC#U(6Z&6Xph!5#j_{SPvrqc4t??{e zTRiQmUZ_5&E;4T8Pww|^UB08WdG{(`_3MsIj$P8&AJ9H0*chV?FV1PSwuT1DD7H`( zwuo8?MKYJXL6^!!;LJ@8k&`=y{X+QS2KGDp4I8F9rc(zVhH#pA)uVf=U$1_{SG>a~ zb}ZlK+s~i8&1g}p&s8sIcN8}?>H5MiAJzCuKB8iy<=kNWPuw0TkjB2jc;U5gJJ%Pd z(Tm#$?yL3E?L#p7T8Dl0Am8(rv2^#*VUKV}$FAy+s~0s;=dIkp)5?&wu)CI95ZMM>&elQ?ND24ZUUc$KE!5yS zN?Jo4d8QUvs-2r0ZzBrZ>23xhIr}SqtoQ+`LGEfheqk`_FwnQ zlcotO+ovaQC_h-;@yGud;!5oK2lO%hzNvjps;8y$5o1Yfhk_ZdrWUnzb|Mbm)Go~i z*mZ2|9cUOEpdBF|Ezy`XQ^5qnRthF4591`4P2eOu^!D1l$|Z5j&d*0VKX$I}5z60$P+j*Ks=hjq`4`q`nQkGoFQv=utqX(0B2peObLXFh6XY<>u z%*V-{yEpsK-gVbm|ITX5U1!hU^84&tJnS2|9{uWTHqWF_lA$|^uL`Q zd|U~R=tN4-U)o2ceZ}K&`0*nDm4_42ddsouV`o>ay-OeSA(xElbb86o)^pRgcbA8~AQ);v?*Dy0OQ7z6~?ngF8<@+sRI```DM+vwR8vT|D2wAvY=ZiaW%k;(5s< zZIw3`jvg>EA*W9W*;%;-VcOP~CSl^=m(6iGs z11=;3-t{j$(tLAZp{jA1&uDJAK^>OUtx1zySlajIDFuKoYd=tKYgYpITFkVyS zSe8G=UO+j7GAh=vee@EJ$lzX+ZnD@VoCPj@SHcykc!V9MSJK%s`?XkB!YdnW7?KZTW4u&^>MaS{`936 zXHO_iwk1fV`lp8p@fiOsc}L6$`c>ppPRW1BmU72iHQY0d{c{8R#s8}ho!B!z%~mp_ zQ-_L$!_A|4ep51?G&85CezJGZAm5;x2=9T;_xmUD{ zvlm~x_^%g#d9ie{`3HsXt$Hc_Qs+xcY}vu|-G3~WF)X&DFkUo_4d4N^TI^IfHh{y zhNVvwN@y{tPbX-IprKN{R4f+bu$JY`Pg!hh!D1T-Ie~h7gVjP%%ZBp#1~x?)=M^?t zEKZk;7Ec$8H4Tc!H1siZ#V$+97~_T|x0j)lmY*nCnwhg)W)2>}kW!bW+UABOjOmIt znKP)9)Qvmh)3?P+<5QN>nLuaWm@#I+tJ15q!$MmMrHOcXYq4M!6Gg*XxvhY{IN7Bp zN|&W&EO$PA4k^dBx(ih^XChq8T-g$ndn`T$K`gDa%W`K7lGYEkWHt#D$h)#sB$U#a zEv=q8=k~Mwc&;-s7dW2G<$>gNsPHsI$V2s#F+O9K$*H!nS)3eV8F2_%mlCcu%VQ1; z-!+C?i!lm==Tw_N$WQTa=AQC-nKTX;#mz*q6G0rvRD>9}rpsepRzn6V7={(duP4m_ zz(ZC8)wZJ6VEZcwLJhW24A@`_f?L6S$(Sh_RuE?EvO<{++Y1$WdaStE^6fTHby z4Oaj<+GaqtG#u?y_Q; z3a7FO_NH<{rXo?fFjJAKjAtqemCc!oO68(VMWeDMQ*lw*nyI*{OlM#X$NrXDf~8HP z+u|Rh+0tcY=5LUkIE$UqcR2ksO*4#R4##jRCYo?D!Vhrh&_>dGDgX2Dj7(6yhJfkMrn0Z z%=Tuip0w42`M4BQVGSbosuR*I51W+O-xdSm*k$$AU0m_2;}mh$($0#)BjW`mMe<_* zJo8)&XCPw?+L8}~nnP#&t!V<;=c>|DJB$9Ay|Rssn!}X=9wA+aU=Jv8)iEVZmhy0y zmCba=M!Kxw--e37o&x$ZxQIpDjc#KNr39FE-OS7ya}82Z0Sh0pE>@&r&Ld%1csX)c z)QSO3MmlY`(JEe+vpo6q?wM}WFh*uTbH(LoMz=%HQq5c)+ptQMQ&w&%JS7{75r0Zf zDhrD_%CtI?HuysVb9Kp5;qA+(D`pl?JFAkMFHM`4f<+a{PR^I(fJ;T>hbzaFAsX_( zxwb5W- zfs(A*!W@B_uAA$!bR-kQSZ%H$rsT!ZdY`R~V`++9TX>(|^>q7BZKD%V}S68WQ>thm~Wu=M<>~nd^+9!pV;O5jdIsS~F*bvlel6MH&~B?2 zB97ZCQy3>5%a^f1%Q>o3IGdPh-I#ffLaQ?s9cv9mza9DSE~M97Ex_JO6qCIvkByka z@x;7%Nfc{xu0aA`o~~PEEov*$3Gx})rKZiC3D&^`5og+CcY+z-*li7Amao4?`v#EX z;YKS9oQ)Z48H!D0#c`P1SdB%vZmkbwD4?xPF!ScjImT84m;k^D*pfNN?Ut`4(WX^$y?V7a`9k)B+Du74G=!9nFP&*lDQv}^W=Qw~TYPCFo>-vK(;IV3;qfQ0Z72PA}#0(W$d-pA~k zP47+zB=j>5Na!EO$We#hCmfIv&N?6=+y&h0=ji>8U9;)k?SO=Sj{_3=y%>4DL+?HZ zB!n3UB!o|9&Ux&et)<4#$wC^(p$ThQF_*SnyDe$)#Hsp%-oI?FO8v6(8N{K-ZgHSz=qx=}SkR%`x$@qr?KUPl=u=_-&hvcscP#mSEXQL{Dbp$&!#(F)K5lk|PVKTAJ&)scVBBq^ z=D-5~8$4fwCAOM9UxQ_q1n-}BF6Ve# z&4=a7JUE|o2E0$gG9;H_+yAI-&lC8bMoZn32KxY{K45$D>VBaZ(-9eD=cAX6+y+hQ z_uZ4AaKxtIVC)Ab#pyxdJKT-~rZ_u-@gxz&%{IjFMwFW|F9>(OOdBtwK%TjJG>~j> zN_IJ415%y9yU&i@NqiI6H*He3Ij&+`P?GWkJir@xkcW695Az6*@)&R83;04F=goW(em!f|jvw6D z+qAkO$&keSc`inv`I8;lfZX9KysS(r(}i z*Lpo){eO>B_-D4>9=lQ4Jw;-EVp5rn#HBiO$nW6F0iq_%%*u%teFUCQUCBk2umWHC z;T=0b2M%fJ5Tu}V>)WEfqIOq3`Pfp?*=cQR?WNZ{fxl%tWuiAb5bdyx_#cO=`4^xu zIU6TZM1Hd0y{z@q#Ti!WmDUDo!AlDZzJ^FyYFPjKwchMKuU`jQCN44&4%xZeZ)VaM z>Iw9pQ1?tKHJ`gX)PV&ihmt4+B$tKSm8jTl`3SqUDz(;agi)(Qro*~=E~XJE+y1^; zj~cs9g+dBJ27e5M#tm0NApBGkyr>fB+$PCBP3-`1U*aN#ofa z02^*flicKVM$I^z1K2*B1YyJ(FGUq%fXH1G{AfkE=`W1K$&zE1C6+lsJW0GylAKbt zQ?*<5it07BOr4elbKe!AtkmGpl5+x9p0 zZ|dI60tDeYQ(a*Ypw;(-$m$iahgImiU!J@L+Lt(%ru7-Z(zPH6_(ytVtOYs%r}kPv z&gcpdaCuxnK&{#W5>lU%!&?)sOEe`$mx*E5<@Bl(f_o=|NFmrwHPrPGFbf}IG ztTNfMqe;gDX(iOP(J?x*J_Q>6acGs1a7XGvMmJX#~Q@bEQM`qgTq*x4WT zq4(ZGTG;vRyOO497aFhMY}@8jBxxvm36fcqYP6*w<(M!zCIfmnCSz&FQj3IkG#n1% z2qmI`3W69y&o&?o5l29?2Wq%&xn+t-NvE8pD`^-3!z*6!g$qgKjbQ7Ml~IWd`8vyVtgXDC(9C<%!U0(A5s1EYikCQ>4zi4~d0ohFf6E zTmWf7ujlIii0w=#Ee*KM6|rh!u~Tsm$hB+B)~F4yZGi-tsJIElqXH?Gln4^8STY)c zx?n0Pnjwt}WFWchY*DVL;BPbq8KX2FL3WaEQI6F;pQ)c-c#8O_Ck90?-1e)x*VBz% zwCKKLkU`$vx8#rpi$mt;UJAlomfS#^1;;9ow&hoOOhcJ##>9OjJ+<0DN#+?C5r)nw z;sFVVNX0O3rD(UOl-tb!H?#*5u(lZS_M9m&krC@Xk6fMfVbvj4z~dxd#!V+dHgRLZ zIY$J=tQjmhrln_dXYnMIm=YNj9i&)+6ekFZ7bGPJiV_8nk_1i3f=?+zK&gV6uZPxQ zozQu8&#RQ+$3?^Q-3?kTmGXDM?3Nkw?=9mnLCVuz2$u6}#cq)%RN$b7Km$P<1nCfD zK#&Q67J@7YbdZV>QZ+8+BqMQIy4rTTrDgOn_HNY#a{T_$oEDfNGL)*8HO=V^fBS)s zA%QIUt8!)=?#^2u=F`lJioSmvlJ#=)bo-%|Jjka6=H+98-N)YdbAuj}QkOw_2Et0c zZ#tLrq9WzDqySRMFpU6kPT!$|LX>x^f}&FxIbifB3}Q-AO5P;U>WoT)XS8H( zH~y58SEfiy|@R;f~qL>VG;=`?))+CkG zR+0|VoKb`vK-e?q?J=XQ9A&l!?1&LOOZrx|OHe5oVKxbcfqFBai$XyuCAOF|d5HyD z&3Rf*Eh2-XQQ7MUrMFcnAZygUP)@8joxGVHB7#kx7qcDsyW*F zcQ1=*3d{Do5iXCXKB?4oHmHRIfeGrsx!oMJzET$z23xpL(eRK|-|VbD-{*R;i@aIX_`JvM^)2-aEau zuZdwdtJKsudv&FA#`euj8{(yk`B2g!$F8Kj&9u6H6rIZjsyxN{?^C@F7rGT~w<^#L zNp-cxFb>$99w{87T0^AxNp+h7Wv2K6#ZuOwO^V{38PX{sRa|zoQ({5VP?;U?p9fq_l8p#!hrB4O9f{-0 z6LRp8{0C1AWH)Gbv$oqK7y`H(fzRYiz}>C85&KLtd-De*-7q5Er%Atn5M=O0?%+mp4-f9P;3c=77GUUta0CGKY9 zVN0|0U%1yiao_6lrPTh-e)AWbare)-^@mGhEZO zsWun^uJS`~W^}{L)W-B|&s1Ff5;>9Ng+4fs!LPUp; zGb=5tj9_^l4;SnDR8nmeh%!@TrFQ6Niz2b>&7YHVGqBa2F|;AzV>Ecw@Ls&996o$R z6C&MitEJlQALbLwY_lmFjo=njqehKv&6>{)$*rp(qY&=Bu}+F2j#OHfpD7YKte>_^ znPlK_B{9#*_b#13Q60X|uVgC^f;^xPS**kg>r}F|KFVQUsdG>GZMDWy*43ptP1GtP zddIA}6GGyh&uW?SVtQrAWE$WqUvPEc%F9tcA6m*)J2|-$MfN*vrMa(61;N%7p_O$2 zgstqy^MWx*nytZl9d`&}%~v6HpCCvX*U6oQTVWt_2!j{%-e;e33Z+#_sQ4Hck=47@S=8iKjbR zfdpZq3AUA$_fOPhU#>fGnAi4wYfapZ&pK0+6KZ&ePt;wm$)4z!1N}*pjmHx^pbxc^ zYXW?*s_ zpqY*+uD4rCWi9LbFXq~W%Et>aHix0E7CZHw*Y%!3#kO)`&EUEmyWxg6t+wj9KlOh; zw{YuyZy4;W^-y?{KeA!TNml@tZdMc&HJm!ux#8=__1wxmZj~)>KiqYC zzW?w2Unm9oPn`SRyze0OQx)GKl5w=Mym;iW)3F)mr6a+Aga2UEo@dre;b2V(?DSh@ zl6oPd5*C&?tcR!_I0^>+&VF>f)eQOV>N7n*Onn=vU%AT(3qMe{$g z(N8bCOTxY=en7G+{@J{^?G?uDZxA2yK7KDpIdT1eTgSxvB1&n%&`@_?U_S~%VOJnGj{T~Tg^G%{;`8qi(A|%_V=sNpZveZQp4q{lODsSbL8ZQ7vT%CygJ17{f$#sb`fDB$nkcQ! zGv+uQG?~cvu_Jdb)f>tu2WT>ZS0UMw#-o3ql~)CxANi<^CSqgAJ@Pa0%15G4KHu

zJ2S$!l`6KRrrfazuLhIEO`|O>!_M2AYXd@C5;)BH770f?onWuC?JGuSiGETHx3r9k zo0Ecgb>mVEq0IOo+CXD!QNDDt~BS+VCt^{^Jhqh9eBg zm$dL{-UhA5hoZT7jml+tr%1-}m#3^qRb1A@2YI4Xxk|k}SupeV9zeZjlSN0W70t?O zRt~3~AsF~*SJ#t2QrXII^h4Y7y3*^TW(hL`s%hz-ojX10ZEBCNMUCOEo#`Gc4ER*7 z!t5%+-Ip%B`N<*KO1(0?Uir`yvK@?zk#6kp&0Mf0_P4CU`v;RRMPioB`9_=C_PEJz zT1O|VFS;)JJlgM`ydO#Fe5S*;C#blK3I}_y3vA&qCE4)M3z7j1`6VD8sq8G<-q6fE z*G+}Pw%yXFU%c^MqQo)*Y5kOURlmuP zmj!OI3dI9avuWx6iV6!cXGml=nIA7%hx46&xWXmbZ^Wxori!b{k|u-V6%ahU zKBTU4_PcW=rN0RzQgwMhOy`m;`Kw)qao<$VYDZ>irVhS1(hRH-L2@v4F^XWM$L?jMFpRzs_ zGj{|EAB{OEioS&2pbmCsZ705MOYX`xC|sVjFN-QXD=p=IC_Ics@Jg&MZiAwtiB6@o z!Y0oHubjMN>k@z!fv}Z<5E77LL{61uQ3Rz^Q36=FH%daeC!-W(1fnPp9D(IHt&WO` zc^G~#3whDI;MA+nsE{u6EfB`h^2Ti(bK!@D0jG*x z&q(MYV3sFEsEN{xE_U+@OtWsIYM8X7wwq&`E{n~q8MN4-U}zRnuJ;cN?;~V$t}hxR zze))X>y&JM7+_4N3{m0i)gX)oQwYM!=J6&Fj$lEs*^@knz_+uAQLZfNFU!D-cq^rb zx0G5pZ?OdyB1U+bqJLtQRi)iLHy43VcsDyEfML=EyW%59Fb8PG5Nrf+6;0;U^XlGL z6^p&56Is^MCM_5mr#=fB8c?UCj%0YK?dR=7a8ZGSe06wHs~|i>EUE8k{I^U z6%AvAd;6bpyoQ8bedY2A9_Of`*Yk>9lWY-ILRcp)=o^ruRtEU%rySuzV-)Qm*|$GO zgL1W|eFB8MlO15uGJP=i*FzMDK+dX+&1{~4fVbftB#}ZM(#S^vGH?ima1hR76pG*o zijhSLN>PS#jK&yLpb}#-4&yNa6EO*sF$GikgFRg)lijrcaIVS1gu8-)x&OguQBnNR z>UO?26zUxw>|KkU&ev&7zfa?frYQW z4*;S#!!}3&*Fzd^Y-*3#Hnz(tAhdJu6~H5$T8SUNq-@MI?iT9`6G3o~>%J?%j0K$~{jLz%)1<32(gi)L?GD<*0x3ma(Dce5Z^A;W=D4C#_qoHAD5#1 zZIquHIe0(@#3$5+mu>6Vw%wZ}Z(T`9<*g`|Z_Di;L%oBL@T-8PZM&}6daUld-vo}b z$9CD4-00>vlFt+3<#h4OP*HXjy&C)>gVbNP`@rFYuhH+I{mUrdy=(7CE;F#sg>p5@ zYj)=jkCCt2o&~QnD9d|tySHrm!POJc2mQsPV|(`>7`yKTbZ>r!5L!RBZ_C)#UtRoF zLV_nie}XU)1$>5iV68+*%o%frVooJ`=V&y_JcVCJX`WDWvT%sCi&v9M@Ni2?Fc=DU zb|fkiF|Wrh871a)P%mpYR&V{Q1sxsheo$?+*2vFMx3zFoFm8C~&aa>T>0>l@$|#7o zKx6TAkro~=K5qkGrErLT0eq_nadpIFF|XIhIWkG93wFj6#OV+qN-+-DLw@1OnTvEp}5i6&~JA(o^CTDL&vyt|LJGy0u|PEVsByy0@jJPMxEFQ0@5Bq{dRrWh#VCC)bP4W%v= zB%xqD7WH`vd&B1d)BTj%E#*dm9WUHcX%>w?HdyRt;jIPe>nI!||6StV2}k2`y!`S> zaYgKRZ^evX1jQk6S3q$AxWf-2I3U={@CNLNC-CiM9dJ&ZKQJoh^SF%|1f!j~JplZX zB%jyk=8wmRH@;pEQ;b$?`DCp~DP;z!Zo63&&D-lF1EW-=o{O6on=Ce?U<%d_*-<4> z-_DrPTz*##P|EB>wLz0mIARog4>+5?_lBj?zCI>Ml_nv!-agOroBD-!*#x?3;XE%h z+N=h_?u!nYf78@^vyIYpa-JX0(`ZLm;-Yjvc@ zYPA_fv0UsJHp8a!Nb`bLOWD2_R~dH-H4k^7O%!+74F+#*Vwv~#SET+#bERk~w;Dvd zyKkfP%In@`iCVA0Xe%odMCMx^v(gvJqkXkCE>UbBs+OHi-+e=ht@bfdD8m3wy~8?% zR|Sz&pin1r{iE^vgy?f~TY~gWTC5b9h5eAy0DaS7Vf34Cv#%XfgrNHnQ=q^sB?epC1=X@JkYv6v^&36Ce70jFzLiASBH zbOtOLvtn0mLWj??6M~Fo&8*6K4D^Yh$=COot43TA!wdBu(kAym)4h?m53v46XxX3Eog+^&XX6)PT z#qSqiG|}%NkrZD40sY&$Pc6TFt;gLcbT2C0U$_r(sMKBGN6j>O+rr|1QQ;)Jp>}1R z!M3KO-zrc`;RYiU3-?hbRn%|xw;1oai!vrLG1U0kWwe#i%+u%7-FCzv*;_a$oI$q4 zYDjqw<_TU=FfM{N37~VL!dJzF=f(00q44tx$yv?}onN$9$YmAt8tXgmYg$+QqIkeu zA-=UTAsO6{vT%hbWU8oXZ|W}m!>v>jf^-UU5@)_7sD@$E124HHJ^{U&M=D%B0+MhP zsaDTU$VWUXw0VfR$e;(lnCu}ea8d95olJC9S#7b->gJ8tdwr2uZJ;*RBh>hPa;G4e z1$%{o$$>y)&AjYU+1n6qS<=$Wcx%DmY!d`GwZ`7Q_IIp;&0DwT*lKTOvc0-au57l6 zf{B@F*+m4svn#B&kq_@>H-T|>N~BV?4&34eSS0q(PtlEEgfYKTPS-6?a~g-tE7 zP)snLEk9M(iDm;`8H_|~_keUwOG|7fRZ){v)T`3`WP+r8tTqn`3pa#hN!C z1)jGLS<>33vM4X=$_;%js6>I&T8XNoPXK8V#V6Ab_$EN5>R$g0e!%mIS;$Byc zUtoi5IeTZX=%4SF#4>|doL4El{Yy!hEeY!rKjCOxHTK$oX(F}rL&EQ=wTkq(L_b6A z^F4mbii?@GdcK_%&l9NdNmp%^>75%q;-^_vjY|@ww|^;ARtW}=d6tw@Bm$9KhL3L& zy)Fj^9t%&<=?De2B?)2RoT=0TilEpu^c&{e{-vt%!jD|fNrJ8b2<=!SUkN>EpGV;Kvll|2nvoa=C5#8>-sDo+&x<# zOK8RII}e3xFZ|r1tOuG4w}7crEcO@sruCuUppSBW9ERe;VwYv(%3GGj4CQNkcib?4 zEj>z~=GyVI-V}BZ259HRHqLpP*1oEr^uoLyr#0GIYVQm<6`XTxW7=8G_`~=0$JyC) zI;M4hE6mS{vwP!Q9q2q0EB>tT72^+a)Z@L!aMH7a`#eGtoh}Rq=D6e$`1al9@_030 z2xAi`{AG5lolQ1w@_HvHsm)@y_)olPqYu&p18%!nDqgVp7x8#;RdHCd*xdv40O!3P zn)B1I50=#h!QRz@5Z8~XU@pMjV`c}PoSc|sVCj(PL#IwXM5V$ZhgqU3ouu>udQvhw zt+Y5)TwyCNFAh;0r3LI$dkudtoWk7cCOEfgyDki%o`HDs!3fst=_?U8Xko`|`JoO( z)903WX9v`wm=ZXeYFj7F!4ox+#g^-KytsRLaLK1X_e}kmGFg0OB?@E#=iFP>#7Wf z%J1E&7mf{5(YJ5sJr`#`fBdSyu`y2IS7pU=V*W69tb4hH7Uw+7Spic~Zw;BK|=}zs|zJ zi8HkZ>Y}$*h(-VxrPixPt|`7;e69Ez$48Gnz;5OR91%h;=W;Dun9{5a70_j(FT!IBAt1=pG&uu5#1;#};hZ`NR`X zEV#D#vulb4W25W|Utq4P6t5Mk%V>JX6W35dubj90u2*RBNQdK!&$zqXcYfRv`ygix z!oS&SF%8~Niq#hv9=VnZ-5s&L`|m#Ps#mUIN6OK3ZLv_QYd-VS6R#AnqAX}$h2XNS zG6(t2yEvWyMm|CYqoMPL?^!*ip4rR{(z)OpAwMX zMY?^L;PCmawNlKpof_=b^RX6e_r#=Hs~^`{yS9IX!ZfRBUR5Ne2Xmq5Day8vtYLv@9604 z(sdW=`5MI+EveQ}>@3D>uxgbQE{qp$VwbanSOvUJw|nT)Lq~4A{1yd_>2B%oq{pORn<`B=mAT6vH20cs09P&(&$^|? zr#9KUe@pDbuS&9Jz!_KRM1ecxl2(Mgt=-)cx(Z}(L)rD@BpyX*CSCMLl)(C`f?&w7}HoW|prfg@y$ zjga+*m%*d-aC&?-n+(HezC<<}yUw_ZS4od*md@A&Bt)37pWe#7&Bhr{O5`teNKcb? zs(Zggf0U5_bdXnHD;3G`)`3y7gvd=sL7wU&8x6z4r7|J6T#5}*=_70MI2T^$#+!TE zO+=ysHWC?_3GW5CS-XUMoE#xvVBcad3PPQ;uBt9l_oQM8z0$;*#3tj^6ne<$(@HLy zMak;yplq&tTrq`y)kJj4sehY#aq9W02c~YBx_N3>VWq@=RR7L|roIlHw*Wnm?t1X@%fERRkKxW!ARR98yQW|Mj5P9^gV zLP}++b%$lOTmh2GjjH1C;R(hV*rFjsRU+`qqq6$=uqp;OPBc<$YG7nQH4dZ$s?d;Gb5R<^{_(V|4iBSh zNyaa$T^#GmWaPX~4UHO6RVvA98*gvpl#dUmWq4yeC#&Y+bQU!-Z!>c&&arsbpUq@4 zet1hQPmQQ#OK&s4?D;Rr+C;vHfJ)Uxr|DiGntYF8F>`;D9KEV zY6!~%vMM&@V3U*@POFlVR82|}BY-a17S*V^8=jCy^U~&|%p1A6eqDY3R!MeXL^U)8 z(3q0P<#EW$w;3AXq1EZ^us^pZlU6c;jI1tMn?{?T`=z8xizp! zZXlKGTxc^?NWt{1JTR{0_@HXeCVoC3s_ci7(^_I^m0Z6r!g`MGYCU?P^NeY;JK1>r zE6GV~IS~dhM1CcZX+jX&!+FLA)X`jji|Po&1X)(?spZ@Sykd2F#ag}6A3(iJt9OU< zq$0IGov)}!sWg{Voy~m8A+(ZtJAXOwQmGeXAv6r9^L!q{UCD8bFvL2V0t&iKR=y-3hd*s9`OCU6gv<@bDt!F0bkXnTT}SppoUvNm8|> znzxKc6j|;b2hYWG$>fO6PcvC3NuFuVNZODO4V1yG zYQ$*IovxT!v{_%3#8h@vQ4LsBk?h1&&JR4BL4J5|pBz*}{#OQbU48`;24N?FCI$S? zA_R)?lx##2!C)8=a9Ba!qX{_X_-e(K5b!Q#(syMcSh}ZuAwvU0u;dG+8*Vyprb#s; znaJ{>GQ@@QQS6y+(~QwQt&(-=h}?|@oomnZN-&)n3f0(v(lRv7>|OLhe1GI+mC|S- z^S7wI)6z8Wmxe3LH#qM#d3uPKAb&)-7Y9{eDn0DSnksi^BKbDz#=PyD)4Ik#Jf}4| zr**pTY<}UOCK(5wur3jtPf zFAl)n@*o!BX>Xk$<^ip)f}1Z0WDzfnjY2mI+Vd_`$J_!1TI{I34A67jrrdyM)te*rl9K!!~i510c(C znHY%hG=Ju`q~T1j1khL7oJAJBc=>6}bWqO>1tEl^H#Ku0;vSnKp7-&meVNo@a` zbZDLfA3+>iv>F|Igr9}`^Y!$`)!6>unC9it{(K`ZKWrj;1?kWD^C4dKHPcZ-#U(e6 ztkWpbz(09nYkHVY9aF{QSdRNA4WmZV->GVV&+@Lfn+G^`!CO!~D3qcd0H&e9m>=8WKM z$zjMo1kZ52WX=EkHGdw&dlWU(BPo;fq4jQUB+ouBJjTq34DRRsb9%0YrCTB45IF49 zIOr6+K*{5D59oDimjmZm-?j3_iS%#>ub|stSwr0VEeAoEhBq( zZ{{`8XuH-DjYd;?Ioe->13FBV+EeYNa>?^^f1``8%dtyLu?`zZf a^|k5z`r34UeQg~YeP3G~_EX$#+W!Ytlnjvo literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 b/frontends/desktop/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e1bccfe2403a4ed770c1697ae7c15b9e1cd9bc4e GIT binary patch literal 5208 zcmV-e6sPNVPew8T0RR9102EjN4gdfE04)>%02BcL0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff b/frontends/desktop/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff new file mode 100644 index 0000000000000000000000000000000000000000..e6e9b658dcf1cd031ac82b6b8f312444c55d4fc0 GIT binary patch literal 4420 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 CPy?p` literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff b/frontends/desktop/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff new file mode 100644 index 0000000000000000000000000000000000000000..e1ec5457664f438ce5a1cc6dd8409bf60ca7804b GIT binary patch literal 5980 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 b/frontends/desktop/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..680c13085076a2f6c5a7e695935ec3f21cddb65f GIT binary patch literal 4928 zcmV-G6Tj?tPew8T0RR91024p}4gdfE04S^g021l|0RR9100000000000000000000 z00006U;u$M2o4FH3=s$lpb(dJ0X7081A$BnXaEEt1&II$gDMPx92+(xvye7xR)-Qr zuyF+D<2}WHmB5qvtDzk>iwqJnL*(fZs|06Yb!k(1`ETc1I4-BI5fi@^u8fdm)_=e` zdp}9j)YFz0DG~@_Kr>cMHY70C!K^ZDLNTA1b7Br>uDhMiy#E2l3s-l)|7lD20$2hm z@RXnGF4_PYHl#gB*k&mx`PNs|E@~BRiaIk-Yp%L*)p~xqH)tK24LDPq+9^`k`Cgg@ z?wr3yPQ)iMi`0C({fo<{L5l+`f3Eib=1O^!+?5mxbFzfbmnAs&^Jiy+y`4!4(_Cp% zqD;z%tlFv-x2E;!;w zVW0LxIo!N76;gG%@Hb~*66P0cigm@!%!Cno$kKtF{J6eOf$5?ZhZ zGxUV~z5L(+ewzJn*7bz*N{9T6&S$7sY0!Etm|_zlZIG>ifQcfRwh5_SQlHslg9^@7tlD^wLmOxkR|-Rl>&iBW8}oeXg=l3PGl0WW7UOHQ$AH=-*sQ_FPT5-1d5EJQD9Pn$NP z=&ex`C2L6`ubBa-+$U+ol!uAv{MKA*F%G6?$zgGfC`t3*GI6_Eb;)%5MJ*?0ruoG$O;U?7n^){QDYAVGaEVAHLqZB9$dHf<2?`{n zLBa$`NQZCJlm;XxcSy38uj#vUF*`Hs$Te_xywo5!OD#vP&QtM_|MGmbfNp9M$0RSK=0_8_ zABCw>{ZyuM9=Qack^&VKMj|Ak)m~&+sFoKh!y*qw(#BI)DONKBw}KKQLVnAX zG1&USa_<#$+$JX-mDDDeb~MggE1*$BlEb77LoKF}k$@k0xv!=(a9U`DIxRMzDx4M- zby_$y8F)ug0CH(Ej8jTz)P`gfLQ@?uVB-n6GIj$~)F}})=^B$un~SNqEM_044HB;N zhGmM31%SFVDb>`A0h1#dQO?j~Y^-I)6a-yTPH)gB2)PoKXk{Nguv@^n30~1Uz4`%@ zD`m4i&uZq$jbBlIr!`;~fTB|CWScMarV3S1Y6Ge}8#%>J_FVVI{x3$o9E61rv-C=)ljThD#+}}^zAw|gQO7_rj>e?#e`;j4(=L3iD8l>nvKp>+j@jEgyUwZEikoU zHWST>2naBxf=JYIC;){c0_HLu-=J;+&@vhwQB#6|W=GUg1Q6yqqWK8|7C1^ROpF?C z4J(R71hg?xdm%6l9Zb|25zxhC-Rw}!J;^ooCJ5+rWc?5T1CD4gLBNosqr+-OSs87_ zHo}VL7ojq>IQPjFsy3FWnUJ(p$So71-$xwI z?-zDt94hM6EP-*1I$K5)wa*E%kwg-TMNvt2=HcQl{g&m$ZUSxtJ5FpQZ$aTfFJ)Q^ zKqdy3I8BgEQ0@SJBhqaonQ$$rn0XLeCP8yU{np*|Vs>g`NUiHm1r*-6C^Ak@npARd z+~sMJ@odvPOygYR7IQ1sqae%e#;7iVVvO(o1Ck$0* zFd;Bmk#K2Cdlr&B;k#c9JTX4=Tb+%hn~s0mmbsT+pj5fN?boKS1uqw}iVm{fn@Pzy zlBeJ}FNK{1rNjm{l2+_Gjs>rRH35$8i)y?pjmO2P18mc2)B)8;a&4%GCor|!ue2l0 z@X11NoM#Ltr=3&ntIU+uA7Q!Dp}Y!^&Ni{D-6snT!|DB3i!jgBoFj`Q*i^tK&VyE& zvw)M1orI5?t@f#>&HD zak^D@rlVy+5kEoOn_MXLu0H+IQn&56%Sqs?@mfCVarak6{Uy;q{3a2bl}wz`wDWW2 zFe_eM+Gu$l-T;AwdpZ%+8c>Xjj9L02w!{{t3%dFTa16K4; zIWgrd&P@RPxY}Dr-k_JC=$4!E7KBmC2$MP#w->H5!6_>Pr9I@t|HRTurr;U-+c_17 zle`RDGL=Dw*u?=Af_22JyfNP9Y9`_6ee?*coA&SST${*$%I)9i# z>QCny1#6hw;;UEI`#w-TSOu)Bv#Nl9%?K)BC3UGOY|qXa&%vaQ&-k$DKw$9Uzn^>N z;eYm}h<1CJ|M-dDT8kDhn~;uxfl>{O`#pnGusBQTSLWLp4DhWwVxo*Jch`sW+*@`` z_ak7SJRpZ@zrTH5oMa}J_!{pz=N{2)H*N16;-^2s^hBQjFPN0S{9v~~X*yzY_B#zO zZ`@+Co5ek=JsDu`K7U@w>p@27n{aZ>nzEX1pWoc#*^kkriEAA7%^NB*>>W^ey;Zpi zK!h)^cg;i*qx(Fqr!ofnW(o(Jlf!m9yX8!vY0LMzT4C!J!MLHRZ~Cm6X}7Ig@)HLQ zN4^)s3V-w0A8ldnFz_#kX$F&6{MfvW3#FaG49`9U;jg#Mja*)<+B@LVi8>dBl55q- z<(9ei@FTF_lM#&RYYcTxSBh`d_^9v-bF)Asgvwz@xrQ-KuWBg<$S|DWP7O|s(zdQE(#);lqcVpr9 zSKNgW-))N`jHq|DB)ATJ8H}+79&pVt6y$wTZJe&42aC)hH};_9m($#@|E1)$CS3N4 z`O|W9wY%3hVY)?s53f)8=JJ$umzkl$!eV3YQ)MfaYwE79zY^UoH*1k01Af^b>H%ZG z^-DO;E}HCzW9!w$_j~-7$l*4@;Rv(b4R1>?|7ShTT$e0)e4>665*$kjchBvGYlW zVFf{88Rp5xs_ysr^`=9=Fi?M47nbk1E?9R>W>`1R@MHqzN_m-wSvrhkCVj<4pSw2P z9)=TJ^AcaxXRvNtuJ_T1AAF?ccXZ%oE_l%9(r`;hs!%jQG?KAQ^?y|NMm0=%m zDp3wQk=5Rfussmr&7R<7&lQCop?gBz@77;ie_dPVir%j-KZ3*88_esm=dk1WcPGAg zto?*Wm=AMA!|Wqb!MEldKGJdgGeJxdqsAN-1>yD|6?!3WhqDhm>PHM>j@5nhx#9SC zj^p2-XK{?-drRD44zlS_--hSvOCM?YJ?{7N{K3&Z!TxDjURSqu!?e!HYXw&1>@L0Z zZ=-jKj*UzCrvgQ_uG{h>He8n&ugf-VTVA_iTHV%la@cN*S^%7Rg7*2Tf+kR*!tk*_@q85UwF!pw(p|nk`ns4bNmF3u!6WrJ!9# zT^44B(E|fR(rr2R^(;aba*?6@{ZjXVY_1F|9y?hWL?q1gppPxAM3zE_WC}8Bbh)$x z{n%R~yGzrnT4THQvNK6vTcWBi$4ecM>e*PrOhhnvRW%Hq7FP?Yee05N4RUnp3c%t4 z38w?h+SS7nbYPivurP_2byCduQ6FY!VI<&E`djO1pk75!^k?zAa`GJs5iIxC+f{{a z7`Rzd#v*CwDlx~hw-hBXRw<4;5_Hl%w*>9g(~%NK%i=IJp!MrN39~R2^?_pyOs5yO z6ge2o{ae&O0u#(|U<%4nfdyzK24CVUVu`~Yq$8g6B#?oOWFj+J$VxU6$xaS(QWUw! zP0CfBZ=4xqAJKL2sICSTTqTeI literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff b/frontends/desktop/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff new file mode 100644 index 0000000000000000000000000000000000000000..2432419f28936aff53ddfa2a732d027e6a6648fd GIT binary patch literal 16028 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 G0ssIW}E$%rmP@UWH#*azT!5^S^@#OiXi?5ka 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 MzaRX}iWL5T03x1QQ2+n{ literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/MarkdownPart-Bhe_jloX.js b/frontends/desktop/dist/assets/MarkdownPart-Bhe_jloX.js new file mode 100644 index 000000000..afe611b68 --- /dev/null +++ b/frontends/desktop/dist/assets/MarkdownPart-Bhe_jloX.js @@ -0,0 +1,271 @@ +var an=Object.defineProperty;var nn=(r,e,t)=>e in r?an(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var nr=(r,e,t)=>nn(r,typeof e!="symbol"?e+"":e,t);import{bs as ir,g as sn,b as a0,aj as U}from"./tauri-compat-tfiFK9EG.js";import{M as ln,r as on,a as un,b as cn,p as hn,S as dn}from"./markdown-preprocess-Bvg4n8KE.js";import{Q as sr,S as mn,U as pn}from"./main-Knf6L_en.js";import"./index-Bpi3BHKj.js";import"./WindowsTitlebar-CrkUa1UM.js";var at={exports:{}},lr;function fn(){return lr||(lr=1,(function(r){var e=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT + * @author Lea Verou + * @namespace + * @public + */var t=(function(a){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,s=0,o={},u={manual:a.Prism&&a.Prism.manual,disableWorkerMessageHandler:a.Prism&&a.Prism.disableWorkerMessageHandler,util:{encode:function y(w){return w instanceof h?new h(w.type,y(w.content),w.alias):Array.isArray(w)?w.map(y):w.replace(/&/g,"&").replace(/"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(A){var y=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(A.stack)||[])[1];if(y){var w=document.getElementsByTagName("script");for(var k in w)if(w[k].src==y)return w[k]}return null}},isActive:function(y,w,k){for(var A="no-"+w;y;){var T=y.classList;if(T.contains(w))return!0;if(T.contains(A))return!1;y=y.parentElement}return!!k}},languages:{plain:o,plaintext:o,text:o,txt:o,extend:function(y,w){var k=u.util.clone(u.languages[y]);for(var A in w)k[A]=w[A];return k},insertBefore:function(y,w,k,A){A=A||u.languages;var T=A[y],O={};for(var P in T)if(T.hasOwnProperty(P)){if(P==w)for(var B in k)k.hasOwnProperty(B)&&(O[B]=k[B]);k.hasOwnProperty(P)||(O[P]=T[P])}var j=A[y];return A[y]=O,u.languages.DFS(u.languages,function(W,Y){Y===j&&W!=y&&(this[W]=O)}),O},DFS:function y(w,k,A,T){T=T||{};var O=u.util.objId;for(var P in w)if(w.hasOwnProperty(P)){k.call(w,P,w[P],A||P);var B=w[P],j=u.util.type(B);j==="Object"&&!T[O(B)]?(T[O(B)]=!0,y(B,k,null,T)):j==="Array"&&!T[O(B)]&&(T[O(B)]=!0,y(B,k,P,T))}}},plugins:{},highlightAll:function(y,w){u.highlightAllUnder(document,y,w)},highlightAllUnder:function(y,w,k){var A={callback:k,container:y,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};u.hooks.run("before-highlightall",A),A.elements=Array.prototype.slice.apply(A.container.querySelectorAll(A.selector)),u.hooks.run("before-all-elements-highlight",A);for(var T=0,O;O=A.elements[T++];)u.highlightElement(O,w===!0,A.callback)},highlightElement:function(y,w,k){var A=u.util.getLanguage(y),T=u.languages[A];u.util.setLanguage(y,A);var O=y.parentElement;O&&O.nodeName.toLowerCase()==="pre"&&u.util.setLanguage(O,A);var P=y.textContent,B={element:y,language:A,grammar:T,code:P};function j(Y){B.highlightedCode=Y,u.hooks.run("before-insert",B),B.element.innerHTML=B.highlightedCode,u.hooks.run("after-highlight",B),u.hooks.run("complete",B),k&&k.call(B.element)}if(u.hooks.run("before-sanity-check",B),O=B.element.parentElement,O&&O.nodeName.toLowerCase()==="pre"&&!O.hasAttribute("tabindex")&&O.setAttribute("tabindex","0"),!B.code){u.hooks.run("complete",B),k&&k.call(B.element);return}if(u.hooks.run("before-highlight",B),!B.grammar){j(u.util.encode(B.code));return}if(w&&a.Worker){var W=new Worker(u.filename);W.onmessage=function(Y){j(Y.data)},W.postMessage(JSON.stringify({language:B.language,code:B.code,immediateClose:!0}))}else j(u.highlight(B.code,B.grammar,B.language))},highlight:function(y,w,k){var A={code:y,grammar:w,language:k};if(u.hooks.run("before-tokenize",A),!A.grammar)throw new Error('The language "'+A.language+'" has no grammar.');return A.tokens=u.tokenize(A.code,A.grammar),u.hooks.run("after-tokenize",A),h.stringify(u.util.encode(A.tokens),A.language)},tokenize:function(y,w){var k=w.rest;if(k){for(var A in k)w[A]=k[A];delete w.rest}var T=new g;return S(T,T.head,y),p(y,T,w,T.head,0),D(T)},hooks:{all:{},add:function(y,w){var k=u.hooks.all;k[y]=k[y]||[],k[y].push(w)},run:function(y,w){var k=u.hooks.all[y];if(!(!k||!k.length))for(var A=0,T;T=k[A++];)T(w)}},Token:h};a.Prism=u;function h(y,w,k,A){this.type=y,this.content=w,this.alias=k,this.length=(A||"").length|0}h.stringify=function y(w,k){if(typeof w=="string")return w;if(Array.isArray(w)){var A="";return w.forEach(function(j){A+=y(j,k)}),A}var T={type:w.type,content:y(w.content,k),tag:"span",classes:["token",w.type],attributes:{},language:k},O=w.alias;O&&(Array.isArray(O)?Array.prototype.push.apply(T.classes,O):T.classes.push(O)),u.hooks.run("wrap",T);var P="";for(var B in T.attributes)P+=" "+B+'="'+(T.attributes[B]||"").replace(/"/g,""")+'"';return"<"+T.tag+' class="'+T.classes.join(" ")+'"'+P+">"+T.content+""};function m(y,w,k,A){y.lastIndex=w;var T=y.exec(k);if(T&&A&&T[1]){var O=T[1].length;T.index+=O,T[0]=T[0].slice(O)}return T}function p(y,w,k,A,T,O){for(var P in k)if(!(!k.hasOwnProperty(P)||!k[P])){var B=k[P];B=Array.isArray(B)?B:[B];for(var j=0;j=O.reach);v0+=Q.value.length,Q=Q.next){var h0=Q.value;if(w.length>y.length)return;if(!(h0 instanceof h)){var x0=1,u0;if(b0){if(u0=m(O0,v0,y,j0),!u0||u0.index>=y.length)break;var le=u0.index,w0=u0.index+u0[0].length,S0=v0;for(S0+=Q.value.length;le>=S0;)Q=Q.next,S0+=Q.value.length;if(S0-=Q.value.length,v0=S0,Q.value instanceof h)continue;for(var X0=Q;X0!==w.tail&&(S0O.reach&&(O.reach=ue);var re=Q.prev;oe&&(re=S(w,re,oe),v0+=oe.length),x(w,re,x0);var Te=new h(P,Y?u.tokenize(C0,Y):C0,y0,C0);if(Q=S(w,re,Te),L0&&S(w,Q,L0),x0>1){var V0={cause:P+","+j,reach:ue};p(y,w,k,Q.prev,v0,V0),O&&V0.reach>O.reach&&(O.reach=V0.reach)}}}}}}function g(){var y={value:null,prev:null,next:null},w={value:null,prev:y,next:null};y.next=w,this.head=y,this.tail=w,this.length=0}function S(y,w,k){var A=w.next,T={value:k,prev:w,next:A};return w.next=T,A.prev=T,y.length++,T}function x(y,w,k){for(var A=w.next,T=0;T/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},t.languages.markup.tag.inside["attr-value"].inside.entity=t.languages.markup.entity,t.languages.markup.doctype.inside["internal-subset"].inside=t.languages.markup,t.hooks.add("wrap",function(a){a.type==="entity"&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(t.languages.markup.tag,"addInlined",{value:function(n,s){var o={};o["language-"+s]={pattern:/(^$)/i,lookbehind:!0,inside:t.languages[s]},o.cdata=/^$/i;var u={"included-cdata":{pattern://i,inside:o}};u["language-"+s]={pattern:/[\s\S]+/,inside:t.languages[s]};var h={};h[n]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return n}),"i"),lookbehind:!0,greedy:!0,inside:u},t.languages.insertBefore("markup","cdata",h)}}),Object.defineProperty(t.languages.markup.tag,"addAttribute",{value:function(a,n){t.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+a+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:t.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),t.languages.html=t.languages.markup,t.languages.mathml=t.languages.markup,t.languages.svg=t.languages.markup,t.languages.xml=t.languages.extend("markup",{}),t.languages.ssml=t.languages.xml,t.languages.atom=t.languages.xml,t.languages.rss=t.languages.xml,(function(a){var n=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;a.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+n.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+n.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+n.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+n.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:n,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},a.languages.css.atrule.inside.rest=a.languages.css;var s=a.languages.markup;s&&(s.tag.addInlined("style","css"),s.tag.addAttribute("style","css"))})(t),t.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},t.languages.javascript=t.languages.extend("clike",{"class-name":[t.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),t.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,t.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:t.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:t.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:t.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:t.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:t.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),t.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:t.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),t.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),t.languages.markup&&(t.languages.markup.tag.addInlined("script","javascript"),t.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),t.languages.js=t.languages.javascript,(function(){if(typeof t>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var a="Loading…",n=function(E,M){return"✖ Error "+E+" while fetching file: "+M},s="✖ Error: File does not exist or is empty",o={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},u="data-src-status",h="loading",m="loaded",p="failed",g="pre[data-src]:not(["+u+'="'+m+'"]):not(['+u+'="'+h+'"])';function S(E,M,R){var y=new XMLHttpRequest;y.open("GET",E,!0),y.onreadystatechange=function(){y.readyState==4&&(y.status<400&&y.responseText?M(y.responseText):y.status>=400?R(n(y.status,y.statusText)):R(s))},y.send(null)}function x(E){var M=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(E||"");if(M){var R=Number(M[1]),y=M[2],w=M[3];return y?w?[R,Number(w)]:[R,void 0]:[R,R]}}t.hooks.add("before-highlightall",function(E){E.selector+=", "+g}),t.hooks.add("before-sanity-check",function(E){var M=E.element;if(M.matches(g)){E.code="",M.setAttribute(u,h);var R=M.appendChild(document.createElement("CODE"));R.textContent=a;var y=M.getAttribute("data-src"),w=E.language;if(w==="none"){var k=(/\.(\w+)$/.exec(y)||[,"none"])[1];w=o[k]||k}t.util.setLanguage(R,w),t.util.setLanguage(M,w);var A=t.plugins.autoloader;A&&A.loadLanguages(w),S(y,function(T){M.setAttribute(u,m);var O=x(M.getAttribute("data-range"));if(O){var P=T.split(/\r\n?|\n/g),B=O[0],j=O[1]==null?P.length:O[1];B<0&&(B+=P.length),B=Math.max(0,Math.min(B-1,P.length)),j<0&&(j+=P.length),j=Math.max(0,Math.min(j,P.length)),T=P.slice(B,j).join(` +`),M.hasAttribute("data-start")||M.setAttribute("data-start",String(B+1))}R.textContent=T,t.highlightElement(R)},function(T){M.setAttribute(u,p),R.textContent=T})}}),t.plugins.fileHighlight={highlight:function(M){for(var R=(M||document).querySelectorAll(g),y=0,w;w=R[y++];)t.highlightElement(w)}};var D=!1;t.fileHighlight=function(){D||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),D=!0),t.plugins.fileHighlight.highlight.apply(this,arguments)}})()})(at)),at.exports}var vn=fn();const $e=sn(vn);(function(r){var e=r.util.clone(r.languages.javascript),t=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,a=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,n=/(?:\{*\.{3}(?:[^{}]|)*\})/.source;function s(h,m){return h=h.replace(//g,function(){return t}).replace(//g,function(){return a}).replace(//g,function(){return n}),RegExp(h,m)}n=s(n).source,r.languages.jsx=r.languages.extend("markup",e),r.languages.jsx.tag.pattern=s(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),r.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,r.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,r.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,r.languages.jsx.tag.inside.comment=e.comment,r.languages.insertBefore("inside","attr-name",{spread:{pattern:s(//.source),inside:r.languages.jsx}},r.languages.jsx.tag),r.languages.insertBefore("inside","special-attr",{script:{pattern:s(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:r.languages.jsx}}},r.languages.jsx.tag);var o=function(h){return h?typeof h=="string"?h:typeof h.content=="string"?h.content:h.content.map(o).join(""):""},u=function(h){for(var m=[],p=0;p0&&m[m.length-1].tagName===o(g.content[0].content[1])&&m.pop():g.content[g.content.length-1].content==="/>"||m.push({tagName:o(g.content[0].content[1]),openedBraces:0}):m.length>0&&g.type==="punctuation"&&g.content==="{"?m[m.length-1].openedBraces++:m.length>0&&m[m.length-1].openedBraces>0&&g.type==="punctuation"&&g.content==="}"?m[m.length-1].openedBraces--:S=!0),(S||typeof g=="string")&&m.length>0&&m[m.length-1].openedBraces===0){var x=o(g);p0&&(typeof h[p-1]=="string"||h[p-1].type==="plain-text")&&(x=o(h[p-1])+x,h.splice(p-1,1),p--),h[p]=new r.Token("plain-text",x,null,x)}g.content&&typeof g.content!="string"&&u(g.content)}};r.hooks.add("after-tokenize",function(h){h.language!=="jsx"&&h.language!=="tsx"||u(h.tokens)})})(Prism);(function(r){var e=r.util.clone(r.languages.typescript);r.languages.tsx=r.languages.extend("jsx",e),delete r.languages.tsx.parameter,delete r.languages.tsx["literal-property"];var t=r.languages.tsx.tag;t.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0})(Prism);Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]};Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity;Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup;Prism.hooks.add("wrap",function(r){r.type==="entity"&&(r.attributes.title=r.content.replace(/&/,"&"))});Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(e,t){var a={};a["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[t]},a.cdata=/^$/i;var n={"included-cdata":{pattern://i,inside:a}};n["language-"+t]={pattern:/[\s\S]+/,inside:Prism.languages[t]};var s={};s[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:n},Prism.languages.insertBefore("markup","cdata",s)}});Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(r,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+r+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}});Prism.languages.html=Prism.languages.markup;Prism.languages.mathml=Prism.languages.markup;Prism.languages.svg=Prism.languages.markup;Prism.languages.xml=Prism.languages.extend("markup",{});Prism.languages.ssml=Prism.languages.xml;Prism.languages.atom=Prism.languages.xml;Prism.languages.rss=Prism.languages.xml;(function(r){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;r.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+e.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},r.languages.css.atrule.inside.rest=r.languages.css;var t=r.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))})(Prism);Prism.languages.c=Prism.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/});Prism.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}});Prism.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],char:Prism.languages.c.char,comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}}});Prism.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/});delete Prism.languages.c.boolean;(function(r){var e="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",t={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:t,environment:{pattern:RegExp("\\$"+e),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+e),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};r.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+e),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:t}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:a},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:a.entity}}],environment:{pattern:RegExp("\\$?"+e),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},t.inside=r.languages.bash;for(var n=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],s=a.variable[1].inside,o=0;o|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,a="(?:"+t.source+"(?:[ ]+"+e.source+")?|"+e.source+"(?:[ ]+"+t.source+")?)",n=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source}),s=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function o(u,h){h=(h||"").replace(/m/g,"")+"m";var m=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,function(){return a}).replace(/<>/g,function(){return u});return RegExp(m,h)}r.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,function(){return a})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,function(){return a}).replace(/<>/g,function(){return"(?:"+n+"|"+s+")"})),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:o(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:o(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:o(s),lookbehind:!0,greedy:!0},number:{pattern:o(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:t,important:e,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},r.languages.yml=r.languages.yaml})(Prism);(function(r){var e=/(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;function t(a){return a.replace(/__/g,function(){return e})}r.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(t(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(t(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}})(Prism);(function(r){r.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var e={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(e).forEach(function(t){var a=e[t],n=[];/^\w+$/.test(t)||n.push(/\w+/.exec(t)[0]),t==="diff"&&n.push("bold"),r.languages.diff[t]={pattern:RegExp("^(?:["+a+`].*(?:\r +?| +|(?![\\s\\S])))+`,"m"),alias:n,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(t)[0]}}}}),Object.defineProperty(r.languages.diff,"PREFIXES",{value:e})})(Prism);Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/};var or={},ur;function gn(){return ur||(ur=1,(function(r){for(var e=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|)*\*\//.source,t=0;t<2;t++)e=e.replace(//g,function(){return e});e=e.replace(//g,function(){return/[^\s\S]/.source}),r.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+e),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},r.languages.rust["closure-params"].inside.rest=r.languages.rust,r.languages.rust.attribute.inside.string=r.languages.rust.string})(Prism)),or}gn();Prism.languages.go=Prism.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/});Prism.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}});delete Prism.languages.go["class-name"];var cr={},hr;function bn(){return hr||(hr=1,Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python),cr}bn();var dr={},mr;function yn(){return mr||(mr=1,(function(r){var e=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,t=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,function(){return e.source});r.languages.cpp=r.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,function(){return e.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:e,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),r.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,function(){return t})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),r.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:r.languages.cpp}}}}),r.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),r.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:r.languages.extend("cpp",{})}}),r.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},r.languages.cpp["base-clause"])})(Prism)),dr}yn();var pr={},fr;function xn(){return fr||(fr=1,(function(r){var e=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,t=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,a={pattern:RegExp(/(^|[^\w.])/.source+t+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};r.languages.java=r.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[a,{pattern:RegExp(/(^|[^\w.])/.source+t+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:a.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+t+/[A-Z]\w*\b/.source),lookbehind:!0,inside:a.inside}],keyword:e,function:[r.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),r.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),r.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":a,keyword:e,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+t+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:a.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+t+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:a.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,function(){return e.source})),lookbehind:!0,inside:{punctuation:/\./}}})})(Prism)),pr}xn();Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/});Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/;Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/});Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}});Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}});Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript"));Prism.languages.js=Prism.languages.javascript;var vr={},gr;function wn(){return gr||(gr=1,(function(r){r.languages.typescript=r.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),r.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete r.languages.typescript.parameter,delete r.languages.typescript["literal-property"];var e=r.languages.extend("typescript",{});delete e["class-name"],r.languages.typescript["class-name"].inside=e,r.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e}}}}),r.languages.ts=r.languages.typescript})(Prism)),vr}wn();(function(r){var e=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function t(p){return p=p.replace(//g,function(){return e}),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+p+")")}var a=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,n=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,function(){return a}),s=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;r.languages.markdown=r.languages.extend("markup",{}),r.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:r.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+n+s+"(?:"+n+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+n+s+")(?:"+n+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(a),inside:r.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+n+")"+s+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+n+"$"),inside:{"table-header":{pattern:RegExp(a),alias:"important",inside:r.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:t(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:t(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:t(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:t(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(p){["url","bold","italic","strike","code-snippet"].forEach(function(g){p!==g&&(r.languages.markdown[p].inside.content.inside[g]=r.languages.markdown[g])})}),r.hooks.add("after-tokenize",function(p){if(p.language!=="markdown"&&p.language!=="md")return;function g(S){if(!(!S||typeof S=="string"))for(var x=0,D=S.length;x",quot:'"'},h=String.fromCodePoint||String.fromCharCode;function m(p){var g=p.replace(o,"");return g=g.replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(S,x){if(x=x.toLowerCase(),x[0]==="#"){var D;return x[1]==="x"?D=parseInt(x.slice(2),16):D=Number(x.slice(1)),h(D)}else{var E=u[x];return E||S}}),g}r.languages.md=r.languages.markdown})(Prism);const Sn={py:"python",ts:"typescript",js:"javascript",sh:"bash",shell:"bash",yml:"yaml",html:"markup",xml:"markup",svg:"markup",text:"plaintext",txt:"plaintext"};function kn(r){const e=r.toLowerCase().trim(),t=Sn[e]||e;return $e.languages[t]?t:$e.languages[e]?e:"plaintext"}const An=5e4;function Tn(r){return r.length>An}function En(r,e){const t=$e.languages[e];return t?$e.highlight(r,t,e):Mn(r)}function Mn(r){return r.replace(/&/g,"&").replace(//g,">")}const br=a0.memo(function({language:e,code:t,isStreaming:a}){const n=e?kn(e):"plaintext",s=e||"",o=!a&&n!=="plaintext"&&!Tn(t),u=a0.useRef(null),[h,m]=a0.useState(!1),[p,g]=a0.useState(!1);return a0.useLayoutEffect(()=>{const S=u.current;if(!S)return;const x=()=>m(S.scrollHeight>121);x();const D=new ResizeObserver(x);return D.observe(S),()=>D.disconnect()},[]),U.jsxs("div",{"data-slot":"code-card","data-streaming":a||void 0,children:[U.jsxs("div",{"data-slot":"code-card-header",children:[s&&U.jsx("span",{"data-slot":"code-card-lang",children:s}),U.jsx(zn,{text:t})]}),U.jsx("div",{"data-slot":"code-card-body",ref:u,"data-expanded":p||void 0,children:o?U.jsx("code",{dangerouslySetInnerHTML:{__html:En(t,n)}}):U.jsx("code",{children:t})}),h&&U.jsx("button",{"data-slot":"code-card-expand","aria-expanded":p,"aria-label":p?"Collapse":"Expand",onClick:()=>g(S=>!S),children:U.jsx("svg",{viewBox:"0 0 16 16",fill:"none",children:U.jsx("path",{d:"M4 6l4 4 4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})]})});function zn({text:r}){const[e,t]=a0.useState(!1),a=a0.useRef(),n=a0.useCallback(()=>{navigator.clipboard.writeText(r).then(()=>{t(!0),a.current&&clearTimeout(a.current),a.current=setTimeout(()=>t(!1),2e3)})},[r]);return typeof navigator>"u"||!navigator.clipboard?null:U.jsx("button",{"data-slot":"code-card-copy",onClick:n,title:e?"Copied":"Copy",children:e?U.jsx("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",children:U.jsx("path",{d:"M3 8.5l3 3 7-7",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}):U.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",children:[U.jsx("rect",{x:"5.5",y:"5.5",width:"7",height:"7",rx:"1",stroke:"currentColor",strokeWidth:"1.2"}),U.jsx("path",{d:"M3.5 10.5v-7a1 1 0 011-1h7",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})]})})}function Cn(r){const e=r.split(` +`),t=[];let a=0,n=0;for(const s of e){if(s.startsWith("diff --git")||s.startsWith("index ")||s.startsWith("--- ")||s.startsWith("+++ ")||s.startsWith("new file")||s.startsWith("deleted file")||s.startsWith("similarity index")||s.startsWith("rename from")||s.startsWith("rename to"))continue;const o=s.match(/^@@\s+-(\d+)(?:,\d+)?\s+\+(\d+)(?:,\d+)?\s+@@/);if(o){a=parseInt(o[1],10),n=parseInt(o[2],10),t.push({kind:"header",text:s});continue}if(s.startsWith("+"))t.push({kind:"add",text:s.slice(1),newLine:n++});else if(s.startsWith("-"))t.push({kind:"remove",text:s.slice(1),oldLine:a++});else{const u=s.startsWith(" ")?s.slice(1):s;t.push({kind:"context",text:u,oldLine:a++,newLine:n++})}}return t}const Rn=a0.memo(function({code:e}){const t=a0.useMemo(()=>Cn(e),[e]);return U.jsx("div",{"data-slot":"diff-block",children:t.map((a,n)=>U.jsxs("div",{"data-slot":"diff-line","data-diff-kind":a.kind,children:[a.kind!=="header"&&U.jsxs("span",{"data-slot":"diff-gutter",children:[U.jsx("span",{"data-slot":"diff-line-old",children:a.oldLine??""}),U.jsx("span",{"data-slot":"diff-line-new",children:a.newLine??""})]}),U.jsxs("span",{"data-slot":"diff-content",children:[a.kind==="add"&&U.jsx("span",{"data-slot":"diff-sign",children:"+"}),a.kind==="remove"&&U.jsx("span",{"data-slot":"diff-sign",children:"-"}),a.text]})]},n))})});class F extends Error{constructor(e,t){var a="KaTeX parse error: "+e,n,s,o=t&&t.loc;if(o&&o.start<=o.end){var u=o.lexer.input;n=o.start,s=o.end,n===u.length?a+=" at end of input: ":a+=" at position "+(n+1)+": ";var h=u.slice(n,s).replace(/[^]/g,"$&̲"),m;n>15?m="…"+u.slice(n-15,n):m=u.slice(0,n);var p;s+15r.replace(Fn,"-$1").toLowerCase(),Dn={"&":"&",">":">","<":"<",'"':""","'":"'"},Nn=/[&><"']/g,c0=r=>String(r).replace(Nn,e=>Dn[e]),Pe=r=>r.type==="ordgroup"||r.type==="color"?r.body.length===1?Pe(r.body[0]):r:r.type==="font"?Pe(r.body):r,Bn=new Set(["mathord","textord","atom"]),_0=r=>Bn.has(Pe(r).type),On=r=>{var e=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(r);return e?e[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(e[1])?null:e[1].toLowerCase():"_relative"},xt={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:r=>"#"+r},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(r,e)=>(e.push(r),e)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:r=>Math.max(0,r),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:r=>Math.max(0,r),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:r=>Math.max(0,r),cli:"-e, --max-expand ",cliProcessor:r=>r==="Infinity"?1/0:parseInt(r)},globalGroup:{type:"boolean",cli:!1}};function Ln(r){if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{};default:throw new Error("Unexpected schema type; settings must declare an explicit default.")}}function qn(r){if(r.default!==void 0)return r.default;var e=Array.isArray(r.type)?r.type[0]:r.type;return Ln(e)}function Pn(r,e,t,a){var n=t[e];r[e]=n!==void 0?a.processor?a.processor(n):n:qn(a)}class Pt{constructor(e){e===void 0&&(e={}),this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var t of Object.keys(xt)){var a=xt[t];a&&Pn(this,t,e,a)}}reportNonstrict(e,t,a){var n=this.strict;if(typeof n=="function"&&(n=n(e,t,a)),!(!n||n==="ignore")){if(n===!0||n==="error")throw new F("LaTeX-incompatible input and strict mode is set to 'error': "+(t+" ["+e+"]"),a);n==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(t+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+n+"': "+t+" ["+e+"]"))}}useStrictBehavior(e,t,a){var n=this.strict;if(typeof n=="function")try{n=n(e,t,a)}catch{n="error"}return!n||n==="ignore"?!1:n===!0||n==="error"?!0:n==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(t+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+n+"': "+t+" ["+e+"]")),!1)}isTrusted(e){if("url"in e&&e.url&&!e.protocol){var t=On(e.url);if(t==null)return!1;e.protocol=t}var a=typeof this.trust=="function"?this.trust(e):this.trust;return!!a}}class W0{constructor(e,t,a){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=a}sup(){return F0[Hn[this.id]]}sub(){return F0[$n[this.id]]}fracNum(){return F0[_n[this.id]]}fracDen(){return F0[Gn[this.id]]}cramp(){return F0[Un[this.id]]}text(){return F0[jn[this.id]]}isTight(){return this.size>=2}}var Ht=0,_e=1,he=2,H0=3,xe=4,M0=5,de=6,p0=7,F0=[new W0(Ht,0,!1),new W0(_e,0,!0),new W0(he,1,!1),new W0(H0,1,!0),new W0(xe,2,!1),new W0(M0,2,!0),new W0(de,3,!1),new W0(p0,3,!0)],Hn=[xe,M0,xe,M0,de,p0,de,p0],$n=[M0,M0,M0,M0,p0,p0,p0,p0],_n=[he,H0,xe,M0,de,p0,de,p0],Gn=[H0,H0,M0,M0,p0,p0,p0,p0],Un=[_e,_e,H0,H0,M0,M0,p0,p0],jn=[Ht,_e,he,H0,he,H0,he,H0],_={DISPLAY:F0[Ht],TEXT:F0[he],SCRIPT:F0[xe],SCRIPTSCRIPT:F0[de]},wt=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function Xn(r){for(var e=0;e=n[0]&&r<=n[1])return t.name}return null}var He=[];wt.forEach(r=>r.blocks.forEach(e=>He.push(...e)));function ia(r){for(var e=0;e=He[e]&&r<=He[e+1])return!0;return!1}var l0=r=>r+" "+r,ce=80,Vn=function(e,t){return"M95,"+(622+e+t)+` +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 +c69,-144,104.5,-217.7,106.5,-221 +l`+e/2.075+" -"+e+` +c5.3,-9.3,12,-14,20,-14 +H400000v`+(40+e)+`H845.2724 +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z +M`+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"},Wn=function(e,t){return"M263,"+(601+e+t)+`c0.7,0,18,39.7,52,119 +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 +c340,-704.7,510.7,-1060.3,512,-1067 +l`+e/2.084+" -"+e+` +c4.7,-7.3,11,-11,19,-11 +H40000v`+(40+e)+`H1012.3 +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z +M`+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"},Yn=function(e,t){return"M983 "+(10+e+t)+` +l`+e/3.13+" -"+e+` +c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+` +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 +c53.7,-170.3,84.5,-266.8,92.5,-289.5z +M`+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"},Zn=function(e,t){return"M424,"+(2398+e+t)+` +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 +l`+e/4.223+" -"+e+`c4,-6.7,10,-10,18,-10 H400000 +v`+(40+e)+`H1014.6 +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 +c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+t+` +h400000v`+(40+e)+"h-400000z"},Kn=function(e,t){return"M473,"+(2713+e+t)+` +c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+` +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7 +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, +606zM`+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"},Jn=function(e){var t=e/2;return"M400000 "+e+" H0 L"+t+" 0 l65 45 L145 "+(e-80)+" H400000z"},Qn=function(e,t,a){var n=a-54-t-e;return"M702 "+(e+t)+"H400000"+(40+e)+` +H742v`+n+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 +219 661 l218 661zM702 `+t+"H400000v"+(40+e)+"H742z"},ei=function(e,t,a){t=1e3*t;var n="";switch(e){case"sqrtMain":n=Vn(t,ce);break;case"sqrtSize1":n=Wn(t,ce);break;case"sqrtSize2":n=Yn(t,ce);break;case"sqrtSize3":n=Zn(t,ce);break;case"sqrtSize4":n=Kn(t,ce);break;case"sqrtTall":n=Qn(t,ce,a)}return n},ti=function(e,t){switch(e){case"⎜":return l0("M291 0 H417 V"+t+" H291z");case"∣":return l0("M145 0 H188 V"+t+" H145z");case"∥":return l0("M145 0 H188 V"+t+" H145z")+l0("M367 0 H410 V"+t+" H367z");case"⎟":return l0("M457 0 H583 V"+t+" H457z");case"⎢":return l0("M319 0 H403 V"+t+" H319z");case"⎥":return l0("M263 0 H347 V"+t+" H263z");case"⎪":return l0("M384 0 H504 V"+t+" H384z");case"⏐":return l0("M312 0 H355 V"+t+" H312z");case"‖":return l0("M257 0 H300 V"+t+" H257z")+l0("M478 0 H521 V"+t+" H478z");default:return""}},yr={doubleleftarrow:`M262 157 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 + 435 0h399565z`,leftgroupunder:`M400000 262 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:l0("M40 281 V428 H0 V94 H40 V241 H400000 v40z"),leftbracketunder:l0("M0 0 h120 V290 H399995 v120 H0z"),leftbracketover:l0("M0 440 h120 V150 H399995 v-120 H0z"),leftmapsto:l0("M40 281 V448H0V74H40V241H400000v40z"),leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:l0("M0 50 h400000 v40H0z m0 194h40000v40H0z"),midbrace:`M200428 334 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:l0("M399960 241 V94 h40 V428 h-40 V281 H0 v-40z"),rightbracketunder:l0("M399995 0 h-120 V290 H0 v120 H400000z"),rightbracketover:l0("M399995 440 h-120 V150 H0 v-120 H399995z"),rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 +-68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 + -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},ri=function(e,t){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+` v1759 v84 h347 v-84 +H403z M403 1759 V0 H319 V1759 v`+t+" v1759 v84 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+` v1759 H0 v84 H347z +M347 1759 V0 H263 V1759 v`+t+" v1759 h84z";case"vert":return"M145 15 v585 v"+t+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-t+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+t+" v585 h43z";case"doublevert":return"M145 15 v585 v"+t+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-t+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+t+` v585 h43z +M367 15 v585 v`+t+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-t+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+t+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+t+` v1715 h263 v84 H319z +MM319 602 V0 H403 V602 v`+t+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+t+` v1799 H0 v-84 H319z +MM319 602 V0 H403 V602 v`+t+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+` v602 h84z +M403 1759 V0 H319 V1759 v`+t+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+` v602 h84z +M347 1759 V0 h-84 V1759 v`+t+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, +-36,557 l0,`+(t+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 +l0,-`+(t+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(t+9)+` +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 +l0,-`+(t+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}};function ai(r){return"toText"in r}class fe{constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return this.classes.includes(e)}toNode(){for(var e=document.createDocumentFragment(),t=0;t{if(ai(e))return e.toText();throw new Error("Expected MathDomNode with toText, got "+e.constructor.name)}).join("")}}var St={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},ni={ex:!0,em:!0,mu:!0},sa=function(e){return typeof e!="string"&&(e=e.unit),e in St||e in ni||e==="ex"},t0=function(e,t){var a;if(e.unit in St)a=St[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if(e.unit==="mu")a=t.fontMetrics().cssEmPerMu;else{var n;if(t.style.isTight()?n=t.havingStyle(t.style.text()):n=t,e.unit==="ex")a=n.fontMetrics().xHeight;else if(e.unit==="em")a=n.fontMetrics().quad;else throw new F("Invalid unit: '"+e.unit+"'");n!==t&&(a*=n.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*a,t.maxSize)},N=function(e){return+e.toFixed(4)+"em"},K0=function(e){return e.filter(t=>t).join(" ")},$t=function(e){var t="";for(var a of Object.keys(e)){var n=e[a];n!==void 0&&(t+=In(a)+":"+n+";")}return t},la=function(e,t,a){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=a||{},t){t.style.isTight()&&this.classes.push("mtight");var n=t.getColor();n&&(this.style.color=n)}},oa=function(e){var t=document.createElement(e);t.className=K0(this.classes),Object.assign(t.style,this.style);for(var a of Object.keys(this.attributes))t.setAttribute(a,this.attributes[a]);for(var n=0;n/=\x00-\x1f]/,ua=function(e){var t="<"+e;this.classes.length&&(t+=' class="'+c0(K0(this.classes))+'"');var a=$t(this.style);a&&(t+=' style="'+c0(a)+'"');for(var n of Object.keys(this.attributes)){if(ii.test(n))throw new F("Invalid attribute name '"+n+"'");t+=" "+n+'="'+c0(this.attributes[n])+'"'}t+=">";for(var s=0;s",t};class ve{constructor(e,t,a,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,this.italic=void 0,la.call(this,e,a,n),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return this.classes.includes(e)}toNode(){return oa.call(this,"span")}toMarkup(){return ua.call(this,"span")}}class je{constructor(e,t,a,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,la.call(this,t,n),this.children=a||[],this.setAttribute("href",e)}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return this.classes.includes(e)}toNode(){return oa.call(this,"a")}toMarkup(){return ua.call(this,"a")}}class si{constructor(e,t,a){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.height=0,this.depth=0,this.maxFontSize=0,this.style=a}hasClass(e){return this.classes.includes(e)}toNode(){var e=document.createElement("img");return e.src=this.src,e.alt=this.alt,e.className="mord",Object.assign(e.style,this.style),e}toMarkup(){var e=''+c0(this.alt)+'0&&(t=document.createElement("span"),t.style.marginRight=N(this.italic)),this.classes.length>0&&(t=t||document.createElement("span"),t.className=K0(this.classes)),Object.keys(this.style).length>0&&(t=t||document.createElement("span"),Object.assign(t.style,this.style)),t?(t.appendChild(e),t):e}toMarkup(){var e=!1,t="0&&(a+="margin-right:"+N(this.italic)+";"),a+=$t(this.style),a&&(e=!0,t+=' style="'+c0(a)+'"');var n=c0(this.text);return e?(t+=">",t+=n,t+="",t):n}}class $0{constructor(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}toNode(){var e="http://www.w3.org/2000/svg",t=document.createElementNS(e,"svg");for(var a of Object.keys(this.attributes))t.setAttribute(a,this.attributes[a]);for(var n=0;n':''}}class kt{constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",t=document.createElementNS(e,"line");for(var a of Object.keys(this.attributes))t.setAttribute(a,this.attributes[a]);return t}toMarkup(){var e=" but got "+String(r)+".")}var ci=r=>r instanceof ve||r instanceof je||r instanceof fe,I0={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},Re={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},xr={Å:"A",Ð:"D",Þ:"o",å:"a",ð:"d",þ:"o",А:"A",Б:"B",В:"B",Г:"F",Д:"A",Е:"E",Ж:"K",З:"3",И:"N",Й:"N",К:"K",Л:"N",М:"M",Н:"H",О:"O",П:"N",Р:"P",С:"C",Т:"T",У:"y",Ф:"O",Х:"X",Ц:"U",Ч:"h",Ш:"W",Щ:"W",Ъ:"B",Ы:"X",Ь:"B",Э:"3",Ю:"X",Я:"R",а:"a",б:"b",в:"a",г:"r",д:"y",е:"e",ж:"m",з:"e",и:"n",й:"n",к:"n",л:"n",м:"m",н:"n",о:"o",п:"n",р:"p",с:"c",т:"o",у:"y",ф:"b",х:"x",ц:"n",ч:"n",ш:"w",щ:"w",ъ:"a",ы:"m",ь:"a",э:"e",ю:"m",я:"r"};function hi(r,e){I0[r]=e}function _t(r,e,t){if(!I0[e])throw new Error("Font metrics not found for font: "+e+".");var a=r.charCodeAt(0),n=I0[e][a];if(!n&&r[0]in xr&&(a=xr[r[0]].charCodeAt(0),n=I0[e][a]),!n&&t==="text"&&ia(a)&&(n=I0[e][77]),n)return{depth:n[0],height:n[1],italic:n[2],skew:n[3],width:n[4]}}var nt={};function di(r){var e;if(r>=5?e=0:r>=3?e=1:e=2,!nt[e]){var t=nt[e]={cssEmPerMu:Re.quad[e]/18};for(var a in Re)Re.hasOwnProperty(a)&&(t[a]=Re[a][e])}return nt[e]}var K={math:{},text:{}};function i(r,e,t,a,n,s){K[r][n]={font:e,group:t,replace:a},s&&a&&(K[r][a]=K[r][n])}var l="math",z="text",c="main",f="ams",J="accent-token",q="bin",f0="close",ge="inner",H="mathord",s0="op-token",T0="open",Ae="punct",v="rel",G0="spacing",b="textord";i(l,c,v,"≡","\\equiv",!0);i(l,c,v,"≺","\\prec",!0);i(l,c,v,"≻","\\succ",!0);i(l,c,v,"∼","\\sim",!0);i(l,c,v,"⊥","\\perp");i(l,c,v,"⪯","\\preceq",!0);i(l,c,v,"⪰","\\succeq",!0);i(l,c,v,"≃","\\simeq",!0);i(l,c,v,"∣","\\mid",!0);i(l,c,v,"≪","\\ll",!0);i(l,c,v,"≫","\\gg",!0);i(l,c,v,"≍","\\asymp",!0);i(l,c,v,"∥","\\parallel");i(l,c,v,"⋈","\\bowtie",!0);i(l,c,v,"⌣","\\smile",!0);i(l,c,v,"⊑","\\sqsubseteq",!0);i(l,c,v,"⊒","\\sqsupseteq",!0);i(l,c,v,"≐","\\doteq",!0);i(l,c,v,"⌢","\\frown",!0);i(l,c,v,"∋","\\ni",!0);i(l,c,v,"∝","\\propto",!0);i(l,c,v,"⊢","\\vdash",!0);i(l,c,v,"⊣","\\dashv",!0);i(l,c,v,"∋","\\owns");i(l,c,Ae,".","\\ldotp");i(l,c,Ae,"⋅","\\cdotp");i(l,c,Ae,"⋅","·");i(z,c,b,"⋅","·");i(l,c,b,"#","\\#");i(z,c,b,"#","\\#");i(l,c,b,"&","\\&");i(z,c,b,"&","\\&");i(l,c,b,"ℵ","\\aleph",!0);i(l,c,b,"∀","\\forall",!0);i(l,c,b,"ℏ","\\hbar",!0);i(l,c,b,"∃","\\exists",!0);i(l,c,b,"∇","\\nabla",!0);i(l,c,b,"♭","\\flat",!0);i(l,c,b,"ℓ","\\ell",!0);i(l,c,b,"♮","\\natural",!0);i(l,c,b,"♣","\\clubsuit",!0);i(l,c,b,"℘","\\wp",!0);i(l,c,b,"♯","\\sharp",!0);i(l,c,b,"♢","\\diamondsuit",!0);i(l,c,b,"ℜ","\\Re",!0);i(l,c,b,"♡","\\heartsuit",!0);i(l,c,b,"ℑ","\\Im",!0);i(l,c,b,"♠","\\spadesuit",!0);i(l,c,b,"§","\\S",!0);i(z,c,b,"§","\\S");i(l,c,b,"¶","\\P",!0);i(z,c,b,"¶","\\P");i(l,c,b,"†","\\dag");i(z,c,b,"†","\\dag");i(z,c,b,"†","\\textdagger");i(l,c,b,"‡","\\ddag");i(z,c,b,"‡","\\ddag");i(z,c,b,"‡","\\textdaggerdbl");i(l,c,f0,"⎱","\\rmoustache",!0);i(l,c,T0,"⎰","\\lmoustache",!0);i(l,c,f0,"⟯","\\rgroup",!0);i(l,c,T0,"⟮","\\lgroup",!0);i(l,c,q,"∓","\\mp",!0);i(l,c,q,"⊖","\\ominus",!0);i(l,c,q,"⊎","\\uplus",!0);i(l,c,q,"⊓","\\sqcap",!0);i(l,c,q,"∗","\\ast");i(l,c,q,"⊔","\\sqcup",!0);i(l,c,q,"◯","\\bigcirc",!0);i(l,c,q,"∙","\\bullet",!0);i(l,c,q,"‡","\\ddagger");i(l,c,q,"≀","\\wr",!0);i(l,c,q,"⨿","\\amalg");i(l,c,q,"&","\\And");i(l,c,v,"⟵","\\longleftarrow",!0);i(l,c,v,"⇐","\\Leftarrow",!0);i(l,c,v,"⟸","\\Longleftarrow",!0);i(l,c,v,"⟶","\\longrightarrow",!0);i(l,c,v,"⇒","\\Rightarrow",!0);i(l,c,v,"⟹","\\Longrightarrow",!0);i(l,c,v,"↔","\\leftrightarrow",!0);i(l,c,v,"⟷","\\longleftrightarrow",!0);i(l,c,v,"⇔","\\Leftrightarrow",!0);i(l,c,v,"⟺","\\Longleftrightarrow",!0);i(l,c,v,"↦","\\mapsto",!0);i(l,c,v,"⟼","\\longmapsto",!0);i(l,c,v,"↗","\\nearrow",!0);i(l,c,v,"↩","\\hookleftarrow",!0);i(l,c,v,"↪","\\hookrightarrow",!0);i(l,c,v,"↘","\\searrow",!0);i(l,c,v,"↼","\\leftharpoonup",!0);i(l,c,v,"⇀","\\rightharpoonup",!0);i(l,c,v,"↙","\\swarrow",!0);i(l,c,v,"↽","\\leftharpoondown",!0);i(l,c,v,"⇁","\\rightharpoondown",!0);i(l,c,v,"↖","\\nwarrow",!0);i(l,c,v,"⇌","\\rightleftharpoons",!0);i(l,f,v,"≮","\\nless",!0);i(l,f,v,"","\\@nleqslant");i(l,f,v,"","\\@nleqq");i(l,f,v,"⪇","\\lneq",!0);i(l,f,v,"≨","\\lneqq",!0);i(l,f,v,"","\\@lvertneqq");i(l,f,v,"⋦","\\lnsim",!0);i(l,f,v,"⪉","\\lnapprox",!0);i(l,f,v,"⊀","\\nprec",!0);i(l,f,v,"⋠","\\npreceq",!0);i(l,f,v,"⋨","\\precnsim",!0);i(l,f,v,"⪹","\\precnapprox",!0);i(l,f,v,"≁","\\nsim",!0);i(l,f,v,"","\\@nshortmid");i(l,f,v,"∤","\\nmid",!0);i(l,f,v,"⊬","\\nvdash",!0);i(l,f,v,"⊭","\\nvDash",!0);i(l,f,v,"⋪","\\ntriangleleft");i(l,f,v,"⋬","\\ntrianglelefteq",!0);i(l,f,v,"⊊","\\subsetneq",!0);i(l,f,v,"","\\@varsubsetneq");i(l,f,v,"⫋","\\subsetneqq",!0);i(l,f,v,"","\\@varsubsetneqq");i(l,f,v,"≯","\\ngtr",!0);i(l,f,v,"","\\@ngeqslant");i(l,f,v,"","\\@ngeqq");i(l,f,v,"⪈","\\gneq",!0);i(l,f,v,"≩","\\gneqq",!0);i(l,f,v,"","\\@gvertneqq");i(l,f,v,"⋧","\\gnsim",!0);i(l,f,v,"⪊","\\gnapprox",!0);i(l,f,v,"⊁","\\nsucc",!0);i(l,f,v,"⋡","\\nsucceq",!0);i(l,f,v,"⋩","\\succnsim",!0);i(l,f,v,"⪺","\\succnapprox",!0);i(l,f,v,"≆","\\ncong",!0);i(l,f,v,"","\\@nshortparallel");i(l,f,v,"∦","\\nparallel",!0);i(l,f,v,"⊯","\\nVDash",!0);i(l,f,v,"⋫","\\ntriangleright");i(l,f,v,"⋭","\\ntrianglerighteq",!0);i(l,f,v,"","\\@nsupseteqq");i(l,f,v,"⊋","\\supsetneq",!0);i(l,f,v,"","\\@varsupsetneq");i(l,f,v,"⫌","\\supsetneqq",!0);i(l,f,v,"","\\@varsupsetneqq");i(l,f,v,"⊮","\\nVdash",!0);i(l,f,v,"⪵","\\precneqq",!0);i(l,f,v,"⪶","\\succneqq",!0);i(l,f,v,"","\\@nsubseteqq");i(l,f,q,"⊴","\\unlhd");i(l,f,q,"⊵","\\unrhd");i(l,f,v,"↚","\\nleftarrow",!0);i(l,f,v,"↛","\\nrightarrow",!0);i(l,f,v,"⇍","\\nLeftarrow",!0);i(l,f,v,"⇏","\\nRightarrow",!0);i(l,f,v,"↮","\\nleftrightarrow",!0);i(l,f,v,"⇎","\\nLeftrightarrow",!0);i(l,f,v,"△","\\vartriangle");i(l,f,b,"ℏ","\\hslash");i(l,f,b,"▽","\\triangledown");i(l,f,b,"◊","\\lozenge");i(l,f,b,"Ⓢ","\\circledS");i(l,f,b,"®","\\circledR");i(z,f,b,"®","\\circledR");i(l,f,b,"∡","\\measuredangle",!0);i(l,f,b,"∄","\\nexists");i(l,f,b,"℧","\\mho");i(l,f,b,"Ⅎ","\\Finv",!0);i(l,f,b,"⅁","\\Game",!0);i(l,f,b,"‵","\\backprime");i(l,f,b,"▲","\\blacktriangle");i(l,f,b,"▼","\\blacktriangledown");i(l,f,b,"■","\\blacksquare");i(l,f,b,"⧫","\\blacklozenge");i(l,f,b,"★","\\bigstar");i(l,f,b,"∢","\\sphericalangle",!0);i(l,f,b,"∁","\\complement",!0);i(l,f,b,"ð","\\eth",!0);i(z,c,b,"ð","ð");i(l,f,b,"╱","\\diagup");i(l,f,b,"╲","\\diagdown");i(l,f,b,"□","\\square");i(l,f,b,"□","\\Box");i(l,f,b,"◊","\\Diamond");i(l,f,b,"¥","\\yen",!0);i(z,f,b,"¥","\\yen",!0);i(l,f,b,"✓","\\checkmark",!0);i(z,f,b,"✓","\\checkmark");i(l,f,b,"ℶ","\\beth",!0);i(l,f,b,"ℸ","\\daleth",!0);i(l,f,b,"ℷ","\\gimel",!0);i(l,f,b,"ϝ","\\digamma",!0);i(l,f,b,"ϰ","\\varkappa");i(l,f,T0,"┌","\\@ulcorner",!0);i(l,f,f0,"┐","\\@urcorner",!0);i(l,f,T0,"└","\\@llcorner",!0);i(l,f,f0,"┘","\\@lrcorner",!0);i(l,f,v,"≦","\\leqq",!0);i(l,f,v,"⩽","\\leqslant",!0);i(l,f,v,"⪕","\\eqslantless",!0);i(l,f,v,"≲","\\lesssim",!0);i(l,f,v,"⪅","\\lessapprox",!0);i(l,f,v,"≊","\\approxeq",!0);i(l,f,q,"⋖","\\lessdot");i(l,f,v,"⋘","\\lll",!0);i(l,f,v,"≶","\\lessgtr",!0);i(l,f,v,"⋚","\\lesseqgtr",!0);i(l,f,v,"⪋","\\lesseqqgtr",!0);i(l,f,v,"≑","\\doteqdot");i(l,f,v,"≓","\\risingdotseq",!0);i(l,f,v,"≒","\\fallingdotseq",!0);i(l,f,v,"∽","\\backsim",!0);i(l,f,v,"⋍","\\backsimeq",!0);i(l,f,v,"⫅","\\subseteqq",!0);i(l,f,v,"⋐","\\Subset",!0);i(l,f,v,"⊏","\\sqsubset",!0);i(l,f,v,"≼","\\preccurlyeq",!0);i(l,f,v,"⋞","\\curlyeqprec",!0);i(l,f,v,"≾","\\precsim",!0);i(l,f,v,"⪷","\\precapprox",!0);i(l,f,v,"⊲","\\vartriangleleft");i(l,f,v,"⊴","\\trianglelefteq");i(l,f,v,"⊨","\\vDash",!0);i(l,f,v,"⊪","\\Vvdash",!0);i(l,f,v,"⌣","\\smallsmile");i(l,f,v,"⌢","\\smallfrown");i(l,f,v,"≏","\\bumpeq",!0);i(l,f,v,"≎","\\Bumpeq",!0);i(l,f,v,"≧","\\geqq",!0);i(l,f,v,"⩾","\\geqslant",!0);i(l,f,v,"⪖","\\eqslantgtr",!0);i(l,f,v,"≳","\\gtrsim",!0);i(l,f,v,"⪆","\\gtrapprox",!0);i(l,f,q,"⋗","\\gtrdot");i(l,f,v,"⋙","\\ggg",!0);i(l,f,v,"≷","\\gtrless",!0);i(l,f,v,"⋛","\\gtreqless",!0);i(l,f,v,"⪌","\\gtreqqless",!0);i(l,f,v,"≖","\\eqcirc",!0);i(l,f,v,"≗","\\circeq",!0);i(l,f,v,"≜","\\triangleq",!0);i(l,f,v,"∼","\\thicksim");i(l,f,v,"≈","\\thickapprox");i(l,f,v,"⫆","\\supseteqq",!0);i(l,f,v,"⋑","\\Supset",!0);i(l,f,v,"⊐","\\sqsupset",!0);i(l,f,v,"≽","\\succcurlyeq",!0);i(l,f,v,"⋟","\\curlyeqsucc",!0);i(l,f,v,"≿","\\succsim",!0);i(l,f,v,"⪸","\\succapprox",!0);i(l,f,v,"⊳","\\vartriangleright");i(l,f,v,"⊵","\\trianglerighteq");i(l,f,v,"⊩","\\Vdash",!0);i(l,f,v,"∣","\\shortmid");i(l,f,v,"∥","\\shortparallel");i(l,f,v,"≬","\\between",!0);i(l,f,v,"⋔","\\pitchfork",!0);i(l,f,v,"∝","\\varpropto");i(l,f,v,"◀","\\blacktriangleleft");i(l,f,v,"∴","\\therefore",!0);i(l,f,v,"∍","\\backepsilon");i(l,f,v,"▶","\\blacktriangleright");i(l,f,v,"∵","\\because",!0);i(l,f,v,"⋘","\\llless");i(l,f,v,"⋙","\\gggtr");i(l,f,q,"⊲","\\lhd");i(l,f,q,"⊳","\\rhd");i(l,f,v,"≂","\\eqsim",!0);i(l,c,v,"⋈","\\Join");i(l,f,v,"≑","\\Doteq",!0);i(l,f,q,"∔","\\dotplus",!0);i(l,f,q,"∖","\\smallsetminus");i(l,f,q,"⋒","\\Cap",!0);i(l,f,q,"⋓","\\Cup",!0);i(l,f,q,"⩞","\\doublebarwedge",!0);i(l,f,q,"⊟","\\boxminus",!0);i(l,f,q,"⊞","\\boxplus",!0);i(l,f,q,"⋇","\\divideontimes",!0);i(l,f,q,"⋉","\\ltimes",!0);i(l,f,q,"⋊","\\rtimes",!0);i(l,f,q,"⋋","\\leftthreetimes",!0);i(l,f,q,"⋌","\\rightthreetimes",!0);i(l,f,q,"⋏","\\curlywedge",!0);i(l,f,q,"⋎","\\curlyvee",!0);i(l,f,q,"⊝","\\circleddash",!0);i(l,f,q,"⊛","\\circledast",!0);i(l,f,q,"⋅","\\centerdot");i(l,f,q,"⊺","\\intercal",!0);i(l,f,q,"⋒","\\doublecap");i(l,f,q,"⋓","\\doublecup");i(l,f,q,"⊠","\\boxtimes",!0);i(l,f,v,"⇢","\\dashrightarrow",!0);i(l,f,v,"⇠","\\dashleftarrow",!0);i(l,f,v,"⇇","\\leftleftarrows",!0);i(l,f,v,"⇆","\\leftrightarrows",!0);i(l,f,v,"⇚","\\Lleftarrow",!0);i(l,f,v,"↞","\\twoheadleftarrow",!0);i(l,f,v,"↢","\\leftarrowtail",!0);i(l,f,v,"↫","\\looparrowleft",!0);i(l,f,v,"⇋","\\leftrightharpoons",!0);i(l,f,v,"↶","\\curvearrowleft",!0);i(l,f,v,"↺","\\circlearrowleft",!0);i(l,f,v,"↰","\\Lsh",!0);i(l,f,v,"⇈","\\upuparrows",!0);i(l,f,v,"↿","\\upharpoonleft",!0);i(l,f,v,"⇃","\\downharpoonleft",!0);i(l,c,v,"⊶","\\origof",!0);i(l,c,v,"⊷","\\imageof",!0);i(l,f,v,"⊸","\\multimap",!0);i(l,f,v,"↭","\\leftrightsquigarrow",!0);i(l,f,v,"⇉","\\rightrightarrows",!0);i(l,f,v,"⇄","\\rightleftarrows",!0);i(l,f,v,"↠","\\twoheadrightarrow",!0);i(l,f,v,"↣","\\rightarrowtail",!0);i(l,f,v,"↬","\\looparrowright",!0);i(l,f,v,"↷","\\curvearrowright",!0);i(l,f,v,"↻","\\circlearrowright",!0);i(l,f,v,"↱","\\Rsh",!0);i(l,f,v,"⇊","\\downdownarrows",!0);i(l,f,v,"↾","\\upharpoonright",!0);i(l,f,v,"⇂","\\downharpoonright",!0);i(l,f,v,"⇝","\\rightsquigarrow",!0);i(l,f,v,"⇝","\\leadsto");i(l,f,v,"⇛","\\Rrightarrow",!0);i(l,f,v,"↾","\\restriction");i(l,c,b,"‘","`");i(l,c,b,"$","\\$");i(z,c,b,"$","\\$");i(z,c,b,"$","\\textdollar");i(l,c,b,"%","\\%");i(z,c,b,"%","\\%");i(l,c,b,"_","\\_");i(z,c,b,"_","\\_");i(z,c,b,"_","\\textunderscore");i(l,c,b,"∠","\\angle",!0);i(l,c,b,"∞","\\infty",!0);i(l,c,b,"′","\\prime");i(l,c,b,"△","\\triangle");i(l,c,b,"Γ","\\Gamma",!0);i(l,c,b,"Δ","\\Delta",!0);i(l,c,b,"Θ","\\Theta",!0);i(l,c,b,"Λ","\\Lambda",!0);i(l,c,b,"Ξ","\\Xi",!0);i(l,c,b,"Π","\\Pi",!0);i(l,c,b,"Σ","\\Sigma",!0);i(l,c,b,"Υ","\\Upsilon",!0);i(l,c,b,"Φ","\\Phi",!0);i(l,c,b,"Ψ","\\Psi",!0);i(l,c,b,"Ω","\\Omega",!0);i(l,c,b,"A","Α");i(l,c,b,"B","Β");i(l,c,b,"E","Ε");i(l,c,b,"Z","Ζ");i(l,c,b,"H","Η");i(l,c,b,"I","Ι");i(l,c,b,"K","Κ");i(l,c,b,"M","Μ");i(l,c,b,"N","Ν");i(l,c,b,"O","Ο");i(l,c,b,"P","Ρ");i(l,c,b,"T","Τ");i(l,c,b,"X","Χ");i(l,c,b,"¬","\\neg",!0);i(l,c,b,"¬","\\lnot");i(l,c,b,"⊤","\\top");i(l,c,b,"⊥","\\bot");i(l,c,b,"∅","\\emptyset");i(l,f,b,"∅","\\varnothing");i(l,c,H,"α","\\alpha",!0);i(l,c,H,"β","\\beta",!0);i(l,c,H,"γ","\\gamma",!0);i(l,c,H,"δ","\\delta",!0);i(l,c,H,"ϵ","\\epsilon",!0);i(l,c,H,"ζ","\\zeta",!0);i(l,c,H,"η","\\eta",!0);i(l,c,H,"θ","\\theta",!0);i(l,c,H,"ι","\\iota",!0);i(l,c,H,"κ","\\kappa",!0);i(l,c,H,"λ","\\lambda",!0);i(l,c,H,"μ","\\mu",!0);i(l,c,H,"ν","\\nu",!0);i(l,c,H,"ξ","\\xi",!0);i(l,c,H,"ο","\\omicron",!0);i(l,c,H,"π","\\pi",!0);i(l,c,H,"ρ","\\rho",!0);i(l,c,H,"σ","\\sigma",!0);i(l,c,H,"τ","\\tau",!0);i(l,c,H,"υ","\\upsilon",!0);i(l,c,H,"ϕ","\\phi",!0);i(l,c,H,"χ","\\chi",!0);i(l,c,H,"ψ","\\psi",!0);i(l,c,H,"ω","\\omega",!0);i(l,c,H,"ε","\\varepsilon",!0);i(l,c,H,"ϑ","\\vartheta",!0);i(l,c,H,"ϖ","\\varpi",!0);i(l,c,H,"ϱ","\\varrho",!0);i(l,c,H,"ς","\\varsigma",!0);i(l,c,H,"φ","\\varphi",!0);i(l,c,q,"∗","*",!0);i(l,c,q,"+","+");i(l,c,q,"−","-",!0);i(l,c,q,"⋅","\\cdot",!0);i(l,c,q,"∘","\\circ",!0);i(l,c,q,"÷","\\div",!0);i(l,c,q,"±","\\pm",!0);i(l,c,q,"×","\\times",!0);i(l,c,q,"∩","\\cap",!0);i(l,c,q,"∪","\\cup",!0);i(l,c,q,"∖","\\setminus",!0);i(l,c,q,"∧","\\land");i(l,c,q,"∨","\\lor");i(l,c,q,"∧","\\wedge",!0);i(l,c,q,"∨","\\vee",!0);i(l,c,b,"√","\\surd");i(l,c,T0,"⟨","\\langle",!0);i(l,c,T0,"∣","\\lvert");i(l,c,T0,"∥","\\lVert");i(l,c,f0,"?","?");i(l,c,f0,"!","!");i(l,c,f0,"⟩","\\rangle",!0);i(l,c,f0,"∣","\\rvert");i(l,c,f0,"∥","\\rVert");i(l,c,v,"=","=");i(l,c,v,":",":");i(l,c,v,"≈","\\approx",!0);i(l,c,v,"≅","\\cong",!0);i(l,c,v,"≥","\\ge");i(l,c,v,"≥","\\geq",!0);i(l,c,v,"←","\\gets");i(l,c,v,">","\\gt",!0);i(l,c,v,"∈","\\in",!0);i(l,c,v,"","\\@not");i(l,c,v,"⊂","\\subset",!0);i(l,c,v,"⊃","\\supset",!0);i(l,c,v,"⊆","\\subseteq",!0);i(l,c,v,"⊇","\\supseteq",!0);i(l,f,v,"⊈","\\nsubseteq",!0);i(l,f,v,"⊉","\\nsupseteq",!0);i(l,c,v,"⊨","\\models");i(l,c,v,"←","\\leftarrow",!0);i(l,c,v,"≤","\\le");i(l,c,v,"≤","\\leq",!0);i(l,c,v,"<","\\lt",!0);i(l,c,v,"→","\\rightarrow",!0);i(l,c,v,"→","\\to");i(l,f,v,"≱","\\ngeq",!0);i(l,f,v,"≰","\\nleq",!0);i(l,c,G0," ","\\ ");i(l,c,G0," ","\\space");i(l,c,G0," ","\\nobreakspace");i(z,c,G0," ","\\ ");i(z,c,G0," "," ");i(z,c,G0," ","\\space");i(z,c,G0," ","\\nobreakspace");i(l,c,G0,"","\\nobreak");i(l,c,G0,"","\\allowbreak");i(l,c,Ae,",",",");i(l,c,Ae,";",";");i(l,f,q,"⊼","\\barwedge",!0);i(l,f,q,"⊻","\\veebar",!0);i(l,c,q,"⊙","\\odot",!0);i(l,c,q,"⊕","\\oplus",!0);i(l,c,q,"⊗","\\otimes",!0);i(l,c,b,"∂","\\partial",!0);i(l,c,q,"⊘","\\oslash",!0);i(l,f,q,"⊚","\\circledcirc",!0);i(l,f,q,"⊡","\\boxdot",!0);i(l,c,q,"△","\\bigtriangleup");i(l,c,q,"▽","\\bigtriangledown");i(l,c,q,"†","\\dagger");i(l,c,q,"⋄","\\diamond");i(l,c,q,"⋆","\\star");i(l,c,q,"◃","\\triangleleft");i(l,c,q,"▹","\\triangleright");i(l,c,T0,"{","\\{");i(z,c,b,"{","\\{");i(z,c,b,"{","\\textbraceleft");i(l,c,f0,"}","\\}");i(z,c,b,"}","\\}");i(z,c,b,"}","\\textbraceright");i(l,c,T0,"{","\\lbrace");i(l,c,f0,"}","\\rbrace");i(l,c,T0,"[","\\lbrack",!0);i(z,c,b,"[","\\lbrack",!0);i(l,c,f0,"]","\\rbrack",!0);i(z,c,b,"]","\\rbrack",!0);i(l,c,T0,"(","\\lparen",!0);i(l,c,f0,")","\\rparen",!0);i(z,c,b,"<","\\textless",!0);i(z,c,b,">","\\textgreater",!0);i(l,c,T0,"⌊","\\lfloor",!0);i(l,c,f0,"⌋","\\rfloor",!0);i(l,c,T0,"⌈","\\lceil",!0);i(l,c,f0,"⌉","\\rceil",!0);i(l,c,b,"\\","\\backslash");i(l,c,b,"∣","|");i(l,c,b,"∣","\\vert");i(z,c,b,"|","\\textbar",!0);i(l,c,b,"∥","\\|");i(l,c,b,"∥","\\Vert");i(z,c,b,"∥","\\textbardbl");i(z,c,b,"~","\\textasciitilde");i(z,c,b,"\\","\\textbackslash");i(z,c,b,"^","\\textasciicircum");i(l,c,v,"↑","\\uparrow",!0);i(l,c,v,"⇑","\\Uparrow",!0);i(l,c,v,"↓","\\downarrow",!0);i(l,c,v,"⇓","\\Downarrow",!0);i(l,c,v,"↕","\\updownarrow",!0);i(l,c,v,"⇕","\\Updownarrow",!0);i(l,c,s0,"∐","\\coprod");i(l,c,s0,"⋁","\\bigvee");i(l,c,s0,"⋀","\\bigwedge");i(l,c,s0,"⨄","\\biguplus");i(l,c,s0,"⋂","\\bigcap");i(l,c,s0,"⋃","\\bigcup");i(l,c,s0,"∫","\\int");i(l,c,s0,"∫","\\intop");i(l,c,s0,"∬","\\iint");i(l,c,s0,"∭","\\iiint");i(l,c,s0,"∏","\\prod");i(l,c,s0,"∑","\\sum");i(l,c,s0,"⨂","\\bigotimes");i(l,c,s0,"⨁","\\bigoplus");i(l,c,s0,"⨀","\\bigodot");i(l,c,s0,"∮","\\oint");i(l,c,s0,"∯","\\oiint");i(l,c,s0,"∰","\\oiiint");i(l,c,s0,"⨆","\\bigsqcup");i(l,c,s0,"∫","\\smallint");i(z,c,ge,"…","\\textellipsis");i(l,c,ge,"…","\\mathellipsis");i(z,c,ge,"…","\\ldots",!0);i(l,c,ge,"…","\\ldots",!0);i(l,c,ge,"⋯","\\@cdots",!0);i(l,c,ge,"⋱","\\ddots",!0);i(l,c,b,"⋮","\\varvdots");i(z,c,b,"⋮","\\varvdots");i(l,c,J,"ˊ","\\acute");i(l,c,J,"ˋ","\\grave");i(l,c,J,"¨","\\ddot");i(l,c,J,"~","\\tilde");i(l,c,J,"ˉ","\\bar");i(l,c,J,"˘","\\breve");i(l,c,J,"ˇ","\\check");i(l,c,J,"^","\\hat");i(l,c,J,"⃗","\\vec");i(l,c,J,"˙","\\dot");i(l,c,J,"˚","\\mathring");i(l,c,H,"","\\@imath");i(l,c,H,"","\\@jmath");i(l,c,b,"ı","ı");i(l,c,b,"ȷ","ȷ");i(z,c,b,"ı","\\i",!0);i(z,c,b,"ȷ","\\j",!0);i(z,c,b,"ß","\\ss",!0);i(z,c,b,"æ","\\ae",!0);i(z,c,b,"œ","\\oe",!0);i(z,c,b,"ø","\\o",!0);i(z,c,b,"Æ","\\AE",!0);i(z,c,b,"Œ","\\OE",!0);i(z,c,b,"Ø","\\O",!0);i(z,c,J,"ˊ","\\'");i(z,c,J,"ˋ","\\`");i(z,c,J,"ˆ","\\^");i(z,c,J,"˜","\\~");i(z,c,J,"ˉ","\\=");i(z,c,J,"˘","\\u");i(z,c,J,"˙","\\.");i(z,c,J,"¸","\\c");i(z,c,J,"˚","\\r");i(z,c,J,"ˇ","\\v");i(z,c,J,"¨",'\\"');i(z,c,J,"˝","\\H");i(z,c,J,"◯","\\textcircled");var ca={"--":!0,"---":!0,"``":!0,"''":!0};i(z,c,b,"–","--",!0);i(z,c,b,"–","\\textendash");i(z,c,b,"—","---",!0);i(z,c,b,"—","\\textemdash");i(z,c,b,"‘","`",!0);i(z,c,b,"‘","\\textquoteleft");i(z,c,b,"’","'",!0);i(z,c,b,"’","\\textquoteright");i(z,c,b,"“","``",!0);i(z,c,b,"“","\\textquotedblleft");i(z,c,b,"”","''",!0);i(z,c,b,"”","\\textquotedblright");i(l,c,b,"°","\\degree",!0);i(z,c,b,"°","\\degree");i(z,c,b,"°","\\textdegree",!0);i(l,c,b,"£","\\pounds");i(l,c,b,"£","\\mathsterling",!0);i(z,c,b,"£","\\pounds");i(z,c,b,"£","\\textsterling",!0);i(l,f,b,"✠","\\maltese");i(z,f,b,"✠","\\maltese");var wr='0123456789/@."';for(var it=0;it{var e=r.charCodeAt(0),t=r.charCodeAt(1),a=(e-55296)*1024+(t-56320)+65536;if(119808<=a&&a<120484){var n=Math.floor((a-119808)/26);return Fr[n]}else if(120782<=a&&a<=120831){var s=Math.floor((a-120782)/10);return pi[s]}else{if(a===120485||a===120486)return Fr[0];if(120486{if(K0(r.classes)!==K0(e.classes)||r.skew!==e.skew||r.maxFontSize!==e.maxFontSize||r.italic!==0&&r.hasClass("mathnormal"))return!1;if(r.classes.length===1){var t=r.classes[0];if(t==="mbin"||t==="mord")return!1}for(var a of Object.keys(r.style))if(r.style[a]!==e.style[a])return!1;for(var n of Object.keys(e.style))if(r.style[n]!==e.style[n])return!1;return!0},ha=r=>{for(var e=0;et&&(t=o.height),o.depth>a&&(a=o.depth),o.maxFontSize>n&&(n=o.maxFontSize)}e.height=t,e.depth=a,e.maxFontSize=n},C=function(e,t,a,n){var s=new ve(e,t,a,n);return Ut(s),s},Q0=(r,e,t,a)=>new ve(r,e,t,a),me=function(e,t,a){var n=C([e],[],t);return n.height=Math.max(a||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=N(n.height),n.maxFontSize=1,n},bi=function(e,t,a,n){var s=new je(e,t,a,n);return Ut(s),s},U0=function(e){var t=new fe(e);return Ut(t),t},pe=function(e,t){return e instanceof fe?C([],[e],t):e},yi=function(e){if(e.positionType==="individualShift"){for(var t=e.children,a=[t[0]],n=-t[0].shift-t[0].elem.depth,s=n,o=1;o{var t=C(["mspace"],[],e),a=t0(r,e);return t.style.marginRight=N(a),t},De=(r,e,t)=>{var a,n;switch(r){case"amsrm":a="AMS";break;case"textrm":a="Main";break;case"textsf":a="SansSerif";break;case"texttt":a="Typewriter";break;default:a=r}return e==="textbf"&&t==="textit"?n="BoldItalic":e==="textbf"?n="Bold":t==="textit"?n="Italic":n="Regular",a+"-"+n},Ct={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},ma={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},pa=function(e,t){var[a,n,s]=ma[e],o=new J0(a),u=new $0([o],{width:N(n),height:N(s),style:"width:"+N(n),viewBox:"0 0 "+1e3*n+" "+1e3*s,preserveAspectRatio:"xMinYMin"}),h=Q0(["overlay"],[u],t);return h.height=s,h.style.height=N(s),h.style.width=N(n),h},e0={number:3,unit:"mu"},ne={number:4,unit:"mu"},q0={number:5,unit:"mu"},xi={mord:{mop:e0,mbin:ne,mrel:q0,minner:e0},mop:{mord:e0,mop:e0,mrel:q0,minner:e0},mbin:{mord:ne,mop:ne,mopen:ne,minner:ne},mrel:{mord:q0,mop:q0,mopen:q0,minner:q0},mopen:{},mclose:{mop:e0,mbin:ne,mrel:q0,minner:e0},mpunct:{mord:e0,mop:e0,mrel:q0,mopen:e0,mclose:e0,mpunct:e0,minner:e0},minner:{mord:e0,mop:e0,mbin:ne,mrel:q0,mopen:e0,mpunct:e0,minner:e0}},wi={mord:{mop:e0},mop:{mord:e0,mop:e0},mbin:{},mrel:{},mopen:{},mclose:{mop:e0},mpunct:{},minner:{mop:e0}},fa={},we={},Se={};function L(r){for(var{type:e,names:t,htmlBuilder:a,mathmlBuilder:n}=r,s=0;s{var M=E.classes[0],R=D.classes[0];M==="mbin"&&ki.has(R)?E.classes[0]="mord":R==="mbin"&&Si.has(M)&&(D.classes[0]="mord")},{node:g},S,x),Rt(s,(D,E)=>{var M,R,y=It(E),w=It(D),k=y&&w?D.hasClass("mtight")?(M=wi[y])==null?void 0:M[w]:(R=xi[y])==null?void 0:R[w]:null;if(k)return da(k,m)},{node:g},S,x),s},Rt=function(e,t,a,n,s){n&&e.push(n);for(var o=0;oS=>{e.splice(g+1,0,S),o++})(o)}n&&e.pop()},va=function(e){return e instanceof fe||e instanceof je||e instanceof ve&&e.hasClass("enclosing")?e:null},Ft=function(e,t){var a=va(e);if(a){var n=a.children;if(n.length){if(t==="right")return Ft(n[n.length-1],"right");if(t==="left")return Ft(n[0],"left")}}return e},It=function(e,t){if(!e)return null;t&&(e=Ft(e,t));var a=e.classes[0];return Ti[a]||null},ke=function(e,t){var a=["nulldelimiter"].concat(e.baseSizingClasses());return C(t.concat(a))},V=function(e,t,a){if(!e)return C();if(we[e.type]){var n=we[e.type](e,t);if(a&&t.size!==a.size){n=C(t.sizingClasses(a),[n],t);var s=t.sizeMultiplier/a.sizeMultiplier;n.height*=s,n.depth*=s}return n}else throw new F("Got group of unknown type: '"+e.type+"'")};function Ne(r,e){var t=C(["base"],r,e),a=C(["strut"]);return a.style.height=N(t.height+t.depth),t.depth&&(a.style.verticalAlign=N(-t.depth)),t.children.unshift(a),t}function Dt(r,e){var t=null;r.length===1&&r[0].type==="tag"&&(t=r[0].tag,r=r[0].body);var a=o0(r,e,"root"),n;a.length===2&&a[1].hasClass("tag")&&(n=a.pop());for(var s=[],o=[],u=0;u0&&(s.push(Ne(o,e)),o=[]),s.push(a[u]));o.length>0&&s.push(Ne(o,e));var m;t?(m=Ne(o0(t,e,!0),e),m.classes=["tag"],s.push(m)):n&&s.push(n);var p=C(["katex-html"],s);if(p.setAttribute("aria-hidden","true"),m){var g=m.children[0];g.style.height=N(p.height+p.depth),p.depth&&(g.style.verticalAlign=N(-p.depth))}return p}function ga(r){return new fe(r)}class I{constructor(e,t,a){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=a||[]}setAttribute(e,t){this.attributes[e]=t}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=K0(this.classes));for(var a=0;a0&&(e+=' class ="'+c0(K0(this.classes))+'"'),e+=">";for(var a=0;a",e}toText(){return this.children.map(e=>e.toText()).join("")}}class i0{constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return c0(this.toText())}toText(){return this.text}}class ba{constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character=" ":e>=.1666&&e<=.1667?this.character=" ":e>=.2222&&e<=.2223?this.character=" ":e>=.2777&&e<=.2778?this.character="  ":e>=-.05556&&e<=-.05555?this.character=" ⁣":e>=-.1667&&e<=-.1666?this.character=" ⁣":e>=-.2223&&e<=-.2222?this.character=" ⁣":e>=-.2778&&e<=-.2777?this.character=" ⁣":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",N(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}}var Ei=new Set(["\\imath","\\jmath"]),Mi=new Set(["mrow","mtable"]),z0=function(e,t,a){return K[t][e]&&K[t][e].replace&&e.charCodeAt(0)!==55349&&!(ca.hasOwnProperty(e)&&a&&(a.fontFamily&&a.fontFamily.slice(4,6)==="tt"||a.font&&a.font.slice(4,6)==="tt"))&&(e=K[t][e].replace),new i0(e)},jt=function(e){return e.length===1?e[0]:new I("mrow",e)},zi={mathit:"italic",boldsymbol:r=>r.type==="textord"?"bold":"bold-italic",mathbf:"bold",mathbb:"double-struck",mathsfit:"sans-serif-italic",mathfrak:"fraktur",mathscr:"script",mathcal:"script",mathsf:"sans-serif",mathtt:"monospace"},Xt=(r,e)=>{if(r.mode==="text"){if(e.fontFamily==="texttt")return"monospace";if(e.fontFamily==="textsf")return e.fontShape==="textit"&&e.fontWeight==="textbf"?"sans-serif-bold-italic":e.fontShape==="textit"?"sans-serif-italic":e.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(e.fontShape==="textit"&&e.fontWeight==="textbf")return"bold-italic";if(e.fontShape==="textit")return"italic";if(e.fontWeight==="textbf")return"bold"}var t=e.font;if(!t||t==="mathnormal")return null;var a=r.mode,n=zi[t];if(n)return typeof n=="function"?n(r):n;var s=r.text;if(Ei.has(s))return null;if(K[a][s]){var o=K[a][s].replace;o&&(s=o)}var u=Ct[t].fontName;return _t(s,u,a)?Ct[t].variant:null};function ut(r){if(!r)return!1;if(r.type==="mi"&&r.children.length===1){var e=r.children[0];return e instanceof i0&&e.text==="."}else if(r.type==="mo"&&r.children.length===1&&r.getAttribute("separator")==="true"&&r.getAttribute("lspace")==="0em"&&r.getAttribute("rspace")==="0em"){var t=r.children[0];return t instanceof i0&&t.text===","}else return!1}var E0=function(e,t,a){if(e.length===1){var n=Z(e[0],t);return a&&n instanceof I&&n.type==="mo"&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var s=[],o,u=0;u=1&&(o.type==="mn"||ut(o))){var m=h.children[0];m instanceof I&&m.type==="mn"&&(m.children=[...o.children,...m.children],s.pop())}else if(o.type==="mi"&&o.children.length===1){var p=o.children[0];if(p instanceof i0&&p.text==="̸"&&(h.type==="mo"||h.type==="mi"||h.type==="mn")){var g=h.children[0];g instanceof i0&&g.text.length>0&&(g.text=g.text.slice(0,1)+"̸"+g.text.slice(1),s.pop())}}}s.push(h),o=h}return s},ee=function(e,t,a){return jt(E0(e,t,a))},Z=function(e,t){if(!e)return new I("mrow");if(Se[e.type])return Se[e.type](e,t);throw new F("Got group of unknown type: '"+e.type+"'")};function Ir(r,e,t,a,n){var s=E0(r,t),o;s.length===1&&s[0]instanceof I&&Mi.has(s[0].type)?o=s[0]:o=new I("mrow",s);var u=new I("annotation",[new i0(e)]);u.setAttribute("encoding","application/x-tex");var h=new I("semantics",[o,u]),m=new I("math",[h]);m.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),a&&m.setAttribute("display","block");var p=n?"katex":"katex-mathml";return C([p],[m])}var Ci=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],Dr=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],Nr=function(e,t){return t.size<2?e:Ci[e-1][t.size-1]};class P0{constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||P0.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=Dr[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var t={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};return Object.assign(t,e),new P0(t)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:Nr(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:Dr[e-1]})}havingBaseStyle(e){e=e||this.style.text();var t=Nr(P0.BASESIZE,e);return this.size===t&&this.textSize===P0.BASESIZE&&this.style===e?this:this.extend({style:e,size:t})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==P0.BASESIZE?["sizing","reset-size"+this.size,"size"+P0.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=di(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}P0.BASESIZE=6;var ya=function(e){return new P0({style:e.displayMode?_.DISPLAY:_.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},xa=function(e,t){if(t.displayMode){var a=["katex-display"];t.leqno&&a.push("leqno"),t.fleqn&&a.push("fleqn"),e=C(a,[e])}return e},Ri=function(e,t,a){var n=ya(a),s;if(a.output==="mathml")return Ir(e,t,n,a.displayMode,!0);if(a.output==="html"){var o=Dt(e,n);s=C(["katex"],[o])}else{var u=Ir(e,t,n,a.displayMode,!1),h=Dt(e,n);s=C(["katex"],[u,h])}return xa(s,a)},Fi=function(e,t,a){var n=ya(a),s=Dt(e,n),o=C(["katex"],[s]);return xa(o,a)},Ii={widehat:"^",widecheck:"ˇ",widetilde:"~",utilde:"~",overleftarrow:"←",underleftarrow:"←",xleftarrow:"←",overrightarrow:"→",underrightarrow:"→",xrightarrow:"→",underbrace:"⏟",overbrace:"⏞",underbracket:"⎵",overbracket:"⎴",overgroup:"⏠",undergroup:"⏡",overleftrightarrow:"↔",underleftrightarrow:"↔",xleftrightarrow:"↔",Overrightarrow:"⇒",xRightarrow:"⇒",overleftharpoon:"↼",xleftharpoonup:"↼",overrightharpoon:"⇀",xrightharpoonup:"⇀",xLeftarrow:"⇐",xLeftrightarrow:"⇔",xhookleftarrow:"↩",xhookrightarrow:"↪",xmapsto:"↦",xrightharpoondown:"⇁",xleftharpoondown:"↽",xrightleftharpoons:"⇌",xleftrightharpoons:"⇋",xtwoheadleftarrow:"↞",xtwoheadrightarrow:"↠",xlongequal:"=",xtofrom:"⇄",xrightleftarrows:"⇄",xrightequilibrium:"⇌",xleftequilibrium:"⇋","\\cdrightarrow":"→","\\cdleftarrow":"←","\\cdlongequal":"="},We=function(e){var t=new I("mo",[new i0(Ii[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},Di={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overbracket:[["leftbracketover","rightbracketover"],1.6,440],underbracket:[["leftbracketunder","rightbracketunder"],1.6,410],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Ni=new Set(["widehat","widecheck","widetilde","utilde"]),Ye=function(e,t){function a(){var u=4e5,h=e.label.slice(1);if(Ni.has(h)&&"base"in e){var m=e.base.type==="ordgroup"?e.base.body.length:1,p,g,S;if(m>5)h==="widehat"||h==="widecheck"?(p=420,u=2364,S=.42,g=h+"4"):(p=312,u=2340,S=.34,g="tilde4");else{var x=[1,1,2,2,3,3][m];h==="widehat"||h==="widecheck"?(u=[0,1062,2364,2364,2364][x],p=[0,239,300,360,420][x],S=[0,.24,.3,.3,.36,.42][x],g=h+x):(u=[0,600,1033,2339,2340][x],p=[0,260,286,306,312][x],S=[0,.26,.286,.3,.306,.34][x],g="tilde"+x)}var D=new J0(g),E=new $0([D],{width:"100%",height:N(S),viewBox:"0 0 "+u+" "+p,preserveAspectRatio:"none"});return{span:Q0([],[E],t),minWidth:0,height:S}}else{var M=[],R=Di[h];if(!R)throw new Error('No SVG data for "'+h+'".');var[y,w,k]=R,A=k/1e3,T=y.length,O,P;if(T===1){if(R.length!==4)throw new Error('Expected 4-tuple for single-path SVG data "'+h+'".');O=["hide-tail"],P=[R[3]]}else if(T===2)O=["halfarrow-left","halfarrow-right"],P=["xMinYMin","xMaxYMin"];else if(T===3)O=["brace-left","brace-center","brace-right"],P=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support + `+T+" children.");for(var B=0;B0&&(n.style.minWidth=N(s)),n},Bi=function(e,t,a,n,s){var o,u=e.height+e.depth+a+n;if(/fbox|color|angl/.test(t)){if(o=C(["stretchy",t],[],s),t==="fbox"){var h=s.color&&s.getColor();h&&(o.style.borderColor=h)}}else{var m=[];/^[bx]cancel$/.test(t)&&m.push(new kt({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&m.push(new kt({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var p=new $0(m,{width:"100%",height:N(u)});o=Q0([],[p],s)}return o.height=u,o.style.height=N(u),o},Oi={bin:1,close:1,inner:1,open:1,punct:1,rel:1},Li={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1};function qi(r){return r in Oi}function G(r,e){if(!r||r.type!==e)throw new Error("Expected node of type "+e+", but got "+(r?"node of type "+r.type:String(r)));return r}function Ze(r){var e=Ke(r);if(!e)throw new Error("Expected node of symbol group type, but got "+(r?"node of type "+r.type:String(r)));return e}function Ke(r){return r&&(r.type==="atom"||Li.hasOwnProperty(r.type))?r:null}var wa=r=>{if(r instanceof A0)return r;if(ci(r)&&r.children.length===1)return wa(r.children[0])},Sa=(r,e)=>{var t,a,n;r&&r.type==="supsub"?(a=G(r.base,"accent"),t=a.base,r.base=t,n=ui(V(r,e)),r.base=a):(a=G(r,"accent"),t=a.base);var s=V(t,e.havingCrampedStyle()),o=a.isShifty&&_0(t),u=0;if(o){var h,m;u=(h=(m=wa(s))==null?void 0:m.skew)!=null?h:0}var p=a.label==="\\c",g=p?s.height+s.depth:Math.min(s.height,e.fontMetrics().xHeight),S;if(a.isStretchy)S=Ye(a,e),S=X({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"elem",elem:S,wrapperClasses:["svg-align"],wrapperStyle:u>0?{width:"calc(100% - "+N(2*u)+")",marginLeft:N(2*u)}:void 0}]});else{var x,D;a.label==="\\vec"?(x=pa("vec",e),D=ma.vec[1]):(x=Ve({type:"textord",mode:a.mode,text:a.label},e),x=oi(x),x.italic=0,D=x.width,p&&(g+=x.depth)),S=C(["accent-body"],[x]);var E=a.label==="\\textcircled";E&&(S.classes.push("accent-full"),g=s.height);var M=u;E||(M-=D/2),S.style.left=N(M),a.label==="\\textcircled"&&(S.style.top=".2em"),S=X({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:-g},{type:"elem",elem:S}]})}var R=C(["mord","accent"],[S],e);return n?(n.children[0]=R,n.height=Math.max(R.height,n.height),n.classes[0]="mord",n):R},Pi=(r,e)=>{var t=r.isStretchy?We(r.label):new I("mo",[z0(r.label,r.mode)]),a=new I("mover",[Z(r.base,e),t]);return a.setAttribute("accent","true"),a},Hi=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(r=>"\\"+r).join("|"));L({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],numArgs:1,handler:(r,e)=>{var t=Ue(e[0]),a=!Hi.test(r.funcName),n=!a||r.funcName==="\\widehat"||r.funcName==="\\widetilde"||r.funcName==="\\widecheck";return{type:"accent",mode:r.parser.mode,label:r.funcName,isStretchy:a,isShifty:n,base:t}},htmlBuilder:Sa,mathmlBuilder:Pi});L({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"],handler:(r,e)=>{var t=e[0],a=r.parser.mode;return a==="math"&&(r.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+r.funcName+" works only in text mode"),a="text"),{type:"accent",mode:a,label:r.funcName,isStretchy:!1,isShifty:!0,base:t}}});L({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],numArgs:1,handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0];return{type:"accentUnder",mode:t.mode,label:a,base:n}},htmlBuilder:(r,e)=>{var t=V(r.base,e),a=Ye(r,e),n=r.label==="\\utilde"?.12:0,s=X({positionType:"top",positionData:t.height,children:[{type:"elem",elem:a,wrapperClasses:["svg-align"]},{type:"kern",size:n},{type:"elem",elem:t}]});return C(["mord","accentunder"],[s],e)},mathmlBuilder:(r,e)=>{var t=We(r.label),a=new I("munder",[Z(r.base,e),t]);return a.setAttribute("accentunder","true"),a}});var Be=r=>{var e=new I("mpadded",r?[r]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e};L({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],numArgs:1,numOptionalArgs:1,handler(r,e,t){var{parser:a,funcName:n}=r;return{type:"xArrow",mode:a.mode,label:n,body:e[0],below:t[0]}},htmlBuilder(r,e){var t=e.style,a=e.havingStyle(t.sup()),n=pe(V(r.body,a,e),e),s=r.label.slice(0,2)==="\\x"?"x":"cd";n.classes.push(s+"-arrow-pad");var o;r.below&&(a=e.havingStyle(t.sub()),o=pe(V(r.below,a,e),e),o.classes.push(s+"-arrow-pad"));var u=Ye(r,e),h=-e.fontMetrics().axisHeight+.5*u.height,m=-e.fontMetrics().axisHeight-.5*u.height-.111;(n.depth>.25||r.label==="\\xleftequilibrium")&&(m-=n.depth);var p;if(o){var g=-e.fontMetrics().axisHeight+o.height+.5*u.height+.111;p=X({positionType:"individualShift",children:[{type:"elem",elem:n,shift:m},{type:"elem",elem:u,shift:h,wrapperClasses:["svg-align"]},{type:"elem",elem:o,shift:g}]})}else p=X({positionType:"individualShift",children:[{type:"elem",elem:n,shift:m},{type:"elem",elem:u,shift:h,wrapperClasses:["svg-align"]}]});return C(["mrel","x-arrow"],[p],e)},mathmlBuilder(r,e){var t=We(r.label);t.setAttribute("minsize",r.label.charAt(0)==="x"?"1.75em":"3.0em");var a;if(r.body){var n=Be(Z(r.body,e));if(r.below){var s=Be(Z(r.below,e));a=new I("munderover",[t,s,n])}else a=new I("mover",[t,n])}else if(r.below){var o=Be(Z(r.below,e));a=new I("munder",[t,o])}else a=Be(),a=new I("mover",[t,a]);return a}});function $i(r,e){var t=o0(r.body,e,!0);return C([r.mclass],t,e)}function _i(r,e){var t,a=E0(r.body,e);return r.mclass==="minner"?t=new I("mpadded",a):r.mclass==="mord"?r.isCharacterBox?(t=a[0],t.type="mi"):t=new I("mi",a):(r.isCharacterBox?(t=a[0],t.type="mo"):t=new I("mo",a),r.mclass==="mbin"?(t.attributes.lspace="0.22em",t.attributes.rspace="0.22em"):r.mclass==="mpunct"?(t.attributes.lspace="0em",t.attributes.rspace="0.17em"):(r.mclass==="mopen"||r.mclass==="mclose")&&(t.attributes.lspace="0em",t.attributes.rspace="0em")),t}L({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],numArgs:1,primitive:!0,handler(r,e){var{parser:t,funcName:a}=r,n=e[0];return{type:"mclass",mode:t.mode,mclass:"m"+a.slice(5),body:n0(n),isCharacterBox:_0(n)}},htmlBuilder:$i,mathmlBuilder:_i});var Je=r=>{var e=r.type==="ordgroup"&&r.body.length?r.body[0]:r;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"};L({type:"mclass",names:["\\@binrel"],numArgs:2,handler(r,e){var{parser:t}=r;return{type:"mclass",mode:t.mode,mclass:Je(e[0]),body:n0(e[1]),isCharacterBox:_0(e[1])}}});L({type:"mclass",names:["\\stackrel","\\overset","\\underset"],numArgs:2,handler(r,e){var{parser:t,funcName:a}=r,n=e[1],s=e[0],o;a!=="\\stackrel"?o=Je(n):o="mrel";var u={type:"op",mode:n.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:a!=="\\stackrel",body:n0(n)},h=a==="\\underset"?{type:"supsub",mode:s.mode,base:u,sub:s}:{type:"supsub",mode:s.mode,base:u,sup:s};return{type:"mclass",mode:t.mode,mclass:o,body:[h],isCharacterBox:_0(h)}}});L({type:"pmb",names:["\\pmb"],numArgs:1,allowedInText:!0,handler(r,e){var{parser:t}=r;return{type:"pmb",mode:t.mode,mclass:Je(e[0]),body:n0(e[0])}},htmlBuilder(r,e){var t=o0(r.body,e,!0),a=C([r.mclass],t,e);return a.style.textShadow="0.02em 0.01em 0.04px",a},mathmlBuilder(r,e){var t=E0(r.body,e),a=new I("mstyle",t);return a.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),a}});var Gi={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Br=()=>({type:"styling",body:[],mode:"math",style:"display",resetFont:!0}),Or=r=>r.type==="textord"&&r.text==="@",Ui=(r,e)=>(r.type==="mathord"||r.type==="atom")&&r.text===e;function ji(r,e,t){var a=Gi[r];switch(a){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return t.callFunction(a,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var n=t.callFunction("\\\\cdleft",[e[0]],[]),s={type:"atom",text:a,mode:"math",family:"rel"},o=t.callFunction("\\Big",[s],[]),u=t.callFunction("\\\\cdright",[e[1]],[]),h={type:"ordgroup",mode:"math",body:[n,o,u]};return t.callFunction("\\\\cdparent",[h],[])}case"\\\\cdlongequal":return t.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var m={type:"textord",text:"\\Vert",mode:"math"};return t.callFunction("\\Big",[m],[])}default:return{type:"textord",text:" ",mode:"math"}}}function Xi(r){var e=[];for(r.gullet.beginGroup(),r.gullet.macros.set("\\cr","\\\\\\relax"),r.gullet.beginGroup();;){e.push(r.parseExpression(!1,"\\\\")),r.gullet.endGroup(),r.gullet.beginGroup();var t=r.fetch().text;if(t==="&"||t==="\\\\")r.consume();else if(t==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new F("Expected \\\\ or \\cr or \\end",r.nextToken)}for(var a=[],n=[a],s=0;sAV".includes(m))for(var g=0;g<2;g++){for(var S=!0,x=h+1;xAV=|." after @',o[h]);var D=ji(m,p,r),E={type:"styling",body:[D],mode:"math",style:"display",resetFont:!0};a.push(E),u=Br()}s%2===0?a.push(u):a.shift(),a=[],n.push(a)}r.gullet.endGroup(),r.gullet.endGroup();var M=new Array(n[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:n,arraystretch:1,addJot:!0,rowGaps:[null],cols:M,colSeparationType:"CD",hLinesBeforeRow:new Array(n.length+1).fill([])}}L({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],numArgs:1,handler(r,e){var{parser:t,funcName:a}=r;return{type:"cdlabel",mode:t.mode,side:a.slice(4),label:e[0]}},htmlBuilder(r,e){var t=e.havingStyle(e.style.sup()),a=pe(V(r.label,t,e),e);return a.classes.push("cd-label-"+r.side),a.style.bottom=N(.8-a.depth),a.height=0,a.depth=0,a},mathmlBuilder(r,e){var t=new I("mrow",[Z(r.label,e)]);return t=new I("mpadded",[t]),t.setAttribute("width","0"),r.side==="left"&&t.setAttribute("lspace","-1width"),t.setAttribute("voffset","0.7em"),t=new I("mstyle",[t]),t.setAttribute("displaystyle","false"),t.setAttribute("scriptlevel","1"),t}});L({type:"cdlabelparent",names:["\\\\cdparent"],numArgs:1,handler(r,e){var{parser:t}=r;return{type:"cdlabelparent",mode:t.mode,fragment:e[0]}},htmlBuilder(r,e){var t=pe(V(r.fragment,e),e);return t.classes.push("cd-vert-arrow"),t},mathmlBuilder(r,e){return new I("mrow",[Z(r.fragment,e)])}});L({type:"textord",names:["\\@char"],numArgs:1,allowedInText:!0,handler(r,e){for(var{parser:t}=r,a=G(e[0],"ordgroup"),n=a.body,s="",o=0;o=1114111)throw new F("\\@char with invalid code point "+s);return h<=65535?m=String.fromCharCode(h):(h-=65536,m=String.fromCharCode((h>>10)+55296,(h&1023)+56320)),{type:"textord",mode:t.mode,text:m}}});var Vi=(r,e)=>{var t=o0(r.body,e.withColor(r.color),!1);return U0(t)},Wi=(r,e)=>{var t=E0(r.body,e.withColor(r.color)),a=new I("mstyle",t);return a.setAttribute("mathcolor",r.color),a};L({type:"color",names:["\\textcolor"],numArgs:2,allowedInText:!0,argTypes:["color","original"],handler(r,e){var{parser:t}=r,a=G(e[0],"color-token").color,n=e[1];return{type:"color",mode:t.mode,color:a,body:n0(n)}},htmlBuilder:Vi,mathmlBuilder:Wi});L({type:"color",names:["\\color"],numArgs:1,allowedInText:!0,argTypes:["color"],handler(r,e){var{parser:t,breakOnTokenText:a}=r,n=G(e[0],"color-token").color;t.gullet.macros.set("\\current@color",n);var s=t.parseExpression(!0,a);return{type:"color",mode:t.mode,color:n,body:s}}});L({type:"cr",names:["\\\\"],numArgs:0,numOptionalArgs:0,allowedInText:!0,handler(r,e,t){var{parser:a}=r,n=a.gullet.future().text==="["?a.parseSizeGroup(!0):null,s=!a.settings.displayMode||!a.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:a.mode,newLine:s,size:n&&G(n,"size").value}},htmlBuilder(r,e){var t=C(["mspace"],[],e);return r.newLine&&(t.classes.push("newline"),r.size&&(t.style.marginTop=N(t0(r.size,e)))),t},mathmlBuilder(r,e){var t=new I("mspace");return r.newLine&&(t.setAttribute("linebreak","newline"),r.size&&t.setAttribute("height",N(t0(r.size,e)))),t}});var Nt={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},ka=r=>{var e=r.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new F("Expected a control sequence",r);return e},Yi=r=>{var e=r.gullet.popToken();return e.text==="="&&(e=r.gullet.popToken(),e.text===" "&&(e=r.gullet.popToken())),e},Aa=(r,e,t,a)=>{var n=r.gullet.macros.get(t.text);n==null&&(t.noexpand=!0,n={tokens:[t],numArgs:0,unexpandable:!r.gullet.isExpandable(t.text)}),r.gullet.macros.set(e,n,a)};L({type:"internal",names:["\\global","\\long","\\\\globallong"],numArgs:0,allowedInText:!0,handler(r){var{parser:e,funcName:t}=r;e.consumeSpaces();var a=e.fetch();if(Nt[a.text])return(t==="\\global"||t==="\\\\globallong")&&(a.text=Nt[a.text]),G(e.parseFunction(),"internal");throw new F("Invalid token after macro prefix",a)}});L({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],numArgs:0,allowedInText:!0,primitive:!0,handler(r){var{parser:e,funcName:t}=r,a=e.gullet.popToken(),n=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(n))throw new F("Expected a control sequence",a);for(var s=0,o,u=[[]];e.gullet.future().text!=="{";)if(a=e.gullet.popToken(),a.text==="#"){if(e.gullet.future().text==="{"){o=e.gullet.future(),u[s].push("{");break}if(a=e.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new F('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new F('Argument number "'+a.text+'" out of order');s++,u.push([])}else{if(a.text==="EOF")throw new F("Expected a macro definition");u[s].push(a.text)}var{tokens:h}=e.gullet.consumeArg();return o&&h.unshift(o),(t==="\\edef"||t==="\\xdef")&&(h=e.gullet.expandTokens(h),h.reverse()),e.gullet.macros.set(n,{tokens:h,numArgs:s,delimiters:u},t===Nt[t]),{type:"internal",mode:e.mode}}});L({type:"internal",names:["\\let","\\\\globallet"],numArgs:0,allowedInText:!0,primitive:!0,handler(r){var{parser:e,funcName:t}=r,a=ka(e.gullet.popToken());e.gullet.consumeSpaces();var n=Yi(e);return Aa(e,a,n,t==="\\\\globallet"),{type:"internal",mode:e.mode}}});L({type:"internal",names:["\\futurelet","\\\\globalfuture"],numArgs:0,allowedInText:!0,primitive:!0,handler(r){var{parser:e,funcName:t}=r,a=ka(e.gullet.popToken()),n=e.gullet.popToken(),s=e.gullet.popToken();return Aa(e,a,s,t==="\\\\globalfuture"),e.gullet.pushToken(s),e.gullet.pushToken(n),{type:"internal",mode:e.mode}}});var be=function(e,t,a){var n=K.math[e]&&K.math[e].replace,s=_t(n||e,t,a);if(!s)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return s},Vt=function(e,t,a,n){var s=a.havingBaseStyle(t),o=C(n.concat(s.sizingClasses(a)),[e],a),u=s.sizeMultiplier/a.sizeMultiplier;return o.height*=u,o.depth*=u,o.maxFontSize=s.sizeMultiplier,o},Ta=function(e,t,a){var n=t.havingBaseStyle(a),s=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=N(s),e.height-=s,e.depth+=s},Zi=function(e,t,a,n,s,o){var u=m0(e,"Main-Regular",s,n),h=Vt(u,t,n,o);return Ta(h,n,t),h},Ki=function(e,t,a,n){return m0(e,"Size"+t+"-Regular",a,n)},Ea=function(e,t,a,n,s,o){var u=Ki(e,t,s,n),h=Vt(C(["delimsizing","size"+t],[u],n),_.TEXT,n,o);return a&&Ta(h,n,_.TEXT),h},ct=function(e,t,a){var n;t==="Size1-Regular"?n="delim-size1":n="delim-size4";var s=C(["delimsizinginner",n],[C([],[m0(e,t,a)])]);return{type:"elem",elem:s}},ht=function(e,t,a){var n=I0["Size4-Regular"][e.charCodeAt(0)]?I0["Size4-Regular"][e.charCodeAt(0)][4]:I0["Size1-Regular"][e.charCodeAt(0)][4],s=new J0("inner",ti(e,Math.round(1e3*t))),o=new $0([s],{width:N(n),height:N(t),style:"width:"+N(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),u=Q0([],[o],a);return u.height=t,u.style.height=N(t),u.style.width=N(n),{type:"elem",elem:u}},Bt=.008,Oe={type:"kern",size:-1*Bt},Ji=new Set(["|","\\lvert","\\rvert","\\vert"]),Qi=new Set(["\\|","\\lVert","\\rVert","\\Vert"]),Ma=function(e,t,a,n,s,o){var u,h,m,p,g="",S=0;u=m=p=e,h=null;var x="Size1-Regular";e==="\\uparrow"?m=p="⏐":e==="\\Uparrow"?m=p="‖":e==="\\downarrow"?u=m="⏐":e==="\\Downarrow"?u=m="‖":e==="\\updownarrow"?(u="\\uparrow",m="⏐",p="\\downarrow"):e==="\\Updownarrow"?(u="\\Uparrow",m="‖",p="\\Downarrow"):Ji.has(e)?(m="∣",g="vert",S=333):Qi.has(e)?(m="∥",g="doublevert",S=556):e==="["||e==="\\lbrack"?(u="⎡",m="⎢",p="⎣",x="Size4-Regular",g="lbrack",S=667):e==="]"||e==="\\rbrack"?(u="⎤",m="⎥",p="⎦",x="Size4-Regular",g="rbrack",S=667):e==="\\lfloor"||e==="⌊"?(m=u="⎢",p="⎣",x="Size4-Regular",g="lfloor",S=667):e==="\\lceil"||e==="⌈"?(u="⎡",m=p="⎢",x="Size4-Regular",g="lceil",S=667):e==="\\rfloor"||e==="⌋"?(m=u="⎥",p="⎦",x="Size4-Regular",g="rfloor",S=667):e==="\\rceil"||e==="⌉"?(u="⎤",m=p="⎥",x="Size4-Regular",g="rceil",S=667):e==="("||e==="\\lparen"?(u="⎛",m="⎜",p="⎝",x="Size4-Regular",g="lparen",S=875):e===")"||e==="\\rparen"?(u="⎞",m="⎟",p="⎠",x="Size4-Regular",g="rparen",S=875):e==="\\{"||e==="\\lbrace"?(u="⎧",h="⎨",p="⎩",m="⎪",x="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(u="⎫",h="⎬",p="⎭",m="⎪",x="Size4-Regular"):e==="\\lgroup"||e==="⟮"?(u="⎧",p="⎩",m="⎪",x="Size4-Regular"):e==="\\rgroup"||e==="⟯"?(u="⎫",p="⎭",m="⎪",x="Size4-Regular"):e==="\\lmoustache"||e==="⎰"?(u="⎧",p="⎭",m="⎪",x="Size4-Regular"):(e==="\\rmoustache"||e==="⎱")&&(u="⎫",p="⎩",m="⎪",x="Size4-Regular");var D=be(u,x,s),E=D.height+D.depth,M=be(m,x,s),R=M.height+M.depth,y=be(p,x,s),w=y.height+y.depth,k=0,A=1;if(h!==null){var T=be(h,x,s);k=T.height+T.depth,A=2}var O=E+w+k,P=Math.max(0,Math.ceil((t-O)/(A*R))),B=O+P*A*R,j=n.fontMetrics().axisHeight;a&&(j*=n.sizeMultiplier);var W=B/2-j,Y=[];if(g.length>0){var j0=B-E-w,b0=Math.round(B*1e3),y0=ri(g,Math.round(j0*1e3)),R0=new J0(g,y0),O0=N(S/1e3),Q=N(b0/1e3),v0=new $0([R0],{width:O0,height:Q,viewBox:"0 0 "+S+" "+b0}),h0=Q0([],[v0],n);h0.height=b0/1e3,h0.style.width=O0,h0.style.height=Q,Y.push({type:"elem",elem:h0})}else{if(Y.push(ct(p,x,s)),Y.push(Oe),h===null){var x0=B-E-w+2*Bt;Y.push(ht(m,x0,n))}else{var u0=(B-E-w-k)/2+2*Bt;Y.push(ht(m,u0,n)),Y.push(Oe),Y.push(ct(h,x,s)),Y.push(Oe),Y.push(ht(m,u0,n))}Y.push(Oe),Y.push(ct(u,x,s))}var w0=n.havingBaseStyle(_.TEXT),S0=X({positionType:"bottom",positionData:W,children:Y});return Vt(C(["delimsizing","mult"],[S0],w0),_.TEXT,n,o)},dt=80,mt=.08,pt=function(e,t,a,n,s){var o=ei(e,n,a),u=new J0(e,o),h=new $0([u],{width:"400em",height:N(t),viewBox:"0 0 400000 "+a,preserveAspectRatio:"xMinYMin slice"});return Q0(["hide-tail"],[h],s)},es=function(e,t){var a=t.havingBaseSizing(),n=Ia("\\surd",e*a.sizeMultiplier,Fa,a),s=a.sizeMultiplier,o=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),u,h,m,p,g;return n.type==="small"?(p=1e3+1e3*o+dt,e<1?s=1:e<1.4&&(s=.7),h=(1+o+mt)/s,m=(1+o)/s,u=pt("sqrtMain",h,p,o,t),u.style.minWidth="0.853em",g=.833/s):n.type==="large"?(p=(1e3+dt)*ye[n.size],m=(ye[n.size]+o)/s,h=(ye[n.size]+o+mt)/s,u=pt("sqrtSize"+n.size,h,p,o,t),u.style.minWidth="1.02em",g=1/s):(h=e+o+mt,m=e+o,p=Math.floor(1e3*e+o)+dt,u=pt("sqrtTall",h,p,o,t),u.style.minWidth="0.742em",g=1.056),u.height=m,u.style.height=N(h),{span:u,advanceWidth:g,ruleWidth:(t.fontMetrics().sqrtRuleThickness+o)*s}},za=new Set(["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","\\surd"]),ts=new Set(["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱"]),Ca=new Set(["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"]),ye=[0,1.2,1.8,2.4,3],Ra=function(e,t,a,n,s){if(e==="<"||e==="\\lt"||e==="⟨"?e="\\langle":(e===">"||e==="\\gt"||e==="⟩")&&(e="\\rangle"),za.has(e)||Ca.has(e))return Ea(e,t,!1,a,n,s);if(ts.has(e))return Ma(e,ye[t],!1,a,n,s);throw new F("Illegal delimiter: '"+e+"'")},rs=[{type:"small",style:_.SCRIPTSCRIPT},{type:"small",style:_.SCRIPT},{type:"small",style:_.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],as=[{type:"small",style:_.SCRIPTSCRIPT},{type:"small",style:_.SCRIPT},{type:"small",style:_.TEXT},{type:"stack"}],Fa=[{type:"small",style:_.SCRIPTSCRIPT},{type:"small",style:_.SCRIPT},{type:"small",style:_.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],ns=function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";var t=e.type;throw new Error("Add support for delim type '"+t+"' here.")},Ia=function(e,t,a,n){for(var s=Math.min(2,3-n.style.size),o=s;ot)return u}return a[a.length-1]},Ot=function(e,t,a,n,s,o){e==="<"||e==="\\lt"||e==="⟨"?e="\\langle":(e===">"||e==="\\gt"||e==="⟩")&&(e="\\rangle");var u;Ca.has(e)?u=rs:za.has(e)?u=Fa:u=as;var h=Ia(e,t,u,n);return h.type==="small"?Zi(e,h.style,a,n,s,o):h.type==="large"?Ea(e,h.size,a,n,s,o):Ma(e,t,a,n,s,o)},ft=function(e,t,a,n,s,o){var u=n.fontMetrics().axisHeight*n.sizeMultiplier,h=901,m=5/n.fontMetrics().ptPerEm,p=Math.max(t-u,a+u),g=Math.max(p/500*h,2*p-m);return Ot(e,g,!0,n,s,o)},Lr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},is=new Set(["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."]);function qr(r){return"isMiddle"in r}function Qe(r,e){var t=Ke(r);if(t&&is.has(t.text))return t;throw t?new F("Invalid delimiter '"+t.text+"' after '"+e.funcName+"'",r):new F("Invalid delimiter type '"+r.type+"'",r)}L({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],numArgs:1,argTypes:["primitive"],handler:(r,e)=>{var t=Qe(e[0],r);return{type:"delimsizing",mode:r.parser.mode,size:Lr[r.funcName].size,mclass:Lr[r.funcName].mclass,delim:t.text}},htmlBuilder:(r,e)=>r.delim==="."?C([r.mclass]):Ra(r.delim,r.size,e,r.mode,[r.mclass]),mathmlBuilder:r=>{var e=[];r.delim!=="."&&e.push(z0(r.delim,r.mode));var t=new I("mo",e);r.mclass==="mopen"||r.mclass==="mclose"?t.setAttribute("fence","true"):t.setAttribute("fence","false"),t.setAttribute("stretchy","true");var a=N(ye[r.size]);return t.setAttribute("minsize",a),t.setAttribute("maxsize",a),t}});function Pr(r){if(!r.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}L({type:"leftright-right",names:["\\right"],numArgs:1,primitive:!0,handler:(r,e)=>{var t=r.parser.gullet.macros.get("\\current@color");if(t&&typeof t!="string")throw new F("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:r.parser.mode,delim:Qe(e[0],r).text,color:t}}});L({type:"leftright",names:["\\left"],numArgs:1,primitive:!0,handler:(r,e)=>{var t=Qe(e[0],r),a=r.parser;++a.leftrightDepth;var n=a.parseExpression(!1);--a.leftrightDepth,a.expect("\\right",!1);var s=G(a.parseFunction(),"leftright-right");return{type:"leftright",mode:a.mode,body:n,left:t.text,right:s.delim,rightColor:s.color}},htmlBuilder:(r,e)=>{Pr(r);for(var t=o0(r.body,e,!0,["mopen","mclose"]),a=0,n=0,s=!1,o=0;o{Pr(r);var t=E0(r.body,e);if(r.left!=="."){var a=new I("mo",[z0(r.left,r.mode)]);a.setAttribute("fence","true"),t.unshift(a)}if(r.right!=="."){var n=new I("mo",[z0(r.right,r.mode)]);n.setAttribute("fence","true"),r.rightColor&&n.setAttribute("mathcolor",r.rightColor),t.push(n)}return jt(t)}});L({type:"middle",names:["\\middle"],numArgs:1,primitive:!0,handler:(r,e)=>{var t=Qe(e[0],r);if(!r.parser.leftrightDepth)throw new F("\\middle without preceding \\left",t);return{type:"middle",mode:r.parser.mode,delim:t.text}},htmlBuilder:(r,e)=>{var t;return r.delim==="."?t=ke(e,[]):(t=Ra(r.delim,1,e,r.mode,[]),t.isMiddle={delim:r.delim,options:e}),t},mathmlBuilder:(r,e)=>{var t=r.delim==="\\vert"||r.delim==="|"?z0("|","text"):z0(r.delim,r.mode),a=new I("mo",[t]);return a.setAttribute("fence","true"),a.setAttribute("lspace","0.05em"),a.setAttribute("rspace","0.05em"),a}});var ss=(r,e)=>{var t=pe(V(r.body,e),e),a=r.label.slice(1),n=e.sizeMultiplier,s,o,u=_0(r.body);if(a==="sout")s=C(["stretchy","sout"]),s.height=e.fontMetrics().defaultRuleThickness/n,o=-.5*e.fontMetrics().xHeight;else if(a==="phase"){var h=t0({number:.6,unit:"pt"},e),m=t0({number:.35,unit:"ex"},e),p=e.havingBaseSizing();n=n/p.sizeMultiplier;var g=t.height+t.depth+h+m;t.style.paddingLeft=N(g/2+h);var S=Math.floor(1e3*g*n),x=Jn(S),D=new $0([new J0("phase",x)],{width:"400em",height:N(S/1e3),viewBox:"0 0 400000 "+S,preserveAspectRatio:"xMinYMin slice"});s=Q0(["hide-tail"],[D],e),s.style.height=N(g),o=t.depth+h+m}else{/cancel/.test(a)?u||t.classes.push("cancel-pad"):a==="angl"?t.classes.push("anglpad"):t.classes.push("boxpad");var E,M,R=0;/box/.test(a)?(R=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),E=e.fontMetrics().fboxsep+(a==="colorbox"?0:R),M=E):a==="angl"?(R=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),E=4*R,M=Math.max(0,.25-t.depth)):(E=u?.2:0,M=E),s=Bi(t,a,E,M,e),/fbox|boxed|fcolorbox/.test(a)?(s.style.borderStyle="solid",s.style.borderWidth=N(R)):a==="angl"&&R!==.049&&(s.style.borderTopWidth=N(R),s.style.borderRightWidth=N(R)),o=t.depth+M,r.backgroundColor&&(s.style.backgroundColor=r.backgroundColor,r.borderColor&&(s.style.borderColor=r.borderColor))}var y;if(r.backgroundColor)y=X({positionType:"individualShift",children:[{type:"elem",elem:s,shift:o},{type:"elem",elem:t,shift:0}]});else{var w=/cancel|phase/.test(a)?["svg-align"]:[];y=X({positionType:"individualShift",children:[{type:"elem",elem:t,shift:0},{type:"elem",elem:s,shift:o,wrapperClasses:w}]})}return/cancel/.test(a)&&(y.height=t.height,y.depth=t.depth),/cancel/.test(a)&&!u?C(["mord","cancel-lap"],[y],e):C(["mord"],[y],e)},ls=(r,e)=>{var t,a=new I(r.label.includes("colorbox")?"mpadded":"menclose",[Z(r.body,e)]);switch(r.label){case"\\cancel":a.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":a.setAttribute("notation","downdiagonalstrike");break;case"\\phase":a.setAttribute("notation","phasorangle");break;case"\\sout":a.setAttribute("notation","horizontalstrike");break;case"\\fbox":a.setAttribute("notation","box");break;case"\\angl":a.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(t=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,a.setAttribute("width","+"+2*t+"pt"),a.setAttribute("height","+"+2*t+"pt"),a.setAttribute("lspace",t+"pt"),a.setAttribute("voffset",t+"pt"),r.label==="\\fcolorbox"){var n=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);a.setAttribute("style","border: "+N(n)+" solid "+r.borderColor)}break;case"\\xcancel":a.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return r.backgroundColor&&a.setAttribute("mathbackground",r.backgroundColor),a};L({type:"enclose",names:["\\colorbox"],numArgs:2,allowedInText:!0,argTypes:["color","hbox"],handler(r,e,t){var{parser:a,funcName:n}=r,s=G(e[0],"color-token").color,o=e[1];return{type:"enclose",mode:a.mode,label:n,backgroundColor:s,body:o}},htmlBuilder:ss,mathmlBuilder:ls});L({type:"enclose",names:["\\fcolorbox"],numArgs:3,allowedInText:!0,argTypes:["color","color","hbox"],handler(r,e,t){var{parser:a,funcName:n}=r,s=G(e[0],"color-token").color,o=G(e[1],"color-token").color,u=e[2];return{type:"enclose",mode:a.mode,label:n,backgroundColor:o,borderColor:s,body:u}}});L({type:"enclose",names:["\\fbox"],numArgs:1,argTypes:["hbox"],allowedInText:!0,handler(r,e){var{parser:t}=r;return{type:"enclose",mode:t.mode,label:"\\fbox",body:e[0]}}});L({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\phase"],numArgs:1,handler(r,e){var{parser:t,funcName:a}=r,n=e[0];return{type:"enclose",mode:t.mode,label:a,body:n}}});L({type:"enclose",names:["\\sout"],numArgs:1,allowedInText:!0,handler(r,e){var{parser:t,funcName:a}=r;t.mode==="math"&&t.settings.reportNonstrict("mathVsSout","LaTeX's \\sout works only in text mode");var n=e[0];return{type:"enclose",mode:t.mode,label:a,body:n}}});L({type:"enclose",names:["\\angl"],numArgs:1,argTypes:["hbox"],allowedInText:!1,handler(r,e){var{parser:t}=r;return{type:"enclose",mode:t.mode,label:"\\angl",body:e[0]}}});var Da={};function D0(r){for(var{type:e,names:t,props:a,handler:n,htmlBuilder:s,mathmlBuilder:o}=r,u={type:e,numArgs:a.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n},h=0;h{var e=r.parser.settings;if(!e.displayMode)throw new F("{"+r.envName+"} can be used only in display mode.")},os=new Set(["gather","gather*"]);function Wt(r){if(!r.includes("ed"))return!r.includes("*")}function te(r,e,t){var{hskipBeforeAndAfter:a,addJot:n,cols:s,arraystretch:o,colSeparationType:u,autoTag:h,singleRow:m,emptySingleRow:p,maxNumCols:g,leqno:S}=e;if(r.gullet.beginGroup(),m||r.gullet.macros.set("\\cr","\\\\\\relax"),!o){var x=r.gullet.expandMacroAsText("\\arraystretch");if(x==null)o=1;else if(o=parseFloat(x),!o||o<0)throw new F("Invalid \\arraystretch: "+x)}r.gullet.beginGroup();var D=[],E=[D],M=[],R=[],y=h!=null?[]:void 0;function w(){h&&r.gullet.macros.set("\\@eqnsw","1",!0)}function k(){y&&(r.gullet.macros.get("\\df@tag")?(y.push(r.subparse([new k0("\\df@tag")])),r.gullet.macros.set("\\df@tag",void 0,!0)):y.push(!!h&&r.gullet.macros.get("\\@eqnsw")==="1"))}for(w(),R.push(Hr(r));;){var A=r.parseExpression(!1,m?"\\end":"\\\\");r.gullet.endGroup(),r.gullet.beginGroup();var T={type:"ordgroup",mode:r.mode,body:A};t&&(T={type:"styling",mode:r.mode,style:t,resetFont:!0,body:[T]}),D.push(T);var O=r.fetch().text;if(O==="&"){if(g&&D.length===g){if(m||u)throw new F("Too many tab characters: &",r.nextToken);r.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}r.consume()}else if(O==="\\end"){k(),D.length===1&&T.type==="styling"&&T.body.length===1&&T.body[0].type==="ordgroup"&&T.body[0].body.length===0&&(E.length>1||!p)&&E.pop(),R.length0&&(w+=.25),m.push({pos:w,isDashed:ze[Ce]})}for(k(o[0]),a=0;a0&&(W+=y,Oze))for(a=0;a=u)){var L0=void 0;if(n>0||e.hskipBeforeAndAfter){var ue,re;L0=(ue=(re=w0)==null?void 0:re.pregap)!=null?ue:S,L0!==0&&(y0=C(["arraycolsep"],[]),y0.style.width=N(L0),b0.push(y0))}var Te=[];for(a=0;a0){for(var Qa=me("hline",t,p),en=me("hdashline",t,p),rt=[{type:"elem",elem:Me,shift:0}];m.length>0;){var rr=m.pop(),ar=rr.pos-Y;rr.isDashed?rt.push({type:"elem",elem:en,shift:ar}):rt.push({type:"elem",elem:Qa,shift:ar})}Me=X({positionType:"individualShift",children:rt})}if(O0.length===0)return C(["mord"],[Me],t);var tn=X({positionType:"individualShift",children:O0}),rn=C(["tag"],[tn],t);return U0([Me,rn])},us={c:"center ",l:"left ",r:"right "},B0=function(e,t){for(var a=[],n=new I("mtd",[],["mtr-glue"]),s=new I("mtd",[],["mml-eqn-num"]),o=0;o0){var D=e.cols,E="",M=!1,R=0,y=D.length;D[0].type==="separator"&&(S+="top ",R=1),D[D.length-1].type==="separator"&&(S+="bottom ",y-=1);for(var w=R;w0?"left ":"",S+=B[B.length-1].length>0?"right ":"";for(var j=1;j0&&S&&(E=1),a[x]={type:"align",align:D,pregap:E,postgap:0}}return s.colSeparationType=S?"align":"alignat",s};D0({type:"array",names:["array","darray"],props:{numArgs:1},handler(r,e){var t=Ke(e[0]),a=t?[e[0]]:G(e[0],"ordgroup").body,n=a.map(function(o){var u=Ze(o),h=u.text;if("lcr".includes(h))return{type:"align",align:h};if(h==="|")return{type:"separator",separator:"|"};if(h===":")return{type:"separator",separator:":"};throw new F("Unknown column alignment: "+h,o)}),s={cols:n,hskipBeforeAndAfter:!0,maxNumCols:n.length};return te(r.parser,s,Yt(r.envName))},htmlBuilder:N0,mathmlBuilder:B0});D0({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(r){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[r.envName.replace("*","")],t="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:t}]};if(r.envName.charAt(r.envName.length-1)==="*"){var n=r.parser;if(n.consumeSpaces(),n.fetch().text==="["){if(n.consume(),n.consumeSpaces(),t=n.fetch().text,!"lcr".includes(t))throw new F("Expected l or c or r",n.nextToken);n.consume(),n.consumeSpaces(),n.expect("]"),n.consume(),a.cols=[{type:"align",align:t}]}}var s=te(r.parser,a,Yt(r.envName)),o=Math.max(0,...s.body.map(u=>u.length));return s.cols=new Array(o).fill({type:"align",align:t}),e?{type:"leftright",mode:r.mode,body:[s],left:e[0],right:e[1],rightColor:void 0}:s},htmlBuilder:N0,mathmlBuilder:B0});D0({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(r){var e={arraystretch:.5},t=te(r.parser,e,"script");return t.colSeparationType="small",t},htmlBuilder:N0,mathmlBuilder:B0});D0({type:"array",names:["subarray"],props:{numArgs:1},handler(r,e){var t=Ke(e[0]),a=t?[e[0]]:G(e[0],"ordgroup").body,n=a.map(function(u){var h=Ze(u),m=h.text;if("lc".includes(m))return{type:"align",align:m};throw new F("Unknown column alignment: "+m,u)});if(n.length>1)throw new F("{subarray} can contain only one column");var s={cols:n,hskipBeforeAndAfter:!1,arraystretch:.5},o=te(r.parser,s,"script");if(o.body.length>0&&o.body[0].length>1)throw new F("{subarray} can contain only one column");return o},htmlBuilder:N0,mathmlBuilder:B0});D0({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(r){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},t=te(r.parser,e,Yt(r.envName));return{type:"leftright",mode:r.mode,body:[t],left:r.envName.includes("r")?".":"\\{",right:r.envName.includes("r")?"\\}":".",rightColor:void 0}},htmlBuilder:N0,mathmlBuilder:B0});D0({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:Ba,htmlBuilder:N0,mathmlBuilder:B0});D0({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(r){os.has(r.envName)&&et(r);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Wt(r.envName),emptySingleRow:!0,leqno:r.parser.settings.leqno};return te(r.parser,e,"display")},htmlBuilder:N0,mathmlBuilder:B0});D0({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:Ba,htmlBuilder:N0,mathmlBuilder:B0});D0({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(r){et(r);var e={autoTag:Wt(r.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:r.parser.settings.leqno};return te(r.parser,e,"display")},htmlBuilder:N0,mathmlBuilder:B0});D0({type:"array",names:["CD"],props:{numArgs:0},handler(r){return et(r),Xi(r.parser)},htmlBuilder:N0,mathmlBuilder:B0});d("\\nonumber","\\gdef\\@eqnsw{0}");d("\\notag","\\nonumber");L({type:"text",names:["\\hline","\\hdashline"],numArgs:0,allowedInText:!0,allowedInMath:!0,handler(r,e){throw new F(r.funcName+" valid only within array environment")}});var $r=Da;L({type:"environment",names:["\\begin","\\end"],numArgs:1,argTypes:["text"],handler(r,e){var{parser:t,funcName:a}=r,n=e[0];if(n.type!=="ordgroup")throw new F("Invalid environment name",n);for(var s="",o=0;o{var t=r.font,a=e.withFont(t);return V(r.body,a)},hs=(r,e)=>{var t=r.font,a=e.withFont(t);return Z(r.body,a)},_r={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak"};L({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],numArgs:1,allowedInArgument:!0,handler:(r,e)=>{var{parser:t,funcName:a}=r,n=Ue(e[0]),s=a in _r?_r[a]:a;return{type:"font",mode:t.mode,font:s.slice(1),body:n}},htmlBuilder:cs,mathmlBuilder:hs});L({type:"mclass",names:["\\boldsymbol","\\bm"],numArgs:1,handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"mclass",mode:t.mode,mclass:Je(a),body:[{type:"font",mode:t.mode,font:"boldsymbol",body:a}],isCharacterBox:_0(a)}}});L({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],numArgs:0,allowedInText:!0,handler:(r,e)=>{var{parser:t,funcName:a,breakOnTokenText:n}=r,{mode:s}=t,o=t.parseExpression(!0,n);return{type:"font",mode:s,font:"math"+a.slice(1),body:{type:"ordgroup",mode:t.mode,body:o}}}});var ds=(r,e)=>{var t=e.style,a=t.fracNum(),n=t.fracDen(),s;s=e.havingStyle(a);var o=V(r.numer,s,e);if(r.continued){var u=8.5/e.fontMetrics().ptPerEm,h=3.5/e.fontMetrics().ptPerEm;o.height=o.height0?D=3*S:D=7*S,E=e.fontMetrics().denom1):(g>0?(x=e.fontMetrics().num2,D=S):(x=e.fontMetrics().num3,D=3*S),E=e.fontMetrics().denom2);var M;if(p){var y=e.fontMetrics().axisHeight;x-o.depth-(y+.5*g){var t=new I("mfrac",[Z(r.numer,e),Z(r.denom,e)]);if(!r.hasBarLine)t.setAttribute("linethickness","0px");else if(r.barSize){var a=t0(r.barSize,e);t.setAttribute("linethickness",N(a))}if(r.leftDelim!=null||r.rightDelim!=null){var n=[];if(r.leftDelim!=null){var s=new I("mo",[new i0(r.leftDelim.replace("\\",""))]);s.setAttribute("fence","true"),n.push(s)}if(n.push(t),r.rightDelim!=null){var o=new I("mo",[new i0(r.rightDelim.replace("\\",""))]);o.setAttribute("fence","true"),n.push(o)}return jt(n)}return t},Oa=(r,e)=>{if(!e)return r;var t={type:"styling",mode:r.mode,style:e,body:[r]};return t};L({type:"genfrac",names:["\\cfrac","\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],numArgs:2,allowedInArgument:!0,handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0],s=e[1],o,u=null,h=null;switch(a){case"\\cfrac":case"\\dfrac":case"\\frac":case"\\tfrac":o=!0;break;case"\\\\atopfrac":o=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":o=!1,u="(",h=")";break;case"\\\\bracefrac":o=!1,u="\\{",h="\\}";break;case"\\\\brackfrac":o=!1,u="[",h="]";break;default:throw new Error("Unrecognized genfrac command")}var m=a==="\\cfrac",p=null;return m||a.startsWith("\\d")?p="display":a.startsWith("\\t")&&(p="text"),Oa({type:"genfrac",mode:t.mode,numer:n,denom:s,continued:m,hasBarLine:o,leftDelim:u,rightDelim:h,barSize:null},p)},htmlBuilder:ds,mathmlBuilder:ms});L({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],numArgs:0,infix:!0,handler(r){var{parser:e,funcName:t,token:a}=r,n;switch(t){case"\\over":n="\\frac";break;case"\\choose":n="\\binom";break;case"\\atop":n="\\\\atopfrac";break;case"\\brace":n="\\\\bracefrac";break;case"\\brack":n="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:n,token:a}}});var Gr=["display","text","script","scriptscript"],Ur=function(e){var t=null;return e.length>0&&(t=e,t=t==="."?null:t),t};L({type:"genfrac",names:["\\genfrac"],numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"],handler(r,e){var{parser:t}=r,a=e[4],n=e[5],s=Ue(e[0]),o=s.type==="atom"&&s.family==="open"?Ur(s.text):null,u=Ue(e[1]),h=u.type==="atom"&&u.family==="close"?Ur(u.text):null,m=G(e[2],"size"),p,g=null;m.isBlank?p=!0:(g=m.value,p=g.number>0);var S=null,x=e[3];if(x.type==="ordgroup"){if(x.body.length>0){var D=G(x.body[0],"textord");S=Gr[Number(D.text)]}}else x=G(x,"textord"),S=Gr[Number(x.text)];return Oa({type:"genfrac",mode:t.mode,numer:a,denom:n,continued:!1,hasBarLine:p,barSize:g,leftDelim:o,rightDelim:h},S)}});L({type:"infix",names:["\\above"],numArgs:1,argTypes:["size"],infix:!0,handler(r,e){var{parser:t,funcName:a,token:n}=r;return{type:"infix",mode:t.mode,replaceWith:"\\\\abovefrac",size:G(e[0],"size").value,token:n}}});L({type:"genfrac",names:["\\\\abovefrac"],numArgs:3,argTypes:["math","size","math"],handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0],s=G(e[1],"infix").size;if(!s)throw new Error("\\\\abovefrac expected size, but got "+String(s));var o=e[2],u=s.number>0;return{type:"genfrac",mode:t.mode,numer:n,denom:o,continued:!1,hasBarLine:u,barSize:s,leftDelim:null,rightDelim:null}}});var La=(r,e)=>{var t=e.style,a,n;r.type==="supsub"?(a=r.sup?V(r.sup,e.havingStyle(t.sup()),e):V(r.sub,e.havingStyle(t.sub()),e),n=G(r.base,"horizBrace")):n=G(r,"horizBrace");var s=V(n.base,e.havingBaseStyle(_.DISPLAY)),o=Ye(n,e),u;if(n.isOver?u=X({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o,wrapperClasses:["svg-align"]}]}):u=X({positionType:"bottom",positionData:s.depth+.1+o.height,children:[{type:"elem",elem:o,wrapperClasses:["svg-align"]},{type:"kern",size:.1},{type:"elem",elem:s}]}),a){var h=C(["minner",n.isOver?"mover":"munder"],[u],e);n.isOver?u=X({positionType:"firstBaseline",children:[{type:"elem",elem:h},{type:"kern",size:.2},{type:"elem",elem:a}]}):u=X({positionType:"bottom",positionData:h.depth+.2+a.height+a.depth,children:[{type:"elem",elem:a},{type:"kern",size:.2},{type:"elem",elem:h}]})}return C(["minner",n.isOver?"mover":"munder"],[u],e)},ps=(r,e)=>{var t=We(r.label);return new I(r.isOver?"mover":"munder",[Z(r.base,e),t])};L({type:"horizBrace",names:["\\overbrace","\\underbrace","\\overbracket","\\underbracket"],numArgs:1,handler(r,e){var{parser:t,funcName:a}=r;return{type:"horizBrace",mode:t.mode,label:a,isOver:a.includes("\\over"),base:e[0]}},htmlBuilder:La,mathmlBuilder:ps});L({type:"href",names:["\\href"],numArgs:2,argTypes:["url","original"],allowedInText:!0,handler:(r,e)=>{var{parser:t}=r,a=e[1],n=G(e[0],"url").url;return t.settings.isTrusted({command:"\\href",url:n})?{type:"href",mode:t.mode,href:n,body:n0(a)}:t.formatUnsupportedCmd("\\href")},htmlBuilder:(r,e)=>{var t=o0(r.body,e,!1);return bi(r.href,[],t,e)},mathmlBuilder:(r,e)=>{var t=ee(r.body,e);return t instanceof I||(t=new I("mrow",[t])),t.setAttribute("href",r.href),t}});L({type:"href",names:["\\url"],numArgs:1,argTypes:["url"],allowedInText:!0,handler:(r,e)=>{var{parser:t}=r,a=G(e[0],"url").url;if(!t.settings.isTrusted({command:"\\url",url:a}))return t.formatUnsupportedCmd("\\url");for(var n=[],s=0;s{var{parser:t,funcName:a,token:n}=r,s=G(e[0],"raw").string,o=e[1];t.settings.strict&&t.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var u,h={};switch(a){case"\\htmlClass":h.class=s,u={command:"\\htmlClass",class:s};break;case"\\htmlId":h.id=s,u={command:"\\htmlId",id:s};break;case"\\htmlStyle":h.style=s,u={command:"\\htmlStyle",style:s};break;case"\\htmlData":{for(var m=s.split(","),p=0;p{var t=o0(r.body,e,!1),a=["enclosing"];r.attributes.class&&a.push(...r.attributes.class.trim().split(/\s+/));var n=C(a,t,e);for(var s in r.attributes)s!=="class"&&r.attributes.hasOwnProperty(s)&&n.setAttribute(s,r.attributes[s]);return n},mathmlBuilder:(r,e)=>ee(r.body,e)});L({type:"htmlmathml",names:["\\html@mathml"],numArgs:2,allowedInArgument:!0,allowedInText:!0,handler:(r,e)=>{var{parser:t}=r;return{type:"htmlmathml",mode:t.mode,html:n0(e[0]),mathml:n0(e[1])}},htmlBuilder:(r,e)=>{var t=o0(r.html,e,!1);return U0(t)},mathmlBuilder:(r,e)=>ee(r.mathml,e)});var vt=function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var t=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!t)throw new F("Invalid size: '"+e+"' in \\includegraphics");var a={number:+(t[1]+t[2]),unit:t[3]};if(!sa(a))throw new F("Invalid unit: '"+a.unit+"' in \\includegraphics.");return a};L({type:"includegraphics",names:["\\includegraphics"],numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1,handler:(r,e,t)=>{var{parser:a}=r,n={number:0,unit:"em"},s={number:.9,unit:"em"},o={number:0,unit:"em"},u="";if(t[0])for(var h=G(t[0],"raw").string,m=h.split(","),p=0;p{var t=t0(r.height,e),a=0;r.totalheight.number>0&&(a=t0(r.totalheight,e)-t);var n=0;r.width.number>0&&(n=t0(r.width,e));var s={height:N(t+a)};n>0&&(s.width=N(n)),a>0&&(s.verticalAlign=N(-a));var o=new si(r.src,r.alt,s);return o.height=t,o.depth=a,o},mathmlBuilder:(r,e)=>{var t=new I("mglyph",[]);t.setAttribute("alt",r.alt);var a=t0(r.height,e),n=0;if(r.totalheight.number>0&&(n=t0(r.totalheight,e)-a,t.setAttribute("valign",N(-n))),t.setAttribute("height",N(a+n)),r.width.number>0){var s=t0(r.width,e);t.setAttribute("width",N(s))}return t.setAttribute("src",r.src),t}});L({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0,handler(r,e){var{parser:t,funcName:a}=r,n=G(e[0],"size");if(t.settings.strict){var s=a[1]==="m",o=n.value.unit==="mu";s?(o||t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" supports only mu units, "+("not "+n.value.unit+" units")),t.mode!=="math"&&t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" works only in math mode")):o&&t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" doesn't support mu units")}return{type:"kern",mode:t.mode,dimension:n.value}},htmlBuilder(r,e){return da(r.dimension,e)},mathmlBuilder(r,e){var t=t0(r.dimension,e);return new ba(t)}});L({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],numArgs:1,allowedInText:!0,handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0];return{type:"lap",mode:t.mode,alignment:a.slice(5),body:n}},htmlBuilder:(r,e)=>{var t;r.alignment==="clap"?(t=C([],[V(r.body,e)]),t=C(["inner"],[t],e)):t=C(["inner"],[V(r.body,e)]);var a=C(["fix"],[]),n=C([r.alignment],[t,a],e),s=C(["strut"]);return s.style.height=N(n.height+n.depth),n.depth&&(s.style.verticalAlign=N(-n.depth)),n.children.unshift(s),n=C(["thinbox"],[n],e),C(["mord","vbox"],[n],e)},mathmlBuilder:(r,e)=>{var t=new I("mpadded",[Z(r.body,e)]);if(r.alignment!=="rlap"){var a=r.alignment==="llap"?"-1":"-0.5";t.setAttribute("lspace",a+"width")}return t.setAttribute("width","0px"),t}});L({type:"styling",names:["\\(","$"],numArgs:0,allowedInText:!0,allowedInMath:!1,handler(r,e){var{funcName:t,parser:a}=r,n=a.mode;a.switchMode("math");var s=t==="\\("?"\\)":"$",o=a.parseExpression(!1,s);return a.expect(s),a.switchMode(n),{type:"styling",mode:a.mode,style:"text",resetFont:!0,body:o}}});L({type:"text",names:["\\)","\\]"],numArgs:0,allowedInText:!0,allowedInMath:!1,handler(r,e){throw new F("Mismatched "+r.funcName)}});var jr=(r,e)=>{switch(e.style.size){case _.DISPLAY.size:return r.display;case _.TEXT.size:return r.text;case _.SCRIPT.size:return r.script;case _.SCRIPTSCRIPT.size:return r.scriptscript;default:return r.text}};L({type:"mathchoice",names:["\\mathchoice"],numArgs:4,primitive:!0,handler:(r,e)=>{var{parser:t}=r;return{type:"mathchoice",mode:t.mode,display:n0(e[0]),text:n0(e[1]),script:n0(e[2]),scriptscript:n0(e[3])}},htmlBuilder:(r,e)=>{var t=jr(r,e),a=o0(t,e,!1);return U0(a)},mathmlBuilder:(r,e)=>{var t=jr(r,e);return ee(t,e)}});var qa=(r,e,t,a,n,s,o)=>{r=C([],[r]);var u=t&&_0(t),h,m;if(e){var p=V(e,a.havingStyle(n.sup()),a);m={elem:p,kern:Math.max(a.fontMetrics().bigOpSpacing1,a.fontMetrics().bigOpSpacing3-p.depth)}}if(t){var g=V(t,a.havingStyle(n.sub()),a);h={elem:g,kern:Math.max(a.fontMetrics().bigOpSpacing2,a.fontMetrics().bigOpSpacing4-g.height)}}var S;if(m&&h){var x=a.fontMetrics().bigOpSpacing5+h.elem.height+h.elem.depth+h.kern+r.depth+o;S=X({positionType:"bottom",positionData:x,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:h.elem,marginLeft:N(-s)},{type:"kern",size:h.kern},{type:"elem",elem:r},{type:"kern",size:m.kern},{type:"elem",elem:m.elem,marginLeft:N(s)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]})}else if(h){var D=r.height-o;S=X({positionType:"top",positionData:D,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:h.elem,marginLeft:N(-s)},{type:"kern",size:h.kern},{type:"elem",elem:r}]})}else if(m){var E=r.depth+o;S=X({positionType:"bottom",positionData:E,children:[{type:"elem",elem:r},{type:"kern",size:m.kern},{type:"elem",elem:m.elem,marginLeft:N(s)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]})}else return r;var M=[S];if(h&&s!==0&&!u){var R=C(["mspace"],[],a);R.style.marginRight=N(s),M.unshift(R)}return C(["mop","op-limits"],M,a)},Pa=new Set(["\\smallint"]),Ha=(r,e)=>{var t,a,n=!1,s;r.type==="supsub"?(t=r.sup,a=r.sub,s=G(r.base,"op"),n=!0):s=G(r,"op");var o=e.style,u=!1;o.size===_.DISPLAY.size&&s.symbol&&!Pa.has(s.name)&&(u=!0);var h,m;if(s.symbol){var p=u?"Size2-Regular":"Size1-Regular",g="";if((s.name==="\\oiint"||s.name==="\\oiiint")&&(g=s.name.slice(1),s.name=g==="oiint"?"\\iint":"\\iiint"),h=m0(s.name,p,"math",e,["mop","op-symbol",u?"large-op":"small-op"]),m=h.italic,g.length>0){var S=pa(g+"Size"+(u?"2":"1"),e);h=X({positionType:"individualShift",children:[{type:"elem",elem:h,shift:0},{type:"elem",elem:S,shift:u?.08:0}]}),s.name="\\"+g,h.classes.unshift("mop"),h.italic=m}}else if(s.body){var x=o0(s.body,e,!0);x.length===1&&x[0]instanceof A0?(h=x[0],h.classes[0]="mop"):h=C(["mop"],x,e)}else{for(var D=[],E=1;E{var t;if(r.symbol)t=new I("mo",[z0(r.name,r.mode)]),Pa.has(r.name)&&t.setAttribute("largeop","false");else if(r.body)t=new I("mo",E0(r.body,e));else{t=new I("mi",[new i0(r.name.slice(1))]);var a=new I("mo",[z0("⁡","text")]);r.parentIsSupSub?t=new I("mrow",[t,a]):t=ga([t,a])}return t},vs={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨆":"\\bigsqcup"};L({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨄","⨆"],numArgs:0,handler:(r,e)=>{var{parser:t,funcName:a}=r,n=a;return n.length===1&&(n=vs[n]),{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:Ha,mathmlBuilder:fs});L({type:"op",names:["\\mathop"],numArgs:1,primitive:!0,handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:n0(a)}}});var gs={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint"};L({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],numArgs:0,handler(r){var{parser:e,funcName:t}=r;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:t}}});L({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],numArgs:0,handler(r){var{parser:e,funcName:t}=r;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:t}}});L({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","∫","∬","∭","∮","∯","∰"],numArgs:0,allowedInArgument:!0,handler(r){var{parser:e,funcName:t}=r,a=t;return a.length===1&&(a=gs[a]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:a}}});var $a=(r,e)=>{var t,a,n=!1,s;r.type==="supsub"?(t=r.sup,a=r.sub,s=G(r.base,"operatorname"),n=!0):s=G(r,"operatorname");var o;if(s.body.length>0){for(var u=s.body.map(g=>{var S="text"in g?g.text:void 0;return typeof S=="string"?{type:"textord",mode:g.mode,text:S}:g}),h=o0(u,e.withFont("mathrm"),!0),m=0;m{for(var t=E0(r.body,e.withFont("mathrm")),a=!0,n=0;np.toText()).join("");t=[new i0(u)]}var h=new I("mi",t);h.setAttribute("mathvariant","normal");var m=new I("mo",[z0("⁡","text")]);return r.parentIsSupSub?new I("mrow",[h,m]):ga([h,m])};L({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],numArgs:1,handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0];return{type:"operatorname",mode:t.mode,body:n0(n),alwaysHandleSupSub:a==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},htmlBuilder:$a,mathmlBuilder:bs});d("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");se({type:"ordgroup",htmlBuilder(r,e){return r.semisimple?U0(o0(r.body,e,!1)):C(["mord"],o0(r.body,e,!0),e)},mathmlBuilder(r,e){return ee(r.body,e,!0)}});L({type:"overline",names:["\\overline"],numArgs:1,handler(r,e){var{parser:t}=r,a=e[0];return{type:"overline",mode:t.mode,body:a}},htmlBuilder(r,e){var t=V(r.body,e.havingCrampedStyle()),a=me("overline-line",e),n=e.fontMetrics().defaultRuleThickness,s=X({positionType:"firstBaseline",children:[{type:"elem",elem:t},{type:"kern",size:3*n},{type:"elem",elem:a},{type:"kern",size:n}]});return C(["mord","overline"],[s],e)},mathmlBuilder(r,e){var t=new I("mo",[new i0("‾")]);t.setAttribute("stretchy","true");var a=new I("mover",[Z(r.body,e),t]);return a.setAttribute("accent","true"),a}});L({type:"phantom",names:["\\phantom"],numArgs:1,allowedInText:!0,handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"phantom",mode:t.mode,body:n0(a)}},htmlBuilder:(r,e)=>{var t=o0(r.body,e.withPhantom(),!1);return U0(t)},mathmlBuilder:(r,e)=>{var t=E0(r.body,e);return new I("mphantom",t)}});d("\\hphantom","\\smash{\\phantom{#1}}");L({type:"vphantom",names:["\\vphantom"],numArgs:1,allowedInText:!0,handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"vphantom",mode:t.mode,body:a}},htmlBuilder:(r,e)=>{var t=C(["inner"],[V(r.body,e.withPhantom())]),a=C(["fix"],[]);return C(["mord","rlap"],[t,a],e)},mathmlBuilder:(r,e)=>{var t=E0(n0(r.body),e),a=new I("mphantom",t),n=new I("mpadded",[a]);return n.setAttribute("width","0px"),n}});L({type:"raisebox",names:["\\raisebox"],numArgs:2,argTypes:["size","hbox"],allowedInText:!0,handler(r,e){var{parser:t}=r,a=G(e[0],"size").value,n=e[1];return{type:"raisebox",mode:t.mode,dy:a,body:n}},htmlBuilder(r,e){var t=V(r.body,e),a=t0(r.dy,e);return X({positionType:"shift",positionData:-a,children:[{type:"elem",elem:t}]})},mathmlBuilder(r,e){var t=new I("mpadded",[Z(r.body,e)]),a=r.dy.number+r.dy.unit;return t.setAttribute("voffset",a),t}});L({type:"internal",names:["\\relax"],numArgs:0,allowedInText:!0,allowedInArgument:!0,handler(r){var{parser:e}=r;return{type:"internal",mode:e.mode}}});L({type:"rule",names:["\\rule"],numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"],handler(r,e,t){var{parser:a}=r,n=t[0],s=G(e[0],"size"),o=G(e[1],"size");return{type:"rule",mode:a.mode,shift:n&&G(n,"size").value,width:s.value,height:o.value}},htmlBuilder(r,e){var t=C(["mord","rule"],[],e),a=t0(r.width,e),n=t0(r.height,e),s=r.shift?t0(r.shift,e):0;return t.style.borderRightWidth=N(a),t.style.borderTopWidth=N(n),t.style.bottom=N(s),t.width=a,t.height=n+s,t.depth=-s,t.maxFontSize=n*1.125*e.sizeMultiplier,t},mathmlBuilder(r,e){var t=t0(r.width,e),a=t0(r.height,e),n=r.shift?t0(r.shift,e):0,s=e.color&&e.getColor()||"black",o=new I("mspace");o.setAttribute("mathbackground",s),o.setAttribute("width",N(t)),o.setAttribute("height",N(a));var u=new I("mpadded",[o]);return n>=0?u.setAttribute("height",N(n)):(u.setAttribute("height",N(n)),u.setAttribute("depth",N(-n))),u.setAttribute("voffset",N(n)),u}});function _a(r,e,t){for(var a=o0(r,e,!1),n=e.sizeMultiplier/t.sizeMultiplier,s=0;s{var t=e.havingSize(r.size);return _a(r.body,t,e)};L({type:"sizing",names:Xr,numArgs:0,allowedInText:!0,handler:(r,e)=>{var{breakOnTokenText:t,funcName:a,parser:n}=r,s=n.parseExpression(!1,t);return{type:"sizing",mode:n.mode,size:Xr.indexOf(a)+1,body:s}},htmlBuilder:ys,mathmlBuilder:(r,e)=>{var t=e.havingSize(r.size),a=E0(r.body,t),n=new I("mstyle",a);return n.setAttribute("mathsize",N(t.sizeMultiplier)),n}});L({type:"smash",names:["\\smash"],numArgs:1,numOptionalArgs:1,allowedInText:!0,handler:(r,e,t)=>{var{parser:a}=r,n=!1,s=!1,o=t[0]&&G(t[0],"ordgroup");if(o)for(var u,h=0;h{var t=C([],[V(r.body,e)]);if(!r.smashHeight&&!r.smashDepth)return t;if(r.smashHeight&&(t.height=0),r.smashDepth&&(t.depth=0),r.smashHeight&&r.smashDepth)return C(["mord","smash"],[t],e);if(t.children)for(var a=0;a{var t=new I("mpadded",[Z(r.body,e)]);return r.smashHeight&&t.setAttribute("height","0px"),r.smashDepth&&t.setAttribute("depth","0px"),t}});L({type:"sqrt",names:["\\sqrt"],numArgs:1,numOptionalArgs:1,handler(r,e,t){var{parser:a}=r,n=t[0],s=e[0];return{type:"sqrt",mode:a.mode,body:s,index:n}},htmlBuilder(r,e){var t=V(r.body,e.havingCrampedStyle());t.height===0&&(t.height=e.fontMetrics().xHeight),t=pe(t,e);var a=e.fontMetrics(),n=a.defaultRuleThickness,s=n;e.style.id<_.TEXT.id&&(s=e.fontMetrics().xHeight);var o=n+s/4,u=t.height+t.depth+o+n,{span:h,ruleWidth:m,advanceWidth:p}=es(u,e),g=h.height-m;g>t.height+t.depth+o&&(o=(o+g-t.height-t.depth)/2);var S=h.height-t.height-o-m;t.style.paddingLeft=N(p);var x=X({positionType:"firstBaseline",children:[{type:"elem",elem:t,wrapperClasses:["svg-align"]},{type:"kern",size:-(t.height+S)},{type:"elem",elem:h},{type:"kern",size:m}]});if(r.index){var D=e.havingStyle(_.SCRIPTSCRIPT),E=V(r.index,D,e),M=.6*(x.height-x.depth),R=X({positionType:"shift",positionData:-M,children:[{type:"elem",elem:E}]}),y=C(["root"],[R]);return C(["mord","sqrt"],[y,x],e)}else return C(["mord","sqrt"],[x],e)},mathmlBuilder(r,e){var{body:t,index:a}=r;return a?new I("mroot",[Z(t,e),Z(a,e)]):new I("msqrt",[Z(t,e)])}});var Lt={display:_.DISPLAY,text:_.TEXT,script:_.SCRIPT,scriptscript:_.SCRIPTSCRIPT};function xs(r){return r in Lt}L({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],numArgs:0,allowedInText:!0,primitive:!0,handler(r,e){var{breakOnTokenText:t,funcName:a,parser:n}=r,s=n.parseExpression(!0,t),o=a.slice(1,a.length-5);if(!xs(o))throw new Error("Unknown style: "+o);return{type:"styling",mode:n.mode,style:o,body:s}},htmlBuilder(r,e){var t=Lt[r.style],a=e.havingStyle(t);return r.resetFont&&(a=a.withFont("")),_a(r.body,a,e)},mathmlBuilder(r,e){var t=Lt[r.style],a=e.havingStyle(t);r.resetFont&&(a=a.withFont(""));var n=E0(r.body,a),s=new I("mstyle",n),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},u=o[r.style];return s.setAttribute("scriptlevel",u[0]),s.setAttribute("displaystyle",u[1]),s}});var ws=function(e,t){var a=e.base;if(a)if(a.type==="op"){var n=a.limits&&(t.style.size===_.DISPLAY.size||a.alwaysHandleSupSub);return n?Ha:null}else if(a.type==="operatorname"){var s=a.alwaysHandleSupSub&&(t.style.size===_.DISPLAY.size||a.limits);return s?$a:null}else{if(a.type==="accent")return _0(a.base)?Sa:null;if(a.type==="horizBrace"){var o=!e.sub;return o===a.isOver?La:null}else return null}else return null};se({type:"supsub",htmlBuilder(r,e){var t=ws(r,e);if(t)return t(r,e);var{base:a,sup:n,sub:s}=r,o=V(a,e),u,h,m=e.fontMetrics(),p=0,g=0,S=a&&_0(a);if(n){var x=e.havingStyle(e.style.sup());u=V(n,x,e),S||(p=o.height-x.fontMetrics().supDrop*x.sizeMultiplier/e.sizeMultiplier)}if(s){var D=e.havingStyle(e.style.sub());h=V(s,D,e),S||(g=o.depth+D.fontMetrics().subDrop*D.sizeMultiplier/e.sizeMultiplier)}var E;e.style===_.DISPLAY?E=m.sup1:e.style.cramped?E=m.sup3:E=m.sup2;var M=e.sizeMultiplier,R=N(.5/m.ptPerEm/M),y=null;if(h){var w=r.base&&r.base.type==="op"&&r.base.name&&(r.base.name==="\\oiint"||r.base.name==="\\oiiint");if(o instanceof A0||w){var k;y=N(-((k=o.italic)!=null?k:0))}}var A;if(u&&h){p=Math.max(p,E,u.depth+.25*m.xHeight),g=Math.max(g,m.sub2);var T=m.defaultRuleThickness,O=4*T;if(p-u.depth-(h.height-g)0&&(p+=P,g-=P)}var B=[{type:"elem",elem:h,shift:g,marginRight:R,marginLeft:y},{type:"elem",elem:u,shift:-p,marginRight:R}];A=X({positionType:"individualShift",children:B})}else if(h){g=Math.max(g,m.sub1,h.height-.8*m.xHeight);var j=[{type:"elem",elem:h,marginLeft:y,marginRight:R}];A=X({positionType:"shift",positionData:g,children:j})}else if(u)p=Math.max(p,E,u.depth+.25*m.xHeight),A=X({positionType:"shift",positionData:-p,children:[{type:"elem",elem:u,marginRight:R}]});else throw new Error("supsub must have either sup or sub.");var W=It(o,"right")||"mord";return C([W],[o,C(["msupsub"],[A])],e)},mathmlBuilder(r,e){var t=!1,a,n;r.base&&r.base.type==="horizBrace"&&(n=!!r.sup,n===r.base.isOver&&(t=!0,a=r.base.isOver)),r.base&&(r.base.type==="op"||r.base.type==="operatorname")&&(r.base.parentIsSupSub=!0);var s=[Z(r.base,e)];r.sub&&s.push(Z(r.sub,e)),r.sup&&s.push(Z(r.sup,e));var o;if(t)o=a?"mover":"munder";else if(r.sub)if(r.sup){var m=r.base;m&&m.type==="op"&&m.limits&&e.style===_.DISPLAY||m&&m.type==="operatorname"&&m.alwaysHandleSupSub&&(e.style===_.DISPLAY||m.limits)?o="munderover":o="msubsup"}else{var h=r.base;h&&h.type==="op"&&h.limits&&(e.style===_.DISPLAY||h.alwaysHandleSupSub)||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(h.limits||e.style===_.DISPLAY)?o="munder":o="msub"}else{var u=r.base;u&&u.type==="op"&&u.limits&&(e.style===_.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||e.style===_.DISPLAY)?o="mover":o="msup"}return new I(o,s)}});se({type:"atom",htmlBuilder(r,e){return Gt(r.text,r.mode,e,["m"+r.family])},mathmlBuilder(r,e){var t=new I("mo",[z0(r.text,r.mode)]);if(r.family==="bin"){var a=Xt(r,e);a==="bold-italic"&&t.setAttribute("mathvariant",a)}else r.family==="punct"?t.setAttribute("separator","true"):(r.family==="open"||r.family==="close")&&t.setAttribute("stretchy","false");return t}});var Ga={mi:"italic",mn:"normal",mtext:"normal"};se({type:"mathord",htmlBuilder(r,e){return Ve(r,e)},mathmlBuilder(r,e){var t=new I("mi",[z0(r.text,r.mode,e)]),a=Xt(r,e)||"italic";return a!==Ga[t.type]&&t.setAttribute("mathvariant",a),t}});se({type:"textord",htmlBuilder(r,e){return Ve(r,e)},mathmlBuilder(r,e){var t=z0(r.text,r.mode,e),a=Xt(r,e)||"normal",n;return r.mode==="text"?n=new I("mtext",[t]):/[0-9]/.test(r.text)?n=new I("mn",[t]):r.text==="\\prime"?n=new I("mo",[t]):n=new I("mi",[t]),a!==Ga[n.type]&&n.setAttribute("mathvariant",a),n}});var gt={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},bt={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};se({type:"spacing",htmlBuilder(r,e){if(bt.hasOwnProperty(r.text)){var t=bt[r.text].className||"";if(r.mode==="text"){var a=Ve(r,e);return a.classes.push(t),a}else return C(["mspace",t],[Gt(r.text,r.mode,e)],e)}else{if(gt.hasOwnProperty(r.text))return C(["mspace",gt[r.text]],[],e);throw new F('Unknown type of space "'+r.text+'"')}},mathmlBuilder(r,e){var t;if(bt.hasOwnProperty(r.text))t=new I("mtext",[new i0(" ")]);else{if(gt.hasOwnProperty(r.text))return new I("mspace");throw new F('Unknown type of space "'+r.text+'"')}return t}});var Vr=()=>{var r=new I("mtd",[]);return r.setAttribute("width","50%"),r};se({type:"tag",mathmlBuilder(r,e){var t=new I("mtable",[new I("mtr",[Vr(),new I("mtd",[ee(r.body,e)]),Vr(),new I("mtd",[ee(r.tag,e)])])]);return t.setAttribute("width","100%"),t}});var Wr={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},Yr={"\\textbf":"textbf","\\textmd":"textmd"},Ss={"\\textit":"textit","\\textup":"textup"},Zr=(r,e)=>{var t=r.font;if(t){if(Wr[t])return e.withTextFontFamily(Wr[t]);if(Yr[t])return e.withTextFontWeight(Yr[t]);if(t==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(Ss[t])};L({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0,handler(r,e){var{parser:t,funcName:a}=r,n=e[0];return{type:"text",mode:t.mode,body:n0(n),font:a}},htmlBuilder(r,e){var t=Zr(r,e),a=o0(r.body,t,!0);return C(["mord","text"],a,t)},mathmlBuilder(r,e){var t=Zr(r,e);return ee(r.body,t)}});L({type:"underline",names:["\\underline"],numArgs:1,allowedInText:!0,handler(r,e){var{parser:t}=r;return{type:"underline",mode:t.mode,body:e[0]}},htmlBuilder(r,e){var t=V(r.body,e),a=me("underline-line",e),n=e.fontMetrics().defaultRuleThickness,s=X({positionType:"top",positionData:t.height,children:[{type:"kern",size:n},{type:"elem",elem:a},{type:"kern",size:3*n},{type:"elem",elem:t}]});return C(["mord","underline"],[s],e)},mathmlBuilder(r,e){var t=new I("mo",[new i0("‾")]);t.setAttribute("stretchy","true");var a=new I("munder",[Z(r.body,e),t]);return a.setAttribute("accentunder","true"),a}});L({type:"vcenter",names:["\\vcenter"],numArgs:1,argTypes:["original"],allowedInText:!1,handler(r,e){var{parser:t}=r;return{type:"vcenter",mode:t.mode,body:e[0]}},htmlBuilder(r,e){var t=V(r.body,e),a=e.fontMetrics().axisHeight,n=.5*(t.height-a-(t.depth+a));return X({positionType:"shift",positionData:n,children:[{type:"elem",elem:t}]})},mathmlBuilder(r,e){var t=new I("mpadded",[Z(r.body,e)],["vcenter"]);return new I("mrow",[t])}});L({type:"verb",names:["\\verb"],numArgs:0,allowedInText:!0,handler(r,e,t){throw new F("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(r,e){for(var t=Kr(r),a=[],n=e.havingStyle(e.style.text()),s=0;sr.body.replace(/ /g,r.star?"␣":" "),Z0=fa,Ua=`[ \r + ]`,ks="\\\\[a-zA-Z@]+",As="\\\\[^\uD800-\uDFFF]",Ts="("+ks+")"+Ua+"*",Es=`\\\\( +|[ \r ]+ +?)[ \r ]*`,qt="[̀-ͯ]",Ms=new RegExp(qt+"+$"),zs="("+Ua+"+)|"+(Es+"|")+"([!-\\[\\]-‧‪-퟿豈-￿]"+(qt+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(qt+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+Ts)+("|"+As+")");class Jr{constructor(e,t){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=t,this.tokenRegex=new RegExp(zs,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){var e=this.input,t=this.tokenRegex.lastIndex;if(t===e.length)return new k0("EOF",new g0(this,t,t));var a=this.tokenRegex.exec(e);if(a===null||a.index!==t)throw new F("Unexpected character: '"+e[t]+"'",new k0(e[t],new g0(this,t,t+1)));var n=a[6]||a[3]||(a[2]?"\\ ":" ");if(this.catcodes[n]===14){var s=e.indexOf(` +`,this.tokenRegex.lastIndex);return s===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=s+1,this.lex()}return new k0(n,new g0(this,t,this.tokenRegex.lastIndex))}}class Cs{constructor(e,t){e===void 0&&(e={}),t===void 0&&(t={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new F("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var t in e)e.hasOwnProperty(t)&&(e[t]==null?delete this.current[t]:this.current[t]=e[t])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,t,a){if(a===void 0&&(a=!1),a){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var s=this.undefStack[this.undefStack.length-1];s&&!s.hasOwnProperty(e)&&(s[e]=this.current[e])}t==null?delete this.current[e]:this.current[e]=t}}var Rs=Na;d("\\noexpand",function(r){var e=r.popToken();return r.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});d("\\expandafter",function(r){var e=r.popToken();return r.expandOnce(!0),{tokens:[e],numArgs:0}});d("\\@firstoftwo",function(r){var e=r.consumeArgs(2);return{tokens:e[0],numArgs:0}});d("\\@secondoftwo",function(r){var e=r.consumeArgs(2);return{tokens:e[1],numArgs:0}});d("\\@ifnextchar",function(r){var e=r.consumeArgs(3);r.consumeSpaces();var t=r.future();return e[0].length===1&&e[0][0].text===t.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});d("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");d("\\TextOrMath",function(r){var e=r.consumeArgs(2);return r.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});var Qr={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};d("\\char",function(r){var e=r.popToken(),t,a=0;if(e.text==="'")t=8,e=r.popToken();else if(e.text==='"')t=16,e=r.popToken();else if(e.text==="`")if(e=r.popToken(),e.text[0]==="\\")a=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new F("\\char` missing argument");a=e.text.charCodeAt(0)}else t=10;if(t){if(a=Qr[e.text],a==null||a>=t)throw new F("Invalid base-"+t+" digit "+e.text);for(var n;(n=Qr[r.future().text])!=null&&n{var n=r.consumeArg().tokens;if(n.length!==1)throw new F("\\newcommand's first argument must be a macro name");var s=n[0].text,o=r.isDefined(s);if(o&&!e)throw new F("\\newcommand{"+s+"} attempting to redefine "+(s+"; use \\renewcommand"));if(!o&&!t)throw new F("\\renewcommand{"+s+"} when command "+s+" does not yet exist; use \\newcommand");var u=0;if(n=r.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var h="",m=r.expandNextToken();m.text!=="]"&&m.text!=="EOF";)h+=m.text,m=r.expandNextToken();if(!h.match(/^\s*[0-9]+\s*$/))throw new F("Invalid number of arguments: "+h);u=parseInt(h),n=r.consumeArg().tokens}return o&&a||r.macros.set(s,{tokens:n,numArgs:u}),""};d("\\newcommand",r=>Zt(r,!1,!0,!1));d("\\renewcommand",r=>Zt(r,!0,!1,!1));d("\\providecommand",r=>Zt(r,!0,!0,!0));d("\\message",r=>{var e=r.consumeArgs(1)[0];return console.log(e.reverse().map(t=>t.text).join("")),""});d("\\errmessage",r=>{var e=r.consumeArgs(1)[0];return console.error(e.reverse().map(t=>t.text).join("")),""});d("\\show",r=>{var e=r.popToken(),t=e.text;return console.log(e,r.macros.get(t),Z0[t],K.math[t],K.text[t]),""});d("\\bgroup","{");d("\\egroup","}");d("~","\\nobreakspace");d("\\lq","`");d("\\rq","'");d("\\aa","\\r a");d("\\AA","\\r A");d("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`©}");d("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");d("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}");d("ℬ","\\mathscr{B}");d("ℰ","\\mathscr{E}");d("ℱ","\\mathscr{F}");d("ℋ","\\mathscr{H}");d("ℐ","\\mathscr{I}");d("ℒ","\\mathscr{L}");d("ℳ","\\mathscr{M}");d("ℛ","\\mathscr{R}");d("ℭ","\\mathfrak{C}");d("ℌ","\\mathfrak{H}");d("ℨ","\\mathfrak{Z}");d("\\Bbbk","\\Bbb{k}");d("\\llap","\\mathllap{\\textrm{#1}}");d("\\rlap","\\mathrlap{\\textrm{#1}}");d("\\clap","\\mathclap{\\textrm{#1}}");d("\\mathstrut","\\vphantom{(}");d("\\underbar","\\underline{\\text{#1}}");d("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}\\nobreak}{\\char"338}');d("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}");d("\\ne","\\neq");d("≠","\\neq");d("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}");d("∉","\\notin");d("≘","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}");d("≙","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}");d("≚","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}");d("≛","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}");d("≝","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}");d("≞","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}");d("≟","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}");d("⟂","\\perp");d("‼","\\mathclose{!\\mkern-0.8mu!}");d("∌","\\notni");d("⌜","\\ulcorner");d("⌝","\\urcorner");d("⌞","\\llcorner");d("⌟","\\lrcorner");d("©","\\copyright");d("®","\\textregistered");d("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');d("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');d("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');d("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');d("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");d("⋮","\\vdots");d("\\varGamma","\\mathit{\\Gamma}");d("\\varDelta","\\mathit{\\Delta}");d("\\varTheta","\\mathit{\\Theta}");d("\\varLambda","\\mathit{\\Lambda}");d("\\varXi","\\mathit{\\Xi}");d("\\varPi","\\mathit{\\Pi}");d("\\varSigma","\\mathit{\\Sigma}");d("\\varUpsilon","\\mathit{\\Upsilon}");d("\\varPhi","\\mathit{\\Phi}");d("\\varPsi","\\mathit{\\Psi}");d("\\varOmega","\\mathit{\\Omega}");d("\\substack","\\begin{subarray}{c}#1\\end{subarray}");d("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");d("\\boxed","\\fbox{$\\displaystyle{#1}$}");d("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");d("\\implies","\\DOTSB\\;\\Longrightarrow\\;");d("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");d("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");d("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");var ea={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"},Fs=new Set(["bin","rel"]);d("\\dots",function(r){var e="\\dotso",t=r.expandAfterFuture().text;return t in ea?e=ea[t]:(t.slice(0,4)==="\\not"||t in K.math&&Fs.has(K.math[t].group))&&(e="\\dotsb"),e});var Kt={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};d("\\dotso",function(r){var e=r.future().text;return e in Kt?"\\ldots\\,":"\\ldots"});d("\\dotsc",function(r){var e=r.future().text;return e in Kt&&e!==","?"\\ldots\\,":"\\ldots"});d("\\cdots",function(r){var e=r.future().text;return e in Kt?"\\@cdots\\,":"\\@cdots"});d("\\dotsb","\\cdots");d("\\dotsm","\\cdots");d("\\dotsi","\\!\\cdots");d("\\dotsx","\\ldots\\,");d("\\DOTSI","\\relax");d("\\DOTSB","\\relax");d("\\DOTSX","\\relax");d("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");d("\\,","\\tmspace+{3mu}{.1667em}");d("\\thinspace","\\,");d("\\>","\\mskip{4mu}");d("\\:","\\tmspace+{4mu}{.2222em}");d("\\medspace","\\:");d("\\;","\\tmspace+{5mu}{.2777em}");d("\\thickspace","\\;");d("\\!","\\tmspace-{3mu}{.1667em}");d("\\negthinspace","\\!");d("\\negmedspace","\\tmspace-{4mu}{.2222em}");d("\\negthickspace","\\tmspace-{5mu}{.277em}");d("\\enspace","\\kern.5em ");d("\\enskip","\\hskip.5em\\relax");d("\\quad","\\hskip1em\\relax");d("\\qquad","\\hskip2em\\relax");d("\\tag","\\@ifstar\\tag@literal\\tag@paren");d("\\tag@paren","\\tag@literal{({#1})}");d("\\tag@literal",r=>{if(r.macros.get("\\df@tag"))throw new F("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});d("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");d("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");d("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");d("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");d("\\newline","\\\\\\relax");d("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var ja=N(I0["Main-Regular"][84][1]-.7*I0["Main-Regular"][65][1]);d("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+ja+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");d("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+ja+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");d("\\hspace","\\@ifstar\\@hspacer\\@hspace");d("\\@hspace","\\hskip #1\\relax");d("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");d("\\ordinarycolon",":");d("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");d("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');d("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');d("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');d("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');d("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');d("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');d("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');d("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');d("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');d("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');d("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');d("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');d("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');d("∷","\\dblcolon");d("∹","\\eqcolon");d("≔","\\coloneqq");d("≕","\\eqqcolon");d("⩴","\\Coloneqq");d("\\ratio","\\vcentcolon");d("\\coloncolon","\\dblcolon");d("\\colonequals","\\coloneqq");d("\\coloncolonequals","\\Coloneqq");d("\\equalscolon","\\eqqcolon");d("\\equalscoloncolon","\\Eqqcolon");d("\\colonminus","\\coloneq");d("\\coloncolonminus","\\Coloneq");d("\\minuscolon","\\eqcolon");d("\\minuscoloncolon","\\Eqcolon");d("\\coloncolonapprox","\\Colonapprox");d("\\coloncolonsim","\\Colonsim");d("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");d("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");d("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");d("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");d("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}");d("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");d("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");d("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");d("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");d("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");d("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");d("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");d("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");d("\\gvertneqq","\\html@mathml{\\@gvertneqq}{≩}");d("\\lvertneqq","\\html@mathml{\\@lvertneqq}{≨}");d("\\ngeqq","\\html@mathml{\\@ngeqq}{≱}");d("\\ngeqslant","\\html@mathml{\\@ngeqslant}{≱}");d("\\nleqq","\\html@mathml{\\@nleqq}{≰}");d("\\nleqslant","\\html@mathml{\\@nleqslant}{≰}");d("\\nshortmid","\\html@mathml{\\@nshortmid}{∤}");d("\\nshortparallel","\\html@mathml{\\@nshortparallel}{∦}");d("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{⊈}");d("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{⊉}");d("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{⊊}");d("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{⫋}");d("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{⊋}");d("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{⫌}");d("\\imath","\\html@mathml{\\@imath}{ı}");d("\\jmath","\\html@mathml{\\@jmath}{ȷ}");d("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}");d("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}");d("⟦","\\llbracket");d("⟧","\\rrbracket");d("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}");d("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}");d("⦃","\\lBrace");d("⦄","\\rBrace");d("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}");d("⦵","\\minuso");d("\\darr","\\downarrow");d("\\dArr","\\Downarrow");d("\\Darr","\\Downarrow");d("\\lang","\\langle");d("\\rang","\\rangle");d("\\uarr","\\uparrow");d("\\uArr","\\Uparrow");d("\\Uarr","\\Uparrow");d("\\N","\\mathbb{N}");d("\\R","\\mathbb{R}");d("\\Z","\\mathbb{Z}");d("\\alef","\\aleph");d("\\alefsym","\\aleph");d("\\Alpha","\\mathrm{A}");d("\\Beta","\\mathrm{B}");d("\\bull","\\bullet");d("\\Chi","\\mathrm{X}");d("\\clubs","\\clubsuit");d("\\cnums","\\mathbb{C}");d("\\Complex","\\mathbb{C}");d("\\Dagger","\\ddagger");d("\\diamonds","\\diamondsuit");d("\\empty","\\emptyset");d("\\Epsilon","\\mathrm{E}");d("\\Eta","\\mathrm{H}");d("\\exist","\\exists");d("\\harr","\\leftrightarrow");d("\\hArr","\\Leftrightarrow");d("\\Harr","\\Leftrightarrow");d("\\hearts","\\heartsuit");d("\\image","\\Im");d("\\infin","\\infty");d("\\Iota","\\mathrm{I}");d("\\isin","\\in");d("\\Kappa","\\mathrm{K}");d("\\larr","\\leftarrow");d("\\lArr","\\Leftarrow");d("\\Larr","\\Leftarrow");d("\\lrarr","\\leftrightarrow");d("\\lrArr","\\Leftrightarrow");d("\\Lrarr","\\Leftrightarrow");d("\\Mu","\\mathrm{M}");d("\\natnums","\\mathbb{N}");d("\\Nu","\\mathrm{N}");d("\\Omicron","\\mathrm{O}");d("\\plusmn","\\pm");d("\\rarr","\\rightarrow");d("\\rArr","\\Rightarrow");d("\\Rarr","\\Rightarrow");d("\\real","\\Re");d("\\reals","\\mathbb{R}");d("\\Reals","\\mathbb{R}");d("\\Rho","\\mathrm{P}");d("\\sdot","\\cdot");d("\\sect","\\S");d("\\spades","\\spadesuit");d("\\sub","\\subset");d("\\sube","\\subseteq");d("\\supe","\\supseteq");d("\\Tau","\\mathrm{T}");d("\\thetasym","\\vartheta");d("\\weierp","\\wp");d("\\Zeta","\\mathrm{Z}");d("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");d("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");d("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");d("\\bra","\\mathinner{\\langle{#1}|}");d("\\ket","\\mathinner{|{#1}\\rangle}");d("\\braket","\\mathinner{\\langle{#1}\\rangle}");d("\\Bra","\\left\\langle#1\\right|");d("\\Ket","\\left|#1\\right\\rangle");var Xa=r=>e=>{var t=e.consumeArg().tokens,a=e.consumeArg().tokens,n=e.consumeArg().tokens,s=e.consumeArg().tokens,o=e.macros.get("|"),u=e.macros.get("\\|");e.macros.beginGroup();var h=g=>S=>{r&&(S.macros.set("|",o),n.length&&S.macros.set("\\|",u));var x=g;if(!g&&n.length){var D=S.future();D.text==="|"&&(S.popToken(),x=!0)}return{tokens:x?n:a,numArgs:0}};e.macros.set("|",h(!1)),n.length&&e.macros.set("\\|",h(!0));var m=e.consumeArg().tokens,p=e.expandTokens([...s,...m,...t]);return e.macros.endGroup(),{tokens:p.reverse(),numArgs:0}};d("\\bra@ket",Xa(!1));d("\\bra@set",Xa(!0));d("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");d("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");d("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");d("\\angln","{\\angl n}");d("\\blue","\\textcolor{##6495ed}{#1}");d("\\orange","\\textcolor{##ffa500}{#1}");d("\\pink","\\textcolor{##ff00af}{#1}");d("\\red","\\textcolor{##df0030}{#1}");d("\\green","\\textcolor{##28ae7b}{#1}");d("\\gray","\\textcolor{gray}{#1}");d("\\purple","\\textcolor{##9d38bd}{#1}");d("\\blueA","\\textcolor{##ccfaff}{#1}");d("\\blueB","\\textcolor{##80f6ff}{#1}");d("\\blueC","\\textcolor{##63d9ea}{#1}");d("\\blueD","\\textcolor{##11accd}{#1}");d("\\blueE","\\textcolor{##0c7f99}{#1}");d("\\tealA","\\textcolor{##94fff5}{#1}");d("\\tealB","\\textcolor{##26edd5}{#1}");d("\\tealC","\\textcolor{##01d1c1}{#1}");d("\\tealD","\\textcolor{##01a995}{#1}");d("\\tealE","\\textcolor{##208170}{#1}");d("\\greenA","\\textcolor{##b6ffb0}{#1}");d("\\greenB","\\textcolor{##8af281}{#1}");d("\\greenC","\\textcolor{##74cf70}{#1}");d("\\greenD","\\textcolor{##1fab54}{#1}");d("\\greenE","\\textcolor{##0d923f}{#1}");d("\\goldA","\\textcolor{##ffd0a9}{#1}");d("\\goldB","\\textcolor{##ffbb71}{#1}");d("\\goldC","\\textcolor{##ff9c39}{#1}");d("\\goldD","\\textcolor{##e07d10}{#1}");d("\\goldE","\\textcolor{##a75a05}{#1}");d("\\redA","\\textcolor{##fca9a9}{#1}");d("\\redB","\\textcolor{##ff8482}{#1}");d("\\redC","\\textcolor{##f9685d}{#1}");d("\\redD","\\textcolor{##e84d39}{#1}");d("\\redE","\\textcolor{##bc2612}{#1}");d("\\maroonA","\\textcolor{##ffbde0}{#1}");d("\\maroonB","\\textcolor{##ff92c6}{#1}");d("\\maroonC","\\textcolor{##ed5fa6}{#1}");d("\\maroonD","\\textcolor{##ca337c}{#1}");d("\\maroonE","\\textcolor{##9e034e}{#1}");d("\\purpleA","\\textcolor{##ddd7ff}{#1}");d("\\purpleB","\\textcolor{##c6b9fc}{#1}");d("\\purpleC","\\textcolor{##aa87ff}{#1}");d("\\purpleD","\\textcolor{##7854ab}{#1}");d("\\purpleE","\\textcolor{##543b78}{#1}");d("\\mintA","\\textcolor{##f5f9e8}{#1}");d("\\mintB","\\textcolor{##edf2df}{#1}");d("\\mintC","\\textcolor{##e0e5cc}{#1}");d("\\grayA","\\textcolor{##f6f7f7}{#1}");d("\\grayB","\\textcolor{##f0f1f2}{#1}");d("\\grayC","\\textcolor{##e3e5e6}{#1}");d("\\grayD","\\textcolor{##d6d8da}{#1}");d("\\grayE","\\textcolor{##babec2}{#1}");d("\\grayF","\\textcolor{##888d93}{#1}");d("\\grayG","\\textcolor{##626569}{#1}");d("\\grayH","\\textcolor{##3b3e40}{#1}");d("\\grayI","\\textcolor{##21242c}{#1}");d("\\kaBlue","\\textcolor{##314453}{#1}");d("\\kaGreen","\\textcolor{##71B307}{#1}");var Va={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class Is{constructor(e,t,a){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Cs(Rs,t.macros),this.mode=a,this.stack=[]}feed(e){this.lexer=new Jr(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var t,a,n;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;t=this.popToken(),{tokens:n,end:a}=this.consumeArg(["]"])}else({tokens:n,start:t,end:a}=this.consumeArg());return this.pushToken(new k0("EOF",a.loc)),this.pushTokens(n),new k0("",g0.range(t,a))}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var t=[],a=e&&e.length>0;a||this.consumeSpaces();var n=this.future(),s,o=0,u=0;do{if(s=this.popToken(),t.push(s),s.text==="{")++o;else if(s.text==="}"){if(--o,o===-1)throw new F("Extra }",s)}else if(s.text==="EOF")throw new F("Unexpected end of input in a macro argument, expected '"+(e&&a?e[u]:"}")+"'",s);if(e&&a)if((o===0||o===1&&e[u]==="{")&&s.text===e[u]){if(++u,u===e.length){t.splice(-u,u);break}}else u=0}while(o!==0||a);return n.text==="{"&&t[t.length-1].text==="}"&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:n,end:s}}consumeArgs(e,t){if(t){if(t.length!==e+1)throw new F("The length of delimiters doesn't match the number of args!");for(var a=t[0],n=0;nthis.settings.maxExpand)throw new F("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var t=this.popToken(),a=t.text,n=t.noexpand?null:this._getExpansion(a);if(n==null||e&&n.unexpandable){if(e&&n==null&&a[0]==="\\"&&!this.isDefined(a))throw new F("Undefined control sequence: "+a);return this.pushToken(t),!1}this.countExpansion(1);var s=n.tokens,o=this.consumeArgs(n.numArgs,n.delimiters);if(n.numArgs){s=s.slice();for(var u=s.length-1;u>=0;--u){var h=s[u];if(h.text==="#"){if(u===0)throw new F("Incomplete placeholder at end of macro body",h);if(h=s[--u],h.text==="#")s.splice(u+1,1);else if(/^[1-9]$/.test(h.text))s.splice(u,2,...o[+h.text-1]);else throw new F("Not a valid argument number",h)}}}return this.pushTokens(s),s.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}}expandMacro(e){return this.macros.has(e)?this.expandTokens([new k0(e)]):void 0}expandTokens(e){var t=[],a=this.stack.length;for(this.pushTokens(e);this.stack.length>a;)if(this.expandOnce(!0)===!1){var n=this.stack.pop();n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),t.push(n)}return this.countExpansion(t.length),t}expandMacroAsText(e){var t=this.expandMacro(e);return t&&t.map(a=>a.text).join("")}_getExpansion(e){var t=this.macros.get(e);if(t==null)return t;if(e.length===1){var a=this.lexer.catcodes[e];if(a!=null&&a!==13)return}var n=typeof t=="function"?t(this):t;if(typeof n=="string"){var s=0;if(n.includes("#"))for(var o=n.replace(/##/g,"");o.includes("#"+(s+1));)++s;for(var u=new Jr(n,this.settings),h=[],m=u.lex();m.text!=="EOF";)h.push(m),m=u.lex();h.reverse();var p={tokens:h,numArgs:s};return p}return n}isDefined(e){return this.macros.has(e)||Z0.hasOwnProperty(e)||K.math.hasOwnProperty(e)||K.text.hasOwnProperty(e)||Va.hasOwnProperty(e)}isExpandable(e){var t=this.macros.get(e);return t!=null?typeof t=="string"||typeof t=="function"||!t.unexpandable:Z0.hasOwnProperty(e)&&!Z0[e].primitive}}var ta=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,Le=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g",ʰ:"h","ⁱ":"i",ʲ:"j","ᵏ":"k",ˡ:"l","ᵐ":"m",ⁿ:"n","ᵒ":"o","ᵖ":"p",ʳ:"r",ˢ:"s","ᵗ":"t","ᵘ":"u","ᵛ":"v",ʷ:"w",ˣ:"x",ʸ:"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),yt={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},ra={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",ḉ:"ḉ",č:"č",ĉ:"ĉ",ċ:"ċ",ç:"ç",ď:"ď",ḋ:"ḋ",ḑ:"ḑ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ḝ:"ḝ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ȩ:"ȩ",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ģ:"ģ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",ḩ:"ḩ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ķ:"ķ",ĺ:"ĺ",ľ:"ľ",ļ:"ļ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ņ:"ņ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ŗ:"ŗ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ş:"ş",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ţ:"ţ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Ḉ:"Ḉ",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ç:"Ç",Ď:"Ď",Ḋ:"Ḋ",Ḑ:"Ḑ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ḝ:"Ḝ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ȩ:"Ȩ",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ģ:"Ģ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Ḩ:"Ḩ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ķ:"Ķ",Ĺ:"Ĺ",Ľ:"Ľ",Ļ:"Ļ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ņ:"Ņ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ŗ:"Ŗ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ş:"Ş",Ť:"Ť",Ṫ:"Ṫ",Ţ:"Ţ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"};class tt{constructor(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new Is(e,t,this.mode),this.settings=t,this.leftrightDepth=0,this.nextToken=null}expect(e,t){if(t===void 0&&(t=!0),this.fetch().text!==e)throw new F("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new k0("}")),this.gullet.pushTokens(e);var a=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,a}parseExpression(e,t){for(var a=[];;){this.mode==="math"&&this.consumeSpaces();var n=this.fetch();if(tt.endOfExpression.has(n.text)||t&&n.text===t||e&&Z0[n.text]&&Z0[n.text].infix)break;var s=this.parseAtom(t);if(s){if(s.type==="internal")continue}else break;a.push(s)}return this.mode==="text"&&this.formLigatures(a),this.handleInfixNodes(a)}handleInfixNodes(e){for(var t=-1,a,n=0;n=128)this.settings.strict&&(ia(t.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'"'+(" ("+t.charCodeAt(0)+")"),e)),o={type:"textord",mode:"text",loc:g0.range(e),text:t};else return null;if(this.consume(),s)for(var p=0;p=qs){const a=this.map.keys().next().value;a!==void 0&&this.map.delete(a)}this.map.set(e,t)}get size(){return this.map.size}}const qe=new Ps;function Hs(r,e){return`d\0${e}`}function $s(r,e,t={}){const a=Hs(e,r),n=qe.get(a);if(n!==void 0)return n;const{errorColor:s="var(--semi-color-text-2)",macros:o}=t;let u;try{return u=aa.renderToString(r,{displayMode:e,throwOnError:!0,macros:o,trust:sr}),qe.set(a,u),u}catch{}try{return u=aa.renderToString(r,{displayMode:e,throwOnError:!1,strict:"ignore",errorColor:s,macros:o,trust:sr}),qe.set(a,u),u}catch{}return u=`${_s(r)}`,qe.set(a,u),u}function _s(r){return r.replace(/&/g,"&").replace(//g,">").replace(/"/g,""")}const Gs=a0.memo(function({expr:e}){const t=$s(e,!0);return U.jsx("div",{"data-slot":"math-display",dangerouslySetInnerHTML:{__html:t}})}),na=200,Us=a0.memo(function({text:e}){const t=a0.useMemo(()=>{const a=e.split(` +`),n=[];for(let s=0;sU.jsx("pre",{style:{contentVisibility:"auto",containIntrinsicSize:"0 400px",margin:0,whiteSpace:"pre-wrap",wordBreak:"break-word",fontFamily:"var(--font-mono, monospace)",fontSize:"var(--font-size-code, 13px)",lineHeight:1.5},children:a},n))})}),js=500,Xs=30,Vs=33,Ws=5e3;function Ys(r,e){const[t,a]=a0.useState(r),n=a0.useRef(r),s=a0.useRef(0),o=a0.useRef(null),u=a0.useRef(r);return u.current=r,a0.useEffect(()=>{if(!e){o.current!==null&&(cancelAnimationFrame(o.current),o.current=null),n.current=r,a(r);return}if(!r.startsWith(n.current)){n.current=r,a(r);return}if(r.length-n.current.length>Ws){n.current=r,a(r);return}function h(){o.current=null;const m=performance.now();if(m-s.current{o.current!==null&&(cancelAnimationFrame(o.current),o.current=null)}},[r,e]),e?t:r}const Zs={macros:{"\\vline":"\\vert","\\R":"\\mathbb{R}","\\N":"\\mathbb{N}","\\Z":"\\mathbb{Z}","\\Q":"\\mathbb{Q}","\\C":"\\mathbb{C}","\\norm":"\\left\\lVert #1 \\right\\rVert","\\abs":"\\left\\lvert #1 \\right\\rvert"},...pn,errorColor:"var(--semi-color-text-2)"},Ks=15e4;function Js(r){return{...dn,pre({children:e}){return U.jsx(U.Fragment,{children:e})},code({className:e,children:t}){const a=/language-(\w+)/.exec(e||""),n=String(t).replace(/\n$/,"");return a?a[1]==="math"?U.jsx(Gs,{expr:n}):a[1]==="diff"?U.jsx(Rn,{code:n}):U.jsx(br,{language:a[1],code:n,isStreaming:r}):n.includes(` +`)?U.jsx(br,{code:n,isStreaming:r}):U.jsx("code",{className:e,children:t})},table({children:e}){return U.jsx("div",{"data-slot":"md-table-wrap",children:U.jsx("table",{children:e})})}}}const i1=a0.memo(function({content:e,isStreaming:t=!1}){const a=a0.useMemo(()=>Js(t),[t]),n=Ys(e,t),s=a0.useDeferredValue(n);return s.length>Ks?U.jsx("div",{"data-slot":"aui_markdown-part",children:U.jsx(Us,{text:s})}):U.jsx("div",{"data-slot":"aui_markdown-part",children:U.jsx(ln,{remarkPlugins:[un,cn],rehypePlugins:[[on,Zs]],components:a,urlTransform:mn,children:hn(s)})})});export{i1 as MarkdownPart}; diff --git a/frontends/desktop/dist/assets/MarkdownPart-Cp90Gu77.css b/frontends/desktop/dist/assets/MarkdownPart-Cp90Gu77.css new file mode 100644 index 000000000..f25ebff27 --- /dev/null +++ b/frontends/desktop/dist/assets/MarkdownPart-Cp90Gu77.css @@ -0,0 +1 @@ +[data-slot=code-card]{position:relative;margin:.5rem 0;border-radius:.375rem;border:1px solid var(--semi-color-border);background:var(--semi-color-fill-0);overflow:hidden}[data-slot=code-card-header]{display:flex;align-items:center;justify-content:space-between;padding:.25rem .5rem;border-bottom:1px solid var(--semi-color-border);background:color-mix(in srgb,var(--semi-color-fill-0) 60%,var(--semi-color-bg-0));min-height:1.5rem}[data-slot=code-card-lang]{font-size:.6875rem;font-family:SF Mono,Cascadia Code,Fira Code,monospace;color:var(--semi-color-text-2);text-transform:lowercase}[data-slot=code-card-copy]{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border:none;border-radius:.25rem;background:transparent;color:var(--semi-color-text-2);cursor:pointer;opacity:.55;transition:opacity .12s,background .12s}[data-slot=code-card-copy]:hover{opacity:1;background:var(--semi-color-fill-1)}[data-slot=code-card-body]{position:relative;padding:.625rem .75rem;overflow-x:auto;overflow-y:auto;max-height:7.5rem;font-family:SF Mono,Cascadia Code,Fira Code,monospace;font-size:.7rem;line-height:1.6;color:var(--semi-color-text-0);white-space:pre;-moz-tab-size:2;tab-size:2}[data-slot=code-card-body][data-expanded]{max-height:40dvh}[data-slot=code-card-expand]{position:absolute;inset-inline:0;bottom:0;display:flex;height:1.75rem;cursor:pointer;align-items:flex-end;justify-content:center;padding-bottom:.25rem;border:none;background:linear-gradient(to top,var(--semi-color-fill-0),transparent);color:var(--ui-text-tertiary);transition:color .12s ease-out}[data-slot=code-card-expand]:hover{color:var(--foreground)}[data-slot=code-card-expand] svg{width:.875rem;height:.875rem;transition:transform .15s ease-out}[data-slot=code-card-body][data-expanded]+[data-slot=code-card-expand]{background:none}[data-slot=code-card-body][data-expanded]+[data-slot=code-card-expand] svg{transform:rotate(180deg)}[data-slot=code-card-body] code{font-family:inherit;font-size:inherit;background:none!important;padding:0;display:block}[data-slot=code-card][data-streaming]{animation:code-card-glow 1.8s ease-in-out infinite alternate;border-color:color-mix(in srgb,var(--semi-color-primary) 24%,var(--semi-color-border))}[data-slot=code-card][data-streaming] [data-slot=code-card-body]{mask-image:linear-gradient(to bottom,#000,#000 calc(100% - 1.5rem),#00000080);-webkit-mask-image:linear-gradient(to bottom,black 0%,black calc(100% - 1.5rem),rgba(0,0,0,.5) 100%)}@keyframes code-card-glow{0%{box-shadow:0 0 0 .5px color-mix(in srgb,var(--semi-color-primary) 10%,transparent)}to{box-shadow:0 0 0 .5px color-mix(in srgb,var(--semi-color-primary) 10%,transparent),0 .5rem 1.5rem color-mix(in srgb,var(--semi-color-primary) 6%,transparent)}}:root{--code-keyword: #d73a49;--code-string: #032f62;--code-comment: #6a737d;--code-function: #6f42c1;--code-number: #005cc5;--code-operator: #d73a49;--code-class-name: #6f42c1;--code-punctuation: #24292e;--code-property: #005cc5;--code-builtin: #e36209;--code-attr-name: #6f42c1;--code-attr-value: #032f62;--code-tag: #22863a;--code-selector: #22863a;--code-inserted: #22863a;--code-deleted: #d73a49}[data-appearance=dark]{--code-keyword: #ff7b72;--code-string: #a5d6ff;--code-comment: #8b949e;--code-function: #d2a8ff;--code-number: #79c0ff;--code-operator: #ff7b72;--code-class-name: #f0c674;--code-punctuation: #c9d1d9;--code-property: #79c0ff;--code-builtin: #ffa657;--code-attr-name: #d2a8ff;--code-attr-value: #a5d6ff;--code-tag: #7ee787;--code-selector: #7ee787;--code-inserted: #7ee787;--code-deleted: #ff7b72}.token.keyword,.token.control,.token.directive,.token.important{color:var(--code-keyword)}.token.string,.token.template-string,.token.url{color:var(--code-string)}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:var(--code-comment);font-style:italic}.token.function{color:var(--code-function)}.token.number,.token.boolean{color:var(--code-number)}.token.operator,.token.entity{color:var(--code-operator)}.token.class-name,.token.maybe-class-name{color:var(--code-class-name)}.token.punctuation{color:var(--code-punctuation)}.token.property,.token.constant,.token.variable{color:var(--code-property)}.token.builtin,.token.symbol{color:var(--code-builtin)}.token.attr-name{color:var(--code-attr-name)}.token.attr-value{color:var(--code-attr-value)}.token.tag{color:var(--code-tag)}.token.selector{color:var(--code-selector)}.token.inserted{color:var(--code-inserted)}.token.deleted{color:var(--code-deleted);text-decoration:line-through}.token.italic{font-style:italic}.token.bold{font-weight:700}[data-slot=diff-block]{margin:.5rem 0;border-radius:.375rem;border:1px solid var(--semi-color-border);overflow-x:auto;overscroll-behavior-x:contain;font-family:SF Mono,Cascadia Code,Fira Code,monospace;font-size:var(--font-size-code, 13px);line-height:1.375rem}[data-slot=diff-line]{display:flex;padding:0 .5rem;min-height:1.375rem;line-height:1.375rem;border-left:2px solid transparent}[data-diff-kind=add]{background:color-mix(in srgb,var(--semi-color-success, #00b42a) 10%,transparent);border-left:2px solid var(--semi-color-success, #00b42a)}[data-diff-kind=remove]{background:color-mix(in srgb,var(--semi-color-danger, #f53f3f) 10%,transparent);border-left:2px solid var(--semi-color-danger, #f53f3f)}[data-diff-kind=context]{border-left:2px solid transparent}[data-diff-kind=header]{background:var(--semi-color-fill-0);font-style:italic;color:var(--semi-color-text-2);padding:.25rem .5rem}[data-slot=diff-gutter]{display:flex;gap:.25rem;min-width:4rem;-webkit-user-select:none;user-select:none;color:var(--semi-color-text-3);font-size:.6875rem;justify-content:flex-end;padding-right:.5rem;border-right:1px solid var(--semi-color-border)}[data-slot=diff-line-old],[data-slot=diff-line-new]{min-width:1.5rem;text-align:right}[data-slot=diff-content]{flex:1;white-space:pre-wrap;word-break:break-all;padding-left:.5rem}[data-slot=diff-sign]{display:inline-block;width:1ch;-webkit-user-select:none;user-select:none} diff --git a/frontends/desktop/dist/assets/ServicesPage-Cbm5nbW7.css b/frontends/desktop/dist/assets/ServicesPage-Cbm5nbW7.css new file mode 100644 index 000000000..a5496d0b6 --- /dev/null +++ b/frontends/desktop/dist/assets/ServicesPage-Cbm5nbW7.css @@ -0,0 +1 @@ +.semi-input-textarea-wrapper{box-sizing:border-box;display:inline-block;position:relative;width:100%;border:1px transparent solid;border-radius:var(--semi-border-radius-small);vertical-align:bottom;background-color:var(--semi-color-fill-0);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-input-textarea-wrapper-resizeX{display:inline-block;width:fit-content;max-width:100%}.semi-input-textarea-wrapper:hover{background-color:var(--semi-color-fill-1)}.semi-input-textarea-wrapper-focus{background-color:var(--semi-color-fill-0);border:1px var(--semi-color-focus-border) solid}.semi-input-textarea-wrapper-focus:hover,.semi-input-textarea-wrapper-focus:active{background-color:var(--semi-color-fill-0)}.semi-input-textarea-wrapper:active{background-color:var(--semi-color-fill-2)}.semi-input-textarea-wrapper .semi-input-clearbtn{position:absolute;top:0;min-width:24px;color:var(--semi-color-text-2);right:4px;height:32px;display:flex;align-items:center;justify-content:center}.semi-input-textarea-wrapper .semi-input-clearbtn>svg{pointer-events:none}.semi-input-textarea-wrapper .semi-input-clearbtn:hover{cursor:pointer}.semi-input-textarea-wrapper .semi-input-clearbtn:hover .semi-icon{color:var(--semi-color-primary-hover)}.semi-input-textarea-wrapper .semi-input-clearbtn-hidden{visibility:hidden}.semi-input-textarea-wrapper-disabled,.semi-input-textarea-wrapper-readonly{cursor:not-allowed;color:var(--semi-color-disabled-text);background-color:var(--semi-color-disabled-fill)}.semi-input-textarea-wrapper-disabled:hover,.semi-input-textarea-wrapper-readonly:hover{background-color:var(--semi-color-disabled-fill)}.semi-input-textarea-wrapper-disabled::placeholder,.semi-input-textarea-wrapper-readonly::placeholder{color:var(--semi-color-disabled-text)}.semi-input-textarea-wrapper-readonly{cursor:text}.semi-input-textarea-wrapper-error{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger-light-default)}.semi-input-textarea-wrapper-error:hover{background-color:var(--semi-color-danger-light-hover);border-color:var(--semi-color-danger-light-hover)}.semi-input-textarea-wrapper-error.semi-input-textarea-wrapper-focus{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger)}.semi-input-textarea-wrapper-error:active{background-color:var(--semi-color-danger-light-active);border-color:var(--semi-color-danger)}.semi-input-textarea-wrapper-warning{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning-light-default)}.semi-input-textarea-wrapper-warning:hover{background-color:var(--semi-color-warning-light-hover);border-color:var(--semi-color-warning-light-hover)}.semi-input-textarea-wrapper-warning.semi-input-textarea-wrapper-focus{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning)}.semi-input-textarea-wrapper-warning:active{background-color:var(--semi-color-warning-light-active);border-color:var(--semi-color-warning)}.semi-input-textarea{position:relative;resize:none;padding:5px 12px;box-shadow:none;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;background-color:transparent;border:0 solid transparent;vertical-align:bottom;width:100%;outline:none;cursor:text;box-sizing:border-box;color:var(--semi-color-text-0)}.semi-input-textarea:hover{border-color:transparent}.semi-input-textarea::placeholder{color:var(--semi-color-text-2)}.semi-input-textarea-showClear{padding-right:36px}.semi-input-textarea-disabled,.semi-input-textarea-readonly{cursor:not-allowed;color:var(--semi-color-disabled-text);background-color:transparent}.semi-input-textarea-disabled:hover,.semi-input-textarea-readonly:hover{background-color:transparent}.semi-input-textarea-disabled::placeholder,.semi-input-textarea-readonly::placeholder{color:var(--semi-color-disabled-text)}.semi-input-textarea-readonly{cursor:text}.semi-input-textarea-autosize{overflow:hidden;resize:none}.semi-input-textarea-counter{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;display:flex;flex-direction:column;justify-content:center;padding:3px 12px 5px;min-height:24px;text-align:right;color:var(--semi-color-text-2)}.semi-input-textarea-counter-exceed{color:var(--semi-color-danger)}.semi-input-textarea-borderless:not(:focus-within):not(:hover){background-color:transparent;border-color:transparent}.semi-input-textarea-borderless:focus-within:not(:active){background-color:transparent}.semi-input-textarea-borderless.semi-input-textarea-wrapper-error:not(:focus-within){border-color:var(--semi-color-danger)}.semi-input-textarea-borderless.semi-input-textarea-wrapper-warning:not(:focus-within){border-color:var(--semi-color-warning)}.semi-input-textarea-borderless.semi-input-textarea-wrapper-error .semi-input-textarea-counter{color:var(--semi-color-danger)}.semi-input-textarea-borderless.semi-input-textarea-wrapper-warning .semi-input-textarea-counter{color:var(--semi-color-warning)}.semi-input-textarea-wrapper-withLineNumber{display:flex;padding:0;align-items:flex-start}.semi-input-textarea-wrapper-withLineNumber.semi-input-textarea-wrapper-resizeX{display:inline-flex;width:fit-content;max-width:100%}.semi-input-textarea-wrapper-withLineNumber.semi-input-textarea-wrapper-resizeX .semi-input-textarea-content{flex:0 0 auto}.semi-input-textarea-wrapper-withLineNumber .semi-input-textarea-lineNumber{flex-shrink:0;padding:5px 12px;background-color:var(--semi-color-fill-1);border-right:1px solid var(--semi-color-border);color:var(--semi-color-text-2);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:inherit;line-height:1.5;text-align:right;-webkit-user-select:none;user-select:none;min-width:36px;border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small);overflow-y:auto;overflow-x:hidden;scrollbar-width:none;-ms-overflow-style:none}.semi-input-textarea-wrapper-withLineNumber .semi-input-textarea-lineNumber::-webkit-scrollbar{display:none}.semi-input-textarea-wrapper-withLineNumber .semi-input-textarea-content{display:flex;flex:1;min-width:0}.semi-input-textarea-wrapper-withLineNumber .semi-input-textarea-lineNumber-item{display:flex;align-items:flex-start;justify-content:flex-end;box-sizing:border-box}.semi-input-textarea-wrapper-withLineNumber .semi-input-textarea{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0;line-height:1.5;flex:1}.semi-rtl .semi-input-wrapper,.semi-portal-rtl .semi-input-wrapper{direction:rtl}.semi-rtl .semi-input-wrapper__with-prefix .semi-input,.semi-portal-rtl .semi-input-wrapper__with-prefix .semi-input{padding-left:auto;padding-right:0}.semi-rtl .semi-input-wrapper__with-suffix .semi-input,.semi-portal-rtl .semi-input-wrapper__with-suffix .semi-input{padding-right:auto;padding-left:0}.semi-rtl .semi-input,.semi-portal-rtl .semi-input{padding-left:12px;padding-right:12px}.semi-rtl .semi-input-clearbtn+.semi-rtl .semi-input-suffix+.semi-input-suffix-text,.semi-rtl .semi-input-clearbtn+.semi-portal-rtl .semi-input-suffix+.semi-input-suffix-text,.semi-portal-rtl .semi-input-clearbtn+.semi-rtl .semi-input-suffix+.semi-input-suffix-text,.semi-portal-rtl .semi-input-clearbtn+.semi-portal-rtl .semi-input-suffix+.semi-input-suffix-text{margin-left:auto;margin-right:0}.semi-rtl .semi-input-clearbtn+.semi-rtl .semi-input-suffix+.semi-input-suffix-icon,.semi-rtl .semi-input-clearbtn+.semi-portal-rtl .semi-input-suffix+.semi-input-suffix-icon,.semi-portal-rtl .semi-input-clearbtn+.semi-rtl .semi-input-suffix+.semi-input-suffix-icon,.semi-portal-rtl .semi-input-clearbtn+.semi-portal-rtl .semi-input-suffix+.semi-input-suffix-icon{margin-left:auto;margin-right:0}.semi-rtl .semi-input-append,.semi-portal-rtl .semi-input-append{border-left:0;border-right:1px transparent solid}.semi-rtl .semi-input-prepend,.semi-portal-rtl .semi-input-prepend{border-right:0;border-left:1px transparent solid}.semi-rtl .semi-input-group .semi-select:not(:last-child):after,.semi-rtl .semi-input-group .semi-cascader:not(:last-child):after,.semi-rtl .semi-input-group .semi-tree-select:not(:last-child):after,.semi-rtl .semi-input-group>.semi-input-wrapper:not(:last-child):after,.semi-portal-rtl .semi-input-group .semi-select:not(:last-child):after,.semi-portal-rtl .semi-input-group .semi-cascader:not(:last-child):after,.semi-portal-rtl .semi-input-group .semi-tree-select:not(:last-child):after,.semi-portal-rtl .semi-input-group>.semi-input-wrapper:not(:last-child):after{right:auto;left:-1px}.semi-rtl .semi-input-group .semi-input-number:not(:last-child):after,.semi-portal-rtl .semi-input-group .semi-input-number:not(:last-child):after{right:auto;left:-1px}.semi-rtl .semi-input-textarea-wrapper,.semi-portal-rtl .semi-input-textarea-wrapper{direction:rtl}.semi-rtl .semi-input-textarea-counter,.semi-portal-rtl .semi-input-textarea-counter{text-align:left}.semi-rtl .semi-input-textarea-showClear,.semi-portal-rtl .semi-input-textarea-showClear{padding-right:0;padding-left:36px}.ga-services-page{padding:16px 12px;height:100%;width:100%;overflow-y:auto}.ga-services-loading{display:flex;align-items:center;justify-content:center;gap:8px;padding:48px 0}.ga-services-loading--col{flex-direction:column;gap:6px}.ga-bridge-hint{font-size:12px;color:var(--semi-color-text-2);background:var(--semi-color-fill-0);padding:4px 10px;border-radius:4px;margin-top:4px}.ga-channel-list{display:flex;flex-direction:column;gap:8px;padding:4px 0 12px;width:100%}.ga-channel-card{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-radius:8px;background:var(--dt-card);border:1px solid var(--ui-stroke-tertiary);transition:border-color .15s}.ga-channel-card:hover{border-color:var(--ui-stroke-secondary)}.ga-channel-card-info{display:flex;align-items:center;gap:6px}.ga-channel-icon{width:18px;height:18px;flex-shrink:0}.ga-channel-card-name{font-weight:500;margin-right:8px}.ga-channel-card-actions{display:flex;align-items:center;gap:4px}.ga-status-panel{padding:4px 0 12px}.ga-service-identity{display:inline-flex;min-width:0;flex-direction:column;gap:2px;padding:2px 0}.ga-service-identity-name{color:var(--semi-color-text-0);font-weight:600;line-height:20px}.ga-service-identity-summary{color:var(--semi-color-text-2);font-size:12px;line-height:18px;white-space:normal}.ga-offline-banner{display:flex;align-items:center;gap:6px;padding:6px 12px;margin-bottom:8px;border-radius:6px;background:var(--semi-color-warning-light-default);color:var(--semi-color-warning);font-size:12px;line-height:1.4}.ga-offline-banner>span{flex:1}.ga-status-actions{display:flex;gap:4px;align-items:center}.ga-log-dialog .semi-modal-content{padding-left:24px;padding-right:0;max-height:85vh;display:flex;flex-direction:column}.ga-log-dialog .semi-modal-header{padding-right:24px;flex-shrink:0}.ga-log-dialog .semi-modal-body{padding:0 24px 0 0;flex:1;min-height:0} diff --git a/frontends/desktop/dist/assets/ServicesPage-DrjRw530.js b/frontends/desktop/dist/assets/ServicesPage-DrjRw530.js new file mode 100644 index 000000000..6f74a094b --- /dev/null +++ b/frontends/desktop/dist/assets/ServicesPage-DrjRw530.js @@ -0,0 +1,4 @@ +import{c as se,b as u,ax as Le,f as Ee,h as S,_ as K,i as oe,R as v,k as Te,ay as re,l as D,n as le,V as Oe,az as X,P as f,aj as i,ab as Me}from"./tauri-compat-tfiFK9EG.js";import{T as He,a as Ve,b as ce}from"./index-DwVcZP0M.js";import{_ as he,t as Fe,c as Pe,I as Ie,a as $e,u as Be,b as q,d as z,M as fe,e as xe,i as be,f as Y,E as ye,T as ee,g as Ae,h as de}from"./main-Knf6L_en.js";import{B as _,c as Q,I as Ke}from"./index-Bpi3BHKj.js";import{S as G}from"./index-D_sWIqse.js";import{I as ve}from"./IconFile-CgfQSwGI.js";import"./WindowsTitlebar-CrkUa1UM.js";function We(s){return u.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},s),u.createElement("path",{d:"M5 2.9a1 1 0 0 1 1.57-.82l13.23 9.1a1 1 0 0 1 0 1.64l-13.23 9.1A1 1 0 0 1 5 21.1V2.9Z",fill:"currentColor"}))}const we=se(We,"play");function Ue(s){return u.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},s),u.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8 5.07c-.8.47-1.8.46-2.6 0l-.24-.15a1.4 1.4 0 0 0-1.82.29c-.64.82-1.16 1.73-1.55 2.7a1.4 1.4 0 0 0 .66 1.71l.24.14a2.57 2.57 0 0 1 0 4.48l-.24.14a1.4 1.4 0 0 0-.66 1.72 11.1 11.1 0 0 0 1.55 2.69 1.4 1.4 0 0 0 1.82.3l.25-.15a2.57 2.57 0 0 1 3.88 2.24v.28c-.01.7.46 1.33 1.16 1.43a11 11 0 0 0 3.1 0 1.4 1.4 0 0 0 1.17-1.43v-.28a2.57 2.57 0 0 1 3.87-2.24l.25.14c.6.36 1.38.26 1.82-.29.64-.82 1.16-1.73 1.55-2.7a1.4 1.4 0 0 0-.66-1.71l-.24-.14a2.57 2.57 0 0 1 0-4.48l.24-.14a1.4 1.4 0 0 0 .66-1.72 11.08 11.08 0 0 0-1.55-2.69 1.4 1.4 0 0 0-1.82-.3l-.25.15a2.57 2.57 0 0 1-3.88-2.24v-.28c.01-.7-.46-1.33-1.16-1.43a10.99 10.99 0 0 0-3.1 0c-.7.1-1.17.72-1.17 1.43v.28C9.3 3.75 8.8 4.61 8 5.07Zm6 10.4a4 4 0 1 0-4-6.93 4 4 0 0 0 4 6.92Z",fill:"currentColor"}))}const De=se(Ue,"setting");function qe(s){return u.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},s),u.createElement("path",{d:"M3 6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V6Z",fill:"currentColor"}))}const Se=se(qe,"stop");let R=null;const ue={"min-height":"0","max-height":"none",height:"0",visibility:"hidden",overflow:"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0"},ge=s=>{Object.keys(ue).forEach(e=>{s.style.setProperty(e,ue[e],"important")})},pe=(s,e)=>{const t=s.scrollHeight;return e.sizingStyle.boxSizing==="border-box"?t+e.borderSize:t-e.paddingSize};function Ze(s,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1/0;R||(R=document.createElement("textarea"),R.setAttribute("tab-index","-1"),R.setAttribute("aria-hidden","true"),ge(R)),R.parentNode===null&&document.body.appendChild(R);const{paddingSize:a,borderSize:o,sizingStyle:r}=s,{boxSizing:l}=r;Object.keys(r).forEach(x=>{R.style[x]=r[x]}),ge(R),R.value=e;let c=pe(R,s);R.value="x";const g=pe(R,s)-a-o;let m=g*t;l==="border-box"&&(m=m+a+o),c=Math.max(m,c);let w=g*n;return l==="border-box"&&(w=w+a+o),c=Math.min(w,c),c}const Xe=["borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","boxSizing","fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","lineHeight","paddingBottom","paddingLeft","paddingRight","paddingTop","tabSize","textIndent","textRendering","textTransform","width"],Ye=s=>{const e=window.getComputedStyle(s);if(e===null)return null;const t=Le(e,Xe),{boxSizing:n}=t;if(n==="")return null;const a=parseFloat(t.paddingBottom)+parseFloat(t.paddingTop),o=parseFloat(t.borderBottomWidth)+parseFloat(t.borderTopWidth);return{sizingStyle:t,paddingSize:a,borderSize:o}};class ne extends Ee{static get textAreaDefaultAdapter(){return{notifyChange:S,setValue:S,toggleFocusing:S,toggleHovering:S,notifyFocus:S,notifyBlur:S,notifyKeyDown:S,notifyEnterPress:S}}constructor(e){super(Object.assign(Object.assign({},ne.textAreaDefaultAdapter),e)),this.compositionEnter=!1,this._changeValue=(t,n)=>{this._isControlledComponent()?this._adapter.notifyChange(t,n):(this._adapter.setValue(t),this._adapter.notifyChange(t,n))},this.getNextValue=t=>{const{maxLength:n,minLength:a,getValueLength:o}=this._adapter.getProps();return K(o)?n?this.handleVisibleMaxLength(t):(a&&this.handleVisibleMinLength(t),t):t},this.handleCompositionStart=t=>{this.compositionEnter=!0,this._adapter.notifyCompositionStart(t)},this.handleCompositionEnd=t=>{const{composition:n}=this._adapter.getProps(),a=t.target.value;if(this.compositionEnter=!1,this._adapter.notifyCompositionEnd(t),n){const c=this.getNextValue(a);this._changeValue(c,t);return}const{getValueLength:o,maxLength:r,minLength:l}=this.getProps();if(K(o)){if(r){const c=this.handleVisibleMaxLength(a);c!==a&&this._changeValue(c,t)}l&&this.handleVisibleMinLength(a)}},this.handleCompositionUpdate=t=>{this._adapter.notifyCompositionUpdate(t)},this.resizeTextarea=()=>{var t;const{height:n}=this.getStates(),{rows:a,autosize:o}=this.getProps(),r=this._adapter.getRef(),l=Ye(r);if(!l)return;const[c,g]=o!==null&&typeof o=="object"?[(t=o==null?void 0:o.minRows)!==null&&t!==void 0?t:a,o==null?void 0:o.maxRows]:[a],m=Ze(l,r.value||r.placeholder||"x",c,g);if(n!==m){this._adapter.notifyHeightUpdate(m),r.style.height=`${m}px`;return}}}destroy(){}handleValueChange(e){this._adapter.setValue(e)}handleChange(e,t){const{composition:n}=this._adapter.getProps();let a=e;if(n&&this.compositionEnter){this._adapter.setValue(a);return}this.compositionEnter||(a=this.getNextValue(a)),this._changeValue(a,t)}handleVisibleMinLength(e){const{minLength:t,getValueLength:n}=this._adapter.getProps(),{minLength:a}=this._adapter.getStates();if(he(t)&&t>=0&&K(n)&&oe(e)){const o=n(e);if(o=0&&oe(e)){if(K(n)){if(n(e)>t)return console.warn("[Semi TextArea] The input character is truncated because the input length exceeds the maximum length limit"),this.handleTruncateValue(e,t)}else if(e.length>t)return console.warn("[Semi TextArea] The input character is truncated because the input length exceeds the maximum length limit"),e.slice(0,t);return e}}handleTruncateValue(e,t){const{getValueLength:n}=this._adapter.getProps();return Fe({value:e,maxLength:t,getValueLength:n})}handleFocus(e){const{value:t}=this.getStates();this._adapter.toggleFocusing(!0),this._adapter.notifyFocus(t,e)}handleBlur(e){const{value:t}=this.getStates(),{maxLength:n}=this.getProps();let a=t;n&&(a=this.handleVisibleMaxLength(t),a!==t&&(this._isControlledComponent()||this._adapter.setValue(a),this._adapter.notifyChange(a,e))),this._adapter.toggleFocusing(!1),this._adapter.notifyBlur(a,e)}handleKeyDown(e){const{disabledEnterStartNewLine:t}=this.getProps();t&&e.key==="Enter"&&!e.shiftKey&&e.preventDefault(),this._adapter.notifyKeyDown(e),e.keyCode===13&&this._adapter.notifyPressEnter(e)}handleMouseEnter(e){this._adapter.toggleHovering(!0)}handleMouseLeave(e){this._adapter.toggleHovering(!1)}isAllowClear(){const{value:e,isFocus:t,isHover:n}=this._adapter.getStates(),{showClear:a,disabled:o,readonly:r}=this._adapter.getProps();return e&&a&&!o&&(t||n)&&!r}handleClear(e){const{isFocus:t}=this.getStates();this._isControlledComponent("value")?this._adapter.setState({isFocus:!1}):this._adapter.setState({value:"",isFocus:!1}),t&&this._adapter.notifyBlur("",e),this._adapter.notifyChange("",e),this._adapter.notifyClear(e),this.stopPropagation(e)}handleClick(e){const{disabled:t,readonly:n}=this._adapter.getProps(),{isFocus:a}=this._adapter.getStates();t||n||a||this._adapter.isEventTarget(e)&&(this._adapter.focusInput(),this._adapter.toggleFocusing(!0))}handleCounterClick(e){const{disabled:t,readonly:n}=this._adapter.getProps(),{isFocus:a}=this._adapter.getStates();t||n||a||(this._adapter.focusInput(),this._adapter.toggleFocusing(!0))}}var Qe=function(s,e){var t={};for(var n in s)Object.prototype.hasOwnProperty.call(s,n)&&e.indexOf(n)<0&&(t[n]=s[n]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(s);a{var a,o;if(this.props.autosize)return;const r=n&&n[0],l=r&&r.contentRect;if(!l)return;const c=l.width,g=l.height;if(!this.nativeResizeObservedOnce){this.nativeResizeObservedOnce=!0,this.lastNativeSize={width:c,height:g};return}const m=this.lastNativeSize;m&&m.width===c&&m.height===g||(this.lastNativeSize={width:c,height:g},(o=(a=this.props).onResize)===null||o===void 0||o.call(a,{height:g,width:c}))},this.handleClear=n=>{this.foundation.handleClear(n)},this.handleClick=n=>{this.foundation.handleClick(n)},this.handleCounterClick=n=>{this.foundation.handleCounterClick(n)},this.setRef=n=>{this.libRef.current=n;const{forwardRef:a}=this.props;typeof a=="function"?a(n):a&&typeof a=="object"&&(a.current=n)},this.handleTextAreaScroll=n=>{const{showLineNumber:a}=this.props;a&&this.lineNumberRef.current&&requestAnimationFrame(()=>{const o=this.lineNumberRef.current;o&&(o.scrollTop=n.target.scrollTop)})},this.getTextareaLineHeightPx=n=>{const a=window.getComputedStyle(n),o=a.lineHeight,r=parseFloat(a.fontSize)||14;if(!o||o==="normal")return r*1.5;const l=parseFloat(o);return Number.isFinite(l)&&l>0?l:r*1.5},this.calculateWrappedLines=(n,a)=>{if(!n)return 1;const o=window.getComputedStyle(a),l=document.createElement("canvas").getContext("2d");if(!l)return 1;const c=o.fontSize,g=o.fontFamily;l.font=`${c} ${g}`;const m=parseFloat(o.paddingLeft)||0,w=parseFloat(o.paddingRight)||0,x=a.clientWidth-m-w;if(x<=0)return 1;const C=l.measureText(n).width,k=Math.ceil(C/x);return Math.max(1,k)};const t="value"in e?e.value:e.defaultValue;this.state={value:t,isFocus:!1,isHover:!1,height:0,minLength:e.minLength,cachedValue:e.value,textareaWidth:0,textareaHeight:0},this.focusing=!1,this.foundation=new ne(this.adapter),this.lineNumberResizeObserver=null,this.libRef=v.createRef(),this.lineNumberRef=v.createRef(),this.throttledResizeTextarea=re(this.foundation.resizeTextarea,10),this.throttledNotifyNativeResize=re(this.handleNativeResize,10),this.nativeResizeObservedOnce=!1,this.lastNativeSize=null}get adapter(){return Object.assign(Object.assign({},super.adapter),{setValue:e=>this.setState({value:e},()=>{this.props.autosize&&this.foundation.resizeTextarea()}),getRef:()=>this.libRef.current,toggleFocusing:e=>this.setState({isFocus:e}),toggleHovering:e=>this.setState({isHover:e}),notifyChange:(e,t)=>{this.props.onChange(e,t)},notifyClear:e=>this.props.onClear(e),notifyBlur:(e,t)=>this.props.onBlur(t),notifyFocus:(e,t)=>this.props.onFocus(t),notifyKeyDown:e=>{this.props.onKeyDown(e)},notifyHeightUpdate:e=>{this.setState({height:e}),this.props.onResize({height:e})},notifyPressEnter:e=>{this.props.onEnterPress&&this.props.onEnterPress(e)},notifyCompositionStart:e=>this.props.onCompositionStart(e),notifyCompositionEnd:e=>this.props.onCompositionEnd(e),notifyCompositionUpdate:e=>this.props.onCompositionUpdate(e),setMinLength:e=>this.setState({minLength:e}),focusInput:()=>{const e=this.libRef&&this.libRef.current;e&&e.focus()},isEventTarget:e=>e&&e.target===e.currentTarget})}static getDerivedStateFromProps(e,t){const n={};return e.value!==t.cachedValue&&(n.value=e.value,n.cachedValue=e.value),n}componentDidMount(){if(this.props.showLineNumber&&this.libRef.current&&typeof globalThis.ResizeObserver<"u"){const e=this.libRef.current;this.setState({textareaWidth:e.clientWidth,textareaHeight:e.clientHeight}),this.lineNumberResizeObserver=new globalThis.ResizeObserver(t=>{for(const n of t){const a=n.contentRect.width,o=n.contentRect.height;this.setState({textareaWidth:a,textareaHeight:o})}}),this.lineNumberResizeObserver.observe(e)}}componentWillUnmount(){var e,t,n,a;this.throttledResizeTextarea&&((t=(e=this.throttledResizeTextarea)===null||e===void 0?void 0:e.cancel)===null||t===void 0||t.call(e),this.throttledResizeTextarea=null),this.throttledNotifyNativeResize&&((a=(n=this.throttledNotifyNativeResize)===null||n===void 0?void 0:n.cancel)===null||a===void 0||a.call(n),this.throttledNotifyNativeResize=null),this.lineNumberResizeObserver&&(this.lineNumberResizeObserver.disconnect(),this.lineNumberResizeObserver=null)}componentDidUpdate(e,t){if((this.props.value!==e.value||this.props.placeholder!==e.placeholder)&&this.props.autosize&&this.foundation.resizeTextarea(),this.props.showLineNumber!==e.showLineNumber)if(this.props.showLineNumber&&this.libRef.current&&typeof globalThis.ResizeObserver<"u"){const n=this.libRef.current;this.setState({textareaWidth:n.clientWidth,textareaHeight:n.clientHeight}),this.lineNumberResizeObserver||(this.lineNumberResizeObserver=new globalThis.ResizeObserver(a=>{for(const o of a){const r=o.contentRect.width,l=o.contentRect.height;this.setState({textareaWidth:r,textareaHeight:l})}})),this.lineNumberResizeObserver.observe(n)}else this.lineNumberResizeObserver&&(this.lineNumberResizeObserver.disconnect(),this.lineNumberResizeObserver=null)}renderClearBtn(){const{showClear:e}=this.props,t=this.foundation.isAllowClear(),n=D(`${y}-clearbtn`,{[`${y}-clearbtn-hidden`]:!t});return e?v.createElement("div",{className:n,onClick:this.handleClear},v.createElement(Ie,null)):null}renderCounter(){let e,t,n,a;const{showCounter:o,maxCount:r,getValueLength:l}=this.props;if(o||r){const{value:c}=this.state;t=c?K(l)?l(c):c.length:0,n=r||null,a=D(`${y}-textarea-counter`,{[`${y}-textarea-counter-exceed`]:t>n}),e=v.createElement("div",{className:a,onClick:this.handleCounterClick},t,n?"/":null,n)}else e=null;return e}renderLineNumbers(){const{showLineNumber:e,lineNumberStart:t=1,lineNumberClassName:n,lineNumberStyle:a}=this.props;if(!e)return null;const{value:o,textareaWidth:r,textareaHeight:l}=this.state,c=this.libRef.current,g=o?o.split(` +`):[""],m=D(`${y}-textarea-lineNumber`,n),w=c?this.getTextareaLineHeightPx(c):21,x=Object.assign(Object.assign({},a||{}),{height:l?`${l}px`:void 0,maxHeight:l?`${l}px`:void 0});return v.createElement("div",{ref:this.lineNumberRef,className:m,style:x},g.map((E,C)=>{const k=c?this.calculateWrappedLines(E,c):1;return v.createElement("div",{key:C,className:`${y}-textarea-lineNumber-item`,style:{minHeight:`${k*w}px`,lineHeight:`${w}px`}},t+C)}))}render(){const e=this.props,{autosize:t,placeholder:n,onEnterPress:a,onResize:o,resize:r,disabled:l,readonly:c,className:g,showCounter:m,validateStatus:w,maxCount:x,defaultValue:E,style:C,textareaStyle:k,forwardRef:T,getValueLength:H,maxLength:p,minLength:N,showClear:O,borderless:L,autoFocus:I,showLineNumber:h,lineNumberStart:d,lineNumberClassName:b,lineNumberStyle:M,composition:U}=e,$=Qe(e,["autosize","placeholder","onEnterPress","onResize","resize","disabled","readonly","className","showCounter","validateStatus","maxCount","defaultValue","style","textareaStyle","forwardRef","getValueLength","maxLength","minLength","showClear","borderless","autoFocus","showLineNumber","lineNumberStart","lineNumberClassName","lineNumberStyle","composition"]),{isFocus:Z,value:B,minLength:F}=this.state,A=!le(r),je=!t&&A&&["horizontal","both","inline"].includes(r),Re=!t&&A&&["vertical","both","block"].includes(r),_e=D(g,`${y}-textarea-wrapper`,{[`${y}-textarea-borderless`]:L,[`${y}-textarea-wrapper-disabled`]:l,[`${y}-textarea-wrapper-readonly`]:c,[`${y}-textarea-wrapper-${w}`]:!!w,[`${y}-textarea-wrapper-focus`]:Z,[`${y}-textarea-wrapper-withLineNumber`]:h,[`${y}-textarea-wrapper-resizeX`]:je,[`${y}-textarea-wrapper-resizeY`]:Re}),ke=D(`${y}-textarea`,{[`${y}-textarea-disabled`]:l,[`${y}-textarea-readonly`]:c,[`${y}-textarea-autosize`]:$e(t)?le(t==null?void 0:t.maxRows):t,[`${y}-textarea-showClear`]:O}),J=Object.assign({},k||{});t?J.resize="none":A&&(J.resize=r);const ie=!t&&A&&r&&r!=="none",V=Object.assign(Object.assign({},Oe($,"insetLabel","insetLabelId","getValueLength","onClear","showClear","disabledEnterStartNewLine","composition")),{style:J,autoFocus:I||this.props.autofocus,className:ke,disabled:l,readOnly:c,placeholder:n||null,onChange:j=>this.foundation.handleChange(j.target.value,j),onFocus:j=>this.foundation.handleFocus(j),onBlur:j=>this.foundation.handleBlur(j.nativeEvent),onKeyDown:j=>this.foundation.handleKeyDown(j),onScroll:this.handleTextAreaScroll,value:B??"",onCompositionStart:this.foundation.handleCompositionStart,onCompositionEnd:this.foundation.handleCompositionEnd,onCompositionUpdate:this.foundation.handleCompositionUpdate});return K(H)||(V.maxLength=p),F&&(V.minLength=F),v.createElement("div",{className:_e,style:C,onMouseEnter:j=>this.foundation.handleMouseEnter(j),onMouseLeave:j=>this.foundation.handleMouseLeave(j),onClick:j=>this.handleClick(j)},this.renderLineNumbers(),h?v.createElement("div",{className:`${y}-textarea-content`},t?v.createElement(X,{onResize:this.throttledResizeTextarea},v.createElement("textarea",Object.assign({},V,{ref:this.setRef}))):ie?v.createElement(X,{onResize:this.throttledNotifyNativeResize},v.createElement("textarea",Object.assign({},V,{ref:this.setRef}))):v.createElement("textarea",Object.assign({},V,{ref:this.setRef}))):t?v.createElement(X,{onResize:this.throttledResizeTextarea},v.createElement("textarea",Object.assign({},V,{ref:this.setRef}))):ie?v.createElement(X,{onResize:this.throttledNotifyNativeResize},v.createElement("textarea",Object.assign({},V,{ref:this.setRef}))):v.createElement("textarea",Object.assign({},V,{ref:this.setRef})),this.renderClearBtn(),this.renderCounter())}}ae.propTypes={autosize:f.oneOfType([f.bool,f.object]),borderless:f.bool,placeholder:f.string,value:f.string,rows:f.number,cols:f.number,maxCount:f.number,onEnterPress:f.func,validateStatus:f.string,className:f.string,style:f.object,textareaStyle:f.object,showClear:f.bool,onClear:f.func,onResize:f.func,onCompositionStart:f.func,onCompositionEnd:f.func,onCompositionUpdate:f.func,getValueLength:f.func,disabledEnterStartNewLine:f.bool,composition:f.bool,showLineNumber:f.bool,lineNumberStart:f.number,lineNumberClassName:f.string,lineNumberStyle:f.object,resize:f.oneOf(["none","both","horizontal","vertical","block","inline"])};ae.defaultProps={autosize:!1,borderless:!1,rows:4,cols:20,showCounter:!1,showClear:!1,onEnterPress:S,onChange:S,onBlur:S,onFocus:S,onKeyDown:S,onResize:S,onClear:S,onCompositionStart:S,onCompositionEnd:S,onCompositionUpdate:S,composition:!1,showLineNumber:!1,lineNumberStart:1};const Ge=v.forwardRef((s,e)=>v.createElement(ae,Object.assign({},s,{forwardRef:e})));function Je({lines:s,emptyLabel:e="No logs",className:t}){const n=u.useRef(null),a=u.useRef(!0),[o,r]=u.useState(!1);u.useEffect(()=>{const g=n.current;g&&a.current&&(g.scrollTop=g.scrollHeight)},[s]);const l=u.useCallback(g=>{const m=g.currentTarget;a.current=m.scrollHeight-m.scrollTop-m.clientHeight<24},[]),c=u.useCallback(()=>{s!=null&&s.length&&navigator.clipboard.writeText(s.join(` +`)).then(()=>{r(!0),setTimeout(()=>r(!1),1500)})},[s]);return i.jsxs("div",{className:`ga-log-tail ${t??""}`,children:[i.jsx("button",{type:"button",className:`ga-log-tail-copy ${o?"copied":""}`,onClick:c,title:"Copy",children:o?"✓":"⎘"}),i.jsx("div",{ref:n,className:"ga-log-tail-scroll",onScroll:l,children:s===null?i.jsx("p",{className:"ga-log-tail-empty",children:"…"}):s.length===0?i.jsx("p",{className:"ga-log-tail-empty",children:e}):i.jsx("pre",{className:"ga-log-tail-pre",children:s.map((g,m)=>i.jsxs("span",{className:g.startsWith("=====")?"ga-log-separator":void 0,children:[g,` +`]},m))})})]})}function Ce(s,e){Be.getState().notify({kind:e,message:s})}function W(s){Ce(s,"error")}function P(s){Ce(s,"success")}const et=3e3;function ze({serviceId:s,onClose:e}){const{t}=q(),n=z(c=>c.fetchLogs),[a,o]=u.useState(null),r=u.useRef(null),l=u.useCallback(async()=>{if(!s)return;const c=await n(s);o(c)},[s,n]);return u.useEffect(()=>(s&&(o(null),l(),r.current=setInterval(l,et)),()=>{r.current&&(clearInterval(r.current),r.current=null)}),[s,l]),i.jsx(fe,{title:t("modal.channelLogs"),visible:s!==null,onCancel:e,footer:null,width:870,centered:!0,closeOnEsc:!0,className:"ga-log-dialog",children:a===null?i.jsx("div",{className:"ga-services-loading",style:{padding:24},children:i.jsx(G,{})}):i.jsx(Je,{lines:a,emptyLabel:t("ch.logEmpty"),className:"ga-log-modal-body"})})}function tt({visible:s,onClose:e}){const{t}=q(),n=z(x=>x.fetchMykey),a=z(x=>x.saveMykey),o=z(x=>x.mykeyContent),r=z(x=>x.mykeyLoading),[l,c]=u.useState(""),[g,m]=u.useState(!1);u.useEffect(()=>{s&&n()},[s,n]),u.useEffect(()=>{c(o)},[o]);const w=async()=>{m(!0);const x=await a(l);m(!1),x?(P(t("sys.configSaved")),e()):W(t("err.mykeyExport"))};return i.jsx(fe,{title:t("modal.mykeyConfig"),visible:s,onCancel:e,width:870,centered:!0,closeOnEsc:!0,className:"ga-settings-dialog",footer:i.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end",padding:"8px 0"},children:[i.jsx(_,{onClick:e,children:t("common.cancel")}),i.jsx(_,{type:"primary",loading:g,onClick:w,children:t("common.save")})]}),children:r?i.jsx("div",{className:"ga-services-loading",children:i.jsx(G,{})}):i.jsx(Ge,{value:l,onChange:x=>c(x),autosize:{minRows:16,maxRows:30},style:{fontFamily:"var(--font-mono)",fontSize:13}})})}const st="data:image/svg+xml,%3csvg%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eTencent%20QQ%3c/title%3e%3cpath%20d='M21.395%2015.035a40%2040%200%200%200-.803-2.264l-1.079-2.695c.001-.032.014-.562.014-.836C19.526%204.632%2017.351%200%2012%200S4.474%204.632%204.474%209.241c0%20.274.013.804.014.836l-1.08%202.695a39%2039%200%200%200-.802%202.264c-1.021%203.283-.69%204.643-.438%204.673.54.065%202.103-2.472%202.103-2.472%200%201.469.756%203.387%202.394%204.771-.612.188-1.363.479-1.845.835-.434.32-.379.646-.301.778.343.578%205.883.369%207.482.189%201.6.18%207.14.389%207.483-.189.078-.132.132-.458-.301-.778-.483-.356-1.233-.646-1.846-.836%201.637-1.384%202.393-3.302%202.393-4.771%200%200%201.563%202.537%202.103%202.472.251-.03.581-1.39-.438-4.673'/%3e%3c/svg%3e",nt="data:image/svg+xml,%3csvg%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eWeChat%3c/title%3e%3cpath%20d='M8.691%202.188C3.891%202.188%200%205.476%200%209.53c0%202.212%201.17%204.203%203.002%205.55a.59.59%200%200%201%20.213.665l-.39%201.48c-.019.07-.048.141-.048.213%200%20.163.13.295.29.295a.326.326%200%200%200%20.167-.054l1.903-1.114a.864.864%200%200%201%20.717-.098%2010.16%2010.16%200%200%200%202.837.403c.276%200%20.543-.027.811-.05-.857-2.578.157-4.972%201.932-6.446%201.703-1.415%203.882-1.98%205.853-1.838-.576-3.583-4.196-6.348-8.596-6.348zM5.785%205.991c.642%200%201.162.529%201.162%201.18a1.17%201.17%200%200%201-1.162%201.178A1.17%201.17%200%200%201%204.623%207.17c0-.651.52-1.18%201.162-1.18zm5.813%200c.642%200%201.162.529%201.162%201.18a1.17%201.17%200%200%201-1.162%201.178%201.17%201.17%200%200%201-1.162-1.178c0-.651.52-1.18%201.162-1.18zm5.34%202.867c-1.797-.052-3.746.512-5.28%201.786-1.72%201.428-2.687%203.72-1.78%206.22.942%202.453%203.666%204.229%206.884%204.229.826%200%201.622-.12%202.361-.336a.722.722%200%200%201%20.598.082l1.584.926a.272.272%200%200%200%20.14.047c.134%200%20.24-.111.24-.247%200-.06-.023-.12-.038-.177l-.327-1.233a.582.582%200%200%201-.023-.156.49.49%200%200%201%20.201-.398C23.024%2018.48%2024%2016.82%2024%2014.98c0-3.21-2.931-5.837-6.656-6.088V8.89c-.135-.01-.27-.027-.407-.03zm-2.53%203.274c.535%200%20.969.44.969.982a.976.976%200%200%201-.969.983.976.976%200%200%201-.969-.983c0-.542.434-.982.97-.982zm4.844%200c.535%200%20.969.44.969.982a.976.976%200%200%201-.969.983.976.976%200%200%201-.969-.983c0-.542.434-.982.969-.982z'/%3e%3c/svg%3e",at="data:image/svg+xml,%3csvg%20width='46'%20height='46'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_338_13245)'%3e%3cpath%20d='M39.743%200H6.257A6.257%206.257%200%200%200%200%206.257v33.487A6.257%206.257%200%200%200%206.257%2046h33.487A6.257%206.257%200%200%200%2046%2039.743V6.257A6.257%206.257%200%200%200%2039.743%200'%20fill='%23fff'/%3e%3cmask%20id='mask0_338_13245'%20style='mask-type:luminance'%20maskUnits='userSpaceOnUse'%20x='5'%20y='8'%20width='36'%20height='30'%3e%3cpath%20d='M40.514%208.373H5.484v29.262h35.03z'%20fill='%23fff'/%3e%3c/mask%3e%3cg%20mask='url(%23mask0_338_13245)'%3e%3cpath%20d='M28.856%2031.647a.483.483%200%200%200%20.06.738%206.2%206.2%200%200%201%201.911%203.725%202.02%202.02%200%201%200%202.16-2.54%206.2%206.2%200%200%201-3.448-1.922.483.483%200%200%200-.683-.001'%20fill='%23fb6500'/%3e%3c/g%3e%3cmask%20id='mask1_338_13245'%20style='mask-type:luminance'%20maskUnits='userSpaceOnUse'%20x='5'%20y='8'%20width='36'%20height='30'%3e%3cpath%20d='M40.514%208.373H5.484v29.262h35.03z'%20fill='%23fff'/%3e%3c/mask%3e%3cg%20mask='url(%23mask1_338_13245)'%3e%3cpath%20d='M37.057%2028.448a2%202%200%200%200-.58%201.215%206.2%206.2%200%200%201-1.918%203.454.484.484%200%201%200%20.738.616%206.2%206.2%200%200%201%203.725-1.91%202.02%202.02%200%201%200-1.96-3.376z'%20fill='%230082ef'/%3e%3c/g%3e%3cpath%20d='M31.366%2022.75a2.02%202.02%200%200%200%201.215%203.435%206.2%206.2%200%200%201%203.454%201.918.483.483%200%200%200%20.829-.27.48.48%200%200%200-.212-.468%206.2%206.2%200%200%201-1.911-3.726%202.02%202.02%200%200%200-3.375-.889'%20fill='%232dbc00'/%3e%3cmask%20id='mask2_338_13245'%20style='mask-type:luminance'%20maskUnits='userSpaceOnUse'%20x='5'%20y='8'%20width='36'%20height='30'%3e%3cpath%20d='M40.514%208.373H5.484v29.262h35.03z'%20fill='%23fff'/%3e%3c/mask%3e%3cg%20mask='url(%23mask2_338_13245)'%3e%3cpath%20d='m30.374%2025.907-.037.037a6.2%206.2%200%200%201-3.78%201.978%202.007%202.007%200%200%200-.895%203.374%202.02%202.02%200%200%200%203.435-1.216%206.2%206.2%200%200%201%201.923-3.453.484.484%200%200%200-.646-.72'%20fill='%23fc0'/%3e%3c/g%3e%3cmask%20id='mask3_338_13245'%20style='mask-type:luminance'%20maskUnits='userSpaceOnUse'%20x='5'%20y='8'%20width='36'%20height='30'%3e%3cpath%20d='M40.514%208.373H5.484v29.262h35.03z'%20fill='%23fff'/%3e%3c/mask%3e%3cg%20mask='url(%23mask3_338_13245)'%3e%3cpath%20d='M18.17%208.471c-3.624.4-6.908%201.948-9.266%204.367-.938.956-1.7%202.032-2.262%203.182a11.08%2011.08%200%200%200%20.78%2011.188c.64.968%201.693%202.178%202.654%203.037l-.435%203.423-.048.145c-.012.042-.012.09-.018.133l-.012.108.012.11a1.1%201.1%200%200%200%201.657.852h.018l.067-.049%201.04-.52%203.102-1.56a16%2016%200%200%200%204.537.623c1.897.004%203.78-.323%205.564-.968a2.014%202.014%200%200%201-1.373-2.11%2013.7%2013.7%200%200%201-5.721.568l-.309-.042a14%2014%200%200%201-2.056-.43%201.4%201.4%200%200%200-1.1.116l-.085.042-2.552%201.5-.109.066c-.06.036-.09.048-.12.048a.176.176%200%200%201-.164-.181l.097-.393.115-.43.181-.707.212-.787a1.07%201.07%200%200%200-.387-1.19%2011.2%2011.2%200%200%201-2.577-2.686%208.73%208.73%200%200%201-.629-8.818c.46-.92%201.065-1.773%201.815-2.54%201.935-1.997%204.657-3.267%207.669-3.593a14.3%2014.3%200%200%201%203.132%200c2.994.344%205.704%201.633%207.627%203.617a10%2010%200%200%201%201.796%202.551%208.7%208.7%200%200%201%20.901%203.84c0%20.14-.012.279-.018.412a2.015%202.015%200%200%201%202.48.29l.09.109a11%2011%200%200%200-1.1-5.733%2012.3%2012.3%200%200%200-2.238-3.182%2015.18%2015.18%200%200%200-9.229-4.397%2017%2017%200%200%200-3.739-.01'%20fill='%230082ef'/%3e%3c/g%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_338_13245'%3e%3cpath%20fill='%23fff'%20d='M0%200h46v46H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e",it="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='64%2064%20896%20896'%20fill='%233089F2'%3e%3cpath%20d='M573.7%20252.5C422.5%20197.4%20201.3%2096.7%20201.3%2096.7c-15.7-4.1-17.9%2011.1-17.9%2011.1-5%2061.1%2033.6%20160.5%2053.6%20182.8%2019.9%2022.3%20319.1%20113.7%20319.1%20113.7S326%20357.9%20270.5%20341.9c-55.6-16-37.9%2017.8-37.9%2017.8%2011.4%2061.7%2064.9%20131.8%20107.2%20138.4%2042.2%206.6%20220.1%204%20220.1%204s-35.5%204.1-93.2%2011.9c-42.7%205.8-97%2012.5-111.1%2017.8-33.1%2012.5%2024%2062.6%2024%2062.6%2084.7%2076.8%20129.7%2050.5%20129.7%2050.5%2033.3-10.7%2061.4-18.5%2085.2-24.2L565%20743.1h84.6L603%20928l205.3-271.9H700.8l22.3-38.7c.3.5.4.8.4.8S799.8%20496.1%20829%20433.8l.6-1h-.1c5-10.8%208.6-19.7%2010-25.8%2017-71.3-114.5-99.4-265.8-154.5z'%20/%3e%3c/svg%3e",ot="data:image/svg+xml,%3csvg%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eTelegram%3c/title%3e%3cpath%20d='M11.944%200A12%2012%200%200%200%200%2012a12%2012%200%200%200%2012%2012%2012%2012%200%200%200%2012-12A12%2012%200%200%200%2012%200a12%2012%200%200%200-.056%200zm4.962%207.224c.1-.002.321.023.465.14a.506.506%200%200%201%20.171.325c.016.093.036.306.02.472-.18%201.898-.962%206.502-1.36%208.627-.168.9-.499%201.201-.82%201.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184%203.247-2.977%203.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793%201.14-5.061%203.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663%203.498-1.524%205.83-2.529%206.998-3.014%203.332-1.386%204.025-1.627%204.476-1.635z'/%3e%3c/svg%3e",rt="data:image/svg+xml,%3csvg%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eDiscord%3c/title%3e%3cpath%20d='M20.317%204.3698a19.7913%2019.7913%200%2000-4.8851-1.5152.0741.0741%200%2000-.0785.0371c-.211.3753-.4447.8648-.6083%201.2495-1.8447-.2762-3.68-.2762-5.4868%200-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077%200%2000-.0785-.037%2019.7363%2019.7363%200%2000-4.8852%201.515.0699.0699%200%2000-.0321.0277C.5334%209.0458-.319%2013.5799.0992%2018.0578a.0824.0824%200%2000.0312.0561c2.0528%201.5076%204.0413%202.4228%205.9929%203.0294a.0777.0777%200%2000.0842-.0276c.4616-.6304.8731-1.2952%201.226-1.9942a.076.076%200%2000-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077%200%2001-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743%200%2001.0776-.0105c3.9278%201.7933%208.18%201.7933%2012.0614%200a.0739.0739%200%2001.0785.0095c.1202.099.246.1981.3728.2924a.077.077%200%2001-.0066.1276%2012.2986%2012.2986%200%2001-1.873.8914.0766.0766%200%2000-.0407.1067c.3604.698.7719%201.3628%201.225%201.9932a.076.076%200%2000.0842.0286c1.961-.6067%203.9495-1.5219%206.0023-3.0294a.077.077%200%2000.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061%200%2000-.0312-.0286zM8.02%2015.3312c-1.1825%200-2.1569-1.0857-2.1569-2.419%200-1.3332.9555-2.4189%202.157-2.4189%201.2108%200%202.1757%201.0952%202.1568%202.419%200%201.3332-.9555%202.4189-2.1569%202.4189zm7.9748%200c-1.1825%200-2.1569-1.0857-2.1569-2.419%200-1.3332.9554-2.4189%202.1569-2.4189%201.2108%200%202.1757%201.0952%202.1568%202.419%200%201.3332-.946%202.4189-2.1568%202.4189Z'/%3e%3c/svg%3e",lt="/assets/feishu-9hxxyz3-.svg",te={"frontends/qqapp.py":{label:"ch.qq",icon:st},"frontends/wechatapp.py":{label:"ch.wechat",icon:nt},"frontends/wecomapp.py":{label:"ch.wecom",icon:at},"frontends/dingtalkapp.py":{label:"ch.dingtalk",icon:it},"frontends/tgapp.py":{label:"ch.telegram",icon:ot},"frontends/dcapp.py":{label:"ch.discord",icon:rt},"frontends/fsapp.py":{label:"ch.lark",icon:lt}},ct=Object.fromEntries(Object.entries(te).map(([s,e])=>[s,e.label])),me=new Set(Object.keys(ct));function Ne(s){return me.has(s.id)||me.has(s.name)}function ht(){const{t:s}=q(),e=xe(),t=z(p=>p.services),n=z(p=>p.loading),a=z(p=>p.startService),o=z(p=>p.stopService),[r,l]=u.useState(new Set),[c,g]=u.useState(null),[m,w]=u.useState(!1),[x,E]=u.useState(!1),C=t.filter(Ne),k=u.useCallback(async()=>{E(!0);try{await be()}catch{W(s("err.bridge"))}finally{E(!1)}},[s]),T=u.useCallback(async p=>{l(N=>new Set([...N,p.id]));try{p.running?await o(p.id)?P(s("sys.channelStopped")):W(s("err.channelStop")):await a(p.id)?P(s("sys.channelStarted")):W(s("err.channelStart"))}finally{l(N=>{const O=new Set(N);return O.delete(p.id),O})}},[a,o,s]),H=e!=="ready";return H&&C.length===0?i.jsxs("div",{className:"ga-services-loading ga-services-loading--col",children:[i.jsx(Q,{style:{color:"var(--semi-color-warning)",fontSize:24}}),i.jsx("span",{children:s("bridge.notRunning")}),Y()?i.jsx(_,{"data-testid":"bridge-restart",loading:x,onClick:k,theme:"light",type:"primary",children:s("bridge.restart")}):i.jsx("code",{className:"ga-bridge-hint",children:s("bridge.notRunningHint")})]}):n&&C.length===0?i.jsxs("div",{className:"ga-services-loading",children:[i.jsx(G,{size:"large"}),i.jsx("span",{children:s("ch.loading")})]}):!H&&C.length===0?i.jsx(ye,{description:s("ch.empty")}):i.jsxs("div",{className:"ga-channel-list",children:[H&&i.jsxs("div",{className:"ga-offline-banner",children:[i.jsx(Q,{size:"small"}),i.jsx("span",{children:s("bridge.staleData")}),Y()&&i.jsx(_,{"data-testid":"bridge-restart",size:"small",loading:x,onClick:k,theme:"light",children:s("bridge.restart")})]}),C.map(p=>{const N=te[p.id]||te[p.name],O=(N==null?void 0:N.label)||"",L=O?s(O):p.name,I=N==null?void 0:N.icon,h=r.has(p.id);return i.jsxs("div",{className:"ga-channel-card",children:[i.jsxs("div",{className:"ga-channel-card-info",children:[I&&i.jsx("img",{src:I,alt:"",className:"ga-channel-icon"}),i.jsx("span",{className:"ga-channel-card-name",children:L}),i.jsx(ee,{size:"small",color:p.running?"green":"grey",type:"ghost",children:p.running?s("st.online"):s("st.offline")}),p.lastError&&i.jsx(ee,{size:"small",color:"red",type:"ghost",children:p.lastError})]}),i.jsxs("div",{className:"ga-channel-card-actions",children:[i.jsx(_,{size:"small",icon:p.running?i.jsx(Se,{}):i.jsx(we,{}),loading:h,disabled:H,onClick:()=>T(p),type:p.running?"danger":"primary",theme:"light",children:p.running?s("act.stop"):s("act.start")}),i.jsx(_,{size:"small",icon:i.jsx(ve,{}),theme:"borderless",onClick:()=>g(p.id),children:s("act.logs")}),i.jsx(_,{size:"small",icon:i.jsx(De,{}),theme:"borderless",onClick:()=>w(!0),children:s("act.configure")})]})]},p.id)}),i.jsx(ze,{serviceId:c,onClose:()=>g(null)}),i.jsx(tt,{visible:m,onClose:()=>w(!1)})]})}const dt={__bridge__:{labelKey:"proc.bridge",summaryKey:"proc.bridgeSummary",tipKey:"proc.bridgeTip"},"frontends/conductor.py":{labelKey:"proc.conductor",summaryKey:"proc.conductorSummary",tipKey:"proc.conductorTip"},"reflect/scheduler.py":{labelKey:"proc.scheduler",summaryKey:"proc.schedulerSummary",tipKey:"proc.schedulerTip"}};function ut(){const{t:s}=q(),e=xe(),t=z(h=>h.services),n=z(h=>h.loading),a=z(h=>h.startService),o=z(h=>h.stopService),r=z(h=>h.exitBridge),l=z(h=>h.restartService),[c,g]=u.useState(new Set),[m,w]=u.useState(null),[x,E]=u.useState(!1),C=t.filter(h=>!Ne(h)),k=u.useCallback(async()=>{E(!0);try{await be()}catch{W(s("err.bridge"))}finally{E(!1)}},[s]),T=u.useCallback(async(h,d)=>{g(b=>new Set([...b,h]));try{await d()||W(s("err.channelStop"))}finally{g(b=>{const M=new Set(b);return M.delete(h),M})}},[s]),H=u.useCallback(h=>T(h.id,async()=>{const d=await a(h.id);return d&&P(s("sys.channelStarted")),d}),[a,s,T]),p=u.useCallback(h=>T(h.id,async()=>{if(!h.managed){const b=await r();return b&&P(s("sys.bridgeDisconnecting")),b}const d=await o(h.id);return d&&P(s("sys.channelStopped")),d}),[r,o,s,T]),N=u.useCallback(h=>T(h.id,async()=>{const d=await l(h.id);return d&&P(s("sys.channelStarted")),d}),[l,s,T]),O=h=>{const{status:d,errorKey:b,warningKey:M,lastError:U,lastWarning:$}=h,Z={running:{color:"green",text:s("st.running")},offline:{color:"grey",text:s("st.stopped")},error:{color:"red",text:s("st.abnormal")},warning:{color:"amber",text:s("st.warning")}},B=Z[d]??Z.offline,F=b?s(b):M?s(M):U||$||"",A=d==="error"||d==="running"&&M;return i.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6},children:[i.jsx(ee,{size:"small",color:B.color,type:"light",children:B.text}),A&&F&&i.jsx("span",{title:U||$||"",style:{fontSize:11,color:d==="error"?"var(--semi-color-danger)":"var(--semi-color-warning)",maxWidth:200,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:F.length>50?F.slice(0,50)+"…":F})]})},L=e!=="ready",I=[{title:s("svc.colName"),dataIndex:"name",key:"name",render:(h,d)=>{const b=dt[d.id],M=s(b?b.labelKey:"proc.runtimeComponent"),U=s(b?b.summaryKey:"proc.runtimeComponentSummary"),$=s(b?b.tipKey:"proc.runtimeComponentTip");return i.jsx(Me,{content:$,position:"topLeft",children:i.jsxs("span",{className:"ga-service-identity",children:[i.jsx("span",{className:"ga-service-identity-name",children:M}),i.jsx("span",{className:"ga-service-identity-summary",children:U})]})})}},{title:s("svc.colStatus"),dataIndex:"status",key:"status",width:220,render:(h,d)=>O(d)},{title:s("svc.colPid"),dataIndex:"pid",key:"pid",width:80,render:(h,d)=>i.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12},children:d.pid??"—"})},{title:s("svc.colMemory"),dataIndex:"memMb",key:"memMb",width:100,render:(h,d)=>i.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12},children:d.memMb!=null?d.memMb.toFixed(1):"—"})},{title:s("svc.colCpu"),dataIndex:"cpuPct",key:"cpuPct",width:90,render:(h,d)=>i.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12},children:d.cpuPct!=null?d.cpuPct.toFixed(1):"—"})},{title:s("svc.colActions"),key:"actions",width:200,render:(h,d)=>{const b=c.has(d.id);return i.jsxs("div",{className:"ga-status-actions",children:[d.running?i.jsxs(i.Fragment,{children:[d.managed&&i.jsx(_,{size:"small",icon:i.jsx(Ae,{}),theme:"borderless",loading:b,disabled:L,onClick:()=>N(d),children:s("act.restart")}),i.jsx(_,{size:"small",icon:d.managed?i.jsx(Se,{}):i.jsx(Ke,{}),theme:"borderless",type:"danger",loading:b,disabled:L,onClick:()=>p(d),children:d.managed?s("act.stop"):s("act.disconnect")})]}):d.managed&&i.jsx(_,{size:"small",icon:i.jsx(we,{}),theme:"borderless",type:"primary",loading:b,disabled:L,onClick:()=>H(d),children:s("act.start")}),i.jsx(_,{size:"small",icon:i.jsx(ve,{}),theme:"borderless",onClick:()=>w(d.id),children:s("act.logs")})]})}}];return L&&C.length===0?i.jsxs("div",{className:"ga-services-loading ga-services-loading--col",children:[i.jsx(Q,{style:{color:"var(--semi-color-warning)",fontSize:24}}),i.jsx("span",{children:s("bridge.notRunning")}),Y()?i.jsx(_,{"data-testid":"bridge-restart",loading:x,onClick:k,theme:"light",type:"primary",children:s("bridge.restart")}):i.jsx("code",{className:"ga-bridge-hint",children:s("bridge.notRunningHint")})]}):n&&C.length===0?i.jsx("div",{className:"ga-services-loading",children:i.jsx(G,{size:"large"})}):!L&&C.length===0?i.jsx(ye,{description:s("svc.empty")}):i.jsxs("div",{className:"ga-status-panel",children:[L&&i.jsxs("div",{className:"ga-offline-banner",children:[i.jsx(Q,{size:"small"}),i.jsx("span",{children:s("bridge.staleData")}),Y()&&i.jsx(_,{"data-testid":"bridge-restart",size:"small",loading:x,onClick:k,theme:"light",children:s("bridge.restart")})]}),i.jsx(He,{columns:I,dataSource:C,rowKey:"id",pagination:!1,size:"small",bordered:!1}),i.jsx(ze,{serviceId:m,onClose:()=>w(null)})]})}function vt(){const{t:s}=q(),e=z(a=>a.fetchServices),t=de(a=>a.servicesTab),n=de(a=>a.setServicesTab);return u.useEffect(()=>{e()},[e]),i.jsx("div",{className:"ga-services-page",children:i.jsxs(Ve,{type:"line",activeKey:t,onChange:n,children:[i.jsx(ce,{tab:s("nav.channels"),itemKey:"channels",children:i.jsx(ht,{})}),i.jsx(ce,{tab:s("nav.status"),itemKey:"status",children:i.jsx(ut,{})})]})})}export{vt as ServicesPage}; diff --git a/frontends/desktop/dist/assets/SummaryPart-D48OOFSQ.js b/frontends/desktop/dist/assets/SummaryPart-D48OOFSQ.js new file mode 100644 index 000000000..d6c64685d --- /dev/null +++ b/frontends/desktop/dist/assets/SummaryPart-D48OOFSQ.js @@ -0,0 +1 @@ +import{b as s,aj as r}from"./tauri-compat-tfiFK9EG.js";import{M as o,S as m,r as t,a as e,b as n,p}from"./markdown-preprocess-Bvg4n8KE.js";import{S as i,U as c}from"./main-Knf6L_en.js";import"./index-Bpi3BHKj.js";import"./WindowsTitlebar-CrkUa1UM.js";const u={...c},O=s.memo(function({content:a}){return r.jsx("div",{"data-slot":"summary-block",children:r.jsx(o,{remarkPlugins:[e,n],rehypePlugins:[[t,u]],components:m,urlTransform:i,children:p(a)})})});export{O as SummaryPart}; diff --git a/frontends/desktop/dist/assets/TokenPage-C6-RA6yj.js b/frontends/desktop/dist/assets/TokenPage-C6-RA6yj.js new file mode 100644 index 000000000..95d478df9 --- /dev/null +++ b/frontends/desktop/dist/assets/TokenPage-C6-RA6yj.js @@ -0,0 +1,2 @@ +import{aA as F,aB as L,aC as ee,aD as ze,aE as Xe,aF as wt,aG as Vr,c as Dt,b as J,aH as Br,aI as Gr,B,d as Yi,e as Li,x as $i,aJ as Hi,g as ia,aK as Ui,_ as st,f as He,ae as Be,w as qi,i as Wi,aL as De,N as oe,j as ji,R as b,k as Ue,l as Y,P as p,q as We,h as Q,aM as Vi,aN as Bi,M as K,aO as Gi,aP as zi,ay as Xi,X as zr,T as Zi,O as Xr,s as Qi,aQ as Ki,ax as Ji,aj as A}from"./tauri-compat-tfiFK9EG.js";import{_ as es,c as M,V as ts,i as Sn,d as ns,e as Et,I as Zr,f as as,r as rs,g as rt,h as Un,j as Qn,k as is,l as ss,T as os,a as us,b as Ta}from"./index-DwVcZP0M.js";import{s as Qr,a as Kr,F as gt,I as ls,j as cs,k as ds,B as Jr,C as fs,l as hs,m as wa,b as lt,n as ps,T as ms,E as ei,g as gs}from"./main-Knf6L_en.js";import{a as pt,B as yt}from"./index-Bpi3BHKj.js";import{A as vs}from"./Animation-TKQfYYOo.js";import{B as Da}from"./index-DpGuh58E.js";import{S as ys}from"./index-D_sWIqse.js";import"./WindowsTitlebar-CrkUa1UM.js";function Le(s,e){F(2,arguments);var t=L(s),n=ee(e);if(isNaN(n))return new Date(NaN);if(!n)return t;var a=t.getDate(),i=new Date(t.getTime());i.setMonth(t.getMonth()+n+1,0);var r=i.getDate();return a>=r?i:(t.setFullYear(i.getFullYear(),i.getMonth(),a),t)}function Ts(s,e){F(2,arguments);var t=L(s).getTime(),n=ee(e);return new Date(t+n)}function ti(s){var e=new Date(Date.UTC(s.getFullYear(),s.getMonth(),s.getDate(),s.getHours(),s.getMinutes(),s.getSeconds(),s.getMilliseconds()));return e.setUTCFullYear(s.getFullYear()),s.getTime()-e.getTime()}function Kn(s){F(1,arguments);var e=L(s);return e.setHours(0,0,0,0),e}function xn(s,e){F(2,arguments);var t=ee(e);return Le(s,t*12)}var sa=6e4,oa=36e5,ws=1e3;function ua(s,e){F(2,arguments);var t=Kn(s),n=Kn(e);return t.getTime()===n.getTime()}function Jn(s){return F(1,arguments),s instanceof Date||ze(s)==="object"&&Object.prototype.toString.call(s)==="[object Date]"}function Ce(s){if(F(1,arguments),!Jn(s)&&typeof s!="number")return!1;var e=L(s);return!isNaN(Number(e))}function je(s,e){F(2,arguments);var t=L(s),n=L(e),a=t.getFullYear()-n.getFullYear(),i=t.getMonth()-n.getMonth();return a*12+i}function Ds(s,e){F(2,arguments);var t=L(s),n=L(e);return t.getFullYear()-n.getFullYear()}function bs(s){F(1,arguments);var e=L(s);return e.setDate(1),e.setHours(0,0,0,0),e}function ni(s,e){F(2,arguments);var t=ee(e);return Ts(s,-t)}var _s=864e5;function Cs(s){F(1,arguments);var e=L(s),t=e.getTime();e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0);var n=e.getTime(),a=t-n;return Math.floor(a/_s)+1}function ot(s){F(1,arguments);var e=1,t=L(s),n=t.getUTCDay(),a=(n=a.getTime()?t+1:e.getTime()>=r.getTime()?t:t-1}function Is(s){F(1,arguments);var e=ai(s),t=new Date(0);t.setUTCFullYear(e,0,4),t.setUTCHours(0,0,0,0);var n=ot(t);return n}var Rs=6048e5;function ri(s){F(1,arguments);var e=L(s),t=ot(e).getTime()-Is(e).getTime();return Math.round(t/Rs)+1}function la(s,e){var t,n,a,i,r,u,o,l;F(1,arguments);var c=L(s),d=c.getUTCFullYear(),f=wt(),h=ee((t=(n=(a=(i=e==null?void 0:e.firstWeekContainsDate)!==null&&i!==void 0?i:e==null||(r=e.locale)===null||r===void 0||(u=r.options)===null||u===void 0?void 0:u.firstWeekContainsDate)!==null&&a!==void 0?a:f.firstWeekContainsDate)!==null&&n!==void 0?n:(o=f.locale)===null||o===void 0||(l=o.options)===null||l===void 0?void 0:l.firstWeekContainsDate)!==null&&t!==void 0?t:1);if(!(h>=1&&h<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var v=new Date(0);v.setUTCFullYear(d+1,0,h),v.setUTCHours(0,0,0,0);var w=Xe(v,e),m=new Date(0);m.setUTCFullYear(d,0,h),m.setUTCHours(0,0,0,0);var g=Xe(m,e);return c.getTime()>=w.getTime()?d+1:c.getTime()>=g.getTime()?d:d-1}function Ps(s,e){var t,n,a,i,r,u,o,l;F(1,arguments);var c=wt(),d=ee((t=(n=(a=(i=e==null?void 0:e.firstWeekContainsDate)!==null&&i!==void 0?i:e==null||(r=e.locale)===null||r===void 0||(u=r.options)===null||u===void 0?void 0:u.firstWeekContainsDate)!==null&&a!==void 0?a:c.firstWeekContainsDate)!==null&&n!==void 0?n:(o=c.locale)===null||o===void 0||(l=o.options)===null||l===void 0?void 0:l.firstWeekContainsDate)!==null&&t!==void 0?t:1),f=la(s,e),h=new Date(0);h.setUTCFullYear(f,0,d),h.setUTCHours(0,0,0,0);var v=Xe(h,e);return v}var Es=6048e5;function ii(s,e){F(1,arguments);var t=L(s),n=Xe(t,e).getTime()-Ps(t,e).getTime();return Math.round(n/Es)+1}function z(s,e){for(var t=s<0?"-":"",n=Math.abs(s).toString();n.length0?n:1-n;return z(t==="yy"?a%100:a,t.length)},M:function(e,t){var n=e.getUTCMonth();return t==="M"?String(n+1):z(n+1,2)},d:function(e,t){return z(e.getUTCDate(),t.length)},a:function(e,t){var n=e.getUTCHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];case"aaaa":default:return n==="am"?"a.m.":"p.m."}},h:function(e,t){return z(e.getUTCHours()%12||12,t.length)},H:function(e,t){return z(e.getUTCHours(),t.length)},m:function(e,t){return z(e.getUTCMinutes(),t.length)},s:function(e,t){return z(e.getUTCSeconds(),t.length)},S:function(e,t){var n=t.length,a=e.getUTCMilliseconds(),i=Math.floor(a*Math.pow(10,n-3));return z(i,t.length)}},Je={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Os={G:function(e,t,n){var a=e.getUTCFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(a,{width:"abbreviated"});case"GGGGG":return n.era(a,{width:"narrow"});case"GGGG":default:return n.era(a,{width:"wide"})}},y:function(e,t,n){if(t==="yo"){var a=e.getUTCFullYear(),i=a>0?a:1-a;return n.ordinalNumber(i,{unit:"year"})}return Fe.y(e,t)},Y:function(e,t,n,a){var i=la(e,a),r=i>0?i:1-i;if(t==="YY"){var u=r%100;return z(u,2)}return t==="Yo"?n.ordinalNumber(r,{unit:"year"}):z(r,t.length)},R:function(e,t){var n=ai(e);return z(n,t.length)},u:function(e,t){var n=e.getUTCFullYear();return z(n,t.length)},Q:function(e,t,n){var a=Math.ceil((e.getUTCMonth()+1)/3);switch(t){case"Q":return String(a);case"QQ":return z(a,2);case"Qo":return n.ordinalNumber(a,{unit:"quarter"});case"QQQ":return n.quarter(a,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(a,{width:"narrow",context:"formatting"});case"QQQQ":default:return n.quarter(a,{width:"wide",context:"formatting"})}},q:function(e,t,n){var a=Math.ceil((e.getUTCMonth()+1)/3);switch(t){case"q":return String(a);case"qq":return z(a,2);case"qo":return n.ordinalNumber(a,{unit:"quarter"});case"qqq":return n.quarter(a,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(a,{width:"narrow",context:"standalone"});case"qqqq":default:return n.quarter(a,{width:"wide",context:"standalone"})}},M:function(e,t,n){var a=e.getUTCMonth();switch(t){case"M":case"MM":return Fe.M(e,t);case"Mo":return n.ordinalNumber(a+1,{unit:"month"});case"MMM":return n.month(a,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(a,{width:"narrow",context:"formatting"});case"MMMM":default:return n.month(a,{width:"wide",context:"formatting"})}},L:function(e,t,n){var a=e.getUTCMonth();switch(t){case"L":return String(a+1);case"LL":return z(a+1,2);case"Lo":return n.ordinalNumber(a+1,{unit:"month"});case"LLL":return n.month(a,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(a,{width:"narrow",context:"standalone"});case"LLLL":default:return n.month(a,{width:"wide",context:"standalone"})}},w:function(e,t,n,a){var i=ii(e,a);return t==="wo"?n.ordinalNumber(i,{unit:"week"}):z(i,t.length)},I:function(e,t,n){var a=ri(e);return t==="Io"?n.ordinalNumber(a,{unit:"week"}):z(a,t.length)},d:function(e,t,n){return t==="do"?n.ordinalNumber(e.getUTCDate(),{unit:"date"}):Fe.d(e,t)},D:function(e,t,n){var a=Cs(e);return t==="Do"?n.ordinalNumber(a,{unit:"dayOfYear"}):z(a,t.length)},E:function(e,t,n){var a=e.getUTCDay();switch(t){case"E":case"EE":case"EEE":return n.day(a,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(a,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(a,{width:"short",context:"formatting"});case"EEEE":default:return n.day(a,{width:"wide",context:"formatting"})}},e:function(e,t,n,a){var i=e.getUTCDay(),r=(i-a.weekStartsOn+8)%7||7;switch(t){case"e":return String(r);case"ee":return z(r,2);case"eo":return n.ordinalNumber(r,{unit:"day"});case"eee":return n.day(i,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(i,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(i,{width:"short",context:"formatting"});case"eeee":default:return n.day(i,{width:"wide",context:"formatting"})}},c:function(e,t,n,a){var i=e.getUTCDay(),r=(i-a.weekStartsOn+8)%7||7;switch(t){case"c":return String(r);case"cc":return z(r,t.length);case"co":return n.ordinalNumber(r,{unit:"day"});case"ccc":return n.day(i,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(i,{width:"narrow",context:"standalone"});case"cccccc":return n.day(i,{width:"short",context:"standalone"});case"cccc":default:return n.day(i,{width:"wide",context:"standalone"})}},i:function(e,t,n){var a=e.getUTCDay(),i=a===0?7:a;switch(t){case"i":return String(i);case"ii":return z(i,t.length);case"io":return n.ordinalNumber(i,{unit:"day"});case"iii":return n.day(a,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(a,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(a,{width:"short",context:"formatting"});case"iiii":default:return n.day(a,{width:"wide",context:"formatting"})}},a:function(e,t,n){var a=e.getUTCHours(),i=a/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(i,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(i,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(i,{width:"narrow",context:"formatting"});case"aaaa":default:return n.dayPeriod(i,{width:"wide",context:"formatting"})}},b:function(e,t,n){var a=e.getUTCHours(),i;switch(a===12?i=Je.noon:a===0?i=Je.midnight:i=a/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(i,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(i,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(i,{width:"narrow",context:"formatting"});case"bbbb":default:return n.dayPeriod(i,{width:"wide",context:"formatting"})}},B:function(e,t,n){var a=e.getUTCHours(),i;switch(a>=17?i=Je.evening:a>=12?i=Je.afternoon:a>=4?i=Je.morning:i=Je.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(i,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(i,{width:"narrow",context:"formatting"});case"BBBB":default:return n.dayPeriod(i,{width:"wide",context:"formatting"})}},h:function(e,t,n){if(t==="ho"){var a=e.getUTCHours()%12;return a===0&&(a=12),n.ordinalNumber(a,{unit:"hour"})}return Fe.h(e,t)},H:function(e,t,n){return t==="Ho"?n.ordinalNumber(e.getUTCHours(),{unit:"hour"}):Fe.H(e,t)},K:function(e,t,n){var a=e.getUTCHours()%12;return t==="Ko"?n.ordinalNumber(a,{unit:"hour"}):z(a,t.length)},k:function(e,t,n){var a=e.getUTCHours();return a===0&&(a=24),t==="ko"?n.ordinalNumber(a,{unit:"hour"}):z(a,t.length)},m:function(e,t,n){return t==="mo"?n.ordinalNumber(e.getUTCMinutes(),{unit:"minute"}):Fe.m(e,t)},s:function(e,t,n){return t==="so"?n.ordinalNumber(e.getUTCSeconds(),{unit:"second"}):Fe.s(e,t)},S:function(e,t){return Fe.S(e,t)},X:function(e,t,n,a){var i=a._originalDate||e,r=i.getTimezoneOffset();if(r===0)return"Z";switch(t){case"X":return _a(r);case"XXXX":case"XX":return Ve(r);case"XXXXX":case"XXX":default:return Ve(r,":")}},x:function(e,t,n,a){var i=a._originalDate||e,r=i.getTimezoneOffset();switch(t){case"x":return _a(r);case"xxxx":case"xx":return Ve(r);case"xxxxx":case"xxx":default:return Ve(r,":")}},O:function(e,t,n,a){var i=a._originalDate||e,r=i.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+ba(r,":");case"OOOO":default:return"GMT"+Ve(r,":")}},z:function(e,t,n,a){var i=a._originalDate||e,r=i.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+ba(r,":");case"zzzz":default:return"GMT"+Ve(r,":")}},t:function(e,t,n,a){var i=a._originalDate||e,r=Math.floor(i.getTime()/1e3);return z(r,t.length)},T:function(e,t,n,a){var i=a._originalDate||e,r=i.getTime();return z(r,t.length)}};function ba(s,e){var t=s>0?"-":"+",n=Math.abs(s),a=Math.floor(n/60),i=n%60;if(i===0)return t+String(a);var r=e;return t+String(a)+r+z(i,2)}function _a(s,e){if(s%60===0){var t=s>0?"-":"+";return t+z(Math.abs(s)/60,2)}return Ve(s,e)}function Ve(s,e){var t=e||"",n=s>0?"-":"+",a=Math.abs(s),i=z(Math.floor(a/60),2),r=z(a%60,2);return n+i+t+r}var Ca=function(e,t){switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});case"PPPP":default:return t.date({width:"full"})}},si=function(e,t){switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});case"pppp":default:return t.time({width:"full"})}},Ss=function(e,t){var n=e.match(/(P+)(p+)?/)||[],a=n[1],i=n[2];if(!i)return Ca(e,t);var r;switch(a){case"P":r=t.dateTime({width:"short"});break;case"PP":r=t.dateTime({width:"medium"});break;case"PPP":r=t.dateTime({width:"long"});break;case"PPPP":default:r=t.dateTime({width:"full"});break}return r.replace("{{date}}",Ca(a,t)).replace("{{time}}",si(i,t))},ea={p:si,P:Ss},xs=["D","DD"],Ms=["YY","YYYY"];function oi(s){return xs.indexOf(s)!==-1}function ui(s){return Ms.indexOf(s)!==-1}function Mn(s,e,t){if(s==="YYYY")throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(e,"`) for formatting years to the input `").concat(t,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if(s==="YY")throw new RangeError("Use `yy` instead of `YY` (in `".concat(e,"`) for formatting years to the input `").concat(t,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if(s==="D")throw new RangeError("Use `d` instead of `D` (in `".concat(e,"`) for formatting days of the month to the input `").concat(t,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if(s==="DD")throw new RangeError("Use `dd` instead of `DD` (in `".concat(e,"`) for formatting days of the month to the input `").concat(t,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"))}var ks=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Ns=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,As=/^'([^]*?)'?$/,Fs=/''/g,Ys=/[a-zA-Z]/;function X(s,e,t){var n,a,i,r,u,o,l,c,d,f,h,v,w,m,g,T,y,D;F(2,arguments);var _=String(e),I=wt(),x=(n=(a=t==null?void 0:t.locale)!==null&&a!==void 0?a:I.locale)!==null&&n!==void 0?n:Vr,R=ee((i=(r=(u=(o=t==null?void 0:t.firstWeekContainsDate)!==null&&o!==void 0?o:t==null||(l=t.locale)===null||l===void 0||(c=l.options)===null||c===void 0?void 0:c.firstWeekContainsDate)!==null&&u!==void 0?u:I.firstWeekContainsDate)!==null&&r!==void 0?r:(d=I.locale)===null||d===void 0||(f=d.options)===null||f===void 0?void 0:f.firstWeekContainsDate)!==null&&i!==void 0?i:1);if(!(R>=1&&R<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var C=ee((h=(v=(w=(m=t==null?void 0:t.weekStartsOn)!==null&&m!==void 0?m:t==null||(g=t.locale)===null||g===void 0||(T=g.options)===null||T===void 0?void 0:T.weekStartsOn)!==null&&w!==void 0?w:I.weekStartsOn)!==null&&v!==void 0?v:(y=I.locale)===null||y===void 0||(D=y.options)===null||D===void 0?void 0:D.weekStartsOn)!==null&&h!==void 0?h:0);if(!(C>=0&&C<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(!x.localize)throw new RangeError("locale must contain localize property");if(!x.formatLong)throw new RangeError("locale must contain formatLong property");var E=L(s);if(!Ce(E))throw new RangeError("Invalid time value");var O=ti(E),k=ni(E,O),U={firstWeekContainsDate:R,weekStartsOn:C,locale:x,_originalDate:E},se=_.match(Ns).map(function(G){var Z=G[0];if(Z==="p"||Z==="P"){var ce=ea[Z];return ce(G,x.formatLong)}return G}).join("").match(ks).map(function(G){if(G==="''")return"'";var Z=G[0];if(Z==="'")return Ls(G);var ce=Os[Z];if(ce)return!(t!=null&&t.useAdditionalWeekYearTokens)&&ui(G)&&Mn(G,e,String(s)),!(t!=null&&t.useAdditionalDayOfYearTokens)&&oi(G)&&Mn(G,e,String(s)),ce(k,G,x.localize,U);if(Z.match(Ys))throw new RangeError("Format string contains an unescaped latin alphabet character `"+Z+"`");return G}).join("");return se}function Ls(s){var e=s.match(As);return e?e[1].replace(Fs,"'"):s}function $s(s,e){if(s==null)throw new TypeError("assign requires that input parameter not be null or undefined");for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(s[t]=e[t]);return s}function li(s){F(1,arguments);var e=L(s),t=e.getFullYear(),n=e.getMonth(),a=new Date(0);return a.setFullYear(t,n+1,0),a.setHours(0,0,0,0),a.getDate()}function Hs(s){F(1,arguments);var e=L(s),t=e.getMonth();return e.setFullYear(e.getFullYear(),t+1,0),e.setHours(0,0,0,0),e}function Us(s,e){F(2,arguments);var t=L(s),n=L(e);return t.getTime()>n.getTime()}function ci(s,e){F(2,arguments);var t=L(s),n=L(e);return t.getTime()s.length)&&(e=s.length);for(var t=0,n=Array(e);t=s.length?{done:!0}:{done:!1,value:s[n++]}},e:function(l){throw l},f:a}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var i,r=!0,u=!1;return{s:function(){t=t.call(s)},n:function(){var l=t.next();return r=l.done,l},e:function(l){u=!0,i=l},f:function(){try{r||t.return==null||t.return()}finally{if(u)throw i}}}}function q(s,e){if(typeof e!="function"&&e!==null)throw new TypeError("Super expression must either be null or a function");s.prototype=Object.create(e&&e.prototype,{constructor:{value:s,writable:!0,configurable:!0}}),Object.defineProperty(s,"prototype",{writable:!1}),e&&es(s,e)}function Nn(s){return Nn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Nn(s)}function di(){try{var s=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(di=function(){return!!s})()}function Ws(s,e){if(e&&(ze(e)=="object"||typeof e=="function"))return e;if(e!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return M(s)}function W(s){var e=di();return function(){var t,n=Nn(s);if(e){var a=Nn(this).constructor;t=Reflect.construct(n,arguments,a)}else t=n.apply(this,arguments);return Ws(this,t)}}function $(s,e){if(!(s instanceof e))throw new TypeError("Cannot call a class as a function")}function js(s,e){if(ze(s)!="object"||!s)return s;var t=s[Symbol.toPrimitive];if(t!==void 0){var n=t.call(s,e);if(ze(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(s)}function fi(s){var e=js(s,"string");return ze(e)=="symbol"?e:e+""}function Vs(s,e){for(var t=0;t0,n=t?e:1-e,a;if(n<=50)a=s||100;else{var i=n+50,r=Math.floor(i/100)*100,u=s>=i%100;a=s+r-(u?100:0)}return t?a:1-a}function gi(s){return s%400===0||s%4===0&&s%100!==0}var Zs=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r0}},{key:"set",value:function(a,i,r){var u=a.getUTCFullYear();if(r.isTwoDigitYear){var o=mi(r.year,u);return a.setUTCFullYear(o,0,1),a.setUTCHours(0,0,0,0),a}var l=!("era"in i)||i.era===1?r.year:1-r.year;return a.setUTCFullYear(l,0,1),a.setUTCHours(0,0,0,0),a}}]),t})(j),Qs=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r0}},{key:"set",value:function(a,i,r,u){var o=la(a,u);if(r.isTwoDigitYear){var l=mi(r.year,o);return a.setUTCFullYear(l,0,u.firstWeekContainsDate),a.setUTCHours(0,0,0,0),Xe(a,u)}var c=!("era"in i)||i.era===1?r.year:1-r.year;return a.setUTCFullYear(c,0,u.firstWeekContainsDate),a.setUTCHours(0,0,0,0),Xe(a,u)}}]),t})(j),Ks=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=1&&i<=4}},{key:"set",value:function(a,i,r){return a.setUTCMonth((r-1)*3,1),a.setUTCHours(0,0,0,0),a}}]),t})(j),to=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=1&&i<=4}},{key:"set",value:function(a,i,r){return a.setUTCMonth((r-1)*3,1),a.setUTCHours(0,0,0,0),a}}]),t})(j),no=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=0&&i<=11}},{key:"set",value:function(a,i,r){return a.setUTCMonth(r,1),a.setUTCHours(0,0,0,0),a}}]),t})(j),ao=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=0&&i<=11}},{key:"set",value:function(a,i,r){return a.setUTCMonth(r,1),a.setUTCHours(0,0,0,0),a}}]),t})(j);function ro(s,e,t){F(2,arguments);var n=L(s),a=ee(e),i=ii(n,t)-a;return n.setUTCDate(n.getUTCDate()-i*7),n}var io=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=1&&i<=53}},{key:"set",value:function(a,i,r,u){return Xe(ro(a,r,u),u)}}]),t})(j);function so(s,e){F(2,arguments);var t=L(s),n=ee(e),a=ri(t)-n;return t.setUTCDate(t.getUTCDate()-a*7),t}var oo=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=1&&i<=53}},{key:"set",value:function(a,i,r){return ot(so(a,r))}}]),t})(j),uo=[31,28,31,30,31,30,31,31,30,31,30,31],lo=[31,29,31,30,31,30,31,31,30,31,30,31],co=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=1&&i<=lo[o]:i>=1&&i<=uo[o]}},{key:"set",value:function(a,i,r){return a.setUTCDate(r),a.setUTCHours(0,0,0,0),a}}]),t})(j),fo=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=1&&i<=366:i>=1&&i<=365}},{key:"set",value:function(a,i,r){return a.setUTCMonth(0,r),a.setUTCHours(0,0,0,0),a}}]),t})(j);function da(s,e,t){var n,a,i,r,u,o,l,c;F(2,arguments);var d=wt(),f=ee((n=(a=(i=(r=t==null?void 0:t.weekStartsOn)!==null&&r!==void 0?r:t==null||(u=t.locale)===null||u===void 0||(o=u.options)===null||o===void 0?void 0:o.weekStartsOn)!==null&&i!==void 0?i:d.weekStartsOn)!==null&&a!==void 0?a:(l=d.locale)===null||l===void 0||(c=l.options)===null||c===void 0?void 0:c.weekStartsOn)!==null&&n!==void 0?n:0);if(!(f>=0&&f<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var h=L(s),v=ee(e),w=h.getUTCDay(),m=v%7,g=(m+7)%7,T=(g=0&&i<=6}},{key:"set",value:function(a,i,r,u){return a=da(a,r,u),a.setUTCHours(0,0,0,0),a}}]),t})(j),po=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=0&&i<=6}},{key:"set",value:function(a,i,r,u){return a=da(a,r,u),a.setUTCHours(0,0,0,0),a}}]),t})(j),mo=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=0&&i<=6}},{key:"set",value:function(a,i,r,u){return a=da(a,r,u),a.setUTCHours(0,0,0,0),a}}]),t})(j);function go(s,e){F(2,arguments);var t=ee(e);t%7===0&&(t=t-7);var n=1,a=L(s),i=a.getUTCDay(),r=t%7,u=(r+7)%7,o=(u=1&&i<=7}},{key:"set",value:function(a,i,r){return a=go(a,r),a.setUTCHours(0,0,0,0),a}}]),t})(j),yo=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=1&&i<=12}},{key:"set",value:function(a,i,r){var u=a.getUTCHours()>=12;return u&&r<12?a.setUTCHours(r+12,0,0,0):!u&&r===12?a.setUTCHours(0,0,0,0):a.setUTCHours(r,0,0,0),a}}]),t})(j),bo=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=0&&i<=23}},{key:"set",value:function(a,i,r){return a.setUTCHours(r,0,0,0),a}}]),t})(j),_o=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=0&&i<=11}},{key:"set",value:function(a,i,r){var u=a.getUTCHours()>=12;return u&&r<12?a.setUTCHours(r+12,0,0,0):a.setUTCHours(r,0,0,0),a}}]),t})(j),Co=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=1&&i<=24}},{key:"set",value:function(a,i,r){var u=r<=24?r%24:r;return a.setUTCHours(u,0,0,0),a}}]),t})(j),Io=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=0&&i<=59}},{key:"set",value:function(a,i,r){return a.setUTCMinutes(r,0,0),a}}]),t})(j),Ro=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=0&&i<=59}},{key:"set",value:function(a,i,r){return a.setUTCSeconds(r,0),a}}]),t})(j),Po=(function(s){q(t,s);var e=W(t);function t(){var n;$(this,t);for(var a=arguments.length,i=new Array(a),r=0;r=1&&E<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var O=ee((v=(w=(m=(g=n==null?void 0:n.weekStartsOn)!==null&&g!==void 0?g:n==null||(T=n.locale)===null||T===void 0||(y=T.options)===null||y===void 0?void 0:y.weekStartsOn)!==null&&m!==void 0?m:R.weekStartsOn)!==null&&w!==void 0?w:(D=R.locale)===null||D===void 0||(_=D.options)===null||_===void 0?void 0:_.weekStartsOn)!==null&&v!==void 0?v:0);if(!(O>=0&&O<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(x==="")return I===""?L(t):new Date(NaN);var k={firstWeekContainsDate:E,weekStartsOn:O,locale:C},U=[new zs],se=x.match(No).map(function(te){var V=te[0];if(V in ea){var fe=ea[V];return fe(te,C.formatLong)}return te}).join("").match(ko),G=[],Z=Ra(se),ce;try{var me=function(){var V=ce.value;!(n!=null&&n.useAdditionalWeekYearTokens)&&ui(V)&&Mn(V,x,s),!(n!=null&&n.useAdditionalDayOfYearTokens)&&oi(V)&&Mn(V,x,s);var fe=V[0],Me=Mo[fe];if(Me){var Ct=Me.incompatibleTokens;if(Array.isArray(Ct)){var It=G.find(function(Rt){return Ct.includes(Rt.token)||Rt.token===fe});if(It)throw new RangeError("The format string mustn't contain `".concat(It.fullToken,"` and `").concat(V,"` at the same time"))}else if(Me.incompatibleTokens==="*"&&G.length>0)throw new RangeError("The format string mustn't contain `".concat(V,"` and any other token at the same time"));G.push({token:fe,fullToken:V});var ct=Me.run(I,V,C.match,k);if(!ct)return{v:new Date(NaN)};U.push(ct.setter),I=ct.rest}else{if(fe.match(Lo))throw new RangeError("Format string contains an unescaped latin alphabet character `"+fe+"`");if(V==="''"?V="'":fe==="'"&&(V=Ho(V)),I.indexOf(V)===0)I=I.slice(V.length);else return{v:new Date(NaN)}}};for(Z.s();!(ce=Z.n()).done;){var he=me();if(ze(he)==="object")return he.v}}catch(te){Z.e(te)}finally{Z.f()}if(I.length>0&&Yo.test(I))return new Date(NaN);var qe=U.map(function(te){return te.priority}).sort(function(te,V){return V-te}).filter(function(te,V,fe){return fe.indexOf(te)===V}).map(function(te){return U.filter(function(V){return V.priority===te}).sort(function(V,fe){return fe.subPriority-V.subPriority})}).map(function(te){return te[0]}),Ie=L(t);if(isNaN(Ie.getTime()))return new Date(NaN);var ge=ni(Ie,ti(Ie)),xe={},Re=Ra(qe),Ke;try{for(Re.s();!(Ke=Re.n()).done;){var _t=Ke.value;if(!_t.validate(ge,k))return new Date(NaN);var Pe=_t.set(ge,xe,k);Array.isArray(Pe)?(ge=Pe[0],$s(xe,Pe[1])):ge=Pe}}catch(te){Re.e(te)}finally{Re.f()}return ge}function Ho(s){return s.match(Ao)[1].replace(Fo,"'")}function Pa(s){F(1,arguments);var e=L(s);return e.setMilliseconds(0),e}function Ea(s,e){F(2,arguments);var t=Pa(s),n=Pa(e);return t.getTime()===n.getTime()}function Uo(s,e){F(2,arguments);var t=L(s).getTime(),n=L(e.start).getTime(),a=L(e.end).getTime();if(!(n<=a))throw new RangeError("Invalid interval");return t>=n&&t<=a}function be(s,e){var t;F(1,arguments);var n=ee((t=void 0)!==null&&t!==void 0?t:2);if(n!==2&&n!==1&&n!==0)throw new RangeError("additionalDigits must be 0, 1 or 2");if(!(typeof s=="string"||Object.prototype.toString.call(s)==="[object String]"))return new Date(NaN);var a=Vo(s),i;if(a.date){var r=Bo(a.date,n);i=Go(r.restDateString,r.year)}if(!i||isNaN(i.getTime()))return new Date(NaN);var u=i.getTime(),o=0,l;if(a.time&&(o=zo(a.time),isNaN(o)))return new Date(NaN);if(a.timezone){if(l=Xo(a.timezone),isNaN(l))return new Date(NaN)}else{var c=new Date(u+o),d=new Date(0);return d.setFullYear(c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()),d.setHours(c.getUTCHours(),c.getUTCMinutes(),c.getUTCSeconds(),c.getUTCMilliseconds()),d}return new Date(u+o+l)}var Ot={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},qo=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,Wo=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,jo=/^([+-])(\d{2})(?::?(\d{2}))?$/;function Vo(s){var e={},t=s.split(Ot.dateTimeDelimiter),n;if(t.length>2)return e;if(/:/.test(t[0])?n=t[0]:(e.date=t[0],n=t[1],Ot.timeZoneDelimiter.test(e.date)&&(e.date=s.split(Ot.timeZoneDelimiter)[0],n=s.substr(e.date.length,s.length))),n){var a=Ot.timezone.exec(n);a?(e.time=n.replace(a[1],""),e.timezone=a[1]):e.time=n}return e}function Bo(s,e){var t=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+e)+"})|(\\d{2}|[+-]\\d{"+(2+e)+"})$)"),n=s.match(t);if(!n)return{year:NaN,restDateString:""};var a=n[1]?parseInt(n[1]):null,i=n[2]?parseInt(n[2]):null;return{year:i===null?a:i*100,restDateString:s.slice((n[1]||n[2]).length)}}function Go(s,e){if(e===null)return new Date(NaN);var t=s.match(qo);if(!t)return new Date(NaN);var n=!!t[4],a=dt(t[1]),i=dt(t[2])-1,r=dt(t[3]),u=dt(t[4]),o=dt(t[5])-1;if(n)return eu(e,u,o)?Zo(e,u,o):new Date(NaN);var l=new Date(0);return!Ko(e,i,r)||!Jo(e,a)?new Date(NaN):(l.setUTCFullYear(e,i,Math.max(a,r)),l)}function dt(s){return s?parseInt(s):1}function zo(s){var e=s.match(Wo);if(!e)return NaN;var t=qn(e[1]),n=qn(e[2]),a=qn(e[3]);return tu(t,n,a)?t*oa+n*sa+a*1e3:NaN}function qn(s){return s&&parseFloat(s.replace(",","."))||0}function Xo(s){if(s==="Z")return 0;var e=s.match(jo);if(!e)return 0;var t=e[1]==="+"?-1:1,n=parseInt(e[2]),a=e[3]&&parseInt(e[3])||0;return nu(n,a)?t*(n*oa+a*sa):NaN}function Zo(s,e,t){var n=new Date(0);n.setUTCFullYear(s,0,4);var a=n.getUTCDay()||7,i=(e-1)*7+t+1-a;return n.setUTCDate(n.getUTCDate()+i),n}var Qo=[31,null,31,30,31,30,31,31,30,31,30,31];function vi(s){return s%400===0||s%4===0&&s%100!==0}function Ko(s,e,t){return e>=0&&e<=11&&t>=1&&t<=(Qo[e]||(vi(s)?29:28))}function Jo(s,e){return e>=1&&e<=(vi(s)?366:365)}function eu(s,e,t){return e>=1&&e<=53&&t>=0&&t<=6}function tu(s,e,t){return s===24?e===0&&t===0:t>=0&&t<60&&e>=0&&e<60&&s>=0&&s<25}function nu(s,e){return e>=0&&e<=59}function Ge(s,e){F(2,arguments);var t=L(s),n=ee(e),a=t.getFullYear(),i=t.getDate(),r=new Date(0);r.setFullYear(a,n,15),r.setHours(0,0,0,0);var u=li(r);return t.setMonth(n,Math.min(i,u)),t}function yi(s,e){if(F(2,arguments),ze(e)!=="object"||e===null)throw new RangeError("values parameter must be an object");var t=L(s);return isNaN(t.getTime())?new Date(NaN):(e.year!=null&&t.setFullYear(e.year),e.month!=null&&(t=Ge(t,e.month)),e.date!=null&&t.setDate(ee(e.date)),e.hours!=null&&t.setHours(ee(e.hours)),e.minutes!=null&&t.setMinutes(ee(e.minutes)),e.seconds!=null&&t.setSeconds(ee(e.seconds)),e.milliseconds!=null&&t.setMilliseconds(ee(e.milliseconds)),t)}function ta(s,e){F(2,arguments);var t=L(s),n=ee(e);return isNaN(t.getTime())?new Date(NaN):(t.setFullYear(n),t)}function au(s,e){F(2,arguments);var t=ee(e);return Le(s,-t)}function ru(s,e){F(2,arguments);var t=ee(e);return xn(s,-t)}function iu(s){return J.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},s),J.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4 20V8h16v12H4ZM2 4c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4Zm4 6.5c0-.28.22-.5.5-.5h2c.28 0 .5.22.5.5v2a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1-.5-.5v-2Zm.5 4.5a.5.5 0 0 0-.5.5v2c0 .28.22.5.5.5h2a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 0-.5-.5h-2Zm4-4.5c0-.28.22-.5.5-.5h2c.28 0 .5.22.5.5v2a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1-.5-.5v-2ZM11 15a.5.5 0 0 0-.5.5v2c0 .28.22.5.5.5h2a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 0-.5-.5h-2Zm4-4.5c0-.28.22-.5.5-.5h2c.28 0 .5.22.5.5v2a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1-.5-.5v-2Zm.5 4.5a.5.5 0 0 0-.5.5v2c0 .28.22.5.5.5h2a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 0-.5-.5h-2Z",fill:"currentColor"}))}const Ti=Dt(iu,"calendar");function su(s){return J.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},s),J.createElement("path",{d:"M2 5v14a3 3 0 0 0 3 3h7.1a7.02 7.02 0 0 1-1.43-2H6a2 2 0 0 1-2-2V8a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2.67c.75.36 1.43.85 2 1.43V5a3 3 0 0 0-3-3H5a3 3 0 0 0-3 3Z",fill:"currentColor"}),J.createElement("path",{d:"M16 10h1c-.54 0-1.06.06-1.57.18A1 1 0 0 1 16 10Z",fill:"currentColor"}),J.createElement("path",{d:"M13.5 10.94a1 1 0 0 0-1-.94h-1a1 1 0 0 0-1 1v1a1 1 0 0 0 .77.97 7.03 7.03 0 0 1 2.23-2.03Z",fill:"currentColor"}),J.createElement("path",{d:"M7 10a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h1a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1H7Z",fill:"currentColor"}),J.createElement("path",{d:"M6 16a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1v-1Z",fill:"currentColor"}),J.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M22 17a5 5 0 1 1-10 0 5 5 0 0 1 10 0Zm-4-2a1 1 0 1 0-2 0v2c0 .27.1.52.3.7l1.5 1.5a1 1 0 0 0 1.4-1.4L18 16.58V15Z",fill:"currentColor"}))}const ou=Dt(su,"calendar_clock");function uu(s){return J.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},s),J.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm1.5-16.5v4.88l3.56 3.56a1.5 1.5 0 0 1-2.12 2.12l-4-4A1.5 1.5 0 0 1 10.5 12V6.5a1.5 1.5 0 0 1 3 0Z",fill:"currentColor"}))}const lu=Dt(uu,"clock");function cu(s){return J.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},s),J.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.62 4.4c.5.53.5 1.38 0 1.91L7.14 12l5.48 5.69c.5.53.5 1.38 0 1.91-.51.53-1.33.53-1.84 0l-6.4-6.64a1.4 1.4 0 0 1 0-1.92l6.4-6.64c.5-.53 1.33-.53 1.84 0Z",fill:"currentColor"}),J.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M19.62 4.4c.5.53.5 1.38 0 1.91L14.14 12l5.48 5.69c.5.53.5 1.38 0 1.91-.51.53-1.34.53-1.84 0l-6.4-6.64a1.4 1.4 0 0 1 0-1.92l6.4-6.64c.5-.53 1.33-.53 1.84 0Z",fill:"currentColor"}))}const du=Dt(cu,"double_chevron_left");function fu(s){return J.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},s),J.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.38 4.4c.51-.53 1.34-.53 1.84 0l6.4 6.64c.5.53.5 1.39 0 1.92l-6.4 6.64c-.5.53-1.33.53-1.84 0a1.4 1.4 0 0 1 0-1.91L9.86 12 4.38 6.31a1.4 1.4 0 0 1 0-1.91Z",fill:"currentColor"}),J.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.38 4.4c.51-.53 1.33-.53 1.84 0l6.4 6.64c.5.53.5 1.39 0 1.92l-6.4 6.64c-.5.53-1.33.53-1.84 0a1.4 1.4 0 0 1 0-1.91L16.86 12l-5.48-5.69a1.4 1.4 0 0 1 0-1.91Z",fill:"currentColor"}))}const hu=Dt(fu,"double_chevron_right"),pu={DAY_TODAY:`${B}-datepicker-day-today`,DAY_IN_RANGE:`${B}-datepicker-day-inrange`,DAY_HOVER:`${B}-datepicker-day-inhover`,DAY_SELECTED:`${B}-datepicker-day-selected`,DAY_SELECTED_START:`${B}-datepicker-day-selected-start`,DAY_SELECTED_END:`${B}-datepicker-day-selected-end`,DAY_DISABLED:`${B}-datepicker-day-disabled`,DAY_HOVER_DAY:`${B}-datepicker-day-hoverday`,DAY_HOVER_DAY_OFFSET:`${B}-datepicker-day-hoverday-offset`,DAY_IN_OFFSET_RANGE:`${B}-datepicker-day-inoffsetrange`,DAY_SELECTED_RANGE_HOVER:`${B}-datepicker-day-selectedrange-hover`,DAY_OFFSET_RANGE_START:`${B}-datepicker-day-offsetrange-start`,DAY_OFFSET_RANGE_END:`${B}-datepicker-day-offsetrange-end`,DAY_SELECTED_START_AFTER_HOVER:`${B}-datepicker-day-selected-start-afterhover`,DAY_SELECTED_END_BEFORE_HOVER:`${B}-datepicker-day-selected-end-beforehover`,DAY_HOVER_DAY_BEFORE_RANGE:`${B}-datepicker-day-hoverday-beforerange`,DAY_HOVER_DAY_AFTER_RANGE:`${B}-datepicker-day-hoverday-afterrange`,DAY_HOVER_DAY_IN_RANGE:`${B}-datepicker-day-hoverday-inrange`,DAY_HOVER_DAY_AROUND_SINGLE_SELECTED:`${B}-datepicker-day-hoverday-around-singleselected`},N=Object.assign({PREFIX:`${B}-datepicker`,NAVIGATION:`${B}-datepicker-navigation`,PANEL_YAM:`${B}-datepicker-panel-yam`,MONTH:`${B}-datepicker-month`,WEEKDAY:`${B}-datepicker-weekday`,WEEKS:`${B}-datepicker-weeks`,WEEK:`${B}-datepicker-week`,DAY:`${B}-datepicker-day`},pu),mu={FORMAT_FULL_DATE:"yyyy-MM-dd",FORMAT_TIME_PICKER:"HH:mm:ss",FORMAT_DATE_TIME:"yyyy-MM-dd HH:mm:ss",FORMAT_YEAR_MONTH:"yyyy-MM"},P=Object.assign({DEFAULT_SEPARATOR_MULTIPLE:",",DEFAULT_SEPARATOR_RANGE:" ~ ",SIZE_SET:["small","default","large"],TYPE_SET:["date","dateRange","year","month","monthRange","dateTime","dateTimeRange"],PRESET_POSITION_SET:["left","right","top","bottom"],DENSITY_SET:["default","compact"],PANEL_TYPE_LEFT:"left",PANEL_TYPE_RIGHT:"right",STATUS:ts,POSITION_SET:Gr.POSITION_SET,POSITION_INLINE_INPUT:"leftTopOver"},mu),ut={WEEK_START_ON:0,WEEK_HEIGHT:36,SPACING:Br.SPACING,SPACING_INSET_INPUT:1};var Wn,Oa;function gu(){if(Oa)return Wn;Oa=1;var s=Yi(),e=Li(),t="[object Date]";function n(a){return e(a)&&s(a)==t}return Wn=n,Wn}var jn,Sa;function vu(){if(Sa)return jn;Sa=1;var s=gu(),e=$i(),t=Hi(),n=t&&t.isDate,a=n?e(n):s;return jn=a,jn}var yu=vu();const xa=ia(yu);var Tu=Ui();const Tt=ia(Tu);function Ne(s){return typeof s=="string"}function Ma(s,e){const t=Ne(s)?be(s):s,n=Ne(e)?be(e):e;return Us(t,n)}function it(s,e){const t=Ne(s)?be(s):s,n=Ne(e)?be(e):e;return ci(t,n)}function et(s,e){let{start:t,end:n}=e;const a=Ne(s)?be(s):s,i=Ne(t)?be(t):t,r=Ne(n)?be(n):n;return ci(i,r)&&Uo(a,{start:i,end:r})&&!kn(a,i)&&!kn(a,r)}function Ye(s,e){const t=Ne(s)?be(s):s,n=Ne(e)?be(e):e;return ua(t,n)}function _e(s){return s&&Object.prototype.toString.call(s)==="[object Date]"&&!isNaN(s)}function wu(s){return typeof s=="number"||Object.prototype.toString.call(s)==="[object Number]"}function na(s){return wu(s)&&_e(new Date(s))}const wi={date:P.FORMAT_FULL_DATE,dateTime:P.FORMAT_DATE_TIME,dateRange:P.FORMAT_FULL_DATE,dateTimeRange:P.FORMAT_DATE_TIME,month:P.FORMAT_YEAR_MONTH,monthRange:P.FORMAT_YEAR_MONTH},Du=s=>wi;function $e(s){return s&&wi[s]}const bu=(s,e)=>{const t=new Date().getFullYear();let n=typeof s=="number"?s:t-100,a=typeof e=="number"?e:t+100;return an+r)},St=(s,e)=>{if(!e)return"";const t=new Date(e),n=st(s)?s(t):t;return X(new Date(n),P.FORMAT_FULL_DATE)};function ka(s,e){const t=new Date().getFullYear(),n=new Date().getMonth(),a=e.right||n+2,i=s.right||(a<=12?t:t+1);return{year:{left:s.left||t,right:i},month:{left:e.left||n+1,right:a<=12?a:1}}}var xt={exports:{}},Mt={exports:{}},Vn={exports:{}},Na;function re(){return Na||(Na=1,(function(s){function e(t){return t&&t.__esModule?t:{default:t}}s.exports=e,s.exports.__esModule=!0,s.exports.default=s.exports})(Vn)),Vn.exports}var kt={exports:{}},Nt={exports:{}},Bn={exports:{}},Aa;function Di(){return Aa||(Aa=1,(function(s){function e(t){"@babel/helpers - typeof";return s.exports=e=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(n){return typeof n}:function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},s.exports.__esModule=!0,s.exports.default=s.exports,e(t)}s.exports=e,s.exports.__esModule=!0,s.exports.default=s.exports})(Bn)),Bn.exports}var At={exports:{}},Fa;function pe(){return Fa||(Fa=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=t;function t(n,a){if(a.length1?"s":"")+" required, but only "+a.length+" present")}s.exports=e.default})(At,At.exports)),At.exports}var Ya;function _u(){return Ya||(Ya=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var n=t(Di()),a=t(pe());function i(r){return(0,a.default)(1,arguments),r instanceof Date||(0,n.default)(r)==="object"&&Object.prototype.toString.call(r)==="[object Date]"}s.exports=e.default})(Nt,Nt.exports)),Nt.exports}var Ft={exports:{}},La;function Se(){return La||(La=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var n=t(Di()),a=t(pe());function i(r){(0,a.default)(1,arguments);var u=Object.prototype.toString.call(r);return r instanceof Date||(0,n.default)(r)==="object"&&u==="[object Date]"?new Date(r.getTime()):typeof r=="number"||u==="[object Number]"?new Date(r):((typeof r=="string"||u==="[object String]")&&typeof console<"u"&&(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments"),console.warn(new Error().stack)),new Date(NaN))}s.exports=e.default})(Ft,Ft.exports)),Ft.exports}var $a;function Cu(){return $a||($a=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=r;var n=t(_u()),a=t(Se()),i=t(pe());function r(u){if((0,i.default)(1,arguments),!(0,n.default)(u)&&typeof u!="number")return!1;var o=(0,a.default)(u);return!isNaN(Number(o))}s.exports=e.default})(kt,kt.exports)),kt.exports}var Yt={exports:{}},Lt={exports:{}},$t={exports:{}},Ha;function Qe(){return Ha||(Ha=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=t;function t(n){if(n===null||n===!0||n===!1)return NaN;var a=Number(n);return isNaN(a)?a:a<0?Math.ceil(a):Math.floor(a)}s.exports=e.default})($t,$t.exports)),$t.exports}var Ua;function Iu(){return Ua||(Ua=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=r;var n=t(Qe()),a=t(Se()),i=t(pe());function r(u,o){(0,i.default)(2,arguments);var l=(0,a.default)(u).getTime(),c=(0,n.default)(o);return new Date(l+c)}s.exports=e.default})(Lt,Lt.exports)),Lt.exports}var qa;function Ru(){return qa||(qa=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=r;var n=t(Iu()),a=t(pe()),i=t(Qe());function r(u,o){(0,a.default)(2,arguments);var l=(0,i.default)(o);return(0,n.default)(u,-l)}s.exports=e.default})(Yt,Yt.exports)),Yt.exports}var Ht={exports:{}},Ut={exports:{}},Wa;function Pu(){return Wa||(Wa=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=r;var n=t(Se()),a=t(pe()),i=864e5;function r(u){(0,a.default)(1,arguments);var o=(0,n.default)(u),l=o.getTime();o.setUTCMonth(0,1),o.setUTCHours(0,0,0,0);var c=o.getTime(),d=l-c;return Math.floor(d/i)+1}s.exports=e.default})(Ut,Ut.exports)),Ut.exports}var qt={exports:{}},Wt={exports:{}},ja;function fa(){return ja||(ja=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var n=t(Se()),a=t(pe());function i(r){(0,a.default)(1,arguments);var u=1,o=(0,n.default)(r),l=o.getUTCDay(),c=(l=d.getTime()?l+1:o.getTime()>=h.getTime()?l:l-1}s.exports=e.default})(Vt,Vt.exports)),Vt.exports}var Ba;function Eu(){return Ba||(Ba=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=r;var n=t(bi()),a=t(fa()),i=t(pe());function r(u){(0,i.default)(1,arguments);var o=(0,n.default)(u),l=new Date(0);l.setUTCFullYear(o,0,4),l.setUTCHours(0,0,0,0);var c=(0,a.default)(l);return c}s.exports=e.default})(jt,jt.exports)),jt.exports}var Ga;function Ou(){return Ga||(Ga=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=o;var n=t(Se()),a=t(fa()),i=t(Eu()),r=t(pe()),u=6048e5;function o(l){(0,r.default)(1,arguments);var c=(0,n.default)(l),d=(0,a.default)(c).getTime()-(0,i.default)(c).getTime();return Math.round(d/u)+1}s.exports=e.default})(qt,qt.exports)),qt.exports}var Bt={exports:{}},Gt={exports:{}},ft={},za;function Yn(){if(za)return ft;za=1,Object.defineProperty(ft,"__esModule",{value:!0}),ft.getDefaultOptions=e,ft.setDefaultOptions=t;var s={};function e(){return s}function t(n){s=n}return ft}var Xa;function ha(){return Xa||(Xa=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=u;var n=t(Se()),a=t(pe()),i=t(Qe()),r=Yn();function u(o,l){var c,d,f,h,v,w,m,g;(0,a.default)(1,arguments);var T=(0,r.getDefaultOptions)(),y=(0,i.default)((c=(d=(f=(h=l==null?void 0:l.weekStartsOn)!==null&&h!==void 0?h:l==null||(v=l.locale)===null||v===void 0||(w=v.options)===null||w===void 0?void 0:w.weekStartsOn)!==null&&f!==void 0?f:T.weekStartsOn)!==null&&d!==void 0?d:(m=T.locale)===null||m===void 0||(g=m.options)===null||g===void 0?void 0:g.weekStartsOn)!==null&&c!==void 0?c:0);if(!(y>=0&&y<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var D=(0,n.default)(o),_=D.getUTCDay(),I=(_=1&&I<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var x=new Date(0);x.setUTCFullYear(D+1,0,I),x.setUTCHours(0,0,0,0);var R=(0,i.default)(x,c),C=new Date(0);C.setUTCFullYear(D,0,I),C.setUTCHours(0,0,0,0);var E=(0,i.default)(C,c);return y.getTime()>=R.getTime()?D+1:y.getTime()>=E.getTime()?D:D-1}s.exports=e.default})(Xt,Xt.exports)),Xt.exports}var Qa;function Su(){return Qa||(Qa=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=o;var n=t(_i()),a=t(pe()),i=t(ha()),r=t(Qe()),u=Yn();function o(l,c){var d,f,h,v,w,m,g,T;(0,a.default)(1,arguments);var y=(0,u.getDefaultOptions)(),D=(0,r.default)((d=(f=(h=(v=c==null?void 0:c.firstWeekContainsDate)!==null&&v!==void 0?v:c==null||(w=c.locale)===null||w===void 0||(m=w.options)===null||m===void 0?void 0:m.firstWeekContainsDate)!==null&&h!==void 0?h:y.firstWeekContainsDate)!==null&&f!==void 0?f:(g=y.locale)===null||g===void 0||(T=g.options)===null||T===void 0?void 0:T.firstWeekContainsDate)!==null&&d!==void 0?d:1),_=(0,n.default)(l,c),I=new Date(0);I.setUTCFullYear(_,0,D),I.setUTCHours(0,0,0,0);var x=(0,i.default)(I,c);return x}s.exports=e.default})(zt,zt.exports)),zt.exports}var Ka;function xu(){return Ka||(Ka=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=o;var n=t(Se()),a=t(ha()),i=t(Su()),r=t(pe()),u=6048e5;function o(l,c){(0,r.default)(1,arguments);var d=(0,n.default)(l),f=(0,a.default)(d,c).getTime()-(0,i.default)(d,c).getTime();return Math.round(f/u)+1}s.exports=e.default})(Bt,Bt.exports)),Bt.exports}var Zt={exports:{}},Ja;function Ci(){return Ja||(Ja=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=t;function t(n,a){for(var i=n<0?"-":"",r=Math.abs(n).toString();r.length0?l:1-l;return(0,n.default)(o==="yy"?c%100:c,o.length)},M:function(u,o){var l=u.getUTCMonth();return o==="M"?String(l+1):(0,n.default)(l+1,2)},d:function(u,o){return(0,n.default)(u.getUTCDate(),o.length)},a:function(u,o){var l=u.getUTCHours()/12>=1?"pm":"am";switch(o){case"a":case"aa":return l.toUpperCase();case"aaa":return l;case"aaaaa":return l[0];case"aaaa":default:return l==="am"?"a.m.":"p.m."}},h:function(u,o){return(0,n.default)(u.getUTCHours()%12||12,o.length)},H:function(u,o){return(0,n.default)(u.getUTCHours(),o.length)},m:function(u,o){return(0,n.default)(u.getUTCMinutes(),o.length)},s:function(u,o){return(0,n.default)(u.getUTCSeconds(),o.length)},S:function(u,o){var l=o.length,c=u.getUTCMilliseconds(),d=Math.floor(c*Math.pow(10,l-3));return(0,n.default)(d,o.length)}},i=a;e.default=i,s.exports=e.default})(Qt,Qt.exports)),Qt.exports}var tr;function ku(){return tr||(tr=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(Pu()),a=t(Ou()),i=t(bi()),r=t(xu()),u=t(_i()),o=t(Ci()),l=t(Mu()),c={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},d={G:function(g,T,y){var D=g.getUTCFullYear()>0?1:0;switch(T){case"G":case"GG":case"GGG":return y.era(D,{width:"abbreviated"});case"GGGGG":return y.era(D,{width:"narrow"});case"GGGG":default:return y.era(D,{width:"wide"})}},y:function(g,T,y){if(T==="yo"){var D=g.getUTCFullYear(),_=D>0?D:1-D;return y.ordinalNumber(_,{unit:"year"})}return l.default.y(g,T)},Y:function(g,T,y,D){var _=(0,u.default)(g,D),I=_>0?_:1-_;if(T==="YY"){var x=I%100;return(0,o.default)(x,2)}return T==="Yo"?y.ordinalNumber(I,{unit:"year"}):(0,o.default)(I,T.length)},R:function(g,T){var y=(0,i.default)(g);return(0,o.default)(y,T.length)},u:function(g,T){var y=g.getUTCFullYear();return(0,o.default)(y,T.length)},Q:function(g,T,y){var D=Math.ceil((g.getUTCMonth()+1)/3);switch(T){case"Q":return String(D);case"QQ":return(0,o.default)(D,2);case"Qo":return y.ordinalNumber(D,{unit:"quarter"});case"QQQ":return y.quarter(D,{width:"abbreviated",context:"formatting"});case"QQQQQ":return y.quarter(D,{width:"narrow",context:"formatting"});case"QQQQ":default:return y.quarter(D,{width:"wide",context:"formatting"})}},q:function(g,T,y){var D=Math.ceil((g.getUTCMonth()+1)/3);switch(T){case"q":return String(D);case"qq":return(0,o.default)(D,2);case"qo":return y.ordinalNumber(D,{unit:"quarter"});case"qqq":return y.quarter(D,{width:"abbreviated",context:"standalone"});case"qqqqq":return y.quarter(D,{width:"narrow",context:"standalone"});case"qqqq":default:return y.quarter(D,{width:"wide",context:"standalone"})}},M:function(g,T,y){var D=g.getUTCMonth();switch(T){case"M":case"MM":return l.default.M(g,T);case"Mo":return y.ordinalNumber(D+1,{unit:"month"});case"MMM":return y.month(D,{width:"abbreviated",context:"formatting"});case"MMMMM":return y.month(D,{width:"narrow",context:"formatting"});case"MMMM":default:return y.month(D,{width:"wide",context:"formatting"})}},L:function(g,T,y){var D=g.getUTCMonth();switch(T){case"L":return String(D+1);case"LL":return(0,o.default)(D+1,2);case"Lo":return y.ordinalNumber(D+1,{unit:"month"});case"LLL":return y.month(D,{width:"abbreviated",context:"standalone"});case"LLLLL":return y.month(D,{width:"narrow",context:"standalone"});case"LLLL":default:return y.month(D,{width:"wide",context:"standalone"})}},w:function(g,T,y,D){var _=(0,r.default)(g,D);return T==="wo"?y.ordinalNumber(_,{unit:"week"}):(0,o.default)(_,T.length)},I:function(g,T,y){var D=(0,a.default)(g);return T==="Io"?y.ordinalNumber(D,{unit:"week"}):(0,o.default)(D,T.length)},d:function(g,T,y){return T==="do"?y.ordinalNumber(g.getUTCDate(),{unit:"date"}):l.default.d(g,T)},D:function(g,T,y){var D=(0,n.default)(g);return T==="Do"?y.ordinalNumber(D,{unit:"dayOfYear"}):(0,o.default)(D,T.length)},E:function(g,T,y){var D=g.getUTCDay();switch(T){case"E":case"EE":case"EEE":return y.day(D,{width:"abbreviated",context:"formatting"});case"EEEEE":return y.day(D,{width:"narrow",context:"formatting"});case"EEEEEE":return y.day(D,{width:"short",context:"formatting"});case"EEEE":default:return y.day(D,{width:"wide",context:"formatting"})}},e:function(g,T,y,D){var _=g.getUTCDay(),I=(_-D.weekStartsOn+8)%7||7;switch(T){case"e":return String(I);case"ee":return(0,o.default)(I,2);case"eo":return y.ordinalNumber(I,{unit:"day"});case"eee":return y.day(_,{width:"abbreviated",context:"formatting"});case"eeeee":return y.day(_,{width:"narrow",context:"formatting"});case"eeeeee":return y.day(_,{width:"short",context:"formatting"});case"eeee":default:return y.day(_,{width:"wide",context:"formatting"})}},c:function(g,T,y,D){var _=g.getUTCDay(),I=(_-D.weekStartsOn+8)%7||7;switch(T){case"c":return String(I);case"cc":return(0,o.default)(I,T.length);case"co":return y.ordinalNumber(I,{unit:"day"});case"ccc":return y.day(_,{width:"abbreviated",context:"standalone"});case"ccccc":return y.day(_,{width:"narrow",context:"standalone"});case"cccccc":return y.day(_,{width:"short",context:"standalone"});case"cccc":default:return y.day(_,{width:"wide",context:"standalone"})}},i:function(g,T,y){var D=g.getUTCDay(),_=D===0?7:D;switch(T){case"i":return String(_);case"ii":return(0,o.default)(_,T.length);case"io":return y.ordinalNumber(_,{unit:"day"});case"iii":return y.day(D,{width:"abbreviated",context:"formatting"});case"iiiii":return y.day(D,{width:"narrow",context:"formatting"});case"iiiiii":return y.day(D,{width:"short",context:"formatting"});case"iiii":default:return y.day(D,{width:"wide",context:"formatting"})}},a:function(g,T,y){var D=g.getUTCHours(),_=D/12>=1?"pm":"am";switch(T){case"a":case"aa":return y.dayPeriod(_,{width:"abbreviated",context:"formatting"});case"aaa":return y.dayPeriod(_,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return y.dayPeriod(_,{width:"narrow",context:"formatting"});case"aaaa":default:return y.dayPeriod(_,{width:"wide",context:"formatting"})}},b:function(g,T,y){var D=g.getUTCHours(),_;switch(D===12?_=c.noon:D===0?_=c.midnight:_=D/12>=1?"pm":"am",T){case"b":case"bb":return y.dayPeriod(_,{width:"abbreviated",context:"formatting"});case"bbb":return y.dayPeriod(_,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return y.dayPeriod(_,{width:"narrow",context:"formatting"});case"bbbb":default:return y.dayPeriod(_,{width:"wide",context:"formatting"})}},B:function(g,T,y){var D=g.getUTCHours(),_;switch(D>=17?_=c.evening:D>=12?_=c.afternoon:D>=4?_=c.morning:_=c.night,T){case"B":case"BB":case"BBB":return y.dayPeriod(_,{width:"abbreviated",context:"formatting"});case"BBBBB":return y.dayPeriod(_,{width:"narrow",context:"formatting"});case"BBBB":default:return y.dayPeriod(_,{width:"wide",context:"formatting"})}},h:function(g,T,y){if(T==="ho"){var D=g.getUTCHours()%12;return D===0&&(D=12),y.ordinalNumber(D,{unit:"hour"})}return l.default.h(g,T)},H:function(g,T,y){return T==="Ho"?y.ordinalNumber(g.getUTCHours(),{unit:"hour"}):l.default.H(g,T)},K:function(g,T,y){var D=g.getUTCHours()%12;return T==="Ko"?y.ordinalNumber(D,{unit:"hour"}):(0,o.default)(D,T.length)},k:function(g,T,y){var D=g.getUTCHours();return D===0&&(D=24),T==="ko"?y.ordinalNumber(D,{unit:"hour"}):(0,o.default)(D,T.length)},m:function(g,T,y){return T==="mo"?y.ordinalNumber(g.getUTCMinutes(),{unit:"minute"}):l.default.m(g,T)},s:function(g,T,y){return T==="so"?y.ordinalNumber(g.getUTCSeconds(),{unit:"second"}):l.default.s(g,T)},S:function(g,T){return l.default.S(g,T)},X:function(g,T,y,D){var _=D._originalDate||g,I=_.getTimezoneOffset();if(I===0)return"Z";switch(T){case"X":return h(I);case"XXXX":case"XX":return v(I);case"XXXXX":case"XXX":default:return v(I,":")}},x:function(g,T,y,D){var _=D._originalDate||g,I=_.getTimezoneOffset();switch(T){case"x":return h(I);case"xxxx":case"xx":return v(I);case"xxxxx":case"xxx":default:return v(I,":")}},O:function(g,T,y,D){var _=D._originalDate||g,I=_.getTimezoneOffset();switch(T){case"O":case"OO":case"OOO":return"GMT"+f(I,":");case"OOOO":default:return"GMT"+v(I,":")}},z:function(g,T,y,D){var _=D._originalDate||g,I=_.getTimezoneOffset();switch(T){case"z":case"zz":case"zzz":return"GMT"+f(I,":");case"zzzz":default:return"GMT"+v(I,":")}},t:function(g,T,y,D){var _=D._originalDate||g,I=Math.floor(_.getTime()/1e3);return(0,o.default)(I,T.length)},T:function(g,T,y,D){var _=D._originalDate||g,I=_.getTime();return(0,o.default)(I,T.length)}};function f(m,g){var T=m>0?"-":"+",y=Math.abs(m),D=Math.floor(y/60),_=y%60;if(_===0)return T+String(D);var I=g;return T+String(D)+I+(0,o.default)(_,2)}function h(m,g){if(m%60===0){var T=m>0?"-":"+";return T+(0,o.default)(Math.abs(m)/60,2)}return v(m,g)}function v(m,g){var T=g||"",y=m>0?"-":"+",D=Math.abs(m),_=(0,o.default)(Math.floor(D/60),2),I=(0,o.default)(D%60,2);return y+_+T+I}var w=d;e.default=w,s.exports=e.default})(Ht,Ht.exports)),Ht.exports}var Kt={exports:{}},nr;function Nu(){return nr||(nr=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=function(o,l){switch(o){case"P":return l.date({width:"short"});case"PP":return l.date({width:"medium"});case"PPP":return l.date({width:"long"});case"PPPP":default:return l.date({width:"full"})}},n=function(o,l){switch(o){case"p":return l.time({width:"short"});case"pp":return l.time({width:"medium"});case"ppp":return l.time({width:"long"});case"pppp":default:return l.time({width:"full"})}},a=function(o,l){var c=o.match(/(P+)(p+)?/)||[],d=c[1],f=c[2];if(!f)return t(o,l);var h;switch(d){case"P":h=l.dateTime({width:"short"});break;case"PP":h=l.dateTime({width:"medium"});break;case"PPP":h=l.dateTime({width:"long"});break;case"PPPP":default:h=l.dateTime({width:"full"});break}return h.replace("{{date}}",t(d,l)).replace("{{time}}",n(f,l))},i={p:n,P:a},r=i;e.default=r,s.exports=e.default})(Kt,Kt.exports)),Kt.exports}var Jt={exports:{}},ar;function Ii(){return ar||(ar=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=t;function t(n){var a=new Date(Date.UTC(n.getFullYear(),n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()));return a.setUTCFullYear(n.getFullYear()),n.getTime()-a.getTime()}s.exports=e.default})(Jt,Jt.exports)),Jt.exports}var tt={},rr;function Au(){if(rr)return tt;rr=1,Object.defineProperty(tt,"__esModule",{value:!0}),tt.isProtectedDayOfYearToken=t,tt.isProtectedWeekYearToken=n,tt.throwProtectedError=a;var s=["D","DD"],e=["YY","YYYY"];function t(i){return s.indexOf(i)!==-1}function n(i){return e.indexOf(i)!==-1}function a(i,r,u){if(i==="YYYY")throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(r,"`) for formatting years to the input `").concat(u,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if(i==="YY")throw new RangeError("Use `yy` instead of `YY` (in `".concat(r,"`) for formatting years to the input `").concat(u,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if(i==="D")throw new RangeError("Use `d` instead of `D` (in `".concat(r,"`) for formatting days of the month to the input `").concat(u,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if(i==="DD")throw new RangeError("Use `dd` instead of `DD` (in `".concat(r,"`) for formatting days of the month to the input `").concat(u,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"))}return tt}var en={exports:{}},tn={exports:{}},nn={exports:{}},ir;function Fu(){return ir||(ir=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},n=function(r,u,o){var l,c=t[r];return typeof c=="string"?l=c:u===1?l=c.one:l=c.other.replace("{{count}}",u.toString()),o!=null&&o.addSuffix?o.comparison&&o.comparison>0?"in "+l:l+" ago":l},a=n;e.default=a,s.exports=e.default})(nn,nn.exports)),nn.exports}var an={exports:{}},rn={exports:{}},sr;function Yu(){return sr||(sr=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=t;function t(n){return function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=a.width?String(a.width):n.defaultWidth,r=n.formats[i]||n.formats[n.defaultWidth];return r}}s.exports=e.default})(rn,rn.exports)),rn.exports}var or;function Lu(){return or||(or=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(Yu()),a={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},i={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},r={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},u={date:(0,n.default)({formats:a,defaultWidth:"full"}),time:(0,n.default)({formats:i,defaultWidth:"full"}),dateTime:(0,n.default)({formats:r,defaultWidth:"full"})},o=u;e.default=o,s.exports=e.default})(an,an.exports)),an.exports}var sn={exports:{}},ur;function $u(){return ur||(ur=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},n=function(r,u,o,l){return t[r]},a=n;e.default=a,s.exports=e.default})(sn,sn.exports)),sn.exports}var on={exports:{}},un={exports:{}},lr;function Hu(){return lr||(lr=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=t;function t(n){return function(a,i){var r=i!=null&&i.context?String(i.context):"standalone",u;if(r==="formatting"&&n.formattingValues){var o=n.defaultFormattingWidth||n.defaultWidth,l=i!=null&&i.width?String(i.width):o;u=n.formattingValues[l]||n.formattingValues[o]}else{var c=n.defaultWidth,d=i!=null&&i.width?String(i.width):n.defaultWidth;u=n.values[d]||n.values[c]}var f=n.argumentCallback?n.argumentCallback(a):a;return u[f]}}s.exports=e.default})(un,un.exports)),un.exports}var cr;function Uu(){return cr||(cr=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(Hu()),a={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},i={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},r={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},u={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},o={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},l={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},c=function(v,w){var m=Number(v),g=m%100;if(g>20||g<10)switch(g%10){case 1:return m+"st";case 2:return m+"nd";case 3:return m+"rd"}return m+"th"},d={ordinalNumber:c,era:(0,n.default)({values:a,defaultWidth:"wide"}),quarter:(0,n.default)({values:i,defaultWidth:"wide",argumentCallback:function(v){return v-1}}),month:(0,n.default)({values:r,defaultWidth:"wide"}),day:(0,n.default)({values:u,defaultWidth:"wide"}),dayPeriod:(0,n.default)({values:o,defaultWidth:"wide",formattingValues:l,defaultFormattingWidth:"wide"})},f=d;e.default=f,s.exports=e.default})(on,on.exports)),on.exports}var ln={exports:{}},cn={exports:{}},dr;function qu(){return dr||(dr=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=t;function t(i){return function(r){var u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=u.width,l=o&&i.matchPatterns[o]||i.matchPatterns[i.defaultMatchWidth],c=r.match(l);if(!c)return null;var d=c[0],f=o&&i.parsePatterns[o]||i.parsePatterns[i.defaultParseWidth],h=Array.isArray(f)?a(f,function(m){return m.test(d)}):n(f,function(m){return m.test(d)}),v;v=i.valueCallback?i.valueCallback(h):h,v=u.valueCallback?u.valueCallback(v):v;var w=r.slice(d.length);return{value:v,rest:w}}}function n(i,r){for(var u in i)if(i.hasOwnProperty(u)&&r(i[u]))return u}function a(i,r){for(var u=0;u1&&arguments[1]!==void 0?arguments[1]:{},r=a.match(n.matchPattern);if(!r)return null;var u=r[0],o=a.match(n.parsePattern);if(!o)return null;var l=n.valueCallback?n.valueCallback(o[0]):o[0];l=i.valueCallback?i.valueCallback(l):l;var c=a.slice(u.length);return{value:l,rest:c}}}s.exports=e.default})(dn,dn.exports)),dn.exports}var hr;function ju(){return hr||(hr=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(qu()),a=t(Wu()),i=/^(\d+)(th|st|nd|rd)?/i,r=/\d+/i,u={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},o={any:[/^b/i,/^(a|c)/i]},l={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},c={any:[/1/i,/2/i,/3/i,/4/i]},d={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},f={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},h={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},v={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},w={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},m={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},g={ordinalNumber:(0,a.default)({matchPattern:i,parsePattern:r,valueCallback:function(D){return parseInt(D,10)}}),era:(0,n.default)({matchPatterns:u,defaultMatchWidth:"wide",parsePatterns:o,defaultParseWidth:"any"}),quarter:(0,n.default)({matchPatterns:l,defaultMatchWidth:"wide",parsePatterns:c,defaultParseWidth:"any",valueCallback:function(D){return D+1}}),month:(0,n.default)({matchPatterns:d,defaultMatchWidth:"wide",parsePatterns:f,defaultParseWidth:"any"}),day:(0,n.default)({matchPatterns:h,defaultMatchWidth:"wide",parsePatterns:v,defaultParseWidth:"any"}),dayPeriod:(0,n.default)({matchPatterns:w,defaultMatchWidth:"any",parsePatterns:m,defaultParseWidth:"any"})},T=g;e.default=T,s.exports=e.default})(ln,ln.exports)),ln.exports}var pr;function Vu(){return pr||(pr=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(Fu()),a=t(Lu()),i=t($u()),r=t(Uu()),u=t(ju()),o={code:"en-US",formatDistance:n.default,formatLong:a.default,formatRelative:i.default,localize:r.default,match:u.default,options:{weekStartsOn:0,firstWeekContainsDate:1}},l=o;e.default=l,s.exports=e.default})(tn,tn.exports)),tn.exports}var mr;function Bu(){return mr||(mr=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(Vu()),a=n.default;e.default=a,s.exports=e.default})(en,en.exports)),en.exports}var gr;function Gu(){return gr||(gr=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=y;var n=t(Cu()),a=t(Ru()),i=t(Se()),r=t(ku()),u=t(Nu()),o=t(Ii()),l=Au(),c=t(Qe()),d=t(pe()),f=Yn(),h=t(Bu()),v=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,w=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,m=/^'([^]*?)'?$/,g=/''/g,T=/[a-zA-Z]/;function y(_,I,x){var R,C,E,O,k,U,se,G,Z,ce,me,he,qe,Ie,ge,xe,Re,Ke;(0,d.default)(2,arguments);var _t=String(I),Pe=(0,f.getDefaultOptions)(),te=(R=(C=x==null?void 0:x.locale)!==null&&C!==void 0?C:Pe.locale)!==null&&R!==void 0?R:h.default,V=(0,c.default)((E=(O=(k=(U=x==null?void 0:x.firstWeekContainsDate)!==null&&U!==void 0?U:x==null||(se=x.locale)===null||se===void 0||(G=se.options)===null||G===void 0?void 0:G.firstWeekContainsDate)!==null&&k!==void 0?k:Pe.firstWeekContainsDate)!==null&&O!==void 0?O:(Z=Pe.locale)===null||Z===void 0||(ce=Z.options)===null||ce===void 0?void 0:ce.firstWeekContainsDate)!==null&&E!==void 0?E:1);if(!(V>=1&&V<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var fe=(0,c.default)((me=(he=(qe=(Ie=x==null?void 0:x.weekStartsOn)!==null&&Ie!==void 0?Ie:x==null||(ge=x.locale)===null||ge===void 0||(xe=ge.options)===null||xe===void 0?void 0:xe.weekStartsOn)!==null&&qe!==void 0?qe:Pe.weekStartsOn)!==null&&he!==void 0?he:(Re=Pe.locale)===null||Re===void 0||(Ke=Re.options)===null||Ke===void 0?void 0:Ke.weekStartsOn)!==null&&me!==void 0?me:0);if(!(fe>=0&&fe<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(!te.localize)throw new RangeError("locale must contain localize property");if(!te.formatLong)throw new RangeError("locale must contain formatLong property");var Me=(0,i.default)(_);if(!(0,n.default)(Me))throw new RangeError("Invalid time value");var Ct=(0,o.default)(Me),It=(0,a.default)(Me,Ct),ct={firstWeekContainsDate:V,weekStartsOn:fe,locale:te,_originalDate:Me},Rt=_t.match(w).map(function(Te){var Ae=Te[0];if(Ae==="p"||Ae==="P"){var Pt=u.default[Ae];return Pt(Te,te.formatLong)}return Te}).join("").match(v).map(function(Te){if(Te==="''")return"'";var Ae=Te[0];if(Ae==="'")return D(Te);var Pt=r.default[Ae];if(Pt)return!(x!=null&&x.useAdditionalWeekYearTokens)&&(0,l.isProtectedWeekYearToken)(Te)&&(0,l.throwProtectedError)(Te,I,String(_)),!(x!=null&&x.useAdditionalDayOfYearTokens)&&(0,l.isProtectedDayOfYearToken)(Te)&&(0,l.throwProtectedError)(Te,I,String(_)),Pt(It,Te,te.localize,ct);if(Ae.match(T))throw new RangeError("Format string contains an unescaped latin alphabet character `"+Ae+"`");return Te}).join("");return Rt}function D(_){var I=_.match(m);return I?I[1].replace(g,"'"):_}s.exports=e.default})(Mt,Mt.exports)),Mt.exports}var fn={exports:{}},hn={exports:{}},vr;function zu(){return vr||(vr=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=t;function t(r,u,o){var l=i(r,o.timeZone,o.locale);return l.formatToParts?n(l,u):a(l,u)}function n(r,u){for(var o=r.formatToParts(u),l=o.length-1;l>=0;--l)if(o[l].type==="timeZoneName")return o[l].value}function a(r,u){var o=r.format(u).replace(/\u200E/g,""),l=/ [\w-+ ]+$/.exec(o);return l?l[0].substr(1):""}function i(r,u,o){if(o&&!o.code)throw new Error("date-fns-tz error: Please set a language code on the locale object imported from date-fns, e.g. `locale.code = 'en-US'`");return new Intl.DateTimeFormat(o?[o.code,"en-US"]:void 0,{timeZone:u,timeZoneName:r})}s.exports=e.default})(hn,hn.exports)),hn.exports}var pn={exports:{}},mn={exports:{}},yr;function Xu(){return yr||(yr=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=t;function t(o,l){var c=u(l);return c.formatToParts?a(c,o):i(c,o)}var n={year:0,month:1,day:2,hour:3,minute:4,second:5};function a(o,l){try{for(var c=o.formatToParts(l),d=[],f=0;f=0&&(d[h]=parseInt(c[f].value,10))}return d}catch(v){if(v instanceof RangeError)return[NaN];throw v}}function i(o,l){var c=o.format(l).replace(/\u200E/g,""),d=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(c);return[d[3],d[1],d[2],d[4],d[5],d[6]]}var r={};function u(o){if(!r[o]){var l=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z")),c=l==="06/25/2014, 00:00:00"||l==="‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00";r[o]=c?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:o,year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:o,year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return r[o]}s.exports=e.default})(mn,mn.exports)),mn.exports}var gn={exports:{}},Tr;function Ri(){return Tr||(Tr=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=t;function t(n,a,i,r,u,o,l){var c=new Date(0);return c.setUTCFullYear(n,a,i),c.setUTCHours(r,u,o,l),c}s.exports=e.default})(gn,gn.exports)),gn.exports}var wr;function bt(){return wr||(wr=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=o;var t=a(Xu()),n=a(Ri());function a(w){return w&&w.__esModule?w:{default:w}}var i=36e5,r=6e4,u={timezoneZ:/^(Z)$/,timezoneHH:/^([+-]\d{2})$/,timezoneHHMM:/^([+-]\d{2}):?(\d{2})$/};function o(w,m,g){var T,y;if(!w||(T=u.timezoneZ.exec(w),T))return 0;var D;if(T=u.timezoneHH.exec(w),T)return D=parseInt(T[1],10),f(D)?-(D*i):NaN;if(T=u.timezoneHHMM.exec(w),T){D=parseInt(T[1],10);var _=parseInt(T[2],10);return f(D,_)?(y=Math.abs(D)*i+_*r,D>0?-y:y):NaN}if(v(w)){m=new Date(m||Date.now());var I=g?m:l(m),x=c(I,w),R=g?x:d(m,x,w);return-R}return NaN}function l(w){return(0,n.default)(w.getFullYear(),w.getMonth(),w.getDate(),w.getHours(),w.getMinutes(),w.getSeconds(),w.getMilliseconds())}function c(w,m){var g=(0,t.default)(w,m),T=(0,n.default)(g[0],g[1]-1,g[2],g[3]%24,g[4],g[5],0).getTime(),y=w.getTime(),D=y%1e3;return y-=D>=0?D:1e3+D,T-y}function d(w,m,g){var T=w.getTime(),y=T-m,D=c(new Date(y),g);if(m===D)return m;y-=D-m;var _=c(new Date(y),g);return D===_?D:Math.max(D,_)}function f(w,m){return-23<=w&&w<=23&&(m==null||0<=m&&m<=59)}var h={};function v(w){if(h[w])return!0;try{return new Intl.DateTimeFormat(void 0,{timeZone:w}),h[w]=!0,!0}catch{return!1}}s.exports=e.default})(pn,pn.exports)),pn.exports}var Dr;function Zu(){return Dr||(Dr=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=a(zu()),n=a(bt());function a(h){return h&&h.__esModule?h:{default:h}}var i=60*1e3,r={X:function(h,v,w,m){var g=u(m.timeZone,m._originalDate||h);if(g===0)return"Z";switch(v){case"X":return c(g);case"XXXX":case"XX":return l(g);case"XXXXX":case"XXX":default:return l(g,":")}},x:function(h,v,w,m){var g=u(m.timeZone,m._originalDate||h);switch(v){case"x":return c(g);case"xxxx":case"xx":return l(g);case"xxxxx":case"xxx":default:return l(g,":")}},O:function(h,v,w,m){var g=u(m.timeZone,m._originalDate||h);switch(v){case"O":case"OO":case"OOO":return"GMT"+d(g,":");case"OOOO":default:return"GMT"+l(g,":")}},z:function(h,v,w,m){var g=m._originalDate||h;switch(v){case"z":case"zz":case"zzz":return(0,t.default)("short",g,m);case"zzzz":default:return(0,t.default)("long",g,m)}}};function u(h,v){var w=h?(0,n.default)(h,v,!0)/i:v.getTimezoneOffset();if(Number.isNaN(w))throw new RangeError("Invalid time zone specified: "+h);return w}function o(h,v){for(var w=h<0?"-":"",m=Math.abs(h).toString();m.length0?"-":"+",g=Math.abs(h),T=o(Math.floor(g/60),2),y=o(Math.floor(g%60),2);return m+T+w+y}function c(h,v){if(h%60===0){var w=h>0?"-":"+";return w+o(Math.abs(h)/60,2)}return l(h,v)}function d(h,v){var w=h>0?"-":"+",m=Math.abs(h),g=Math.floor(m/60),T=m%60;if(T===0)return w+String(g);var y=v;return w+String(g)+y+o(T,2)}var f=r;e.default=f,s.exports=e.default})(fn,fn.exports)),fn.exports}var vn={exports:{}},yn={exports:{}},br;function Pi(){return br||(br=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=/(Z|[+-]\d{2}(?::?\d{2})?| UTC| [a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?)$/,n=t;e.default=n,s.exports=e.default})(yn,yn.exports)),yn.exports}var _r;function Ln(){return _r||(_r=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=d;var t=r(Qe()),n=r(Ii()),a=r(bt()),i=r(Pi());function r(R){return R&&R.__esModule?R:{default:R}}var u=36e5,o=6e4,l=2,c={dateTimePattern:/^([0-9W+-]+)(T| )(.*)/,datePattern:/^([0-9W+-]+)(.*)/,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timeZone:i.default};function d(R,C){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(R===null)return new Date(NaN);var E=C||{},O=E.additionalDigits==null?l:(0,t.default)(E.additionalDigits);if(O!==2&&O!==1&&O!==0)throw new RangeError("additionalDigits must be 0, 1 or 2");if(R instanceof Date||typeof R=="object"&&Object.prototype.toString.call(R)==="[object Date]")return new Date(R.getTime());if(typeof R=="number"||Object.prototype.toString.call(R)==="[object Number]")return new Date(R);if(!(typeof R=="string"||Object.prototype.toString.call(R)==="[object String]"))return new Date(NaN);var k=f(R),U=h(k.date,O),se=U.year,G=U.restDateString,Z=v(G,se);if(isNaN(Z))return new Date(NaN);if(Z){var ce=Z.getTime(),me=0,he;if(k.time&&(me=w(k.time),isNaN(me)))return new Date(NaN);if(k.timeZone||E.timeZone){if(he=(0,a.default)(k.timeZone||E.timeZone,new Date(ce+me)),isNaN(he))return new Date(NaN)}else he=(0,n.default)(new Date(ce+me)),he=(0,n.default)(new Date(ce+me+he));return new Date(ce+me+he)}else return new Date(NaN)}function f(R){var C={},E=c.dateTimePattern.exec(R),O;if(E?(C.date=E[1],O=E[3]):(E=c.datePattern.exec(R),E?(C.date=E[1],O=E[2]):(C.date=null,O=R)),O){var k=c.timeZone.exec(O);k?(C.time=O.replace(k[1],""),C.timeZone=k[1].trim()):C.time=O}return C}function h(R,C){var E=c.YYY[C],O=c.YYYYY[C],k;if(k=c.YYYY.exec(R)||O.exec(R),k){var U=k[1];return{year:parseInt(U,10),restDateString:R.slice(U.length)}}if(k=c.YY.exec(R)||E.exec(R),k){var se=k[1];return{year:parseInt(se,10)*100,restDateString:R.slice(se.length)}}return{year:null}}function v(R,C){if(C===null)return null;var E,O,k,U;if(R.length===0)return O=new Date(0),O.setUTCFullYear(C),O;if(E=c.MM.exec(R),E)return O=new Date(0),k=parseInt(E[1],10)-1,D(C,k)?(O.setUTCFullYear(C,k),O):new Date(NaN);if(E=c.DDD.exec(R),E){O=new Date(0);var se=parseInt(E[1],10);return _(C,se)?(O.setUTCFullYear(C,0,se),O):new Date(NaN)}if(E=c.MMDD.exec(R),E){O=new Date(0),k=parseInt(E[1],10)-1;var G=parseInt(E[2],10);return D(C,k,G)?(O.setUTCFullYear(C,k,G),O):new Date(NaN)}if(E=c.Www.exec(R),E)return U=parseInt(E[1],10)-1,I(C,U)?m(C,U):new Date(NaN);if(E=c.WwwD.exec(R),E){U=parseInt(E[1],10)-1;var Z=parseInt(E[2],10)-1;return I(C,U,Z)?m(C,U,Z):new Date(NaN)}return null}function w(R){var C,E,O;if(C=c.HH.exec(R),C)return E=parseFloat(C[1].replace(",",".")),x(E)?E%24*u:NaN;if(C=c.HHMM.exec(R),C)return E=parseInt(C[1],10),O=parseFloat(C[2].replace(",",".")),x(E,O)?E%24*u+O*o:NaN;if(C=c.HHMMSS.exec(R),C){E=parseInt(C[1],10),O=parseInt(C[2],10);var k=parseFloat(C[3].replace(",","."));return x(E,O,k)?E%24*u+O*o+k*1e3:NaN}return null}function m(R,C,E){C=C||0,E=E||0;var O=new Date(0);O.setUTCFullYear(R,0,4);var k=O.getUTCDay()||7,U=C*7+E+1-k;return O.setUTCDate(O.getUTCDate()+U),O}var g=[31,28,31,30,31,30,31,31,30,31,30,31],T=[31,29,31,30,31,30,31,31,30,31,30,31];function y(R){return R%400===0||R%4===0&&R%100!==0}function D(R,C,E){if(C<0||C>11)return!1;if(E!=null){if(E<1)return!1;var O=y(R);if(O&&E>T[C]||!O&&E>g[C])return!1}return!0}function _(R,C){if(C<1)return!1;var E=y(R);return!(E&&C>366||!E&&C>365)}function I(R,C,E){return!(C<0||C>52||E!=null&&(E<0||E>6))}function x(R,C,E){return!(R!=null&&(R<0||R>=25)||C!=null&&(C<0||C>=60)||E!=null&&(E<0||E>=60))}s.exports=e.default})(vn,vn.exports)),vn.exports}var Cr;function Ei(){return Cr||(Cr=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=u;var t=i(Gu()),n=i(Zu()),a=i(Ln());function i(o){return o&&o.__esModule?o:{default:o}}var r=/([xXOz]+)|''|'(''|[^'])+('|$)/g;function u(o,l,c){var d=String(l),f=c||{},h=d.match(r);if(h){var v=(0,a.default)(o,f);d=h.reduce(function(w,m){if(m[0]==="'")return w;var g=w.indexOf(m),T=w[g-1]==="'",y=w.replace(m,"'"+n.default[m[0]](v,m,null,f)+"'");return T?y.substring(0,g-1)+y.substring(g+1):y},d)}return(0,t.default)(o,d,f)}s.exports=e.default})(xt,xt.exports)),xt.exports}var Tn={exports:{}},wn={exports:{}},Dn={exports:{}},Ir;function Qu(){return Ir||(Ir=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=t;function t(n,a){if(n==null)throw new TypeError("assign requires that input parameter not be null or undefined");for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(n[i]=a[i]);return n}s.exports=e.default})(Dn,Dn.exports)),Dn.exports}var Rr;function Oi(){return Rr||(Rr=1,(function(s,e){var t=re().default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=a;var n=t(Qu());function a(i){return(0,n.default)({},i)}s.exports=e.default})(wn,wn.exports)),wn.exports}var bn={exports:{}},Pr;function Si(){return Pr||(Pr=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var t=a(bt()),n=a(Ln());function a(r){return r&&r.__esModule?r:{default:r}}function i(r,u,o){var l=(0,n.default)(r,o),c=(0,t.default)(u,l,!0),d=new Date(l.getTime()-c),f=new Date(0);return f.setFullYear(d.getUTCFullYear(),d.getUTCMonth(),d.getUTCDate()),f.setHours(d.getUTCHours(),d.getUTCMinutes(),d.getUTCSeconds(),d.getUTCMilliseconds()),f}s.exports=e.default})(bn,bn.exports)),bn.exports}var Er;function Ku(){return Er||(Er=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=r;var t=i(Oi()),n=i(Ei()),a=i(Si());function i(u){return u&&u.__esModule?u:{default:u}}function r(u,o,l,c){var d=(0,t.default)(c);return d.timeZone=o,(0,n.default)((0,a.default)(u,o),l,d)}s.exports=e.default})(Tn,Tn.exports)),Tn.exports}var _n={exports:{}},Or;function Ju(){return Or||(Or=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=a;var t=n(bt());function n(i){return i&&i.__esModule?i:{default:i}}function a(i,r){return-(0,t.default)(i,r)}s.exports=e.default})(_n,_n.exports)),_n.exports}var Cn={exports:{}},Sr;function el(){return Sr||(Sr=1,(function(s,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=o;var t=u(Oi()),n=u(Ln()),a=u(Pi()),i=u(bt()),r=u(Ri());function u(l){return l&&l.__esModule?l:{default:l}}function o(l,c,d){if(typeof l=="string"&&!l.match(a.default)){var f=(0,t.default)(d);return f.timeZone=c,(0,n.default)(l,f)}var h=(0,n.default)(l,d),v=(0,r.default)(h.getFullYear(),h.getMonth(),h.getDate(),h.getHours(),h.getMinutes(),h.getSeconds(),h.getMilliseconds()).getTime(),w=(0,i.default)(c,new Date(v));return new Date(v+w)}s.exports=e.default})(Cn,Cn.exports)),Cn.exports}var Gn,xr;function tl(){return xr||(xr=1,Gn={format:Ei(),formatInTimeZone:Ku(),getTimezoneOffset:Ju(),toDate:Ln(),utcToZonedTime:Si(),zonedTimeToUtc:el()}),Gn}var xi=tl();const nl=[[-11,["Pacific/Midway"]],[-10,["Pacific/Honolulu"]],[-9.5,["Pacific/Marquesas"]],[-9,["Pacific/Gambier"]],[-8,["Pacific/Pitcairn"]],[-7,["America/Phoenix"]],[-6,["America/Tegucigalpa"]],[-5,["America/Bogota"]],[-4,["America/Puerto_Rico"]],[-3.5,["America/St_Johns"]],[-3,["America/Montevideo"]],[-2,["Atlantic/South_Georgia"]],[-1,["Atlantic/Cape_Verde"]],[0,["Africa/Accra"]],[1,["Africa/Bangui"]],[2,["Africa/Cairo"]],[3,["Asia/Bahrain","Indian/Antananarivo"]],[3.5,["Asia/Tehran"]],[4,["Asia/Dubai","Asia/Muscat"]],[4.5,["Asia/Kabul"]],[5,["Asia/Samarkand","Asia/Karachi"]],[5.5,["Asia/Kolkata"]],[5.75,["Asia/Kathmandu"]],[6,["Asia/Dhaka"]],[6.5,["Asia/Rangoon","Asia/Rangoon"]],[7,["Asia/Jakarta","Asia/Phnom_Penh","Asia/Bangkok"]],[8,["Asia/Shanghai","Asia/Singapore"]],[8.75,["Australia/Eucla"]],[9,["Asia/Tokyo","Asia/Seoul","Asia/Pyongyang"]],[9.5,["Australia/Darwin"]],[10,["Pacific/Guam"]],[10.5,["Australia/Adelaide"]],[11,["Pacific/Guadalcanal"]],[12,["Pacific/Funafuti"]],[13,["Pacific/Enderbury"]],[13.75,["Pacific/Chatham"]],[14,["Pacific/Kiritimati"]]],Mr={0:"Etc/GMT",1:"Etc/GMT-1",2:"Etc/GMT-2",3:"Etc/GMT-3",4:"Etc/GMT-4",5:"Etc/GMT-5",6:"Etc/GMT-6",7:"Etc/GMT-7",8:"Etc/GMT-8",9:"Etc/GMT-9",10:"Etc/GMT-10",11:"Etc/GMT-11",12:"Etc/GMT-12",13:"Etc/GMT-13",14:"Etc/GMT-14","-1":"Etc/GMT+1","-2":"Etc/GMT+2","-3":"Etc/GMT+3","-4":"Etc/GMT+4","-5":"Etc/GMT+5","-6":"Etc/GMT+6","-7":"Etc/GMT+7","-8":"Etc/GMT+8","-9":"Etc/GMT+9","-10":"Etc/GMT+10","-11":"Etc/GMT+11","-12":"Etc/GMT+12"},al=/([\-\+]{1})(\d{2})\:(\d{2})/,Mi=s=>{let e=null;if(typeof s=="string"){if(e=s.match(al),!e)return s;const t=parseInt(e[1]+1,10),n=parseInt(e[2],10),a=parseInt(e[3],10);s=t*(n+a/60)}if(typeof s=="number"){if(s in Mr){const n=Mr[s];if(rl(n))return n}const t=nl.find(n=>n[0]===s);return t&&t[1][0]}},kr={};function rl(s){if(kr[s])return!0;try{return new Intl.DateTimeFormat(void 0,{timeZone:s}),kr[s]=!0,!0}catch{return!1}}const il=(s,e,t)=>xi.utcToZonedTime(s,Mi(e),t),aa=(s,e,t)=>xi.zonedTimeToUtc(s,Mi(e),t);function ne(s,e,t,n){let a=null;if(s){e&&(t=t||new Date,a=$o(s,e,t,{locale:n})),Ce(a)||(a=be(s)),Ce(a)||(a=new Date(Date.parse(s)));const i=Ce(a)&&String(a.getFullYear()).length>4;(!Ce(a)||i)&&(a=null)}return a}function Pn(s){const{format:e,type:t}=s,n=/([yMd]{0,4}[^a-z\s]*[yMd]{0,4}[^a-z\s]*[yMd]{0,4})/i,a=/([yMd]{0,4}[^a-z\s]*[yMd]{0,4}[^a-z\s]*[yMd]{0,4}) (H{0,2}[^a-z\s]*m{0,2}[^a-z\s]*s{0,2})/i,i=$e(t);let r;switch(t){case"dateTime":case"dateTimeRange":const u=a.exec(e);r=u&&u[1]&&u[2]?`${u[1]} ${u[2]}`:i;break;case"date":case"month":case"monthRange":case"dateRange":default:const o=n.exec(e);r=o&&o[1]||i;break}return r}function ra(s){const{inputValue:t="",rangeSeparator:n,type:a}=s;let i,r,u,o;const l={monthLeft:{dateInput:"",timeInput:""},monthRight:{dateInput:"",timeInput:""}};switch(a){case"date":case"month":case"monthRange":l.monthLeft.dateInput=t;break;case"dateRange":[i="",u=""]=t.split(n),l.monthLeft.dateInput=i,l.monthRight.dateInput=u;break;case"dateTime":[i="",r=""]=t.split(" "),l.monthLeft.dateInput=i,l.monthLeft.timeInput=r;break;case"dateTimeRange":const[c="",d=""]=t.split(n);[i="",r=""]=c.split(" "),[u="",o=""]=d.split(" "),l.monthLeft.dateInput=i,l.monthLeft.timeInput=r,l.monthRight.dateInput=u,l.monthRight.timeInput=o;break}return l}function En(s){return["string","number"].includes(typeof s)&&s!==""}class sl extends He{constructor(e){super(Object.assign({},e)),this.clearRangeInputFocus=()=>{const{type:t}=this._adapter.getProps(),{rangeInputFocus:n}=this._adapter.getStates();t==="dateTimeRange"&&n&&this._adapter.setRangeInputFocus(!1)},this._isRangeType=()=>{const t=this._adapter.getProp("type");return/range/i.test(t)},this._isRangeValueComplete=t=>{let n=!1;return Array.isArray(t)&&(n=!t.some(a=>Be(a))),n}}init(){const e=this.getProp("timeZone");this._isControlledComponent()?this.initFromProps({timeZone:e,value:this.getProp("value")}):this._isInProps("defaultValue")&&this.initFromProps({timeZone:e,value:this.getProp("defaultValue")}),this.initPanelOpenStatus(this.getProp("defaultOpen"))}initFromProps(e){let{value:t,timeZone:n,prevTimeZone:a}=e;const i=(Array.isArray(t)?[...t]:(t||t===0)&&[t])||[],r=this.parseWithTimezone(i,n,a);this._adapter.updatePrevTimezone(a),this.clearInputValue(),this._adapter.updateValue(r),this.resetCachedSelectedValue(r),this.initRangeInputFocus(r),this._adapter.needConfirm()&&this._adapter.updateCachedSelectedValue(r)}initRangeInputFocus(e){const{triggerRender:t}=this.getProps();this._isRangeType()&&st(t)&&e.length===0&&this._adapter.setRangeInputFocus("rangeStart")}parseWithTimezone(e,t,n){const a=[];if(Array.isArray(e)&&e.length)for(const i of e){let r=(i||i===0)&&this._parseValue(i);r?(En(n)&&(r=aa(r,n)),a.push(En(t)?il(r,t):r)):qi(!0,`[Semi DatePicker] value cannot be parsed, value: ${String(i)}`)}return a}_isMultiple(){return!!this.getProp("multiple")}_parseValue(e){const t=this._adapter.getProp("dateFnsLocale");let n;if(!e&&e!==0)return new Date;if(_e(e))n=e;else if(Wi(e))n=ne(e,this.getProp("format"),void 0,t);else if(na(e))n=new Date(e);else throw new TypeError("defaultValue should be valid Date object/timestamp or string");return n}destroy(){this._adapter.togglePanel(!1),this._adapter.unregisterClickOutSide()}initPanelOpenStatus(e){(this.getProp("open")||e)&&!this.getProp("disabled")?(this._adapter.togglePanel(!0),this._adapter.registerClickOutSide()):(this._adapter.togglePanel(!1),this._adapter.unregisterClickOutSide())}openPanel(){this.getProp("disabled")||(this._isControlledComponent("open")||this.open(),this._adapter.notifyOpenChange(!0))}clearInsetInputValue(){const{insetInput:e}=this._adapter.getProps();e&&this._adapter.updateInsetInputValue(null)}resetCachedSelectedValue(e){const{value:t,cachedSelectedValue:n}=this._adapter.getStates(),a=Array.isArray(e)?e:t;De(a,n)||this._adapter.updateCachedSelectedValue(a)}closePanel(){this._isControlledComponent("open")?this.resetInnerSelectedStates():this.close(),this._adapter.notifyOpenChange(!1)}open(){this._adapter.togglePanel(!0),this._adapter.registerClickOutSide()}close(){this._adapter.togglePanel(!1),this.resetInnerSelectedStates(),this._adapter.unregisterClickOutSide()}focus(e){if(this._isRangeType()){const t=e??"rangeStart";this._adapter.setRangeInputFocus(t)}else this._adapter.setInputFocus()}blur(){this._isRangeType()?this._adapter.setRangeInputBlur():this._adapter.setInputBlur()}resetInnerSelectedStates(){setTimeout(()=>{const{value:e,cachedSelectedValue:t}=this._adapter.getStates();De(e,t)||this.resetCachedSelectedValue(e)},0),this.resetFocus(),this.clearInputValue()}resetFocus(e){this._adapter.setRangeInputFocus(!1),this._adapter.notifyBlur(e)}isCachedSelectedValueValid(e){const t=e||this._adapter.getState("cachedSelectedValue"),{type:n}=this._adapter.getProps();let a=!0;switch(!0){case n==="dateRange":case n==="dateTimeRange":this._isRangeValueComplete(t)||(a=!1);break;default:const i=t==null?void 0:t.filter(r=>r);Array.isArray(i)&&i.length||(a=!1);break}return a}clearInputValue(){this._adapter.updateInputValue(null),this._adapter.updateInsetInputValue(null)}handleInputChange(e,t){const n=this._isMultiple()?this.parseMultipleInput(e):this.parseInput(e),{value:a}=this.getStates();if(this._updateCachedSelectedValueFromInput(e),n&&n.length||e===""){if(oe(t,Qr.CLEARBTN_CLICKED_EVENT_FLAG)&&this._isControlledComponent("value")){this._notifyChange(n);return}this._updateValueAndInput(n,e==="",e);const i=this._getChangedDates(n);this._someDateDisabled(i,n)||De(n,a)||this._notifyChange(n)}else this._adapter.updateInputValue(e)}handleInsetInputChange(e){const{insetInputStr:t,format:n,insetInputValue:a}=e,i=this._isMultiple(),r=i?this.parseMultipleInput(t,n):this.parseInput(t,n),{value:u}=this.getStates();if(this._updateCachedSelectedValueFromInput(t),r&&r.length){const o=this._getChangedDates(r);if(!this._someDateDisabled(o,r)){De(r,u)||(!this._isControlledComponent()&&!this._adapter.needConfirm()&&this._adapter.updateValue(r),this._notifyChange(r));const l=i?this.formatMultipleDates(r):this.formatDates(r);this._adapter.updateInputValue(l)}}this._adapter.updateInsetInputValue(a)}_updateCachedSelectedValueFromInput(e){const t=this.getLooseDateFromInput(e),n=this._getChangedDates(t);this._someDateDisabled(n,t)||this.resetCachedSelectedValue(t)}handleInputBlur(){}handleRangeEndTabPress(e){this._adapter.setRangeInputFocus(!1)}handleInputFocus(e,t){const n=this._adapter.getState("rangeInputFocus");t&&this._adapter.setRangeInputFocus(t),(!t||!["rangeStart","rangeEnd"].includes(n))&&this._adapter.notifyFocus(e,t)}handleSetRangeFocus(e){this._adapter.setRangeInputFocus(e)}handleInputClear(e){this._adapter.notifyClear(e)}handleRangeInputClear(e){const t=[];this._isControlledComponent("value")||(this._updateValueAndInput(t,!0,""),this._adapter.updateInsetInputValue(null),this.resetCachedSelectedValue(t)),this._notifyChange(t),this._adapter.setRangeInputFocus(!1),this._adapter.notifyClear(e)}handleRangeInputBlur(e,t){}handleInputComplete(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=e?this._isMultiple()?this.parseMultipleInput(e,",",!0):this.parseInput(e):[];if(t=t&&t.length?t:this.getState("value"),!t||!t.length){const i=new Date;this._isRangeType()?t=[i,i]:t=[i]}this._updateValueAndInput(t);const{value:n}=this.getStates(),a=this._getChangedDates(t);!this._someDateDisabled(a,t)&&!De(t,n)&&this._notifyChange(t)}parseInput(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=[];const{dateFnsLocale:a,rangeSeparator:i}=this.getProps();if(e&&e.length){const r=this.getProp("type"),u=t||this.getProp("format")||$e(r);let o,l;const c=new Date;switch(r){case"date":case"dateTime":case"month":o=e?ne(e,u,c,a):"",l=o&&Ce(o)&&this.localeFormat(o,u),o&&l===e&&(n=[o]);break;case"dateRange":case"dateTimeRange":case"monthRange":const d=i,f=e.split(d);o=f&&f.reduce((h,v)=>{const w=v&&ne(v,u,c,a);return w&&h.push(w),h},[]),l=o&&o.map(h=>h&&Ce(h)&&this.localeFormat(h,u)).join(d),o&&l===e&&(o.sort((h,v)=>h.getTime()-v.getTime()),n=o);break}}return n}getLooseDateFromInput(e){return this._isMultiple()?this.parseMultipleInputLoose(e):this.parseInputLoose(e)}parseInputLoose(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=[];const{dateFnsLocale:n,rangeSeparator:a,type:i,format:r}=this.getProps();if(e&&e.length){const u=r||$e(i);let o,l;const c=new Date;switch(i){case"date":case"dateTime":case"month":const d=ne(e,u,c,n);_e(d)?(l=this.localeFormat(d,u),l===e&&(o=d)):o=null,t=[o];break;case"dateRange":case"dateTimeRange":const f=a,h=e.split(f);o=h&&h.reduce((v,w)=>{let m=null;const g=ne(w,u,c,n);return _e(g)&&(l=this.localeFormat(g,u),l===w&&(m=g)),v.push(m),v},[]),Array.isArray(o)&&o.every(v=>Ce(v))&&o.sort((v,w)=>v.getTime()-w.getTime()),t=o;break}}return t}parseMultipleInputLoose(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:P.DEFAULT_SEPARATOR_MULTIPLE,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const a=this.getProp("max"),i=e.split(t),r=[];for(const u of i){let o=u&&this.parseInputLoose(u);if(o=Array.isArray(o)?o:o&&[o],o&&o.length)n?!r.filter(l=>!!o.find(c=>Ea(l,c)))&&r.push(...o):r.push(...o);else return[];if(a&&a>0&&r.length>a)return[]}return r}parseMultipleInput(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:P.DEFAULT_SEPARATOR_MULTIPLE,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const a=this.getProp("max"),i=e.split(t),r=[];for(const u of i){let o=u&&this.parseInput(u);if(o=Array.isArray(o)?o:o&&[o],o&&o.length)n?!r.filter(l=>!!o.find(c=>Ea(l,c)))&&r.push(...o):r.push(...o);else return[];if(a&&a>0&&r.length>a)return[]}return r}formatDates(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,n="";const a=this.getProp("rangeSeparator");if(Array.isArray(e)&&e.length){const i=this.getProp("type"),r=t||this.getProp("format")||$e(i);switch(i){case"date":case"dateTime":case"month":n=this.localeFormat(e[0],r);break;case"dateRange":case"dateTimeRange":case"monthRange":const u=!Be(e[0]),o=!Be(e[1]);u&&o?n=`${this.localeFormat(e[0],r)}${a}${this.localeFormat(e[1],r)}`:u?n=`${this.localeFormat(e[0],r)}${a}`:o&&(n=`${a}${this.localeFormat(e[1],r)}`);break}}return n}formatMultipleDates(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:P.DEFAULT_SEPARATOR_MULTIPLE,n=arguments.length>2?arguments[2]:void 0;const a=[];if(Array.isArray(e)&&e.length)switch(this.getProp("type")){case"date":case"dateTime":case"month":e.forEach(r=>a.push(this.formatDates([r],n)));break;case"dateRange":case"dateTimeRange":case"monthRange":for(let r=0;r0&&arguments[0]!==void 0?arguments[0]:{};const{currentMonth:t,currentYear:n}=e,{type:a}=this.getProps();if(a==="month"){const i=new Date(n.left,t.left-1);this.handleSelectedChange([i])}else{const i=new Date(n.left,t.left-1),r=new Date(n.right,t.right-1);this.handleSelectedChange([i,r])}}handleConfirm(){const{cachedSelectedValue:e,value:t}=this._adapter.getStates(),n=this._isRangeValueComplete(e),a=n?e:t;if(this._adapter.needConfirm()&&!this._isControlledComponent()&&this._adapter.updateValue(a),this.closePanel(),n){const{notifyValue:i,notifyDate:r}=this.disposeCallbackArgs(e);this._adapter.notifyConfirm(r,i)}}handleCancel(){this.closePanel();const e=this.getState("value"),{notifyValue:t,notifyDate:n}=this.disposeCallbackArgs(e);this._adapter.notifyCancel(n,t)}handlePresetClick(e,t){const{type:n,timeZone:a}=this.getProps(),i=this.getState("prevTimezone"),r=typeof e.start=="function"?e.start():e.start,u=typeof e.end=="function"?e.end():e.end;let o;switch(n){case"month":case"dateTime":case"date":o=this.parseWithTimezone([r],a,i),this.handleSelectedChange(o);break;case"dateTimeRange":case"dateRange":o=this.parseWithTimezone([r,u],a,i),this.handleSelectedChange(o,{needCheckFocusRecord:!1});break}this._adapter.notifyPresetsClick(e,t)}disposeCallbackArgs(e){let t=Array.isArray(e)?e:e&&[e]||[];const n=this.getProp("timeZone");En(n)&&(t=t.map(o=>aa(o,n)));const a=this.getProp("type"),i=this.getProp("format")||$e(a);let r,u;switch(a){case"date":case"dateTime":case"month":this._isMultiple()?(r=t.map(o=>o&&this.localeFormat(o,i)),u=[...t]):(r=t[0]&&this.localeFormat(t[0],i),[u]=t);break;case"dateRange":case"dateTimeRange":case"monthRange":r=t.map(o=>o&&this.localeFormat(o,i)),u=[...t];break}return{notifyValue:r,notifyDate:u}}_notifyChange(e){if(this._isRangeType()&&!this._isRangeValueComplete(e))return;const{onChangeWithDateFirst:t}=this.getProps(),{notifyValue:n,notifyDate:a}=this.disposeCallbackArgs(e);t?this._adapter.notifyChange(a,n):this._adapter.notifyChange(n,a)}_getChangedDates(e){const t=this._adapter.getProp("type"),{cachedSelectedValue:n}=this._adapter.getStates(),a=[];switch(t){case"dateRange":case"dateTimeRange":const[i,r]=n,[u,o]=e;kn(u,i)||a.push(u),kn(o,r)||a.push(o);break;default:const l=new Set;n.forEach(c=>l.add(Jn(c)&&c.valueOf()));for(const c of e)l.has(Jn(c)&&c.valueOf())||a.push(c)}return a}_someDateDisabled(e,t){const{rangeInputFocus:n}=this.getStates(),a={rangeStart:"",rangeEnd:"",rangeInputFocus:n};if(this._isRangeType()&&Array.isArray(t)){if(Ce(t[0])){const r=X(t[0],"yyyy-MM-dd");a.rangeStart=r}if(Ce(t[1])){const r=X(t[1],"yyyy-MM-dd");a.rangeEnd=r}}let i=!1;for(const r of e)if(!Be(r)){const u=this._isRangeType()&&Ce(r)?Kn(r):r;if(this.disabledDisposeDate(u,a)){i=!0;break}}return i}localeFormat(e,t){const n=this._adapter.getProp("dateFnsLocale");return X(e,t,{locale:n})}disposeDateFn(e,t){const{notifyDate:n}=this.disposeCallbackArgs(t),a=Array.isArray(t),i=Array.isArray(n);let r;a===i?r=n:r=a?[n]:n[0];for(var u=arguments.length,o=new Array(u>2?u-2:0),l=2;l1?n-1:0),i=1;i1?n-1:0),i=1;i{this.handleInputFocus(e,"rangeStart")},0):st(n)&&this._adapter.setRangeInputFocus("rangeStart"),this.openPanel()):this.openPanel())}handlePanelVisibleChange(e){e?(this._adapter.setInsetInputFocus(),setTimeout(()=>{this._adapter.setTriggerDisabled(!0)},0)):this._adapter.setTriggerDisabled(!1)}}function nt(s,e){let{groupInnerSeparator:t=P.DEFAULT_SEPARATOR_RANGE,groupSize:n=1,groupSeparator:a=P.DEFAULT_SEPARATOR_MULTIPLE}=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=arguments.length>3?arguments[3]:void 0,r="";if((n<=0||typeof n!="number")&&(n=1),Array.isArray(s)&&s.length){const u=[],{length:o}=s;for(let l=0;ll.map(c=>c?X(c,e,{locale:i}):"").join(t)).join(a)}return r}function ki(s){const{defaultPickerValue:e,format:t,dateFnsLocale:n}=s;let a=Array.isArray(e)?e[0]:e,i=Array.isArray(e)?e[1]:void 0;switch(!0){case _e(a):break;case na(a):a=new Date(a);break;case typeof a=="string":a=ne(a,t,void 0,n);break;default:a=new Date;break}switch(!0){case _e(i):break;case na(i):i=new Date(i);break;case typeof i=="string":i=ne(i,t,void 0,n);break;default:i=Le(a,1);break}return{nowDate:a,nextDate:i}}const Nr="Enter",ol="Tab";class ul extends He{constructor(e){super(Object.assign({},e))}init(){}destroy(){}handleClick(e){this._adapter.notifyClick(e)}handleChange(e,t){this._adapter.notifyChange(e,t)}handleInputComplete(e){e.key===Nr&&this._adapter.notifyEnter(e.target.value)}handleInputClear(e){this._adapter.notifyClear(e)}handleRangeInputClear(e){this.stopPropagation(e),this._adapter.notifyRangeInputClear(e)}handleRangeInputEnterPress(e,t){e.key===Nr&&this._adapter.notifyEnter(t)}handleRangeInputEndKeyPress(e){e.key===ol&&this._adapter.notifyTabPress(e)}handleRangeInputFocus(e,t){this._adapter.notifyRangeInputFocus(e,t)}formatShowText(e,t){const{type:n,dateFnsLocale:a,format:i,rangeSeparator:r}=this._adapter.getProps(),u=t||i||$e(n);let o="";switch(n){case"date":o=nt(e,u,void 0,a);break;case"dateRange":o=nt(e,u,{groupSize:2,groupInnerSeparator:r},a);break;case"dateTime":o=nt(e,u,void 0,a);break;case"dateTimeRange":o=nt(e,u,{groupSize:2,groupInnerSeparator:r},a);break;case"month":o=nt(e,u,void 0,a);break;case"monthRange":o=nt(e,u,{groupSize:2,groupInnerSeparator:r},a);break}return o}handleInsetInputChange(e){const{value:t,valuePath:n,insetInputValue:a}=e,{format:i,type:r,rangeSeparator:u}=this._adapter.getProps(),o=Pn({type:r,format:i}),l=ji(Sn(a),n,t),c=this.concatInsetInputValue({insetInputValue:l}),d=ra({inputValue:c,type:r,rangeSeparator:u}),f=this._autoFillTimeToInsetInputValue({insetInputValue:d,valuePath:n,format:o}),h=this.concatInsetInputValue({insetInputValue:f});this._adapter.notifyInsetInputChange({insetInputValue:f,format:o,insetInputStr:h})}_autoFillTimeToInsetInputValue(e){const{valuePath:t,insetInputValue:n,format:a}=e,{type:i,defaultPickerValue:r,dateFnsLocale:u}=this._adapter.getProps(),o=Sn(n),{nowDate:l,nextDate:c}=ki({defaultPickerValue:r,format:a,dateFnsLocale:u});if(i.includes("Time")){let d="";const f=oe(a.split(" "),"0",P.FORMAT_FULL_DATE),h=oe(a.split(" "),"1",P.FORMAT_TIME_PICKER);switch(t){case"monthLeft.dateInput":const v=o.monthLeft.dateInput;if(!o.monthLeft.timeInput&&v.length===f.length){const m=ne(o.monthLeft.dateInput,f);_e(m)&&(d=X(l,h),o.monthLeft.timeInput=d)}break;case"monthRight.dateInput":const w=o.monthRight.dateInput;if(!o.monthRight.timeInput&&w.length===f.length){const m=ne(w,f);_e(m)&&(d=X(c,h),o.monthRight.timeInput=d)}break}}return o}getInsetInputPlaceholder(){const{type:e,format:t,rangeSeparator:n}=this._adapter.getProps(),a=Pn({type:e,format:t});let i,r;switch(e){case"date":case"month":case"dateRange":i=a;break;case"dateTime":case"dateTimeRange":[i,r]=a.split(" ");break;case"monthRange":i=a+n+a;break}return{datePlaceholder:i,timePlaceholder:r}}getInsetInputValue(e){let{value:t,insetInputValue:n}=e;const{type:a,rangeSeparator:i,format:r}=this._adapter.getProps();let u="";if(Kr(n))u=this.concatInsetInputValue({insetInputValue:n});else{const l=Pn({format:r,type:a});u=this.formatShowText(t,l)}return ra({inputValue:u,type:a,rangeSeparator:i})}concatInsetDateAndTime(e){let{date:t,time:n}=e;return`${t} ${n}`}concatInsetDateRange(e){let{rangeStart:t,rangeEnd:n}=e;const{rangeSeparator:a}=this._adapter.getProps();return`${t}${a}${n}`}concatInsetInputValue(e){let{insetInputValue:t}=e;const{type:n}=this._adapter.getProps();let a="";switch(n){case"date":case"month":case"monthRange":a=t.monthLeft.dateInput;break;case"dateRange":a=this.concatInsetDateRange({rangeStart:t.monthLeft.dateInput,rangeEnd:t.monthRight.dateInput});break;case"dateTime":a=this.concatInsetDateAndTime({date:t.monthLeft.dateInput,time:t.monthLeft.timeInput});break;case"dateTimeRange":const i=this.concatInsetDateAndTime({date:t.monthLeft.dateInput,time:t.monthLeft.timeInput}),r=this.concatInsetDateAndTime({date:t.monthRight.dateInput,time:t.monthRight.timeInput});a=this.concatInsetDateRange({rangeStart:i,rangeEnd:r});break}return a}}function Ar(s){const{insetInputValue:e,valuePath:t,onFocus:n,onChange:a,placeholder:i,forwardRef:r}=s,u=oe(e,t);return b.createElement(gt,{value:u,onChange:(o,l)=>{a({value:o,event:l,insetInputValue:e,valuePath:t})},onFocus:n,placeholder:i,ref:r})}function Fr(s){const{insetInputValue:e,valuePath:t,type:n,onFocus:a,onChange:i,placeholder:r,disabled:u}=s;if(!n.includes("Time"))return null;const l=oe(e,t);return b.createElement(gt,{value:l,onChange:(c,d)=>{i({value:c,event:d,insetInputValue:e,valuePath:t})},onFocus:a,placeholder:r,disabled:u})}var ll=function(s,e){var t={};for(var n in s)Object.prototype.hasOwnProperty.call(s,n)&&e.indexOf(n)<0&&(t[n]=s[n]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(s);athis.foundation.handleChange(t,n),this.handleEnterPress=t=>this.foundation.handleInputComplete(t),this.handleInputClear=t=>this.foundation.handleInputClear(t),this.handleRangeInputChange=(t,n,a)=>{const i=this.getRangeInputValue(t,n);this.foundation.handleChange(i,a)},this.handleRangeInputClear=t=>{this.foundation.handleRangeInputClear(t)},this.handleRangeInputEnterPress=(t,n,a)=>{const i=this.getRangeInputValue(n,a);this.foundation.handleRangeInputEnterPress(t,i)},this.handleRangeInputEndKeyPress=t=>{this.foundation.handleRangeInputEndKeyPress(t)},this.handleRangeInputFocus=(t,n)=>{this.foundation.handleRangeInputFocus(t,n)},this.handleRangeStartFocus=t=>{this.handleRangeInputFocus(t,"rangeStart")},this.handleInsetInputChange=t=>{this.foundation.handleInsetInputChange(t)},this.getRangeInputValue=(t,n)=>{const{rangeSeparator:a}=this.props;return`${t}${a}${n}`},this.foundation=new ul(this.adapter)}get adapter(){var e=this;return Object.assign(Object.assign({},super.adapter),{updateIsFocusing:t=>this.setState({isFocusing:t}),notifyClick:function(){return e.props.onClick(...arguments)},notifyChange:function(){return e.props.onChange(...arguments)},notifyEnter:function(){return e.props.onEnterPress(...arguments)},notifyBlur:function(){return e.props.onBlur(...arguments)},notifyClear:function(){return e.props.onClear(...arguments)},notifyFocus:function(){return e.props.onFocus(...arguments)},notifyRangeInputClear:function(){return e.props.onRangeClear(...arguments)},notifyRangeInputFocus:function(){return e.props.onFocus(...arguments)},notifyTabPress:function(){return e.props.onRangeEndTabPress(...arguments)},notifyInsetInputChange:t=>this.props.onInsetInputChange(t)})}componentDidMount(){this.foundation.init()}componentWillUnmount(){this.foundation.destroy()}formatText(e){return e&&e.length?this.foundation.formatShowText(e):""}renderRangePrefix(){const{prefix:e,insetLabel:t,prefixCls:n,disabled:a,rangeInputFocus:i}=this.props,r=e||t;return r?b.createElement("div",{className:`${n}-range-input-prefix`,onClick:u=>!a&&!i&&this.handleRangeStartFocus(u),"x-semi-prop":"prefix,insetLabel"},r):null}renderRangeSeparator(e,t){const{disabled:n,rangeSeparator:a,rangeSeparatorNode:i}=this.props,r=Y({[`${N.PREFIX}-range-input-separator`]:!0,[`${N.PREFIX}-range-input-separator-active`]:(e||t)&&!n});return b.createElement("span",{onClick:u=>!n&&this.handleRangeStartFocus(u),className:r},i??a)}renderRangeClearBtn(e,t){const{showClear:n,prefixCls:a,disabled:i,clearIcon:r,showClearIgnoreDisabled:u}=this.props;return(e||t)&&n&&!(i&&!u)?b.createElement("div",{role:"button",tabIndex:0,"aria-label":"Clear range input value",className:`${a}-range-input-clearbtn`,onMouseDown:c=>this.handleRangeInputClear(c)},r||b.createElement(ls,{"aria-hidden":!0})):null}renderRangeSuffix(e){const{prefixCls:t,disabled:n,rangeInputFocus:a}=this.props;return e?b.createElement("div",{className:`${t}-range-input-suffix`,onClick:r=>!n&&!a&&this.handleRangeStartFocus(r)},e):null}renderRangeInput(e){const{placeholder:t,inputStyle:n,disabled:a,inputReadOnly:i,autofocus:r,size:u,text:o,suffix:l,inputCls:c,rangeInputStartRef:d,rangeInputEndRef:f,rangeInputFocus:h,prefixCls:v,rangeSeparator:w,borderless:m}=e,[g,T=""]=o.split(w)||[],y=u==="large"?"default":"small",D=Array.isArray(t)?t:[t,t],[_,I]=D,x=Y(`${v}-range-input-wrapper-start`,`${v}-range-input-wrapper`,{[`${v}-range-input-wrapper-active`]:h==="rangeStart"&&!a,[`${v}-range-input-wrapper-start-with-prefix`]:this.props.prefix||this.props.insetLabel,[`${v}-borderless`]:m}),R=Y(`${v}-range-input-wrapper-end`,`${v}-range-input-wrapper`,{[`${v}-range-input-wrapper-active`]:h==="rangeEnd"&&!a,[`${v}-borderless`]:m});return b.createElement(b.Fragment,null,this.renderRangePrefix(),b.createElement("div",{onClick:C=>!a&&this.handleRangeInputFocus(C,"rangeStart"),className:`${c} ${x}`},b.createElement(gt,{borderless:m,size:y,style:n,disabled:a,readonly:i,placeholder:_,value:g,onChange:(C,E)=>this.handleRangeInputChange(C,T,E),onEnterPress:C=>this.handleRangeInputEnterPress(C,g,T),onFocus:C=>this.handleRangeInputFocus(C,"rangeStart"),autoFocus:r,ref:d})),this.renderRangeSeparator(g,T),b.createElement("div",{className:`${c} ${R}`,onClick:C=>!a&&this.handleRangeInputFocus(C,"rangeEnd")},b.createElement(gt,{borderless:m,size:y,style:n,disabled:a,readonly:i,placeholder:I,value:T,onChange:(C,E)=>this.handleRangeInputChange(g,C,E),onEnterPress:C=>this.handleRangeInputEnterPress(C,g,T),onFocus:C=>this.handleRangeInputFocus(C,"rangeEnd"),onKeyDown:this.handleRangeInputEndKeyPress,ref:f})),this.renderRangeClearBtn(g,T),this.renderRangeSuffix(l))}isRenderMultipleInputs(){const{type:e}=this.props;return e.includes("Range")&&e!=="monthRange"}renderInputInset(){const{type:e,handleInsetDateFocus:t,handleInsetTimeFocus:n,value:a,insetInputValue:i,prefixCls:r,rangeInputStartRef:u,rangeInputEndRef:o,density:l,insetInput:c}=this.props,d=this.foundation.getInsetInputValue({value:a,insetInputValue:i}),{dateStart:f,dateEnd:h,timeStart:v,timeEnd:w}=oe(c,"placeholder",{}),{datePlaceholder:m,timePlaceholder:g}=this.foundation.getInsetInputPlaceholder(),T=`${r}-inset-input-wrapper`,y=`${r}-inset-input-separator`;return b.createElement("div",{className:T,"x-type":e},b.createElement(Ar,{forwardRef:u,insetInputValue:d,placeholder:f??m,valuePath:"monthLeft.dateInput",onChange:this.handleInsetInputChange,onFocus:D=>t(D,"rangeStart")}),b.createElement(Fr,{disabled:!d.monthLeft.dateInput,insetInputValue:d,placeholder:v??g,type:e,valuePath:"monthLeft.timeInput",onChange:this.handleInsetInputChange,onFocus:n}),this.isRenderMultipleInputs()&&b.createElement(b.Fragment,null,b.createElement("div",{className:y},l==="compact"?null:"-"),b.createElement(Ar,{forwardRef:o,insetInputValue:d,placeholder:h??m,valuePath:"monthRight.dateInput",onChange:this.handleInsetInputChange,onFocus:D=>t(D,"rangeEnd")}),b.createElement(Fr,{disabled:!d.monthRight.dateInput,insetInputValue:d,placeholder:w??g,type:e,valuePath:"monthRight.timeInput",onChange:this.handleInsetInputChange,onFocus:n})))}renderTriggerInput(){const e=this.props,{placeholder:t,type:n,value:a,inputValue:i,inputStyle:r,disabled:u,showClear:o,inputReadOnly:l,insetLabel:c,validateStatus:d,block:f,prefixCls:h,multiple:v,dateFnsLocale:w,onBlur:m,onClear:g,onFocus:T,prefix:y,autofocus:D,size:_,inputRef:I,rangeInputStartRef:x,rangeInputEndRef:R,onRangeClear:C,onRangeBlur:E,onRangeEndTabPress:O,rangeInputFocus:k,rangeSeparator:U,insetInput:se,insetInputValue:G,defaultPickerValue:Z,showClearIgnoreDisabled:ce}=e,me=ll(e,["placeholder","type","value","inputValue","inputStyle","disabled","showClear","inputReadOnly","insetLabel","validateStatus","block","prefixCls","multiple","dateFnsLocale","onBlur","onClear","onFocus","prefix","autofocus","size","inputRef","rangeInputStartRef","rangeInputEndRef","onRangeClear","onRangeBlur","onRangeEndTabPress","rangeInputFocus","rangeSeparator","insetInput","insetInputValue","defaultPickerValue","showClearIgnoreDisabled"]),he=b.createElement(Ti,{"aria-hidden":!0}),qe=b.createElement(ou,{"aria-hidden":!0}),Ie=n.includes("Time")?qe:he;let ge="";Be(i)?a&&(ge=this.formatText(a)):ge=i;const xe=Y({[`${h}-input-readonly`]:l,[`${h}-monthRange-input`]:n==="monthRange"}),Re=Object.assign(Object.assign({},this.props),{text:ge,suffix:Ie,inputCls:xe});return this.isRenderMultipleInputs()?this.renderRangeInput(Re):b.createElement(gt,Object.assign({},me,{ref:I,insetLabel:c,disabled:u,showClearIgnoreDisabled:ce,readonly:l,className:xe,style:r,hideSuffix:o,placeholder:n==="monthRange"&&Array.isArray(t)?t[0]+U+t[1]:t,onEnterPress:this.handleEnterPress,onChange:this.handleChange,onClear:this.handleInputClear,suffix:Ie,showClear:o,value:ge,validateStatus:d,prefix:y,autoFocus:D,size:_,onBlur:m,onFocus:T}))}render(){const{insetInput:e}=this.props;return e?this.renderInputInset():this.renderTriggerInput()}}Fn.propTypes={borderless:p.bool,onClick:p.func,onChange:p.func,onEnterPress:p.func,onBlur:p.func,onClear:p.func,onFocus:p.func,value:p.array,disabled:p.bool,type:p.oneOf(P.TYPE_SET),showClear:p.bool,format:p.string,inputStyle:p.object,inputReadOnly:p.bool,insetLabel:p.node,validateStatus:p.string,prefix:p.node,prefixCls:p.string,dateFnsLocale:p.object.isRequired,placeholder:p.oneOfType([p.string,p.array]),rangeInputFocus:p.oneOfType([p.string,p.bool]),rangeInputStartRef:p.object,rangeInputEndRef:p.object,rangeSeparator:p.string,rangeSeparatorNode:p.node,insetInput:p.oneOfType([p.bool,p.object]),insetInputValue:p.object,defaultPickerValue:p.oneOfType([p.string,p.number,p.object,p.array])};Fn.defaultProps={borderless:!1,showClear:!0,onClick:We,onChange:We,onEnterPress:We,onBlur:We,onClear:We,onFocus:We,type:"date",inputStyle:{},inputReadOnly:!1,prefixCls:N.PREFIX,rangeSeparator:P.DEFAULT_SEPARATOR_RANGE};function Ni(){let s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"",t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"",n="";const a=typeof e=="number"&&e<10?`0${e}`:e.toString(),i=typeof t=="number"&&t<10?`0${t}`:t.toString();return n=`${String(s)}-${a}-${i}`,n}function cl(s){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;const t={dayNumber:"",dateNumberFull:"",fullDate:""},n=li(s),a=X(s,"yyyy"),i=X(s,"MM"),r=Hs(s),u=bs(s),o=Number(X(u,"e",{weekStartsOn:e})),l=[];let c=[];for(let d=1;d{const t=cl(s,e);return{monthText:X(s,"yyyy-MM"),weeks:t,month:s}},Yr={month:je,year:Ds},fl={prevMonth:au,nextMonth:Le,prevYear:ru,nextYear:xn};class hl extends He{constructor(e){super(Object.assign({},e)),this.newBiMonthPanelDate=[this.getState("monthLeft").pickerDate,this.getState("monthRight").pickerDate]}init(){const e=this.getProp("defaultValue");this.initDefaultPickerValue(),this.updateSelectedFromProps(e)}initDefaultPickerValue(){const e=ne(this.getProp("defaultPickerValue"));e&&_e(e)&&(this._updatePanelDetail(P.PANEL_TYPE_LEFT,{pickerDate:e}),this._updatePanelDetail(P.PANEL_TYPE_RIGHT,{pickerDate:Le(e,1)}))}updateSelectedFromProps(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;const n=this.getProp("type"),{selected:a,rangeStart:i,rangeEnd:r}=this.getStates();if(e&&(e!=null&&e.length))switch(n){case"date":this._initDatePickerFromValue(e,t);break;case"dateRange":this._initDateRangePickerFromValue(e);break;case"dateTime":this._initDateTimePickerFromValue(e);break;case"dateTimeRange":this._initDateTimeRangePickerFormValue(e);break}else(Array.isArray(e)&&!e.length||!e)&&(ns(a)&&a.size&&this._adapter.updateDaySelected(new Set),i&&this._adapter.setRangeStart(""),r&&this._adapter.setRangeEnd(""))}calcDisabledTime(e){const{disabledTime:t,type:n}=this.getProps();if(typeof t=="function"&&e&&["dateTime","dateTimeRange"].includes(n)){const{rangeStart:a,rangeEnd:i,monthLeft:r}=this.getStates(),u=[];n==="dateTimeRange"?(a&&u.push(a),a&&i&&u.push(i)):r&&r.showDate&&u.push(r.showDate);const o=u.map(c=>c instanceof Date?c:be(c)),l=n==="dateTimeRange"?o:o[0];return t(l,e)}}_initDatePickerFromValue(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;const{monthLeft:n}=this._adapter.getStates(),a=Object.assign({},n);this._adapter.updateMonthOnLeft(a);const i=new Set,r=this._isMultiple();r?e.forEach(u=>{u&&i.add(X(u,P.FORMAT_FULL_DATE))}):e[0]&&i.add(X(e[0],P.FORMAT_FULL_DATE)),t?r?!(e!=null&&e.some(o=>o&&je(o,n.pickerDate)===0))&&this.handleShowDateAndTime(P.PANEL_TYPE_LEFT,e[0]||a.pickerDate):this.handleShowDateAndTime(P.PANEL_TYPE_LEFT,e[0]||a.pickerDate):this.handleShowDateAndTime(P.PANEL_TYPE_LEFT,a.pickerDate),this._adapter.updateDaySelected(i)}_initDateRangePickerFromValue(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;const n=this.getState("monthLeft"),a=this.getState("monthRight"),i=this._autoAdjustMonth(Object.assign(Object.assign({},n),{pickerDate:e[0]||n.pickerDate}),Object.assign(Object.assign({},a),{pickerDate:e[1]||a.pickerDate}));if(Array.isArray(e)&&e.filter(c=>c).length>1)this.handleShowDateAndTime(P.PANEL_TYPE_LEFT,i.monthLeft.pickerDate),this.handleShowDateAndTime(P.PANEL_TYPE_RIGHT,i.monthRight.pickerDate);else{const c=e.find(d=>d);if(c){const d=Math.abs(je(c,n.pickerDate))>0,f=Math.abs(je(c,a.pickerDate))>0;d&&f&&(this.handleShowDateAndTime(P.PANEL_TYPE_LEFT,i.monthLeft.pickerDate),this.handleShowDateAndTime(P.PANEL_TYPE_RIGHT,i.monthRight.pickerDate))}}const u=t?P.FORMAT_DATE_TIME:P.FORMAT_FULL_DATE;let o=e[0]&&X(e[0],u),l=e[1]&&X(e[1],u);this._isNeedSwap(o,l)&&([o,l]=[l,o]),this._adapter.setRangeStart(o),this._adapter.setRangeEnd(l),this._adapter.setHoverDay(l)}_initDateTimePickerFromValue(e){this._initDatePickerFromValue(e)}_initDateTimeRangePickerFormValue(e){this._initDateRangePickerFromValue(e,!0)}destroy(){}handleSyncChangeMonths(e){const{panelType:t,target:n}=e,{type:a}=this._adapter.getProps(),{monthLeft:i,monthRight:r}=this._adapter.getStates();this.isRangeType(a)&&(t==="right"&&je(n,i.pickerDate)===0?this.handleYearOrMonthChange("prevMonth","left",1,!0):t==="left"&&je(r.pickerDate,n)===0&&this.handleYearOrMonthChange("nextMonth","right",1,!0))}getTargetChangeDate(e){const{panelType:t,switchType:n}=e,{monthRight:a,monthLeft:i}=this._adapter.getStates(),r=t==="left"?i.pickerDate:a.pickerDate;let u;switch(n){case"prevMonth":u=Le(r,-1);break;case"nextMonth":u=Le(r,1);break;case"prevYear":u=xn(r,-1);break;case"nextYear":u=xn(r,1);break}return u}toMonth(e,t){const{type:n}=this._adapter.getProps(),a=this._getDiff("month",t,e);this.handleYearOrMonthChange(a<0?"prevMonth":"nextMonth",e,Math.abs(a),!1),this.isRangeType(n)&&this.handleSyncChangeMonths({panelType:e,target:t})}toYear(e,t){const n=this._getDiff("year",t,e);this.handleYearOrMonthChange(n<0?"prevYear":"nextYear",e,Math.abs(n),!1)}toYearMonth(e,t){this.toYear(e,t),this.toMonth(e,t)}isRangeType(e){const{type:t}=this.getProps(),n=e||t;return typeof n=="string"&&/range/i.test(n)}handleSwitchMonthOrYear(e,t){const{type:n,syncSwitchMonth:a}=this.getProps(),i=this.isRangeType(n);if(i&&a)this.handleYearOrMonthChange(e,"left",1,!0),this.handleYearOrMonthChange(e,"right",1,!0);else if(this.handleYearOrMonthChange(e,t),i){const r=this.getTargetChangeDate({panelType:t,switchType:e});this.handleSyncChangeMonths({panelType:t,target:r})}}prevMonth(e){this.handleSwitchMonthOrYear("prevMonth",e)}nextMonth(e){this.handleSwitchMonthOrYear("nextMonth",e)}prevYear(e){this.handleSwitchMonthOrYear("prevYear",e)}nextYear(e){this.handleSwitchMonthOrYear("nextYear",e)}_getDiff(e,t,n){const a=this._getPanelDetail(n);return Yr[e]&&Yr[e](t,a.pickerDate)}_getPanelDetail(e){return e===P.PANEL_TYPE_RIGHT?this.getState("monthRight"):this.getState("monthLeft")}localeFormat(e,t){const n=this._adapter.getProp("dateFnsLocale");return X(e,t,{locale:n})}disposeCallbackArgs(e){let t=Array.isArray(e)?e:e&&[e]||[];const n=this.getProp("timeZone");En(n)&&(t=t.map(o=>aa(o,n)));const a=this.getProp("type"),i=this.getProp("format")||$e(a);let r,u;switch(a){case"date":case"dateTime":case"month":this._isMultiple()?(r=t.map(o=>o&&this.localeFormat(o,i)),u=[...t]):(r=t[0]&&this.localeFormat(t[0],i),[u]=t);break;case"dateRange":case"dateTimeRange":r=t.map(o=>o&&this.localeFormat(o,i)),u=[...t];break}return{notifyValue:r,notifyDate:u}}handleYearOrMonthChange(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:P.PANEL_TYPE_LEFT,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;const{autoSwitchDate:i,type:r}=this.getProps(),{monthLeft:u,monthRight:o}=this.getStates(),l=this.isRangeType(r),c=l&&t===P.PANEL_TYPE_LEFT,d=this._getPanelDetail(t),{pickerDate:f}=d,h=fl[e],v=h(f,n),w=t===P.PANEL_TYPE_LEFT&&!De(v,u.pickerDate)||t===P.PANEL_TYPE_RIGHT&&!De(v,o.pickerDate);if(this._updatePanelDetail(t,{pickerDate:v}),w)if(l){if(c?this.newBiMonthPanelDate[0]=v:this.newBiMonthPanelDate[1]=v,!(c&&a)){const{notifyValue:m,notifyDate:g}=this.disposeCallbackArgs(this.newBiMonthPanelDate);this._adapter.notifyPanelChange(g,m)}}else{const{notifyValue:m,notifyDate:g}=this.disposeCallbackArgs(v);this._adapter.notifyPanelChange(g,m)}i&&this.updateDateAfterChangeYM(e,v)}updateDateAfterChangeYM(e,t){const{multiple:n,disabledDate:a,type:i}=this.getProps(),{selected:r,rangeStart:u,rangeEnd:o,monthLeft:l}=this.getStates(),c=["dateRange","dateTimeRange"].includes(e),d={closePanel:!1};if(!n&&!c&&r.size){const f=Array.from(r)[0],h=new Date(f),v=t.getFullYear(),w=t.getMonth();let m=yi(h,{year:v,month:w});if(i==="dateTime"&&(m=this._mergeDateAndTime(m,l.pickerDate)),a(m,{rangeStart:u,rangeEnd:o}))return;this._adapter.notifySelectedChange([m],d)}}_isMultiple(){return!!this.getProp("multiple")&&this.getProp("type")==="date"}_isRange(){}handleDayClick(e,t){const n=this.getProp("type");switch(!0){case(n==="date"||n==="dateTime"):this.handleDateSelected(e,t);break;case(n==="dateRange"||n==="dateTimeRange"):this.handleRangeSelected(e);break}}handleDateSelected(e,t){const{max:n,type:a,isControlledComponent:i,dateFnsLocale:r}=this.getProps(),u=this._isMultiple(),{selected:o}=this.getStates(),l=this._getPanelDetail(t),c=new Set(u?[...o]:[]),{fullDate:d}=e,f=l.pickerDate,h=d;u?c.has(h)?c.delete(h):n&&c.size===n?this._adapter.notifyMaxLimit():c.add(h):c.add(h);const v=[...c].map(w=>a==="dateTime"?this._mergeDateAndTime(w,f):ne(w,P.FORMAT_FULL_DATE,void 0,r));this.handleShowDateAndTime(t,f),i||this._adapter.updateDaySelected(c),this._adapter.notifySelectedChange(v)}handleShowDateAndTime(e,t,n){const a=n||t;this._updatePanelDetail(e,{showDate:a,pickerDate:t})}_mergeDateAndTime(e,t){const n=this._adapter.getProp("dateFnsLocale"),a=X(_e(e)?e:ne(e,P.FORMAT_FULL_DATE,void 0,n),P.FORMAT_FULL_DATE),i=X(_e(t)?t:ne(t,P.FORMAT_TIME_PICKER,void 0,n),P.FORMAT_TIME_PICKER),r=this.getValidTimeFormat();return ne(`${a} ${i}`,r,void 0,n)}handleRangeSelected(e){let{rangeStart:t,rangeEnd:n}=this.getStates();const{startDateOffset:a,endDateOffset:i,type:r,dateFnsLocale:u,rangeInputFocus:o,triggerRender:l}=this._adapter.getProps(),{fullDate:c}=e;let d=!1,f=!1;const h=(a||i)&&r==="dateRange";h?(t=St(a,c),n=St(i,c)):o==="rangeEnd"?(n=c,t&&n&&it(n,t.trim().split(/\s+/)[0])&&(t=null,d=!0)):(o==="rangeStart"||!o)&&(t=c,t&&n&&it(n.trim().split(/\s+/)[0],t)&&(n=null,f=!0)),/range/i.test(r)&&(h?(this._adapter.setRangeStart(t),this._adapter.setRangeEnd(n)):o==="rangeEnd"?(this._adapter.setRangeEnd(n),d&&this._adapter.setRangeStart(t),(!this._adapter.isAnotherPanelHasOpened("rangeEnd")||!t)&&this._adapter.setRangeInputFocus("rangeStart")):(o==="rangeStart"||!o)&&(this._adapter.setRangeStart(t),f&&this._adapter.setRangeEnd(n),(!this._adapter.isAnotherPanelHasOpened("rangeStart")||!n)&&this._adapter.setRangeInputFocus("rangeEnd")));const w=this.getValidDateFormat();if(t||n){const[m,g]=[ne(t,w,void 0,u),ne(n,w,void 0,u)];let T=[m,g];if(r==="dateTimeRange"){const D=this.getState("monthLeft").pickerDate,_=this.getState("monthRight").pickerDate,I=t?this._mergeDateAndTime(t,D):null,x=n?this._mergeDateAndTime(n,_):null;ua(m,g)&&it(x,I)?T=[I,I]:T=[I,x]}const y=!(r==="dateRange"&&h);this._adapter.notifySelectedChange(T,{needCheckFocusRecord:y})}}_isNeedSwap(e,t){return e&&t&&it(t,e)}handleDayHover(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{fullDate:""};const{fullDate:t}=e,{startDateOffset:n,endDateOffset:a,type:i}=this.getProps();if(this._adapter.setHoverDay(t),(n||a)&&i==="dateRange"){const r=St(n,t),u=St(a,t);this._adapter.setOffsetRangeStart(r),this._adapter.setOffsetRangeEnd(u)}}_autoAdjustMonth(e,t){let n=e,a=t;const i=je(e.pickerDate,t.pickerDate);return i>0?(n=Object.assign({},t),a=Object.assign({},e)):i===0&&(n=e,a=Object.assign(Object.assign({},t),{pickerDate:Le(t.pickerDate,1)})),{monthLeft:n,monthRight:a}}getValidTimeFormat(){const e=this.getProp("format")||P.FORMAT_TIME_PICKER,t=[];return(Et(e,"h")||Et(e,"H"))&&t.push("HH"),Et(e,"m")&&t.push("mm"),Et(e,"s")&&t.push("ss"),t.join(":")}getValidDateFormat(){return this.getProp("format")||Du(this.getProp("type"))}handleTimeChange(e,t){const{rangeEnd:n,rangeStart:a}=this.getStates(),i=this.getProp("dateFnsLocale"),r=e.timeStampValue,u=this.getProp("type"),o=this._getPanelDetail(t),{showDate:l}=o,c=new Date(r),d=this.getValidDateFormat(),f=t===P.PANEL_TYPE_RIGHT?n:a;let h,v,w;if(u==="dateTimeRange"&&f){const I=ne(f,d,void 0,i);h=I.getFullYear(),v=I.getMonth(),w=I.getDate()}else h=l.getFullYear(),v=l.getMonth(),w=l.getDate();const m=c.getHours(),g=c.getMinutes(),T=c.getSeconds(),y=c.getMilliseconds(),D=[h,v,w,m,g,T,y],_=new Date(...D);if(u==="dateTimeRange")this.handleShowDateAndTime(t,_,l),this._updateTimeInDateRange(t,_);else{const I=Ni(h,v+1,w);this.handleDateSelected({fullDate:I,fullValidDate:_},t),this.handleShowDateAndTime(t,_),this._adapter.notifySelectedChange([_])}}_updateTimeInDateRange(e,t){const{isControlledComponent:n,dateFnsLocale:a}=this.getProps();let i=this.getState("rangeStart"),r=this.getState("rangeEnd");const u=this.getValidDateFormat();if(i&&r){let o=ne(i,u,void 0,a),l=ne(r,u,void 0,a);e===P.PANEL_TYPE_RIGHT?(l=this._mergeDateAndTime(t,t),r=X(l,P.FORMAT_DATE_TIME),this._isNeedSwap(i,r)&&([i,r]=[r,i],[o,l]=[l,o]),n||this._adapter.setRangeEnd(r)):(o=this._mergeDateAndTime(t,t),i=X(o,P.FORMAT_DATE_TIME),this._isNeedSwap(i,r)&&([i,r]=[r,i],[o,l]=[l,o]),n||this._adapter.setRangeStart(i)),this._adapter.notifySelectedChange([o,l])}}_updatePanelDetail(e,t){const{monthLeft:n,monthRight:a}=this.getStates();e===P.PANEL_TYPE_RIGHT?this._adapter.updateMonthOnRight(Object.assign(Object.assign({},a),t)):this._adapter.updateMonthOnLeft(Object.assign(Object.assign({},n),t))}showYearPicker(e){this._updatePanelDetail(e,{isTimePickerOpen:!1,isYearPickerOpen:!0})}showTimePicker(e,t){this.getProp("disabledTimePicker")||this._updatePanelDetail(e,{isTimePickerOpen:!0,isYearPickerOpen:!1})}showDatePanel(e){this._updatePanelDetail(e,{isTimePickerOpen:!1,isYearPickerOpen:!1})}getYAMOpenType(){const{monthLeft:e,monthRight:t}=this._adapter.getStates(),n=e.isYearPickerOpen,a=t.isYearPickerOpen;return n&&a?"both":n?"left":a?"right":"none"}}const Lr=N.NAVIGATION;class pa extends J.PureComponent{constructor(e){super(e),this.navRef=b.createRef()}render(){const{forwardRef:e,monthText:t,onMonthClick:n,onNextMonth:a,onPrevMonth:i,onPrevYear:r,onNextYear:u,density:o,shouldBimonthSwitch:l,panelType:c}=this.props,d="borderless",f=o==="compact"?"default":"large",h=!0,v=o==="compact"?"small":"default",w=c===P.PANEL_TYPE_LEFT,m=c===P.PANEL_TYPE_RIGHT,g=l&&w,T=l&&m,y={},D={};T&&(y.visibility="hidden"),g&&(D.visibility="hidden");const _=e||this.navRef;return b.createElement("div",{className:Lr,ref:_},b.createElement(pt,{key:"double-chevron-left","aria-label":"Previous year",icon:b.createElement(du,{"aria-hidden":!0,size:f}),size:v,theme:d,noHorizontalPadding:h,onClick:r,style:y}),b.createElement(pt,{key:"chevron-left","aria-label":"Previous month",icon:b.createElement(Zr,{"aria-hidden":!0,size:f}),size:v,onClick:i,theme:d,noHorizontalPadding:h,style:y}),b.createElement("div",{className:`${Lr}-month`},b.createElement(yt,{onClick:n,theme:d,size:v},b.createElement("span",null,t))),b.createElement(pt,{key:"chevron-right","aria-label":"Next month",icon:b.createElement(as,{"aria-hidden":!0,size:f}),size:v,onClick:a,theme:d,noHorizontalPadding:h,style:D}),b.createElement(pt,{key:"double-chevron-right","aria-label":"Next year",icon:b.createElement(hu,{"aria-hidden":!0,size:f}),size:v,theme:d,noHorizontalPadding:h,onClick:u,style:D}))}}pa.propTypes={monthText:p.string,density:p.string,onMonthClick:p.func,onNextMonth:p.func,onPrevMonth:p.func,onNextYear:p.func,onPrevYear:p.func,navPrev:p.node,navNext:p.node,shouldBimonthSwitch:p.bool,panelType:p.oneOf([P.PANEL_TYPE_LEFT,P.PANEL_TYPE_RIGHT])};pa.defaultProps={monthText:"",onMonthClick:Q,onNextMonth:Q,onPrevMonth:Q,onNextYear:Q,onPrevYear:Q};const pl=s=>{let{weekStartsOn:e=0}=s;const t=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];for(let n=0;n{this._adapter.notifyWeeksRowNumChange(i.length)})}}updateWeekDays(){const e=this._adapter.getProp("weekStartsOn"),t=pl({weekStartsOn:e});this._adapter.setWeekDays(t)}destroy(){}handleClick(e){this._adapter.notifyDayClick(e)}handleHover(e){this._adapter.notifyDayHover(e)}}const gl=N.PREFIX;class ma extends Ue{constructor(e){super(e),this.state={weekdays:[],month:{weeks:[],monthText:""},todayText:"",weeksRowNum:e.weeksRowNum},this.monthRef=b.createRef()}get adapter(){return Object.assign(Object.assign({},super.adapter),{updateToday:e=>this.setState({todayText:e}),setWeekDays:e=>this.setState({weekdays:e}),setWeeksRowNum:(e,t)=>this.setState({weeksRowNum:e},t),updateMonthTable:e=>this.setState({month:e}),notifyDayClick:e=>this.props.onDayClick(e),notifyDayHover:e=>this.props.onDayHover(e),notifyWeeksRowNumChange:e=>this.props.onWeeksRowNumChange(e)})}componentDidMount(){this.foundation=new ml(this.adapter),this.foundation.init()}componentWillUnmount(){this.foundation.destroy()}componentDidUpdate(e,t){e.month!==this.props.month&&this.foundation.getMonthTable()}getSingleDayStatus(e){const{rangeInputFocus:t}=this.props,{fullDate:n,todayText:a,selected:i,disabledDate:r,rangeStart:u,rangeEnd:o}=e,l={rangeStart:u,rangeEnd:o,rangeInputFocus:t},c=n===a,d=i.has(n);let f=r&&r(be(n),l);return!f&&this.props.rangeInputFocus==="rangeStart"&&o&&this.props.focusRecordsRef&&this.props.focusRecordsRef.current.rangeEnd&&(f=Ma(n,o.trim().split(/\s+/)[0])),!f&&this.props.rangeInputFocus==="rangeEnd"&&u&&this.props.focusRecordsRef&&this.props.focusRecordsRef.current.rangeStart&&(f=it(n,u.trim().split(/\s+/)[0])),{isToday:c,isSelected:d,isDisabled:f}}getDateRangeStatus(e){const{rangeStart:t,rangeEnd:n,fullDate:a,hoverDay:i,offsetRangeStart:r,offsetRangeEnd:u,rangeInputFocus:o}=e,l=!!(t||n),c=!!(t&&n),d=r||u;if(!l)return{};const f=Ye(i,a);let h,v,w,m,g;t&&(w=Ye(a,t),o==="rangeEnd"&&(h=et(a,{start:t,end:i}))),n&&(m=Ye(a,n),o==="rangeStart"&&(v=et(a,{start:i,end:n}))),!c&&l&&(g=f);let T;d||(T=h||v||f);let y,D,_,I,x,R;return c&&(y=et(a,{start:t,end:n}),d||(D=w&&Ma(t,i),_=m&&it(n,i),I=f&&o==="rangeStart",x=f&&o==="rangeEnd",R=f&&et(i,{start:t,end:n}))),{isHoverDay:f,isSelectedStart:w,isSelectedEnd:m,isInRange:y,isHover:T,isSelectedStartAfterHover:D,isSelectedEndBeforeHover:_,isHoverDayInRange:R,isHoverDayInStartSelection:I,isHoverDayInEndSelection:x,isHoverDayAroundOneSelected:g}}getOffsetDateStatus(e){const{offsetRangeStart:t,offsetRangeEnd:n,rangeStart:a,rangeEnd:i,fullDate:r,hoverDay:u}=e;if(!(t||n))return{};const l=et(r,{start:a,end:i}),c=Ye(u,r),d=a&&Ye(r,a),f=i&&Ye(r,i),h=!!(a&&i),v=Ye(r,t),w=Ye(r,n),m=c;let g,T;return h&&(g=l&&c),!!(t&&n)&&(T=d||et(r,{start:t,end:n})||f),{isOffsetRangeStart:v,isOffsetRangeEnd:w,isHoverInOffsetRange:g,isHoverDayOffset:m,isInOffsetRange:T}}getDayStatus(e,t){const{fullDate:n}=e,{hoverDay:a,rangeStart:i,rangeEnd:r,todayText:u,offsetRangeStart:o,offsetRangeEnd:l,disabledDate:c,selected:d,rangeInputFocus:f}=t,h=this.getSingleDayStatus({fullDate:n,todayText:u,hoverDay:a,selected:d,disabledDate:c,rangeStart:i,rangeEnd:r}),v=this.getDateRangeStatus(Object.assign({fullDate:n,rangeStart:i,rangeEnd:r,hoverDay:a,offsetRangeStart:o,offsetRangeEnd:l,rangeInputFocus:f},h)),w=this.getOffsetDateStatus(Object.assign(Object.assign({offsetRangeStart:o,offsetRangeEnd:l,rangeStart:i,rangeEnd:r,fullDate:n,hoverDay:a},h),v));return Object.assign(Object.assign(Object.assign({},h),v),w)}renderDayOfWeek(){const{locale:e}=this.props,t=Y(N.WEEKDAY),n=Y(`${gl}-weekday-item`),{weekdays:a}=this.state,i=a.map(r=>e.weeks[r]);return b.createElement("div",{role:"row",className:t},i.map((r,u)=>b.createElement("div",{role:"columnheader",key:r+u,className:n},r)))}renderWeeks(){const{month:e}=this.state,{weeks:t}=e,{weeksRowNum:n}=this.props;let a={};n&&(a={height:n*ut.WEEK_HEIGHT});const i=Y(N.WEEKS);return b.createElement("div",{className:i,style:a},t.map((r,u)=>this.renderWeek(r,u)))}renderWeek(e,t){const n=N.WEEK;return b.createElement("div",{role:"row",className:n,key:t},e.map((a,i)=>this.renderDay(a,i)))}renderDay(e,t){const{todayText:n}=this.state,{renderFullDate:a,renderDate:i}=this.props,{fullDate:r,dayNumber:u}=e;if(!r)return b.createElement("div",{role:"gridcell",tabIndex:-1,key:u+t,className:N.DAY},b.createElement("span",null));const o=this.getDayStatus(e,Object.assign({todayText:n},this.props)),l=Y(N.DAY,{[N.DAY_TODAY]:o.isToday,[N.DAY_IN_RANGE]:o.isInRange,[N.DAY_HOVER]:o.isHover,[N.DAY_SELECTED]:o.isSelected,[N.DAY_SELECTED_START]:o.isSelectedStart,[N.DAY_SELECTED_END]:o.isSelectedEnd,[N.DAY_DISABLED]:o.isDisabled,[N.DAY_HOVER_DAY]:o.isHoverDayOffset,[N.DAY_IN_OFFSET_RANGE]:o.isInOffsetRange,[N.DAY_SELECTED_RANGE_HOVER]:o.isHoverInOffsetRange,[N.DAY_OFFSET_RANGE_START]:o.isOffsetRangeStart,[N.DAY_OFFSET_RANGE_END]:o.isOffsetRangeEnd,[N.DAY_SELECTED_START_AFTER_HOVER]:o.isSelectedStartAfterHover,[N.DAY_SELECTED_END_BEFORE_HOVER]:o.isSelectedEndBeforeHover,[N.DAY_HOVER_DAY_BEFORE_RANGE]:o.isHoverDayInStartSelection,[N.DAY_HOVER_DAY_AFTER_RANGE]:o.isHoverDayInEndSelection,[N.DAY_HOVER_DAY_AROUND_SINGLE_SELECTED]:o.isHoverDayAroundOneSelected}),c=Y({[`${N.DAY}-main`]:!0}),d=[u,r,o],f=st(a);return b.createElement("div",{role:"gridcell",tabIndex:o.isDisabled?-1:0,"aria-disabled":o.isDisabled,"aria-selected":o.isSelected,"aria-label":r,className:f?N.DAY:l,title:r,key:u+t,onClick:h=>!o.isDisabled&&this.foundation.handleClick(e),onMouseEnter:()=>this.foundation.handleHover(e),onMouseLeave:()=>this.foundation.handleHover()},f?a(...d):b.createElement("div",{className:c},st(i)?i(u,r):b.createElement("span",null,u)))}render(){const{forwardRef:e,multiple:t}=this.props,n=this.renderDayOfWeek(),a=this.renderWeeks(),i=Y(N.MONTH),r=e||this.monthRef;return b.createElement("div",{role:"grid","aria-multiselectable":t,ref:r,className:i},n,a)}}ma.propTypes={month:p.object,selected:p.object,rangeStart:p.string,rangeEnd:p.string,offsetRangeStart:p.string,offsetRangeEnd:p.string,onDayClick:p.func,onDayHover:p.func,weekStartsOn:p.number,disabledDate:p.func,weeksRowNum:p.number,onWeeksRowNumChange:p.func,renderDate:p.func,renderFullDate:p.func,hoverDay:p.string,startDateOffset:p.func,endDateOffset:p.func,rangeInputFocus:p.oneOfType([p.string,p.bool]),focusRecordsRef:p.object,multiple:p.bool};ma.defaultProps={month:new Date,selected:new Set,rangeStart:"",rangeEnd:"",onDayClick:Q,onDayHover:Q,onWeeksRowNumChange:Q,weekStartsOn:ut.WEEK_START_ON,disabledDate:Tt,weeksRowNum:0};const $r="time",vl="timeRange",at={DEFAULT_TYPE:$r,SIZE:Qr.SIZE,DEFAULT_FORMAT:"HH:mm:ss",DEFAULT_FORMAT_A:"a h:mm:ss",DEFAULT_POSITION:{[$r]:"bottomLeft",[vl]:"bottomLeft"}},ye={PREFIX:`${B}-scrolllist`,SELECTED:`${B}-scrolllist-item-selected`},yl={MODE:["normal","wheel"]},In={DEFAULT_ITEM_HEIGHT:36,DEFAULT_SCROLL_DURATION:120};var zn,Hr;function Tl(){if(Hr)return zn;Hr=1;var s=Vi(),e=Bi(),t=rs(),n=9007199254740991,a=4294967295,i=Math.min;function r(u,o){if(u=t(u),u<1||u>n)return[];var l=a,c=i(u,a);o=e(o),u-=a;for(var d=s(c,o);++l-1&&Array.isArray(a)&&a.length&&K(t)){const i=e%a.length,r=a[i],u=t.children[e];this._adapter.setSelectedNode(u),this._adapter.notifySelectItem(Object.assign(Object.assign({},r),{value:r.value,type:n,index:i}))}}selectNode(e,t){const{type:n,list:a}=this.getProps();if(K(e)&&K(t)){const r=rt(t.children,c=>c===e)%a.length,o=rt(t.children,c=>c===this._cachedSelectedNode)%a.length,l=a[r];this._adapter.setSelectedNode(e),this._adapter.scrollToCenter(e),this._cachedSelectedNode!==e&&(this._cachedSelectedNode=e,o!==r&&this._adapter.notifySelectItem(Object.assign(Object.assign({},l),{value:l.value,type:n,index:r})))}}shouldAppend(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:2;const a="li";if(K(e)&&K(t)){const i=e.querySelectorAll(a),r=i[i.length-1],{list:u}=this.getProps();if(r){const o=t.getBoundingClientRect(),l=r.getBoundingClientRect(),c=l.height*u.length;if(c<=0)return 0;let d=l.top,f=0;for(;d<=o.top+o.height*n;)f+=1,d+=c;return f}}return!1}shouldPrepend(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:2;const a="li";if(K(e)&&K(t)){const r=e.querySelectorAll(a)[0],{list:u}=this.getProps();if(r){const o=t.getBoundingClientRect(),l=r.getBoundingClientRect(),c=l.height*u.length;if(c<=0)return 0;let d=l.top,f=0;for(;d+l.height>=o.top-o.height*n;)f+=1,d-=c;return f}}return 0}initWheelList(e,t,n){const{list:a}=this.getProps();if(K(t)&&K(e)&&a&&a.length){const i=e.children;Un(i,0,a.length);const r=this.shouldPrepend(e,t),u=this.shouldAppend(e,t);this._adapter.setState({prependCount:r,appendCount:u},n)}}adjustInfiniteList(e,t,n){const{list:a}=this.getProps(),i="li";if(K(t)&&K(e)&&a&&a.length){const r=e.querySelectorAll(i),u=r.length,o=1,l=this.shouldPrepend(e,t,o),c=this.shouldAppend(e,t,o);if(l)for(let d=0;d{const f=l.getBoundingClientRect().top,h=Math.abs(f-a);h{if(f===a||f.contains(a))return o=h,u>0&&(l=h%u),!0});return l>-1&&(c=r[l]),{targetNode:d,targetIndex:o,indexInList:l,infoInList:c}}return null}}const bl=(s,e,t)=>{const n=new vs({from:{scrollTop:s.scrollTop},to:{scrollTop:e}},{duration:t});return n.on("frame",a=>{let{scrollTop:i}=a;s.scrollTop=i}),n},qr=1e3/60,Wr=/^\s*$/,On="wheel";class ke extends Ue{constructor(){var e;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(t),e=this,this._cacheNode=(n,a)=>n&&a&&Object.prototype.hasOwnProperty.call(this,n)&&(this[n]=a),this._cacheSelectedNode=n=>this._cacheNode("selectedNode",n),this._cacheWillSelectNode=n=>this._cacheNode("willSelectNode",n),this._cacheListNode=n=>this._cacheNode("list",n),this._cacheSelectorNode=n=>this._cacheNode("selector",n),this._cacheWrapperNode=n=>this._cacheNode("wrapper",n),this._isFirst=n=>{const{list:a}=this;if(K(n)&&K(a)){const i=a.children;return rt(i,n)===0}return!1},this._isLast=n=>{const{list:a}=this;if(K(n)&&K(a)){const{children:i}=a;return rt(i,n)===i.length-1}return!1},this.indexIsSame=(n,a)=>{const{list:i}=this.props;if(i.length)return n%i.length===a%i.length},this.isDisabledIndex=n=>{const{list:a}=this.props;if(Array.isArray(a)&&a.length&&n>-1){const i=a.length,r=n%i;return this.isDisabledData(a[r])}return!1},this.isDisabledNode=n=>{const a=this.list;if(K(n)&&K(a)){const i=rt(a.children,r=>r===n);return this.isDisabledIndex(i)}return!1},this.isDisabledData=n=>n&&typeof n=="object"&&n.disabled,this.isWheelMode=()=>this.props.mode===On,this.addClassToNode=function(n){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:ye.SELECTED;const{list:i}=e;if(n=n||e.selectedNode,K(n)&&K(i)){const{children:r}=i,u=new RegExp(`\\s*${a}\\s*`,"g");is(r,o=>{o.className=o.className&&o.className.replace(u," "),Wr.test(o.className)&&(o.className="")}),n.className&&!Wr.test(n.className)?n.className+=` ${a}`:n.className=a}},this.getIndexByNode=n=>rt(this.list.children,n),this.getNodeByIndex=n=>n>-1?Qn(this.list.children,(i,r)=>r===n):Qn(this.list.children,i=>!this.isDisabledNode(i)),this.scrollToIndex=(n,a)=>{a=typeof a=="number"?a:In.DEFAULT_SCROLL_DURATION,n=n??this.props.selectedIndex,this.scrollToNode(this.selectedNode,a)},this.scrollToNode=(n,a)=>{const{wrapper:i}=this,r=i.offsetHeight,u=this.getItmHeight(n),o=(n.offsetTop||this.list.children.length*u/2)-(r-u)/2;this.scrollToPos(o,a)},this.scrollToPos=function(n){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:In.DEFAULT_SCROLL_DURATION;const{wrapper:i}=e;if(a&&e.props.motion)if(e.scrollAnimation&&(e.scrollAnimation.destroy(),e.scrolling=!1),i.scrollTop===n){if(e.isWheelMode()){const r=e.foundation.getNearestNodeInfo(e.list,e.selector);e.addClassToNode(r.nearestNode)}}else e.scrollAnimation=bl(i,n,a),e.scrollAnimation.on("rest",()=>{if(e.isWheelMode()){const r=e.foundation.getNearestNodeInfo(e.list,e.selector);e.addClassToNode(r.nearestNode)}}),e.scrollAnimation.start();else i.scrollTop=n},this.scrollToSelectItem=n=>{const{nearestNode:a}=this.foundation.getNearestNodeInfo(this.list,this.selector);this.props.cycled&&this.throttledAdjustList(n,a),this.debouncedSelect(n,a)},this.scrollToCenter=(n,a,i)=>{if(n=n||this.selectedNode,a=a||this.wrapper,K(n)&&K(a)){const r=a.getBoundingClientRect(),u=n.getBoundingClientRect(),o=a.scrollTop+(u.top-(r.top+r.height/2-u.height/2));this.scrollToPos(o,typeof i=="number"?i:In.DEFAULT_SCROLL_DURATION)}},this.clickToSelectItem=n=>{n&&n.nativeEvent&&n.nativeEvent.stopImmediatePropagation();const{targetNode:a,infoInList:i}=this.foundation.getTargetNode(n,this.list);a&&i&&!i.disabled&&this.debouncedSelect(null,a)},this.getItmHeight=n=>n&&n.offsetHeight||In.DEFAULT_ITEM_HEIGHT,this.renderItemList=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";const{selectedIndex:a,mode:i,transform:r,list:u}=e.props;return u.map((o,l)=>{const{transform:c}=o,d=typeof c=="function"?c:r,f=a===l,h=Y({[`${ye.PREFIX}-item-sel`]:f&&i!==On,[`${ye.PREFIX}-item-disabled`]:!!o.disabled});let v="";f&&typeof d=="function"?v=d(o.value,o.text):v=o.text==null?o.value:o.text;const w={};return!e.isWheelMode()&&!o.disabled&&(w.onClick=()=>e.foundation.selectIndex(l,e.list)),b.createElement("li",Object.assign({key:n+l},w,{className:h,role:"option","aria-disabled":o.disabled}),v)})},this.renderNormalList=()=>{const{list:n,className:a,style:i}=this.props,r=this.renderItemList(),u=Y(`${ye.PREFIX}-item`,a);return b.createElement("div",{style:i,className:u,ref:this._cacheWrapperNode},b.createElement("ul",{role:"listbox","aria-multiselectable":!1,"aria-label":this.props["aria-label"],ref:this._cacheListNode},r))},this.renderInfiniteList=()=>{const{list:n,cycled:a,className:i,style:r}=this.props,{prependCount:u,appendCount:o}=this.state,l=Ur(u).reduce((g,T)=>{const y=this.renderItemList(`pre_${T}_`);return g.unshift(...y),g},[]),c=Ur(o).reduce((g,T)=>{const y=this.renderItemList(`app_${T}_`);return g.push(...y),g},[]),d=this.renderItemList(),f=Y(`${ye.PREFIX}-list-outer`,{[`${ye.PREFIX}-list-outer-nocycle`]:!a}),h=Y(`${ye.PREFIX}-item-wheel`,i),v=Y(`${ye.PREFIX}-selector`),w=Y(`${ye.PREFIX}-shade`,`${ye.PREFIX}-shade-pre`),m=Y(`${ye.PREFIX}-shade`,`${ye.PREFIX}-shade-post`);return b.createElement("div",{className:h,style:r},b.createElement("div",{className:w}),b.createElement("div",{className:v,ref:this._cacheSelectorNode}),b.createElement("div",{className:m}),b.createElement("div",{className:f,ref:this._cacheWrapperNode,onScroll:this.scrollToSelectItem},b.createElement("ul",{role:"listbox","aria-label":this.props["aria-label"],"aria-multiselectable":!1,ref:this._cacheListNode,onClick:this.clickToSelectItem},l,d,c)))},this.state={prependCount:0,appendCount:0},this.selectedNode=null,this.willSelectNode=null,this.list=null,this.wrapper=null,this.selector=null,this.scrollAnimation=null,this.foundation=new Dl(this.adapter),this.throttledAdjustList=Xi((n,a)=>{this.foundation.adjustInfiniteList(this.list,this.wrapper,a)},qr),this.debouncedSelect=cs((n,a)=>{this._cacheSelectedNode(a),this.foundation.selectNode(a,this.list)},qr*2)}get adapter(){var e=this;return Object.assign(Object.assign({},super.adapter),{setState:(t,n)=>this.setState(Object.assign({},t),n),setPrependCount:t=>this.setState({prependCount:t}),setAppendCount:t=>this.setState({appendCount:t}),isDisabledIndex:this.isDisabledIndex,setSelectedNode:t=>this._cacheWillSelectNode(t),notifySelectItem:function(){return e.props.onSelect(...arguments)},scrollToCenter:this.scrollToCenter})}componentWillUnmount(){this.props.cycled&&(this.throttledAdjustList.cancel(),this.debouncedSelect.cancel())}componentDidMount(){this.foundation.init();const{mode:e,cycled:t,selectedIndex:n,list:a}=this.props,i=this.getNodeByIndex(typeof n=="number"&&n>-1?n:0);this._cacheSelectedNode(i),this._cacheWillSelectNode(i),e===On&&t?this.foundation.initWheelList(this.list,this.wrapper,()=>{this.scrollToNode(i,0)}):this.scrollToNode(i,0)}componentDidUpdate(e){const{selectedIndex:t}=this.props;if(e.selectedIndex!==t){const n=this.getIndexByNode(this.willSelectNode);if(!this.indexIsSame(n,t)){const a=this.getNodeByOffset(this.selectedNode,t-e.selectedIndex,this.list);this._cacheWillSelectNode(a)}this._cacheSelectedNode(this.willSelectNode),this.scrollToIndex(t)}}getNodeByOffset(e,t,n){const{list:a}=this.props;if(K(e)&&K(n)&&typeof t=="number"&&Array.isArray(a)&&a.length){t=t%a.length;let r=this.getIndexByNode(e)+t;for(;r<0;)r+=a.length;if(t)return this.getNodeByIndex(r)}return e}render(){return this.isWheelMode()?this.renderInfiniteList():this.renderNormalList()}}ke.propTypes={mode:p.oneOf(yl.MODE),cycled:p.bool,list:p.array,selectedIndex:p.number,onSelect:p.func,transform:p.func,className:p.string,style:p.object,motion:p.oneOfType([p.func,p.bool]),type:p.oneOfType([p.string,p.number])};ke.defaultProps={selectedIndex:0,motion:!0,list:[],onSelect:Q,cycled:!1,mode:On};class _l extends He{}var Cl=function(s,e){var t={};for(var n in s)Object.prototype.hasOwnProperty.call(s,n)&&e.indexOf(n)<0&&(t[n]=s[n]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(s);a{let t=`${s}`;s<10&&(t=`0${s}`);let n=!1;return e&&e.indexOf(s)>=0&&(n=!0),{value:t,disabled:n}};function Zn(s,e,t){let n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1;const a=[];for(let i=0;ia<12).map(a=>a===0?12:a):n=n.map(a=>a===12?12:a-12)),n}getValidFormat(e){let t=Be(e)?this.getProp("format"):e;return t=this.getDefaultFormatIfNeed(),t=typeof t=="string"?t:at.DEFAULT_FORMAT,t}getDisplayDateFromTimeStamp(e){let t;return e&&(t=new Date(e)),!e||!_e(t)?this.createDateDefault():t}createDateDefault(){const e=new Date;return new Date(e.getFullYear(),e.getMonth(),e.getDate())}}class ga extends Ue{constructor(e){super(e),this.cacheRefCurrent=(t,n)=>{t&&typeof t=="string"&&this.adapter.setCache(t,n)},this.reselect=()=>{["ampm","hour","minute","second"].forEach(n=>{const a=this.adapter.getCache(n);a&&a.scrollToIndex&&a.scrollToIndex()})},this.onItemChange=t=>{let{type:n,value:a,disabled:i}=t,{onChange:r,use12Hours:u,isAM:o,format:l,timeStampValue:c}=this.props;const d=this.foundation.getDisplayDateFromTimeStamp(c);if(n==="hour")u?o?d.setHours(Number(a)%12):d.setHours(Number(a)%12+12):d.setHours(Number(a));else if(n==="minute")d.setMinutes(Number(a));else if(n==="ampm"){const f=a.toUpperCase();u&&(f==="PM"&&(o=!1,d.getHours()<12&&d.setHours(d.getHours()%12+12)),f==="AM"&&(o=!0,d.getHours()>=12&&d.setHours(d.getHours()-12)))}else d.setSeconds(Number(a));r&&r({isAM:o,value:X(d,l&&l.replace(/(\s+)A/g,"$1a")),timeStampValue:Number(d)})},this.onEnterSelectPanel=t=>{const{onCurrentSelectPanelChange:n}=this.props;n(t)},this.getDisplayDateFromTimeStamp=t=>this.foundation.getDisplayDateFromTimeStamp(t),this.foundation=new Il(this.adapter),this.state=Object.assign({},this.foundation.initData())}componentDidUpdate(e,t){(e.timeStampValue!==this.props.timeStampValue||e.format!==this.props.format||e.hideDisabledOptions!==this.props.hideDisabledOptions||e.use12Hours!==this.props.use12Hours||e.hourStep!==this.props.hourStep||e.minuteStep!==this.props.minuteStep||e.secondStep!==this.props.secondStep||e.disabledHours!==this.props.disabledHours||e.disabledMinutes!==this.props.disabledMinutes||e.disabledSeconds!==this.props.disabledSeconds)&&this.setState(Object.assign({},this.foundation.initData()))}componentWillUnmount(){}componentDidMount(){}renderHourSelect(e,t){const{prefixCls:n,disabledHours:a,use12Hours:i,scrollItemProps:r}=this.props,{showHour:u,hourOptions:o}=this.state;if(!u)return null;const l=a();let c,d;i?(c=[12].concat(o.filter(v=>v<12&&v>0)),d=e%12||12):(c=o,d=e);const f=v=>v+t.hour,h=`${n}-list-hour`;return b.createElement(ke,Object.assign({ref:v=>this.cacheRefCurrent("hour",v),mode:"normal",transform:f,className:h,list:c.map(v=>Xn(v,l)),selectedIndex:c.indexOf(d),type:"hour",onSelect:this.onItemChange},r))}renderMinuteSelect(e,t){const{prefixCls:n,disabledMinutes:a,timeStampValue:i,scrollItemProps:r}=this.props,{showMinute:u,minuteOptions:o}=this.state;if(!u)return null;const l=new Date(i),c=a&&a(l.getHours()),d=`${n}-list-minute`,f=h=>h+t.minute;return b.createElement(ke,Object.assign({ref:h=>this.cacheRefCurrent("minute",h),mode:"normal",transform:f,list:o.map(h=>Xn(h,c)),selectedIndex:o.indexOf(e),type:"minute",onSelect:this.onItemChange,className:d},r))}renderSecondSelect(e,t){const{prefixCls:n,disabledSeconds:a,timeStampValue:i,scrollItemProps:r}=this.props,{showSecond:u,secondOptions:o}=this.state;if(!u)return null;const l=new Date(i),c=a&&a(l.getHours(),l.getMinutes()),d=`${n}-list-second`,f=h=>String(h)+t.second;return b.createElement(ke,Object.assign({ref:h=>this.cacheRefCurrent("second",h),mode:"normal",transform:f,list:o.map(h=>Xn(h,c)),selectedIndex:o.indexOf(e),className:d,type:"second",onSelect:this.onItemChange},r))}renderAMPMSelect(e,t){const{prefixCls:n,use12Hours:a,isAM:i,scrollItemProps:r}=this.props;if(!a)return null;const u=[{value:"AM",text:e.AM||"上午"},{value:"PM",text:e.PM||"下午"}],o=i?0:1,l=`${n}-list-ampm`;return b.createElement(ke,Object.assign({ref:c=>this.cacheRefCurrent("ampm",c),mode:"normal",className:l,list:u,selectedIndex:o,type:"ampm",onSelect:this.onItemChange},r))}render(){const{timeStampValue:e,panelHeader:t,panelFooter:n}=this.props,a=this.getDisplayDateFromTimeStamp(e);return b.createElement(zr,{componentName:"TimePicker"},(i,r)=>b.createElement($n,{header:t,footer:n,"x-semi-header-alias":"panelHeader","x-semi-footer-alias":"panelFooter"},this.renderAMPMSelect(i,r),this.renderHourSelect(a.getHours(),i),this.renderMinuteSelect(a.getMinutes(),i),this.renderSecondSelect(a.getSeconds(),i)))}}ga.propTypes={format:p.string,defaultOpenValue:p.object,prefixCls:p.string,onChange:p.func,showHour:p.bool,showMinute:p.bool,showSecond:p.bool,disabledHours:p.func,disabledMinutes:p.func,disabledSeconds:p.func,hideDisabledOptions:p.bool,onCurrentSelectPanelChange:p.func,use12Hours:p.bool,isAM:p.bool,timeStampValue:p.any,scrollItemProps:p.object};ga.defaultProps={disabledHours:Q,disabledMinutes:Q,disabledSeconds:Q,format:at.DEFAULT_FORMAT};class Rl extends He{constructor(e){super(Object.assign({},e))}init(){}destroy(){}selectYear(e,t){const{currentYear:n,currentMonth:a}=this.getStates(),{type:i}=this.getProps(),r=P.PANEL_TYPE_LEFT,u=P.PANEL_TYPE_RIGHT,o=Sn(n);if(o[t]=e.value,i==="monthRange"){const l=o[r]===o[u]&&a[r]>a[u];t===r&&e.value>o[u]||t===r&&l?o[u]=e.value+1:t===u&&l&&(o[r]=e.value-1)}this._adapter.setCurrentYear(o,()=>this.autoSelectMonth(e,t,o)),this._adapter.notifySelectYear(o)}selectMonth(e,t){const{currentMonth:n,currentYear:a}=this.getStates(),{type:i}=this.getProps(),r=P.PANEL_TYPE_LEFT,u=P.PANEL_TYPE_RIGHT,o=Sn(n);o[t]=e.month,i==="monthRange"&&t===r&&a[r]===a[u]&&e.month>o[u]&&(o[u]=e.month),this._adapter.setCurrentMonth(o),this._adapter.notifySelectMonth(o)}autoSelectMonth(e,t,n){const{disabledDate:a,locale:i}=this._adapter.getProps(),{months:r,currentMonth:u}=this._adapter.getStates(),o=t===P.PANEL_TYPE_LEFT?"right":"left",l=ta(Date.now(),e.year),c=a(Ge(l,u[t]-1)),d=a(Ge(ta(Date.now(),n[o]),u[o]-1));if(!c&&!d)return;let f=n,h=u;if(c){const v=r.findIndex(m=>{let{month:g}=m;return g===u[t]});let w;w=r.slice(v).find(m=>{let{month:g}=m;return!a(Ge(l,g-1))}),w||(w=r.slice(0,v).find(m=>{let{month:g}=m;return!a(Ge(l,g-1))})),w&&!d?h[t]=w.month:w&&d&&(f={left:e.year,right:e.year},h={left:w.month,right:w.month})}else!c&&d&&(f={left:e.year,right:e.year},h={left:u[t],right:u[t]});this._adapter.setCurrentYearAndMonth(f,h),this._adapter.notifySelectYearAndMonth(f,h)}backToMain(){this._adapter.notifyBackToMain()}}const jr=`${B}-datepicker`;class Hn extends Ue{constructor(e){super(e),this.selectYear=(r,u)=>{this.foundation.selectYear(r,u)},this.selectMonth=(r,u)=>{this.foundation.selectMonth(r,u)},this.reselect=()=>{["yearRef","monthRef"].forEach(u=>{const o=this[u];o&&o.current&&o.current.scrollToIndex&&o.current.scrollToIndex()})},this.backToMain=r=>{r.nativeEvent.stopImmediatePropagation(),this.foundation.backToMain()};let{currentYear:t,currentMonth:n}=e;const{year:a,month:i}=ka(t,n);this.state={years:bu(e.startYear,e.endYear).map(r=>({value:r,year:r})),months:Array(12).fill(0).map((r,u)=>({value:u+1,month:u+1})),currentYear:a,currentMonth:i},this.yearRef=b.createRef(),this.monthRef=b.createRef(),this.foundation=new Rl(this.adapter)}get adapter(){return Object.assign(Object.assign({},super.adapter),{setCurrentYear:(e,t)=>this.setState({currentYear:e},t),setCurrentMonth:e=>this.setState({currentMonth:e}),setCurrentYearAndMonth:(e,t)=>this.setState({currentYear:e,currentMonth:t}),notifySelectYear:e=>this.props.onSelect({currentMonth:this.state.currentMonth,currentYear:e}),notifySelectMonth:e=>this.props.onSelect({currentYear:this.state.currentYear,currentMonth:e}),notifySelectYearAndMonth:(e,t)=>this.props.onSelect({currentYear:e,currentMonth:t}),notifyBackToMain:()=>this.props.onBackToMain()})}static getDerivedStateFromProps(e,t){const n={},{year:a,month:i}=ka(e.currentYear,e.currentMonth);return De(e.currentYear,t.currentYear)||(n.currentYear=a),De(e.currentMonth,t.currentMonth)||(n.currentMonth=i),n}renderColYear(e){const{years:t,currentYear:n,currentMonth:a,months:i}=this.state,{disabledDate:r,localeCode:u,yearCycled:o,yearAndMonthOpts:l}=this.props,c=Ge(Date.now(),a[e]-1),d=P.PANEL_TYPE_LEFT,f=P.PANEL_TYPE_RIGHT,h=m=>e===f&&n[d]?n[d]>m:!1,v=t.map(m=>{let{value:g,year:T}=m;const y=i.every(_=>{let{month:I}=_;return r(yi(c,{year:T,month:I-1}))}),D=h(T);return{year:T,value:g,disabled:y||D}});let w=m=>m;return(u==="zh-CN"||u==="zh-TW")&&(w=m=>`${m}年`),b.createElement(ke,Object.assign({ref:this.yearRef,cycled:o,list:v,transform:w,selectedIndex:t.findIndex(m=>m.value===n[e]),type:"year",onSelect:m=>this.selectYear(m,e),mode:"normal"},l))}renderColMonth(e){const{months:t,currentMonth:n,currentYear:a}=this.state,{locale:i,localeCode:r,monthCycled:u,disabledDate:o,yearAndMonthOpts:l}=this.props;let c=m=>m;const d=ta(Date.now(),a[e]),f=P.PANEL_TYPE_LEFT,h=P.PANEL_TYPE_RIGHT;(r==="zh-CN"||r==="zh-TW")&&(c=m=>`${m}月`);const v=t.map(m=>{let{value:g,month:T}=m;const y=e===h&&n[f]&&a[f]===a[h]&&n[f]>T;return{month:T,disabled:o(Ge(d,T-1))||y,value:i.fullMonths[g]}}),w=v.findIndex(m=>m.month===n[e]);return b.createElement(ke,Object.assign({ref:this.monthRef,cycled:u,list:v,transform:c,selectedIndex:w,type:"month",onSelect:m=>this.selectMonth(m,e),mode:"normal"},l))}renderPanel(e){return b.createElement(b.Fragment,null,b.createElement($n,null,this.renderColYear(e),this.renderColMonth(e)))}render(){const{locale:e,noBackBtn:t,density:n,presetPosition:a,renderQuickControls:i,renderDateInput:r,type:u}=this.props,o=`${jr}-yearmonth-header`,l=`${jr}-yearmonth-body`,c=e.selectDate,d=n==="compact"?"default":"large",f=n==="compact"?"small":"default",h=P.PANEL_TYPE_LEFT,v=P.PANEL_TYPE_RIGHT;let w=null;return u==="month"?w=this.renderPanel(h):w=b.createElement("div",{className:l},this.renderPanel(h),this.renderPanel(v)),b.createElement(b.Fragment,null,t?null:b.createElement("div",{className:o},b.createElement(pt,{noHorizontalPadding:!1,icon:b.createElement(Zr,{"aria-hidden":!0,size:d}),size:f,onClick:this.backToMain},b.createElement("span",null,c))),a?b.createElement("div",{style:{display:"flex"}},a==="left"&&u!=="monthRange"&&i,b.createElement("div",null,r,w),a==="right"&&u!=="monthRange"&&i):b.createElement(b.Fragment,null,r,w))}}Hn.propTypes={currentYear:p.object,currentMonth:p.object,onSelect:p.func,locale:p.object,localeCode:p.string,monthCycled:p.bool,yearCycled:p.bool,noBackBtn:p.bool,disabledDate:p.func,density:p.string,presetPosition:p.oneOf(P.PRESET_POSITION_SET),renderQuickControls:p.node,renderDateInput:p.node,type:p.oneOf(P.TYPE_SET),startYear:p.number,endYear:p.number};Hn.defaultProps={disabledDate:Tt,monthCycled:!1,yearCycled:!1,noBackBtn:!1,onSelect:Q,type:"month"};const we=N.PREFIX;class va extends Ue{constructor(e){super(e),this.cacheRefCurrent=(u,o)=>{typeof u=="string"&&u.length&&this.adapter.setCache(u,o)},this.leftIsYearOrTime=u=>{const{monthLeft:o}=u||this.state;return!!(o&&(o.isTimePickerOpen||o.isYearPickerOpen))},this.rightIsYearOrTime=u=>{const{monthRight:o}=u||this.state;return!!(o&&(o.isTimePickerOpen||o.isYearPickerOpen))},this.calcScrollListHeight=()=>{const u=this.adapter.getCache(`wrap-${P.PANEL_TYPE_LEFT}`),o=this.adapter.getCache(`wrap-${P.PANEL_TYPE_RIGHT}`),l=this.adapter.getCache(`switch-${P.PANEL_TYPE_LEFT}`),c=this.adapter.getCache(`switch-${P.PANEL_TYPE_RIGHT}`),d=u&&u.getBoundingClientRect(),f=o&&o.getBoundingClientRect();let h=d&&d.height||0,v=f&&f.height||0;return l&&(h+=l.getBoundingClientRect().height),c&&(v+=c.getBoundingClientRect().height),Math.max(h,v)},this.handleWeeksRowNumChange=(u,o)=>{const l=o===P.PANEL_TYPE_RIGHT,c=o===P.PANEL_TYPE_RIGHT,d=this.leftIsYearOrTime()&&this.rightIsYearOrTime();if(this.foundation.isRangeType()&&!d){const f={weeksRowNum:u,currentPanelHeight:this.calcScrollListHeight()};this.setState(f,()=>{(this.leftIsYearOrTime()&&c||this.rightIsYearOrTime()&&l)&&this.reselect()})}},this.reselect=()=>{[`timepicker-${P.PANEL_TYPE_LEFT}`,`timepicker-${P.PANEL_TYPE_RIGHT}`,`yam-${P.PANEL_TYPE_LEFT}`,`yam-${P.PANEL_TYPE_RIGHT}`].forEach(o=>{const l=this.adapter.getCache(o);l&&typeof l.reselect=="function"&&l.reselect()})},this.getYAMOpenType=()=>this.foundation.getYAMOpenType();const t=e.format||$e(e.type),{nowDate:n,nextDate:a}=ki({defaultPickerValue:e.defaultPickerValue,format:t,dateFnsLocale:e.dateFnsLocale}),i={selected:new Set},r={monthLeft:{pickerDate:n,showDate:n,isTimePickerOpen:!1,isYearPickerOpen:!1},monthRight:{pickerDate:a,showDate:a,isTimePickerOpen:!1,isYearPickerOpen:!1},maxWeekNum:0,hoverDay:"",rangeStart:e.rangeStart,rangeEnd:"",currentPanelHeight:0,offsetRangeStart:"",offsetRangeEnd:""};this.state=Object.assign(Object.assign({},i),r),this.foundation=new hl(this.adapter)}get dateAdapter(){return{updateDaySelected:e=>this.setState({selected:e})}}get rangeAdapter(){return{setRangeStart:e=>this.setState({rangeStart:e}),setRangeEnd:e=>this.setState({rangeEnd:e}),setHoverDay:e=>this.setState({hoverDay:e}),setWeeksHeight:e=>this.setState({maxWeekNum:e}),setOffsetRangeStart:e=>this.setState({offsetRangeStart:e}),setOffsetRangeEnd:e=>this.setState({offsetRangeEnd:e})}}get adapter(){return Object.assign(Object.assign(Object.assign(Object.assign({},super.adapter),this.dateAdapter),this.rangeAdapter),{updateMonthOnLeft:e=>this.setState({monthLeft:e}),updateMonthOnRight:e=>this.setState({monthRight:e}),notifySelectedChange:(e,t)=>this.props.onChange(e,t),notifyMaxLimit:e=>this.props.onMaxSelect(e),notifyPanelChange:(e,t)=>this.props.onPanelChange(e,t),setRangeInputFocus:e=>this.props.setRangeInputFocus(e),isAnotherPanelHasOpened:e=>this.props.isAnotherPanelHasOpened(e)})}componentDidMount(){super.componentDidMount()}componentDidUpdate(e,t){const{defaultValue:n,defaultPickerValue:a}=this.props;if(e.defaultValue!==n&&this.foundation.updateSelectedFromProps(n),e.defaultPickerValue!==a&&this.foundation.initDefaultPickerValue(),this.foundation.isRangeType()){const r=this.leftIsYearOrTime(t)&&this.rightIsYearOrTime(t),u=this.leftIsYearOrTime(t)&&!this.rightIsYearOrTime(t)||!this.leftIsYearOrTime(t)&&this.rightIsYearOrTime(t),o=this.leftIsYearOrTime()&&this.rightIsYearOrTime(),l=this.leftIsYearOrTime()&&!this.rightIsYearOrTime()||!this.leftIsYearOrTime()&&this.rightIsYearOrTime();u&&o?this.setState({currentPanelHeight:this.calcScrollListHeight()},this.reselect):r&&l&&this.reselect()}}renderPanel(e,t){let n=Y(`${we}-month-grid-${t}`);const{monthLeft:a,monthRight:i,currentPanelHeight:r}=this.state,{insetInput:u}=this.props,o=t===P.PANEL_TYPE_RIGHT?i:a,{isTimePickerOpen:l,isYearPickerOpen:c}=o,d=this.renderMonth(e,t),f=c?b.createElement("div",{className:`${we}-yam`},this.renderYearAndMonth(t,o)):null,h=l?b.createElement("div",{className:`${we}-tpk`},this.renderTimePicker(t,o)):null,v={},w=this.adapter.getCache(`wrap-${P.PANEL_TYPE_LEFT}`),m=this.adapter.getCache(`wrap-${P.PANEL_TYPE_RIGHT}`),g=t===P.PANEL_TYPE_RIGHT?m:w;this.foundation.isRangeType()?((c||l)&&(v.minWidth=g.getBoundingClientRect().width),this.leftIsYearOrTime()&&this.rightIsYearOrTime()&&!u&&(v.minHeight=r||this.calcScrollListHeight())):this.props.type!=="year"&&this.props.type!=="month"&&(l||c)&&(n=Y(n,`${we}-yam-showing`));const y=!(c||l)?"date":c?"year":"time";return b.createElement("div",{className:n,key:t,style:v,"x-open-type":y},f,h,this.foundation.isRangeType()?d:c||l?null:d,this.renderSwitch(t))}showYearPicker(e,t){t.nativeEvent.stopImmediatePropagation(),this.foundation.showYearPicker(e)}renderMonth(e,t){const{selected:n,rangeStart:a,rangeEnd:i,hoverDay:r,maxWeekNum:u,offsetRangeStart:o,offsetRangeEnd:l}=this.state,{weekStartsOn:c,disabledDate:d,locale:f,localeCode:h,renderDate:v,renderFullDate:w,startDateOffset:m,endDateOffset:g,density:T,rangeInputFocus:y,syncSwitchMonth:D,multiple:_}=this.props;let I="";if(e){const O=e?X(e,"yyyy"):"",k=e?X(e,"L"):"",U=f.months[k];I=f.monthText.replace("${year}",O).replace("${month}",U)}let x={};const R=t===P.PANEL_TYPE_RIGHT?this.state.monthRight:this.state.monthLeft,C=this.foundation.isRangeType(),E=C&&D;return C&&R&&(R.isYearPickerOpen||R.isTimePickerOpen)&&(x={visibility:"hidden",position:"absolute",pointerEvents:"none"}),b.createElement("div",{ref:O=>this.cacheRefCurrent(`wrap-${t}`,O),style:x},b.createElement(pa,{forwardRef:O=>this.cacheRefCurrent(`nav-${t}`,O),monthText:I,density:T,onMonthClick:O=>this.showYearPicker(t,O),onPrevMonth:()=>this.foundation.prevMonth(t),onNextMonth:()=>this.foundation.nextMonth(t),onNextYear:()=>this.foundation.nextYear(t),onPrevYear:()=>this.foundation.prevYear(t),shouldBimonthSwitch:E,panelType:t}),b.createElement(ma,{locale:f,localeCode:h,forwardRef:O=>this.cacheRefCurrent(`month-${t}`,O),disabledDate:d,weekStartsOn:c,month:e,selected:n,rangeStart:a,rangeEnd:i,rangeInputFocus:y,offsetRangeStart:o,offsetRangeEnd:l,hoverDay:r,weeksRowNum:u,renderDate:v,renderFullDate:w,onDayClick:O=>this.foundation.handleDayClick(O,t),onDayHover:O=>this.foundation.handleDayHover(O,t),onWeeksRowNumChange:O=>this.handleWeeksRowNumChange(O,t),startDateOffset:m,endDateOffset:g,focusRecordsRef:this.props.focusRecordsRef,multiple:_}))}renderTimePicker(e,t){const{type:n,locale:a,format:i,hideDisabledOptions:r,timePickerOpts:u,dateFnsLocale:o}=this.props,{pickerDate:l}=t,c=Y(`${we}-time`),d=Object.assign(Object.assign({},u),{hideDisabledOptions:r}),f=this.foundation.calcDisabledTime(e);f&&["disabledHours","disabledMinutes","disabledSeconds"].forEach(y=>{f[y]&&(d[y]=f[y])});const{rangeStart:h,rangeEnd:v}=this.state,w=this.foundation.getValidDateFormat();let m,g;n==="dateTimeRange"&&h&&v&&ua(m=ne(h,w,void 0,o),g=ne(v,w,void 0,o))&&(e===P.PANEL_TYPE_RIGHT?h&&(d.startDate=m):v&&(d.endDate=g));const T=a.selectTime;return b.createElement("div",{className:c},b.createElement(ga,Object.assign({ref:y=>this.cacheRefCurrent(`timepicker-${e}`,y),panelHeader:T,format:i||P.FORMAT_TIME_PICKER,timeStampValue:l,onChange:y=>this.foundation.handleTimeChange(y,e)},d)))}renderYearAndMonth(e,t){const{pickerDate:n}=t,{locale:a,localeCode:i,density:r,yearAndMonthOpts:u,startYear:o,endYear:l}=this.props,c=n.getFullYear(),d=n.getMonth()+1;return b.createElement(Hn,{ref:f=>this.cacheRefCurrent(`yam-${e}`,f),locale:a,localeCode:i,currentYear:{left:c,right:0},currentMonth:{left:d,right:0},onSelect:f=>this.foundation.toYearMonth(e,new Date(f.currentYear.left,f.currentMonth.left-1)),onBackToMain:()=>{this.foundation.showDatePanel(e);const f=this.adapter.getCache(`wrap-${e}`);f&&(f.style.height="auto")},density:r,yearAndMonthOpts:u,startYear:o,endYear:l})}renderSwitch(e){const{rangeStart:t,rangeEnd:n,monthLeft:a,monthRight:i}=this.state,{type:r,locale:u,disabledTimePicker:o,density:l,dateFnsLocale:c,insetInput:d}=this.props;if(!r.includes("Time")||d)return null;let f,h;const{FORMAT_SWITCH_DATE:v}=u.localeFormatToken,w=this.foundation.getValidTimeFormat(),m=this.foundation.getValidDateFormat();e===P.PANEL_TYPE_LEFT?(f=a,h=t?X(ne(t,m,void 0,c),v):""):(f=i,h=n?X(ne(n,m,void 0,c),v):"");const{isTimePickerOpen:g,showDate:T}=f,y=T?X(T,v):"",D=T?X(T,w):"",_=["default"].includes(l),I=Y(`${we}-switch`),x=Y({[`${we}-switch-date`]:!0,[`${we}-switch-date-active`]:!g}),R=Y({[`${we}-switch-time`]:!0,[`${we}-switch-time-disabled`]:o,[`${we}-switch-date-active`]:g}),C=Y(`${we}-switch-text`);return b.createElement("div",{className:I,ref:E=>this.adapter.setCache(`switch-${e}`,E)},b.createElement("div",{role:"button","aria-label":"Switch to date panel",className:x,onClick:E=>this.foundation.showDatePanel(e)},_&&b.createElement(Ti,{"aria-hidden":!0}),b.createElement("span",{className:C},h||y)),b.createElement("div",{role:"button","aria-label":"Switch to time panel",className:R,onClick:E=>this.foundation.showTimePicker(e,!0)},_&&b.createElement(lu,{"aria-hidden":!0}),b.createElement("span",{className:C},D)))}render(){const{monthLeft:e,monthRight:t}=this.state,{type:n,insetInput:a,presetPosition:i,renderQuickControls:r,renderDateInput:u}=this.props,o=Y({[`${we}-month-grid`]:!0}),l=P.PANEL_TYPE_LEFT,c=P.PANEL_TYPE_RIGHT;let d=null;n==="date"||n==="dateTime"?d=this.renderPanel(e.pickerDate,l):n==="dateRange"||n==="dateTimeRange"?d=[this.renderPanel(e.pickerDate,l),this.renderPanel(t.pickerDate,c)]:(n==="year"||n==="month")&&(d="year month");const f=this.getYAMOpenType();return b.createElement("div",{style:{display:"flex"}},i==="left"&&r,b.createElement("div",null,u,b.createElement("div",{className:o,"x-type":n,"x-panel-yearandmonth-open-type":f,"x-insetinput":a?"true":"false","x-preset-position":r===null?"null":i,ref:h=>this.cacheRefCurrent("monthGrid",h)},d)),i==="right"&&r)}}va.propTypes={type:p.oneOf(P.TYPE_SET),defaultValue:p.array,defaultPickerValue:p.oneOfType([p.string,p.number,p.object,p.array]),multiple:p.bool,max:p.number,weekStartsOn:p.number,disabledDate:p.func,disabledTime:p.func,disabledTimePicker:p.bool,hideDisabledOptions:p.bool,navPrev:p.node,navNext:p.node,onMaxSelect:p.func,timePickerOpts:p.object,isControlledComponent:p.bool,rangeStart:p.oneOfType([p.string]),rangeInputFocus:p.oneOfType([p.bool,p.string]),locale:p.object,localeCode:p.string,format:p.string,renderDate:p.func,renderFullDate:p.func,startDateOffset:p.func,endDateOffset:p.func,autoSwitchDate:p.bool,density:p.string,dateFnsLocale:p.object.isRequired,timeZone:p.oneOfType([p.string,p.number]),syncSwitchMonth:p.bool,onPanelChange:p.func,focusRecordsRef:p.object,triggerRender:p.func,presetPosition:p.oneOf(P.PRESET_POSITION_SET),renderQuickControls:p.node,renderDateInput:p.node};va.defaultProps={type:"date",rangeStart:"",multiple:!1,weekStartsOn:ut.WEEK_START_ON,disabledDate:Tt,onMaxSelect:Q,locale:{}};const ve=N.PREFIX,{Text:Pl}=Zi;class ya extends J.PureComponent{render(){const{presets:e,onPresetClick:t,type:n,presetPosition:a,insetInput:i,locale:r}=this.props,u=n==="dateRange"||n==="dateTimeRange",o=a==="top"||a==="bottom",l=n==="month",c=o&&u,d=o&&l,f=Y(`${ve}-quick-control`,{[`${ve}-quick-control-${n}`]:n,[`${ve}-quick-control-${a}`]:!0}),h=Y({[`${ve}-quick-control-header`]:!0}),v=Y({[`${ve}-quick-control-${a}-content-wrapper`]:!0}),w=Y({[`${ve}-quick-control-${a}-content`]:!c&&!d,[`${ve}-quick-control-${a}-range-content`]:c,[`${ve}-quick-control-${a}-month-content`]:d}),m=Y({[`${ve}-quick-control-${a}-content-item`]:!c&&!d,[`${ve}-quick-control-${a}-range-content-item`]:c,[`${ve}-quick-control-${a}-month-content-item`]:d}),g=Y({[`${ve}-quick-control-${a}-content-item-ellipsis`]:!c&&!d,[`${ve}-quick-control-${a}-range-content-item-ellipsis`]:c,[`${ve}-quick-control-${a}-month-content-item-ellipsis`]:d});return e.length?b.createElement("div",{className:f,"x-insetinput":i?"true":"false"},!o&&b.createElement("div",{className:h},r.presets),b.createElement("div",{className:v},b.createElement("div",{className:w},e.map((T,y)=>{const D=typeof T=="function"?T():T;return b.createElement(yt,{size:"small",type:"primary",onClick:_=>t(D,_),key:y},b.createElement("div",{className:m},b.createElement(Pl,{ellipsis:{showTooltip:!0},className:g},D.text)))})))):null}}ya.propTypes={presets:p.array,presetPosition:p.oneOf(P.PRESET_POSITION_SET),onPresetClick:p.func,type:p.string,insetInput:p.oneOfType([p.bool,p.object]),locale:p.object};ya.defaultProps={presets:[],presetPosition:"bottom",onPresetClick:We};function El(){let s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{prefixCls:e,locale:t,onCancelClick:n,onConfirmClick:a,disabledConfirm:i}=s,r=Y(`${e}-footer`);return b.createElement("div",{className:r},b.createElement(yt,{theme:"borderless",onClick:n},oe(t,"footer.cancel","")),b.createElement(yt,{theme:"solid",onClick:a,disabled:i},oe(t,"footer.confirm","")))}var Ol=function(s,e){var t={};for(var n in s)Object.prototype.hasOwnProperty.call(s,n)&&e.indexOf(n)<0&&(t[n]=s[n]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(s);athis.triggerElRef.current=n,this.handleSelectedChange=(n,a)=>this.foundation.handleSelectedChange(n,a),this.handleYMSelectedChange=n=>this.foundation.handleYMSelectedChange(n),this.disabledDisposeDate=function(n){for(var a=arguments.length,i=new Array(a>1?a-1:0),r=1;r1?a-1:0),r=1;rthis.foundation.openPanel(),this.handleInputChange=function(){return t.foundation.handleInputChange(...arguments)},this.handleInsetInputChange=n=>this.foundation.handleInsetInputChange(n),this.handleInputComplete=n=>this.foundation.handleInputComplete(n),this.handleInputBlur=n=>this.foundation.handleInputBlur(oe(n,"nativeEvent.target.value"),n),this.handleInputFocus=function(){return t.foundation.handleInputFocus(...arguments)},this.handleInputClear=n=>this.foundation.handleInputClear(n),this.handleTriggerWrapperClick=n=>this.foundation.handleTriggerWrapperClick(n),this.handleSetRangeFocus=n=>this.foundation.handleSetRangeFocus(n),this.handleRangeInputBlur=(n,a)=>this.foundation.handleRangeInputBlur(n,a),this.handleRangeInputClear=n=>this.foundation.handleRangeInputClear(n),this.handleRangeEndTabPress=n=>this.foundation.handleRangeEndTabPress(n),this.isAnotherPanelHasOpened=n=>n==="rangeStart"?this.focusRecordsRef.current.rangeEnd:this.focusRecordsRef.current.rangeStart,this.handleInsetDateFocus=(n,a)=>{const i=oe(this,"monthGrid.current.foundation");i&&(i.showDatePanel(P.PANEL_TYPE_LEFT),i.showDatePanel(P.PANEL_TYPE_RIGHT)),this.handleInputFocus(n,a)},this.handleInsetTimeFocus=()=>{const n=oe(this,"monthGrid.current.foundation");n&&(n.showTimePicker(P.PANEL_TYPE_LEFT),n.showTimePicker(P.PANEL_TYPE_RIGHT))},this.handlePanelVisibleChange=n=>{this.foundation.handlePanelVisibleChange(n)},this.handleConfirm=n=>this.foundation.handleConfirm(),this.handleCancel=n=>this.foundation.handleCancel(),this.renderFooter=(n,a)=>{var i;if(this.adapter.needConfirm()){const{cachedSelectedValue:r}=this.state,u=/range/i.test((i=this.props.type)!==null&&i!==void 0?i:""),o=Array.isArray(r)&&(r.length===0||r.length===2&&r.every(c=>c!=null)),l=u?!o:!1;return b.createElement(El,Object.assign({},this.props,{locale:n,localeCode:a,onConfirmClick:this.handleConfirm,onCancelClick:this.handleCancel,disabledConfirm:l}))}return null},this.renderPanel=(n,a,i)=>{const{dropdownClassName:r,dropdownStyle:u,density:o,topSlot:l,bottomSlot:c,presetPosition:d,type:f,leftSlot:h,rightSlot:v}=this.props,w=Y(N.PREFIX,{[N.PANEL_YAM]:this.adapter.typeIsYearOrMonth(),[`${N.PREFIX}-compact`]:o==="compact"},r);return b.createElement("div",{ref:this.panelRef,className:w,style:u,"x-type":f},b.createElement("div",{className:`${N.PREFIX}-container`},h&&b.createElement("div",{className:`${N.PREFIX}-leftSlot`,"x-semi-prop":"leftSlot"},h),b.createElement("div",null,l&&b.createElement("div",{className:`${N.PREFIX}-topSlot`,"x-semi-prop":"topSlot"},l),d==="top"&&f!=="monthRange"&&this.renderQuickControls(),this.adapter.typeIsYearOrMonth()?this.renderYearMonthPanel(n,a):this.renderMonthGrid(n,a,i),d==="bottom"&&f!=="monthRange"&&this.renderQuickControls(),c&&b.createElement("div",{className:`${N.PREFIX}-bottomSlot`,"x-semi-prop":"bottomSlot"},c)),v&&b.createElement("div",{className:`${N.PREFIX}-rightSlot`,"x-semi-prop":"rightSlot"},v)),this.renderFooter(n,a))},this.renderYearMonthPanel=(n,a)=>{const{density:i,presetPosition:r,yearAndMonthOpts:u,type:o,startYear:l,endYear:c}=this.props,d=this.state.value[0],f={left:0,right:0},h={left:0,right:0};if(xa(d)&&(f.left=d.getFullYear(),h.left=d.getMonth()+1),o==="monthRange"){const v=this.state.value[1];xa(v)&&(f.right=v.getFullYear(),h.right=v.getMonth()+1)}return b.createElement(Hn,{locale:n,localeCode:a,disabledDate:this.disabledDisposeDate,noBackBtn:!0,monthCycled:!0,onSelect:this.handleYMSelectedChange,currentYear:f,currentMonth:h,density:i,presetPosition:r,renderQuickControls:this.renderQuickControls(),renderDateInput:this.renderDateInput(),type:o,yearAndMonthOpts:u,startYear:l,endYear:c})},this.wrapPopover=n=>{const{panelShow:a}=this.state,{direction:i}=this.context,r=i==="rtl"?"bottomRight":"bottomLeft",{motion:u,zIndex:o,position:l=r,getPopupContainer:c,locale:d,localeCode:f,dateFnsLocale:h,stopPropagation:v,autoAdjustOverflow:w,spacing:m,dropdownMargin:g}=this.props;return b.createElement(Ki,{getPopupContainer:c,autoAdjustOverflow:w,zIndex:o,motion:u,margin:g,content:this.renderPanel(d,f,h),trigger:"custom",position:l,visible:a,stopPropagation:v,spacing:m,onVisibleChange:this.handlePanelVisibleChange},n)},this.state={panelShow:e.open||e.defaultOpen,isRange:!1,inputValue:null,value:[],cachedSelectedValue:[],prevTimeZone:null,rangeInputFocus:void 0,autofocus:e.autoFocus||this.isRangeType(e.type,e.triggerRender)&&(e.open||e.defaultOpen),insetInputValue:null,triggerDisabled:void 0},this.triggerElRef=b.createRef(),this.panelRef=b.createRef(),this.monthGrid=b.createRef(),this.inputRef=b.createRef(),this.rangeInputStartRef=b.createRef(),this.rangeInputEndRef=b.createRef(),this.focusRecordsRef=b.createRef(),this.focusRecordsRef.current={rangeStart:!1,rangeEnd:!1},this.foundation=new sl(this.adapter)}get adapter(){var e=this;return Object.assign(Object.assign({},super.adapter),{togglePanel:(t,n)=>{this.setState({panelShow:t},n),t||(this.focusRecordsRef.current.rangeEnd=!1,this.focusRecordsRef.current.rangeStart=!1)},registerClickOutSide:()=>{this.clickOutSideHandler&&(this.adapter.unregisterClickOutSide(),this.clickOutSideHandler=null),this.clickOutSideHandler=t=>{const n=this.triggerElRef&&this.triggerElRef.current,a=this.panelRef&&this.panelRef.current,i=t.target,r=t.composedPath&&t.composedPath()||[i];!(n&&n.contains(i))&&!(a&&a.contains(i))&&!(r.includes(n)||r.includes(a))&&(this.props.onClickOutSide(t),this.adapter.needConfirm()||this.foundation.closePanel())},document.addEventListener("mousedown",this.clickOutSideHandler)},unregisterClickOutSide:()=>{document.removeEventListener("mousedown",this.clickOutSideHandler)},notifyBlur:function(){return e.props.onBlur(...arguments)},notifyFocus:function(){return e.props.onFocus(...arguments)},notifyClear:function(){return e.props.onClear(...arguments)},notifyChange:function(){return e.props.onChange(...arguments)},notifyCancel:function(){return e.props.onCancel(...arguments)},notifyConfirm:function(){return e.props.onConfirm(...arguments)},notifyOpenChange:function(){return e.props.onOpenChange(...arguments)},notifyPresetsClick:function(){return e.props.onPresetClick(...arguments)},updateValue:t=>this.setState({value:t}),updatePrevTimezone:t=>this.setState({prevTimeZone:t}),updateCachedSelectedValue:t=>{let n=t;t&&!Array.isArray(t)&&(n=[...t]),this.setState({cachedSelectedValue:n})},updateInputValue:t=>{this.setState({inputValue:t})},updateInsetInputValue:t=>{const{insetInput:n}=this.props;n&&!De(t,this.state.insetInputValue)&&this.setState({insetInputValue:t})},needConfirm:()=>["dateTime","dateTimeRange"].includes(this.props.type)&&this.props.needConfirm===!0,typeIsYearOrMonth:()=>["month","year","monthRange"].includes(this.props.type),setRangeInputFocus:t=>{const{preventScroll:n}=this.props;switch(t!==this.state.rangeInputFocus&&this.setState({rangeInputFocus:t}),t){case"rangeStart":const a=oe(this,"rangeInputStartRef.current");a&&a.focus({preventScroll:n}),setTimeout(()=>{this.focusRecordsRef.current.rangeStart=!0},0);break;case"rangeEnd":const i=oe(this,"rangeInputEndRef.current");i&&i.focus({preventScroll:n}),setTimeout(()=>{this.focusRecordsRef.current.rangeEnd=!0},0);break;default:return}},couldPanelClosed:()=>this.focusRecordsRef.current.rangeStart&&this.focusRecordsRef.current.rangeEnd,isEventTarget:t=>t&&t.target===t.currentTarget,setInsetInputFocus:()=>{const{preventScroll:t}=this.props,{rangeInputFocus:n}=this.state;switch(n){case"rangeEnd":if(document.activeElement!==this.rangeInputEndRef.current){const a=oe(this,"rangeInputEndRef.current");a&&a.focus({preventScroll:t})}break;case"rangeStart":default:if(document.activeElement!==this.rangeInputStartRef.current){const a=oe(this,"rangeInputStartRef.current");a&&a.focus({preventScroll:t})}break}},setInputFocus:()=>{const{preventScroll:t}=this.props,n=oe(this,"inputRef.current");n&&n.focus({preventScroll:t})},setInputBlur:()=>{const t=oe(this,"inputRef.current");t&&t.blur()},setRangeInputBlur:()=>{const{rangeInputFocus:t}=this.state;if(t==="rangeStart"){const n=oe(this,"rangeInputStartRef.current");n&&n.blur()}else if(t==="rangeEnd"){const n=oe(this,"rangeInputEndRef.current");n&&n.blur()}this.adapter.setRangeInputFocus(!1)},setTriggerDisabled:t=>{this.setState({triggerDisabled:t})}})}isRangeType(e,t){return/range/i.test(e)&&!st(t)}componentDidUpdate(e){De(e.value,this.props.value)?this.props.timeZone!==e.timeZone&&this.foundation.initFromProps({value:this.state.value,timeZone:this.props.timeZone,prevTimeZone:e.timeZone}):this.foundation.initFromProps(Object.assign({},this.props)),e.open!==this.props.open&&(this.foundation.initPanelOpenStatus(),this.props.open||this.foundation.clearRangeInputFocus())}componentDidMount(){this._mounted=!0,super.componentDidMount()}componentWillUnmount(){this._mounted=!1,super.componentWillUnmount()}open(){this.foundation.open()}close(){this.foundation.close()}focus(e){this.foundation.focus(e)}blur(){this.foundation.blur()}renderMonthGrid(e,t,n){const{type:a,multiple:i,max:r,weekStartsOn:u,timePickerOpts:o,defaultPickerValue:l,format:c,hideDisabledOptions:d,disabledTimePicker:f,renderDate:h,renderFullDate:v,startDateOffset:w,endDateOffset:m,autoSwitchDate:g,density:T,syncSwitchMonth:y,onPanelChange:D,timeZone:_,triggerRender:I,insetInput:x,presetPosition:R,yearAndMonthOpts:C,startYear:E,endYear:O}=this.props,{cachedSelectedValue:k,rangeInputFocus:U}=this.state,se=k;return b.createElement(va,{ref:this.monthGrid,locale:e,localeCode:t,dateFnsLocale:n,weekStartsOn:u,type:a,multiple:i,max:r,format:c,disabledDate:this.disabledDisposeDate,hideDisabledOptions:d,disabledTimePicker:f,disabledTime:this.disabledDisposeTime,defaultValue:se,defaultPickerValue:l,timePickerOpts:o,isControlledComponent:!this.adapter.needConfirm()&&this.isControlled("value"),onChange:this.handleSelectedChange,renderDate:h,renderFullDate:v,startDateOffset:w,endDateOffset:m,autoSwitchDate:g,density:T,rangeInputFocus:U,setRangeInputFocus:this.handleSetRangeFocus,isAnotherPanelHasOpened:this.isAnotherPanelHasOpened,syncSwitchMonth:y,onPanelChange:D,timeZone:_,focusRecordsRef:this.focusRecordsRef,triggerRender:I,insetInput:x,presetPosition:R,renderQuickControls:this.renderQuickControls(),renderDateInput:this.renderDateInput(),yearAndMonthOpts:C,startYear:E,endYear:O})}renderQuickControls(){const{presets:e,type:t,presetPosition:n,insetInput:a,locale:i}=this.props;return b.createElement(ya,{type:t,presets:e,insetInput:a,presetPosition:n,onPresetClick:(r,u)=>this.foundation.handlePresetClick(r,u),locale:i})}renderDateInput(){const{insetInput:e,dateFnsLocale:t,density:n,type:a,format:i,rangeSeparator:r,rangeSeparatorNode:u,defaultPickerValue:o}=this.props,{insetInputValue:l,value:c}=this.state,d={dateFnsLocale:t,format:i,insetInputValue:l,rangeSeparator:r,rangeSeparatorNode:u,type:a,value:c,handleInsetDateFocus:this.handleInsetDateFocus,handleInsetTimeFocus:this.handleInsetTimeFocus,onInsetInputChange:this.handleInsetInputChange,rangeInputStartRef:this.rangeInputStartRef,rangeInputEndRef:this.rangeInputEndRef,density:n,defaultPickerValue:o};return e?b.createElement(Fn,Object.assign({},d,{insetInput:e})):null}renderInner(e){const{clearIcon:t,type:n,format:a,multiple:i,disabled:r,showClear:u,insetLabel:o,insetLabelId:l,placeholder:c,validateStatus:d,inputStyle:f,prefix:h,locale:v,dateFnsLocale:w,triggerRender:m,size:g,inputReadOnly:T,rangeSeparator:y,rangeSeparatorNode:D,insetInput:_,defaultPickerValue:I,borderless:x}=this.props,{value:R,inputValue:C,rangeInputFocus:E,triggerDisabled:O}=this.state,k=this.isRangeType(n,m),U=r||_&&O,se=Y(`${N.PREFIX}-input`,{[`${N.PREFIX}-range-input`]:k,[`${N.PREFIX}-range-input-${g}`]:k&&g,[`${N.PREFIX}-range-input-active`]:k&&E&&!U,[`${N.PREFIX}-range-input-disabled`]:k&&U,[`${N.PREFIX}-range-input-${d}`]:k&&d,[`${N.PREFIX}-borderless`]:x}),G=c||v.placeholder[n],Z=Object.assign(Object.assign({},e),{showClearIgnoreDisabled:!!_,placeholder:G,clearIcon:t,disabled:U,inputValue:C,value:R,defaultPickerValue:I,onChange:this.handleInputChange,onEnterPress:this.handleInputComplete,block:!0,inputStyle:f,showClear:u,insetLabel:o,insetLabelId:l,type:n,format:a,multiple:i,validateStatus:d,inputReadOnly:T||!!_,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,onClear:this.handleInputClear,prefix:h,size:g,autofocus:this.state.autofocus,dateFnsLocale:w,rangeInputFocus:E,rangeSeparator:y,rangeSeparatorNode:D,onRangeBlur:this.handleRangeInputBlur,onRangeClear:this.handleRangeInputClear,onRangeEndTabPress:this.handleRangeEndTabPress,rangeInputStartRef:_?null:this.rangeInputStartRef,rangeInputEndRef:_?null:this.rangeInputEndRef,inputRef:this.inputRef});return b.createElement("div",{role:"combobox","aria-label":Array.isArray(R)&&R.length?"Change date":"Choose date","aria-disabled":r,onClick:this.handleTriggerWrapperClick,className:se},typeof m=="function"?b.createElement(ss,Object.assign({},Z,{triggerRender:m,componentName:"DatePicker",componentProps:Object.assign({},this.props)})):b.createElement(Fn,Object.assign({},Z)))}render(){const e=this.props,{style:t,className:n,prefixCls:a,type:i}=e,r=Ol(e,["style","className","prefixCls","type"]),u=Object.assign({style:t,className:Y(n,{[a]:!0}),ref:this.setTriggerRef,"aria-invalid":this.props["aria-invalid"],"aria-errormessage":this.props["aria-errormessage"],"aria-labelledby":this.props["aria-labelledby"],"aria-describedby":this.props["aria-describedby"],"aria-required":this.props["aria-required"]},this.getDataAttr(r)),o=[];i.toLowerCase().includes("range")||o.push("borderless");const l=this.renderInner(Ji(this.props,o)),c=this.wrapPopover(l);return b.createElement("div",Object.assign({},u),c)}};Ze.contextType=Xr;Ze.propTypes={"aria-describedby":p.string,"aria-errormessage":p.string,"aria-invalid":p.bool,"aria-labelledby":p.string,"aria-required":p.bool,borderless:p.bool,type:p.oneOf(P.TYPE_SET),size:p.oneOf(P.SIZE_SET),clearIcon:p.node,density:p.oneOf(P.DENSITY_SET),defaultValue:p.oneOfType([p.string,p.number,p.object,p.array]),value:p.oneOfType([p.string,p.number,p.object,p.array]),defaultPickerValue:p.oneOfType([p.string,p.number,p.object,p.array]),disabledTime:p.func,disabledTimePicker:p.bool,hideDisabledOptions:p.bool,format:p.string,disabled:p.bool,multiple:p.bool,max:p.number,placeholder:p.oneOfType([p.string,p.array]),presets:p.array,presetPosition:p.oneOf(P.PRESET_POSITION_SET),onChange:p.func,onChangeWithDateFirst:p.bool,weekStartsOn:p.number,disabledDate:p.func,timePickerOpts:p.object,showClear:p.bool,onOpenChange:p.func,open:p.bool,defaultOpen:p.bool,motion:p.oneOfType([p.bool,p.func,p.object]),className:p.string,prefixCls:p.string,prefix:p.node,insetLabel:p.node,insetLabelId:p.string,zIndex:p.number,position:p.oneOf(Gr.POSITION_SET),getPopupContainer:p.func,onCancel:p.func,onConfirm:p.func,needConfirm:p.bool,inputStyle:p.object,timeZone:p.oneOfType([p.string,p.number]),triggerRender:p.func,stopPropagation:p.oneOfType([p.bool,p.string]),autoAdjustOverflow:p.bool,onBlur:p.func,onFocus:p.func,onClear:p.func,style:p.object,autoFocus:p.bool,inputReadOnly:p.bool,validateStatus:p.oneOf(P.STATUS),renderDate:p.func,renderFullDate:p.func,spacing:p.oneOfType([p.number,p.object]),startDateOffset:p.func,endDateOffset:p.func,autoSwitchDate:p.bool,dropdownClassName:p.string,dropdownStyle:p.object,dropdownMargin:p.oneOfType([p.number,p.object]),topSlot:p.node,bottomSlot:p.node,dateFnsLocale:p.object,syncSwitchMonth:p.bool,onPanelChange:p.func,rangeSeparator:p.string,rangeSeparatorNode:p.node,preventScroll:p.bool,yearAndMonthOpts:p.object,onClickOutSide:p.func};Ze.__SemiComponentName__="DatePicker";Ze.defaultProps=Qi(Ze.__SemiComponentName__,{onChangeWithDateFirst:!0,borderless:!1,autoAdjustOverflow:!0,stopPropagation:!0,motion:!0,prefixCls:N.PREFIX,presetPosition:"bottom",zIndex:Br.DEFAULT_Z_INDEX,type:"date",size:"default",density:"default",multiple:!1,defaultOpen:!1,disabledHours:Q,disabledMinutes:Q,disabledSeconds:Q,hideDisabledOptions:!1,onBlur:Q,onFocus:Q,onClear:Q,onCancel:Q,onConfirm:Q,onChange:Q,onOpenChange:Q,onPanelChange:Q,onPresetClick:Q,weekStartsOn:ut.WEEK_START_ON,disabledDate:Tt,disabledTime:Tt,inputReadOnly:!1,spacing:ut.SPACING,autoSwitchDate:!0,syncSwitchMonth:!1,rangeSeparator:P.DEFAULT_SEPARATOR_RANGE,insetInput:!1,onClickOutSide:Q});const Sl=ds(b.forwardRef((s,e)=>{const t=Object.assign({},s),{type:n,format:a,rangeSeparator:i}=t;return typeof a=="string"&&a&&(/[Hhms]+/.test(a)||(n==="dateTime"?t.type="date":n==="dateTimeRange"&&(t.type="dateRange"))),i&&typeof i=="string"&&(t.rangeSeparator=` ${i.trim()} `),t.insetInput&&(t.position||(t.position=P.POSITION_INLINE_INPUT),t.position.includes("Over")&&!t.spacing&&(t.spacing=ut.SPACING_INSET_INPUT)),b.createElement(Xr.Consumer,null,r=>{let{timeZone:u}=r;return b.createElement(zr,{componentName:"DatePicker"},(o,l,c)=>b.createElement(Ze,Object.assign({timeZone:u,localeCode:l,locale:o,dateFnsLocale:c},t,{ref:e})))})}),Ze);function mt(){return{totalInput:0,totalOutput:0,totalCacheWrite:0,totalCacheRead:0}}async function xl(){const s=await fetch(`${Jr}/token-history`);if(!s.ok)throw new Error(`HTTP ${s.status}`);const e=await s.json(),n=(e.history??[]).map(o=>{const l=Number(o.ts??0);return{id:String(o.sessionId??o.id??""),title:String(o.title??""),input:Number(o.input??0),output:Number(o.output??0),cacheWrite:Number(o.cacheCreate??o.cacheWrite??0),cacheRead:Number(o.cacheRead??0),model:String(o.model??""),ts:l<1e12?l*1e3:l,deleted:o.deleted}}),a=e.snap??{},i=Object.values(a).reduce((o,l)=>({totalInput:o.totalInput+(l.input??0),totalOutput:o.totalOutput+(l.output??0),totalCacheWrite:o.totalCacheWrite+(l.cacheCreate??l.cacheWrite??0),totalCacheRead:o.totalCacheRead+(l.cacheRead??0)}),mt()),r=e.conductorLast,u=r?{totalInput:r.input??0,totalOutput:r.output??0,totalCacheWrite:r.cacheCreate??0,totalCacheRead:r.cacheRead??0}:void 0;return{history:n,snap:i,conductorSnapshot:u}}async function Ml(){const s=await fetch(`${fs}/token-stats`);if(!s.ok)throw new Error(`HTTP ${s.status}`);return(await s.json()).records??[]}async function kl(){const s=await fetch(`${Jr}/token-stats`);if(!s.ok)throw new Error(`HTTP ${s.status}`);return(await s.json()).records??[]}const Nl=15e3;let ht=null;const de=hs((s,e)=>(wa("token.snapshot",t=>{const n=t;n.snap&&s({snapshot:n.snap}),n.history&&s({history:n.history,loading:!1})}),wa("token.changed",t=>{const n=t;n.entry&&s(a=>({history:[...a.history,n.entry],snapshot:{totalInput:a.snapshot.totalInput+n.entry.input,totalOutput:a.snapshot.totalOutput+n.entry.output,totalCacheWrite:a.snapshot.totalCacheWrite+n.entry.cacheWrite,totalCacheRead:a.snapshot.totalCacheRead+n.entry.cacheRead}}))}),{history:[],snapshot:mt(),loading:!0,error:null,conductorHistory:[],conductorSnapshot:mt(),conductorLoading:!1,conductorOffline:!1,dateRange:[null,null],async fetchHistory(){s({loading:!0,error:null});try{const t=await xl();s({history:t.history,snapshot:t.snap,loading:!1}),t.conductorSnapshot&&s({conductorSnapshot:t.conductorSnapshot})}catch(t){s({loading:!1,error:t.message})}},async fetchConductorHistory(){s({conductorLoading:!0});try{const n=(await Ml()).map((i,r)=>({id:`cond-${r}`,title:i.thread||`Conductor ${r+1}`,input:i.input,output:i.output,cacheWrite:i.cacheCreate,cacheRead:i.cacheRead,model:i.model,ts:Date.now()})),a=n.reduce((i,r)=>({totalInput:i.totalInput+r.input,totalOutput:i.totalOutput+r.output,totalCacheWrite:i.totalCacheWrite+r.cacheWrite,totalCacheRead:i.totalCacheRead+r.cacheRead}),mt());s({conductorHistory:n,conductorSnapshot:a,conductorLoading:!1,conductorOffline:!1})}catch{s({conductorLoading:!1,conductorOffline:!0})}},async fetchLiveStats(){try{const n=(await kl()).reduce((a,i)=>({totalInput:a.totalInput+i.input,totalOutput:a.totalOutput+i.output,totalCacheWrite:a.totalCacheWrite+i.cacheCreate,totalCacheRead:a.totalCacheRead+i.cacheRead}),mt());s({snapshot:n})}catch{}},startPolling(){ht||(ht=setInterval(()=>{e().fetchHistory()},Nl))},stopPolling(){ht&&(clearInterval(ht),ht=null)},setDateRange(t){s({dateRange:t})},resetFilters(){s({dateRange:[null,null]})}}));function vt(s){return s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(1)}K`:String(s)}function Rn(s){return s>=1e6?`${(s/1e6).toFixed(2)}M`:s>=1e3?`${(s/1e3).toFixed(1)}K`:String(s)}function Ai({snapshot:s,history:e,cards:t}){const{t:n}=lt(),a=de(m=>m.snapshot),i=de(m=>m.history),r=de(m=>m.dateRange),u=s??a,o=e??i,l=J.useMemo(()=>{const[m,g]=r;if(!s&&(m||g)){const y=o.filter(R=>{const C=R.ts<1e12?R.ts*1e3:R.ts;return!(m&&Cg.getTime())}),D=y.reduce((R,C)=>R+C.input,0),_=y.reduce((R,C)=>R+C.output,0),I=y.reduce((R,C)=>R+C.cacheWrite,0),x=y.reduce((R,C)=>R+C.cacheRead,0);return{totalInput:D,totalOutput:_,totalCacheWrite:I,totalCacheRead:x}}return u},[o,u,r,s]),c=J.useMemo(()=>{const m=new Date;m.setHours(0,0,0,0);const g=m.getTime();return o.filter(T=>(T.ts<1e12?T.ts*1e3:T.ts)>=g).reduce((T,y)=>T+y.input+y.output,0)},[o]),d=l.totalInput+l.totalOutput,f=l.totalInput+l.totalCacheWrite+l.totalCacheRead,h=f>0?(l.totalCacheRead/f*100).toFixed(1):"0",v=[{labelKey:"tok.total",value:vt(d)},{labelKey:"tok.cost",value:`${h}%`},{labelKey:"tok.today",value:vt(c)}],w=t??v;return A.jsx("div",{className:"ga-token-stats",children:w.map(m=>A.jsxs("div",{className:"ga-token-stat-card","data-testid":`token-stat-${m.labelKey}`,children:[A.jsx("div",{className:"ga-token-stat-label",children:n(m.labelKey)}),A.jsx("div",{className:"ga-token-stat-value","data-testid":`token-stat-value-${m.labelKey}`,children:m.value})]},m.labelKey))})}function Al(s,e){const t=new Map;for(const n of s){const a=n.id,i=t.get(a);if(i)i.input+=n.input,i.output+=n.output,i.cacheWrite+=n.cacheWrite,i.cacheRead+=n.cacheRead,n.ts>i.ts&&(i.ts=n.ts),n.deleted&&(i.deleted=!0);else{const r=e.get(n.id);t.set(a,{id:n.id,title:r||n.title||n.id,input:n.input,output:n.output,cacheWrite:n.cacheWrite,cacheRead:n.cacheRead,model:n.model,ts:n.ts,deleted:n.deleted})}}return[...t.values()]}function Fi({dataSource:s,loading:e}){const{t}=lt(),n=de(f=>f.history),a=de(f=>f.loading),i=de(f=>f.dateRange),r=ps(f=>f.sessions),u=s??n,o=e??a,l=J.useMemo(()=>{const f=new Map;for(const h of r)h.title&&f.set(h.id,h.title);return f},[r]),c=J.useMemo(()=>{let f=u;if(!s){const[v,w]=i;(v||w)&&(f=f.filter(m=>{const g=m.ts<1e12?m.ts*1e3:m.ts;return!(v&&gw.getTime())}))}const h=Al(f,l);return h.sort((v,w)=>w.ts-v.ts),h},[u,i,s,l]),d=[{title:t("tok.colSession"),dataIndex:"title",key:"title",render:(f,h)=>A.jsxs("span",{style:{display:"flex",alignItems:"center",gap:6},children:[A.jsx("span",{children:h.title||h.id}),h.deleted&&A.jsx(ms,{size:"small",color:"orange",type:"ghost",children:t("tok.deleted")})]})},{title:t("tok.colIn"),dataIndex:"input",key:"input",width:100,sorter:(f,h)=>((f==null?void 0:f.input)??0)-((h==null?void 0:h.input)??0),render:(f,h)=>A.jsx("span",{className:"ga-token-mono",children:Rn(h.input)})},{title:t("tok.colOut"),dataIndex:"output",key:"output",width:100,sorter:(f,h)=>((f==null?void 0:f.output)??0)-((h==null?void 0:h.output)??0),render:(f,h)=>A.jsx("span",{className:"ga-token-mono",children:Rn(h.output)})},{title:t("tok.colCacheW"),dataIndex:"cacheWrite",key:"cacheWrite",width:110,sorter:(f,h)=>((f==null?void 0:f.cacheWrite)??0)-((h==null?void 0:h.cacheWrite)??0),render:(f,h)=>A.jsx("span",{className:"ga-token-mono",children:Rn(h.cacheWrite)})},{title:t("tok.colCache"),dataIndex:"cacheRead",key:"cacheRead",width:110,sorter:(f,h)=>((f==null?void 0:f.cacheRead)??0)-((h==null?void 0:h.cacheRead)??0),render:(f,h)=>A.jsx("span",{className:"ga-token-mono",children:Rn(h.cacheRead)})},{title:t("tok.cost"),key:"cacheRate",width:100,render:(f,h)=>{const v=h.input+h.cacheWrite+h.cacheRead,w=v>0?(h.cacheRead/v*100).toFixed(1):"0";return A.jsxs("span",{className:"ga-token-mono",children:[w,"%"]})}}];return!o&&c.length===0?A.jsx(ei,{description:t("tok.noData"),style:{marginTop:32}}):A.jsx(os,{columns:d,dataSource:c,rowKey:"id",loading:o,pagination:{pageSize:15,showTotal:!0},size:"small",bordered:!1})}function Fl(){const{t:s}=lt(),e=de(a=>a.dateRange),t=de(a=>a.setDateRange),n=de(a=>a.resetFilters);return A.jsxs("div",{className:"ga-token-filter",children:[A.jsx(Sl,{type:"dateTimeRange",value:e[0]&&e[1]?[e[0],e[1]]:void 0,onChange:a=>{Array.isArray(a)&&a.length===2?t([a[0]?new Date(a[0]):null,a[1]?new Date(a[1]):null]):t([null,null])},placeholder:[s("tok.from"),s("tok.to")],density:"compact",style:{width:340}}),A.jsx(yt,{size:"small",icon:A.jsx(gs,{}),theme:"borderless",onClick:n,children:s("tok.reset")})]})}function Yl(){const{t:s}=lt(),e=de(n=>n.conductorHistory),t=de(n=>n.conductorLoading);return!t&&e.length===0?A.jsx(ei,{description:s("tok.noData"),style:{marginTop:32}}):t?A.jsx("div",{className:"ga-token-loading",children:A.jsx(ys,{})}):A.jsx(Fi,{dataSource:e,loading:!1})}function Ll(){const{t:s}=lt(),e=de(i=>i.fetchConductorHistory),t=de(i=>i.conductorOffline),n=de(i=>i.conductorSnapshot);J.useEffect(()=>{e()},[e]);const a=J.useMemo(()=>{const i=n.totalInput+n.totalOutput;return[{labelKey:"tok.condTotal",value:vt(i)},{labelKey:"tok.colIn",value:vt(n.totalInput)},{labelKey:"tok.colOut",value:vt(n.totalOutput)}]},[n]);return A.jsxs("div",{className:"ga-token-content",children:[A.jsx(Da,{type:"info",description:s("tok.condTip"),style:{marginBottom:12}}),t?A.jsx(Da,{type:"warning",description:s("tok.condOffline")}):A.jsxs(A.Fragment,{children:[A.jsx(Ai,{cards:a}),A.jsx(Yl,{})]})]})}function zl(){const{t:s}=lt(),e=de(a=>a.fetchHistory),t=de(a=>a.startPolling),n=de(a=>a.stopPolling);return J.useEffect(()=>(e(),t(),()=>n()),[e,t,n]),A.jsxs("div",{className:"ga-token-page",children:[A.jsxs(us,{type:"line",defaultActiveKey:"chat",children:[A.jsx(Ta,{tab:s("tok.tabAll"),itemKey:"chat",children:A.jsxs("div",{className:"ga-token-content",children:[A.jsx(Ai,{}),A.jsx(Fl,{}),A.jsx(Fi,{})]})}),A.jsx(Ta,{tab:s("tok.tabConductor"),itemKey:"conductor",children:A.jsx(Ll,{})})]}),A.jsx("div",{className:"ga-token-disclaimer",children:s("tok.disclaimer")})]})}export{zl as TokenPage}; diff --git a/frontends/desktop/dist/assets/TokenPage-DwLDOw_j.css b/frontends/desktop/dist/assets/TokenPage-DwLDOw_j.css new file mode 100644 index 000000000..7a68d9948 --- /dev/null +++ b/frontends/desktop/dist/assets/TokenPage-DwLDOw_j.css @@ -0,0 +1 @@ +.semi-scrolllist{width:100%;height:100%;background:var(--semi-color-bg-3);box-shadow:0 0 1px #0000004d,0 4px 14px #0000001a;border-radius:var(--semi-border-radius-medium);overflow:hidden;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;-webkit-user-select:none;user-select:none;display:flex;flex-direction:column}.semi-scrolllist-header{text-align:center;padding:0 16px;background:transparent}.semi-scrolllist-header-title{padding:16px 0;font-weight:600;color:var(--semi-color-text-0);font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-scrolllist-body{display:flex;height:300px;padding:0 16px;overflow:hidden}.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer-nocycle>ul:before,.semi-scrolllist-body .semi-scrolllist-item>ul:before{content:"";display:block;width:100%;height:132px}.semi-scrolllist-body .semi-scrolllist-item{position:relative;flex:1;overflow-x:hidden;overflow-y:auto}.semi-scrolllist-body .semi-scrolllist-item:not(:last-child){border-right:1px solid var(--semi-color-border)}.semi-scrolllist-body .semi-scrolllist-item>ul,.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul{box-sizing:border-box;width:100%;margin:0;padding:0 0 132px;list-style:none}.semi-scrolllist-body .semi-scrolllist-item>ul>li,.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li{list-style:none;height:36px;box-sizing:border-box;color:var(--semi-color-text-0);text-align:center;display:flex;align-items:center;justify-content:center;cursor:pointer;background-color:transparent;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeOut) 0ms}.semi-scrolllist-body .semi-scrolllist-item>ul>li.semi-scrolllist-item-sel,.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li.semi-scrolllist-item-sel{background:var(--semi-color-primary-light-default);color:var(--semi-color-text-0)}.semi-scrolllist-body .semi-scrolllist-item>ul>li.semi-scrolllist-item-sel>svg,.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li.semi-scrolllist-item-sel>svg{color:var(--semi-color-text-2);width:16px;height:16px;margin-right:12px}.semi-scrolllist-body .semi-scrolllist-item>ul>li:not(.disabled):not(.semi-scrolllist-item-disabled):not(.semi-scrolllist-item-sel):not(.semi-scrolllist-item-selected),.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li:not(.disabled):not(.semi-scrolllist-item-disabled):not(.semi-scrolllist-item-sel):not(.semi-scrolllist-item-selected){cursor:pointer}.semi-scrolllist-body .semi-scrolllist-item>ul>li:not(.disabled):not(.semi-scrolllist-item-disabled):not(.semi-scrolllist-item-sel):not(.semi-scrolllist-item-selected):hover,.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li:not(.disabled):not(.semi-scrolllist-item-disabled):not(.semi-scrolllist-item-sel):not(.semi-scrolllist-item-selected):hover{background-color:var(--semi-color-fill-1)}.semi-scrolllist-body .semi-scrolllist-item>ul>li:not(.disabled):not(.semi-scrolllist-item-disabled):not(.semi-scrolllist-item-sel):not(.semi-scrolllist-item-selected):active,.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li:not(.disabled):not(.semi-scrolllist-item-disabled):not(.semi-scrolllist-item-sel):not(.semi-scrolllist-item-selected):active{background-color:var(--semi-color-fill-2)}.semi-scrolllist-body .semi-scrolllist-item>ul>li.semi-scrolllist-item-disabled,.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li.semi-scrolllist-item-disabled{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-scrolllist-body .semi-scrolllist-item-wheel{position:relative;flex:1;overflow:hidden}.semi-scrolllist-body .semi-scrolllist-item-wheel:not(:last-child){border-right:1px solid var(--semi-color-border)}.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-item-selected{font-weight:600;color:var(--semi-color-primary)!important}.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer{overflow-x:hidden;overflow-y:auto;height:100%;width:100%;padding-right:18px}.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-shade{width:100%;height:50%;pointer-events:none;position:absolute}.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-shade-pre{top:0;margin-top:-19px;background:var(--semi-color-bg-3);opacity:.5}.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-shade-post{top:50%;margin-top:19px;background:var(--semi-color-bg-3);opacity:.5}.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-selector{pointer-events:none;position:absolute;top:50%;border-top:1px solid var(--semi-color-border);border-bottom:1px solid var(--semi-color-border);height:36px;width:100%;transform:translateY(-50%)}.semi-scrolllist .semi-scrolllist-footer{border-top:1px solid var(--semi-color-border);padding:10px}.semi-scrolllist .semi-scrolllist-line{background:var(--semi-color-border);height:1px}.semi-rtl .semi-scrolllist,.semi-portal-rtl .semi-scrolllist{direction:rtl}.semi-rtl .semi-scrolllist-body .semi-scrolllist-item:not(:last-child),.semi-portal-rtl .semi-scrolllist-body .semi-scrolllist-item:not(:last-child){border-right:0;border-left:1px solid var(--semi-color-border)}.semi-rtl .semi-scrolllist-body .semi-scrolllist-item>ul>li.semi-scrolllist-item-sel>svg,.semi-rtl .semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li.semi-scrolllist-item-sel>svg,.semi-portal-rtl .semi-scrolllist-body .semi-scrolllist-item>ul>li.semi-scrolllist-item-sel>svg,.semi-portal-rtl .semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li.semi-scrolllist-item-sel>svg{margin-right:0;margin-left:12px}.semi-rtl .semi-scrolllist-body .semi-scrolllist-item-wheel:not(:last-child),.semi-portal-rtl .semi-scrolllist-body .semi-scrolllist-item-wheel:not(:last-child){border-right:0;border-left:1px solid var(--semi-color-border)}.semi-rtl .semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer,.semi-portal-rtl .semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer{padding-right:0;padding-left:18px}.semi-datepicker{box-sizing:border-box;display:inline-block}.semi-datepicker-container{display:flex}.semi-datepicker .semi-scrolllist-body .semi-scrolllist-item{-ms-overflow-style:none;scrollbar-width:none}.semi-datepicker .semi-scrolllist-body .semi-scrolllist-item::-webkit-scrollbar{display:none;width:0;height:0}.semi-datepicker .semi-scrolllist-body .semi-scrolllist-list-outer{-ms-overflow-style:none;scrollbar-width:none}.semi-datepicker .semi-scrolllist-body .semi-scrolllist-list-outer::-webkit-scrollbar{display:none;width:0;height:0}.semi-datepicker-month-grid{-webkit-user-select:none;user-select:none;display:flex}.semi-datepicker-month-grid-left,.semi-datepicker-month-grid-right{position:relative;padding:0;display:inline-flex;flex-direction:column;justify-content:flex-start}.semi-datepicker-month-grid[x-type=date] .semi-datepicker-yam,.semi-datepicker-month-grid[x-type=dateRange] .semi-datepicker-yam{height:100%}.semi-datepicker-month-grid[x-type=dateTime] .semi-datepicker-yam,.semi-datepicker-month-grid[x-type=dateTimeRange] .semi-datepicker-yam{height:calc(100% - 54px)}.semi-datepicker-month-grid .semi-datepicker-yam-showing{min-height:378px;min-width:284px}.semi-datepicker-month-grid[x-type=date] .semi-datepicker-yam-showing{min-height:325px}.semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-left[x-open-type=year],.semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-right[x-open-type=year],.semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-left[x-open-type=time],.semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-right[x-open-type=time]{min-height:317px}.semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-navigation{padding-top:8px;padding-bottom:8px}.semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-tpk{min-height:100%}.semi-datepicker-month-grid[x-insetinput=true][x-type=dateTime] .semi-datepicker-yam,.semi-datepicker-month-grid[x-insetinput=true][x-type=dateTimeRange] .semi-datepicker-yam{height:100%}.semi-datepicker-month-grid[x-preset-position=left][x-insetinput=false] .semi-datepicker-month,.semi-datepicker-month-grid[x-preset-position=right][x-insetinput=false] .semi-datepicker-month{height:253px}.semi-datepicker-month-grid .semi-datepicker-yearmonth-header{background:var(--semi-color-bg-3);padding:12px 16px;border-bottom:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-medium) var(--semi-border-radius-medium) 0 0;display:flex;align-items:center}.semi-datepicker-month-grid .semi-scrolllist{background:var(--semi-color-bg-3);position:relative;box-shadow:none;height:auto;width:100%;height:100%;overflow:hidden;flex:1}.semi-datepicker-month-grid .semi-scrolllist-header,.semi-datepicker-month-grid .semi-scrolllist-body{box-sizing:border-box;width:100%}.semi-datepicker-month-grid .semi-scrolllist-header{border-bottom:1px solid var(--semi-color-border);padding:16px}.semi-datepicker-month-grid .semi-scrolllist-body{height:100%;overflow:hidden;padding:0;flex:1}.semi-datepicker-month-grid .semi-scrolllist-line{display:none}.semi-datepicker-month-grid .semi-scrolllist-header-title{padding:0;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;min-height:24px;line-height:24px}.semi-datepicker-month-grid[x-panel-yearandmonth-open-type=left] .semi-datepicker-weeks,.semi-datepicker-month-grid[x-panel-yearandmonth-open-type=right] .semi-datepicker-weeks{min-height:216px}.semi-datepicker-panel-yam{max-width:484px}.semi-datepicker-panel-yam[x-type=monthRange]{max-width:584px}.semi-datepicker-panel-yam .semi-datepicker-yearmonth-body{display:flex}.semi-datepicker-panel-yam .semi-datepicker-yearmonth-body .semi-scrolllist:nth-child(2){border-left:1px solid var(--semi-color-border)}.semi-datepicker-panel-yam .semi-scrolllist{box-shadow:none;height:266px}.semi-datepicker-panel-yam .semi-scrolllist-list-outer>ul>li{min-width:64px}.semi-datepicker-panel-yam .semi-scrolllist-item>ul>li{min-width:82px}.semi-datepicker-panel-yam .semi-scrolllist-body{padding:0;overflow:hidden}.semi-datepicker-panel-yam .semi-scrolllist-body .semi-scrolllist-item-wheel:not(#neverExistElement){border:none}.semi-datepicker-footer{padding-top:10px;padding-right:8px;padding-bottom:10px;text-align:right;background-color:var(--semi-color-fill-0)}.semi-datepicker-footer .semi-button:first-of-type{margin-right:12px}.semi-datepicker-footer .semi-button:nth-of-type(2){margin-right:8px}.semi-datepicker-yam{position:absolute;top:0;width:100%;display:flex;flex-direction:column;box-sizing:border-box}.semi-datepicker-tpk{position:absolute;top:0;height:calc(100% - 54px);width:100%;display:flex;flex-direction:column}.semi-datepicker-tpk .semi-datepicker-time{height:100%}.semi-datepicker-navigation{display:flex;align-items:center;box-sizing:content-box;height:32px;padding:12px 16px}.semi-datepicker-navigation-left,.semi-datepicker-navigation-right{width:32px;height:32px;display:flex;justify-content:center;align-items:center}.semi-datepicker-navigation .semi-button{color:var(--semi-color-text-2);min-width:32px}.semi-datepicker-navigation-month{font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;flex-grow:1;text-align:center;font-weight:600;color:var(--semi-color-text-0)}.semi-datepicker-navigation-month .semi-button{color:var(--semi-color-text-0)}.semi-datepicker-month{width:252px;box-sizing:content-box;padding:0 16px 16px}.semi-datepicker-weekday{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;color:var(--semi-color-text-2);border-bottom:1px solid var(--semi-color-border)}.semi-datepicker-weekday-item{width:36px;height:36px;line-height:36px;text-align:center;display:inline-block}.semi-datepicker-weeks{color:var(--semi-color-text-0)}.semi-datepicker-week{display:flex;align-items:center}.semi-datepicker-day{box-sizing:border-box;display:inline-block;width:36px;height:36px;display:flex;justify-content:center;align-items:center;cursor:pointer}.semi-datepicker-day-main{display:flex;justify-content:center;align-items:center;width:32px;height:32px;margin:0 auto;box-sizing:border-box;border-radius:var(--semi-border-radius-small)}.semi-datepicker-day-main:hover{background-color:var(--semi-color-fill-0)}.semi-datepicker-day-main:active{background-color:var(--semi-color-fill-1)}.semi-datepicker-day-today .semi-datepicker-day-main{color:var(--semi-color-primary);background-color:var(--semi-color-fill-0);font-weight:600}.semi-datepicker-day-today.semi-datepicker-day-disabled .semi-datepicker-day-main{color:var(--semi-color-primary-disabled)}.semi-datepicker-day-inrange .semi-datepicker-day-main,.semi-datepicker-day-inhover .semi-datepicker-day-main,.semi-datepicker-day-inoffsetrange .semi-datepicker-day-main,.semi-datepicker-day-hoverday .semi-datepicker-day-main,.semi-datepicker-day-selectedrange-hover .semi-datepicker-day-main,.semi-datepicker-day-hoverday-around-singleselected .semi-datepicker-day-main{border-radius:0;margin-left:0;margin-right:0;width:36px}.semi-datepicker-day-selected .semi-datepicker-day-main,.semi-datepicker-day-selected-start.semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-datepicker-day-offsetrange-start.semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{border-radius:var(--semi-border-radius-small)}.semi-datepicker-day-offsetrange-start .semi-datepicker-day-main{border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-datepicker-day-hoverday-beforerange .semi-datepicker-day-main{border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-datepicker-day-hoverday-afterrange .semi-datepicker-day-main{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-datepicker-day-selected-start .semi-datepicker-day-main,.semi-datepicker-day-offsetrange-start .semi-datepicker-day-main{width:34px;margin-left:2px;margin-right:0;border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{width:34px;margin-right:2px;margin-left:0;border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-datepicker-day-hoverday-inrange .semi-datepicker-day-main{border-radius:0}.semi-datepicker-day-inoffsetrange .semi-datepicker-day-main,.semi-datepicker-day-offsetrange-start .semi-datepicker-day-main,.semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{background-color:var(--semi-color-fill-0)}.semi-datepicker-day-hoverday .semi-datepicker-day-main,.semi-datepicker-day-hoverday-offset .semi-datepicker-day-main{background-color:var(--semi-color-fill-1)}.semi-datepicker-day-inrange .semi-datepicker-day-main,.semi-datepicker-day-inhover .semi-datepicker-day-main{background-color:var(--semi-color-primary-light-default)}.semi-datepicker-day-hoverday-inrange .semi-datepicker-day-main,.semi-datepicker-day-hoverday-beforerange .semi-datepicker-day-main,.semi-datepicker-day-hoverday-afterrange .semi-datepicker-day-main,.semi-datepicker-day-hoverday-around-singleselected .semi-datepicker-day-main{background-color:var(--semi-color-primary-light-active)}.semi-datepicker-day-selected .semi-datepicker-day-main,.semi-datepicker-day-selected-start .semi-datepicker-day-main,.semi-datepicker-day-selected-end .semi-datepicker-day-main{background-color:var(--semi-color-primary);color:var(--semi-color-white)}.semi-datepicker-day-selected .semi-datepicker-day-main:hover,.semi-datepicker-day-selected-start .semi-datepicker-day-main:hover,.semi-datepicker-day-selected-end .semi-datepicker-day-main:hover{background-color:var(--semi-color-primary)}.semi-datepicker-day-selectedrange-hover .semi-datepicker-day-main{background-color:var(--semi-color-primary-light-hover)}.semi-datepicker-day-selected-start-afterhover .semi-datepicker-day-main,.semi-datepicker-day-selected-end-beforehover .semi-datepicker-day-main{border:1px solid var(--semi-color-primary-active)}.semi-datepicker-day-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text)}.semi-datepicker-day-disabled .semi-datepicker-day-main:hover,.semi-datepicker-day-disabled .semi-datepicker-day-main:active{background-color:transparent}.semi-datepicker-day-disabled.semi-datepicker-day-selected .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-selected-start .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-inhover .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-inrange .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-inoffsetrange .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-hoverday .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-hoverday-offset .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-offsetrange-start .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-offsetrange-end .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-selectedrange-hover .semi-datepicker-day-main{background-color:var(--semi-color-disabled-fill);color:var(--semi-color-disabled-text)}.semi-datepicker-switch{text-align:center;display:flex;border-top:1px solid var(--semi-color-border);margin-top:auto}.semi-datepicker-switch-date,.semi-datepicker-switch-time{width:50%;cursor:pointer;padding-top:16px;padding-bottom:16px;display:flex;justify-content:center;align-items:center;color:var(--semi-color-text-2)}.semi-datepicker-switch-date:not(.semi-datepicker-switch-time-disabled):hover,.semi-datepicker-switch-time:not(.semi-datepicker-switch-time-disabled):hover{background-color:var(--semi-color-fill-0)}.semi-datepicker-switch-date-active,.semi-datepicker-switch-time-active{color:var(--semi-color-text-0);font-weight:600;cursor:auto}.semi-datepicker-switch-date-active:hover,.semi-datepicker-switch-time-active:hover{background-color:inherit}.semi-datepicker-switch-date-disabled,.semi-datepicker-switch-time-disabled{cursor:not-allowed}.semi-datepicker-switch-text{padding-left:8px}.semi-datepicker-time .semi-jumperlist{box-shadow:none;border-radius:0}.semi-datepicker-quick-control{box-sizing:border-box;background-color:transparent}.semi-datepicker-quick-control-header{padding:18px 12px 0;font-weight:600}.semi-datepicker-quick-control-left{border-right:1px solid var(--semi-color-border)}.semi-datepicker-quick-control-right{border-left:1px solid var(--semi-color-border)}.semi-datepicker-quick-control-top{border-bottom:1px solid var(--semi-color-border)}.semi-datepicker-quick-control-bottom{border-top:1px solid var(--semi-color-border)}.semi-datepicker-quick-control-left-content-wrapper,.semi-datepicker-quick-control-right-content-wrapper{max-width:200px;margin-top:14px;overflow-y:auto}.semi-datepicker-quick-control-top-content-wrapper,.semi-datepicker-quick-control-bottom-content-wrapper{overflow-y:auto;max-height:100px}.semi-datepicker-quick-control-left-content,.semi-datepicker-quick-control-right-content{box-sizing:border-box;display:grid;align-content:flex-start;grid-gap:8px;grid-template-columns:repeat(2,minmax(76.5px,84px));padding:0 12px 12px}.semi-datepicker-quick-control-left-content-item,.semi-datepicker-quick-control-right-content-item{max-width:84px}.semi-datepicker-quick-control-left-content-item-ellipsis,.semi-datepicker-quick-control-right-content-item-ellipsis{width:68px;color:var(--semi-color-primary)}.semi-datepicker-quick-control-top-content,.semi-datepicker-quick-control-bottom-content{display:grid;grid-gap:8px;grid-template-columns:repeat(3,minmax(70.924px,75.924px));align-content:flex-start;padding:8px 20px}.semi-datepicker-quick-control-top-content-item,.semi-datepicker-quick-control-bottom-content-item{max-width:75.924px}.semi-datepicker-quick-control-top-content-item-ellipsis,.semi-datepicker-quick-control-bottom-content-item-ellipsis{width:59.924px;color:var(--semi-color-primary)}.semi-datepicker-quick-control-top-range-content,.semi-datepicker-quick-control-bottom-range-content{box-sizing:border-box;display:grid;align-content:flex-start;grid-template-columns:repeat(5,minmax(96.2px,99.2px));grid-gap:8px;padding:8px 20px}.semi-datepicker-quick-control-top-range-content-item,.semi-datepicker-quick-control-bottom-range-content-item{max-width:99.2px}.semi-datepicker-quick-control-top-range-content-item-ellipsis,.semi-datepicker-quick-control-bottom-range-content-item-ellipsis{width:83.2px;color:var(--semi-color-primary)}.semi-datepicker-quick-control-top-month-content,.semi-datepicker-quick-control-bottom-month-content{box-sizing:border-box;display:grid;grid-template-columns:repeat(2,minmax(51px,58.5px));grid-gap:8px;align-content:flex-start;padding:8px 20px}.semi-datepicker-quick-control-top-month-content-item,.semi-datepicker-quick-control-bottom-month-content-item{max-width:58.5px}.semi-datepicker-quick-control-top-month-content-item-ellipsis,.semi-datepicker-quick-control-bottom-month-content-item-ellipsis{max-width:42.5px;color:var(--semi-color-primary)}.semi-datepicker-quick-control-month{max-width:284px}.semi-datepicker-quick-control-month[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-month[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:258px}.semi-datepicker-quick-control-month .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-month .semi-datepicker-quick-control-left-content-wrapper{max-height:214px}.semi-datepicker-quick-control-date{max-width:284px}.semi-datepicker-quick-control-date[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-date[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:309px}.semi-datepicker-quick-control-date .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-date .semi-datepicker-quick-control-left-content-wrapper{max-height:273px}.semi-datepicker-quick-control-dateTime{max-width:284px}.semi-datepicker-quick-control-dateTime[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-dateTime[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:309px}.semi-datepicker-quick-control-dateTime .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-dateTime .semi-datepicker-quick-control-left-content-wrapper{max-height:326px}.semi-datepicker-quick-control-dateRange{max-width:568px}.semi-datepicker-quick-control-dateRange[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-dateRange[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:309px}.semi-datepicker-quick-control-dateRange .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-dateRange .semi-datepicker-quick-control-left-content-wrapper{max-height:273px}.semi-datepicker-quick-control-dateTimeRange{max-width:568px}.semi-datepicker-quick-control-dateTimeRange[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-dateTimeRange[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:309px}.semi-datepicker-quick-control-dateTimeRange .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-dateTimeRange .semi-datepicker-quick-control-left-content-wrapper{max-height:326px}.semi-datepicker-topSlot{border-bottom:1px solid var(--semi-color-border)}.semi-datepicker-leftSlot{border-right:1px solid var(--semi-color-border)}.semi-datepicker-rightSlot{border-left:1px solid var(--semi-color-border)}.semi-datepicker-bottomSlot{border-top:1px solid var(--semi-color-border)}.semi-datepicker .semi-popover-trigger{width:100%}.semi-datepicker .semi-popover-trigger .semi-input-wrapper{font-size:13px}.semi-datepicker .semi-popover-trigger .semi-input-suffix{color:var(--semi-color-primary)}.semi-datepicker .semi-datepicker-input-readonly{cursor:pointer}.semi-datepicker-inset-input-wrapper{display:flex;flex-wrap:nowrap;justify-content:space-between;box-sizing:border-box;column-gap:8px;padding:12px 16px 0;width:284px}.semi-datepicker-inset-input-wrapper[x-type=dateRange],.semi-datepicker-inset-input-wrapper[x-type=dateTimeRange]{width:568px}.semi-datepicker-inset-input-wrapper[x-type=month]{width:165px}.semi-datepicker-inset-input-wrapper[x-type=monthRange]{width:331px}.semi-datepicker-inset-input-wrapper .semi-input-wrapper{flex:1;flex-shrink:0}.semi-datepicker-inset-input-separator{flex-grow:0;flex-shrink:0;height:32px;line-height:32px;padding:0 4px;color:var(--semi-color-text-3)}.semi-datepicker-range-input{display:flex;align-items:center;box-sizing:border-box;border-radius:var(--semi-border-radius-small);height:32px;color:var(--semi-color-text-2);background-color:var(--semi-color-fill-0);border:0px solid transparent}.semi-datepicker-range-input:hover,.semi-datepicker-range-input:active{border-color:transparent}.semi-datepicker-range-input:focus-within{border-color:transparent}.semi-datepicker-range-input .semi-datepicker-monthRange-input{background-color:transparent}.semi-datepicker-range-input-wrapper{box-sizing:border-box;background-color:transparent;padding:0 8px;height:100%;width:100%;border:1px solid transparent;border-radius:var(--semi-border-radius-small);display:flex;align-items:center}.semi-datepicker-range-input-wrapper .semi-input-wrapper{background-color:transparent;height:fit-content;border:none}.semi-datepicker-range-input-wrapper .semi-input-wrapper:active:not(#neverExistElement){background-color:transparent}.semi-datepicker-range-input-wrapper .semi-input-wrapper:hover:not(#neverExistElement){background-color:transparent}.semi-datepicker-range-input-wrapper-focus{border-color:transparent;background-color:var(--semi-color-fill-1);border-radius:var(--semi-border-radius-small);transition:background-color .16s ease-in-out}.semi-datepicker-range-input-wrapper-focus~.semi-datepicker-range-input-clearbtn{display:flex}.semi-datepicker-range-input-wrapper-focus~.semi-datepicker-range-input-clearbtn~.semi-datepicker-range-input-suffix{display:none}.semi-datepicker-range-input-wrapper .semi-input{padding:2px 4px}.semi-datepicker-range-input-wrapper-icon{flex-shrink:0}.semi-datepicker-range-input-wrapper:hover{background-color:var(--semi-color-fill-1)}.semi-datepicker-range-input-wrapper-start{border-top-right-radius:0;border-bottom-right-radius:0}.semi-datepicker-range-input-wrapper-start-with-prefix,.semi-datepicker-range-input-wrapper-end{border-radius:0}.semi-datepicker-range-input-wrapper-active{border-color:var(--semi-color-focus-border);background-color:var(--semi-color-fill-1)}.semi-datepicker-range-input-separator{display:flex;align-items:center}.semi-datepicker-range-input-separator-active{color:var(--semi-color-text-0)}.semi-datepicker-range-input-small{height:24px}.semi-datepicker-range-input-large{height:40px}.semi-datepicker-range-input-large .semi-input-default{font-size:16px}.semi-datepicker-range-input:hover .semi-datepicker-range-input-clearbtn{display:flex;cursor:pointer}.semi-datepicker-range-input:hover .semi-datepicker-range-input-clearbtn~.semi-datepicker-range-input-suffix{display:none}.semi-datepicker-range-input:hover .semi-datepicker-range-input-clearbtn:hover{color:var(--semi-color-primary-hover)}.semi-datepicker-range-input-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text);background-color:var(--semi-color-disabled-fill)}.semi-datepicker-range-input-disabled .semi-datepicker-range-input-wrapper:hover{background-color:transparent}.semi-datepicker-range-input-disabled:hover{background-color:var(--semi-color-disabled-fill)}.semi-datepicker-range-input-disabled .semi-datepicker-range-input-prefix,.semi-datepicker-range-input-disabled .semi-datepicker-range-input-suffix,.semi-datepicker-range-input-disabled .semi-datepicker-range-input-clearbtn{color:var(--semi-color-disabled-text)}.semi-datepicker-range-input-warning{background-color:var(--semi-color-warning-light-default)}.semi-datepicker-range-input-warning .semi-datepicker-range-input-wrapper:hover{background-color:var(--semi-color-warning-light-hover)}.semi-datepicker-range-input-warning .semi-datepicker-range-input-wrapper-active{border-color:var(--semi-color-warning);background-color:var(--semi-color-warning-light-hover)}.semi-datepicker-range-input-error{background-color:var(--semi-color-danger-light-default)}.semi-datepicker-range-input-error .semi-datepicker-range-input-wrapper:hover{background-color:var(--semi-color-danger-light-hover)}.semi-datepicker-range-input-error .semi-datepicker-range-input-wrapper-active{border-color:var(--semi-color-danger);background-color:var(--semi-color-danger-light-hover)}.semi-datepicker-range-input .semi-datepicker-range-input-clearbtn{display:none}.semi-datepicker-range-input-prefix,.semi-datepicker-range-input-suffix,.semi-datepicker-range-input-clearbtn{display:flex;align-items:center;justify-content:center;font-weight:600;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;white-space:nowrap;color:var(--semi-color-text-2)}.semi-datepicker-range-input-prefix{padding-left:12px;padding-right:8px}.semi-datepicker-range-input-suffix{padding-left:8px;padding-right:12px}.semi-datepicker-range-input-suffix-hidden{display:none}.semi-datepicker-range-input-clearbtn{padding-left:8px;padding-right:12px}.semi-datepicker-compact{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:20px;display:inline-block;max-width:calc(100vw - 32px)}.semi-datepicker-compact:not(.semi-datepicker-compact-insetInput){width:max-content}.semi-datepicker-compact .semi-datepicker-container,.semi-datepicker-compact .semi-datepicker-month-grid{width:max-content}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-month-grid-left,.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-month-grid-right{min-width:216px;max-width:calc(100vw - 32px)}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-month{margin-left:auto;margin-right:auto}.semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateTime] .semi-datepicker-yam,.semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateTimeRange] .semi-datepicker-yam{height:calc(100% - 32px)}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-yam{position:relative;width:100%;max-width:100%;max-height:256px;overflow-x:auto;overflow-y:hidden}.semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateRange] .semi-datepicker-month-grid-left,.semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateTimeRange] .semi-datepicker-month-grid-left{border-right:1px solid var(--semi-color-border)}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-yam-showing{min-height:288px;min-width:216px}.semi-datepicker-compact .semi-datepicker-month-grid[x-type=date] .semi-datepicker-yam-showing{min-height:256px}.semi-datepicker-compact .semi-datepicker-month-grid[x-preset-position=left][x-insetinput=false] .semi-datepicker-month,.semi-datepicker-compact .semi-datepicker-month-grid[x-preset-position=right][x-insetinput=false] .semi-datepicker-month{height:220px}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-yearmonth-header{box-sizing:border-box;height:48px;padding:12px;width:100%;max-width:100%}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-yearmonth-header button,.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-yearmonth-header .semi-button{width:100%;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-yearmonth-body{display:flex}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-yearmonth-body .semi-scrolllist:nth-child(2){border:1px solid var(--semi-color-border)}.semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:20px}.semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-header{display:none}.semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-list-outer>ul>li{height:32px}.semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-item-wheel{border-right:0}.semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-item-wheel .semi-scrolllist-selector{height:32px}.semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-item-wheel .semi-scrolllist-shade-pre{margin-top:-17px}.semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-item-wheel .semi-scrolllist-shade-post{margin-top:17px}.semi-datepicker-compact .semi-datepicker-month-grid[x-panel-yearandmonth-open-type=left] .semi-datepicker-weeks,.semi-datepicker-compact .semi-datepicker-month-grid[x-panel-yearandmonth-open-type=right] .semi-datepicker-weeks{min-height:168px}.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-left[x-open-type=year],.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-right[x-open-type=year],.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-left[x-open-type=time],.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-right[x-open-type=time],.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-yam-showing{min-height:256px}.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-tpk{min-height:100%}.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true][x-type=dateTime] .semi-datepicker-yam,.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true][x-type=dateTimeRange] .semi-datepicker-yam{height:100%}.semi-datepicker-compact.semi-datepicker-panel-yam .semi-scrolllist{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:20px}.semi-datepicker-compact .semi-datepicker-tpk{height:calc(100% - 32px)}.semi-datepicker-compact .semi-datepicker-navigation{box-sizing:border-box;height:24px;padding:12px 12px 0;width:100%;max-width:100%}.semi-datepicker-compact .semi-datepicker-navigation-left,.semi-datepicker-compact .semi-datepicker-navigation-right{width:24px;height:24px}.semi-datepicker-compact .semi-datepicker-navigation .semi-button{min-width:24px;min-height:24px}.semi-datepicker-compact .semi-datepicker-navigation-month{min-width:0;overflow:hidden}.semi-datepicker-compact .semi-datepicker-navigation-month .semi-button{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:20px;max-width:100%}.semi-datepicker-compact .semi-datepicker-navigation-month .semi-button>span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-datepicker-compact .semi-datepicker-month{width:216px;padding:0}.semi-datepicker-compact .semi-datepicker-weeks{padding:6px 10px 10px}.semi-datepicker-compact .semi-datepicker-weekday{box-sizing:border-box;height:36px;padding-left:10px;padding-right:10px;padding-bottom:8px;border-bottom:1px solid var(--semi-color-border)}.semi-datepicker-compact .semi-datepicker-weekday-item{width:28px;height:28px;line-height:28px}.semi-datepicker-compact .semi-datepicker-day{width:28px;height:28px}.semi-datepicker-compact .semi-datepicker-day-main{width:24px;height:24px}.semi-datepicker-compact .semi-datepicker-day-inrange .semi-datepicker-day-main,.semi-datepicker-compact .semi-datepicker-day-inhover .semi-datepicker-day-main,.semi-datepicker-compact .semi-datepicker-day-inoffsetrange .semi-datepicker-day-main,.semi-datepicker-compact .semi-datepicker-day-hoverday .semi-datepicker-day-main,.semi-datepicker-compact .semi-datepicker-day-selectedrange-hover .semi-datepicker-day-main{width:28px}.semi-datepicker-compact .semi-datepicker-day-selected-start.semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-datepicker-compact .semi-datepicker-day-offsetrange-start.semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{border-radius:4px}.semi-datepicker-compact .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main{border-radius:4px 0 0 4px}.semi-datepicker-compact .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{border-radius:0 4px 4px 0}.semi-datepicker-compact .semi-datepicker-day-hoverday-beforerange .semi-datepicker-day-main{border-radius:4px 0 0 4px}.semi-datepicker-compact .semi-datepicker-day-hoverday-afterrange .semi-datepicker-day-main{border-radius:0 4px 4px 0}.semi-datepicker-compact .semi-datepicker-day-selected-start .semi-datepicker-day-main,.semi-datepicker-compact .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main{width:34px;margin-left:2px;margin-right:0;border-radius:4px 0 0 4px}.semi-datepicker-compact .semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-datepicker-compact .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{width:34px;margin-right:2px;margin-left:0;border-radius:0 4px 4px 0}.semi-datepicker-compact .semi-datepicker-switch{box-sizing:border-box;height:32px}.semi-datepicker-compact .semi-datepicker-switch-date,.semi-datepicker-compact .semi-datepicker-switch-time{padding-top:6px;padding-bottom:6px}.semi-datepicker-compact .semi-datepicker-switch-date{border-right:1px solid var(--semi-color-border)}.semi-datepicker-compact .semi-datepicker-switch-text{padding-left:0}.semi-datepicker-compact .semi-datepicker-quick-control-header{padding:16px 12px 0;font-weight:600}.semi-datepicker-compact .semi-datepicker-quick-control-left-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-right-content-wrapper{margin-top:12px}.semi-datepicker-compact .semi-datepicker-quick-control-left-content,.semi-datepicker-compact .semi-datepicker-quick-control-right-content{box-sizing:border-box;display:grid;align-content:flex-start;grid-gap:8px;grid-template-columns:repeat(2,minmax(76.5px,84px));padding:0 12px 12px}.semi-datepicker-compact .semi-datepicker-quick-control-left-content-item,.semi-datepicker-compact .semi-datepicker-quick-control-right-content-item{max-width:84px}.semi-datepicker-compact .semi-datepicker-quick-control-left-content-item-ellipsis,.semi-datepicker-compact .semi-datepicker-quick-control-right-content-item-ellipsis{width:68px;font-size:12px;color:var(--semi-color-primary)}.semi-datepicker-compact .semi-datepicker-quick-control-top-content,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-content{box-sizing:border-box;display:grid;grid-gap:8px;grid-template-columns:repeat(3,minmax(54.94px,59.94px));align-content:flex-start;padding:8px 10px}.semi-datepicker-compact .semi-datepicker-quick-control-top-content-item,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-content-item{max-width:59.94px}.semi-datepicker-compact .semi-datepicker-quick-control-top-content-item-ellipsis,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-content-item-ellipsis{width:43.94px;font-size:12px;color:var(--semi-color-primary)}.semi-datepicker-compact .semi-datepicker-quick-control-top-range-content,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-range-content{display:grid;grid-template-columns:repeat(5,minmax(73px,76px));grid-gap:8px;align-content:flex-start;padding:8px 10px}.semi-datepicker-compact .semi-datepicker-quick-control-top-range-content-item,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-range-content-item{max-width:76px}.semi-datepicker-compact .semi-datepicker-quick-control-top-range-content-item-ellipsis,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-range-content-item-ellipsis{width:60px;font-size:12px;color:var(--semi-color-primary)}.semi-datepicker-compact .semi-datepicker-quick-control-top-month-content,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-month-content{display:grid;grid-template-columns:repeat(2,minmax(61px,68.5px));grid-gap:8px;align-content:flex-start;padding:8px 10px}.semi-datepicker-compact .semi-datepicker-quick-control-top-month-content-item,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-month-content-item{max-width:68.5px}.semi-datepicker-compact .semi-datepicker-quick-control-top-month-content-item-ellipsis,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-month-content-item-ellipsis{max-width:52.5px;font-size:12px;color:var(--semi-color-primary)}.semi-datepicker-compact .semi-datepicker-quick-control-month{min-width:216px;width:max-content;max-width:calc(100vw - 32px)}.semi-datepicker-compact .semi-datepicker-quick-control-month[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-month[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:254px}.semi-datepicker-compact .semi-datepicker-quick-control-month .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-month .semi-datepicker-quick-control-left-content-wrapper{max-height:218px}.semi-datepicker-compact .semi-datepicker-quick-control-date{min-width:216px;width:max-content;max-width:calc(100vw - 32px)}.semi-datepicker-compact .semi-datepicker-quick-control-date[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-date[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:248px}.semi-datepicker-compact .semi-datepicker-quick-control-date .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-date .semi-datepicker-quick-control-left-content-wrapper{max-height:208px}.semi-datepicker-compact .semi-datepicker-quick-control-dateTime{min-width:216px;width:max-content;max-width:calc(100vw - 32px)}.semi-datepicker-compact .semi-datepicker-quick-control-dateTime[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-dateTime[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:248px}.semi-datepicker-compact .semi-datepicker-quick-control-dateTime .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-dateTime .semi-datepicker-quick-control-left-content-wrapper{max-height:240px}.semi-datepicker-compact .semi-datepicker-quick-control-dateRange{min-width:min(432px,calc(100vw - 32px));width:max-content;max-width:calc(100vw - 32px)}.semi-datepicker-compact .semi-datepicker-quick-control-dateRange[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-dateRange[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:248px}.semi-datepicker-compact .semi-datepicker-quick-control-dateRange .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-dateRange .semi-datepicker-quick-control-left-content-wrapper{max-height:208px}.semi-datepicker-compact .semi-datepicker-quick-control-dateTimeRange{min-width:min(432px,calc(100vw - 32px));width:max-content;max-width:calc(100vw - 32px)}.semi-datepicker-compact .semi-datepicker-quick-control-dateTimeRange[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-dateTimeRange[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:248px}.semi-datepicker-compact .semi-datepicker-quick-control-dateTimeRange .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-dateTimeRange .semi-datepicker-quick-control-left-content-wrapper{max-height:240px}.semi-datepicker-compact .semi-datepicker-footer{padding-top:10px;padding-right:8px;padding-bottom:10px}.semi-datepicker-compact .semi-datepicker-inset-input-wrapper{column-gap:4px;padding:8px 8px 0;width:216px}.semi-datepicker-compact .semi-datepicker-inset-input-wrapper[x-type=dateRange],.semi-datepicker-compact .semi-datepicker-inset-input-wrapper[x-type=dateTimeRange]{width:432px;padding-top:0}.semi-datepicker-compact .semi-datepicker-inset-input-wrapper[x-type=dateRange] .semi-input-wrapper,.semi-datepicker-compact .semi-datepicker-inset-input-wrapper[x-type=dateTimeRange] .semi-input-wrapper{margin-top:8px}.semi-datepicker-compact .semi-datepicker-inset-input-wrapper[x-type=month]{width:195px}.semi-datepicker-compact .semi-datepicker-inset-input-wrapper .semi-input-wrapper{height:28px;box-sizing:border-box}.semi-datepicker-compact .semi-datepicker-inset-input-wrapper .semi-input-wrapper .semi-input{font-size:12px;line-height:26px;height:26px;vertical-align:top}.semi-datepicker-compact .semi-datepicker-inset-input-separator{border-left:1px solid var(--semi-color-border);transform:translate(50%);height:auto}.semi-popover-wrapper[x-placement^=top] .semi-datepicker .semi-datepicker-weeks,.semi-popover-wrapper[x-placement=leftTop] .semi-datepicker .semi-datepicker-weeks,.semi-popover-wrapper[x-placement=rightTop] .semi-datepicker .semi-datepicker-weeks,.semi-popover-wrapper[x-placement*=BottomOver] .semi-datepicker .semi-datepicker-weeks{min-height:216px}.semi-popover-wrapper[x-placement^=top] .semi-datepicker-compact .semi-datepicker-weeks,.semi-popover-wrapper[x-placement=leftTop] .semi-datepicker-compact .semi-datepicker-weeks,.semi-popover-wrapper[x-placement=rightTop] .semi-datepicker-compact .semi-datepicker-weeks,.semi-popover-wrapper[x-placement*=BottomOver] .semi-datepicker-compact .semi-datepicker-weeks{min-height:168px}.semi-datepicker-borderless:not(:focus-within):not(:hover){background-color:transparent;border-color:transparent}.semi-datepicker-borderless:not(:focus-within):not(:hover) .semi-input-suffix,.semi-datepicker-borderless:not(:focus-within):not(:hover) .semi-datepicker-range-input-suffix{opacity:0}.semi-datepicker-borderless:focus-within:not(:active){background-color:transparent}.semi-datepicker-borderless.semi-datepicker-range-input-error .semi-datepicker-range-input-wrapper-active{border-color:transparent}.semi-datepicker-borderless.semi-datepicker-range-input-error:hover{background-color:var(--semi-color-danger-light-default)}.semi-datepicker-borderless.semi-datepicker-range-input-error:focus-within{background-color:var(--semi-color-danger-light-default)}.semi-datepicker-borderless.semi-datepicker-range-input-error:not(:focus-within){border-width:1px;border-color:var(--semi-color-danger)}.semi-datepicker-borderless.semi-datepicker-range-input-error:focus-within{border-width:1px;border-color:var(--semi-color-danger)}.semi-datepicker-borderless.semi-datepicker-range-input-warning .semi-datepicker-range-input-wrapper-active{border-color:transparent}.semi-datepicker-borderless.semi-datepicker-range-input-warning:hover{background-color:var(--semi-color-warning-light-default)}.semi-datepicker-borderless.semi-datepicker-range-input-warning:focus-within{background-color:var(--semi-color-warning-light-default)}.semi-datepicker-borderless.semi-datepicker-range-input-warning:not(:focus-within){border-width:1px;border-color:var(--semi-color-warning)}.semi-datepicker-borderless.semi-datepicker-range-input-warning:focus-within{border-width:1px;border-color:var(--semi-color-warning)}.semi-rtl .semi-datepicker,.semi-portal-rtl .semi-datepicker{direction:rtl}.semi-rtl .semi-datepicker-footer,.semi-portal-rtl .semi-datepicker-footer{padding-right:0;padding-left:8px;text-align:left}.semi-rtl .semi-datepicker-footer .semi-button:first-of-type,.semi-portal-rtl .semi-datepicker-footer .semi-button:first-of-type{margin-left:0;margin-right:0}.semi-rtl .semi-datepicker-footer .semi-button:nth-of-type(2),.semi-portal-rtl .semi-datepicker-footer .semi-button:nth-of-type(2){margin-right:12px;margin-left:0}.semi-rtl .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-rtl .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-rtl .semi-datepicker-day-selected-start .semi-datepicker-day-main,.semi-rtl .semi-datepicker-day-hoverday-before-selectedrange .semi-datepicker-day-main,.semi-rtl .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-selected-start .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-hoverday-before-selectedrange .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main{margin-right:2px;margin-left:auto;border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-rtl .semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-rtl .semi-datepicker-day-hoverday-after-selectedrange .semi-datepicker-day-main,.semi-rtl .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-hoverday-after-selectedrange .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{margin-left:2px;margin-right:auto;border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-rtl .semi-datepicker-switch-text,.semi-portal-rtl .semi-datepicker-switch-text{padding-left:0;padding-right:8px}.semi-rtl .semi-datepicker-navigation .semi-icon-chevron_left,.semi-rtl .semi-datepicker-navigation .semi-icon-chevron_right,.semi-rtl .semi-datepicker-navigation .semi-icon-double_chevron_left,.semi-rtl .semi-datepicker-navigation .semi-icon-double_chevron_right,.semi-rtl .semi-datepicker-yam .semi-icon-chevron_left,.semi-rtl .semi-datepicker-yam .semi-icon-chevron_right,.semi-rtl .semi-datepicker-yam .semi-icon-double_chevron_left,.semi-rtl .semi-datepicker-yam .semi-icon-double_chevron_right,.semi-portal-rtl .semi-datepicker-navigation .semi-icon-chevron_left,.semi-portal-rtl .semi-datepicker-navigation .semi-icon-chevron_right,.semi-portal-rtl .semi-datepicker-navigation .semi-icon-double_chevron_left,.semi-portal-rtl .semi-datepicker-navigation .semi-icon-double_chevron_right,.semi-portal-rtl .semi-datepicker-yam .semi-icon-chevron_left,.semi-portal-rtl .semi-datepicker-yam .semi-icon-chevron_right,.semi-portal-rtl .semi-datepicker-yam .semi-icon-double_chevron_left,.semi-portal-rtl .semi-datepicker-yam .semi-icon-double_chevron_right{transform:scaleX(-1)}.semi-rtl .semi-datepicker-range-input-prefix,.semi-portal-rtl .semi-datepicker-range-input-prefix{padding-left:8px;padding-right:12px}.semi-rtl .semi-datepicker-range-input-suffix,.semi-portal-rtl .semi-datepicker-range-input-suffix{padding-left:12px;padding-right:8px}.semi-rtl .semi-datepicker-range-input-suffix-hidden,.semi-portal-rtl .semi-datepicker-range-input-suffix-hidden{display:none}.semi-rtl .semi-datepicker-range-input-clearbtn,.semi-portal-rtl .semi-datepicker-range-input-clearbtn{padding-left:12px;padding-right:8px}.semi-rtl .semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateRange] .semi-datepicker-month-grid-left,.semi-rtl .semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateTimeRange] .semi-datepicker-month-grid-left,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateRange] .semi-datepicker-month-grid-left,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateTimeRange] .semi-datepicker-month-grid-left{border-left:1px solid var(--semi-color-border);border-right:0}.semi-rtl .semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-item-wheel,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-item-wheel{border-left:0;border-right:0}.semi-rtl .semi-datepicker-compact .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main{border-radius:0 4px 4px 0}.semi-rtl .semi-datepicker-compact .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{border-radius:4px 0 0 4px}.semi-rtl .semi-datepicker-compact .semi-datepicker-day-selected-start .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-day-selected-start .semi-datepicker-day-main{margin-left:0;margin-right:2px;border-radius:0 4px 4px 0}.semi-rtl .semi-datepicker-compact .semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-day-selected-end .semi-datepicker-day-main{margin-right:0;margin-left:2px;border-radius:4px 0 0 4px}.semi-rtl .semi-datepicker-compact .semi-datepicker-switch-date,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-switch-date{border-left:1px solid var(--semi-color-border);border-right:0}.semi-rtl .semi-datepicker-compact .semi-datepicker-switch-text,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-switch-text{padding-left:auto;padding-right:0}.semi-rtl .semi-datepicker-compact .semi-datepicker-footer,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-footer{padding-left:8px;padding-right:auto}.semi-rtl .semi-datepicker-compact .semi-datepicker-inset-input-separator,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-inset-input-separator{border-right:1px solid var(--semi-color-border);border-left:0;transform:translate(-50%)}.ga-token-page{padding:16px 24px;width:100%;height:100%;overflow-y:auto}.ga-token-content{display:flex;flex-direction:column;gap:16px;padding:12px 0}.ga-token-stats{display:flex;gap:12px}.ga-token-stat-card{flex:1;padding:16px 20px;border-radius:8px;background:var(--dt-card);border:1px solid var(--ui-stroke-tertiary)}.ga-token-stat-label{font-size:12px;color:var(--ui-text-tertiary);margin-bottom:4px}.ga-token-stat-value{font-size:24px;font-weight:600;font-family:var(--font-mono)}.ga-token-filter{display:flex;align-items:center;gap:8px}.ga-token-mono{font-family:var(--font-mono);font-size:13px}.ga-token-loading{display:flex;align-items:center;justify-content:center;padding:48px 0}.ga-token-disclaimer{padding:12px 0;font-size:12px;color:var(--ui-text-quaternary);text-align:center} diff --git a/frontends/desktop/dist/assets/WindowsTitlebar-CrkUa1UM.js b/frontends/desktop/dist/assets/WindowsTitlebar-CrkUa1UM.js new file mode 100644 index 000000000..422fa1354 --- /dev/null +++ b/frontends/desktop/dist/assets/WindowsTitlebar-CrkUa1UM.js @@ -0,0 +1 @@ +import{aj as t}from"./tauri-compat-tfiFK9EG.js";function d(){var n,e,o;const i=(o=(e=(n=window.__TAURI__)==null?void 0:n.window)==null?void 0:e.getCurrentWindow)==null?void 0:o.call(e);return i?t.jsxs("div",{className:"ga-win-controls","data-no-drag":!0,children:[t.jsx("button",{type:"button",className:"ga-win-btn",onClick:()=>i.minimize(),"aria-label":"Minimize",children:t.jsx("svg",{width:"10",height:"1",viewBox:"0 0 10 1",children:t.jsx("rect",{fill:"currentColor",width:"10",height:"1"})})}),t.jsx("button",{type:"button",className:"ga-win-btn",onClick:()=>i.toggleMaximize(),"aria-label":"Maximize",children:t.jsx("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:t.jsx("rect",{x:"0.5",y:"0.5",width:"9",height:"9",stroke:"currentColor",strokeWidth:"1"})})}),t.jsx("button",{type:"button",className:"ga-win-btn ga-win-btn--close",onClick:()=>i.close(),"aria-label":"Close",children:t.jsx("svg",{width:"10",height:"10",viewBox:"0 0 10 10",children:t.jsx("path",{d:"M1 1l8 8M9 1l-8 8",stroke:"currentColor",strokeWidth:"1.2"})})})]}):null}function c(){const i=n=>{var o,r,s,a,l;n.button!==0||n.target.closest("button, a, input, [data-no-drag]")||(n.preventDefault(),(l=(a=(s=(r=(o=window.__TAURI__)==null?void 0:o.window)==null?void 0:r.getCurrentWindow)==null?void 0:s.call(r))==null?void 0:a.startDragging)==null||l.call(a))};return t.jsx("div",{className:"ga-win-titlebar","data-testid":"windows-titlebar",onMouseDown:i,children:t.jsx(d,{})})}export{c as W}; diff --git a/frontends/desktop/dist/assets/WindowsTitlebar-U0YG9JNA.css b/frontends/desktop/dist/assets/WindowsTitlebar-U0YG9JNA.css new file mode 100644 index 000000000..c2e359d94 --- /dev/null +++ b/frontends/desktop/dist/assets/WindowsTitlebar-U0YG9JNA.css @@ -0,0 +1 @@ +:root[data-platform=windows]{--ga-titlebar-height: 32px}.ga-win-titlebar{height:32px;flex-shrink:0;width:100%;background:#0a0a0a;display:flex;justify-content:flex-end;align-items:stretch;-webkit-user-select:none;user-select:none}.ga-win-controls{display:flex;height:100%}.ga-win-btn{width:46px;height:100%;border:none;background:transparent;color:#d1d1d1;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .1s}.ga-win-btn:hover{background:#2e2e2e;color:#fff}.ga-win-btn--close:hover{background:#c42b1c;color:#fff} diff --git a/frontends/desktop/dist/assets/codicon-DjkITdqj.ttf b/frontends/desktop/dist/assets/codicon-DjkITdqj.ttf new file mode 100644 index 0000000000000000000000000000000000000000..938db2679bde8cf6d597c3e878db1fb6d848e401 GIT binary patch literal 125828 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 literal 0 HcmV?d00001 diff --git a/frontends/desktop/dist/assets/feishu-9hxxyz3-.svg b/frontends/desktop/dist/assets/feishu-9hxxyz3-.svg new file mode 100644 index 000000000..7afdb94f9 --- /dev/null +++ b/frontends/desktop/dist/assets/feishu-9hxxyz3-.svg @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/frontends/desktop/dist/assets/ga-logo.svg b/frontends/desktop/dist/assets/ga-logo.svg new file mode 100644 index 000000000..a4d456c14 --- /dev/null +++ b/frontends/desktop/dist/assets/ga-logo.svg @@ -0,0 +1,58 @@ + + GenericAgent + + + diff --git a/frontends/desktop/dist/assets/index-Bpi3BHKj.js b/frontends/desktop/dist/assets/index-Bpi3BHKj.js new file mode 100644 index 000000000..4d62016b2 --- /dev/null +++ b/frontends/desktop/dist/assets/index-Bpi3BHKj.js @@ -0,0 +1 @@ +import{c as I,b as a,B as R,V as F,l as j,R as i,q as $,P as n,aw as Z,h as N,s as D}from"./tauri-compat-tfiFK9EG.js";function U(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{prefix:o="",length:s=7}=t,e="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ",l=e.length;let g="";for(let m=0;mo&&(e=t.slice(0,o));return e.reverse()}return["rgba(233,69,255)","rgba(166,71,255)","rgba(107,97,255)","rgba(46,140,255)"]}var X=function(t,o){var s={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&o.indexOf(e)<0&&(s[e]=t[e]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,e=Object.getOwnPropertySymbols(t);lp&&d.stopPropagation()},O),s))}};E.defaultProps={disabled:!1,size:"default",type:"primary",theme:"light",block:!1,htmlType:"button",onMouseDown:$,onClick:$,onMouseEnter:$,onMouseLeave:$,colorful:!1,prefixCls:B.PREFIX};E.propTypes={children:n.node,disabled:n.bool,prefixCls:n.string,style:n.object,size:n.oneOf(J),type:n.oneOf(te),block:n.bool,onClick:n.func,onMouseDown:n.func,circle:n.bool,loading:n.bool,htmlType:n.oneOf(ee),theme:n.oneOf(w.themes),className:n.string,onMouseEnter:n.func,onMouseLeave:n.func,"aria-label":n.string,contentClassName:n.string};var ne=function(t,o){var s={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&o.indexOf(e)<0&&(s[e]=t[e]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,e=Object.getOwnPropertySymbols(t);l0&&arguments[0]!==void 0?arguments[0]:{};super(o)}render(){const o=Object.assign({},this.props),s=!!o.icon,e=!!o.loading,l=!!o.disabled;return s||e&&!l?i.createElement(x,Object.assign({},o)):i.createElement(E,Object.assign({},o))}}v.__SemiComponentName__="Button";v.propTypes=Object.assign(Object.assign({},E.propTypes),x.propTypes);v.defaultProps=D(v.__SemiComponentName__);v.elementType="Button";export{v as B,re as I,x as a,ie as b,se as c}; diff --git a/frontends/desktop/dist/assets/index-ClU1uQYs.css b/frontends/desktop/dist/assets/index-ClU1uQYs.css new file mode 100644 index 000000000..10c714bf1 --- /dev/null +++ b/frontends/desktop/dist/assets/index-ClU1uQYs.css @@ -0,0 +1 @@ +.semi-banner{padding:12px}.semi-banner-content-wrapper{display:flex;flex-direction:row}.semi-banner-description{margin:0}.semi-banner .semi-banner-content-wrapper .semi-banner-content{display:flex;flex:1}.semi-banner-in-container{border-radius:var(--semi-border-radius-small)}.semi-banner-in-container .semi-banner-content-wrapper .semi-banner-content-body{flex:1}.semi-banner-in-container .semi-banner-content-wrapper .semi-banner-content-body .semi-banner-title+.semi-banner-description{margin-top:2px}.semi-banner-full .semi-banner-content-wrapper .semi-banner-content{justify-content:center}.semi-banner-full .semi-banner-content-wrapper .semi-banner-icon,.semi-banner-full .semi-banner-content-wrapper .semi-banner-content-body{display:flex;align-items:center}.semi-banner-close{margin-left:12px;height:24px;width:24px}.semi-banner-extra{margin-top:8px}.semi-banner-icon{display:flex;margin-right:12px}.semi-banner-info{background-color:var(--semi-color-info-light-default);color:var(--semi-color-info)}.semi-banner-info.semi-banner-bordered{border:1px solid var(--semi-color-info)}.semi-banner-warning{background-color:var(--semi-color-warning-light-default);color:var(--semi-color-warning)}.semi-banner-warning.semi-banner-bordered{border:1px solid var(--semi-color-warning)}.semi-banner-success{background-color:var(--semi-color-success-light-default);color:var(--semi-color-success)}.semi-banner-success.semi-banner-bordered{border:1px solid var(--semi-color-success)}.semi-banner-danger{background-color:var(--semi-color-danger-light-default);color:var(--semi-color-danger)}.semi-banner-danger.semi-banner-bordered{border:1px solid var(--semi-color-danger)}.semi-rtl .semi-banner,.semi-portal-rtl .semi-banner{direction:rtl}.semi-rtl .semi-banner-close,.semi-portal-rtl .semi-banner-close{margin-left:0;margin-right:12px;height:24px;width:24px}.semi-rtl .semi-banner-icon,.semi-portal-rtl .semi-banner-icon{margin-right:0;margin-left:12px} diff --git a/frontends/desktop/dist/assets/index-D0pGtk0y.css b/frontends/desktop/dist/assets/index-D0pGtk0y.css new file mode 100644 index 000000000..66b05e045 --- /dev/null +++ b/frontends/desktop/dist/assets/index-D0pGtk0y.css @@ -0,0 +1 @@ +.semi-button-split{display:inline-block}.semi-button-split .semi-button{border-radius:0;margin-right:1px}.semi-button-split .semi-button-first{border-top-left-radius:var(--semi-border-radius-small);border-bottom-left-radius:var(--semi-border-radius-small)}.semi-button-split .semi-button-last{border-top-right-radius:var(--semi-border-radius-small);border-bottom-right-radius:var(--semi-border-radius-small);margin-right:unset}.semi-button-split:hover .semi-button-borderless:active{background-color:var(--semi-color-fill-1)}.semi-button{--semi-button-colorful-multiple-fill-0: rgba(var(--semi-ai-general-5-3));--semi-button-colorful-multiple-fill-1: rgba(var(--semi-ai-general-5-2));--semi-button-colorful-multiple-fill-2: rgba(var(--semi-ai-general-5-1));--semi-button-colorful-multiple-fill-3: rgba(var(--semi-ai-general-5-0));--semi-button-colorful-disabled-fill: var(--semi-color-disabled-text);--semi-button-colorful-fill-primary: var(--semi-color-ai-purple);--semi-button-colorful-fill-secondary: var(--semi-color-text-0)}.semi-button{box-shadow:none;height:32px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;-webkit-user-select:none;user-select:none;border:0 transparent solid;border-radius:var(--semi-border-radius-small);padding:6px 12px;font-size:14px;line-height:20px;font-weight:600;outline:none;vertical-align:middle;white-space:nowrap}.semi-button.semi-button-primary:focus-visible,.semi-button.semi-button-secondary:focus-visible,.semi-button.semi-button-tertiary:focus-visible,.semi-button.semi-button-warning:focus-visible,.semi-button.semi-button-danger:focus-visible{outline:2px solid var(--semi-color-primary-light-active)}.semi-button-content{display:flex;align-items:center}.semi-button-danger{background-color:var(--semi-color-danger);color:rgba(var(--semi-white),1);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-button-danger-disabled{background-color:var(--semi-color-disabled-bg)}.semi-button-danger-disabled.semi-button-outline{background-color:transparent;border:1px solid var(--semi-color-border)}.semi-button-danger-disabled.semi-button-light{background-color:var(--semi-color-fill-0)}.semi-button-danger:hover{background-color:var(--semi-color-danger-hover)}.semi-button-danger:active{background-color:var(--semi-color-danger-active)}.semi-button-danger.semi-button-outline{background-color:transparent;border:1px solid var(--semi-color-danger)}.semi-button-danger.semi-button-light,.semi-button-danger.semi-button-outline,.semi-button-danger.semi-button-borderless{color:var(--semi-color-danger)}.semi-button-danger:not(.semi-button-borderless):not(.semi-button-light):focus-visible{outline:2px solid var(--semi-color-danger-light-active)}.semi-button-warning{background-color:var(--semi-color-warning);color:rgba(var(--semi-white),1);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-button-warning-disabled{background-color:var(--semi-color-disabled-bg)}.semi-button-warning-disabled.semi-button-outline{background-color:transparent;border:1px solid var(--semi-color-border)}.semi-button-warning-disabled.semi-button-light{background-color:var(--semi-color-fill-0)}.semi-button-warning:hover{background-color:var(--semi-color-warning-hover)}.semi-button-warning:active{background-color:var(--semi-color-warning-active)}.semi-button-warning.semi-button-outline{background-color:transparent;border:1px solid var(--semi-color-warning)}.semi-button-warning.semi-button-light,.semi-button-warning.semi-button-outline,.semi-button-warning.semi-button-borderless{color:var(--semi-color-warning)}.semi-button-warning:not(.semi-button-borderless):not(.semi-button-light):focus-visible{outline:2px solid var(--semi-color-warning-light-active)}.semi-button-tertiary{background-color:var(--semi-color-tertiary);color:rgba(var(--semi-white),1);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-button-tertiary.semi-button-colorful.semi-button-solid{background:var(--semi-ai-general-0)}.semi-button-tertiary.semi-button-colorful.semi-button-solid:hover{background:var(--semi-ai-general-1)}.semi-button-tertiary.semi-button-colorful.semi-button-solid:active{background:var(--semi-ai-general-2)}.semi-button-tertiary.semi-button-colorful.semi-button-solid .semi-button-content-right,.semi-button-tertiary.semi-button-colorful.semi-button-solid .semi-button-content:not(:has(>.semi-button-content-right)){background:var(--semi-color-ai-general);-webkit-background-clip:text;background-clip:text;color:transparent}.semi-button-tertiary-disabled{background-color:var(--semi-color-disabled-bg)}.semi-button-tertiary-disabled.semi-button-outline{background-color:transparent;border:1px solid var(--semi-color-border)}.semi-button-tertiary-disabled.semi-button-light{background-color:var(--semi-color-fill-0)}.semi-button-tertiary:hover{background-color:var(--semi-color-tertiary-hover)}.semi-button-tertiary:active{background-color:var(--semi-color-tertiary-active)}.semi-button-tertiary.semi-button-outline{background-color:transparent;border:1px solid var(--semi-color-border)}.semi-button-tertiary.semi-button-light,.semi-button-tertiary.semi-button-outline,.semi-button-tertiary.semi-button-borderless{color:var(--semi-color-text-1)}.semi-button-primary{background-color:var(--semi-color-primary);color:rgba(var(--semi-white),1);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-button-primary.semi-button-colorful.semi-button-solid{background:var(--semi-color-ai-general)}.semi-button-primary.semi-button-colorful.semi-button-solid:not(.semi-button-borderless):not(.semi-button-light):not(.semi-button-outline):hover{background:var(--semi-color-ai-general-hover)}.semi-button-primary.semi-button-colorful.semi-button-solid:not(.semi-button-borderless):not(.semi-button-light):not(.semi-button-outline):active{background:var(--semi-color-ai-general-active)}.semi-button-primary.semi-button-colorful.semi-button-light .semi-button-content-right,.semi-button-primary.semi-button-colorful.semi-button-light .semi-button-content:not(:has(>.semi-button-content-right)){background:var(--semi-color-ai-general);-webkit-background-clip:text;background-clip:text;color:transparent}.semi-button-primary.semi-button-colorful.semi-button-outline{color:var(--semi-color-ai-purple);border-color:var(--semi-color-ai-purple)}.semi-button-primary.semi-button-colorful.semi-button-borderless .semi-button-content-right,.semi-button-primary.semi-button-colorful.semi-button-borderless .semi-button-content:not(:has(>.semi-button-content-right)){background:var(--semi-color-ai-general);-webkit-background-clip:text;background-clip:text;color:transparent}.semi-button-primary-disabled{background-color:var(--semi-color-disabled-bg)}.semi-button-primary-disabled.semi-button-light{background:var(--semi-color-fill-0)}.semi-button-primary-disabled.semi-button-outline{background-color:transparent;border:1px solid var(--semi-color-border)}.semi-button-primary:not(.semi-button-borderless):not(.semi-button-light):not(.semi-button-outline):hover{background-color:var(--semi-color-primary-hover)}.semi-button-primary.semi-button-outline{background-color:transparent;border:1px solid var(--semi-color-border)}.semi-button-primary:not(.semi-button-borderless):not(.semi-button-light):not(.semi-button-outline):active{background-color:var(--semi-color-primary-active)}.semi-button-primary.semi-button-light,.semi-button-primary.semi-button-outline,.semi-button-primary.semi-button-borderless{color:var(--semi-color-primary)}.semi-button-secondary{background-color:var(--semi-color-secondary);outline-color:var(--semi-color-secondary);color:rgba(var(--semi-white),1);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-button-secondary-disabled{background-color:var(--semi-color-disabled-bg)}.semi-button-secondary-disabled.semi-button-outline{background-color:transparent;border:1px solid var(--semi-color-border)}.semi-button-secondary-disabled.semi-button-light{background-color:var(--semi-color-fill-0)}.semi-button-secondary.semi-button-outline{background-color:transparent;border:1px solid var(--semi-color-border)}.semi-button-secondary:hover{background-color:var(--semi-color-secondary-hover)}.semi-button-secondary:active{background-color:var(--semi-color-secondary-active)}.semi-button-secondary.semi-button-light,.semi-button-secondary.semi-button-outline,.semi-button-secondary.semi-button-borderless{color:var(--semi-color-secondary)}.semi-button-disabled{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-button-disabled:not(.semi-button-borderless):not(.semi-button-light):not(.semi-button-outline):hover{color:var(--semi-color-disabled-text)}.semi-button-disabled.semi-button-light,.semi-button-disabled.semi-button-borderless,.semi-button-disabled.semi-button-outline{color:var(--semi-color-disabled-text)}.semi-button-borderless{background-color:transparent;border:0 transparent solid;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-button-borderless:not(.semi-button-disabled):hover{background-color:var(--semi-color-fill-0);border:0 transparent solid}.semi-button-borderless:not(.semi-button-disabled):active{background-color:var(--semi-color-fill-1);border:0 transparent solid}.semi-button-outline{background-color:transparent}.semi-button-outline:not(.semi-button-disabled):hover{background-color:var(--semi-color-fill-0)}.semi-button-outline:not(.semi-button-disabled):active{background-color:var(--semi-color-fill-1)}.semi-button-light{background-color:var(--semi-color-fill-0);border:0 transparent solid;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-button-light:not(.semi-button-disabled):hover{background-color:var(--semi-color-fill-1);border:0 transparent solid}.semi-button-light:not(.semi-button-disabled):active{background-color:var(--semi-color-fill-2);border:0 transparent solid}.semi-button-size-small{height:24px;padding:2px 12px;font-size:14px;line-height:20px;font-weight:600}.semi-button-size-large{height:40px;padding:10px 16px;font-size:14px;line-height:20px;font-weight:600}.semi-button-block{width:100%}.semi-button-group{display:flex;flex-wrap:wrap}.semi-button-group>.semi-button{margin:0;padding-left:0;padding-right:0;border-radius:0}.semi-button-group>.semi-button .semi-button-content{padding-left:12px;padding-right:12px}.semi-button-group>.semi-button-size-large .semi-button-content{padding-left:16px;padding-right:16px}.semi-button-group>.semi-button-size-small .semi-button-content{padding-left:12px;padding-right:12px}.semi-button-group>.semi-button.semi-button-with-icon-only{padding-left:0;padding-right:0}.semi-button-group>.semi-button.semi-button-with-icon-only .semi-button-content{padding-left:8px;padding-right:8px}.semi-button-group>.semi-button.semi-button-with-icon-only.semi-button-size-small .semi-button-content{padding-left:4px;padding-right:4px}.semi-button-group>.semi-button.semi-button-with-icon-only.semi-button-size-large .semi-button-content{padding-left:12px;padding-right:12px}.semi-button-group>.semi-button:first-child{border-top-left-radius:var(--semi-border-radius-small);border-bottom-left-radius:var(--semi-border-radius-small)}.semi-button-group>.semi-button:last-child{border-top-right-radius:var(--semi-border-radius-small);border-bottom-right-radius:var(--semi-border-radius-small)}.semi-button-group>.semi-button-outline:not(:last-child){border-right-color:transparent;margin-right:-1px}.semi-button-group-line{display:inline-flex;align-items:center;background-color:var(--semi-color-border)}.semi-button-group-line-primary{background-color:var(--semi-color-primary)}.semi-button-group-line-secondary{background-color:var(--semi-color-secondary)}.semi-button-group-line-tertiary{background-color:var(--semi-color-tertiary)}.semi-button-group-line-warning{background-color:var(--semi-color-warning)}.semi-button-group-line-danger{background-color:var(--semi-color-danger)}.semi-button-group-line-disabled{background-color:var(--semi-color-disabled-bg)}.semi-button-group-line-light{background-color:var(--semi-color-fill-0)}.semi-button-group-line-borderless{background-color:transparent}.semi-button-group-line:before{display:block;content:"";width:1px;height:20px;background-color:var(--semi-color-border)}@keyframes semi-animation-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.semi-button.semi-button-with-icon{display:inline-flex;align-items:center}.semi-button.semi-button-with-icon .semi-button-content{display:flex;align-items:center;justify-content:center}.semi-button.semi-button-loading{pointer-events:none;cursor:not-allowed}.semi-button.semi-button-loading .semi-button-content>svg,.semi-button.semi-button-loading .semi-button-content-loading-icon{width:16px;height:16px;animation:.6s linear infinite semi-animation-rotate;animation-fill-mode:forwards}.semi-button.semi-button-with-icon-only{padding:8px;height:32px;width:32px;justify-content:center;align-items:center}.semi-button.semi-button-with-icon-only.semi-button-size-small{padding:4px;height:24px;width:24px}.semi-button.semi-button-with-icon-only.semi-button-size-large{padding:12px;height:40px;width:40px}.semi-button-content-left{margin-right:8px;display:flex;align-items:center}.semi-button-content-right{margin-left:8px;display:flex;align-items:center}.semi-rtl .semi-button,.semi-portal-rtl .semi-button{direction:rtl;padding-left:12px;padding-right:12px}.semi-rtl .semi-button-size-small,.semi-portal-rtl .semi-button-size-small{padding-left:12px;padding-right:12px}.semi-rtl .semi-button-size-large,.semi-portal-rtl .semi-button-size-large{padding-left:16px;padding-right:16px}.semi-rtl .semi-button-group,.semi-portal-rtl .semi-button-group{direction:rtl}.semi-rtl .semi-button-group>.semi-button,.semi-portal-rtl .semi-button-group>.semi-button{padding-left:0;padding-right:0}.semi-rtl .semi-button-group>.semi-button .semi-button-content,.semi-portal-rtl .semi-button-group>.semi-button .semi-button-content{padding-left:12px;padding-right:12px}.semi-rtl .semi-button-group>.semi-button-size-large .semi-button-content,.semi-portal-rtl .semi-button-group>.semi-button-size-large .semi-button-content{padding-left:16px;padding-right:16px}.semi-rtl .semi-button-group>.semi-button-size-small .semi-button-content,.semi-portal-rtl .semi-button-group>.semi-button-size-small .semi-button-content{padding-left:12px;padding-right:12px}.semi-rtl .semi-button-group>.semi-button.semi-button-with-icon-only,.semi-portal-rtl .semi-button-group>.semi-button.semi-button-with-icon-only{padding-left:0;padding-right:0}.semi-rtl .semi-button-group>.semi-button.semi-button-with-icon-only .semi-button-content,.semi-portal-rtl .semi-button-group>.semi-button.semi-button-with-icon-only .semi-button-content{padding-left:8px;padding-right:8px}.semi-rtl .semi-button-group>.semi-button.semi-button-with-icon-only.semi-button-size-small .semi-button-content,.semi-portal-rtl .semi-button-group>.semi-button.semi-button-with-icon-only.semi-button-size-small .semi-button-content{padding-left:4px;padding-right:4px}.semi-rtl .semi-button-group>.semi-button.semi-button-with-icon-only.semi-button-size-large .semi-button-content,.semi-portal-rtl .semi-button-group>.semi-button.semi-button-with-icon-only.semi-button-size-large .semi-button-content{padding-left:12px;padding-right:12px}.semi-rtl .semi-button-group>.semi-button:first-child,.semi-portal-rtl .semi-button-group>.semi-button:first-child{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--semi-border-radius-small);border-bottom-right-radius:var(--semi-border-radius-small)}.semi-rtl .semi-button-group>.semi-button:not(:last-child) .semi-button-content,.semi-portal-rtl .semi-button-group>.semi-button:not(:last-child) .semi-button-content{border-left:1px var(--semi-color-border) solid;border-right:0}.semi-rtl .semi-button-group>.semi-button:last-child,.semi-portal-rtl .semi-button-group>.semi-button:last-child{border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--semi-border-radius-small);border-bottom-left-radius:var(--semi-border-radius-small)}.semi-rtl .semi-button.semi-button-with-icon-only,.semi-portal-rtl .semi-button.semi-button-with-icon-only{padding-left:8px;padding-right:8px}.semi-rtl .semi-button.semi-button-with-icon-only.semi-button-size-small,.semi-portal-rtl .semi-button.semi-button-with-icon-only.semi-button-size-small{padding-left:4px;padding-right:4px}.semi-rtl .semi-button.semi-button-with-icon-only.semi-button-size-large,.semi-portal-rtl .semi-button.semi-button-with-icon-only.semi-button-size-large{padding-left:12px;padding-right:12px}.semi-rtl .semi-button-content-left,.semi-portal-rtl .semi-button-content-left{margin-left:8px;margin-right:0}.semi-rtl .semi-button-content-right,.semi-portal-rtl .semi-button-content-right{margin-right:8px;margin-left:0} diff --git a/frontends/desktop/dist/assets/index-D_sWIqse.js b/frontends/desktop/dist/assets/index-D_sWIqse.js new file mode 100644 index 000000000..4fd007a52 --- /dev/null +++ b/frontends/desktop/dist/assets/index-D_sWIqse.js @@ -0,0 +1 @@ +import{B as f,f as y,k as h,R as l,aw as S,l as _,P as a,s as b}from"./tauri-compat-tfiFK9EG.js";const O=`${f}-spin`,E={PREFIX:O},P={SIZE:["small","middle","large"]};class d extends y{static get spinDefaultAdapter(){return{getProp:()=>{},setLoading:e=>{}}}constructor(e){super(Object.assign(Object.assign({},d.spinDefaultAdapter),e))}updateLoadingIfNeedDelay(){const{spinning:e,delay:n}=this._adapter.getProps(),{delay:t}=this._adapter.getStates();if(t){const s=this;this._timer=setTimeout(()=>{s._adapter.setState({loading:e,delay:0})},n)}}destroy(){this._timer&&(clearTimeout(this._timer),this._timer=null)}}var j=function(i,e){var n={};for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&e.indexOf(t)<0&&(n[t]=i[t]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,t=Object.getOwnPropertySymbols(i);s{this.setState({loading:e})}})}componentWillUnmount(){this.foundation.destroy()}renderSpin(){const{indicator:e,tip:n}=this.props,{loading:t}=this.state;return t?l.createElement("div",{className:`${r}-wrapper`},e?l.createElement("div",{className:`${r}-animate`,"x-semi-prop":"indicator"},e):l.createElement(S,null),n?l.createElement("div",{"x-semi-prop":"tip"},n):null):null}render(){this.foundation.updateLoadingIfNeedDelay();const e=this.props,{children:n,style:t,wrapperClassName:s,childStyle:c,size:p}=e,m=j(e,["children","style","wrapperClassName","childStyle","size"]),{loading:u}=this.state,g=_(r,s,{[`${r}-${p}`]:p,[`${r}-block`]:n,[`${r}-hidden`]:!u});return l.createElement("div",Object.assign({className:g,style:t},this.getDataAttr(m)),this.renderSpin(),l.createElement("div",{className:`${r}-children`,style:c,"x-semi-prop":"children"},n))}}o.propTypes={size:a.oneOf(P.SIZE),spinning:a.bool,children:a.node,indicator:a.node,delay:a.number,tip:a.node,wrapperClassName:a.string,childStyle:a.object,style:a.object};o.__SemiComponentName__="Spin";o.defaultProps=b(o.__SemiComponentName__,{size:"middle",spinning:!0,children:null,indicator:null,delay:0});export{o as S}; diff --git a/frontends/desktop/dist/assets/index-DkG9Cu-r.css b/frontends/desktop/dist/assets/index-DkG9Cu-r.css new file mode 100644 index 000000000..3ad08f340 --- /dev/null +++ b/frontends/desktop/dist/assets/index-DkG9Cu-r.css @@ -0,0 +1 @@ +.semi-spin{position:relative;display:inline-block;width:20px;height:20px}@keyframes semi-animation-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.semi-spin-wrapper{text-align:center;position:absolute;width:100%;transform:translateY(-50%);top:50%;color:var(--semi-color-primary)}.semi-spin-wrapper>svg{display:inline;animation:.6s linear infinite semi-animation-rotate;animation-fill-mode:forwards;vertical-align:top;width:20px;height:20px}.semi-spin-animate{display:inline-flex;animation:1.6s linear infinite semi-animation-rotate;animation-fill-mode:forwards}.semi-spin-children{opacity:.5;-webkit-user-select:none;user-select:none}.semi-spin-block{display:block}.semi-spin-block:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:1}.semi-spin-block .semi-spin-wrapper{display:block}.semi-spin-block.semi-spin{height:auto;width:auto}.semi-spin-hidden:after{content:none}.semi-spin-hidden>.semi-spin-children{opacity:1;-webkit-user-select:auto;user-select:auto}.semi-spin-small{width:14px;height:14px}.semi-spin-small>.semi-spin-wrapper svg{width:14px;height:14px}.semi-spin-middle{width:20px;height:20px}.semi-spin-middle>.semi-spin-wrapper svg{width:20px;height:20px}.semi-spin-large{width:32px;height:32px}.semi-spin-large>.semi-spin-wrapper svg{width:32px;height:32px}.semi-spin-container{overflow:hidden}.semi-rtl .semi-spin,.semi-portal-rtl .semi-spin,.semi-rtl .semi-spin-container,.semi-portal-rtl .semi-spin-container{direction:rtl} diff --git a/frontends/desktop/dist/assets/index-DpGuh58E.js b/frontends/desktop/dist/assets/index-DpGuh58E.js new file mode 100644 index 000000000..3b72b9a9d --- /dev/null +++ b/frontends/desktop/dist/assets/index-DpGuh58E.js @@ -0,0 +1 @@ +import{B as g,f as y,k as E,w as C,R as t,l as m,T as u,U as $,S as v,P as o}from"./tauri-compat-tfiFK9EG.js";import{a as I,I as N,b as x,c as B}from"./index-Bpi3BHKj.js";const P={PREFIX:`${g}-banner`},w={TYPE:["info","success","danger","warning"]};class l extends y{constructor(e){super(Object.assign(Object.assign({},l.defaultAdapter),e))}removeBanner(e){this._adapter.notifyClose(e),this._adapter.setVisible()}}const n=P.PREFIX,T=w.TYPE;class h extends E{constructor(e){super(e),this.remove=s=>{s&&s.stopPropagation(),this.foundation.removeBanner(s)},this.state={visible:!0},C("target"in this.props,"[Semi Banner] 'target' has been deprecated, please write JSX directly instead.")}get adapter(){return Object.assign(Object.assign({},super.adapter),{setVisible:()=>{this.setState({visible:!1})},notifyClose:e=>{const{onClose:s}=this.props;s(e)}})}componentDidMount(){this.foundation=new l(this.adapter),this.foundation.init()}componentWillUnmount(){this.foundation.destroy()}renderCloser(){const{closeIcon:e}=this.props;return e===null?e:t.createElement(I,{className:`${n}-close`,onClick:this.remove,icon:e||t.createElement(N,{"x-semi-prop":"closeIcon","aria-hidden":!0}),theme:"borderless",size:"small",type:"tertiary","aria-label":"Close"})}renderIcon(){const{type:e,icon:s}=this.props;let a={warning:t.createElement(B,{size:"large","aria-label":"warning"}),success:t.createElement(v,{size:"large","aria-label":"success"}),info:t.createElement(x,{size:"large","aria-label":"info"}),danger:t.createElement($,{size:"large","aria-label":"danger"})}[e];const r=m({[`${n}-icon`]:!0});return typeof s<"u"&&(a=s),a?t.createElement("div",{className:r,"x-semi-prop":"icon"},a):null}render(){const{children:e,type:s,className:c,style:a,bordered:r,title:p,description:d,fullMode:i}=this.props,{visible:b}=this.state,f=m(n,c,{[`${n}-${s}`]:s,[`${n}-full`]:i,[`${n}-in-container`]:!i,[`${n}-bordered`]:!i&&r});return b?t.createElement("div",Object.assign({className:f,style:a,role:"alert"},this.getDataAttr(this.props)),t.createElement("div",{className:`${n}-content-wrapper`},t.createElement("div",{className:`${n}-content`},this.renderIcon(),t.createElement("div",{className:`${n}-content-body`},p?t.createElement(u.Title,{heading:5,className:`${n}-title`,component:"div","x-semi-prop":"title"},p):null,d?t.createElement(u.Paragraph,{className:`${n}-description`,component:"div","x-semi-prop":"description"},d):null)),this.renderCloser()),e?t.createElement("div",{className:`${n}-extra`,"x-semi-prop":"children"},e):null):null}}h.propTypes={fullMode:o.bool,type:o.oneOf(T),title:o.node,description:o.node,icon:o.node,closeIcon:o.node,children:o.node,style:o.object,className:o.string,onClose:o.func,bordered:o.bool};h.defaultProps={onClose:()=>{},type:"info",fullMode:!0};export{h as B}; diff --git a/frontends/desktop/dist/assets/index-DwVcZP0M.js b/frontends/desktop/dist/assets/index-DwVcZP0M.js new file mode 100644 index 000000000..faa636ff0 --- /dev/null +++ b/frontends/desktop/dist/assets/index-DwVcZP0M.js @@ -0,0 +1,4 @@ +import{g as te,C as _t,c as Oe,b as L,R as b,P as a,B as X,f as ge,i as Ce,l as M,au as qt,aR as va,ad as Ca,aS as Gt,aT as Qo,aU as Jo,K as ei,L as _a,D as Oa,aV as ti,aW as Ra,aX as Ea,aY as ni,v as xa,y as Ta,N as x,aZ as Ps,n as ft,w as $e,a_ as Yt,h as H,k as he,o as jt,aL as re,a$ as Ia,b0 as As,a as Pa,u as si,b1 as Aa,b2 as Da,b3 as ri,G as oi,b4 as Na,b5 as Ds,t as ii,b6 as Ns,b7 as ai,b8 as ka,b9 as li,M as La,_ as ue,az as Pt,s as ks,a0 as Ma,V as ye,J as je,p as Et,E as ja,ae as Xt,aQ as yt,X as Ee,aa as za,ba as Fa,bb as Ka,bc as $a,bd as Ba,m as hr,O as Ls,aH as ci,ag as Ms,be as Ha,bf as Wa,bg as le,bh as Ua,x as di,A as Va,bi as Zt,ax as Ne,bj as qa,bk as we,ab as ui,Y as hi,j as Ae,bl as Ga,bm as Ya,d as Xa,e as Za,aJ as Qa,bn as Ja,H as el,bo as St,bp as pr,bq as zt,br as tl}from"./tauri-compat-tfiFK9EG.js";import{_ as gt,r as nl,o as pi,p as sl,q as rl,v as ol,w as il,x as fi,y as al,T as mt,z as gi,F as fr,I as ll,A as cl,D as gr,G as Fe,R as dl,a as Re,j as ul}from"./main-Knf6L_en.js";import{S as mi}from"./index-D_sWIqse.js";import{B as Ft,I as hl}from"./index-Bpi3BHKj.js";const pl=["default","error","warning","success"];var fl=_t();const gl=te(fl);function mr(i){if(i===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return i}function _s(i,e){return _s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t},_s(i,e)}function ml(i){return L.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},i),L.createElement("path",{d:"m17.55 15.66-4.8 5.48a1 1 0 0 1-1.5 0l-4.8-5.48A1 1 0 0 1 7.2 14h9.6a1 1 0 0 1 .75 1.66Z",fill:"currentColor"}))}const bl=Oe(ml,"caretdown");function yl(i){return L.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},i),L.createElement("path",{d:"m6.45 8.34 4.8-5.48a1 1 0 0 1 1.5 0l4.8 5.48A1 1 0 0 1 16.8 10H7.2a1 1 0 0 1-.75-1.66Z",fill:"currentColor"}))}const Sl=Oe(yl,"caretup");function wl(i){return L.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},i),L.createElement("path",{d:"M5 12.5c0-.83.67-1.5 1.5-1.5h11a1.5 1.5 0 0 1 0 3h-11A1.5 1.5 0 0 1 5 12.5Z",fill:"currentColor"}))}const vl=Oe(wl,"checkbox_indeterminate");function Cl(i){return L.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},i),L.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M17.41 7.3c.66.51.78 1.45.28 2.11l-6.5 8.5a1.5 1.5 0 0 1-2.37.01l-3.5-4.5a1.5 1.5 0 1 1 2.36-1.84L10 14.54l5.32-6.95a1.5 1.5 0 0 1 2.1-.28Z",fill:"currentColor"}))}const _l=Oe(Cl,"checkbox_tick");function Ol(i){return L.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},i),L.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M16.28 4.24a1.5 1.5 0 0 1 0 2.12l-5.66 5.66 5.66 5.65a1.5 1.5 0 1 1-2.12 2.13l-6.72-6.72a1.5 1.5 0 0 1 0-2.12l6.72-6.72a1.5 1.5 0 0 1 2.12 0Z",fill:"currentColor"}))}const bi=Oe(Ol,"chevron_left");function Rl(i){return L.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},i),L.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.44 19.8a1.5 1.5 0 0 1 0-2.13l5.66-5.65-5.66-5.66a1.5 1.5 0 1 1 2.12-2.12l6.72 6.72a1.5 1.5 0 0 1 0 2.12L9.56 19.8a1.5 1.5 0 0 1-2.12 0Z",fill:"currentColor"}))}const js=Oe(Rl,"chevron_right");function El(i){return L.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},i),L.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.1 2.58A1 1 0 0 1 2 2h20a1 1 0 0 1 .76 1.65l-8.2 9.18V21a1 1 0 0 1-1.44.9l-3.07-2a1 1 0 0 1-.55-.9v-6.17L1.24 3.65a1 1 0 0 1-.15-1.07Z",fill:"currentColor"}))}const xl=Oe(El,"filter");function Tl(i){return L.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},i),L.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M10.5 2a8.5 8.5 0 1 0 4.86 15.48l4.08 4.08a1.5 1.5 0 1 0 2.12-2.12l-4.08-4.08A8.5 8.5 0 0 0 10.5 2ZM5 10.5a5.5 5.5 0 1 1 11 0 5.5 5.5 0 0 1-11 0Z",fill:"currentColor"}))}const Il=Oe(Tl,"search");function Pl(i){return L.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},i),L.createElement("path",{d:"m20.56 9.66-7.8 8.97a1 1 0 0 1-1.51 0L3.44 9.66A1 1 0 0 1 4.19 8h15.62a1 1 0 0 1 .75 1.66Z",fill:"currentColor"}))}const Al=Oe(Pl,"tree_triangle_down");function Dl(i){return L.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},i),L.createElement("path",{d:"m9.66 3.44 8.97 7.8a1 1 0 0 1 0 1.51l-8.97 7.81A1 1 0 0 1 8 19.81V4.19a1 1 0 0 1 1.66-.75Z",fill:"currentColor"}))}const Nl=Oe(Dl,"tree_triangle_right");var kl=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);si.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");class jl extends ge{constructor(e){super(Object.assign({},e)),this.findAll=t=>{let{autoEscape:n=!0,caseSensitive:s=!1,searchWords:r,sourceString:o}=t;Ce(r)&&(r=[r]);const l=this.findChunks({autoEscape:n,caseSensitive:s,searchWords:r,sourceString:o}),c=this.combineChunks({chunks:l});return this.fillInChunks({chunksToHighlight:c,totalLength:o?o.length:0})},this.findChunks=t=>{let{autoEscape:n,caseSensitive:s,searchWords:r,sourceString:o}=t;return r.map(l=>typeof l=="string"?{text:l}:l).filter(l=>l.text).reduce((l,c)=>{let d=c.text;n&&(d=Ml(d));const u=new RegExp(d,s?"g":"gi");let h;for(;h=u.exec(o);){const g=h.index,m=u.lastIndex;m>g&&l.push({highlight:!0,start:g,end:m,className:c.className,style:c.style}),h.index===u.lastIndex&&u.lastIndex++}return l},[])},this.combineChunks=t=>{let{chunks:n}=t;return n.sort((s,r)=>s.start-r.start).reduce((s,r)=>{if(s.length===0)return[r];{const o=s.pop();if(r.start<=o.end){const l=Math.max(o.end,r.end);s.push({highlight:!0,start:o.start,end:l,className:o.className||r.className,style:Object.assign(Object.assign({},o.style),r.style)})}else s.push(o,r);return s}},[])},this.fillInChunks=t=>{let{chunksToHighlight:n,totalLength:s}=t;const r=[],o=(l,c,d,u,h)=>{c-l>0&&r.push({start:l,end:c,highlight:d,className:u,style:h})};if(n.length===0)o(0,s,!1);else{let l=0;n.forEach(c=>{o(l,c.start,!1),o(c.start,c.end,!0,c.className,c.style),l=c.end}),o(l,s,!1)}return r}}}const zl=Ll.PREFIX;class zs extends L.PureComponent{constructor(){super(...arguments),this.getHighLightTextHTML=e=>{let{sourceString:t="",searchWords:n=[],option:s={autoEscape:!0,caseSensitive:!1}}=e;const r=new jl().findAll(Object.assign({sourceString:t,searchWords:n},s)),o=s.highlightTag||"mark",l=s.highlightClassName||"",c=s.highlightStyle||{};return r.map((d,u)=>{const{end:h,start:g,highlight:m,style:y,className:p}=d,f=t.substr(g,h-g);return m?b.createElement(o,{style:Object.assign(Object.assign({},c),y),className:`${l} ${p||""}`.trim(),key:f+u},f):f})}}render(){const{searchWords:e,sourceString:t,component:n,highlightClassName:s,highlightStyle:r,caseSensitive:o,autoEscape:l}=this.props,c=M({[`${zl}-tag`]:!0},s),d={highlightTag:n,highlightClassName:c,highlightStyle:r,caseSensitive:o,autoEscape:l};return this.getHighLightTextHTML({sourceString:t,searchWords:e,option:d})}}zs.propTypes={style:a.object,className:a.string,autoEscape:a.bool,caseSensitive:a.bool,sourceString:a.string,searchWords:a.arrayOf(a.string),highlightStyle:a.object,highlightClassName:a.string,component:a.string};zs.defaultProps={component:"mark",autoEscape:!0,caseSensitive:!1,sourceString:""};const Fl={PREFIX:`${X}-space`},ze={ALIGN_SET:["start","end","center","baseline"],SPACING_LOOSE:"loose",SPACING_MEDIUM:"medium",SPACING_TIGHT:"tight"},Kl="Symbol(react.fragment)",Os=i=>{let e=[];return b.Children.forEach(i,t=>{t!=null&&(Array.isArray(t)?e=e.concat(Os(t)):L.isValidElement(t)&&t.type&&t.type.toString()===Kl&&t.props?e=e.concat(Os(t.props.children)):e.push(t))}),e},be=Fl.PREFIX;class Qt extends L.PureComponent{render(){const{children:e=null,style:t,className:n,spacing:s,wrap:r,align:o,vertical:l}=this.props,c=r&&l?!1:r,d=Object.assign({},t);let u="",h="";Ce(s)?(u=s,h=s):gt(s)?(d.rowGap=s,d.columnGap=s):gl(s)&&(Ce(s[0])?u=s[0]:gt(s[0])&&(d.columnGap=`${s[0]}px`),Ce(s[1])?h=s[1]:gt(s[1])&&(d.rowGap=`${s[1]}px`));const g=M(be,n,{[`${be}-align-${o}`]:o,[`${be}-vertical`]:l,[`${be}-horizontal`]:!l,[`${be}-wrap`]:c,[`${be}-tight-horizontal`]:u===ze.SPACING_TIGHT,[`${be}-tight-vertical`]:h===ze.SPACING_TIGHT,[`${be}-medium-horizontal`]:u===ze.SPACING_MEDIUM,[`${be}-medium-vertical`]:h===ze.SPACING_MEDIUM,[`${be}-loose-horizontal`]:u===ze.SPACING_LOOSE,[`${be}-loose-vertical`]:h===ze.SPACING_LOOSE}),m=Os(e),y=qt(this.props);return b.createElement("div",Object.assign({},y,{className:g,style:d,"x-semi-prop":"children"}),m)}}Qt.propTypes={wrap:a.bool,align:a.oneOf(ze.ALIGN_SET),vertical:a.bool,spacing:a.oneOfType([a.string,a.number,a.array]),children:a.node,style:a.object,className:a.string};Qt.defaultProps={vertical:!1,wrap:!1,spacing:"tight",align:"center"};var $l=va();const Pe=te($l);var yn,br;function Bl(){if(br)return yn;br=1;var i=Ca(),e=1/0,t=17976931348623157e292;function n(s){if(!s)return s===0?s:0;if(s=i(s),s===e||s===-e){var r=s<0?-1:1;return r*t}return s===s?s:0}return yn=n,yn}var Sn,yr;function Jt(){if(yr)return Sn;yr=1;var i=Bl();function e(t){var n=i(t),s=n%1;return n===n?s?n-s:n:0}return Sn=e,Sn}var wn,Sr;function Hl(){if(Sr)return wn;Sr=1;var i=pi(),e=Gt(),t=Qo(),n=Jt(),s=nl(),r=Math.max;function o(l,c,d,u){l=e(l)?l:s(l),d=d&&!u?n(d):0;var h=l.length;return d<0&&(d=r(h+d,0)),t(l)?d<=h&&l.indexOf(c,d)>-1:!!h&&i(l,c,d)>-1}return wn=o,wn}var Wl=Hl();const Kt=te(Wl);var vn,wr;function Ul(){if(wr)return vn;wr=1;var i=sl(),e=Jo(),t=ei(),n=_a(),s=t(function(r,o){return n(r)?i(r,e(o,1,n,!0)):[]});return vn=s,vn}var Vl=Ul();const vr=te(Vl);var Cn,Cr;function ql(){if(Cr)return Cn;Cr=1;var i=Oa();function e(t,n,s){for(var r=-1,o=t.length;++rt}return _n=i,_n}var On,Or;function Yl(){if(Or)return On;Or=1;var i=ql(),e=Gl(),t=ti();function n(s){return s&&s.length?i(s,t,e):void 0}return On=n,On}Yl();var Rn,Rr;function Xl(){if(Rr)return Rn;Rr=1;var i=Ra(),e=Ea(),t=ni(),n=1/0,s=i&&1/t(new i([,-0]))[1]==n?function(r){return new i(r)}:e;return Rn=s,Rn}var En,Er;function Zl(){if(Er)return En;Er=1;var i=xa(),e=rl(),t=ol(),n=Ta(),s=Xl(),r=ni(),o=200;function l(c,d,u){var h=-1,g=e,m=c.length,y=!0,p=[],f=p;if(u)y=!1,g=t;else if(m>=o){var S=d?null:s(c);if(S)return r(S);y=!1,g=n,f=new i}else f=d?[]:p;e:for(;++h{const d=o?o[s]:i,u=o?tc(c.pos,l):"0";if(o){const h=x(o,n,null),g={data:Object.assign({},o),ind:l,pos:u,key:h!==null?h:u,parentPos:c.node?c.pos:null,level:Number(c.level)+1};e(g)}d&&d.forEach((h,g)=>{r(h,g,{node:o,pos:u,level:c?Number(c.level)+1:-1})})};r(null)}function rc(i,e){const t={},n={},s={},r={posEntities:t,keyEntities:n,valueEntities:s},o=x(e,"value","value");return sc(i,l=>{const{pos:c,key:d,parentPos:u}=l,h=Object.assign({},l),g=x(h,`data.${o}`,null);g!==null&&(s[g]=d),t[c]=h,n[d]=h,h.parent=t[u],h.parent&&(h.parent.children=h.parent.children||[],h.parent.children.push(h))},e),r}function Si(i,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;const n=[],s=r=>{if(!r)return;const{children:o}=r;nc(o)&&o.forEach(c=>{n.push(c.key),s(e[c.key])})};return i.forEach(r=>{t&&n.push(r),s(e[r])}),n}function oc(i,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[];const n=[];return i&&i.forEach(s=>{const r=e[s];r&&r.children&&r.children.forEach(o=>{(!t.length||!t.includes(o.key))&&n.push(o.key)})}),n}function wi(i,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;const n=[];return i.forEach(r=>{e[r]&&e[r].parent&&n.push(e[r].parent.key)}),oc(ec(n),e,t?[]:i)}function vi(i,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;const n=[],s=r=>{r.parent&&(n.push(r.parent.key),s(r.parent))};return i.forEach(r=>{e[r]&&s(e[r]),t&&n.push(r)}),n}function Tr(i,e,t,n){const s=Si([i],e,!0),r=e[i];t=new Set([...t,i]);const o=l=>{if(!l.parent)return;const{key:c}=l;if(wi([c],e).every(h=>t.has(h))){const h=l.parent;t.add(h.key),o(h)}else{const h=vi([c],e,!1);n=new Set([...n,...h])}};return o(r),{checkedKeys:new Set([...t,...s]),halfCheckedKeys:n}}function Ir(i,e,t,n){const s=Si([i],e,!0),r=e[i];s.forEach(l=>{t.has(l)&&t.delete(l),n.has(l)&&n.delete(l)});const o=l=>{const c=l.parent;if(!c||!t.has(c.key)&&!n.has(c.key))return;const{key:d}=l,h=wi([d],e).some(m=>t.has(m)||n.has(m)),g=vi([d],e,!1);h?g.forEach(m=>{t.has(m)&&(t.delete(m),n.add(m))}):(t.has(c.key)&&t.delete(c.key),n.has(c.key)&&n.delete(c.key),o(c))};return r&&o(r),{checkedKeys:t,halfCheckedKeys:n}}const At={PREFIX:`${X}-checkbox`,INPUT:`${X}-checkbox-input`,WRAPPER:""},ic={PREFIX:`${X}-checkboxGroup`},ve={DIRECTION_SET:["horizontal","vertical"],TYPE_DEFAULT:"default",TYPE_CARD:"card",TYPE_PURECARD:"pureCard",DEFAULT_DIRECTION:"vertical"};class ac extends ge{constructor(e){super(Object.assign({},e)),this.clickState=!1,this.handleFocusVisible=t=>{const{target:n}=t;try{if(this.clickState){this.clickState=!1;return}n.matches(":focus-visible")&&this._adapter.setFocusVisible(!0)}catch{$e(!0,"Warning: [Semi Checkbox] The current browser does not support the focus-visible")}},this.handleBlur=()=>{this.clickState=!1,this._adapter.setFocusVisible(!1)}}init(){const{children:e,extra:t,extraId:n,addonId:s}=this.getProps();e&&!s&&this._adapter.setAddonId(),t&&!n&&this._adapter.setExtraId()}notifyChange(e,t){const n=this._adapter.generateEvent(e,t);this._adapter.notifyChange(n)}handleChange(e){if(this.getProp("disabled"))return;if((e==null?void 0:e.type)==="click"&&(this.clickState=!0),this._adapter.focusCheckboxEntity(),this._adapter.getIsInGroup()){this._adapter.getGroupDisabled()||this.handleChangeInGroup(e);return}const r=!this.getState("checked");this._isControlledComponent("checked")?this.notifyChange(r,e):(this.setChecked(r),this.notifyChange(r,e))}handleChangeInGroup(e){const{value:t}=this.getProps(),r=!this._adapter.getGroupValue().includes(t),o=this._adapter.generateEvent(r,e);this._adapter.notifyChange(o),this._adapter.notifyGroupChange(o)}handleEnterPress(e){Yt(e)&&this.handleChange(e)}setChecked(e){this._adapter.setNativeControlChecked(e)}destroy(){}}const Fs=b.createContext({});class en extends L.PureComponent{blur(){this.inputEntity.blur()}focus(){const{preventScroll:e}=this.props;this.inputEntity.focus({preventScroll:e})}render(){const{indeterminate:e,checked:t,disabled:n,prefixCls:s,name:r,isPureCardType:o,addonId:l,extraId:c,focusInner:d,onInputFocus:u,onInputBlur:h}=this.props,g=s||At.PREFIX,m=M({[`${g}-inner`]:!0,[`${g}-inner-checked`]:!!t,[`${g}-inner-pureCardType`]:o},At.WRAPPER),y=M({[`${g}-inner-display`]:!0,[`${g}-focus`]:d,[`${g}-focus-border`]:d&&!t}),p=t?b.createElement(_l,null):e?b.createElement(vl,null):null,f={type:"checkbox","aria-label":this.props["aria-label"],"aria-disabled":n,"aria-checked":t,"aria-labelledby":l,"aria-describedby":c||this.props["aria-describedby"],"aria-invalid":this.props["aria-invalid"],"aria-errormessage":this.props["aria-errormessage"],"aria-required":this.props["aria-required"],className:At.INPUT,onChange:H,checked:t,disabled:n,onFocus:u,onBlur:h};return r&&(f.name=r),b.createElement("span",{className:m},b.createElement("input",Object.assign({},f,{ref:S=>{this.inputEntity=S}})),b.createElement("span",{className:y},p))}}en.contextType=Fs;en.propTypes={"aria-describedby":a.string,"aria-errormessage":a.string,"aria-invalid":a.bool,"aria-labelledby":a.string,"aria-required":a.bool,checked:a.bool,disabled:a.bool,onChange:a.func,children:a.node,grouped:a.bool,value:a.any,isPureCardType:a.bool,addonId:a.string,extraId:a.string,focusInner:a.bool,onInputFocus:a.func,onInputBlur:a.func,preventScroll:a.bool};en.defaultProps={onChange:H};class xe extends he{get adapter(){return Object.assign(Object.assign({},super.adapter),{setNativeControlChecked:e=>{this.setState({checked:e})},notifyChange:e=>{const{onChange:t}=this.props;t&&t(e)},generateEvent:(e,t)=>{const{props:n}=this;return{target:Object.assign(Object.assign({},n),{checked:e}),stopPropagation:()=>{t.stopPropagation()},preventDefault:()=>{t.preventDefault()},nativeEvent:{stopImmediatePropagation:()=>{t.nativeEvent&&typeof t.nativeEvent.stopImmediatePropagation=="function"&&t.nativeEvent.stopImmediatePropagation()}}}},getIsInGroup:()=>this.isInGroup(),getGroupValue:()=>this.context&&this.context.checkboxGroup.value||[],notifyGroupChange:e=>{this.context.checkboxGroup.onChange(e)},getGroupDisabled:()=>this.context&&this.context.checkboxGroup.disabled,setAddonId:()=>{this.setState({addonId:jt({prefix:"addon"})})},setExtraId:()=>{this.setState({extraId:jt({prefix:"extra"})})},setFocusVisible:e=>{this.setState({focusVisible:e})},focusCheckboxEntity:()=>{this.focus()}})}constructor(e){super(e),this.handleChange=n=>this.foundation.handleChange(n),this.handleEnterPress=n=>this.foundation.handleEnterPress(n),this.handleFocusVisible=n=>{this.foundation.handleFocusVisible(n)},this.handleBlur=n=>{this.foundation.handleBlur()};const t=!1;this.state={checked:e.checked||e.defaultChecked||t,addonId:e.addonId,extraId:e.extraId,focusVisible:!1},this.checkboxEntity=null,this.foundation=new ac(this.adapter)}componentDidUpdate(e){this.props.checked!==e.checked&&(ft(this.props.checked)?this.foundation.setChecked(!1):il(this.props.checked)&&this.foundation.setChecked(this.props.checked))}isInGroup(){return!!(this.context&&this.context.checkboxGroup&&"value"in this.props)}focus(){this.checkboxEntity&&this.checkboxEntity.focus()}blur(){this.checkboxEntity&&this.checkboxEntity.blur()}render(){const{disabled:e,style:t,prefixCls:n,className:s,indeterminate:r,children:o,onMouseEnter:l,onMouseLeave:c,extra:d,value:u,role:h,tabIndex:g,id:m,type:y}=this.props,{checked:p,addonId:f,extraId:S,focusVisible:v}=this.state,w={checked:p,disabled:e},_=this.isInGroup();if(_){if(this.context.checkboxGroup.value){const K=(this.context.checkboxGroup.value||[]).includes(u);w.checked=K}this.context.checkboxGroup.disabled&&(w.disabled=this.context.checkboxGroup.disabled||this.props.disabled);const{isCardType:A,isPureCardType:F}=this.context.checkboxGroup;w.isCardType=A,w.isPureCardType=F,w.name=this.context.checkboxGroup.name}else w.isPureCardType=y===ve.TYPE_PURECARD,w.isCardType=y===ve.TYPE_CARD||w.isPureCardType;const O=n||At.PREFIX,I=w.isCardType||w.isPureCardType,E=M(O,{[`${O}-disabled`]:w.disabled,[`${O}-indeterminate`]:r,[`${O}-checked`]:w.checked,[`${O}-unChecked`]:!w.checked,[`${O}-cardType`]:w.isCardType,[`${O}-cardType_disabled`]:w.disabled&&w.isCardType,[`${O}-cardType_enable`]:!(w.disabled&&w.isCardType),[`${O}-cardType_checked`]:w.isCardType&&w.checked&&!w.disabled,[`${O}-cardType_checked_disabled`]:w.isCardType&&w.checked&&w.disabled,[s]:!!s,[`${O}-focus`]:v&&I}),k=M(`${O}-extra`,{[`${O}-cardType_extra_noChildren`]:w.isCardType&&!o});_&&this.context.checkboxGroup.name;const N=this.props["x-semi-children-alias"]||"children",P=()=>!o&&!d?null:b.createElement("div",{className:`${O}-content`},o?b.createElement("span",{id:f,className:`${O}-addon`,"x-semi-prop":N},o):null,d?b.createElement("div",{id:S,className:k,"x-semi-prop":"extra"},d):null);return b.createElement("span",Object.assign({role:h,tabIndex:g,style:t,className:E,id:m,onMouseEnter:l,onMouseLeave:c,onClick:this.handleChange,onKeyPress:this.handleEnterPress,"aria-labelledby":this.props["aria-labelledby"]},this.getDataAttr(this.props)),b.createElement(en,Object.assign({},this.props,w,{addonId:o&&f,extraId:d&&S,isPureCardType:w.isPureCardType,ref:A=>{this.checkboxEntity=A},focusInner:v&&!I,onInputFocus:this.handleFocusVisible,onInputBlur:this.handleBlur})),P())}}xe.contextType=Fs;xe.propTypes={"aria-describedby":a.string,"aria-errormessage":a.string,"aria-invalid":a.bool,"aria-labelledby":a.string,"aria-required":a.bool,checked:a.bool,defaultChecked:a.bool,disabled:a.bool,indeterminate:a.bool,onChange:a.func,value:a.any,style:a.object,className:a.string,prefixCls:a.string,onMouseEnter:a.func,onMouseLeave:a.func,extra:a.node,index:a.number,"aria-label":a.string,tabIndex:a.number,preventScroll:a.bool,type:a.string};xe.defaultProps={defaultChecked:!1,indeterminate:!1,onChange:H,onMouseEnter:H,onMouseLeave:H,type:"default"};xe.elementType="Checkbox";class Ks extends ge{static get checkboxGroupDefaultAdapter(){return{}}constructor(e){super(Object.assign(Object.assign({},Ks.checkboxGroupDefaultAdapter),e))}init(){const{defaultValue:e,value:t}=this.getProps();typeof e<"u"&&!Array.isArray(e)&&$e(!0,"Warning: [Semi CheckboxGroup] defaultValue should be an Array"),typeof t<"u"&&!Array.isArray(t)&&$e(!0,"Warning: [Semi CheckboxGroup] value should be an Array")}notifyChange(e){this._adapter.notifyChange(e)}handleChange(e){const t=this.getState("value");let n=[];Array.isArray(t)||(n=[t]),e.target.checked?n=[...t,e.target.value]:n=t.filter((r,o)=>r!==e.target.value),"value"in this.getProps()?this.notifyChange(n):(this._adapter.updateGroupValue(n),this.notifyChange(n))}getFormatName(){return this.getProp("name")||"default"}handlePropValueChange(e){Array.isArray(e)?this._adapter.updateGroupValue(e):(typeof e>"u"&&this._adapter.updateGroupValue([]),$e(!0,"Warning: [Semi CheckboxGroup] value should be an Array"))}destroy(){}}class $s extends he{get adapter(){return Object.assign(Object.assign({},super.adapter),{updateGroupValue:e=>{this.setState({value:e})},notifyChange:e=>{this.props.onChange&&this.props.onChange(e)}})}constructor(e){super(e),this.state={value:e.value||e.defaultValue},this.foundation=new Ks(this.adapter),this.onChange=this.onChange.bind(this)}componentDidMount(){this.foundation.init()}componentDidUpdate(e){re(e.value,this.props.value)||this.foundation.handlePropValueChange(this.props.value)}componentWillUnmount(){this.foundation.destroy()}onChange(e){this.foundation.handleChange(e)}render(){const{children:e,options:t,prefixCls:n,direction:s,className:r,id:o,style:l,type:c,disabled:d}=this.props,u=c===ve.TYPE_PURECARD,h=c===ve.TYPE_CARD||u,g=n||ic.PREFIX,m=M({[g]:!0,[`${g}-wrapper`]:!0,[`${g}-${s}`]:s,[`${g}-${s}-cardType`]:s&&h,[`${g}-${s}-pureCardType`]:s&&u},r),y=this.state.value.slice();let p;return t?p=(t||[]).map((f,S)=>typeof f=="string"?b.createElement(xe,{role:"listitem",key:S,disabled:this.props.disabled,value:f,prefixCls:n},f):b.createElement(xe,{role:"listitem",key:S,disabled:f.disabled||this.props.disabled,value:f.value,prefixCls:n,extra:f.extra,className:f.className,style:f.style,onChange:f.onChange},f.label)):e&&(p=b.Children.toArray(e).map((f,S)=>b.cloneElement(f,{key:S,role:"listitem"}))),b.createElement("div",Object.assign({id:o,role:"list","aria-label":this.props["aria-label"],className:m,style:l,"aria-labelledby":this.props["aria-labelledby"],"aria-describedby":this.props["aria-describedby"]},this.getDataAttr(this.props)),b.createElement(Fs.Provider,{value:{checkboxGroup:{onChange:this.onChange,value:y,disabled:this.props.disabled,name:this.foundation.getFormatName(),isCardType:h,isPureCardType:u}}},p))}}$s.propTypes={"aria-describedby":a.string,"aria-errormessage":a.string,"aria-invalid":a.bool,"aria-labelledby":a.string,"aria-required":a.bool,defaultValue:a.array,disabled:a.bool,name:a.string,options:a.array,value:a.array,onChange:a.func,children:a.node,prefixCls:a.string,direction:a.oneOf(ve.DIRECTION_SET),className:a.string,type:a.oneOf([ve.TYPE_DEFAULT,ve.TYPE_CARD,ve.TYPE_PURECARD]),style:a.object};$s.defaultProps={disabled:!1,onChange:()=>{},type:ve.TYPE_DEFAULT,defaultValue:[],direction:ve.DEFAULT_DIRECTION};class lc extends xe{}lc.Group=$s;function Rs(){return Rs=Object.assign?Object.assign.bind():function(i){for(var e=1;e=e?i.call(null):s.id=requestAnimationFrame(n)}var s={id:requestAnimationFrame(n)};return s}var Tn=-1;function Nr(i){if(i===void 0&&(i=!1),Tn===-1||i){var e=document.createElement("div"),t=e.style;t.width="50px",t.height="50px",t.overflow="scroll",document.body.appendChild(e),Tn=e.offsetWidth-e.clientWidth,document.body.removeChild(e)}return Tn}var Ve=null;function kr(i){if(i===void 0&&(i=!1),Ve===null||i){var e=document.createElement("div"),t=e.style;t.width="50px",t.height="50px",t.overflow="scroll",t.direction="rtl";var n=document.createElement("div"),s=n.style;return s.width="100px",s.height="100px",e.appendChild(n),document.body.appendChild(e),e.scrollLeft>0?Ve="positive-descending":(e.scrollLeft=1,e.scrollLeft===0?Ve="negative":Ve="positive-ascending"),document.body.removeChild(e),Ve}return Ve}var fc=150,gc=function(e,t){return e};function Ci(i){var e,t=i.getItemOffset,n=i.getEstimatedTotalSize,s=i.getItemSize,r=i.getOffsetForIndexAndAlignment,o=i.getStartIndexForOffset,l=i.getStopIndexForStartIndex,c=i.initInstanceProps,d=i.shouldResetStyleCacheOnItemSizeChange,u=i.validateProps;return e=(function(h){cc(g,h);function g(y){var p;return p=h.call(this,y)||this,p._instanceProps=c(p.props,mr(p)),p._outerRef=void 0,p._resetIsScrollingTimeoutId=null,p.state={instance:mr(p),isScrolling:!1,scrollDirection:"forward",scrollOffset:typeof p.props.initialScrollOffset=="number"?p.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},p._callOnItemsRendered=void 0,p._callOnItemsRendered=Ke(function(f,S,v,w){return p.props.onItemsRendered({overscanStartIndex:f,overscanStopIndex:S,visibleStartIndex:v,visibleStopIndex:w})}),p._callOnScroll=void 0,p._callOnScroll=Ke(function(f,S,v){return p.props.onScroll({scrollDirection:f,scrollOffset:S,scrollUpdateWasRequested:v})}),p._getItemStyle=void 0,p._getItemStyle=function(f){var S=p.props,v=S.direction,w=S.itemSize,_=S.layout,O=p._getItemStyleCache(d&&w,d&&_,d&&v),I;if(O.hasOwnProperty(f))I=O[f];else{var E=t(p.props,f,p._instanceProps),k=s(p.props,f,p._instanceProps),N=v==="horizontal"||_==="horizontal",P=v==="rtl",A=N?E:0;O[f]=I={position:"absolute",left:P?void 0:A,right:P?A:void 0,top:N?0:E,height:N?"100%":k,width:N?k:"100%"}}return I},p._getItemStyleCache=void 0,p._getItemStyleCache=Ke(function(f,S,v){return{}}),p._onScrollHorizontal=function(f){var S=f.currentTarget,v=S.clientWidth,w=S.scrollLeft,_=S.scrollWidth;p.setState(function(O){if(O.scrollOffset===w)return null;var I=p.props.direction,E=w;if(I==="rtl")switch(kr()){case"negative":E=-w;break;case"positive-descending":E=_-v-w;break}return E=Math.max(0,Math.min(E,_-v)),{isScrolling:!0,scrollDirection:O.scrollOffsetI.clientWidth?Nr():0:O=I.scrollHeight>I.clientHeight?Nr():0}this.scrollTo(r(this.props,p,f,_,this._instanceProps,O))},m.componentDidMount=function(){var p=this.props,f=p.direction,S=p.initialScrollOffset,v=p.layout;if(typeof S=="number"&&this._outerRef!=null){var w=this._outerRef;f==="horizontal"||v==="horizontal"?w.scrollLeft=S:w.scrollTop=S}this._callPropsCallbacks()},m.componentDidUpdate=function(){var p=this.props,f=p.direction,S=p.layout,v=this.state,w=v.scrollOffset,_=v.scrollUpdateWasRequested;if(_&&this._outerRef!=null){var O=this._outerRef;if(f==="horizontal"||S==="horizontal")if(f==="rtl")switch(kr()){case"negative":O.scrollLeft=-w;break;case"positive-ascending":O.scrollLeft=w;break;default:var I=O.clientWidth,E=O.scrollWidth;O.scrollLeft=E-I-w;break}else O.scrollLeft=w;else O.scrollTop=w}this._callPropsCallbacks()},m.componentWillUnmount=function(){this._resetIsScrollingTimeoutId!==null&&Dr(this._resetIsScrollingTimeoutId)},m.render=function(){var p=this.props,f=p.children,S=p.className,v=p.direction,w=p.height,_=p.innerRef,O=p.innerElementType,I=p.innerTagName,E=p.itemCount,k=p.itemData,N=p.itemKey,P=N===void 0?gc:N,A=p.layout,F=p.outerElementType,K=p.outerTagName,z=p.style,q=p.useIsScrolling,V=p.width,W=this.state.isScrolling,G=v==="horizontal"||A==="horizontal",se=G?this._onScrollHorizontal:this._onScrollVertical,Q=this._getRangeToRender(),pe=Q[0],oe=Q[1],de=[];if(E>0)for(var ie=pe;ie<=oe;ie++)de.push(L.createElement(f,{data:k,key:P(ie,k),index:ie,isScrolling:q?W:void 0,style:this._getItemStyle(ie)}));var Ot=n(this.props,this._instanceProps);return L.createElement(F||K||"div",{className:S,onScroll:se,ref:this._outerRefSetter,style:Rs({position:"relative",height:w,width:V,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:v},z)},L.createElement(O||I||"div",{children:de,ref:_,style:{height:G?"100%":Ot,pointerEvents:W?"none":void 0,width:G?Ot:"100%"}}))},m._callPropsCallbacks=function(){if(typeof this.props.onItemsRendered=="function"){var p=this.props.itemCount;if(p>0){var f=this._getRangeToRender(),S=f[0],v=f[1],w=f[2],_=f[3];this._callOnItemsRendered(S,v,w,_)}}if(typeof this.props.onScroll=="function"){var O=this.state,I=O.scrollDirection,E=O.scrollOffset,k=O.scrollUpdateWasRequested;this._callOnScroll(I,E,k)}},m._getRangeToRender=function(){var p=this.props,f=p.itemCount,S=p.overscanCount,v=this.state,w=v.isScrolling,_=v.scrollDirection,O=v.scrollOffset;if(f===0)return[0,0,0,0];var I=o(this.props,O,this._instanceProps),E=l(this.props,I,O,this._instanceProps),k=!w||_==="backward"?Math.max(1,S):1,N=!w||_==="forward"?Math.max(1,S):1;return[Math.max(0,I-k),Math.max(0,Math.min(f-1,E+N)),I,E]},g})(L.PureComponent),e.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},e}var mc=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},bc=50,Ge=function(e,t,n){var s=e,r=s.itemSize,o=n.itemMetadataMap,l=n.lastMeasuredIndex;if(t>l){var c=0;if(l>=0){var d=o[l];c=d.offset+d.size}for(var u=l+1;u<=t;u++){var h=r(u);o[u]={offset:c,size:h},c+=h}n.lastMeasuredIndex=t}return o[t]},yc=function(e,t,n){var s=t.itemMetadataMap,r=t.lastMeasuredIndex,o=r>0?s[r].offset:0;return o>=n?_i(e,t,r,0,n):Sc(e,t,Math.max(0,r),n)},_i=function(e,t,n,s,r){for(;s<=n;){var o=s+Math.floor((n-s)/2),l=Ge(e,o,t).offset;if(l===r)return o;lr&&(n=o-1)}return s>0?s-1:0},Sc=function(e,t,n,s){for(var r=e.itemCount,o=1;n=n&&(o=n-1),o>=0){var c=s[o];l=c.offset+c.size}var d=n-o-1,u=d*r;return l+u},wc=Ci({getItemOffset:function(e,t,n){return Ge(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:Lr,getOffsetForIndexAndAlignment:function(e,t,n,s,r,o){var l=e.direction,c=e.height,d=e.layout,u=e.width,h=l==="horizontal"||d==="horizontal",g=h?u:c,m=Ge(e,t,r),y=Lr(e,r),p=Math.max(0,Math.min(y-g,m.offset)),f=Math.max(0,m.offset-g+m.size+o);switch(n==="smart"&&(s>=f-g&&s<=p+g?n="auto":n="center"),n){case"start":return p;case"end":return f;case"center":return Math.round(f+(p-f)/2);case"auto":default:return s>=f&&s<=p?s:s=S-y&&s<=f+y?n="auto":n="center"),n){case"start":return f;case"end":return S;case"center":{var v=Math.round(S+(f-S)/2);return vp+Math.floor(y/2)?p:v}case"auto":default:return s>=S&&s<=f?s:s-1?c[d?r[u]:u]:void 0}}return Wn=n,Wn}var Un,Xr;function ud(){if(Xr)return Un;Xr=1;var i=dd(),e=zi(),t=i(e);return Un=t,Un}var hd=ud();const We=te(hd);var Vn,Zr;function pd(){if(Zr)return Vn;Zr=1;var i=ai(),e=Ns(),t=Jt();function n(s,r,o){var l=s==null?0:s.length;return l?(o&&typeof o!="number"&&e(s,r,o)?(r=0,o=l):(r=r==null?0:t(r),o=o===void 0?l:t(o)),i(s,r,o)):[]}return Vn=n,Vn}var fd=pd();const gd=te(fd);var md=ka();const bd=te(md),yd={PREFIX:X+"-overflow-list"},Qr={COLLAPSE:"collapse",SCROLL:"scroll"},Jr={START:"start",END:"end"},Sd={GROW:1},Be={BOUNDARY_SET:Object.values(Jr),POSITION_SET:["vertical","horizontal"],MODE_SET:Object.values(Qr),MODE_MAP:Qr,BOUNDARY_MAP:Jr,OVERFLOW_DIR:Sd},eo={MINIMUM_HTML_ELEMENT_WIDTH:4};class Us extends b.PureComponent{componentDidMount(){const{items:e}=this.props;this.cachedKeys=Object.keys(e);const{root:t,threshold:n,rootMargin:s,option:r,onIntersect:o}=this.props;this.observer=new IntersectionObserver(o,Object.assign({root:t,threshold:n,rootMargin:s},r)),this.observeElement()}componentDidUpdate(){const{items:e}=this.props,t=Object.keys(e);re(this.cachedKeys,t)||(this.observeElement(!0),this.cachedKeys=t)}componentWillUnmount(){this.observer&&(this.observer.disconnect(),this.observer=null)}observeElement(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;const{items:t}=this.props;if(li(t)){this.observer.disconnect();return}e&&this.observer.disconnect(),Object.keys(t).forEach(n=>{const s=t[n];s&&La(s)&&this.observer.observe(s)})}render(){const{children:e}=this.props;return e}}Us.propTypes={onIntersect:a.func,option:a.object,root:a.any,threshold:a.number,rootMargin:a.string,items:a.object};Us.defaultProps={onIntersect:()=>{},threshold:.75,rootMargin:"0px",option:{},items:{}};const wd=Be.BOUNDARY_MAP;class vd extends ge{constructor(e){super(Object.assign({},e)),this.previousY=void 0,this.isScrollMode=()=>{const{renderMode:t}=this.getProps();return t==="scroll"},this.getReversedItems=()=>{const{items:t}=this.getProps();return $t(t).reverse()}}getOverflowItem(){const{items:e}=this.getProps(),{visibleState:t,overflow:n,scrollOverflow:s}=this.getStates();if(!this.isScrollMode())return n;if(!t||t.size===0)return Array.isArray(s)&&s.length===2?s:[[],[]];const r=e.map(d=>{let{key:u}=d;return!!t.get(u)}),o=r.indexOf(!0),l=r.lastIndexOf(!0);if(o<0||l<0)return Array.isArray(s)&&s.length===2?s:[[],[]];const c=[];return c[0]=o>=0?e.slice(0,o):[],c[1]=l>=0?e.slice(l+1,e.length):e.slice(),c}_syncScrollOverflowCache(e){if(!this.isScrollMode())return;const{items:t}=this.getProps(),n=t.map(l=>{let{key:c}=l;return!!e.get(c)}),s=n.indexOf(!0),r=n.lastIndexOf(!0);if(s<0||r<0){this._adapter.updateStates({isScrollOverflowCalculating:!0});return}const o=[];o[0]=s>=0?t.slice(0,s):[],o[1]=r>=0?t.slice(r+1,t.length):t.slice(),this._adapter.updateStates({scrollOverflow:o,isScrollOverflowCalculating:!1})}handleIntersect(e){const t=$t(this.getState("visibleState")),n={};e.forEach(c=>{const d=x(c,"target.dataset.scrollkey"),u=c.isIntersecting;n[d]=c,t.set(d,u)});let s=!1;for(const c of t.values())if(c){s=!0;break}const r=s,[o]=e,l=o.boundingClientRect.y;if(!r&&this.previousY!==void 0&&l!==this.previousY){this.previousY=l;return}this.previousY=l,this._adapter.updateVisibleState(t),this._syncScrollOverflowCache(t),this._adapter.notifyIntersect(n)}handleCollapseOverflow(){const{minVisibleItems:e,collapseFrom:t}=this.getProps(),{overflowWidth:n,containerWidth:s,pivot:r,overflowStatus:o}=this.getStates(),{items:l,onOverflow:c}=this.getProps();let d=n,u=0,h=!1;for(const g of this._adapter.getItemSizeMap().values()){if(d+=g,d>s){h=!0;break}if(u===l.length-1){this._adapter.updateStates({overflowStatus:"normal",pivot:l.length-1,visible:l,overflow:[]});break}u++}if(h){const g=Math.max(e,u),m=t===wd.START,y=m?this.getReversedItems().slice(0,g).reverse():l.slice(0,g),p=m?this.getReversedItems().slice(g).reverse():l.slice(g);this._adapter.updateStates({overflowStatus:"overflowed",pivot:g,visible:y,overflow:p}),r!==g&&c(p);return}}}const at=yd.PREFIX,qn=Be.BOUNDARY_MAP,to=Be.OVERFLOW_DIR,qe=Be.MODE_MAP;class Qe extends he{constructor(e){var t;super(e),t=this,this.scroller=null,this.spacer=null,this.isScrollMode=()=>{const{renderMode:n}=this.props;return n===qe.SCROLL},this.resize=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];var s;const r=(s=n[0])===null||s===void 0?void 0:s.target.clientWidth;t.setState({containerWidth:r,overflowStatus:"calculating"})},this.reintersect=n=>{this.foundation.handleIntersect(n)},this.mergeRef=(n,s,r)=>{this.itemRefs[r]=s,typeof n=="function"?n(s):typeof n=="object"&&n&&"current"in n&&(n.current=s)},this.renderOverflow=()=>{const n=this.foundation.getOverflowItem();return this.props.overflowRenderer(n)},this.getItemKey=(n,s)=>{const{itemKey:r}=this.props;return ue(r)?r(n):x(n,r||"key",s)},this.renderItemList=()=>{const{className:n,wrapperClassName:s,wrapperStyle:r,style:o,visibleItemRenderer:l,renderMode:c,collapseFrom:d}=this.props,{visible:u,overflowStatus:h}=this.state;let g=this.renderOverflow();if(!this.isScrollMode()&&(Array.isArray(g)&&(g=b.createElement(b.Fragment,null,g)),b.isValidElement(g))){const p=b.cloneElement(g);g=b.createElement(Pt,{onResize:f=>{let[S]=f;this.setState({overflowWidth:S.target.clientWidth,overflowStatus:"calculating"})}},b.createElement("div",{className:`${at}-overflow`},p))}const m=c===qe.SCROLL?(()=>{const p=[b.createElement("div",{className:M(s,`${at}-scroll-wrapper`),ref:f=>{this.scroller=f},style:Object.assign({},r),key:`${at}-scroll-wrapper`},u.map(l).map(f=>{const{forwardRef:S,key:v}=f;return b.cloneElement(f,{ref:w=>this.mergeRef(S,w,v),"data-scrollkey":`${v}`,key:v})}))];return this.props.overflowRenderDirection==="both"?(p.unshift(g[0]),p.push(g[1])):this.props.overflowRenderDirection==="start"?(p.unshift(g[1]),p.unshift(g[0])):(p.push(g[0]),p.push(g[1])),p})():[d===qn.START?g:null,u.map((p,f)=>{const S=this.getItemKey(p,f),v=l(p,f),w=b.cloneElement(v);return b.createElement(Pt,{key:S??f,onResize:_=>{let[O]=_;return this.onItemResize(O,p,f)}},b.createElement("div",{key:S??f,className:`${at}-item`},w))}),d===qn.END?g:null];return b.createElement("div",{className:M(`${at}`,n),style:Object.assign(Object.assign({},o),c===qe.COLLAPSE?{maxWidth:"100%",visibility:h==="calculating"&&this.state.pivot<0?"hidden":"visible"}:null)},...m)},this.onItemResize=(n,s,r)=>{const o=this.getItemKey(s,r),l=this.itemSizeMap.get(o);l?l!==n.target.clientWidth&&(this.itemSizeMap.set(o,n.target.clientWidth),this.setState({overflowStatus:"calculating"})):this.itemSizeMap.set(o,n.target.clientWidth);const{maxCount:c}=this.state;this.itemSizeMap.size===c&&this.setState({overflowStatus:"calculating"})},this.state={direction:to.GROW,lastOverflowCount:0,overflow:[],visible:[],containerWidth:0,visibleState:new Map,itemSizeMap:new Map,overflowStatus:"calculating",pivot:-1,overflowWidth:0,maxCount:0,scrollOverflow:[[],[]],isScrollOverflowCalculating:!0},this.foundation=new vd(this.adapter),this.previousWidths=new Map,this.itemRefs={},this.itemSizeMap=new Map}static getDerivedStateFromProps(e,t){const{prevProps:n}=t,s={};s.prevProps=e;const r=l=>!n&&l in e||n&&!re(n[l],e[l]),o=r("items");if(o||r("style")){if(s.direction=to.GROW,s.lastOverflowCount=0,s.maxCount=0,s.isScrollOverflowCalculating=!0,o&&e.renderMode===qe.SCROLL&&Array.isArray(t.scrollOverflow)){const l=(m,y)=>{const{itemKey:p}=e;return ue(p)?p(m):x(m,p||"key",y)},c=e.items||[],d=new Map;c.forEach((m,y)=>{d.set(l(m,y),m)});const u=function(){return(arguments.length>0&&arguments[0]!==void 0?arguments[0]:[]).map((y,p)=>d.get(l(y,p))).filter(Boolean)},[h,g]=t.scrollOverflow;s.scrollOverflow=[u(h),u(g)]}if(e.renderMode===qe.SCROLL)s.visible=e.items,s.overflow=[];else{let l=e.items.length;Math.floor(t.containerWidth/eo.MINIMUM_HTML_ELEMENT_WIDTH)!==0&&(l=Math.min(l,Math.floor(t.containerWidth/eo.MINIMUM_HTML_ELEMENT_WIDTH)));const c=e.collapseFrom===qn.START,d=c?$t(e.items).reverse().slice(0,l):e.items.slice(0,l),u=c?$t(e.items).reverse().slice(l):e.items.slice(l);s.visible=d,s.overflow=u,s.maxCount=l}s.overflowStatus="calculating"}return s}get adapter(){return Object.assign(Object.assign({},super.adapter),{updateVisibleState:e=>{this.setState({visibleState:e},()=>{var t,n;(n=(t=this.props).onVisibleStateChange)===null||n===void 0||n.call(t,e)})},updateStates:e=>{this.setState(Object.assign({},e))},notifyIntersect:e=>{this.props.onIntersect&&this.props.onIntersect(e)},getItemSizeMap:()=>this.itemSizeMap})}componentDidUpdate(e,t){const n=e.items.map((d,u)=>this.getItemKey(d,u)),s=this.props.items.map((d,u)=>this.getItemKey(d,u));re(n,s)||(this.itemRefs={},this.itemSizeMap=new Map,this.setState({visibleState:new Map,isScrollOverflowCalculating:!0}));const{overflow:r,containerWidth:o,visible:l,overflowStatus:c}=this.state;this.isScrollMode()||c!=="calculating"||this.foundation.handleCollapseOverflow()}render(){const e=this.renderItemList(),{renderMode:t}=this.props;return t===qe.SCROLL?b.createElement(Us,{onIntersect:this.reintersect,root:this.scroller,threshold:this.props.threshold,items:this.itemRefs},e):b.createElement(Pt,{onResize:this.resize},e)}}Qe.__SemiComponentName__="OverflowList";Qe.defaultProps=ks(Qe.__SemiComponentName__,{collapseFrom:"end",minVisibleItems:0,overflowRenderer:()=>null,renderMode:"collapse",threshold:.75,visibleItemRenderer:()=>null,onOverflow:()=>null,overflowRenderDirection:"both"});Qe.propTypes={className:a.string,collapseFrom:a.oneOf(Be.BOUNDARY_SET),direction:a.oneOf(Be.POSITION_SET),items:a.array,minVisibleItems:a.number,onIntersect:a.func,onOverflow:a.func,overflowRenderer:a.func,renderMode:a.oneOf(Be.MODE_SET),style:a.object,threshold:a.number,visibleItemRenderer:a.func,wrapperClassName:a.string,wrapperStyle:a.object,collapseMask:a.object,overflowRenderDirection:a.string};const Cd={PREFIX:`${X}-page`},Vs={PAGE_SHOW_MAX:7,DEFAULT_PAGE_SIZE:10,PAGE_SIZE_OPTION:[10,20,40,100],REST_PAGE_MAX_SIZE:1e6};class _d extends ge{constructor(e){super(Object.assign({},e))}init(){const{currentPage:e,total:t,pageSize:n}=this.getStates();this._updateDisabled({currentPage:e,total:t,pageSize:n}),this._updatePageList({currentPage:e,total:t,pageSize:n}),this._registerEventHandler()}destroy(){this._unregisterEventHandler()}_registerEventHandler(){this._adapter.registerKeyDownHandler(this.handleKeyDown)}_unregisterEventHandler(){this._adapter.unregisterKeyDownHandler(this.handleKeyDown)}_updateDisabled(e){const{currentPage:t,total:n,pageSize:s}=e,r=this._getTotalPageNumber(n,s);let o=!1,l=!1;t===1?(o=!0,l=r<2):t===r&&(o=!1,l=!0);const{prevDisabled:c,nextDisabled:d}=this.getStates();(o!==c||l!==d)&&this._adapter.setDisabled(o,l)}goPage(e){if(e==="...")return;const{pageSize:t,currentPage:n}=this.getStates(),s=this._isInProps("currentPage");e!==n&&(s?(this._adapter.notifyPageChange(e),this._adapter.notifyChange(e,t)):(this.updatePage(e),this._adapter.notifyPageChange(e),this._adapter.notifyChange(e,t)))}updatePage(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1,t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;(t===null||typeof t>"u")&&(t=this.getState("total")),(n===null||typeof n>"u")&&(n=this.getState("pageSize")),this._updateDisabled({currentPage:e,total:t,pageSize:n}),this._updatePageList({currentPage:e,total:t,pageSize:n}),t!==this.getState("total")&&this._adapter.updateTotal(t),e!==this.getState("currentPage")&&this._adapter.setCurrentPage(e),n!==this.getState("pageSize")&&this._adapter.updatePageSize(n)}updateAllPageNumbers(e,t){const{size:n,hoverShowPageSelect:s,disabled:r}=this.getProps();if(!(n!=="small"||!s||r)){const o=Array.from({length:Math.ceil(e/t)},(l,c)=>c+1);this._adapter.updateAllPageNumbers(o)}}goPrev(){const{currentPage:e}=this.getStates();e>1&&this.goPage(e-1)}goNext(){const{currentPage:e,total:t,pageSize:n}=this.getStates(),s=this._getTotalPageNumber(t,n);e<=s-1&&this.goPage(e+1)}_updatePageList(e){const{currentPage:t,total:n,pageSize:s}=e;let r=[],o=[],l=[];const c=this._getTotalPageNumber(n,s),{PAGE_SHOW_MAX:d,REST_PAGE_MAX_SIZE:u}=Vs;if(c<=d)r=Array.from({length:c},(h,g)=>g+1),o=[],l=[];else switch(!0){case t<4:r=[1,2,3,4,"...",c-1,c],l=Array.from({length:Math.min(c-6,u)},(m,y)=>y+5),o=[];break;case t===4:r=[1,2,3,4,5,"...",c],l=Array.from({length:Math.min(c-6,u)},(m,y)=>y+6),o=[];break;case(4t+(y-1));r=[1].concat("...",h,"...",c),l=Array.from({length:Math.min(c-t-2,u)},(m,y)=>t+y+2),o=Array.from({length:Math.min(t-3,u)},(m,y)=>y+2);break;case(t-3<=t&&t<=c):const g=Array.from({length:5},(m,y)=>c-(4-y));r=[1,"..."].concat(g),l=[],o=Array.from({length:Math.min(g[0]-2,u)},(m,y)=>y+2);break}this._adapter.setPageList({pageList:r,restLeftPageList:o,restRightPageList:l})}changePageSize(e){const{pageSize:t}=this.getStates();this._adapter.updatePageSize(e),this._adapter.notifyPageSizeChange(e);const{total:n,currentPage:s}=this.getStates(),{preventPageChangeOnPageSizeChange:r}=this.getProps();let o=s;if(!r){const l=(s-1)*t+1;o=Math.ceil(l/e)}this.updatePage(o,n,e),s!==o&&this._adapter.notifyPageChange(o),this._adapter.notifyChange(o,e)}handleKeyDown(){}pageSizeInOpts(){const{pageSizeOpts:e}=this.getProps(),{pageSize:t}=this.getStates(),n=[...e];if(n.indexOf(t)===-1){const s=n.findIndex(r=>r>t);n.splice(s,0,t)}return n}handleQuickJumpNumberChange(e){this._adapter.updateQuickJumpPage(e)}_handleQuickJump(e){let t=Number(e);const{pageSize:n,total:s}=this.getStates(),r=this._getTotalPageNumber(s,n);Number.isNaN(t)||(t>r&&(t=r),t<=0&&(t=1),this._adapter.updateQuickJumpPage(""),this.goPage(t))}handleQuickJumpBlur(){const{quickJumpPage:e}=this.getStates();(typeof e=="string"&&e||typeof e=="number")&&this._handleQuickJump(e)}handleQuickJumpEnterPress(e){this._handleQuickJump(e)}_getTotalPageNumber(e,t){return Math.ceil(e/t)}}const qs={PREFIX:`${X}-select`,PREFIX_OPTION:`${X}-select-option`,PREFIX_GROUP:`${X}-select-group`},_e={SIZE_SET:["small","large","default"],POSITION_SET:Ma.POSITION_SET,STATUS:pl,SEARCH_POSITION_TRIGGER:"trigger",SEARCH_POSITION_DROPDOWN:"dropdown"},Fi={LIST_HEIGHT:270};var no=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);sn?o[1]:o[1].value)}catch{t=[]}break;case(s&&!e.size):t=[];break;case(!s&&!!e.size):try{t=n?[...e][0][1]:[...e][0][1].value}catch{}break;case(!s&&!e.size):break}const r=this._adapter.getOptionsFromChildren();this._update(t,r)}handleValueChange(e){const{allowCreate:t,autoClearSearchValue:n,remote:s}=this.getProps(),{inputValue:r}=this.getStates();let o;t&&this._isControlledComponent()?(o=this.getState("options"),o.forEach(l=>l._show=!0)):o=this._adapter.getOptionsFromChildren(),this._adapter.rePositionDropdown(),this._isFilterable()&&!n&&r&&!s&&(o=this._filterOption(o,r)),this._update(e,o)}_update(e,t){let n;this._isMultiple()?(n=this._updateMultiple(e,t),this.updateOverflowItemCount(n.size)):n=this._updateSingle(e,t),this._adapter.updateSelection(n),this.updateOptionsActiveStatus(n,t)}_updateSingle(e,t){const n=new Map,{onChangeWithObject:s}=this.getProps(),r=s&&typeof e<"u"?e.value:e,o=t.filter(c=>c.value===r),l=!o.length&&typeof r<"u"&&r!==null;if(o.length){const c=o[0],d=Object.assign({},c);n.set(d.label,d)}else if(l){let c={value:e,label:e,_notExist:!0,_scrollIndex:-1};s&&(c=Object.assign(Object.assign({},e),{_notExist:!0,_scrollIndex:-1})),n.set(c.label,c)}return n}_updateMultiple(e,t){const n=this.getState("selections");let s=[];const r=Array.isArray(e);this.checkMultipleProps(),n.size&&(s=[...n].map(d=>d[1]));const o=new Map;let l=e;const{onChangeWithObject:c}=this.getProps();return c&&r&&(l=e.map(d=>d.value)),r&&l.length&&l.forEach((d,u)=>{const h=t.findIndex(g=>g.value===d);if(h!==-1)o.set(t[h].label,t[h]);else{const g=s.findIndex(m=>m.value===d);if(g!==-1){const m=s[g];if(c){const y=Object.assign({},e[u]);re(y,m)?o.set(m.label,m):o.set(y.label,y)}else o.set(m.label,m)}else{let m={value:d,label:d,_notExist:!0};c&&(m=Object.assign(Object.assign({},e[u]),{_notExist:!0})),o.set(m.label,Object.assign(Object.assign({},m),{_scrollIndex:-1}))}}}),o}_isMultiple(){return this.getProp("multiple")}_isDisabled(){return this.getProp("disabled")}_isFilterable(){return!!this.getProp("filter")}handleClick(e){const{clickToHide:t}=this.getProps(),{isOpen:n}=this.getStates();this._isDisabled()||(n?n&&t?this.close({event:e}):n&&!t&&this.focusInput():(this.open(),this._notifyFocus(e)))}open(e,t){const n=this._isFilterable(),s=t||this.getState("options");if(n){const o=this._filterOption(s,"").filter(l=>!l._inputCreateOnly);this._adapter.updateOptions(o),this.toggle2SearchInput(!0)}else this._adapter.updateFocusState(!0);this._adapter.openMenu(()=>{const{searchPosition:r,autoFocus:o}=this.getProps();o&&r===_e.SEARCH_POSITION_DROPDOWN&&this._adapter.focusDropdownInput()}),this._setDropdownWidth(),this._adapter.notifyDropdownVisibleChange(!0),this.bindKeyBoardEvent(),this._adapter.registerClickOutsideHandler(r=>{this.close({event:r}),this._notifyBlur(r),this._adapter.updateFocusState(!1)})}toggle2SearchInput(e){e?this._adapter.toggleInputShow(e,()=>this.focusInput()):this._adapter.toggleInputShow(e,()=>{})}close(e){const{event:t,closeCb:n,notToggleInput:s}=e||{},{isFocus:r}=this.getStates();this._adapter.closeMenu(),this._adapter.notifyDropdownVisibleChange(!1),this._adapter.setIsFocusInContainer(!1),r&&this._focusTrigger(),this._adapter.unregisterClickOutsideHandler();const o=this._isFilterable();o&&!s&&this.toggle2SearchInput(!1),this._adapter.once("popoverClose",()=>{o&&this.clearInput(t),n&&n()})}onSelect(e,t,n){if(this._isDisabled())return;e._inputCreateOnly&&this._adapter.notifyCreate(e),this._isMultiple()?this._handleMultipleSelect(e,n):this._handleSingleSelect(e,n),this._adapter.updateFocusIndex(t)}_handleSingleSelect(e,t){var{value:n,label:s}=e,r=no(e,["value","label"]);const o=new Map().set(s,Object.assign({value:n,label:s},r));this._notifySelect(n,Object.assign({value:n,label:s},r));const l=this._isFilterable();this._isControlledComponent()?this.close({event:t,notToggleInput:!0,closeCb:()=>{this._notifyChange(o),l&&this.toggle2SearchInput(!1)}}):(this._adapter.updateSelection(o),this._notifyChange(o),this.close({event:t,closeCb:()=>{this.updateOptionsActiveStatus(o)}}))}_handleMultipleSelect(e,t){var{value:n,label:s}=e,r=no(e,["value","label"]);const o=this._adapter.getMaxLimit(),l=this._adapter.getSelections(),{autoClearSearchValue:c}=this.getProps();if(l.has(s))this._notifyDeselect(n,Object.assign({value:n,label:s},r)),l.delete(s);else if(o&&l.size>=o){this._adapter.notifyMaxLimit(Object.assign({value:n,label:s},ye(r,"_scrollIndex")));return}else this._notifySelect(n,Object.assign({value:n,label:s},r)),l.set(s,Object.assign({value:n,label:s},r));if(this._isControlledComponent())this._notifyChange(l),this._isFilterable()&&(c&&this.clearInput(t),this.focusInput());else{this._adapter.updateSelection(l),this.updateOverflowItemCount(l.size),this._adapter.rePositionDropdown();let{options:d}=this.getStates();this._isFilterable()&&(c&&(this.clearInput(t),d=this._filterOption(d,"")),this.focusInput()),this.updateOptionsActiveStatus(l,d),this._notifyChange(l)}}clearSelected(){const e=new Map;this._isControlledComponent()?(this._notifyChange(e),this._adapter.notifyClear()):(this._adapter.updateSelection(e),this.updateOptionsActiveStatus(e),this._notifyChange(e),this._adapter.notifyClear());const{isOpen:t}=this.getStates();t&&this._adapter.rePositionDropdown()}updateOptionsActiveStatus(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.getState("options");const{allowCreate:n}=this.getProps(),s=t.map(r=>(e.has(r.label)?(r._selected=!0,n&&delete r._inputCreateOnly):(r._inputCreateOnly&&(r._show=!1),r._selected=!1),r));this._adapter.updateOptions(s)}removeTag(e){const t=this._adapter.getSelections();t.delete(e.label),this._isControlledComponent()?(this._notifyDeselect(e.value,e),this._notifyChange(t)):(this._notifyDeselect(e.value,e),this._adapter.updateSelection(t),this.updateOverflowItemCount(t.size),this.updateOptionsActiveStatus(t),this._adapter.rePositionDropdown(),this._notifyChange(t))}clearInput(e){const{inputValue:t}=this.getStates();if(t!==""){this._adapter.updateInputValue(""),this._adapter.notifySearch("",e);const{options:n}=this.getStates(),{remote:s}=this.getProps();let r=n;s||(r=this._filterOption(n,"")),this._adapter.updateOptions(r)}}focusInput(){this._adapter.focusInput(),this._adapter.updateFocusState(!0),this._adapter.setIsFocusInContainer(!1)}handleInputChange(e,t){this._adapter.updateInputValue(e);const{options:n,isOpen:s}=this.getStates(),{allowCreate:r,remote:o}=this.getProps();let l=n;o||(l=this._filterOption(n,e)),l=this._createOptionByInput(r,l,e),this._adapter.updateOptions(l),this._adapter.notifySearch(e,t),this._isMultiple()&&this._adapter.rePositionDropdown()}_filterOption(e,t){const n=this.getProp("filter");if(n){if(typeof n=="boolean"&&n){const s=t.toLowerCase();return e.map(r=>{const o=r.label.toString().toLowerCase(),l=r._parentGroup&&r._parentGroup.label,c=o.includes(s),d=Ce(l)&&l.toLowerCase().includes(s);return c||d?r._show=!0:r._show=!1,r})}else if(typeof n=="function")return e.map(s=>(n(t,s)?s._show=!0:s._show=!1,s))}else return e}_createOptionByInput(e,t,n){if(e)if(n){const s={_show:!0,_selected:!1,value:n,label:n,_inputCreateOnly:!0};let r=-1,o=-1;t.forEach((l,c)=>{!l._show&&!l._inputCreateOnly||(l.label===n&&(o=c),l._inputCreateOnly&&(r=c,l.value=n,l.label=n,l._show=!0))}),r===-1&&o===-1&&t.push(s),o!==-1&&(t=t.filter(l=>!l._inputCreateOnly))}else t=t.filter(s=>!s._inputCreateOnly);return t}bindKeyBoardEvent(){this._keydownHandler=e=>{this._handleKeyDown(e)},this._adapter.registerKeyDown(this._keydownHandler)}unBindKeyBoardEvent(){this._keydownHandler&&this._adapter.unregisterKeyDown()}_handleKeyDown(e){const t=e.keyCode,{loading:n,filter:s,multiple:r,disabled:o}=this.getProps(),{isOpen:l}=this.getStates();if(!(n||o))switch(t){case je.UP:e.preventDefault(),this._handleArrowKeyDown(-1);break;case je.DOWN:e.preventDefault(),this._handleArrowKeyDown(1);break;case je.BACKSPACE:this._handleBackspaceKeyDown();break;case je.ENTER:Et(e),this._handleEnterKeyDown(e);break;case je.ESC:l&&this.close({event:e}),s&&!r&&this._focusTrigger();break;case je.TAB:this._handleTabKeyDown(e);break}}handleContainerKeyDown(e){const t=e.keyCode,{isOpen:n}=this.getStates();switch(t){case je.TAB:n&&this._handleTabKeyDown(e);break}}_getEnableFocusIndex(e){const{focusIndex:t,options:n}=this.getStates(),s=n.filter(l=>l._show),r=s.length;let o=t+e;if(o<0&&(o=r-1),o>=r&&(o=0),e>0){let l=-1;for(let c=0;c=o));c++);o=l}else{let l=s.length;for(let c=r-1;c>=0&&(!s[c].disabled&&(l=c),!(l<=o));c--);o=l}this._adapter.updateFocusIndex(o),this._adapter.updateScrollTop(o)}_handleArrowKeyDown(e){const{isOpen:t}=this.getStates();t?this._getEnableFocusIndex(e):this.open()}_handleTabKeyDown(e){const{isOpen:t}=this.getStates();if(this._adapter.updateFocusState(!1),t){const n=this._adapter.getContainer(),s=this._adapter.getFocusableElements(n);s.length>0?e.shiftKey?this._handlePanelOpenShiftTabKeyDown(s,e):this._handlePanelOpenTabKeyDown(s,e):(this.close({event:e}),this._notifyBlur(e))}else this._notifyBlur(e)}_handlePanelOpenTabKeyDown(e,t){const n=this._adapter.getActiveElement();this._adapter.getIsFocusInContainer()?n===e[e.length-1]&&(this._focusTrigger(),this.close({event:t}),Et(t)):(e[0].focus(),this._adapter.setIsFocusInContainer(!0),Et(t))}_handlePanelOpenShiftTabKeyDown(e,t){const n=this._adapter.getActiveElement();this._adapter.getIsFocusInContainer()?n===e[0]&&(this._focusTrigger(),this._adapter.setIsFocusInContainer(!1),Et(t)):(this.close({event:t}),this._notifyBlur(t))}_handleEnterKeyDown(e){const{isOpen:t,options:n,focusIndex:s}=this.getStates();if(!t)this.open();else if(s!==-1){const r=n.filter(l=>l._show),{length:o}=r;if(o<=s)return;if(r&&o){const l=r[s];if(l.disabled)return;this.onSelect(l,s,e)}}else this.close({event:e})}_handleBackspaceKeyDown(){if(this._isMultiple()){const e=this._adapter.getSelections(),{inputValue:t}=this.getStates(),n=e.size;if(n&&!t){const s=[...e.keys()];let r=n-1,o=s[r],l=e.get(o),c=!1;if(l.disabled&&r===0)return;for(;l.disabled&&r!==0;)r=r-1,o=s[r],l=e.get(o),r==0&&l.disabled&&(c=!0);c||this.removeTag(l)}}}_notifyChange(e){const{onChangeWithObject:t}=this.getProps(),n=this.getState("selections");let s;const r=[...e.values()],o=this._isMultiple();if(this._diffSelections(e,n,o))switch(!0){case t:this._notifyChangeWithObject(e);break;case(!t&&!o):s=r.length?r[0].value:void 0,this._adapter.notifyChange(s);break;case(!t&&o):s=r.length?r.map(c=>c.value):[],this._adapter.notifyChange(s);break}}_removeInternalKey(e){let t=Object.assign({},e);return delete t._parentGroup,delete t._show,delete t._selected,delete t._scrollIndex,delete t._keyInJsx,"_keyInOptionList"in t&&(t.key=t._keyInOptionList,delete t._keyInOptionList),t}_notifySelect(e,t){const n=this._removeInternalKey(t);this._adapter.notifySelect(e,n)}_notifyDeselect(e,t){const n=this._removeInternalKey(t);this._adapter.notifyDeselect(e,n)}_diffSelections(e,t,n){let s=!0,r=!0;if(!n){const o=[...e.values()],l=[...t.values()],c=o[0]?o[0].value:o[0],d=l[0]?l[0].value:l[0];r=!re(c,d);const u=o[0]?o[0].label:o[0],h=l[0]?l[0].label:l[0];s=!re(u,h)}return r||s}_notifyChangeWithObject(e){this.getState("selections");const t=[];for(const n of e.entries()){let s=Object.assign({label:n[0]},n[1]);s=this._removeInternalKey(s),t.push(s)}this._isMultiple()?this._adapter.notifyChange(t):this._adapter.notifyChange(t[0])}_notifyBlur(e){this._adapter.notifyBlur(e)}_notifyFocus(e){this._adapter.notifyFocus(e)}handleMouseEnter(e){this._adapter.updateHovering(!0),this._adapter.notifyMouseEnter(e)}handleMouseLeave(e){this._adapter.updateHovering(!1),this._adapter.notifyMouseLeave(e)}handleClearClick(e){const{filter:t,searchPosition:n}=this.getProps();t&&n===_e.SEARCH_POSITION_TRIGGER&&this.clearInput(e),this.focus(void 0,!1),this.clearSelected(),e.stopPropagation()}handleKeyPress(e){e&&e.key===ja&&this.handleClick(e)}handleClearBtnEnterPress(e){Yt(e)&&this.handleClearClick(e)}handleOptionMouseEnter(e){this._adapter.updateFocusIndex(e)}handleListScroll(e){this._adapter.notifyListScroll(e)}handleTriggerFocus(e){this.bindKeyBoardEvent(),this._adapter.setIsFocusInContainer(!1)}handleTriggerBlur(e){const{filter:t,autoFocus:n}=this.getProps(),{isOpen:s,isFocus:r}=this.getStates();r&&!s&&(this._notifyBlur(e),this._adapter.updateFocusState(!1))}handleInputBlur(e){const{filter:t,autoFocus:n}=this.getProps(),{showInput:s,isOpen:r}=this.getStates(),o=this._isMultiple();t&&!o&&(s||n)&&!r&&this.toggle2SearchInput(!1)}selectAll(){const{options:e}=this.getStates(),{onChangeWithObject:t}=this.getProps();let n=[];if(!this._isMultiple()){console.warn(`[Semi Select]: It seems that you have called the selectAll method in the single-selection Select. + Please note that this is not a legal way to use it`);return}t?n=e:n=e.map(r=>r.value),this.handleValueChange(n),this._adapter.notifyChange(n)}checkMultipleProps(e){if(this._isMultiple()){const t=e||this.getProps(),{defaultValue:n,value:s}=t,r=s||n;!Xt(r)&&!Array.isArray(r)&&$e(!0,"[Semi Select] defaultValue/value should be array type in multiple mode")}}updateScrollTop(){this._adapter.updateScrollTop()}updateOverflowItemCount(e,t){const{maxTagCount:n,ellipsisTrigger:s}=this.getProps();s&&(t?this._adapter.updateOverflowItemCount(t):typeof n=="number"&&(e-n>0?this._adapter.updateOverflowItemCount(e-n):this._adapter.updateOverflowItemCount(0)))}updateIsFullTags(){const{isFullTags:e}=this.getStates();e||this._adapter.setState({isFullTags:!0})}handlePopoverClose(){this._adapter.emit("popoverClose")}handleSlotMouseEnter(){this._adapter.updateFocusIndex(-1)}}const lt=al.PREFIX,Ki=gi.TAG_SIZE,Rd=gi.AVATAR_SHAPE;class Ht extends L.PureComponent{renderNTag(e,t){const{size:n,showPopover:s,popoverProps:r,onPlusNMouseEnter:o}=this.props;let l=b.createElement(mt,{closable:!1,size:n,color:"grey",style:{backgroundColor:"transparent"},key:"_+n",onMouseEnter:o},"+",e);return s&&(l=b.createElement(yt,Object.assign({showArrow:!0,content:t,trigger:"hover",position:"top",autoAdjustOverflow:!0,className:`${lt}-rest-group-popover`},r,{key:"_+n_Popover"}),l)),l}renderMergeTags(e){const{maxTagCount:t,tagList:n,restCount:s}=this.props,r=s||n.length-t;let o=e;const l=e.slice(0,t),c=e.slice(t);let d=null;return r>0&&(d=this.renderNTag(r,c),l.push(d),o=l),o}renderAllTags(){const{tagList:e,size:t,mode:n,avatarShape:s,onTagClose:r}=this.props;return e.map(l=>{if(n==="custom")return l;const c=Object.assign({},l);return c.size||(c.size=t),c.avatarShape||(c.avatarShape=s),c.tagKey||(typeof c.children=="string"||typeof c.children=="number"?c.tagKey=c.children:c.tagKey=Math.random()),b.createElement(mt,Object.assign({},c,{key:c.tagKey,onClose:(d,u,h)=>{c.onClose&&c.onClose(d,u,h),r&&r(d,u,h)}}))})}render(){const{style:e,className:t,maxTagCount:n,size:s}=this.props,r=M({[`${lt}-group`]:!0,[`${lt}-group-max`]:n,[`${lt}-group-small`]:s==="small",[`${lt}-group-large`]:s==="large"},t),o=this.renderAllTags(),l=typeof n>"u"?o:this.renderMergeTags(o);return b.createElement("div",{style:e,className:r},l)}}Ht.defaultProps={style:{},className:"",size:Ki[0],avatarShape:"square",onTagClose:()=>{},onPlusNMouseEnter:()=>{}};Ht.propTypes={children:a.node,style:a.object,className:a.string,maxTagCount:a.number,restCount:a.number,tagList:a.array,size:a.oneOf(Ki),mode:a.string,onTagClose:a.func,showPopover:a.bool,popoverProps:a.object,avatarShape:a.oneOf(Rd)};var Ed=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);s{const s=i.props;if(!i||!s)return null;const r=Object.assign(Object.assign({value:s.value,label:s.label||s.children||s.value,_show:!0,_selected:!1,_scrollIndex:t},s),{_parentGroup:e});return r._keyInJsx=n||i.key,r},xd=i=>{let e=[],t=[];const n={label:"",children:[],_show:!1};let s=b.Children.toArray(i);s=s.filter(l=>l&&l.props);let r="",o=-1;return s.forEach(l=>{if(l.type.isSelectOption){r="option",o++;const c=so(l,void 0,o);n.children.push(c),t.push(c)}else if(l.type.isSelectOptionGroup){r="group";let c=l.props,{children:d}=c,u=Ed(c,["children"]);u.key=l.key;let h=[];Array.isArray(d)?h=d.map(y=>y.key):h.push(d.key),d=b.Children.toArray(d);const g=d.map((y,p)=>{let f=y.key;return h[p]===null&&(f=l.key+""+y.key),o++,so(y,u,o,f)}),m=Object.assign(Object.assign({},l.props),{children:g,key:l.key});e.push(m),t=t.concat(g)}else $e(!0,"[Semi Select] The children of `Select` should be `Select.Option` or `Select.OptionGroup`")}),r==="option"&&(e=[n]),{optionGroups:e,options:t}},Td=i=>{let{index:e,data:t,style:n}=i;const{visibleOptions:s,renderOption:r}=t,o=s[e];return r(o,e,n)};var ro=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);sb.createElement("div",{className:_,"x-semi-prop":"emptyContent"},c||E.emptyText));if(typeof f=="function"){const E=M(g,{[`${p}-custom`]:!0,[`${p}-custom-selected`]:r});return f(Object.assign({disabled:n,focused:u,selected:r,style:m,label:o,value:s,inputValue:S,onMouseEnter:k=>y(k),onClick:k=>this.onClick(Object.assign({value:s,label:o,children:t},w),k),className:E},w))}const I={searchWords:[S],sourceString:t,highlightClassName:`${p}-keyword`};return b.createElement("div",Object.assign({className:_,onClick:E=>{this.onClick(Object.assign({value:s,label:o,children:t},w),E)},onMouseEnter:E=>y&&y(E),role:"option",id:v,"aria-selected":r?"true":"false","aria-disabled":n?"true":"false",style:m},qt(w)),h?b.createElement("div",{className:O},b.createElement(za,null)):null,Ce(t)?b.createElement("div",{className:`${p}-text`},this.renderOptionContent({children:t,config:I,inputValue:S,prefixCls:p})):t)}};He.isSelectOption=!0;He.propTypes={children:a.node,disabled:a.bool,value:a.oneOfType([a.string,a.number]),selected:a.bool,label:a.node,empty:a.bool,emptyContent:a.node,onSelect:a.func,focused:a.bool,showTick:a.bool,className:a.string,style:a.object,onMouseEnter:a.func,prefixCls:a.string,renderOptionItem:a.func,inputValue:a.string};He.defaultProps={prefixCls:qs.PREFIX_OPTION};var Id=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);sthis.optionContainerEl={current:t},this.handleInputChange=(t,n)=>this.foundation.handleInputChange(t,n),this.getTagItem=(t,n,s)=>{const{size:r,disabled:o}=this.props,l=t[0],{value:c}=t[1],d=t[1].disabled||o,u=(y,p)=>{p&&typeof p.preventDefault=="function"&&p.preventDefault(),this.foundation.removeTag({label:l,value:c})},{content:h,isRenderInTag:g}=s(t[1],{index:n,disabled:d,onClose:u}),m={disabled:d,closable:!d,onClose:u};return g?b.createElement(mt,Object.assign({},m,{color:"white",size:r||"large",key:c,tabIndex:-1}),h):b.createElement(L.Fragment,{key:c},h)},this.state={isOpen:!1,isFocus:!1,options:[],selections:new Map,dropdownMinWidth:null,optionKey:Dd,inputValue:"",showInput:!1,focusIndex:e.defaultActiveFirstOption?0:-1,keyboardEventSet:{},optionGroups:[],isHovering:!1,isFocusInContainer:!1,isFullTags:!1,overflowItemCount:0},this.selectOptionListID="",this.selectID="",this.virtualizeListRef=b.createRef(),this.inputRef=b.createRef(),this.dropdownInputRef=b.createRef(),this.triggerRef=b.createRef(),this.optionsRef=b.createRef(),this.optionContainerEl=b.createRef(),this.clickOutsideHandler=null,this.onSelect=this.onSelect.bind(this),this.onClear=this.onClear.bind(this),this.onMouseEnter=this.onMouseEnter.bind(this),this.onMouseLeave=this.onMouseLeave.bind(this),this.renderOption=this.renderOption.bind(this),this.onKeyPress=this.onKeyPress.bind(this),this.eventManager=new Fa,this.foundation=new Od(this.adapter)}get adapter(){var e=this;const t={registerKeyDown:r=>{const o={onKeyDown:r};this.setState({keyboardEventSet:o})},unregisterKeyDown:()=>{this.setState({keyboardEventSet:{}})},updateFocusIndex:r=>{this.setState({focusIndex:r})},scrollToFocusOption:()=>{}},n={updateInputValue:r=>{this.setState({inputValue:r})},toggleInputShow:(r,o)=>{this.setState({showInput:r},()=>{o()})},focusInput:()=>{const{preventScroll:r}=this.props;this.inputRef&&this.inputRef.current&&this.inputRef.current.focus({preventScroll:r})},focusDropdownInput:()=>{const{preventScroll:r}=this.props;this.dropdownInputRef&&this.dropdownInputRef.current&&this.dropdownInputRef.current.focus({preventScroll:r})}},s={notifyMaxLimit:r=>this.props.onExceed(r),getMaxLimit:()=>this.props.max,registerClickOutsideHandler:r=>{const o=l=>{const c=this.triggerRef&&this.triggerRef.current,d=this.optionContainerEl&&this.optionContainerEl.current,u=l.target,h=l.composedPath&&l.composedPath()||[u];!(d&&d.contains(u))&&!(c&&c.contains(u))&&!(h.includes(c)||h.includes(d))&&r(l)};this.clickOutsideHandler=o,document.addEventListener("mousedown",o,!1)},unregisterClickOutsideHandler:()=>{this.clickOutsideHandler&&(document.removeEventListener("mousedown",this.clickOutsideHandler,!1),this.clickOutsideHandler=null)},rePositionDropdown:()=>{let{optionKey:r}=this.state;r=r+1,this.setState({optionKey:r})},notifyDeselect:(r,o)=>{delete o._parentGroup,this.props.onDeselect(r,o)}};return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},super.adapter),t),n),s),{on:(r,o)=>this.eventManager.on(r,o),off:r=>this.eventManager.off(r),once:(r,o)=>this.eventManager.once(r,o),emit:r=>this.eventManager.emit(r),getOptionsFromChildren:function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:e.props.children,o=[],l=[];const{optionList:c}=e.props;if(c&&c.length)l=c.map((d,u)=>Object.assign({_show:!0,_selected:!1,_scrollIndex:u},d)),o[0]={children:l,label:""};else{const d=xd(r);o=d.optionGroups,l=d.options}return e.setState({optionGroups:o}),l},updateOptions:r=>{this.setState({options:r})},openMenu:r=>{this.setState({isOpen:!0},()=>{r==null||r()})},closeMenu:()=>{this.setState({isOpen:!1})},getTriggerWidth:()=>{const r=this.triggerRef.current;return r&&r.getBoundingClientRect().width},setOptionWrapperWidth:r=>{this.setState({dropdownMinWidth:r})},updateSelection:r=>{this.setState({selections:r})},getSelections:()=>new Map(this.state.selections),notifyChange:r=>{this.props.onChange(r)},notifySelect:(r,o)=>{delete o._parentGroup,this.props.onSelect(r,o)},notifyDropdownVisibleChange:r=>{this.props.onDropdownVisibleChange(r)},notifySearch:(r,o)=>{this.props.onSearch(r,o)},notifyCreate:r=>{this.props.onCreate(r)},notifyMouseEnter:r=>{this.props.onMouseEnter(r)},notifyMouseLeave:r=>{this.props.onMouseLeave(r)},notifyFocus:r=>{this.props.onFocus(r)},notifyBlur:r=>{this.props.onBlur(r)},notifyClear:()=>{this.props.onClear()},notifyListScroll:r=>{this.props.onListScroll(r)},updateHovering:r=>{this.setState({isHovering:r})},updateFocusState:r=>{this.setState({isFocus:r})},updateOverflowItemCount:r=>{this.setState({overflowItemCount:r})},focusTrigger:()=>{try{const{preventScroll:r}=this.props;this.triggerRef.current.focus({preventScroll:r})}catch{}},getContainer:()=>this.optionContainerEl&&this.optionContainerEl.current,getFocusableElements:r=>$a(r),getActiveElement:()=>Ka(),setIsFocusInContainer:r=>{this.setState({isFocusInContainer:r})},getIsFocusInContainer:()=>this.state.isFocusInContainer,updateScrollTop:r=>{let o;"renderOptionItem"in this.props?(o=`.${$}-option-custom-selected`,r!==void 0&&(o=`.${$}-option-custom:nth-child(${r+1})`)):(o=`.${$}-option-selected`,r!==void 0&&(o=`.${$}-option:nth-child(${r+1})`));let l=document.querySelector(`#${$}-${this.selectOptionListID} ${o}`);if(Array.isArray(l)&&(l=l[0]),l){const c=l.parentNode;c.scrollTop=l.offsetTop-c.offsetTop-c.clientHeight/2+l.clientHeight/2}}})}componentDidMount(){this.foundation.init(),this.selectOptionListID=jt(),this.selectID=this.props.id||jt()}componentWillUnmount(){this.foundation.destroy()}componentDidUpdate(e,t){const n=b.Children.toArray(e.children).map(o=>o.key),s=b.Children.toArray(this.props.children).map(o=>o.key);let r=!1;(!re(n,s)||!re(e.optionList,this.props.optionList))&&(r=!0,this.foundation.handleOptionListChange()),(!re(this.props.value,e.value)||r)&&("value"in this.props?this.foundation.handleValueChange(this.props.value):this.foundation.handleOptionListChangeHadDefaultValue())}renderTriggerInput(){const{size:e,multiple:t,disabled:n,inputProps:s,filter:r}=this.props,o=x(s,"className"),l=M(`${$}-input`,{[`${$}-input-single`]:!t,[`${$}-input-multiple`]:t},o),{inputValue:c,focusIndex:d}=this.state,u=Object.assign({value:c,disabled:n,className:l,onChange:this.handleInputChange},s);let h={};return t&&(h={width:c?`${c.length*16}px`:"2px"},u.style=h),b.createElement(fr,Object.assign({ref:this.inputRef,size:e,"aria-activedescendant":d!==-1?`${this.selectID}-option-${d}`:"",onFocus:g=>{t&&r&&this.setState({isFocus:!0}),g.stopPropagation()},onBlur:g=>this.foundation.handleInputBlur(g)},u))}renderDropdownInput(){const{size:e,multiple:t,disabled:n,inputProps:s,filter:r,searchPosition:o,searchPlaceholder:l}=this.props,{inputValue:c,focusIndex:d}=this.state,u=M(`${$}-dropdown-search-wrapper`,{}),h=x(s,"className"),g=M(`${$}-dropdown-input`,{[`${$}-dropdown-input-single`]:!t,[`${$}-dropdown-input-multiple`]:t},h),m=Object.assign(Object.assign({value:c,disabled:n,className:g,onChange:this.handleInputChange,placeholder:l,showClear:!0},s),{onKeyDown:y=>this.foundation._handleKeyDown(y)});return b.createElement("div",{className:u},b.createElement(fr,Object.assign({ref:this.dropdownInputRef,prefix:b.createElement(Il,null),"aria-activedescendant":d!==-1?`${this.selectID}-option-${d}`:""},m)))}close(){this.foundation.close()}open(){this.foundation.open()}clearInput(){this.foundation.clearInput()}selectAll(){this.foundation.selectAll()}deselectAll(){this.foundation.clearSelected()}focus(){this.foundation.focus()}rePosition(){let{optionKey:e}=this.state;e=e+1,this.setState({optionKey:e})}onSelect(e,t,n){this.foundation.onSelect(e,t,n)}onClear(e){e.nativeEvent.stopImmediatePropagation(),this.foundation.handleClearClick(e)}search(e,t){this.handleInputChange(e,t)}renderEmpty(){return b.createElement(He,{empty:!0,emptyContent:this.props.emptyContent})}renderLoading(){const e=`${$}-loading-wrapper`;return b.createElement("div",{className:e},b.createElement(mi,null))}renderOption(e,t,n){const{focusIndex:s,inputValue:r}=this.state,{renderOptionItem:o}=this.props;let l;const c=t===s;let d=n||{};return e.style&&(d=Object.assign(Object.assign({},d),e.style)),e._inputCreateOnly?l=this.renderCreateOption(e,c,t,n):("key"in e&&(e._keyInOptionList=e.key),l=b.createElement(He,Object.assign({showTick:!0},e,{selected:e._selected,onSelect:(u,h)=>this.onSelect(u,t,h),focused:c,onMouseEnter:()=>this.onOptionHover(t),style:d,key:e._keyInOptionList||e._keyInJsx||e.label+e.value+t,renderOptionItem:o,inputValue:r,semiOptionId:`${this.selectID}-option-${t}`}),e.label)),l}renderCreateOption(e,t,n,s){const{renderCreateItem:r}=this.props;if(typeof r>"u")return b.createElement(He,Object.assign({key:e.key||e.label+e.value,onSelect:(c,d)=>this.onSelect(c,n,d),onMouseEnter:()=>this.onOptionHover(n),showTick:!0},e,{focused:t,style:s}),b.createElement(Ee,{componentName:"Select"},c=>b.createElement(b.Fragment,null,b.createElement("span",{className:`${$}-create-tips`},c.createText),e.value)));const o=r(e.value,t,s);return b.createElement("div",{role:"button","aria-label":"Use the input box to create an optional item",onClick:l=>this.onSelect(e,n,l),key:e.key||e.label},o)}onOptionHover(e){this.foundation.handleOptionMouseEnter(e)}renderWithGroup(e){const t=[],n=new Map;return e.forEach((s,r)=>{const o=s._parentGroup,l=this.renderOption(s,r);if(o&&!n.has(o.label)){const c=typeof o.label=="string"||typeof o.label=="number"?o.label:o.key,d=b.createElement(nn,Object.assign({},o,{key:c}));n.set(o.label,!0),t.push(d)}t.push(l)}),t}renderVirtualizeList(e){const{virtualize:t}=this.props,{direction:n}=this.context,{height:s,width:r,itemSize:o}=t;return b.createElement(Oi,{ref:this.virtualizeListRef,height:s||Fi.LIST_HEIGHT,itemCount:e.length,itemSize:o,itemData:{visibleOptions:e,renderOption:this.renderOption},width:r||"100%",style:{direction:n}},Td)}renderOptions(e){const{dropdownMinWidth:t,options:n,selections:s}=this.state,{maxHeight:r,dropdownClassName:o,dropdownStyle:l,outerTopSlot:c,innerTopSlot:d,outerBottomSlot:u,innerBottomSlot:h,loading:g,virtualize:m,multiple:y,emptyContent:p,searchPosition:f,filter:S}=this.props,v=n.filter(E=>E._show);let w=this.renderWithGroup(v);m&&(w=this.renderVirtualizeList(v));const _=Object.assign({minWidth:t},l),O=M({[`${$}-option-list`]:!0,[`${$}-option-list-chosen`]:s.size}),I=!n.length||!n.some(E=>E._show);return b.createElement("div",{id:`${$}-${this.selectOptionListID}`,className:M({[`${$}-option-list-wrapper`]:!(I&&p===null)},o),style:_,ref:this.setOptionContainerEl,onKeyDown:E=>this.foundation.handleContainerKeyDown(E)},c?b.createElement("div",{className:`${$}-option-list-outer-top-slot`,onMouseEnter:()=>this.foundation.handleSlotMouseEnter()},c):null,f===_e.SEARCH_POSITION_DROPDOWN&&S?this.renderDropdownInput():null,b.createElement("div",{style:{maxHeight:`${r}px`},className:O,role:"listbox","aria-multiselectable":y,onScroll:E=>this.foundation.handleListScroll(E)},d?b.createElement("div",{className:`${$}-option-list-inner-top-slot`,onMouseEnter:()=>this.foundation.handleSlotMouseEnter()},d):null,g?this.renderLoading():I?this.renderEmpty():w,h?b.createElement("div",{className:`${$}-option-list-inner-bottom-slot`,onMouseEnter:()=>this.foundation.handleSlotMouseEnter()},h):null),u?b.createElement("div",{className:`${$}-option-list-outer-bottom-slot`,onMouseEnter:()=>this.foundation.handleSlotMouseEnter()},u):null)}renderSingleSelection(e,t){let{renderSelectedItem:n,searchPosition:s}=this.props;const{placeholder:r}=this.props,{showInput:o,inputValue:l}=this.state;let c="";const d=[...e];if(typeof n>"u"&&(n=m=>m.label),d.length){const m=d[0][1];c=n(m)}const u=s===_e.SEARCH_POSITION_TRIGGER,h=M({[`${$}-selection-text`]:!0,[`${$}-selection-placeholder`]:!c&&c!==0,[`${$}-selection-text-hide`]:l&&o&&u,[`${$}-selection-text-inactive`]:!l&&o&&u}),g=`${$}-content-wrapper`;return b.createElement(b.Fragment,null,b.createElement("div",{className:g},b.createElement("span",{className:h,"x-semi-prop":"placeholder"},c||c===0?c:r),t&&o&&u?this.renderTriggerInput():null))}renderTag(e,t,n){const{size:s,disabled:r}=this.props;let{renderSelectedItem:o}=this.props;const l=e[0],{value:c}=e[1],d=e[1].disabled||r,u=(p,f)=>{f&&typeof f.preventDefault=="function"&&f.preventDefault(),this.foundation.removeTag({label:l,value:c})};typeof o>"u"&&(o=p=>({isRenderInTag:!0,content:p.label}));const{content:h,isRenderInTag:g}=o(e[1],{index:t,disabled:d,onClose:u}),m={disabled:d,closable:!d,onClose:u},y=n&&!ue(this.props.renderSelectedItem)?b.createElement(Ba,{size:"small",ellipsis:{rows:1,showTooltip:{type:"popover",opts:{style:{width:"auto",fontSize:12}}}}},h):h;return g?b.createElement(mt,Object.assign({},m,{color:"white",size:s||"large",key:c,style:{maxWidth:"100%"}}),y):b.createElement(L.Fragment,{key:c},y)}renderNTag(e,t){const{size:n,showRestTagsPopover:s,restTagsPopoverProps:r}=this.props;let o=b.createElement(mt,{closable:!1,size:n||"large",color:"grey",className:`${$}-content-wrapper-collapse-tag`,key:`_+${e}`,style:{marginRight:0,flexShrink:0}},"+",e);return s&&(o=b.createElement(yt,Object.assign({showArrow:!0,content:b.createElement(Qt,{spacing:2,wrap:!0,style:{maxWidth:"400px"}},t.map((l,c)=>this.renderTag(l,c))),trigger:"hover",position:"top",autoAdjustOverflow:!0},r,{key:`_+${e}_Popover`}),o)),o}renderOverflow(e,t){return e.length&&e[0]?this.renderTag(e[0],t,!0):null}handleOverflow(e){const{overflowItemCount:t,selections:n}=this.state,{maxTagCount:s}=this.props,r=n.size-s>0?n.size-s+e.length-1:e.length-1;t!==r&&this.foundation.updateOverflowItemCount(n.size,r)}renderCollapsedTags(e,t){const{overflowItemCount:n}=this.state,s=typeof t=="number"?e.slice(0,t):e;return b.createElement("div",{className:`${$}-content-wrapper-collapse`},b.createElement(Qe,{items:s,itemKey:r=>{var o;return(o=r==null?void 0:r[1])===null||o===void 0?void 0:o.value},overflowRenderer:r=>this.renderOverflow(r,t-1),onOverflow:r=>this.handleOverflow(r),visibleItemRenderer:(r,o)=>this.renderTag(r,o)}),n>0&&this.renderNTag(n,e.slice(e.length-n)))}renderOneLineTags(e,t){let{renderSelectedItem:n}=this.props;const{showRestTagsPopover:s,restTagsPopoverProps:r,maxTagCount:o}=this.props,{isFullTags:l}=this.state;let c;if(typeof n>"u"&&(n=d=>({isRenderInTag:!0,content:d.label})),s){const u=(l?e:e.slice(0,o)).map((h,g)=>this.getTagItem(h,g,n));c=b.createElement(Ht,{tagList:u,maxTagCount:t,restCount:l?void 0:e.length-o,size:"large",mode:"custom",showPopover:s,popoverProps:r,onPlusNMouseEnter:()=>{this.foundation.updateIsFullTags()}})}else{const u=e.slice(0,o).map((h,g)=>this.getTagItem(h,g,n));c=b.createElement(Ht,{tagList:u,maxTagCount:t,restCount:e.length-o,size:"large",mode:"custom"})}return c}renderMultipleSelection(e,t){let{renderSelectedItem:n,searchPosition:s}=this.props;const{placeholder:r,maxTagCount:o,expandRestTagsOnClick:l,ellipsisTrigger:c}=this.props,{inputValue:d,isOpen:u}=this.state,h=[...e];typeof n>"u"&&(n=_=>({isRenderInTag:!0,content:_.label}));const g=M({[`${$}-content-wrapper`]:!0,[`${$}-content-wrapper-one-line`]:o&&!u,[`${$}-content-wrapper-empty`]:!h.length}),m=M({[`${$}-selection-text`]:!0,[`${$}-selection-placeholder`]:!h.length,[`${$}-selection-text-hide`]:h&&h.length}),y=r&&!d?b.createElement("span",{className:m},r):null,p=h.length>o?o:void 0,f=!o,S=c?this.renderCollapsedTags(h,p):this.renderOneLineTags(h,p),v=f||l&&u?h.map((_,O)=>this.renderTag(_,O)):S,w=t&&s===_e.SEARCH_POSITION_TRIGGER;return b.createElement(b.Fragment,null,b.createElement("div",{className:g},h&&h.length?v:y,w?this.renderTriggerInput():null))}onMouseEnter(e){this.foundation.handleMouseEnter(e)}onMouseLeave(e){this.foundation.handleMouseLeave(e)}onKeyPress(e){this.foundation.handleKeyPress(e)}handlePopoverVisibleChange(e){const{virtualize:t}=this.props,{selections:n}=this.state;if(e)if(t){let s=-1;if(n.forEach(r=>{const o=x(r,"_scrollIndex");gt(o)&&o>=0&&(s=s!==-1&&sthis.foundation.removeTag(Q),onClear:this.onClear,disabled:t,triggerRender:p,placeholder:y,componentName:"Select",componentProps:Object.assign({},this.props)}):[b.createElement(L.Fragment,{key:"prefix"},g||m?this.renderPrefix():null),b.createElement(L.Fragment,{key:"selection"},b.createElement("div",{className:M(`${$}-selection`)},n?this.renderMultipleSelection(_,K):this.renderSingleSelection(_,K))),b.createElement(L.Fragment,{key:"suffix"},h?this.renderSuffix():null),b.createElement(L.Fragment,{key:"clearicon"},q?b.createElement("div",{className:M(`${$}-clear`),onClick:this.onClear},W):V)],se=t||K&&P||K&&n?-1:0;return b.createElement("div",Object.assign({role:"combobox","aria-disabled":t,"aria-expanded":O,"aria-controls":`${$}-${this.selectOptionListID}`,"aria-haspopup":"listbox","aria-label":_.size?"selected":"","aria-invalid":this.props["aria-invalid"],"aria-errormessage":this.props["aria-errormessage"],"aria-labelledby":this.props["aria-labelledby"],"aria-describedby":this.props["aria-describedby"],"aria-required":this.props["aria-required"],className:z,ref:Q=>{this.triggerRef.current=Q},onClick:Q=>this.foundation.handleClick(Q),style:r,id:this.selectID,tabIndex:se,"aria-activedescendant":A!==-1?`${this.selectID}-option-${A}`:"",onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onFocus:Q=>this.foundation.handleTriggerFocus(Q),onBlur:Q=>this.foundation.handleTriggerBlur(Q),onKeyPress:this.onKeyPress},I,this.getDataAttr(w)),G)}render(){const{direction:e}=this.context,t=e==="rtl"?"bottomRight":"bottomLeft",{children:n,position:s=t,zIndex:r,getPopupContainer:o,motion:l,autoAdjustOverflow:c,mouseLeaveDelay:d,mouseEnterDelay:u,spacing:h,stopPropagation:g,dropdownMargin:m,rePosKey:y}=this.props,{isOpen:p,optionKey:f}=this.state,S=this.renderSelection(),v=y!==void 0?`${f}-${y}`:f;return b.createElement(yt,{getPopupContainer:o,motion:l,margin:m,autoAdjustOverflow:c,mouseLeaveDelay:d,mouseEnterDelay:u,zIndex:r,ref:this.optionsRef,content:()=>this.renderOptions(n),visible:p,trigger:"custom",rePosKey:v,position:s,spacing:h,stopPropagation:g,disableArrowKeyDown:!0,onVisibleChange:w=>this.handlePopoverVisibleChange(w),afterClose:()=>this.foundation.handlePopoverClose()},S)}}Te.contextType=Ls;Te.Option=He;Te.OptGroup=nn;Te.propTypes={"aria-describedby":a.string,"aria-errormessage":a.string,"aria-invalid":a.bool,"aria-labelledby":a.string,"aria-required":a.bool,autoFocus:a.bool,autoClearSearchValue:a.bool,borderless:a.bool,children:a.node,clearIcon:a.node,defaultValue:a.oneOfType([a.string,a.number,a.array,a.object]),ellipsisTrigger:a.bool,value:a.oneOfType([a.string,a.number,a.array,a.object]),placeholder:a.node,onChange:a.func,multiple:a.bool,filter:a.oneOfType([a.func,a.bool]),max:a.number,maxTagCount:a.number,maxHeight:a.oneOfType([a.string,a.number]),style:a.object,className:a.string,size:a.oneOf(_e.SIZE_SET),disabled:a.bool,emptyContent:a.node,expandRestTagsOnClick:a.bool,onDropdownVisibleChange:a.func,zIndex:a.number,position:a.oneOf(_e.POSITION_SET),onSearch:a.func,getPopupContainer:a.func,dropdownClassName:a.string,dropdownStyle:a.object,dropdownMargin:a.oneOfType([a.number,a.object]),outerTopSlot:a.node,innerTopSlot:a.node,inputProps:a.object,outerBottomSlot:a.node,innerBottomSlot:a.node,optionList:a.array,dropdownMatchSelectWidth:a.bool,loading:a.bool,defaultOpen:a.bool,validateStatus:a.oneOf(_e.STATUS),defaultActiveFirstOption:a.bool,triggerRender:a.func,stopPropagation:a.bool,searchPosition:a.string,motion:a.bool,onChangeWithObject:a.bool,suffix:a.node,prefix:a.node,insetLabel:a.node,insetLabelId:a.string,showClear:a.bool,showArrow:a.bool,renderSelectedItem:a.func,allowCreate:a.bool,renderCreateItem:a.func,onMouseEnter:a.func,onMouseLeave:a.func,clickToHide:a.bool,onExceed:a.func,onCreate:a.func,remote:a.bool,onDeselect:a.func,onSelect:a.func,autoAdjustOverflow:a.bool,mouseEnterDelay:a.number,mouseLeaveDelay:a.number,spacing:a.oneOfType([a.number,a.object]),rePosKey:a.oneOfType([a.string,a.number]),onBlur:a.func,onFocus:a.func,onClear:a.func,virtualize:a.object,renderOptionItem:a.func,onListScroll:a.func,arrowIcon:a.node,preventScroll:a.bool};Te.__SemiComponentName__="Select";Te.defaultProps=ks(Te.__SemiComponentName__,{stopPropagation:!0,motion:!0,borderless:!1,zIndex:ci.DEFAULT_Z_INDEX,filter:!1,multiple:!1,disabled:!1,defaultOpen:!1,allowCreate:!1,placeholder:"",onDropdownVisibleChange:H,onChangeWithObject:!1,onChange:H,onSearch:H,onMouseEnter:H,onMouseLeave:H,onDeselect:H,onSelect:H,onCreate:H,onExceed:H,onFocus:H,onBlur:H,onClear:H,onListScroll:H,maxHeight:Fi.LIST_HEIGHT,dropdownMatchSelectWidth:!0,defaultActiveFirstOption:!0,showArrow:!0,showClear:!1,searchPosition:_e.SEARCH_POSITION_TRIGGER,remote:!1,autoAdjustOverflow:!0,autoClearSearchValue:!0,arrowIcon:b.createElement(Ms,{"aria-label":""}),showRestTagsPopover:!1,restTagsPopoverProps:{},expandRestTagsOnClick:!1,ellipsisTrigger:!1});var oo=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);so+1):[]},this.foundation=new _d(this.adapter),this.renderDefaultPage=this.renderDefaultPage.bind(this),this.renderSmallPage=this.renderSmallPage.bind(this),$e(!!(e.showSizeChanger&&e.hideOnSinglePage),"[Semi Pagination] You should not use showSizeChanger and hideOnSinglePage in ths same time. At this time, hideOnSinglePage no longer takes effect, otherwise there may be a problem that the switch entry disappears")}get adapter(){return Object.assign(Object.assign({},super.adapter),{setPageList:e=>{const{pageList:t,restLeftPageList:n,restRightPageList:s}=e;this.setState({pageList:t,restLeftPageList:n,restRightPageList:s})},setDisabled:(e,t)=>{this.setState({prevDisabled:e,nextDisabled:t})},updateTotal:e=>this.setState({total:e}),updatePageSize:e=>this.setState({pageSize:e}),updateQuickJumpPage:e=>this.setState({quickJumpPage:e}),updateAllPageNumbers:e=>this.setState({allPageNumbers:e}),setCurrentPage:e=>{this.setState({currentPage:e})},registerKeyDownHandler:e=>{document.addEventListener("keydown",e)},unregisterKeyDownHandler:e=>{document.removeEventListener("keydown",e)},notifyPageChange:e=>{this.props.onPageChange(e)},notifyPageSizeChange:e=>{this.props.onPageSizeChange(e)},notifyChange:(e,t)=>{this.props.onChange(e,t)}})}componentDidMount(){this.foundation.init()}componentWillUnmount(){this.foundation.destroy()}componentDidUpdate(e){const t={currentPage:this.props.currentPage,total:this.props.total,pageSize:this.props.pageSize};let n=!1,s=!1;e.currentPage!==this.props.currentPage&&(n=!0),e.total!==this.props.total&&(n=!0,s=!0),e.pageSize!==this.props.pageSize&&(n=!0,s=!0),n&&this.foundation.updatePage(t.currentPage,t.total,t.pageSize),s&&this.foundation.updateAllPageNumbers(t.total,t.pageSize)}renderPrevBtn(){const{prevText:e,disabled:t}=this.props,{prevDisabled:n}=this.state,s=n||t,r=M({[`${Z}-item`]:!0,[`${Z}-prev`]:!0,[`${Z}-item-disabled`]:s});return b.createElement("li",{role:"button","aria-disabled":!!s,"aria-label":"Previous",onClick:o=>!s&&this.foundation.goPrev(o),className:r,"x-semi-prop":"prevText"},e||b.createElement(bi,{size:"large"}))}renderNextBtn(){const{nextText:e,disabled:t}=this.props,{nextDisabled:n}=this.state,s=n||t,r=M({[`${Z}-item`]:!0,[`${Z}-item-disabled`]:s,[`${Z}-next`]:!0});return b.createElement("li",{role:"button","aria-disabled":!!s,"aria-label":"Next",onClick:o=>!s&&this.foundation.goNext(o),className:r,"x-semi-prop":"nextText"},e||b.createElement(js,{size:"large"}))}renderPageSizeSwitch(e){const{direction:t}=this.context,n=t==="rtl"?"bottomRight":"bottomLeft",{showSizeChanger:s,popoverPosition:r=n,disabled:o,popoverZIndex:l}=this.props,{pageSize:c}=this.state,d=M(`${Z}-switch`);if(!s)return null;const u=this.foundation.pageSizeInOpts(),h=e.pageSize,g=u.map(m=>b.createElement(Nd,{value:m,key:m},b.createElement("span",null,h.replace("${pageSize}",m.toString()))));return b.createElement("div",{className:d},b.createElement(Te,{"aria-label":"Page size selector",disabled:o,onChange:m=>this.foundation.changePageSize(m),value:c,key:c+h,position:r||"bottomRight",clickToHide:!0,zIndex:l,dropdownClassName:`${Z}-select-dropdown`},g))}renderQuickJump(e){const{showQuickJumper:t,disabled:n}=this.props,{quickJumpPage:s,total:r,pageSize:o}=this.state;if(!t)return null;const c=this.foundation._getTotalPageNumber(r,o)===1||n,d=M({[`${Z}-quickjump`]:!0,[`${Z}-quickjump-disabled`]:c});return b.createElement("div",{className:d},b.createElement("span",null,e.jumpTo),b.createElement(cl,{value:s,className:`${Z}-quickjump-input-number`,hideButtons:!0,disabled:c,onBlur:u=>this.foundation.handleQuickJumpBlur(),onEnterPress:u=>this.foundation.handleQuickJumpEnterPress(u.target.value),onChange:u=>this.foundation.handleQuickJumpNumberChange(u)}),b.createElement("span",null,e.page))}renderPageList(){const{pageList:e,currentPage:t,restLeftPageList:n,restRightPageList:s}=this.state,{popoverPosition:r,popoverZIndex:o,disabled:l}=this.props;return e.map((c,d)=>{const u=M(`${Z}-item`,{[`${Z}-item-active`]:t===c,[`${Z}-item-all-disabled`]:l,[`${Z}-item-all-disabled-active`]:t===c&&l}),h=b.createElement("li",{key:`${c}${d}`,onClick:()=>!l&&this.foundation.goPage(c,d),className:u,"aria-label":c==="..."?"More":`Page ${c}`,"aria-current":t===c?"page":!1},c);if(c==="..."&&!l){let g;return d<3?g=n:g=s,b.createElement(yt,{rePosKey:this.props.currentPage,trigger:"hover",content:this.renderRestPageList(g),key:`${c}${d}`,position:r,zIndex:o},h)}return h})}renderRestPageList(e){const{direction:t}=this.context,n=M(`${Z}-rest-item`),s=e.length,r=c=>{const{index:d,style:u}=c,h=e[d];return b.createElement("div",{role:"listitem",key:`${h}${d}`,className:n,onClick:()=>this.foundation.goPage(h,d),style:u,"aria-label":`${h}`},h)},o=32,l=s>=5?o*5:o*s;return b.createElement(Oi,{className:`${Z}-rest-list`,itemData:e,itemSize:o,width:78,itemCount:s,height:l,style:{direction:t}},r)}renderSmallPageSelect(e){const t=this.state.allPageNumbers,n=this.renderRestPageList(t);return b.createElement(yt,{content:n},e)}renderSmallPage(e){const t=this.props,{className:n,style:s,hideOnSinglePage:r,hoverShowPageSelect:o,showSizeChanger:l,disabled:c}=t,d=oo(t,["className","style","hideOnSinglePage","hoverShowPageSelect","showSizeChanger","disabled"]),u=M(`${Z}-small`,Z,n,{[`${Z}-disabled`]:c}),{currentPage:h,total:g,pageSize:m}=this.state,y=Math.ceil(g/m);if(y<2&&r&&!l)return null;const p=M({[`${Z}-item`]:!0,[`${Z}-item-small`]:!0,[`${Z}-item-all-disabled`]:c}),f=b.createElement("div",{className:p},h,"/",y," ");return b.createElement("div",Object.assign({className:u,style:s},this.getDataAttr(d)),this.renderPrevBtn(),o&&!c?this.renderSmallPageSelect(f):f,this.renderNextBtn(),this.renderQuickJump(e))}renderDefaultPage(e){const{total:t,pageSize:n}=this.state,s=this.props,{showTotal:r,className:o,style:l,hideOnSinglePage:c,showSizeChanger:d,disabled:u}=s,h=oo(s,["showTotal","className","style","hideOnSinglePage","showSizeChanger","disabled"]),g=M(o,`${Z}`,{[`${Z}-disabled`]:u}),m=`${Z}-total`;if(Math.ceil(t/n)<2&&c&&!d)return null;const p=Math.ceil(t/n),f=e.total.replace("${total}",p.toString());return b.createElement("ul",Object.assign({className:g,style:l},this.getDataAttr(h)),r?b.createElement("span",{className:m},f):null,this.renderPrevBtn(),this.renderPageList(),this.renderNextBtn(),this.renderPageSizeSwitch(e),this.renderQuickJump(e))}render(){const{size:e}=this.props;return b.createElement(Ee,{componentName:"Pagination"},t=>e==="small"?this.renderSmallPage(t):this.renderDefaultPage(t))}}sn.contextType=Ls;sn.propTypes={total:a.number,showTotal:a.bool,pageSize:a.number,pageSizeOpts:a.array,size:a.string,currentPage:a.number,defaultCurrentPage:a.number,onPageChange:a.func,onPageSizeChange:a.func,onChange:a.func,prevText:a.node,nextText:a.node,showSizeChanger:a.bool,popoverZIndex:a.number,popoverPosition:a.string,style:a.object,className:a.string,hideOnSinglePage:a.bool,hoverShowPageSelect:a.bool,showQuickJumper:a.bool,disabled:a.bool,preventPageChangeOnPageSizeChange:a.bool};sn.defaultProps={total:1,popoverZIndex:ci.DEFAULT_Z_INDEX,showTotal:!1,pageSize:null,pageSizeOpts:Vs.PAGE_SIZE_OPTION,defaultCurrentPage:1,size:"default",onPageChange:H,onPageSizeChange:H,onChange:H,showSizeChanger:!1,className:"",hideOnSinglePage:!1,showQuickJumper:!1,disabled:!1,preventPageChangeOnPageSizeChange:!1};var Gn,io;function kd(){if(io)return Gn;io=1;var i=Jo(),e=1/0;function t(n){var s=n==null?0:n.length;return s?i(n,e):[]}return Gn=t,Gn}var Ld=kd();const Md=te(Ld);var Yn,ao;function jd(){if(ao)return Yn;ao=1;var i=Ds();function e(t,n){var s;return i(t,function(r,o,l){return s=n(r,o,l),!s}),!!s}return Yn=e,Yn}var Xn,lo;function zd(){if(lo)return Xn;lo=1;var i=Ha(),e=nt(),t=jd(),n=_t(),s=Ns();function r(o,l,c){var d=n(o)?i:t;return c&&s(o,l,c)&&(l=void 0),d(o,e(l,3))}return Xn=r,Xn}var Fd=zd();const Nt=te(Fd);var Zn,co;function Kd(){if(co)return Zn;co=1;var i=Ds();function e(t,n){var s=[];return i(t,function(r,o,l){n(r,o,l)&&s.push(r)}),s}return Zn=e,Zn}var Qn,uo;function $d(){if(uo)return Qn;uo=1;var i=Wa(),e=Kd(),t=nt(),n=_t();function s(r,o){var l=n(r)?i:e;return l(r,t(o,3))}return Qn=s,Qn}var Bd=$d();const Je=te(Bd);var Jn,ho;function Hd(){if(ho)return Jn;ho=1;var i=As();function e(t,n,s){s=typeof s=="function"?s:void 0;var r=s?s(t,n):void 0;return r===void 0?i(t,n,void 0,s):!!r}return Jn=e,Jn}var Wd=Hd();const Ud=te(Wd),ce={PREFIX:`${X}-table`},B={SIZE_SMALL:"small",SIZE_MIDDLE:"middle",SIZES:["small","default","middle"],LAYOUTS:["","auto","fixed"],PAGINATION_POSITIONS:["bottom","top","both"],SORT_DIRECTIONS:["ascend","descend"],FIXED_SET:[!1,!0,"left","right"],ALIGNS:["left","right","center"],DEFAULT_KEY_COLUMN_SELECTION:"column-selection",DEFAULT_KEY_COLUMN_EXPAND:"column-expand",DEFAULT_KEY_COLUMN_TITLE:"column-title",DEFAULT_KEY_COLUMN_SORTER:"column-sorter",DEFAULT_KEY_COLUMN_FILTER:"column-filter",DEFAULT_KEY_COLUMN_SCROLLBAR:"column-scrollbar",DEFAULT_COMPONENTS:{body:{cell:"td"}},EXPAND_RELATED_PROPS:["expandedRowRender","dataSource","hideExpandedColumn","childrenRecordName","rowExpandable"]},st=1,Gs=0,$i=16,Bi=16,Hi=12,Wi=12,Ui=8,Vi=8,Ys=20,po=Ys+st+Gs+$i+Bi,Vd=$i+Bi+st,fo=Ys+st+Gs+Hi+Wi,qd=Hi+Wi+st,go=Ys+st+Gs+Vi+Ui,Gd=Ui+Vi+st,ne={DEFAULT_PAGE_SIZE:10,DEFAULT_WIDTH_COLUMN_EXPAND:60,DEFAULT_WIDTH_COLUMN_SELECTION:60,DEFAULT_INDENT_WIDTH:20,DEFAULT_CELL_PADDING_LEFT:16,DEFAULT_CELL_PADDING_RIGHT:16,DEFAULT_CELL_BORDER_WIDTH_LEFT:1,DEFAULT_CELL_BORDER_WIDTH_RIGHT:1,DEFAULT_VIRTUALIZED_SECTION_ROW_HEIGHT:po,DEFAULT_VIRTUALIZED_ROW_HEIGHT:po,DEFAULT_VIRTUALIZED_ROW_MIN_HEIGHT:Vd,DEFAULT_VIRTUALIZED_SECTION_ROW_MIDDLE_HEIGHT:fo,DEFAULT_VIRTUALIZED_ROW_MIDDLE_HEIGHT:fo,DEFAULT_VIRTUALIZED_ROW_MIDDLE_MIN_HEIGHT:qd,DEFAULT_VIRTUALIZED_SECTION_ROW_SMALL_HEIGHT:go,DEFAULT_VIRTUALIZED_ROW_SMALL_HEIGHT:go,DEFAULT_VIRTUALIZED_ROW_SMALL_MIN_HEIGHT:Gd};class qi{constructor(e){this._prefix=e}_isEmpty(e){return e==null||e===""}_baseLog(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"log";if(typeof console[e]=="function"){for(var t=arguments.length,n=new Array(t>1?t-1:0),s=1;s{if(t=x(i,n),t!=null)return!1}),t}function et(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,t=arguments.length>2?arguments[2]:void 0;e=e<0||typeof e!="number"?0:e,t=t>i.length||typeof t!="number"?i.length:t;let n=0;return le(i,(s,r)=>{r>=e&&r2&&arguments[2]!==void 0?arguments[2]:["key"];const n=Je(i,r=>r.fixed===!0||r.fixed==="left"),s=Ze(n,r=>t.every(o=>r[o]!=null&&r[o]===e[o]));return n.length>0&&s===n.length-1}function xs(i,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:["key"];const n=Je(i,r=>r.fixed==="right"),s=Ze(n,r=>t.every(o=>r[o]!=null&&r[o]===e[o]));return n.length>0&&s===0}function kt(i){return["left",!0].includes(x(i,"fixed"))}function Lt(i){return["right"].includes(x(i,"fixed"))}function Xd(i){return[B.DEFAULT_KEY_COLUMN_EXPAND,B.DEFAULT_KEY_COLUMN_SCROLLBAR,B.DEFAULT_KEY_COLUMN_SELECTION].includes(i)}function Gi(i){return x(i,"key")===B.DEFAULT_KEY_COLUMN_EXPAND}function Zd(i){return x(i,"key")===B.DEFAULT_KEY_COLUMN_SCROLLBAR}function Qd(i){return x(i,"key")===B.DEFAULT_KEY_COLUMN_SELECTION}function Xs(i){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[B.DEFAULT_KEY_COLUMN_SCROLLBAR];return Je(i,t=>!e.includes(t.key))}function De(i,e){return e===void 0&&(e="key"),typeof e=="function"?e(i):x(i,e)}function es(i,e){return e!=null&&Kt(i,e)}function Jd(i,e){return e!==null&&i.has(e)}function eu(i,e){return e!==null&&i.has(e)}function bo(i,e,t){return t===void 0&&(t="key"),We(i,n=>e!=null&&e!==""&&De(n,t)===e)}function tu(i,e){return e===void 0&&(e="children"),x(i,e)}function Yi(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0;return e===void 0&&(e="__expanded_row"),i+e}function nu(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;const t={};return i==="small"?(t.height=e?ne.DEFAULT_VIRTUALIZED_SECTION_ROW_SMALL_HEIGHT:ne.DEFAULT_VIRTUALIZED_ROW_SMALL_HEIGHT,t.minHeight=ne.DEFAULT_VIRTUALIZED_ROW_SMALL_MIN_HEIGHT):i==="middle"?(t.height=e?ne.DEFAULT_VIRTUALIZED_SECTION_ROW_MIDDLE_HEIGHT:ne.DEFAULT_VIRTUALIZED_ROW_MIDDLE_HEIGHT,t.minHeight=ne.DEFAULT_VIRTUALIZED_ROW_MIDDLE_MIN_HEIGHT):(t.height=e?ne.DEFAULT_VIRTUALIZED_SECTION_ROW_HEIGHT:ne.DEFAULT_VIRTUALIZED_ROW_HEIGHT,t.minHeight=ne.DEFAULT_VIRTUALIZED_ROW_MIN_HEIGHT),t}function Ye(i){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"children";const t=[];if(Array.isArray(i)&&i.length)for(const n of i)Array.isArray(n[e])&&n[e].length?t.push(...Ye(n[e],e)):(ou(n),t.push(n));return t}function Wt(i){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"children",t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;const n=[];return le(i,(s,r)=>{if(s.key==null){const o=s.dataIndex||r;s.key=`${t}-${o}`}Array.isArray(s[e])&&s[e].length&&n.push(...s[e])}),n.length&&Wt(n,e,t+1),i}function Xi(i){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"children",n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;const s=[];return Array.isArray(i)&&i.length&&n<=e&&i.forEach(r=>{const o=r[t];Array.isArray(o)&&o.length&&n2&&arguments[2]!==void 0?arguments[2]:"children",n;return le(i,s=>{if(s&&s.key!=null&&!n&&s.key===e.key&&(n=s),s&&Array.isArray(s[t])&&!n&&(n=Mt(s[t],e,t)),n)return!1}),n}function su(i){const{expandedRowRender:e,dataSource:t,hideExpandedColumn:n,childrenRecordName:s,rowExpandable:r}=i,o=typeof e=="function";return n&&o||!o&&t.some(l=>{const c=x(l,s);return!!(Array.isArray(c)&&c.length||r(l))})}function Zi(i){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],t;const n=e.findIndex(s=>i.dataIndex===s.dataIndex?(t=Object.assign(Object.assign({},s),i),!0):!1);return n>-1?e.splice(n,1,t):e.push(t),[...e]}function ru(i,e){const t=[...e];for(const n of i)if(!Xt(n.width)){const s=n.key,r=Ze(t,o=>o.key===s);r!==-1&&(t[r].width=x(n,"width"))}return t}function Qi(i){let{dataSource:e,getCheckboxProps:t,childrenRecordName:n,rowKey:s}=i;const r=[];if(Array.isArray(e)&&e.length&&typeof t=="function")for(const o of e){const l=t(o),c=typeof s=="function"?s(o):x(o,s);l&&l.disabled&&r.push(c);const d=x(o,n);if(Array.isArray(d)&&d.length){const u=Qi({dataSource:d,getCheckboxProps:t});r.push(...u)}}return r}function ou(i){if(typeof i=="object"&&i!==null){const{filters:e,sorter:t,dataIndex:n,onFilter:s}=i,r=new qi("[@douyinfe/semi-ui Table]");(Array.isArray(e)||ue(s)||ue(t))&&Xt(n)&&r.warn("The column with sorter or filter must pass the 'dataIndex' prop")}}function iu(i){let{dataSource:e,childrenRecordName:t="children"}=i,n=!1;if(Array.isArray(e))for(const s of e){const r=x(s,t);if(Array.isArray(r)&&r.length){n=!0;break}}return n}function Ji(i,e){if(e==="rtl")switch(i){case"left":return"right";case"right":return"left";default:return i}return i}function au(i,e){if(e==="rtl")switch(i){case"left":return"flex-end";case"right":return"flex-start";default:return i}else switch(i){case"left":return"flex-start";case"right":return"flex-end";default:return i}}function Zs(i){return i===!0||x(i,"showTitle",!0)}class lu{constructor(e){this._state=Object.assign({},e),this._listeners=[]}subscribe(e){return this._listeners.push(e),()=>{const n=this._listeners.indexOf(e);n>-1&&this._listeners.splice(n,1)}}setState(e){Object.assign(this._state,Object.assign({},e));for(const t of this._listeners)typeof t=="function"&&t(this._state)}getState(){return this._state}}var cu=Ua();const wt=te(cu);var ts,yo;function du(){if(yo)return ts;yo=1;function i(e,t,n,s){for(var r=n-1,o=e.length;++r-1;)p!==c&&o.call(p,f,1),o.call(c,f,1);return c}return ns=l,ns}var ss,wo;function hu(){if(wo)return ss;wo=1;var i=uu();function e(t,n){return t&&t.length&&n&&n.length?i(t,n):t}return ss=e,ss}var rs,vo;function pu(){if(vo)return rs;vo=1;var i=ei(),e=hu(),t=i(e);return rs=t,rs}var fu=pu();const gu=te(fu);function mu(i){return new Set(i)}function bu(i,e){if(i===e&&(e=mu(e)),Pe(i)&&i.size&&Pe(e)&&e.size){for(const t of e)i.has(t)&&i.delete(t);return i}return i}function Co(i,e){if(i!==null&&i.length&&e!==null&&e.length){const t=new Set(i),n=new Set(e),s=bu(t,n);return Array.from(s)}return i}function yu(i){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"ascend";switch(e){case"descend":return(t,n)=>{const s=Number(i(t,n,e));return s!==0?-s:s};case"ascend":default:return(t,n)=>i(t,n,e)}}class vt extends ge{static initColumnsFilteredValueAndSorterOrder(e){return e.forEach(t=>{vt.initFilteredValue(t),vt.initSorterOrder(t)}),e}static initFilteredValue(e){const{defaultFilteredValue:t,filteredValue:n}=e;ft(n)&&(Array.isArray(t)&&t.length?e.filteredValue=t:e.filteredValue=[])}static initSorterOrder(e){const{defaultSortOrder:t,sortOrder:n,sorter:s}=e;s&&ft(n)&&(ft(t)?e.sortOrder=!1:e.sortOrder=t)}constructor(e){super(Object.assign({},e)),this.setPage=(s,r)=>{s=s||this._adapter.getCurrentPage();const o=this.getState("pagination"),{dataSource:l,pagination:c,disabledRowKeys:d,allRowKeys:u}=this.getCurrentPageData(null,Object.assign(Object.assign({},o),{currentPage:s,pageSize:r}));!this._pagerIsControlled()&&s>0&&(this._adapter.setDisabledRowKeys(d),this._adapter.setAllRowKeys(u),this._adapter.setPagination(c),this._adapter.setDataSource(l)),this._notifyChange(c,void 0,void 0,{changeType:"pagination"})},this.setCachedFilteredSortedDataSource=s=>{this._adapter.setCachedFilteredSortedDataSource(s);const r=this.getAllRowKeys(s);this._adapter.setCachedFilteredSortedRowKeys(r)},this.handleMouseDown=s=>{var r,o;this.mouseDownTarget={targetName:(r=s.target)===null||r===void 0?void 0:r.tagName,className:(o=s.target)===null||o===void 0?void 0:o.className}},this.isSortOrderValid=s=>B.SORT_DIRECTIONS.includes(s)||s===!1;const t=this._adapter.getHandleColumns(),n=this._adapter.getMergePagination();this.mouseDownTarget=null,this.memoizedWithFnsColumns=Ke(t,re),this.memoizedFilterColumns=Ke(Xs),this.memoizedFlattenFnsColumns=Ke(Ye),this.memoizedPagination=Ke(n,re)}init(){const e=[...this.getProp("dataSource")],{queries:t}=this._adapter.getStates(),n=this.getFilteredSortedDataSource(e,t),s=this.getAllDisabledRowKeys(n),r=this.getCurrentPageData(n);this.setAdapterPageData(r),this.initExpandedRowKeys(r),this.initSelectedRowKeys(r),this.setCachedFilteredSortedDataSource(n),this.setAllDisabledRowKeys(s)}initExpandedRowKeys(){let{groups:e}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{defaultExpandAllRows:t,defaultExpandedRowKeys:n=[],expandedRowKeys:s=[],dataSource:r=[],expandAllRows:o,defaultExpandAllGroupRows:l,expandAllGroupRows:c}=this.getProps(),d=[];t||o?this._addNoDuplicatedItemsToArr(d,this.getAllRowKeys(r),e&&wt(e)&&e.size?Array.from(e.keys()):[]):l||c?this._addNoDuplicatedItemsToArr(d,s,e&&wt(e)&&e.size?Array.from(e.keys()):[]):Array.isArray(n)&&n.length?this._addNoDuplicatedItemsToArr(d,n):Array.isArray(s)&&s.length&&this._addNoDuplicatedItemsToArr(d,s),this._adapter.setExpandedRowKeys(d)}initSelectedRowKeys(e){let{disabledRowKeys:t}=e;const n=this.getProp("rowSelection"),s=[];if(n){const r=x(n,"selectedRowKeys"),o=x(n,"defaultSelectedRowKeys");Array.isArray(r)?this._addNoDuplicatedItemsToArr(s,r):Array.isArray(o)&&this._addNoDuplicatedItemsToArr(s,o),Array.isArray(t)&&t.length&&gu(s,...t),this._adapter.setSelectedRowKeys(s)}}getFilteredSortedDataSource(e,t){const n=this.filterDataSource(e,t.filter(r=>{const o=r.filteredValue?r.filteredValue:r.defaultFilteredValue;return ue(r.onFilter)&&Array.isArray(o)&&o.length}));return this.sortDataSource(n,t.filter(r=>r&&ue(r.sorter)))}getCurrentPageData(e,t,n){const s=this._adapter.getCachedFilteredSortedDataSource();e=e??[...s],t=t??(this.getState("pagination")&&Object.assign({},this.getState("pagination"))),n=n??[...this.getState("queries")];let r;if(this.getProp("groupBy")!=null){const{groups:d,dataSource:u}=this.groupDataSource(e);e=u,r=d}t=this.normalizePagination(t,e),e=this.limitPageDataSource(e,t);const o=this.getAllDisabledRowKeys(e),l=this.getAllRowKeys(e);return{dataSource:e,groups:r,pagination:t,disabledRowKeys:o,allRowKeys:l,queries:n}}groupDataSource(e,t){t=t??this.getProp("groupBy");const n=new Map,s=[];return t!=null&&le(e,(r,o)=>{const l=typeof t=="function"?t(r):x(r,t);if(l!=null&&l!==""){const c=this.getRecordKey(r);let d=n.get(l);Pe(d)?d.add(c):(d=new Set([c]),n.set(l,d))}}),n&&n.size?n.forEach((r,o)=>{Pe(r)&&r.forEach(l=>{s.push(this._getRecord(l))})}):s.push(...e),{groups:n,dataSource:s}}sortDataSource(e,t){return le(t,n=>{const{sorter:s,sortOrder:r,defaultSortOrder:o,sortChildrenRecord:l}=n,c=this.isSortOrderValid(r)?r:o;if(ue(s)&&c&&B.SORT_DIRECTIONS.includes(c)){if(l){const d=this.getProp("childrenRecordName");e=e&&e.map(u=>{const h=this._getRecordChildren(u);return Array.isArray(h)&&h.length?Object.assign(Object.assign({},u),{[d]:this.sortDataSource(h,[n])}):u})}return e.sort(yu(s,c)),!1}}),e}filterDataSource(e,t){let n=null,s=!1;const r=this.getProp("childrenRecordName");return le(t,o=>{const{onFilter:l,filteredValue:c,filterChildrenRecord:d,defaultFilteredValue:u}=o,h=Array.isArray(c)?c:u;typeof l=="function"&&Array.isArray(h)&&h.length&&(s=!0,n===null?n=new Map:(e=Array.from(n&&n.values()),n=new Map),le(e,g=>{le(h,m=>{const y=x(g,r),p=this.getRecordKey(g);let f;if(Array.isArray(y)&&y.length&&d&&(f=this.filterDataSource(y,[o])),Array.isArray(f)&&f.length){if(p!=null){const S=x(n.get(p),r,[]);n.set(p,Object.assign(Object.assign({},g),{[r]:f.reduce((v,w)=>(v.find(_=>this.getRecordKey(_)===this.getRecordKey(w))==null&&v.push(w),v),[...S])}))}}else l(m,g)&&n.set(p,g)})}))}),s&&(e=Array.from(n&&n.values())),e}limitPageDataSource(e,t){e=e??this.getProp("dataSource"),t=t??this.getState("pagination");let n=e;const s=x(t,"currentPage");if(this.getProp("pagination")!==!1&&s&&e&&t&&!this._pagerIsControlled()){const{pageSize:r=ne.DEFAULT_PAGE_SIZE}=t,o=(s-1)*r,l=s*r;n=gd(e,o,l)}return n}normalizePagination(e,t){e=e??this._getPagination(),t=t??this._getDataSource();const n=this.getProp("pagination");if(e&&(e=typeof e=="object"?Object.assign({},e):{},e=Zt({total:t&&t.length||0,pageSize:ne.DEFAULT_PAGE_SIZE,currentPage:x(n,"defaultCurrentPage",1),position:B.PAGINATION_POSITIONS[0]},e),!this._pagerIsControlled())){const s=x(n,"total",t.length),{currentPage:r,pageSize:o}=e,l=Math.ceil(s/o);e.total=s,r>l&&(e.currentPage=1)}return e}setAdapterPageData(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{pagination:t,dataSource:n,disabledRowKeys:s,allRowKeys:r,groups:o}=e;this._adapter.setDisabledRowKeys(s),this._adapter.setAllRowKeys(r),this._adapter.setPagination(t),this._adapter.setGroups(o),this._adapter.setDataSource(n)}destroy(){}setAllDisabledRowKeys(e){this._adapter.setAllDisabledRowKeys(e)}handleClick(e){}handleMouseEnter(e){}handleMouseLeave(e){}stopPropagation(e){this._adapter.stopPropagation(e)}_addNoDuplicatedItemsToArr(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];for(var t=arguments.length,n=new Array(t>1?t-1:0),s=1;se!=null&&e!==""&&this.getRecordKey(t)===e)}_getRecordChildren(e){return x(e,this.getProp("childrenRecordName"))}_getPagination(){return this.getState("pagination")||{}}_getAllFilters(e){e=e||this.getState("queries");const t=[];return le(e,n=>{Array.isArray(n.filteredValue)&&(n.filteredValue.length||this._filterIsControlled(n.dataIndex))&&t.push(n)}),t}_getAllSorters(e){return e=e||this.getState("queries"),Je(e,t=>t.sorter&&t.sortOrder)}_filterQueries(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:["dataIndex"];t=t??this.getState("queries");const s=[],r=[];return le(t,(o,l)=>{Nt(n,d=>d&&e[d]!=null&&e[d]===o[d])&&(s.push(o),r.push(l))}),{filteredQueries:s,filteredIndexes:r}}_mergeToQueries(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:["dataIndex"];t=t??this.getState("queries"),t=[...t],e=Object.assign({},e);const{filteredQueries:s,filteredIndexes:r}=this._filterQueries(e,t,n);return le(s,(o,l)=>{t[r[l]]=Object.assign({},e)}),t}getRecordKey(e){if(!e)return;const t=this.getProp("rowKey");return typeof t=="function"?t(e):x(e,t)}isEmpty(e){return e=e??this.getProp("dataSource"),!(Array.isArray(e)&&e.length>0)}buildKeyEntities(e){e=e??this._getDataSource();const t=this.getProp("childrenRecordName"),n=this.getProp("rowKey"),s=l=>l.map(c=>{const d=typeof n=="function"?n(c):x(c,n),u=x(c,t),h=Object.assign({key:d},c);return Array.isArray(u)&&u.length&&(h.children=s(u)),h}),r=s(e),{keyEntities:o}=rc(r,{key:"key",children:"children"});return o}calcCheckedKeysForSelect(e,t,n,s){const r=this._adapter.getKeyEntities(),o=String(e);return!r||!r[o]?(t?n.add(o):n.delete(o),{checkedKeys:n,halfCheckedKeys:s}):t?Tr(o,r,n,s):Ir(o,r,n,s)}handleSelectRow(e,t,n){if(this.stopPropagation(n),typeof t=="boolean"&&e!=null){const s=this._adapter.getCheckRelation(),r=this._getSelectedRowKeys(),o=[...this._adapter.getHalfCheckedRowKeys()||[]];let l=-1;const c=this.getSelectedRows(null,[e])[0];let d;if(s==="related"){this._adapter.getKeyEntities();const u=new Set(r.map(f=>String(f))),h=new Set(o.map(f=>String(f))),{checkedKeys:g,halfCheckedKeys:m}=this.calcCheckedKeysForSelect(String(e),t,u,h),y=[...g],p=[...m];d=this.getSelectedRows(null,y),this._adapter.setHalfCheckedRowKeys(p),this._selectionIsControlled()||this._adapter.setSelectedRowKeys(y),this._adapter.notifySelect(c,t,d,n),this._adapter.notifySelectionChange(y,d)}else(l=r.indexOf(e))>-1&&t===!1?(r.splice(l,1),d=this.getSelectedRows(null,r),this._selectionIsControlled()||this._adapter.setSelectedRowKeys(r),this._adapter.notifySelect(c,t,d,n),this._adapter.notifySelectionChange(r,d)):r.indexOf(e)===-1&&t===!0&&(r.push(e),d=this.getSelectedRows(null,r),this._selectionIsControlled()||this._adapter.setSelectedRowKeys(r),this._adapter.notifySelect(c,t,d,n),this._adapter.notifySelectionChange(r,d))}}handleSelectAllRow(e,t){if(this.stopPropagation(t),typeof e=="boolean"){const n=this._adapter.getCheckRelation(),s=this._getSelectedRowKeys();let r=[...s];const o=this._getSelectedRowKeysSet();let l=[...this._adapter.getCachedFilteredSortedRowKeys()];const c=this._adapter.getAllDisabledRowKeys(),d=this._adapter.getAllDisabledRowKeysSet();let u;if(n==="related"){const h=this._adapter.getKeyEntities(),g=[...this._adapter.getHalfCheckedRowKeys()||[]];let m=new Set(r.map(v=>String(v))),y=new Set(g.map(v=>String(v)));if(e){const v=l.filter(w=>!d.has(w));for(const w of v){const _=String(w);if(!m.has(_)&&h&&h[_]){const O=Tr(_,h,m,y);m=O.checkedKeys,y=O.halfCheckedKeys}}u=v}else{const v=[...m];for(const w of v)if(h&&h[w]){const _=Ir(w,h,m,y);m=_.checkedKeys,y=_.halfCheckedKeys}u=[...s]}r=[...m];const p=[...y],f=this.getSelectedRows(null,u||[]),S=this.getSelectedRows(null,r||[]);this._adapter.setHalfCheckedRowKeys(p),this._selectionIsControlled()||this._adapter.setSelectedRowKeys(r),this._adapter.notifySelectAll(e,S,f,t),this._adapter.notifySelectionChange(r,S)}else{if(e){for(const m of l)!d.has(m)&&!o.has(m)&&r.push(m);l=Co(l,[...c,...s]),u=[...l]}else r=Co(r,l),u=[...s];const h=this.getSelectedRows(null,u||[]),g=this.getSelectedRows(null,r||[]);this._selectionIsControlled()||this._adapter.setSelectedRowKeys(r),this._adapter.notifySelectAll(e,g,h,t),this._adapter.notifySelectionChange(r,g)}}}getSelectedRows(e,t,n){e=e??this._getDataSource(),t=t??this._getSelectedRowKeys(),Pe(n)||(n=new Set(t));const s=this.getProp("childrenRecordName"),r=[];if(Pe(n)&&n.size&&Array.isArray(e)&&e.length&&(r.push(...e.filter(o=>n.has(this.getRecordKey(o)))),r.lengtht.has(n)).length)}handleRowExpanded(e,t,n){this.stopPropagation(n);const s=[...this.getState("expandedRowKeys")],r=s.indexOf(t),o=typeof t=="string"||typeof t=="number";o&&e&&r===-1?s.push(t):o&&!e&&r>-1&&s.splice(r,1),this._rowExpansionIsControlled()||this._adapter.setExpandedRowKeys(s);const l=this.getSelectedRows(null,s);let c=this.getSelectedRows(null,[t])[0];const d=this._getGroups();if(d){d.has(t)&&(c={groupKey:t});for(let u=0,h=s.length;ur!=null&&!t.has(r));if(s&&s.length){for(const r of s)if(r!=null&&!e.has(r))return!1;return!0}else return n.length&&n.every(o=>e.has(o))||!1}allIsNotSelected(e,t){for(const n of t)if(n!=null&&Array.isArray(e)&&e.includes(n))return!0;return!1}formatPaginationInfo(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"",n="";const s=x(this.getProp("pagination"),"formatPageText"),{total:r,pageSize:o,currentPage:l}=e,c=Math.min((l-1)*o+1,r),d=Math.min(l*o,r);return(s||s!==!1&&t&&r>0)&&(n=typeof s=="function"?s({currentStart:c,currentEnd:d,total:r}):t.replace("${currentStart}",c).replace("${currentEnd}",d).replace("${total}",r)),n}toggleShowFilter(e,t){let n=this.getQuery(e);const s=t;n=Object.assign(Object.assign({},n),{filterDropdownVisible:s}),this._filterShowIsControlled(),this._adapter.notifyFilterDropdownVisibleChange(s,e)}handleFilterSelect(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=this.getQuery(e),s=[...this._adapter.getState("queries")];const{filteredValue:r}=t;n=Object.assign(Object.assign({},n),{filteredValue:r}),s=Zi(n,s);const o=this._mergeToQueries(n,null),l=this._getAllFilters(o);this._filterIsControlled(e)||(this._adapter.setQueries(s),this.handleClickFilterOrSorter(s)),this._notifyChange(null,l,void 0,{changeType:"filter"})}handleSort(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;var n,s,r,o;if(t){if(this.mouseDownTarget&&((n=this.mouseDownTarget)===null||n===void 0?void 0:n.targetName)==="SPAN"&&(!((o=(r=(s=this.mouseDownTarget)===null||s===void 0?void 0:s.className)===null||r===void 0?void 0:r.includes)===null||o===void 0)&&o.call(r,"react-resizable-handle")))return;this.mouseDownTarget=null}const{dataIndex:l}=e;let c=this.getState("queries"),d=null;c=[...c],le(c,(u,h,g)=>{if(u.sorter){const m=Object.assign({},u),y=x(m,"sortOrder"),p=x(m,"defaultSortOrder",!1);let f=this.isSortOrderValid(y)?y:p;l&&l===m.dataIndex?f===B.SORT_DIRECTIONS[0]?f=B.SORT_DIRECTIONS[1]:f===B.SORT_DIRECTIONS[1]?f=!1:f=B.SORT_DIRECTIONS[0]:f=!1,g[h]=Object.assign(Object.assign({},m),{sortOrder:f}),l===m.dataIndex&&(d=g[h])}}),this._sorterIsControlled(l)||(this._adapter.setQueries(c),this.handleClickFilterOrSorter(c)),this._notifyChange(null,null,d,{changeType:"sorter"})}handleClickFilterOrSorter(e){const t=[...this.getProp("dataSource")],n=this.getFilteredSortedDataSource(t,e),s=this.getAllDisabledRowKeys(n);this.setCachedFilteredSortedDataSource(n),this.setAllDisabledRowKeys(s);const r=this.getCurrentPageData(n);this.setAdapterPageData(r)}getQuery(e,t){if(t=t||this.getState("queries"),e!=null)return We(t,n=>n.dataIndex===e)}getCellWidths(e,t,n){return this._adapter.getCellWidths(e,t,n)}setHeadWidths(e,t){return this._adapter.setHeadWidths(e,t)}getHeadWidths(e){return this._adapter.getHeadWidths(e)}mergedRowExpandable(e){return this._adapter.mergedRowExpandable(e)}setBodyHasScrollbar(e){this._adapter.setBodyHasScrollbar(e)}}const ea={align:a.oneOf(B.ALIGNS),className:a.string,colSpan:a.number,dataIndex:a.string,defaultSortOrder:a.oneOf(B.SORT_DIRECTIONS),filterChildrenRecord:a.bool,filterDropdownProps:a.object,filterDropdown:a.node,filterDropdownVisible:a.bool,filterIcon:a.func,filterMultiple:a.bool,filteredValue:a.arrayOf(a.any),filters:a.array,fixed:a.oneOf(B.FIXED_SET),onCell:a.func,onFilter:a.func,onFilterDropdownVisibleChange:a.func,onHeaderCell:a.func,onSorterChange:a.func,render:a.func,renderFilterDropdownItem:a.func,sortChildrenRecord:a.bool,sortDirections:a.arrayOf(a.string),sortOrder:a.oneOfType([a.bool,a.string]),sorter:a.oneOfType([a.bool,a.func]),title:a.oneOfType([a.func,a.node]),useFullRender:a.bool,width:a.oneOfType([a.number,a.string]),showSortTip:a.bool};class rn extends b.PureComponent{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(e)}render(){return null}}rn.propTypes=Object.assign({},ea);rn.elementType="Column";function Ut(i){if(i){const e=[];return b.Children.forEach(i,t=>{if(b.isValidElement(t)&&(t.type===rn||x(t,"type.elementType")==="Column")){const n=ye(t.props,["children"]);Array.isArray(t.props.children)&&t.props.children.length&&(n.children=Ut(t.props.children)),e.push(Object.assign({key:t.key},n))}}),e}return[]}const ke=b.createContext({headWidths:[],setHeadWidths:H,handleRowExpanded:H}),Su=i=>{let{children:e,anyColumnFixed:t,flattenedColumns:n,tableWidth:s,headWidths:r,setHeadWidths:o,getHeadWidths:l,getCellWidths:c,handleRowExpanded:d,renderExpandIcon:u,renderSelection:h,getVirtualizedListRef:g,setBodyHasScrollbar:m,direction:y,handleRowSelection:p,headerStyle:f,rowSpanHover:S}=i;const v=L.useMemo(()=>({anyColumnFixed:t,flattenedColumns:n,renderExpandIcon:u,renderSelection:h,setHeadWidths:o,getHeadWidths:l,getCellWidths:c,headWidths:r,tableWidth:s,handleRowExpanded:d,getVirtualizedListRef:g,setBodyHasScrollbar:m,direction:y,handleRowSelection:p,headerStyle:f,rowSpanHover:S}),[t,n,u,h,o,l,c,r,s,d,g,m,y,p,f,S]);return b.createElement(ke.Provider,{value:v},e)};class wu extends ge{handleChange(e){const t=e.target.checked;this._adapter.notifyChange(t,e)}}class Vt extends he{get adapter(){var e=this;return Object.assign(Object.assign({},super.adapter),{notifyChange:function(){return e.props.onChange(...arguments)}})}constructor(e){super(e),this.handleChange=t=>this.foundation.handleChange(t),this.foundation=new wu(this.adapter)}render(){const{selected:e,getCheckboxProps:t,indeterminate:n,disabled:s,prefixCls:r,className:o}=this.props,l=this.props["aria-label"];let c={onChange:this.handleChange,disabled:s,indeterminate:n,checked:e};typeof t=="function"&&(c=Object.assign(Object.assign({},c),t()));const d=M(`${r}-selection-wrap`,{[`${r}-selection-disabled`]:s},o);return b.createElement("span",{className:d},b.createElement(xe,Object.assign({"aria-label":l},c)))}}Vt.propTypes={columnTitle:a.string,getCheckboxProps:a.func,type:a.string,onChange:a.func,selected:a.bool,disabled:a.bool,indeterminate:a.bool,prefixCls:a.string,className:a.string,"aria-label":a.string};Vt.defaultProps={disabled:!1,onChange:H,prefixCls:ce.PREFIX};class Qs extends L.PureComponent{render(){const{pagination:e,prefixCls:t,info:n,renderPagination:s}=this.props,r=x(e,"total"),o=s&&ue(s)?s(e):null;return b.createElement("div",{className:`${t}-pagination-outer`},L.isValidElement(o)?o:b.createElement(b.Fragment,null,b.createElement("span",{className:`${t}-pagination-info`},n),b.createElement("span",{className:`${t}-pagination-wrapper`},r>0?b.createElement(sn,Object.assign({},e,{key:x(e,"pageSize","pagination")})):null)))}}Qs.propTypes={style:a.object,prefixCls:a.string,pagination:a.object,info:a.oneOfType([a.string,a.node]),renderPagination:a.func};Qs.defaultProps={prefixCls:ce.PREFIX};var vu=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);s1&&arguments[1]!==void 0?arguments[1]:null,t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,n=arguments.length>3?arguments[3]:void 0;const{filterMultiple:s=!0,filters:r=[],filteredValue:o=[],filterDropdownVisible:l,onSelect:c=H,onFilterDropdownVisibleChange:d=H,trigger:u="click",position:h="bottom",renderFilterDropdown:g,renderFilterDropdownItem:m,filterConfirmMode:y="immediate",tempFilteredValue:p,setTempFilteredValue:f,confirm:S,clear:v,close:w,reset:_}=i??{},O=y==="confirm"?p??[]:o,I=Ne(i,["tempFilteredValue","setTempFilteredValue","confirm","clear","close","filters"]),E=typeof g=="function"?g(I):b.createElement(Fe.Menu,null,Array.isArray(r)&&r.map((A,F)=>{const K=Q=>{const pe=Q&&Q.nativeEvent;if(pe&&(pe.stopImmediatePropagation(),pe.stopPropagation(),pe.preventDefault()),y==="confirm"){let de=[...p??[...o]];de.includes(A.value);const ie=de.indexOf(A.value);ie>-1?de.splice(ie,1):s?de.push(A.value):de=[A.value],f==null||f(de)}else{let oe=[...o];const de=oe.includes(A.value),ie=oe.indexOf(A.value);return ie>-1?oe.splice(ie,1):s?oe.push(A.value):oe=[A.value],c({value:A.value,filteredValue:oe,included:!de,domEvent:pe})}},z=O.includes(A.value),{text:q}=A,{value:V}=A,W=`${t}_${F}`,G=typeof m=="function"?m({onChange:K,filterMultiple:s,value:V,text:q,checked:z,filteredValue:O,level:t}):null;let se=G&&b.isValidElement(G)?b.cloneElement(G,{key:W}):b.createElement(Fe.Item,{key:W,onClick:K},s?b.createElement(xe,{checked:z},q):b.createElement(dl,{checked:z},q));if(Array.isArray(A.children)&&A.children.length){const Q=Object.assign(Object.assign({},i),{filters:A.children,trigger:"hover",position:"right"});delete Q.filterDropdownVisible,se=ta(Q,se,t+1,n)}return se}),y==="confirm"&&t===0&&b.createElement("div",{style:{padding:"8px 12px",borderTop:"1px solid var(--semi-color-border)",display:"flex",justifyContent:"flex-end"}},b.createElement(Qt,null,b.createElement(Ft,{size:"small",onClick:()=>_==null?void 0:_()},(n==null?void 0:n.resetFilter)||"Reset"),b.createElement(Ft,{size:"small",theme:"solid",onClick:()=>S==null?void 0:S({closeDropdown:!0})},(n==null?void 0:n.confirmFilter)||"OK")))),{filterDropdownVisible:k}=i,N=vu(i,["filterDropdownVisible"]),P=Object.assign(Object.assign({},N),{trigger:u,position:h,render:E,onVisibleChange:A=>d(A)});return l!=null&&(P.visible=l),b.createElement(Fe,Object.assign({},P,{key:`Dropdown_level_${t}`,className:`${ce.PREFIX}-column-filter-dropdown`}),e)}function Cu(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{prefixCls:e=ce.PREFIX,filteredValue:t,filterIcon:n="filter",filterDropdownProps:s,onSelect:r,filterDropdownVisible:o,renderFilterDropdown:l,onFilterDropdownVisibleChange:c,filterConfirmMode:d="immediate"}=i;let{filterDropdown:u=null}=i;const h=typeof o<"u",m=!h&&(typeof l=="function"||d==="confirm"),[y,p]=L.useState(t),[f,S]=L.useState(t),v=m?!1:o,[w,_]=L.useState(v);L.useEffect(()=>{typeof o<"u"&&_(o)},[o]),L.useEffect(()=>{p(t)},[t]);const O=function(){let z=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const q=(z==null?void 0:z.filteredValue)||y;re(q,t)||r({filteredValue:q}),z.closeDropdown&&_(!1)},I=function(){let z=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};p([]),r({filteredValue:[]}),z.closeDropdown&&_(!1)},E=()=>{_(!1)},k=()=>{p(f)},N=z=>{m&&_(z),z&&d==="confirm"&&(S(t),p(t)),c(z)},P={tempFilteredValue:y,setTempFilteredValue:p,confirm:O,clear:I,close:E,reset:k,filters:i.filters},A=M(`${e}-column-filter`,{on:Array.isArray(t)&&t.length});let F;typeof n=="function"?F=n(Array.isArray(t)&&t.length>0):L.isValidElement(n)?F=n:F=b.createElement("div",{className:A},"​",b.createElement(xl,{role:"button","aria-label":"Filter data with this column","aria-haspopup":"listbox",tabIndex:-1,size:"default"}));const K=Object.assign(Object.assign(Object.assign(Object.assign({},i),s),P),{filterDropdownVisible:h?o:w,onFilterDropdownVisibleChange:N});return b.createElement(Ee,{componentName:"Table"},z=>b.isValidElement(u)?u:ta(K,F,0,z))}var os,_o;function _u(){if(_o)return os;_o=1;var i=qa(),e=4;function t(n){return i(n,e)}return os=t,os}var Ou=_u();const Ru=te(Ou);let is,as;const Oo={position:"absolute",top:"-9999px",width:"50px",height:"50px"};function Eu(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"vertical";if(typeof document>"u"||typeof window>"u")return 0;const e=i==="vertical";if(e&&is)return is;if(!e&&as)return as;const t=document.createElement("div");Object.keys(Oo).forEach(s=>{t.style[s]=Oo[s]}),e?t.style.overflowY="scroll":t.style.overflowX="scroll",document.body.appendChild(t);let n=0;return e?(n=t.offsetWidth-t.clientWidth,is=n):(n=t.offsetHeight-t.clientHeight,as=n),document.body.removeChild(t),n}function na(i){return typeof i=="number"?i-ne.DEFAULT_CELL_PADDING_LEFT-ne.DEFAULT_CELL_PADDING_RIGHT-ne.DEFAULT_CELL_BORDER_WIDTH_LEFT-ne.DEFAULT_CELL_BORDER_WIDTH_RIGHT-Eu("vertical"):void 0}function Ro(i,e){return Zt({},{table:"table",header:{outer:"table",wrapper:"thead",row:"tr",cell:"th"},body:e?{outer:"div",wrapper:"div",row:"div",cell:"div",colgroup:{wrapper:"div",col:"div"}}:{outer:"table",wrapper:"tbody",row:"tr",cell:"td",colgroup:{wrapper:"colgroup",col:"col"}},footer:{wrapper:"tfoot",row:"tr",cell:"td"}},i)}const bt=new qi("[@douyinfe/semi-ui Table]");function Ts(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0;const s=[],r=n?we:Ru;return Bt(e,o=>{o=Object.assign({},o);const l=mo(o,t),c=l!=null&&We(i,d=>mo(d,t)===l);c?s.push(r(Object.assign(Object.assign({},c),o))):s.push(r(o))}),s}function sa(i){switch(i){case B.SORT_DIRECTIONS[0]:return B.SORT_DIRECTIONS[1];case B.SORT_DIRECTIONS[1]:return"cancelSort";default:return B.SORT_DIRECTIONS[0]}}class Js extends L.PureComponent{render(){const{prefixCls:e,onClick:t,sortOrder:n,style:s,title:r,sortIcon:o,showTooltip:l}=this.props,c="default",d=M(`${e}-column-sorter-up`,{on:n===B.SORT_DIRECTIONS[0]}),u=M(`${e}-column-sorter-down`,{on:n===B.SORT_DIRECTIONS[1]}),h={"aria-label":`Current sort order is ${n?`${n}ing`:"none"}`,"aria-roledescription":"Sort data with this column"},g=()=>{if(typeof o=="function")return o({sortOrder:n});{const m=b.createElement("div",{style:s,className:`${e}-column-sorter`},b.createElement("span",{className:`${d}`},b.createElement(Sl,{size:c})),b.createElement("span",{className:`${u}`},b.createElement(bl,{size:c})));if(l){let y=sa(n);return b.createElement(Ee,{componentName:"Table"},(p,f)=>b.createElement(ui,{content:p[y]},m))}return m}};return b.createElement("div",Object.assign({role:"button"},h,{tabIndex:-1,className:`${e}-column-sorter-wrapper`,onClick:t,onKeyPress:m=>Yt(m)&&t(m)}),r,g())}}Js.propTypes={className:a.string,style:a.object,onClick:a.func,prefixCls:a.string,sortOrder:a.oneOfType([a.string,a.bool]),sortIcon:a.func,showTooltip:a.bool};Js.defaultProps={prefixCls:ce.PREFIX,onClick:H,sortOrder:!1,showTooltip:!1};function xu(i){const{expanded:e,componentType:t="expand",onClick:n=H,onMouseEnter:s=H,onMouseLeave:r=H,expandIcon:o,prefixCls:l=ce.PREFIX,motion:c=!0}=i;let d;b.isValidElement(o)?d=o:typeof o=="function"?d=o(e):t==="tree"?d=e&&!c?b.createElement(Al,{size:"small"}):b.createElement(Nl,{size:"small"}):d=e&&!c?b.createElement(Ms,null):b.createElement(js,null);const u=L.useCallback(h=>{typeof n=="function"&&n(!e,h)},[e]);if(c){const h=d;d=b.createElement(hi,{animationState:e?"enter":"leave",startClassName:`${ce.PREFIX}-expandedIcon-${e?"show":"hide"}`},g=>{let{animationClassName:m}=g;return b.cloneElement(h,{className:(h.props.className||"")+" "+m})})}return b.createElement("span",{role:"button","aria-label":"Expand this row",tabIndex:-1,onClick:u,onMouseEnter:s,onMouseLeave:r,className:`${l}-expand-icon`,onKeyPress:h=>Yt(h)&&u(h)},d)}class on extends b.PureComponent{render(){const{columns:e,className:t,style:n,prefixCls:s,components:r}=this.props,o=x(r,"colgroup.wrapper","colgroup"),l=x(r,"colgroup.col","col"),c=Ye(e).map((u,h)=>{const g={};return u.width&&(g.width=u.width,g.minWidth=g.width),b.createElement(l,{className:M(`${s}-col`,u.className),key:u.key||u.dataIndex||h,style:g})}),d=M(`${s}-colgroup`,t);return b.createElement(o,{className:d,style:n},c)}}on.propTypes={columns:a.array,prefixCls:a.string,className:a.string,style:a.object,components:a.object};on.defaultProps={columns:[],prefixCls:ce.PREFIX};var Tu=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);s{if(this.headerNode=t,t&&this.context.setHeadWidths){const{prefixCls:n,row:s,index:r}=this.props,o=`.${n}-row-head`,l=t&&t.querySelectorAll&&t.querySelectorAll(o);this.context.setHeadWidths(Bt(l,(c,d)=>{let u=x(s,[d,"column","width"]);const h=x(s,[d,"column","key"]);return typeof u!="number"&&(u=c&&c.getBoundingClientRect().width||0),{width:u,key:h}}),r)}},this.headerNode=null}componentDidUpdate(e){e.columns!==this.props.columns&&this.headerNode&&this.cacheRef(this.headerNode)}render(){const{components:e,row:t,prefixCls:n,onHeaderRow:s,index:r,style:o,columns:l}=this.props,{getCellWidths:c,direction:d,headerStyle:u}=this.context,h=d==="rtl",g=Xi(l,r),m=c(g),y=x(e,"header.row","tr"),p=x(e,"header.cell","th"),f=s(l,r)||{};Ae(f,"className",M(x(f,"className"),`${n}-row`));const S=Bt(t,(v,w)=>{const{column:_}=v,O=Tu(v,["column"]),I=typeof _.onHeaderCell=="function"?_.onHeaderCell(_,w,r):{};let E=Object.assign(Object.assign({},u),I.style);if(_.align){const V=Ji(_.align,d);E=Object.assign(Object.assign({},E),{textAlign:V}),I.className=M(I.className,_.className,{[`${n}-align-${V}`]:!!V})}let k,N,P,A;if(h?(k=Lt(_),N=kt(_),P=xs(g,_),A=Es(g,_)):(k=kt(_),N=Lt(_),P=Es(g,_),A=xs(g,_)),I.className=M(`${n}-row-head`,_.className,I.className,{[`${n}-cell-fixed-left`]:k,[`${n}-cell-fixed-left-last`]:P,[`${n}-cell-fixed-right`]:N,[`${n}-cell-fixed-right-first`]:A,[`${n}-row-head-ellipsis`]:_.ellipsis,[`${n}-row-head-clickSort`]:_.clickToSort}),m.length&&g.length){const V=Ze(g,W=>W&&W.key!=null&&W.key===_.key);if(V>-1){if(kt(_)){const W=h?"right":"left";E=Object.assign(Object.assign({},E),{position:"sticky",[W]:et(m,0,V)})}else if(Lt(_)){const W=h?"left":"right";E=Object.assign(Object.assign({},E),{position:"sticky",[W]:et(m,V+1)})}}}Object.assign(O,{resize:_.resize});const F=ye(Object.assign(Object.assign({},O),I),["colStart","colEnd","hasSubColumns","parents","level"]),{rowSpan:K,colSpan:z}=F;if(K===0||z===0)return null;if(typeof _.clickToSort=="function")if(F.onClick){const V=F.onClick;F.onClick=W=>{V(W),_.clickToSort(W)}}else F.onClick=_.clickToSort;if(typeof _.mouseDown=="function")if(F.onMouseDown){const V=F.onMouseDown;F.onMouseDown=W=>{V(W),_.mouseDown(W)}}else F.onMouseDown=_.mouseDown;const q=b.createElement(p,Object.assign({role:"columnheader","aria-colindex":w+1},F,{style:E,key:_.key||_.dataIndex||w}));if(typeof _.clickToSort=="function"&&_.showSortTip===!0){let V=sa(_.sortOrder);return b.createElement(Ee,{componentName:"Table",key:_.key||_.dataIndex||w},(W,G)=>b.createElement(ui,{content:W[V]},q))}return q});return b.createElement(y,Object.assign({role:"row","aria-rowindex":r+1},f,{style:o,ref:this.cacheRef}),S)}}an.contextType=ke;an.propTypes={components:a.object,row:a.array,prefixCls:a.string,onHeaderRow:a.func,index:a.oneOfType([a.string,a.number]),style:a.object,columns:a.array,fixed:a.oneOfType([a.bool,a.string]),selectedRowKeysSet:a.instanceOf(Set).isRequired};an.defaultProps={onHeaderRow:H,prefixCls:ce.PREFIX,columns:[],components:{header:{wrapper:"thead",row:"tr",cell:"th"}}};function Iu(i){const e=[];function t(s,r){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,c=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;e[l]=e[l]||[];let d=r;return s.map(h=>{const g={key:h.key,className:h.className||"",children:ue(h.title)?h.title():h.title,column:h,colStart:d,level:c,parents:o};let m=1;const y=h.children;y&&y.length>0&&(m=t(y,d,[...o,g],l+1,c+1).reduce((S,v)=>S+v,0),g.hasSubColumns=!0),"colSpan"in h&&({colSpan:m}=h),"rowSpan"in h&&(g.rowSpan=h.rowSpan),h.key===B.DEFAULT_KEY_COLUMN_SCROLLBAR&&(g["x-type"]=B.DEFAULT_KEY_COLUMN_SCROLLBAR),g.colSpan=m,g.colEnd=g.colStart+m-1,e[l].push(g),d+=m;const p=h==null?void 0:h.ellipsis;return Zs(p)&&typeof g.children=="string"&&(g.title=g.children),m})}t(i,0);const n=e.length;for(let s=0;s{!("rowSpan"in r)&&!r.hasSubColumns&&(r.rowSpan=n-s)});return e}class er extends he{get adapter(){return Object.assign({},super.adapter)}render(){const{components:e,columns:t,prefixCls:n,fixed:s,onHeaderRow:r,forwardedRef:o,selectedRowKeysSet:l}=this.props,c=Iu(t),d=e.header.wrapper;return b.createElement(d,{className:`${n}-thead`,ref:o},c.map((u,h)=>b.createElement(an,{prefixCls:n,key:h,index:h,fixed:s,columns:t,row:u,components:e,onHeaderRow:r,selectedRowKeysSet:l})))}}er.propTypes={components:a.any,columns:a.array,columnManager:a.object,prefixCls:a.string,onHeaderRow:a.func,onDidUpdate:a.func,fixed:a.oneOfType([a.bool,a.string]),selectedRowKeysSet:a.instanceOf(Set).isRequired};er.defaultProps={columns:[],prefixCls:ce.PREFIX,onHeaderRow:H,onDidUpdate:H,components:{header:{wrapper:"thead",row:"tr",cell:"th"}}};const ra=b.forwardRef((i,e)=>b.createElement(er,Object.assign({},i,{forwardedRef:e})));class tr extends b.PureComponent{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{selectedRowKeysSet:new Set};super(e)}render(){const{scroll:e,prefixCls:t,fixed:n,forwardedRef:s,handleBodyScroll:r,columns:o,components:l,onDidUpdate:c,showHeader:d,tableLayout:u,bodyHasScrollBar:h,sticky:g}=this.props,m=x(l,"header.outer","table"),y=x(e,"x"),p={},f={};y&&!n&&(f.width=y),h&&(p.overflowY="scroll");const S=b.createElement(on,{columns:o,prefixCls:t}),v=b.createElement(ra,Object.assign({},this.props,{columns:o,components:l,onDidUpdate:c})),w=M(`${t}-header`,{[`${t}-header-sticky`]:g,[`${t}-header-hidden`]:!d}),_=x(g,"top",0);return typeof _=="number"&&(p.top=_),b.createElement("div",{key:"headTable",style:p,className:w,ref:s,onScroll:r},b.createElement(m,{style:f,className:M(t,{[`${t}-fixed`]:u==="fixed"})},S,v))}}tr.propTypes={tableLayout:a.string,bodyHasScrollBar:a.bool,columns:a.array,components:a.object,dataSource:a.array,fixed:a.oneOfType([a.bool,a.string]),handleBodyScroll:a.func,prefixCls:a.string,forwardedRef:a.oneOfType([a.object,a.func]),scroll:a.shape({x:a.oneOfType([a.number,a.string,a.bool]),y:a.oneOfType([a.number,a.string])}),selectedRowKeysSet:a.instanceOf(Set).isRequired,showHeader:a.bool,onDidUpdate:a.func,onHeaderRow:a.func};tr.defaultProps={handleBodyScroll:H};const Pu=b.forwardRef((i,e)=>b.createElement(tr,Object.assign({},i,{forwardedRef:e})));var ls,Eo;function Au(){if(Eo)return ls;Eo=1;var i=ji(),e=i("length");return ls=e,ls}var cs,xo;function nr(){if(xo)return cs;xo=1;var i="\\ud800-\\udfff",e="\\u0300-\\u036f",t="\\ufe20-\\ufe2f",n="\\u20d0-\\u20ff",s=e+t+n,r="\\ufe0e\\ufe0f",o="\\u200d",l=RegExp("["+o+i+s+r+"]");function c(d){return l.test(d)}return cs=c,cs}var ds,To;function Du(){if(To)return ds;To=1;var i="\\ud800-\\udfff",e="\\u0300-\\u036f",t="\\ufe20-\\ufe2f",n="\\u20d0-\\u20ff",s=e+t+n,r="\\ufe0e\\ufe0f",o="["+i+"]",l="["+s+"]",c="\\ud83c[\\udffb-\\udfff]",d="(?:"+l+"|"+c+")",u="[^"+i+"]",h="(?:\\ud83c[\\udde6-\\uddff]){2}",g="[\\ud800-\\udbff][\\udc00-\\udfff]",m="\\u200d",y=d+"?",p="["+r+"]?",f="(?:"+m+"(?:"+[u,h,g].join("|")+")"+p+y+")*",S=p+y+f,v="(?:"+[u+l+"?",l,h,g,o].join("|")+")",w=RegExp(c+"(?="+c+")|"+v+S,"g");function _(O){for(var I=w.lastIndex=0;w.test(O);)++I;return I}return ds=_,ds}var us,Io;function Nu(){if(Io)return us;Io=1;var i=Au(),e=nr(),t=Du();function n(s){return e(s)?t(s):i(s)}return us=n,us}var hs,Po;function ku(){if(Po)return hs;Po=1;var i=Ga(),e=Ya(),t=Gt(),n=Qo(),s=Nu(),r="[object Map]",o="[object Set]";function l(c){if(c==null)return 0;if(t(c))return n(c)?s(c):c.length;var d=e(c);return d==r||d==o?c.size:i(c).length}return hs=l,hs}var Lu=ku();const xt=te(Lu);var ps,Ao;function Mu(){if(Ao)return ps;Ao=1;var i=fi(),e=nt(),t=Jt(),n=Math.max,s=Math.min;function r(o,l,c){var d=o==null?0:o.length;if(!d)return-1;var u=d-1;return c!==void 0&&(u=t(c),u=c<0?n(d+u,0):s(u,d-1)),i(o,e(l,3),u,!0)}return ps=r,ps}var ju=Mu();const zu=te(ju);class Fu extends ge{init(){this.initVirtualizedData(),this.initExpandBtnShouldInRow()}destroy(){this.unobserveBodyResize()}initVirtualizedData(e){this._adapter.setVirtualizedData(this.flattenData(this.getProp("dataSource")),e)}initExpandBtnShouldInRow(e){const t=this.getProps(),n=su(t);this._adapter.setCachedExpandBtnShouldInRow(n),!Re(e)&&!e&&(e=B.EXPAND_RELATED_PROPS.map(r=>x(t,r,void 0))),this._adapter.setCachedExpandRelatedProps(e)}flattenData(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:[];const r=[],{rowKey:o,childrenRecordName:l,expandedRowRender:c,expandedRowKeys:d,groups:u}=this.getProps();return t===0&&wt(u)?u.forEach((h,g)=>{const m=e.findIndex(y=>h.has(De(y,o)));if(m>-1){const y=zu(e,f=>h.has(De(f,o))),p=Kt(d,g);r.push({key:g,level:t,sectionRow:!0,group:h,groupKey:g,expanded:p}),p&&r.push(...this.flattenData(e.slice(m,y+1),t+1,[...n],[...s]))}}):e.forEach((h,g)=>{const m=De(h,o),y=tu(h,l);t&&s.push(m);const p={key:m,record:h,level:t,parentKeys:[...n],childrenKeys:[...s]};r.push(p);const f=[];Kt(d,m)&&(Array.isArray(y)&&y.length?f.push(...this.flattenData(y,t+1,[...p.parentKeys],[...p.childrenKeys])):c&&f.push({key:Yi(m),level:t,expandedRow:!0,record:h}),r.push(...f))}),r}observeBodyResize(e){const{scroll:t}=this.getProps();if(x(t,"y"))return this._adapter.observeBodyResize(e)}unobserveBodyResize(){return this._adapter.unobserveBodyResize()}}var fs,Do;function Ku(){if(Do)return fs;Do=1;function i(){return!0}return fs=i,fs}var $u=Ku();const Bu=te($u);function Hu(i,e){if(i===e)return!0;if(!i||!e)return!1;const t=Object.keys(i),n=Object.keys(e),s=t.length;if(n.length!==s)return!1;for(let r=0;rthis.ref=t,this.handleClick=t=>{this.foundation.handleClick(t);const n=this.adapter.getCache("customCellProps");n&&typeof n.onClick=="function"&&n.onClick(t)},this.ref=L.createRef(),this.foundation=new Uu(this.adapter)}shouldComponentUpdate(e){const t=this.props,{column:n,expandIcon:s}=t,r=Qd(n),{shouldCellUpdate:o}=n;if(typeof o=="function")return o(e,t);const l=Gi(n)||s;if((r||l)&&!re(e,this.props))return!0;{const c=["selected","expanded","expandIcon","disabled"],d=ye(t,c),u=ye(e,c);if(!re(u,d))return!0}return!1}componentDidUpdate(){this.props.onDidUpdate(this.ref)}getTdProps(){const{record:e,index:t,column:n={},fixedLeft:s,fixedRight:r,width:o,height:l}=this.props;let c={},d={};const{direction:u}=this.context,h=u==="rtl";if(s||typeof s=="number"?Ae(c,h?"style.right":"style.left",typeof s=="number"?s:0):(r||typeof r=="number")&&Ae(c,h?"style.left":"style.right",typeof r=="number"?r:0),o!=null&&Ae(c,"style.width",o),l!=null&&Ae(c,"style.height",l),n.onCell){d=n.onCell(e,t),this.adapter.setCache("customCellProps",Object.assign({},d)),c=Object.assign(Object.assign({},c),ye(d,["style","className","onClick"]));const y=x(d,"style")||{};c.style=Object.assign(Object.assign({},c.style),y)}if(n.align){const y=Ji(n.align,u),p=au(n.align,u);c.style=Object.assign(Object.assign({},c.style),{textAlign:y,justifyContent:p})}return{tdProps:c,customCellProps:d}}renderText(e){const{record:t,indentSize:n,prefixCls:s,indent:r,index:o,expandIcon:l,renderExpandIcon:c,column:d={},hovered:u}=this.props,{dataIndex:h,render:g,useFullRender:m}=d;let y,p,f;typeof h=="number"?y=x(t,h):!h||h.length===0?y=t:y=x(t,h);const S=r&&n?b.createElement("span",{style:{paddingLeft:`${n*r}px`},className:`${s}-row-indent indent-level-${r}`}):null,v=typeof c=="function"?c(t):l;if(g){const w={expandIcon:v,isHovering:u};if(m){const{renderSelection:_}=this.context,O=typeof _=="function"?_(t):null;Object.assign(w,{selection:O,indentText:S})}y=g(y,t,o,w),No(y)&&(e=y.props?Zt(e,y.props):e,p=e.colSpan,f=e.rowSpan,y=y.children)}return{text:y,indentText:S,rowSpan:f,colSpan:p,realExpandIcon:v,tdProps:e}}renderInner(e,t,n){const{prefixCls:s,isSection:r,expandIcon:o,column:l={}}=this.props,{tableWidth:c,anyColumnFixed:d}=this.context,{useFullRender:u}=l;let h=null;return u?h=e:h=[b.createElement(L.Fragment,{key:"indentText"},t),b.createElement(L.Fragment,{key:"expandIcon"},o?n:null),b.createElement(L.Fragment,{key:"text"},e)],r&&(h=b.createElement("div",{className:M(`${s}-section-inner`),style:{width:d?na(c):void 0}},h)),h}render(){const{prefixCls:e,column:t={},component:n,fixedLeft:s,fixedRight:r,lastFixedLeft:o,firstFixedRight:l,colIndex:c}=this.props,{direction:d}=this.context,u=d==="rtl",{className:h,ellipsis:g}=t,m=s||typeof s=="number",y=r||typeof r=="number",{tdProps:p,customCellProps:f}=this.getTdProps(),S=this.renderText(p);let{text:v}=S;const{indentText:w,rowSpan:_,colSpan:O,realExpandIcon:I,tdProps:E}=S;let k;if(Zs(g)&&typeof v=="string"&&(k=v),_===0||O===0)return null;No(v)&&(v=null);const P=this.renderInner(v,w,I);let A,F,K,z;u?(A=y,F=l,K=m,z=o):(A=m,F=o,K=y,z=l);const q=M(h,`${e}-row-cell`,x(f,"className"),{[`${e}-cell-fixed-left`]:A,[`${e}-cell-fixed-left-last`]:F,[`${e}-cell-fixed-right`]:K,[`${e}-cell-fixed-right-first`]:z,[`${e}-row-cell-ellipsis`]:g});return b.createElement(n,Object.assign({role:"gridcell","aria-colindex":c+1,className:q,onClick:this.handleClick,title:k},E,{ref:this.setRef}),P)}}Ct.contextType=ke;Ct.defaultProps={indent:0,indentSize:ne.DEFAULT_INDENT_WIDTH,onClick:H,prefixCls:ce.PREFIX,component:"td",onDidUpdate:H,column:{}};Ct.propTypes={record:a.object,prefixCls:a.string,index:a.number,fixedLeft:a.oneOfType([a.bool,a.number]),lastFixedLeft:a.bool,fixedRight:a.oneOfType([a.bool,a.number]),firstFixedRight:a.bool,indent:a.number,indentSize:a.number,column:a.object,expandIcon:a.any,renderExpandIcon:a.func,hideExpandedColumn:a.bool,component:a.any,onClick:a.func,onDidUpdate:a.func,isSection:a.bool,width:a.oneOfType([a.string,a.number]),height:a.oneOfType([a.string,a.number]),selected:a.bool,expanded:a.bool,colIndex:a.number,hovered:a.bool};var ko=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);s{const{renderExpandIcon:n}=this.props;return n(t,!0)},this.handleMouseEnter=t=>{this.foundation.handleMouseEnter(t);const n=this.adapter.getCache("customRowProps");typeof(n==null?void 0:n.onMouseEnter)=="function"&&n.onMouseEnter(t)},this.handleMouseLeave=t=>{this.foundation.handleMouseLeave(t);const n=this.adapter.getCache("customRowProps");typeof(n==null?void 0:n.onMouseLeave)=="function"&&n.onMouseLeave(t)},this.handleClick=t=>{this.foundation.handleClick(t);const n=this.adapter.getCache("customRowProps");n&&typeof n.onClick=="function"&&n.onClick(t);const{handleRowSelection:s}=this.context,{rowKey:r,selected:o,disabled:l,record:c}=this.props;typeof s=="function"&&!l&&s(r,!o,t)},this.foundation=new Wu(this.adapter)}componentDidMount(){const{onRow:e,index:t,record:n,disabled:s,selected:r}=this.props;if(typeof this.adapter.getCache("customRowProps")>"u"){const l=e(n,t,{disabled:s,selected:r})||{},{className:c,style:d}=l,u=ko(l,["className","style"]);this.adapter.setCache("customRowProps",Object.assign({},u))}}shouldComponentUpdate(e){const t=["cellWidths"];return!Hu(ye(e,t),ye(this.props,t))||!re(Ne(e,t),Ne(this.props,t))}renderCells(){const{columns:e,record:t,index:n,prefixCls:s,fixed:r,components:o,expandableRow:l,level:c,expandIcon:d,rowExpandable:u,isSection:h,expandedRow:g,virtualized:m,indentSize:y,hideExpandedColumn:p,cellWidths:f,selected:S,expanded:v,disabled:w,onDidUpdate:_,hovered:O}=this.props,I=x(o,"body.cell",B.DEFAULT_COMPONENTS.body.cell),E=[],k=u(t);let N=0;return le(e,(P,A)=>{const F=x(P,"key"),K={};if(r!=="right"&&(Xd(F)&&N++,l&&A===N&&(K.renderExpandIcon=this.renderExpandIcon,(p||h)&&(K.expandIcon=d??!0)),c!=null&&A===N&&(K.indent=c,!l&&p&&(d!==!1||!(typeof d=="boolean")&&d!==null)&&(K.indent=c+1))),Gi(P)&&!k)E.push(b.createElement(Ct,{key:A,colIndex:A,isSection:h}));else if(!Zd(P)){const z={};I!==B.DEFAULT_COMPONENTS.body.cell&&m&&!g&&(z.width=x(f,A)),E.push(b.createElement(Ct,Object.assign({colIndex:A},K,z,{hideExpandedColumn:p,indentSize:y,isSection:h,prefixCls:`${s}`,column:P,key:A,index:n,record:t,component:I,fixedLeft:kt(P)&&et(f,0,A),lastFixedLeft:Es(e,P),fixedRight:Lt(P)&&et(f,A+1),firstFixedRight:xs(e,P),selected:S,expanded:v,disabled:w,onDidUpdate:_,hovered:O})))}}),E}render(){const{style:e}=this.props,{components:t,prefixCls:n,selected:s,disabled:r,onRow:o,index:l,className:c,replaceClassName:d,record:u,hovered:h,expanded:g,displayNone:m,expandableRow:y,level:p,expandedRow:f,isSection:S,rowKey:v}=this.props,w=t.body.row,_=o(u,l,{disabled:r,selected:s})||{},{className:O,style:I}=_,E=ko(_,["className","style"]);this.adapter.setCache("customRowProps",Object.assign({},E));const k=Object.assign(Object.assign({},e),I),N=typeof d=="string"&&d.length?M(d,O):M(c,`${n}-row`,{[`${n}-row-selected`]:s,[`${n}-row-expanded`]:g,[`${n}-row-hovered`]:h,[`${n}-row-hidden`]:m},O),P={};return typeof l=="number"&&(P["aria-rowindex"]=l+1),y&&(P["aria-expanded"]=g),(g||f)&&(P["aria-level"]=2),typeof p=="number"&&(P["aria-level"]=p+1),S&&(P["aria-level"]=1),b.createElement(w,Object.assign({role:"row"},P,E,{style:k,className:N,"data-row-key":v,onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,onClick:this.handleClick}),this.renderCells())}}rt.propTypes=oa;rt.contextType=ke;rt.defaultProps={columns:[],rowExpandable:Bu,components:{body:{row:"tr",cell:"td"}},prefixCls:ce.PREFIX,onRow:H,onRowClick:H,onRowDoubleClick:H,onRowMouseEnter:H,onRowMouseLeave:H,onHover:H,onDidUpdate:H,visible:!0,hovered:!1,selected:!1,disabled:!1};var Vu=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);s({props:O,children:b.createElement("div",{className:M(`${n}-expand-inner`),style:{width:S?na(f):void 0}},_)})},I)],k=M(s,`${n}-row-expand`),N=v(E);return b.createElement(rt,{style:h,components:u,className:k,expandedRow:!0,renderExpandIcon:l,rowKey:`${e.key}-expanded-row`,columns:E,store:d,virtualized:g,indentSize:m,cellWidths:N,displayNone:p})}}ln.contextType=ke;ln.propTypes={cellWidths:a.array.isRequired,className:a.string,columns:a.array,components:a.object,defaultExpandAllRows:a.bool,defaultExpandedRowKeys:a.array,expandIcon:a.oneOfType([a.object,a.node,a.func]),expandRowByClick:a.bool,expanded:a.bool,expandedRowKeys:a.array,expandedRowRender:a.func,indentSize:a.number,index:a.oneOfType([a.string,a.number]),onExpand:a.func,onExpandedRowsChange:a.func,prefixCls:a.string,record:a.object,renderExpandIcon:a.func,store:a.object,style:a.object,virtualized:a.oneOfType([a.bool,a.object])};ln.defaultProps={record:{},prefixCls:ce.PREFIX};var qu=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);s{typeof s=="function"&&n&&s(!o,r,c),typeof l.onClick=="function"&&l.onClick(c)}})},this.collectGroupedData=()=>{const{data:t,group:n,rowKey:s}=this.props;return Array.isArray(t)&&t.length&&Pe(n)?t.filter(r=>{const o=typeof s=="function"?s(r):x(r,s);return o!=null&&o!==""&&n.has(o)}):[]},this.renderExpandIcon=t=>{const{renderExpandIcon:n,groupKey:s}=this.props;return typeof n=="function"?n(t,!1,s):null}}isInnerColumnKey(e){return e!=null?[B.DEFAULT_KEY_COLUMN_EXPAND,B.DEFAULT_KEY_COLUMN_SELECTION].includes(e):!1}render(){const{record:e,columns:t=[],prefixCls:n,className:s,expanded:r,renderGroupSection:o,components:l,index:c,store:d,group:u,groupKey:h,virtualized:g,style:m}=this.props,y={};let p={},f=null;const S=typeof o=="function"?o(h,[...u]):null;if(L.isValidElement(S))f=S;else if(S&&Object.prototype.toString.call(S)==="[object Object]"){const I=S,{children:E}=I,k=qu(I,["children"]);f=E,p=Object.assign({},k)}y.colSpan=Xs(t).length;const v=[Object.assign({render:()=>({props:y,children:f})},p)],w=M(s,`${n}-row-section`,{on:r}),{getCellWidths:_}=this.context,O=_(v,null,!0);return b.createElement(rt,{components:l,virtualized:g,index:c,onRow:this.onRow,expanded:r,expandIcon:!0,isSection:!0,record:e,replaceClassName:w,expandableRow:!0,renderExpandIcon:this.renderExpandIcon,rowKey:h,columns:v,store:d,style:m,cellWidths:O})}}cn.contextType=ke;cn.propTypes=ia;cn.defaultProps={prefixCls:ce.PREFIX,components:{body:{row:"tr",cell:"td"}}};var Lo=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);s{const{store:c}=this.props,{rowSpanHover:d}=this.context;if(c){const u=o?l:null;x(c.getState(),"hoveredRowKey")!==u&&c.setState({hoveredRowKey:u})}if(d){const u=String(l);if(o){const h=this.getHoveredRowKeysFromDOM(u);this.updateRowHoverClass(h)}else this.updateRowHoverClass([])}},this.updateRowHoverClass=o=>{var l;const c=this.ref.current;if(!c){this.hoveredRowKeySet.clear();return}const d=((l=c.closest)===null||l===void 0?void 0:l.call(c,`.${this.props.prefixCls}-wrapper`))||c,u=new Set(o);for(const h of this.hoveredRowKeySet)u.has(h)||d.querySelectorAll(`tr[data-row-key="${this.cssEscape(h)}"]`).forEach(m=>m.classList.remove(`${this.props.prefixCls}-row-hovered`));for(const h of u)this.hoveredRowKeySet.has(h)||d.querySelectorAll(`tr[data-row-key="${this.cssEscape(h)}"]`).forEach(m=>m.classList.add(`${this.props.prefixCls}-row-hovered`));this.hoveredRowKeySet=u},this.getHoveredRowKeysFromDOM=o=>{var l;const c=new Set;c.add(o);const d=this.ref.current,u=(l=d==null?void 0:d.querySelector(".semi-table-tbody"))!==null&&l!==void 0?l:d;if(!u)return Array.from(c);const h=u.querySelector(`tr[data-row-key="${this.cssEscape(o)}"]`);if(!h)return Array.from(c);const g=Array.from(u.querySelectorAll("tr[data-row-key]")),m=g.indexOf(h);return m===-1||g.forEach((y,p)=>{y.querySelectorAll("td[rowspan]").forEach(S=>{const v=parseInt(S.getAttribute("rowspan")||"1",10);if(v>1){const w=p+v-1;if(m>=p&&m<=w)for(let _=p;_<=w&&_{const l=globalThis.CSS;return l&&typeof l.escape=="function"?l.escape(o):o.replace(/\\/g,"\\\\").replace(/"/g,'\\"')},this.forwardRef=o=>{const{forwardedRef:l}=this.props;this.ref.current=o,this.foundation.observeBodyResize(o),typeof l=="function"?l(o):l&&typeof l=="object"&&(l.current=o)},this.setListRef=o=>{this.listRef.current=o;const{getVirtualizedListRef:l}=this.context;l&&(this.props.virtualized?l(this.listRef):console.warn("getVirtualizedListRef only works with virtualized. See https://semi.design/en-US/show/table for more information."))},this.itemSize=o=>{const{virtualized:l,size:c}=this.props,{virtualizedData:d}=this.state,u=x(d,o),h=nu(c,u.sectionRow),g=x(l,"itemSize",h.height);let m=g;return typeof g=="function"&&(m=g(o,{expandedRow:x(u,"expandedRow",!1),sectionRow:x(u,"sectionRow",!1)})),mx(l,[o,"key"],o),this.handleRowClick=(o,l,c)=>{const{handleRowExpanded:d}=this.context;d(!c,o,l)},this.handleVirtualizedScroll=function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const l=x(n.props.virtualized,"onScroll");typeof l=="function"&&l(o)},this.handleVirtualizedBodyScroll=o=>{const{handleBodyScroll:l}=this.props,c=x(o,"nativeEvent.target.scrollLeft"),d=x(o,"nativeEvent.target.scrollTop");d===this.state.cache.virtualizedScrollTop&&this.handleVirtualizedScroll({horizontalScrolling:!0}),this.state.cache.virtualizedScrollLeft=c,this.state.cache.virtualizedScrollTop=d,typeof l=="function"&&l(o)},this.getVirtualizedRowWidth=()=>{const{getCellWidths:o}=this.context,{columns:l}=this.props,c=o(l);return et(c,0,xt(l))},this.renderVirtualizedRow=o=>{const{index:l,style:c}=o,{virtualizedData:d,cachedExpandBtnShouldInRow:u}=this.state,{flattenedColumns:h}=this.context,g=x(d,[l],{}),{key:m,parentKeys:y,expandedRow:p,sectionRow:f}=g,S=Lo(g,["key","parentKeys","expandedRow","sectionRow"]),v=this.getVirtualizedRowWidth(),w=u,_=Object.assign(Object.assign(Object.assign(Object.assign({},this.props),{style:Object.assign(Object.assign({},c),{width:v})}),S),{columns:h,index:l,expandBtnShouldInRow:w});return f?this.renderSectionRow(_):p?this.renderExpandedRow(_):this.renderBaseRow(_)},this.renderTbody=b.forwardRef(function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},l=arguments.length>1?arguments[1]:void 0;return b.createElement("div",Object.assign({},o,{onScroll:function(){o.onScroll&&o.onScroll(...arguments)},className:M(o.className,`${n.props.prefixCls}-tbody`),style:Object.assign({},o.style),ref:l}))}),this.renderOuter=b.forwardRef((o,l)=>{const{children:c}=o,d=Lo(o,["children"]),{handleWheel:u,prefixCls:h,emptySlot:g,dataSource:m}=this.props,y=this.getVirtualizedRowWidth(),p=M(`${h}`,`${h}-fixed`);return b.createElement("div",Object.assign({},d,{ref:l,onWheel:function(){u&&u(...arguments),d.onWheel&&d.onWheel(...arguments)},onScroll:function(){n.handleVirtualizedBodyScroll(...arguments),d.onScroll&&d.onScroll(...arguments)}}),b.createElement("div",{style:{width:y},className:p},c),xt(m)===0&&g)}),this.onItemsRendered=o=>{this.state.cache.virtualizedScrollLeft&&this.ref.current&&(this.ref.current.scrollLeft=this.state.cache.virtualizedScrollLeft)},this.renderVirtualizedBody=o=>{const{scroll:l,prefixCls:c,virtualized:d,columns:u}=this.props,{virtualizedData:h}=this.state,{getCellWidths:g}=this.context,m=g(u);if(!xt(m))return null;const y=x(l,"y"),p=typeof y=="number",f=p?y:600;p||bt.warn('You have to specific "scroll.y" which must be a number for table virtualization!');const S={width:"100%",height:h!=null&&h.length?f:null,overflowX:"auto",overflowY:"auto"},v=M(`${c}-body`);return b.createElement(wc,Object.assign({},typeof d=="object"?d:{},{initialScrollOffset:this.state.cache.virtualizedScrollTop,onScroll:this.handleVirtualizedScroll,onItemsRendered:this.onItemsRendered,ref:this.setListRef,className:v,outerRef:this.forwardRef,height:h!=null&&h.length?f:0,width:S.width,itemData:h,itemSize:this.itemSize,itemCount:h.length,itemKey:this.itemKey,innerElementType:this.renderTbody,outerElementType:this.renderOuter,style:Object.assign(Object.assign({},S),{direction:o}),direction:o}),this.renderVirtualizedRow)},this.renderSectionRow=function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{groupKey:void 0};const{dataSource:l,rowKey:c,group:d,groupKey:u,index:h}=o,g=Object.keys(ia),m=Ne(o,g),{handleRowExpanded:y}=n.context;return b.createElement(cn,Object.assign({},m,{record:{groupKey:u,records:[...d].map(p=>bo(l,p,c))},index:h,onExpand:y,data:l,key:u||h}))},this.renderExpandedRow=function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{renderExpandIcon:()=>null};const{style:l,components:c,renderExpandIcon:d,expandedRowRender:u,record:h,columns:g,expanded:m,index:y,rowKey:p,virtualized:f,displayNone:S}=o;let v=De(h,p);v==null&&(v=y);const{flattenedColumns:w,getCellWidths:_}=n.context;return w!==n.flattenedColumns&&(n.flattenedColumns=w,n.cellWidths=_(w)),b.createElement(ln,{style:l,components:c,renderExpandIcon:d,expandedRowRender:u,record:h,columns:g,expanded:m,index:y,virtualized:f,key:Yi(v),cellWidths:n.cellWidths,displayNone:S})},this.renderGroupedRows=()=>{const{groups:o,dataSource:l,rowKey:c,expandedRowKeys:d,keepDOM:u}=this.props,{flattenedColumns:h}=this.context,g=new Map,m=[];o!=null&&Array.isArray(l)&&l.length&&l.forEach(p=>{const f=De(p,c);o.forEach((S,v)=>{if(S.has(f))return g.has(v)||g.set(v,new Set([])),g.get(v).add(f),!1})});let y=-1;return g.forEach((p,f)=>{const S=es(d,f);if(m.push(this.renderSectionRow(Object.assign(Object.assign({},this.props),{columns:h,index:++y,group:p,groupKey:f,expanded:S}))),S||u){const v=[];p.forEach(w=>{const _=bo(l,w,c);_!=null&&v.push(_)}),m.push(this.renderBodyRows(v,void 0,[],!S))}}),m},this.renderBody=o=>{const{scroll:l,prefixCls:c,columns:d,components:u,fixed:h,handleWheel:g,headerRef:m,handleBodyScroll:y,anyColumnFixed:p,showHeader:f,emptySlot:S,includeHeader:v,dataSource:w,onScroll:_,groups:O,expandedRowRender:I,tableLayout:E}=this.props,k=x(l,"x"),N=x(l,"y"),P={},A={},F=x(u,"body.outer","table"),K=x(u,"body.wrapper")||"tbody";N&&(P.maxHeight=N),k&&(A.width=k),p&&xt(w)&&(P.overflow="auto",P.WebkitTransform="translate3d (0, 0, 0)");const z=b.createElement(on,{components:x(u,"body"),columns:d,prefixCls:c}),q=`${c}-body`,V=b.createElement("div",{key:"bodyTable",className:q,style:P,ref:this.forwardRef,onMouseLeave:()=>{this.context.rowSpanHover&&this.updateRowHoverClass([])},onWheel:g,onScroll:y},b.createElement(F,{role:wt(O)||ue(I)||iu({dataSource:w})?"treegrid":"grid","aria-rowcount":w&&w.length,"aria-colcount":d&&d.length,style:A,className:M(c,{[`${c}-fixed`]:E==="fixed"})},z,v&&f?b.createElement(ra,Object.assign({},this.props,{ref:m,components:u,columns:d})):null,b.createElement(K,{className:`${c}-tbody`,onScroll:_},wt(O)?this.renderGroupedRows():this.renderBodyRows(w))),S);return h&&d.length?b.createElement("div",{key:"bodyTable",className:`${c}-body-outer`},V):V},this.ref=b.createRef(),this.state={virtualizedData:[],cache:{virtualizedScrollTop:null,virtualizedScrollLeft:null},cachedExpandBtnShouldInRow:null,cachedExpandRelatedProps:[],hoveredRowKey:null},this.listRef=b.createRef();const{flattenedColumns:s,getCellWidths:r}=t;this.foundation=new Fu(this.adapter),this.flattenedColumns=s,this.cellWidths=r(s),this.observer=null,this.hoveredRowKeySet=new Set}componentDidMount(){const{store:e}=this.props;e&&(this.unsubscribe=e.subscribe(t=>{const{hoveredRowKey:n}=t;n!==this.state.hoveredRowKey&&this.setState({hoveredRowKey:n})}))}componentWillUnmount(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null)}get adapter(){return Object.assign(Object.assign({},super.adapter),{setVirtualizedData:(e,t)=>this.setState({virtualizedData:e},t),setCachedExpandBtnShouldInRow:e=>this.setState({cachedExpandBtnShouldInRow:e}),setCachedExpandRelatedProps:e=>this.setState({cachedExpandRelatedProps:e}),observeBodyResize:e=>{const{setBodyHasScrollbar:t}=this.context,n=()=>{const s=()=>{const{offsetWidth:o,clientWidth:l}=e,c=l{const e=this.ref.current;this.observer&&(this.observer.unobserve(e),this.observer=null)}})}componentDidUpdate(e,t){const{virtualized:n,dataSource:s,expandedRowKeys:r,columns:o,scroll:l}=this.props;n&&(e.dataSource!==s||e.expandedRowKeys!==r||e.columns!==o)&&this.foundation.initVirtualizedData();const d=B.EXPAND_RELATED_PROPS.map(g=>x(this.props,g,void 0));re(d,t.cachedExpandRelatedProps)||this.foundation.initExpandBtnShouldInRow(d);const u=x(l,"y"),h=this.ref.current;u&&u!==x(e,"scroll.y")&&this.foundation.observeBodyResize(h)}renderBaseRow(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{rowKey:t,columns:n,expandedRowKeys:s,rowExpandable:r,record:o,index:l,level:c,expandBtnShouldInRow:d,selectedRowKeysSet:u,disabledRowKeysSet:h,expandRowByClick:g}=e,m=Object.keys(oa),y=Ne(e,m);let p=De(o,t);p==null&&(p=l);const f=es(s,p),S=r&&r(o),v={level:void 0,expanded:f};(S||d)&&(v.level=c,v.expandableRow=S,g&&(v.onRowClick=this.handleRowClick));const w={selected:Jd(u,p),disabled:eu(h,p)},{getCellWidths:_}=this.context,O=_(n,null,!0),{hoveredRowKey:I}=this.state,E=I===p;return b.createElement(rt,Object.assign({},y,v,w,{key:p,rowKey:p,cellWidths:O,hovered:E,onHover:this.onRowHover}))}renderBodyRows(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;const{rowKey:r,expandedRowRender:o,expandedRowKeys:l,childrenRecordName:c,rowExpandable:d,keepDOM:u}=this.props,h=typeof o=="function",g=this.state.cachedExpandBtnShouldInRow,{flattenedColumns:m}=this.context;return le(e,(y,p)=>{let f=De(y,r);f==null&&(f=p);const S=x(y,c),v=!!(Array.isArray(S)&&S.length);n.push(this.renderBaseRow(Object.assign(Object.assign({},this.props),{columns:m,expandBtnShouldInRow:g,displayNone:s,record:y,key:f,level:t,index:p})));const w=es(l,f),_=w||u;if(h&&d&&d(y)&&_){const O=this.renderExpandedRow(Object.assign(Object.assign({},this.props),{columns:m,level:t,index:p,record:y,expanded:w,displayNone:s||!w}));Ps(O)||n.push(O)}if(v&&_){const O=this.renderBodyRows(S,t+1,[],s||!w);n.push(...O)}}),n}render(){const{virtualized:e}=this.props,{direction:t}=this.context;return e?this.renderVirtualizedBody(t):this.renderBody(t)}}sr.contextType=ke;sr.propTypes={anyColumnFixed:a.bool,childrenRecordName:a.string,columns:a.array,components:a.object,dataSource:a.array,disabledRowKeysSet:a.instanceOf(Set).isRequired,emptySlot:a.node,expandRowByClick:a.bool,expandedRowKeys:a.array,expandedRowRender:a.func,fixed:a.oneOfType([a.string,a.bool]),forwardedRef:a.oneOfType([a.object,a.func]),groups:a.instanceOf(Map),handleBodyScroll:a.func,handleWheel:a.func,headerRef:a.oneOfType([a.object,a.func]),includeHeader:a.bool,onScroll:a.func,prefixCls:a.string,renderExpandIcon:a.func,rowExpandable:a.func,rowKey:a.oneOfType([a.string,a.bool,a.func]),scroll:a.object,selectedRowKeysSet:a.instanceOf(Set).isRequired,showHeader:a.bool,size:a.string,store:a.object,virtualized:a.oneOfType([a.bool,a.object])};const Gu=b.forwardRef(function(e,t){return b.createElement(sr,Object.assign({},e,{forwardedRef:t}))});var Yu=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);s{const{scroll:t={}}=this.props;!!x(t,"y")?this.bodyWrapRef.current&&(this.bodyWrapRef.current.scrollTop=0):this.wrapRef.current&&this.wrapRef.current.scrollIntoView({behavior:"smooth",block:"start"})},setSelectedRowKeys:t=>{this.setState({rowSelection:Object.assign(Object.assign({},this.state.rowSelection),{selectedRowKeys:[...t],selectedRowKeysSet:new Set(t)})})},setDisabledRowKeys:t=>{this.setState({disabledRowKeys:t,disabledRowKeysSet:new Set(t)})},setCurrentPage:t=>{const{pagination:n}=this.state;typeof n=="object"?this.setState({pagination:Object.assign(Object.assign({},n),{currentPage:t})}):this.setState({pagination:{currentPage:t}})},setPagination:t=>this.setState({pagination:t}),setGroups:t=>this.setState({groups:t}),setDataSource:t=>this.setState({dataSource:t}),setExpandedRowKeys:t=>this.setState({expandedRowKeys:[...t]}),setQuery:function(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=[...e.state.queries];n=Zi(t,n),e.setState({queries:n})},setQueries:t=>this.setState({queries:t}),setFlattenData:t=>this.setState({flattenData:t}),setAllRowKeys:t=>this.setState({allRowKeys:t}),setHoveredRowKey:t=>{this.store.setState({hoveredRowKey:t})},setHoveredRowKeys:t=>{this.store.setState({hoveredRowKeys:t})},setCachedFilteredSortedDataSource:t=>{this.cachedFilteredSortedDataSource=t},setCachedFilteredSortedRowKeys:t=>{this.cachedFilteredSortedRowKeys=t,this.cachedFilteredSortedRowKeysSet=new Set(t)},setAllDisabledRowKeys:t=>{const n=new Set(t);this.setState({allDisabledRowKeys:t,allDisabledRowKeysSet:n})},getCurrentPage:()=>x(this.state,"pagination.currentPage",1),getCurrentPageSize:()=>x(this.state,"pagination.pageSize",ne.DEFAULT_PAGE_SIZE),getCachedFilteredSortedDataSource:()=>this.cachedFilteredSortedDataSource,getCachedFilteredSortedRowKeys:()=>this.cachedFilteredSortedRowKeys,getCachedFilteredSortedRowKeysSet:()=>this.cachedFilteredSortedRowKeysSet,getAllDisabledRowKeys:()=>this.state.allDisabledRowKeys,getAllDisabledRowKeysSet:()=>this.state.allDisabledRowKeysSet,getHalfCheckedRowKeys:()=>this.state.halfCheckedRowKeys||[],getHalfCheckedRowKeysSet:()=>this.state.halfCheckedRowKeysSet||new Set,setHalfCheckedRowKeys:t=>{this.setState({halfCheckedRowKeys:t,halfCheckedRowKeysSet:new Set(t)})},getKeyEntities:()=>this.state.keyEntities||{},setKeyEntities:t=>{this.setState({keyEntities:t})},getCheckRelation:()=>{const{rowSelection:t}=this.state;return t&&typeof t=="object"?x(t,"checkRelation","unRelated"):"unRelated"},notifyFilterDropdownVisibleChange:(t,n)=>this._invokeColumnFn(n,"onFilterDropdownVisibleChange",t),notifyChange:function(){return e.props.onChange(...arguments)},notifyExpand:function(){return e.props.onExpand(...arguments)},notifyExpandedRowsChange:function(){return e.props.onExpandedRowsChange(...arguments)},notifySelect:function(){for(var t=arguments.length,n=new Array(t),s=0;sNt(this.getColumns(t||this.props.columns,this.props.children),n=>!!n.fixed),useFixedHeader:()=>{const{scroll:t,sticky:n}=this.props;return!!(x(t,"y")||n)},getTableLayout:()=>{let t=!1;const{flattenColumns:n}=this.state;return Array.isArray(n)&&(t=n.some(s=>!!s.ellipsis||!!s.fixed)),this.adapter.useFixedHeader()&&(t=!0),t?"fixed":"auto"},setHeadWidths:function(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;Yd(e.state.headWidths[n],t)||e.setState(s=>{const r=[...s.headWidths];return r[n]=[...t],{headWidths:r}})},getHeadWidths:function(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.state.headWidths.length&&typeof t=="number"?(e.state.headWidths[t]||[]).map(s=>s.width):[]},getCellWidths:function(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return Array.isArray(t)&&t.length&&(n=n==null&&e.state.headWidths.length?Md(e.state.headWidths):[],Array.isArray(n)&&n.length)?t.reduce((r,o)=>{const l=o.key===B.DEFAULT_KEY_COLUMN_SCROLLBAR&&s?null:We(n,c=>c&&c.key!=null&&c.key===o.key);return l&&r.push(l.width),r},[]):[]},mergedRowExpandable:t=>{const{expandedRowRender:n,childrenRecordName:s,rowExpandable:r}=this.props,o=x(t,s),l=typeof n=="function",c=typeof r=="function",d=Array.isArray(o)&&o.length,u=c&&r(t);return(l||d)&&(!c||u)||!(l||d)&&u},isAnyColumnUseFullRender:t=>Nt(t,n=>!!n.useFullRender),getNormalizeColumns:()=>this.normalizeColumns,getHandleColumns:()=>this.handleColumns,getMergePagination:()=>this.mergePagination,setBodyHasScrollbar:t=>{t!==this.state.bodyHasScrollBar&&this.setState({bodyHasScrollBar:t})},stopPropagation(t){t&&typeof t=="object"&&(typeof t.stopPropagation=="function"&&t.stopPropagation(),t.nativeEvent&&typeof t.nativeEvent.stopPropagation=="function"?t.nativeEvent.stopPropagation():typeof t.stopImmediatePropagation=="function"&&t.stopImmediatePropagation())}})}constructor(e,t){var n;super(e),n=this,this._warnIfNoKey=()=>{(this.props.rowSelection||this.props.expandedRowRender)&&Nt(this.props.dataSource,u=>this.foundation.getRecordKey(u)==null)&&bt.error('You must specify a key for each element in the dataSource or use "rowKey" to specify an attribute name as the primary key!')},this._invokeRowSelection=function(u){const h=x(n.state,["rowSelection",u]);if(typeof h=="function"){for(var g=arguments.length,m=new Array(g>1?g-1:0),y=1;y2?g-2:0),y=2;y{this.headerWrapRef.current=u},this.getCurrentPageData=()=>{const u=this.foundation.getCurrentPageData(),h=["dataSource","groups"].reduce((g,m)=>(u[m]&&(g[m]=u[m]),g),{});return we(h)},this.getColumns=(u,h)=>!Array.isArray(u)||!u||!u.length?Ut(h):u,this.getCellWidths=function(){return n.foundation.getCellWidths(...arguments)},this.setHeadWidths=function(){return n.foundation.setHeadWidths(...arguments)},this.getHeadWidths=function(){return n.foundation.getHeadWidths(...arguments)},this.mergedRowExpandable=function(){return n.foundation.mergedRowExpandable(...arguments)},this.setBodyHasScrollbar=function(){return n.foundation.setBodyHasScrollbar(...arguments)},this.handleWheel=u=>{const{scroll:h={}}=this.props;if(window.navigator.userAgent.match(/Trident\/7\./)&&h.y){u.preventDefault();const g=u.deltaY,{target:m}=u,y=this.bodyWrapRef.current;let p=0;this.lastScrollTop?p=this.lastScrollTop+g:p=g,y&&m!==y&&(y.scrollTop=p)}},this.handleBodyScrollLeft=u=>{if(u.currentTarget!==u.target)return;const{target:h}=u,g=this.headerWrapRef.current,m=this.bodyWrapRef.current;h.scrollLeft!==this.lastScrollLeft&&(h===m&&g?g.scrollLeft=h.scrollLeft:h===g&&m&&(m.scrollLeft=h.scrollLeft),this.setScrollPositionClassName()),this.lastScrollLeft=h.scrollLeft},this.handleWindowResize=()=>{this.syncTableWidth(),this.setScrollPositionClassName()},this.handleBodyScrollTop=u=>{const{target:h}=u;if(u.currentTarget!==h)return;const{scroll:g={}}=this.props,m=this.headerWrapRef.current,y=this.bodyWrapRef.current;if(h.scrollTop!==this.lastScrollTop&&g.y&&h!==m){const{scrollTop:p}=h;y&&h!==y&&(y.scrollTop=p)}this.lastScrollTop=h.scrollTop},this.handleBodyScroll=u=>{this.handleBodyScrollLeft(u),this.handleBodyScrollTop(u)},this.setScrollPosition=u=>{const{prefixCls:h}=this.props,g=[`${h}-scroll-position-both`,`${h}-scroll-position-middle`,`${h}-scroll-position-left`,`${h}-scroll-position-right`];this.position=u,this.scrollPosition=u;const m=this.wrapRef.current;if(m&&m.nodeType)if(u==="both"){const y=[`${h}-scroll-position-left`,`${h}-scroll-position-right`];m.classList.remove(...vr(g,y)),m.classList.add(...y)}else{const y=[`${h}-scroll-position-${u}`];m.classList.remove(...vr(g,y)),m.classList.add(...y)}},this.setScrollPositionClassName=()=>{const u=this.bodyWrapRef.current;if(u&&u.children&&u.children.length){const h=u.scrollLeft===0,g=Math.abs(u.scrollLeft)+1>=u.children[0].getBoundingClientRect().width-u.getBoundingClientRect().width;h&&g?this.setScrollPosition("both"):h?this.setScrollPosition("left"):g?this.setScrollPosition("right"):this.scrollPosition!=="middle"&&this.setScrollPosition("middle")}},this.syncTableWidth=()=>{var u;const h=(u=this.rootWrapRef)===null||u===void 0?void 0:u.current;if(!h)return;const g=h.getBoundingClientRect().width,m=this.state.tableWidth;typeof m=="number"&&Math.abs(m-g)<.5||this.setState({tableWidth:g})},this.observeTableWrapperResize=()=>{const u=this.rootWrapRef.current;if(!u)return;this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null);const h=x(window,"ResizeObserver");h&&(this.resizeObserver=new h(g=>{const m=()=>{this.syncTableWidth(),this.setScrollPositionClassName()};typeof window.requestAnimationFrame=="function"?window.requestAnimationFrame(m):window.setTimeout(m,0)}),this.resizeObserver.observe(u))},this.needSyncTableWidth=()=>this.adapter.isAnyColumnFixed()||this.props.showHeader&&this.adapter.useFixedHeader(),this.bindWindowResize=()=>{this.hasBindWindowResize||this.debouncedWindowResize&&(window.addEventListener("resize",this.debouncedWindowResize),this.hasBindWindowResize=!0)},this.unbindWindowResize=()=>{this.hasBindWindowResize&&(this.debouncedWindowResize&&window.removeEventListener("resize",this.debouncedWindowResize),this.hasBindWindowResize=!1)},this.syncResizeListeners=()=>{if(this.needSyncTableWidth()){const h=this.hasBindWindowResize;this.bindWindowResize(),this.resizeObserver||this.observeTableWrapperResize(),h||this.handleWindowResize()}else this.unbindWindowResize(),this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null)},this.renderSelection=function(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,g=arguments.length>2?arguments[2]:void 0;const{rowSelection:m,allDisabledRowKeysSet:y,halfCheckedRowKeysSet:p,keyEntities:f}=n.state;if(m&&typeof m=="object"){const{selectedRowKeys:S=[],selectedRowKeysSet:v=new Set,getCheckboxProps:w,disabled:_,renderCell:O,checkRelation:I="unRelated"}=m,E=n.cachedFilteredSortedRowKeys,k=n.cachedFilteredSortedRowKeysSet,N=n.foundation.allIsSelected(v,y,E),A=n.foundation.hasRowSelected(S,k)&&!N;if(h){const F=x(m,"key",B.DEFAULT_KEY_COLUMN_SELECTION),K=b.createElement(Vt,{"aria-label":`${N?"Deselect":"Select"} all rows`,disabled:_,key:F,selected:N,indeterminate:A,onChange:(q,V)=>{n.toggleSelectAllRow(q,V)}}),z=(q,V)=>n.toggleSelectAllRow(q,V);return ue(O)?O({selected:N,record:u,originNode:K,inHeader:h,disabled:_,indeterminate:A,selectAll:z}):K}else{const F=n.foundation.getRecordKey(u),K=v.has(F),z=I==="related"&&p&&p.has(F),q=()=>typeof w=="function"?w(u):{},V=b.createElement(Vt,{"aria-label":`${K?"Deselect":"Select"} this row`,getCheckboxProps:q,selected:K,indeterminate:z,onChange:(G,se)=>n.toggleSelectRow(G,F,se)}),W=(G,se)=>n.toggleSelectRow(G,F,se);return ue(O)?O({selected:K,record:u,index:g,originNode:V,inHeader:!1,disabled:_,indeterminate:z,selectRow:W}):V}}return null},this.renderRowSelectionCallback=function(u){let h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},g=arguments.length>2?arguments[2]:void 0;return n.renderSelection(h,!1,g)},this.renderTitleSelectionCallback=()=>this.renderSelection(void 0,!0),this.normalizeSelectionColumn=function(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{rowSelection:h,prefixCls:g}=u;let m={};if(h){const y=["selectedRowKeys","selectedRowKeysSet"];m={key:B.DEFAULT_KEY_COLUMN_SELECTION},Re(h)&&(m=Object.assign(Object.assign({},m),ye(h,y))),m.className=M(m.className,`${g}-column-selection`),m.title=n.renderTitleSelectionCallback,m.render=n.renderRowSelectionCallback}return m},this.normalizeScrollbarColumn=function(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{scrollbarWidth:h=0}=u;return{key:B.DEFAULT_KEY_COLUMN_SCROLLBAR,width:h,fixed:"right"}},this.renderExpandIcon=function(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null;const{expandedRowKeys:m}=n.state,{expandIcon:y}=n.props,p=typeof g=="string"||typeof g=="number"?g:n.foundation.getRecordKey(u);return b.createElement(xu,{key:p,componentType:h?"tree":"expand",expanded:Kt(m,p),expandIcon:y,onClick:(f,S)=>n.handleRowExpanded(f,p,S)})},this.handleRowExpanded=function(){return n.foundation.handleRowExpanded(...arguments)},this.normalizeExpandColumn=function(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},h=null;const{prefixCls:g,expandCellFixed:m,expandIcon:y}=u;return h={fixed:m,key:B.DEFAULT_KEY_COLUMN_EXPAND},h.className=M(h.className,`${g}-column-expand`),h.render=y!==!1?function(){let p=arguments.length>1?arguments[1]:void 0;return n.adapter.mergedRowExpandable(p)?n.renderExpandIcon(p):null}:()=>null,h},this.addFnsInColumn=function(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{prefixCls:h}=n.props;if(u&&(u.sorter||u.filters||u.onFilter||u.useFullRender)){let g=typeof u.sorter=="function"||u.sorter===!0,m=Array.isArray(u.filters)&&u.filters.length||L.isValidElement(u.filterDropdown)||typeof u.renderFilterDropdown=="function",y=!1;const f=!("sortOrder"in u)&&u.showSortTip===!0,{dataIndex:S,title:v,useFullRender:w}=u,_=g&&!m&&!w,O=n.foundation.getQuery(S),I={},E=[];w&&(I.selection=n.renderSelection(null,!0));const k=x(O,"sortOrder"),N=x(O,"defaultSortOrder",!1),P=n.foundation.isSortOrderValid(k)?k:N,A=Zs(u.ellipsis),F=typeof v!="function"&&b.createElement("span",{className:`${h}-row-head-title`,key:B.DEFAULT_KEY_COLUMN_TITLE,title:A&&typeof v=="string"?v:void 0},v);if(g){const W=b.createElement(Js,{key:B.DEFAULT_KEY_COLUMN_SORTER,sortOrder:P,sortIcon:u.sortIcon,onClick:w||m?G=>n.foundation.handleSort(u,G):null,title:F,showTooltip:!_&&f});w&&(I.sorter=W),y=!0,E.push(W)}else E.push(F);const K=x(O,"filteredValue"),z=x(O,"defaultFilteredValue"),q=K||z;if(m){const W=b.createElement(Cu,Object.assign({key:B.DEFAULT_KEY_COLUMN_FILTER},ye(O,"children"),{filteredValue:q,onFilterDropdownVisibleChange:G=>n.foundation.toggleShowFilter(S,G),onSelect:G=>n.foundation.handleFilterSelect(S,G)}));w&&(I.filter=W),y=!0,E.push(W)}const V=typeof v=="function"?()=>v(I):y?b.createElement("div",{className:`${h}-operate-wrapper`},E):E;u=Object.assign(Object.assign({},u),{title:V}),_&&(u.clickToSort=W=>{n.foundation.handleSort(u,W,!0)},u.mouseDown=n.foundation.handleMouseDown,u.sortOrder=P,u.showSortTip=f)}return u},this.toggleSelectRow=(u,h,g)=>{this.foundation.handleSelectRow(h,u,g)},this.handleRowClickSelection=(u,h,g)=>{const{rowSelection:m}=this.state;if(x(m,"clickRow",!1)&&m){const p=x(m,"disabled",!1),f=x(m,"getCheckboxProps");if(p)return;const S=this.cachedFilteredSortedDataSource.find(v=>this.foundation.getRecordKey(v)===u);if(S&&typeof f=="function"&&f(S).disabled)return;this.foundation.handleSelectRow(u,h,g)}},this.toggleSelectAllRow=(u,h)=>{this.foundation.handleSelectAllRow(u,h)},this.renderPagination=(u,h)=>{if(!u)return null;const g=this.foundation.memoizedPagination(u);return b.createElement(Ee,{componentName:"Table"},m=>{const y=this.foundation.formatPaginationInfo(g,m.pageText);return b.createElement(Qs,{info:y,pagination:g,renderPagination:h})})},this.renderTitle=function(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},{title:h}=u;const{prefixCls:g,dataSource:m}=u;return typeof h=="function"&&(h=h(m)),L.isValidElement(h)||typeof h=="string"?b.createElement("div",{className:`${g}-title`,"x-semi-prop":"title"},h):null},this.renderEmpty=function(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{prefixCls:h,empty:g,dataSource:m}=u,y=`${h}-placeholder`;return n.foundation.isEmpty(m)?b.createElement(Ee,{componentName:"Table",key:"emptyText"},(f,S)=>b.createElement("div",{className:y},b.createElement("div",{className:`${h}-empty`,"x-semi-prop":"empty"},g||f.emptyText))):null},this.renderFooter=function(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},{footer:h}=u;const{prefixCls:g,dataSource:m}=u;return typeof h=="function"&&(h=h(m)),L.isValidElement(h)||typeof h=="string"?b.createElement("div",{className:`${g}-footer`,key:"footer","x-semi-prop":"footer"},h):null},this.renderMainTable=u=>{const h=this.adapter.useFixedHeader(),g=this.renderEmpty(u);return[this.renderTable(Object.assign(Object.assign({},u),{fixed:!1,useFixedHeader:h,headerRef:this._cacheHeaderRef,bodyRef:this.bodyWrapRef,includeHeader:!h,emptySlot:g})),this.renderFooter(u)]},this.renderTable=u=>{const{columns:h,filteredColumns:g,fixed:m,useFixedHeader:y,scroll:p,prefixCls:f,anyColumnFixed:S,includeHeader:v,showHeader:w,components:_,headerRef:O,bodyRef:I,onHeaderRow:E,rowSelection:k,dataSource:N,bodyHasScrollBar:P,disabledRowKeysSet:A,sticky:F}=u,K=x(k,"selectedRowKeysSet",new Set),z=this.adapter.getTableLayout(),q=m||y?b.createElement(Pu,{key:"head",tableLayout:z,ref:O,columns:g,prefixCls:f,fixed:m,handleBodyScroll:this.handleBodyScrollLeft,components:_,scroll:p,showHeader:w,selectedRowKeysSet:K,onHeaderRow:E,dataSource:N,bodyHasScrollBar:P,sticky:F}):null,V=b.createElement(Gu,Object.assign({},ye(u,["rowSelection","headWidths"]),{key:"body",ref:I,columns:g,fixed:m,prefixCls:f,handleWheel:this.handleWheel,handleBodyScroll:this.handleBodyScroll,anyColumnFixed:S,tableLayout:z,includeHeader:v,showHeader:w,scroll:p,components:_,store:this.store,selectedRowKeysSet:K,disabledRowKeysSet:A}));return[q,V]},this.handleColumns=(u,h)=>{const{hideExpandedColumn:g,scroll:m,prefixCls:y,expandCellFixed:p,expandIcon:f,rowSelection:S}=this.props,v="children";let w=we(h);const _=function(){let O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];Array.isArray(O)&&O.length&&le(O,(I,E,k)=>{const N=n.addFnsInColumn(I),P=I[v];if(Array.isArray(P)&&P.length){const A=[...P];_(A),N[v]=A}k[E]=N})};if(_(w),!g){const O=this.normalizeExpandColumn({prefixCls:y,expandCellFixed:p,expandIcon:f}),I=Ze(w,E=>E.key===B.DEFAULT_KEY_COLUMN_EXPAND);O&&(I>-1?w[I]=Object.assign(Object.assign({},O),w[I]):O.fixed==="right"?w=[...w,O]:w=[O,...w])}if(S&&!x(S,"hidden")){const O=Ze(w,E=>E.key===B.DEFAULT_KEY_COLUMN_SELECTION),I=this.normalizeSelectionColumn({rowSelection:S,prefixCls:y});O>-1?w[O]=Object.assign(Object.assign({},I),w[O]):I.fixed==="right"?w=[...w,I]:w=[I,...w]}return Wt(w),w},this.normalizeColumns=(u,h)=>we(this.getColumns(u,h)),this.mergePagination=u=>{const h=u==null?void 0:u.onChange,{scroll:g}=this.props;return x(g,"scrollToFirstRowOnChange")?Object.assign(Object.assign({},u),{onChange:(f,S)=>{this.foundation.setPage(f,S),typeof h=="function"&&h(f,S)}}):Object.assign({onChange:this.foundation.setPage},u)},this.foundation=new vt(this.adapter);const s=this.getColumns(e.columns,e.children),r=Ye(s),o=vt.initColumnsFilteredValueAndSorterOrder(we(r)),l=this.foundation.getFilteredSortedDataSource(this.props.dataSource,o),c=bd(this.props.pagination)?this.props.pagination:{},d=this.foundation.getCurrentPageData(l,c,o);this.state={cachedColumns:s,cachedChildren:e.children,flattenColumns:r,components:Ro(e.components,e.virtualized),queries:o,dataSource:d.dataSource,flattenData:[],expandedRowKeys:[...e.expandedRowKeys||[],...e.defaultExpandedRowKeys||[]],rowSelection:e.rowSelection?Re(e.rowSelection)?Object.assign({},e.rowSelection):{}:null,pagination:d.pagination,groups:null,allRowKeys:[],disabledRowKeys:[],disabledRowKeysSet:new Set,allDisabledRowKeys:[],allDisabledRowKeysSet:new Set,headWidths:[],bodyHasScrollBar:!1,prePropRowSelection:void 0,prePagination:void 0,halfCheckedRowKeys:[],halfCheckedRowKeysSet:new Set,keyEntities:{}},this.rootWrapRef=L.createRef(),this.wrapRef=L.createRef(),this.bodyWrapRef=L.createRef(),this.headerWrapRef=L.createRef(),this.store=new lu({hoveredRowKey:null,hoveredRowKeys:[]}),this.debouncedWindowResize=ul(this.handleWindowResize,150),this.cachedFilteredSortedDataSource=[],this.cachedFilteredSortedRowKeys=[],this.cachedFilteredSortedRowKeysSet=new Set,this.resizeObserver=null,this.hasBindWindowResize=!1}static getDerivedStateFromProps(e,t){const n={},{rowSelection:s,dataSource:r,childrenRecordName:o,rowKey:l,pagination:c}=e;if(e.columns&&e.children&&bt.warn("columns should not given by object and children at the same time"),e.columns&&e.columns!==t.cachedColumns){const d=Ye(e.columns);n.flattenColumns=d,n.queries=Ts(t.queries,d,null,!1),n.cachedColumns=e.columns,n.cachedChildren=null}else if(e.children&&e.children!==t.cachedChildren){const d=Ut(e.children),u=Ye(d),h=Ts(t.queries,u,null,!1);n.flattenColumns=u,n.queries=[...h],n.cachedColumns=[...d],n.cachedChildren=e.children}if(s!==t.prePropRowSelection){let d={};Re(t.rowSelection)&&(d=Object.assign(Object.assign({},d),t.rowSelection)),Re(s)&&(d=Object.assign(Object.assign({},d),s));const u=x(s,"selectedRowKeys"),h=x(s,"getCheckboxProps");if(u&&Array.isArray(u)&&(d.selectedRowKeysSet=new Set(u)),ue(h)){const g=Qi({dataSource:r,getCheckboxProps:h,childrenRecordName:o,rowKey:l}),m=new Set(g);n.disabledRowKeys=g,n.disabledRowKeysSet=m,n.allDisabledRowKeys=g,n.allDisabledRowKeysSet=m}n.rowSelection=d,n.prePropRowSelection=s}if(c!==t.prePagination){let d={};Re(t.pagination)&&(d=Object.assign(Object.assign({},d),t.pagination)),Re(c)&&(d=Object.assign(Object.assign({},d),c)),n.pagination=d,n.prePagination=c}return n}componentDidMount(){super.componentDidMount(),this.setScrollPosition("left");const{dataSource:e,childrenRecordName:t}=this.props;if(x(this.state.rowSelection,"checkRelation","unRelated")==="related"&&e&&e.length){const s=this.foundation.buildKeyEntities(e);this.adapter.setKeyEntities(s)}typeof window<"u"&&typeof window.requestAnimationFrame=="function"?window.requestAnimationFrame(()=>this.setScrollPositionClassName()):setTimeout(()=>this.setScrollPositionClassName(),0),this.syncResizeListeners()}componentDidUpdate(e,t){const{dataSource:n,expandedRowKeys:s,expandAllRows:r,expandAllGroupRows:o,virtualized:l,components:c,pagination:d}=this.props,{pagination:u,queries:h,cachedColumns:g,cachedChildren:m,groups:y}=this.state,p={};this._warnIfNoKey(),Array.isArray(s)&&s!==e.expandedRowKeys&&this.setState({expandedRowKeys:s}),(c!==e.components||l!==e.virtualized)&&this.setState({components:Ro(c,l)}),(r!==e.expandAllRows||o!==e.expandAllGroupRows)&&this.foundation.initExpandedRowKeys({groups:y});const f=x(this.props.rowSelection,"getCheckboxProps"),S=x(e.rowSelection,"getCheckboxProps");if(n!==e.dataSource||h!==t.queries||f!==S){const v=[...n],w=this.foundation.getFilteredSortedDataSource(v,h),_=this.foundation.getAllDisabledRowKeys(w);if(this.foundation.setCachedFilteredSortedDataSource(w),this.foundation.setAllDisabledRowKeys(_),p.dataSource=w,x(this.state.rowSelection,"checkRelation","unRelated")==="related"){const I=this.foundation.buildKeyEntities(v);this.adapter.setKeyEntities(I)}this.props.groupBy&&(p.groups=null)}if(n!==e.dataSource&&(p.pagination=Re(u)?Object.assign(Object.assign({},u),{currentPage:Re(d)&&d.currentPage?d.currentPage:1}):u),Object.keys(p).length){const{pagination:v=null,queries:w=null,dataSource:_=null}=p,O=this.foundation.getCurrentPageData(_,v,w);this.adapter.setAllRowKeys(O.allRowKeys),this.adapter.setDisabledRowKeys(O.disabledRowKeys),"dataSource"in p&&((this.props.defaultExpandAllRows&&O.groups&&O.groups.size||this.props.expandAllRows||this.props.expandAllGroupRows)&&this.foundation.initExpandedRowKeys(O),p.pagination=O.pagination);const I=Object.keys(p);for(const E of I)this.setState({[E]:O[E]})}this.syncResizeListeners()}componentWillUnmount(){super.componentWillUnmount(),this.unbindWindowResize(),this.debouncedWindowResize&&(this.debouncedWindowResize.cancel(),this.debouncedWindowResize=null),this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null)}render(){let e=this.props,{scroll:t,prefixCls:n,className:s,style:r={},bordered:o,id:l,pagination:c,virtualized:d,size:u,renderPagination:h,getVirtualizedListRef:g,loading:m,hideExpandedColumn:y,rowSelection:p}=e,f=Yu(e,["scroll","prefixCls","className","style","bordered","id","pagination","virtualized","size","renderPagination","getVirtualizedListRef","loading","hideExpandedColumn","rowSelection"]),{rowSelection:S,expandedRowKeys:v,headWidths:w,tableWidth:_,pagination:O,dataSource:I,queries:E,cachedColumns:k,bodyHasScrollBar:N}=this.state;r=Object.assign({},r);let P;if(this.adapter.isAnyColumnUseFullRender(E))P=this.handleColumns(E,k);else{const oe=p&&!x(p,"hidden");P=this.foundation.memoizedWithFnsColumns(E,k,oe,y,N)}const A=this.foundation.memoizedFilterColumns(P),F=this.foundation.memoizedFlattenFnsColumns(P),K=this.adapter.isAnyColumnFixed(P),z=Object.assign(Object.assign(Object.assign({},f),this.state),{virtualized:d,scroll:t,prefixCls:n,size:u,hideExpandedColumn:y,columns:P,anyColumnFixed:K,rowExpandable:this.mergedRowExpandable,pagination:O,dataSource:I,rowSelection:S,expandedRowKeys:v,renderExpandIcon:this.renderExpandIcon,filteredColumns:A}),q=x(t,"x"),V=x(t,"y");d&&typeof r.width!="number"&&(r.width=q);const W=M({[`${n}-${B.SIZE_SMALL}`]:u===B.SIZE_SMALL,[`${n}-${B.SIZE_MIDDLE}`]:u===B.SIZE_MIDDLE,[`${n}-virtualized`]:!!d,[`${n}-bordered`]:o,[`${n}-fixed-header`]:!!V,[`${n}-scroll-position-left`]:["both","left"].includes(this.position),[`${n}-scroll-position-right`]:["both","right"].includes(this.position)}),G=O&&c?this.renderPagination(O,h):null,se=x(c,"position","bottom"),Q=Object.assign(Object.assign({},this.context),{headWidths:w,tableWidth:_,anyColumnFixed:K,flattenedColumns:F,renderExpandIcon:this.renderExpandIcon,renderSelection:this.renderSelection,setHeadWidths:this.setHeadWidths,getHeadWidths:this.getHeadWidths,getCellWidths:this.getCellWidths,handleRowExpanded:this.handleRowExpanded,getVirtualizedListRef:g,setBodyHasScrollbar:this.setBodyHasScrollbar,handleRowSelection:this.handleRowClickSelection,headerStyle:z.headerStyle,rowSpanHover:z.rowSpanHover}),pe=this.getDataAttr(f);return b.createElement("div",Object.assign({ref:this.rootWrapRef,className:M(s,`${n}-wrapper`,`${n}-wrapper-${z.direction}`),"data-column-fixed":K,style:r,id:l},pe),b.createElement(Su,Object.assign({},Q,{direction:z.direction}),b.createElement(mi,{spinning:m,size:"large"},b.createElement("div",{ref:this.wrapRef,className:W},b.createElement(b.Fragment,{key:"pagination-top"},["top","both"].includes(se)?G:null),this.renderTitle({title:z.title,dataSource:z.dataSource,prefixCls:z.prefixCls}),b.createElement("div",{className:`${n}-container`},this.renderMainTable(Object.assign({},z))),b.createElement(b.Fragment,{key:"pagination-bottom"},["bottom","both"].includes(se)?G:null)))))}};ot.contextType=ke;ot.propTypes={className:a.string,style:a.object,prefixCls:a.string,components:a.any,bordered:a.bool,loading:a.bool,size:a.oneOf(B.SIZES),tableLayout:a.oneOf(B.LAYOUTS),columns:a.arrayOf(a.shape(ea)),hideExpandedColumn:a.bool,id:a.string,expandIcon:a.oneOfType([a.bool,a.func,a.node]),expandCellFixed:a.oneOf(B.FIXED_SET),title:a.oneOfType([a.string,a.node,a.func]),onHeaderRow:a.func,showHeader:a.bool,indentSize:a.number,rowKey:a.oneOfType([a.func,a.string,a.number]),onRow:a.func,onExpandedRowsChange:a.func,onExpand:a.func,rowExpandable:a.func,expandedRowRender:a.func,expandedRowKeys:a.array,defaultExpandAllRows:a.bool,expandAllRows:a.bool,defaultExpandAllGroupRows:a.bool,expandAllGroupRows:a.bool,defaultExpandedRowKeys:a.array,pagination:a.oneOfType([a.object,a.bool]),renderPagination:a.func,footer:a.oneOfType([a.func,a.string,a.node]),empty:a.node,dataSource:a.array,childrenRecordName:a.string,rowSelection:a.oneOfType([a.object,a.bool]),onChange:a.func,scroll:a.shape({x:a.oneOfType([a.number,a.string,a.bool]),y:a.oneOfType([a.number,a.string])}),groupBy:a.oneOfType([a.string,a.number,a.func]),headerStyle:a.object,renderGroupSection:a.oneOfType([a.func]),onGroupedRow:a.func,clickGroupedRowToExpand:a.bool,virtualized:a.oneOfType([a.object,a.bool]),dropdownPrefixCls:a.string,expandRowByClick:a.bool,getVirtualizedListRef:a.func,rowSpanHover:a.bool};ot.defaultProps={tableLayout:"",dataSource:[],prefixCls:ce.PREFIX,rowSelection:null,className:"",childrenRecordName:"children",size:"default",loading:!1,bordered:!1,expandCellFixed:!1,hideExpandedColumn:!0,showHeader:!0,indentSize:ne.DEFAULT_INDENT_WIDTH,onChange:H,pagination:!0,rowKey:"key",defaultExpandedRowKeys:[],defaultExpandAllRows:!1,defaultExpandAllGroupRows:!1,expandAllRows:!1,expandAllGroupRows:!1,onFilterDropdownVisibleChange:H,onExpand:H,onExpandedRowsChange:H,expandRowByClick:!1};var gs,Mo;function Xu(){if(Mo)return gs;Mo=1;var i=ai();function e(t,n,s){var r=t.length;return s=s===void 0?r:s,!n&&s>=r?t:i(t,n,s)}return gs=e,gs}var ms,jo;function Zu(){if(jo)return ms;jo=1;var i=Xa(),e=Za(),t="[object RegExp]";function n(s){return e(s)&&i(s)==t}return ms=n,ms}var bs,zo;function Qu(){if(zo)return bs;zo=1;var i=Zu(),e=di(),t=Qa(),n=t&&t.isRegExp,s=n?e(n):i;return bs=s,bs}var ys,Fo;function Ju(){if(Fo)return ys;Fo=1;function i(e){return e.split("")}return ys=i,ys}var Ss,Ko;function eh(){if(Ko)return Ss;Ko=1;var i="\\ud800-\\udfff",e="\\u0300-\\u036f",t="\\ufe20-\\ufe2f",n="\\u20d0-\\u20ff",s=e+t+n,r="\\ufe0e\\ufe0f",o="["+i+"]",l="["+s+"]",c="\\ud83c[\\udffb-\\udfff]",d="(?:"+l+"|"+c+")",u="[^"+i+"]",h="(?:\\ud83c[\\udde6-\\uddff]){2}",g="[\\ud800-\\udbff][\\udc00-\\udfff]",m="\\u200d",y=d+"?",p="["+r+"]?",f="(?:"+m+"(?:"+[u,h,g].join("|")+")"+p+y+")*",S=p+y+f,v="(?:"+[u+l+"?",l,h,g,o].join("|")+")",w=RegExp(c+"(?="+c+")|"+v+S,"g");function _(O){return O.match(w)||[]}return Ss=_,Ss}var ws,$o;function th(){if($o)return ws;$o=1;var i=Ju(),e=nr(),t=eh();function n(s){return e(s)?t(s):i(s)}return ws=n,ws}var vs,Bo;function nh(){if(Bo)return vs;Bo=1;var i=Ja(),e=Xu(),t=nr(),n=Ns(),s=Qu(),r=th(),o=el(),l=4294967295;function c(d,u,h){return h&&typeof h!="number"&&n(d,u,h)&&(u=h=void 0),h=h===void 0?l:h>>>0,h?(d=o(d),d&&(typeof u=="string"||u!=null&&!s(u))&&(u=i(u),!u&&t(d))?e(r(d),0,h):d.split(u,h)):[]}return vs=c,vs}var sh=nh();const aa=te(sh);function rh(i){const e=aa(i,/\s+/);for(var t=arguments.length,n=new Array(t>1?t-1:0),s=1;s!e.includes(o));return M(i,...r)}function oh(i){const e=aa(i,/\s+/);for(var t=arguments.length,n=new Array(t>1?t-1:0),s=1;s{const o=e.indexOf(r);o>-1&&e.splice(o,1)}),M(...e)}var ct={exports:{}},dt={},ut={exports:{}},Tt={exports:{}},Ho;function ih(){if(Ho)return Tt.exports;Ho=1;function i(t){var n,s,r="";if(typeof t=="string"||typeof t=="number")r+=t;else if(typeof t=="object")if(Array.isArray(t)){var o=t.length;for(n=0;n{for(var T in R)t(C,T,{get:R[T],enumerable:!0})},c=(C,R,T,D)=>{if(R&&typeof R=="object"||typeof R=="function")for(let j of s(R))!o.call(C,j)&&j!==T&&t(C,j,{get:()=>R[j],enumerable:!(D=n(R,j))||D.enumerable});return C},d=(C,R,T)=>(T=C!=null?e(r(C)):{},c(!C||!C.__esModule?t(T,"default",{value:C,enumerable:!0}):T,C)),u=C=>c(t({},"__esModule",{value:!0}),C),h={};l(h,{DraggableCore:()=>Le,default:()=>Rt}),Cs=u(h);var g=d(St()),m=d(zt()),y=d(pr()),p=ih();function f(C,R){for(let T=0,D=C.length;T"u")return"";const D=(T=(R=window.document)==null?void 0:R.documentElement)==null?void 0:T.style;if(!D||C in D)return"";for(let j=0;jR===T.identifier)||C.changedTouches&&f(C.changedTouches,T=>R===T.identifier)}function ie(C){if(C.targetTouches&&C.targetTouches[0])return C.targetTouches[0].identifier;if(C.changedTouches&&C.changedTouches[0])return C.changedTouches[0].identifier}function Ot(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0}function ha(C,R){if(!C)return;let T=C.getElementById("react-draggable-style-el");if(!T){T=C.createElement("style"),T.type="text/css",T.id="react-draggable-style-el";const D=R??Ot();D&&T.setAttribute("nonce",D),T.innerHTML=`.react-draggable-transparent-selection *::-moz-selection {all: inherit;} +`,T.innerHTML+=`.react-draggable-transparent-selection *::selection {all: inherit;} +`,C.getElementsByTagName("head")[0].appendChild(T)}C.body&&pa(C.body,"react-draggable-transparent-selection")}function or(C){window.requestAnimationFrame?window.requestAnimationFrame(()=>{ir(C)}):ir(C)}function ir(C){if(C)try{C.body&&fa(C.body,"react-draggable-transparent-selection");const R=C.selection;if(R)R.empty();else{const T=(C.defaultView||window).getSelection();T&&T.type!=="Caret"&&T.removeAllRanges()}}catch{}}function pa(C,R){C.classList?C.classList.add(R):C.className.match(new RegExp(`(?:^|\\s)${R}(?!\\S)`))||(C.className+=` ${R}`)}function fa(C,R){C.classList?C.classList.remove(R):C.className=C.className.replace(new RegExp(`(?:^|\\s)${R}(?!\\S)`,"g"),"")}function ga(C,R,T){if(!C.props.bounds)return[R,T];let{bounds:D}=C.props;D=typeof D=="string"?D:ya(D);const j=fn(C);if(typeof D=="string"){const{ownerDocument:J}=j,Y=J.defaultView;if(!Y)throw new Error("Cannot resolve the owner window of the draggable node.");let ee;if(D==="parent"?ee=j.parentNode:ee=j.getRootNode().querySelector(D),!(ee instanceof Y.HTMLElement))throw new Error('Bounds selector "'+D+'" could not find an element.');const fe=ee,Me=Y.getComputedStyle(j),Ue=Y.getComputedStyle(fe);D={left:-j.offsetLeft+w(Ue.paddingLeft)+w(Me.marginLeft),top:-j.offsetTop+w(Ue.paddingTop)+w(Me.marginTop),right:G(fe)-V(j)-j.offsetLeft+w(Ue.paddingRight)-w(Me.marginRight),bottom:W(fe)-q(j)-j.offsetTop+w(Ue.paddingBottom)-w(Me.marginBottom)}}return v(D.right)&&(R=Math.min(R,D.right)),v(D.bottom)&&(T=Math.min(T,D.bottom)),v(D.left)&&(R=Math.max(R,D.left)),v(D.top)&&(T=Math.max(T,D.top)),[R,T]}function ar(C,R,T){const D=Math.round(R/C[0])*C[0],j=Math.round(T/C[1])*C[1];return[D,j]}function ma(C){return C.props.axis==="both"||C.props.axis==="x"}function ba(C){return C.props.axis==="both"||C.props.axis==="y"}function un(C,R,T){const D=typeof R=="number"?de(C,R):null;if(typeof R=="number"&&!D)return null;const j=fn(T),J=T.props.offsetParent||j.offsetParent||j.ownerDocument.body;return se(D||C,J,T.props.scale)}function hn(C,R,T){const D=!v(C.lastX),j=fn(C);return D?{node:j,deltaX:0,deltaY:0,lastX:R,lastY:T,x:R,y:T}:{node:j,deltaX:R-C.lastX,deltaY:T-C.lastY,lastX:C.lastX,lastY:C.lastY,x:R,y:T}}function pn(C,R){const T=C.props.scale;return{node:R.node,x:C.state.x+R.deltaX/T,y:C.state.y+R.deltaY/T,deltaX:R.deltaX/T,deltaY:R.deltaY/T,lastX:C.state.x,lastY:C.state.y}}function ya(C){return{left:C.left,top:C.top,right:C.right,bottom:C.bottom}}function fn(C){const R=C.findDOMNode();if(!R)throw new Error(": Unmounted during event!");return R}var gn=d(St()),ae=d(zt()),Sa=d(pr());function Se(...C){i.DRAGGABLE_DEBUG&&console.log(...C)}var me={touch:{start:"touchstart",move:"touchmove",stop:"touchend"},mouse:{start:"mousedown",move:"mousemove",stop:"mouseup"}},Ie=me.mouse,Le=class extends gn.Component{constructor(){super(...arguments),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,this.touchIdentifier=null,this.mounted=!1,this.handleDragStart=C=>{if(this.props.onMouseDown(C),!this.props.allowAnyClick&&(typeof C.button=="number"&&C.button!==0||C.ctrlKey))return!1;const R=this.findDOMNode();if(!R||!R.ownerDocument||!R.ownerDocument.body)throw new Error(" not mounted on DragStart!");const{ownerDocument:T}=R;if(this.props.disabled||!(C.target instanceof T.defaultView.Node)||this.props.handle&&!F(C.target,this.props.handle,R)||this.props.cancel&&F(C.target,this.props.cancel,R))return;C.type==="touchstart"&&!this.props.allowMobileScroll&&C.preventDefault();const D=ie(C);this.touchIdentifier=D;const j=un(C,D,this);if(j==null)return;const{x:J,y:Y}=j,ee=hn(this,J,Y);Se("DraggableCore: handleDragStart: %j",ee),Se("calling",this.props.onStart),!(this.props.onStart(C,ee)===!1||this.mounted===!1)&&(this.props.enableUserSelectHack&&ha(T,this.props.nonce),this.dragging=!0,this.lastX=J,this.lastY=Y,K(T,Ie.move,this.handleDrag),K(T,Ie.stop,this.handleDragStop))},this.handleDrag=C=>{const R=un(C,this.touchIdentifier,this);if(R==null)return;let{x:T,y:D}=R;if(Array.isArray(this.props.grid)){let Y=T-this.lastX,ee=D-this.lastY;if([Y,ee]=ar(this.props.grid,Y,ee),!Y&&!ee)return;T=this.lastX+Y,D=this.lastY+ee}const j=hn(this,T,D);if(Se("DraggableCore: handleDrag: %j",j),this.props.onDrag(C,j)===!1||this.mounted===!1){try{this.handleDragStop(new MouseEvent("mouseup"))}catch{const Y=document.createEvent("MouseEvents");Y.initMouseEvent("mouseup",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),this.handleDragStop(Y)}return}this.lastX=T,this.lastY=D},this.handleDragStop=C=>{if(!this.dragging)return;const R=un(C,this.touchIdentifier,this);if(R==null)return;let{x:T,y:D}=R;if(Array.isArray(this.props.grid)){let ee=T-this.lastX||0,fe=D-this.lastY||0;[ee,fe]=ar(this.props.grid,ee,fe),T=this.lastX+ee,D=this.lastY+fe}const j=hn(this,T,D);if(this.props.onStop(C,j)===!1||this.mounted===!1)return!1;const Y=this.findDOMNode();Y&&this.props.enableUserSelectHack&&or(Y.ownerDocument),Se("DraggableCore: handleDragStop: %j",j),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,Y&&(Se("DraggableCore: Removing handlers"),z(Y.ownerDocument,Ie.move,this.handleDrag),z(Y.ownerDocument,Ie.stop,this.handleDragStop))},this.onMouseDown=C=>(Ie=me.mouse,this.handleDragStart(C)),this.onMouseUp=C=>(Ie=me.mouse,this.handleDragStop(C)),this.onTouchStart=C=>(Ie=me.touch,this.handleDragStart(C)),this.onTouchEnd=C=>(Ie=me.touch,this.handleDragStop(C))}componentDidMount(){this.mounted=!0;const C=this.findDOMNode();C&&K(C,me.touch.start,this.onTouchStart,{passive:!1})}componentWillUnmount(){this.mounted=!1;const C=this.findDOMNode();if(C){const{ownerDocument:R}=C;z(R,me.mouse.move,this.handleDrag),z(R,me.touch.move,this.handleDrag),z(R,me.mouse.stop,this.handleDragStop),z(R,me.touch.stop,this.handleDragStop),z(C,me.touch.start,this.onTouchStart,{passive:!1}),this.props.enableUserSelectHack&&or(R)}}findDOMNode(){var C;if((C=this.props)!=null&&C.nodeRef)return this.props.nodeRef.current;const R=Sa.default;return typeof R.findDOMNode=="function"?R.findDOMNode(this):(Se("react-draggable: ReactDOM.findDOMNode is not available in React 19+. You must provide a nodeRef prop. See: https://github.com/react-grid-layout/react-draggable#noderef"),null)}render(){return gn.cloneElement(gn.Children.only(this.props.children),{onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}};Le.displayName="DraggableCore",Le.propTypes={allowAnyClick:ae.default.bool,allowMobileScroll:ae.default.bool,children:ae.default.node.isRequired,disabled:ae.default.bool,enableUserSelectHack:ae.default.bool,offsetParent:function(C,R){if(C[R]&&C[R].nodeType!==1)throw new Error("Draggable's offsetParent must be a DOM Node.")},grid:ae.default.arrayOf(ae.default.number),handle:ae.default.string,cancel:ae.default.string,nodeRef:ae.default.object,nonce:ae.default.string,onStart:ae.default.func,onDrag:ae.default.func,onStop:ae.default.func,onMouseDown:ae.default.func,scale:ae.default.number,className:_,style:_,transform:_},Le.defaultProps={allowAnyClick:!1,allowMobileScroll:!1,disabled:!1,enableUserSelectHack:!0,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){},scale:1};var Rt=class extends g.Component{constructor(C){super(C),this.onDragStart=(R,T)=>{if(Se("Draggable: onDragStart: %j",T),this.props.onStart(R,pn(this,T))===!1)return!1;this.setState({dragging:!0,dragged:!0})},this.onDrag=(R,T)=>{if(!this.state.dragging)return!1;Se("Draggable: onDrag: %j",T);const D=pn(this,T),j={x:D.x,y:D.y,slackX:0,slackY:0};if(this.props.bounds){const{x:Y,y:ee}=j;j.x+=this.state.slackX,j.y+=this.state.slackY;const[fe,Me]=ga(this,j.x,j.y);j.x=fe,j.y=Me,j.slackX=this.state.slackX+(Y-j.x),j.slackY=this.state.slackY+(ee-j.y),D.x=j.x,D.y=j.y,D.deltaX=j.x-this.state.x,D.deltaY=j.y-this.state.y}if(this.props.onDrag(R,D)===!1)return!1;this.setState(j)},this.onDragStop=(R,T)=>{if(!this.state.dragging||this.props.onStop(R,pn(this,T))===!1)return!1;Se("Draggable: onDragStop: %j",T);const j={dragging:!1,slackX:0,slackY:0};if(!!this.props.position){const{x:Y,y:ee}=this.props.position;j.x=Y,j.y=ee}this.setState(j)},this.state={dragging:!1,dragged:!1,x:C.position?C.position.x:C.defaultPosition.x,y:C.position?C.position.y:C.defaultPosition.y,prevPropsPosition:{...C.position},slackX:0,slackY:0,isElementSVG:!1},C.position&&!(C.onDrag||C.onStop)&&console.warn("A `position` was applied to this , without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element.")}static getDerivedStateFromProps({position:C},{prevPropsPosition:R}){return C&&(!R||C.x!==R.x||C.y!==R.y)?(Se("Draggable: getDerivedStateFromProps %j",{position:C,prevPropsPosition:R}),{x:C.x,y:C.y,prevPropsPosition:{...C}}):null}componentDidMount(){typeof window.SVGElement<"u"&&this.findDOMNode()instanceof window.SVGElement&&this.setState({isElementSVG:!0})}componentWillUnmount(){this.state.dragging&&this.setState({dragging:!1})}findDOMNode(){var C;if((C=this.props)!=null&&C.nodeRef)return this.props.nodeRef.current;const R=y.default;return typeof R.findDOMNode=="function"?R.findDOMNode(this):null}render(){const{axis:C,bounds:R,children:T,defaultPosition:D,defaultClassName:j,defaultClassNameDragging:J,defaultClassNameDragged:Y,position:ee,positionOffset:fe,scale:Me,...Ue}=this.props;let mn={},lr=null;const cr=!!!ee||this.state.dragging,dr=ee||D,ur={x:ma(this)&&cr?this.state.x:dr.x,y:ba(this)&&cr?this.state.y:dr.y};this.state.isElementSVG?lr=pe(ur,fe):mn=Q(ur,fe);const bn=g.Children.only(T),wa=(0,p.clsx)(bn.props.className||"",j,{[J]:this.state.dragging,[Y]:this.state.dragged});return g.createElement(Le,{...Ue,onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop},g.cloneElement(bn,{className:wa,style:{...bn.props.style,...mn},transform:lr}))}};return Rt.displayName="Draggable",Rt.propTypes={...Le.propTypes,axis:m.default.oneOf(["both","x","y","none"]),bounds:m.default.oneOfType([m.default.shape({left:m.default.number,right:m.default.number,top:m.default.number,bottom:m.default.number}),m.default.string,m.default.oneOf([!1])]),defaultClassName:m.default.string,defaultClassNameDragging:m.default.string,defaultClassNameDragged:m.default.string,defaultPosition:m.default.shape({x:m.default.number,y:m.default.number}),positionOffset:m.default.shape({x:m.default.oneOfType([m.default.number,m.default.string]),y:m.default.oneOfType([m.default.number,m.default.string])}),position:m.default.shape({x:m.default.number,y:m.default.number}),className:_,style:_,transform:_},Rt.defaultProps={...Le.defaultProps,axis:"both",bounds:!1,defaultClassName:"react-draggable",defaultClassNameDragging:"react-draggable-dragging",defaultClassNameDragged:"react-draggable-dragged",defaultPosition:{x:0,y:0},scale:1},Cs}var Uo;function la(){if(Uo)return ut.exports;Uo=1;const i=ah(),e=i.DraggableCore,t=i.default||i;return ut.exports=t,ut.exports.default=t,ut.exports.DraggableCore=e,ut.exports}var It={},Vo;function lh(){if(Vo)return It;Vo=1,It.__esModule=!0,It.cloneElement=l;var i=e(St());function e(c){return c&&c.__esModule?c:{default:c}}function t(c,d){var u=Object.keys(c);if(Object.getOwnPropertySymbols){var h=Object.getOwnPropertySymbols(c);d&&(h=h.filter(function(g){return Object.getOwnPropertyDescriptor(c,g).enumerable})),u.push.apply(u,h)}return u}function n(c){for(var d=1;dMath.abs(F*P)?f=p/P:p=f*P}const O=p,I=f;let E=this.slack||[0,0],k=E[0],N=E[1];return p+=k,f+=N,v&&(p=Math.max(v[0],p),f=Math.max(v[1],f)),w&&(p=Math.min(w[0],p),f=Math.min(w[1],f)),this.slack=[k+(O-p),N+(I-f)],[p,f]}resizeHandler(p,f){return(S,v)=>{var w,_,O,I;let E=v.node,k=v.deltaX,N=v.deltaY;p==="onResizeStart"&&this.resetData();const P=(this.props.axis==="both"||this.props.axis==="x")&&f!=="n"&&f!=="s",A=(this.props.axis==="both"||this.props.axis==="y")&&f!=="e"&&f!=="w";if(!P&&!A)return;const F=f[0],K=f[f.length-1],z=E.getBoundingClientRect();if(this.lastHandleRect!=null){if(K==="w"){const ie=z.left-this.lastHandleRect.left;k+=ie}if(F==="n"){const ie=z.top-this.lastHandleRect.top;N+=ie}}this.lastHandleRect=z,K==="w"&&(k=-k),F==="n"&&(N=-N);const q=(w=(_=this.lastSize)==null?void 0:_.width)!=null?w:this.props.width,V=(O=(I=this.lastSize)==null?void 0:I.height)!=null?O:this.props.height;let W=q+(P?k/this.props.transformScale:0),G=V+(A?N/this.props.transformScale:0);var se=this.runConstraints(W,G);if(W=se[0],G=se[1],p==="onResizeStop"&&this.lastSize){var Q=this.lastSize;W=Q.width,G=Q.height}const pe=W!==q||G!==V;p!=="onResizeStop"&&(this.lastSize={width:W,height:G});const oe=typeof this.props[p]=="function"?this.props[p]:null;oe&&!(p==="onResize"&&!pe)&&(S.persist==null||S.persist(),oe(S,{node:E,size:{width:W,height:G},handle:f})),p==="onResizeStop"&&this.resetData()}}renderResizeHandle(p,f){const S=this.props.handle;if(!S)return i.createElement("span",{className:"react-resizable-handle react-resizable-handle-"+p,ref:f});if(typeof S=="function")return S(p,f);const v=typeof S.type=="string",w=d({ref:f},v?{}:{handleAxis:p});return i.cloneElement(S,w)}render(){const p=this.props,f=p.children,S=p.className,v=p.draggableOpts;p.width,p.height,p.handle,p.handleSize,p.lockAspectRatio,p.axis,p.minConstraints,p.maxConstraints,p.onResize,p.onResizeStop,p.onResizeStart;const w=p.resizeHandles;p.transformScale;const _=l(p,s);return(0,t.cloneElement)(f,d(d({},_),{},{className:(S?S+" ":"")+"react-resizable",children:[...i.Children.toArray(f.props.children),...w.map(O=>{var I;const E=(I=this.handleRefs[O])!=null?I:this.handleRefs[O]=i.createRef();return i.createElement(e.DraggableCore,o({},v,{nodeRef:E,key:"resizableHandle-"+O,onStop:this.resizeHandler("onResizeStop",O),onStart:this.resizeHandler("onResizeStart",O),onDrag:this.resizeHandler("onResize",O)}),this.renderResizeHandle(O,E))})]}))}};return dt.default=m,m.propTypes=n.resizableProps,m.defaultProps={axis:"both",handleSize:[20,20],lockAspectRatio:!1,minConstraints:[20,20],maxConstraints:[1/0,1/0],resizeHandles:["se"],transformScale:1},dt}var pt={},Yo;function ch(){if(Yo)return pt;Yo=1,pt.__esModule=!0,pt.default=void 0;var i=o(St()),e=r(zt()),t=r(da()),n=ca();const s=["handle","handleSize","onResize","onResizeStart","onResizeStop","draggableOpts","minConstraints","maxConstraints","lockAspectRatio","axis","width","height","resizeHandles","style","transformScale"];function r(p){return p&&p.__esModule?p:{default:p}}function o(p,f){if(typeof WeakMap=="function")var S=new WeakMap,v=new WeakMap;return(o=function(w,_){if(!_&&w&&w.__esModule)return w;var O,I,E={__proto__:null,default:w};if(w===null||typeof w!="object"&&typeof w!="function")return E;if(O=_?v:S){if(O.has(w))return O.get(w);O.set(w,E)}for(const k in w)k!=="default"&&{}.hasOwnProperty.call(w,k)&&((I=(O=Object.defineProperty)&&Object.getOwnPropertyDescriptor(w,k))&&(I.get||I.set)?O(E,k,I):E[k]=w[k]);return E})(p,f)}function l(){return l=Object.assign?Object.assign.bind():function(p){for(var f=1;f{const v=S.size;this.props.onResize?(f.persist==null||f.persist(),this.setState(v,()=>this.props.onResize&&this.props.onResize(f,S))):this.setState(v)}}static getDerivedStateFromProps(f,S){return S.propsWidth!==f.width||S.propsHeight!==f.height?{width:f.width,height:f.height,propsWidth:f.width,propsHeight:f.height}:null}render(){const f=this.props,S=f.handle,v=f.handleSize;f.onResize;const w=f.onResizeStart,_=f.onResizeStop,O=f.draggableOpts,I=f.minConstraints,E=f.maxConstraints,k=f.lockAspectRatio,N=f.axis;f.width,f.height;const P=f.resizeHandles,A=f.style,F=f.transformScale,K=m(f,s);return i.createElement(t.default,{axis:N,draggableOpts:O,handle:S,handleSize:v,height:this.state.height,lockAspectRatio:k,maxConstraints:E,minConstraints:I,onResizeStart:w,onResize:this.onResize,onResizeStop:_,resizeHandles:P,transformScale:F,width:this.state.width},i.createElement("div",l({},K,{style:d(d({},A),{},{width:this.state.width+"px",height:this.state.height+"px"})})))}};return pt.default=y,y.propTypes=d(d({},n.resizableProps),{},{children:e.default.element}),pt}var Xo;function dh(){return Xo||(Xo=1,ct.exports=function(){throw new Error("Don't instantiate Resizable directly! Use require('react-resizable').Resizable")},ct.exports.Resizable=da().default,ct.exports.ResizableBox=ch().default),ct.exports}var uh=dh(),hh=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);sb.createElement(b.Fragment,{key:u},d)),b.createElement(uh.Resizable,{width:r,height:0,onResize:t,onResizeStart:n,onResizeStop:s,draggableOpts:{enableUserSelectHack:!1},axis:"x"},b.createElement("th",Object.assign({},l),c))}}var fh=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);s0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;const{components:t,columns:n,resizable:s}=i,r=fh(i,["components","columns","resizable"]),o="children",l=x(s,"onResize",H),c=x(s,"onResizeStart",H),d=x(s,"onResizeStop",H),u=Array.isArray(n)&&n.length?n:Ut(i.children),h=Wt(we(u),o),g=Wt(we(u),o);typeof i.expandedRowRender=="function"&&!i.hideExpandedColumn&&!We(h,E=>E.key===B.DEFAULT_KEY_COLUMN_EXPAND)&&g.unshift({key:B.DEFAULT_KEY_COLUMN_EXPAND,width:ne.DEFAULT_WIDTH_COLUMN_EXPAND}),i.rowSelection&&!x(i.rowSelection,"hidden")&&!We(h,E=>E.key===B.DEFAULT_KEY_COLUMN_SELECTION)&&g.unshift({width:x(i,"rowSelection.width",ne.DEFAULT_WIDTH_COLUMN_SELECTION),key:B.DEFAULT_KEY_COLUMN_SELECTION});const[m,y]=L.useState(g);L.useEffect(()=>{const E=ru(m,g);y(Ts(m,E))},[n,i.expandedRowRender,i.hideExpandedColumn,i.rowSelection]);const p=L.useMemo(()=>Zt({header:{cell:ph}},t),[t]),f=x(s,"handlerClassName","resizing"),S=E=>(k,N)=>{let{size:P}=N;const A=we(m),F=Mt(A,E,o);let K=Object.assign(Object.assign({},F),{width:P.width});const z=l(K)||{};K=Object.assign(Object.assign({},K),z),Object.assign(F,K),y(A)},v=E=>k=>{if(typeof window<"u"){const K=window.getSelection();K&&K.removeAllRanges()}const N=we(m),P=Mt(N,E,o);let A=Object.assign(Object.assign({},P),{className:rh(P.className,f)});const F=c(A)||{};A=Object.assign(Object.assign({},A),F),Object.assign(P,A),y(N)},w=E=>k=>{const N=we(m),P=Mt(N,E,o);let A=Object.assign(Object.assign({},P),{className:oh(P.className,f)});const F=d(A)||{};A=Object.assign(Object.assign({},A),F),Object.assign(P,A),y(N)},_=function(E,k){let N=arguments.length>3?arguments[3]:void 0;return Object.assign(Object.assign({},E),{onHeaderCell:P=>Object.assign(Object.assign({},N),{width:P.width,onResize:S(P),onResizeStart:v(P),onResizeStop:w(P)})})},O=function(){let E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return Array.isArray(E)&&E.length?E.map((N,P)=>{var A,F;const K=(F=(A=N.onHeaderCell)===null||A===void 0?void 0:A.call(N,N,P,k))!==null&&F!==void 0?F:{};Object.assign(N,_(N,P,k,K));const z=N[o];return Array.isArray(z)&&z.length&&(N[o]=O(z,k+1)),N}):[]},I=L.useMemo(()=>O(m),[m]);return b.createElement(ot,Object.assign({},r,{columns:I,components:p,ref:e}))},mh=b.forwardRef(gh);class it extends b.PureComponent{constructor(e){super(e),this.getCurrentPageData=()=>this.tableRef.current&&this.tableRef.current.getCurrentPageData(),this.tableRef=b.createRef()}render(){var e;const t=this.props,n=(e=this.props.direction)!==null&&e!==void 0?e:this.context.direction;return t.resizable?b.createElement(mh,Object.assign({},t,{ref:this.tableRef,direction:n})):b.createElement(ot,Object.assign({},t,{ref:this.tableRef,direction:n}))}}it.Column=rn;it.DEFAULT_KEY_COLUMN_SELECTION=B.DEFAULT_KEY_COLUMN_SELECTION;it.DEFAULT_KEY_COLUMN_EXPAND=B.DEFAULT_KEY_COLUMN_EXPAND;it.propTypes=Object.assign(Object.assign({},ot.propTypes),{resizable:a.oneOfType([a.bool,a.object])});it.defaultProps={hideExpandedColumn:!0};it.contextType=Ls;const U={TABS:`${X}-tabs`,TABS_BAR:`${X}-tabs-bar`,TABS_BAR_LINE:`${X}-tabs-bar-line`,TABS_BAR_CARD:`${X}-tabs-bar-card`,TABS_BAR_BUTTON:`${X}-tabs-bar-button`,TABS_BAR_SLASH:`${X}-tabs-bar-slash`,TABS_BAR_EXTRA:`${X}-tabs-bar-extra`,TABS_TAB:`${X}-tabs-tab`,TABS_TAB_ACTIVE:`${X}-tabs-tab-active`,TABS_TAB_DISABLED:`${X}-tabs-tab-disabled`,TABS_CONTENT:`${X}-tabs-content`,TABS_PANE:`${X}-tabs-pane`,TABS_PANE_INACTIVE:`${X}-tabs-pane-inactive`,TABS_PANE_ACTIVE:`${X}-tabs-pane-active`,TABS_PANE_MOTION_OVERLAY:`${X}-tabs-pane-motion-overlay`,TABS_PANE_ANIMATE_LEFT_SHOW:`${X}-tabs-pane-animate-leftShow`,TABS_PANE_ANIMATE_RIGHT_SHOW:`${X}-tabs-pane-animate-rightShow`,TABS_PANE_ANIMATE_TOP_SHOW:`${X}-tabs-pane-animate-topShow`,TABS_PANE_ANIMATE_BOTTOM_SHOW:`${X}-tabs-pane-animate-bottomShow`},Xe={TYPE_MAP:["line","card","button","slash"],SIZE:["small","medium","large"],POSITION_MAP:["top","left"]};class bh extends ge{constructor(e){super(Object.assign({},e)),this.destroy=H,this.handlePrevent=t=>{t.stopPropagation(),t.preventDefault()},this.handleKeyDown=(t,n,s)=>{const{preventScroll:r}=this.getProps(),o=[...t.target.parentNode.childNodes].filter(l=>x(l,"attributes.data-tabkey.value","").includes("semiTab")&&x(l,"attributes.aria-disabled.value","")!=="true");switch(t.key){case"ArrowLeft":case"ArrowRight":case"ArrowUp":case"ArrowDown":this.determineOrientation(t,o);break;case"Backspace":case"Delete":this.handleDeleteKeyDown(t,o,n,s);break;case"Enter":case" ":this.handleTabClick(n,t),this.handlePrevent(t);break;case"Home":o[0].focus({preventScroll:r}),this.handlePrevent(t);break;case"End":o[o.length-1].focus({preventScroll:r}),this.handlePrevent(t);break}}}init(){this._adapter.collectPane()}_notifyChange(e){const{activeKey:t}=this.getStates();t!==e&&this._adapter.notifyChange(e)}handleTabClick(e,t){this._isInProps("activeKey")?this._notifyChange(e):(this._notifyChange(e),this.handleNewActiveKey(e)),this._adapter.notifyTabClick(e,t)}handleNewActiveKey(e){const{activeKey:t}=this.getStates();t!==e&&this._adapter.setNewActiveKey(e)}getDefaultActiveKey(){let e;const t=this.getProps();return"activeKey"in t?e=t.activeKey:"defaultActiveKey"in t?e=t.defaultActiveKey:e=this._adapter.getDefaultActiveKeyFromChildren(),e}handleTabListChange(){this._adapter.collectPane()}handleTabPanesChange(){this._adapter.collectPane(),this._adapter.collectActiveKey()}handleTabDelete(e){this._adapter.notifyTabDelete(e)}determineOrientation(e,t){const{tabPosition:n}=this.getProps();n==="left"?(e.key==="ArrowUp"||e.key==="ArrowDown")&&(this.switchTabOnArrowPress(e,t),this.handlePrevent(e)):(e.key==="ArrowLeft"||e.key==="ArrowRight")&&(this.switchTabOnArrowPress(e,t),this.handlePrevent(e))}handleDeleteKeyDown(e,t,n,s){const{preventScroll:r}=this.getProps();if(s){this.handleTabDelete(n);const o=t.indexOf(e.target);t.length!==1&&t[o+1>=t.length?o-1:o+1].focus({preventScroll:r})}}switchTabOnArrowPress(e,t){const{preventScroll:n}=this.getProps(),s=t.indexOf(e.target),r={ArrowLeft:-1,ArrowUp:-1,ArrowRight:1,ArrowDown:1};r[e.key]&&s!==void 0&&(t[s+r[e.key]]?t[s+r[e.key]].focus({preventScroll:n}):e.key==="ArrowLeft"||e.key==="ArrowUp"?t[t.length-1].focus({preventScroll:n}):(e.key==="ArrowRight"||e.key=="ArrowDown")&&t[0].focus({preventScroll:n}))}}var yh=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);s{const{tab:t,size:n,type:s,icon:r,selected:o,closable:l,disabled:c,itemKey:d,deleteTabItem:u,tabPosition:h,handleKeyDown:g,onClick:m}=i,y=yh(i,["tab","size","type","icon","selected","closable","disabled","itemKey","deleteTabItem","tabPosition","handleKeyDown","onClick"]),p=L.useMemo(()=>l?b.createElement(hl,{"aria-label":"Close",role:"button",className:`${U.TABS_TAB}-icon-close`,onClick:O=>u(d,O)}):null,[s,l,u,d]),f=L.useCallback(O=>b.createElement("span",{className:`${U.TABS_BAR}-icon`},O),[]),S=L.useCallback(O=>{g&&g(O,d,l)},[g,d,l]),v=L.useCallback(O=>{!c&&m&&m(d,O)},[d,c,m]),w=r?f(r):null,_=M(U.TABS_TAB,`${U.TABS_TAB}-${s}`,`${U.TABS_TAB}-${h}`,`${U.TABS_TAB}-single`,{[U.TABS_TAB_ACTIVE]:o,[U.TABS_TAB_DISABLED]:c,[`${U.TABS_TAB}-small`]:n==="small",[`${U.TABS_TAB}-medium`]:n==="medium"});return b.createElement("div",Object.assign({role:"tab",id:`semiTab${d}`,"data-tabkey":`semiTab${d}`,"aria-controls":`semiTabPanel${d}`,"aria-disabled":c?"true":"false","aria-selected":o?"true":"false",tabIndex:o?0:-1,onKeyDown:S,onClick:v,className:_},y,{ref:e}),w,t,p)},rr=L.forwardRef(Sh);rr.elementType="Tabs.TabItem";var wh=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);s{const{collapsible:n}=this.props;return n==="auto"?this.state.shouldCollapse:n||!1},this.checkOverflow=()=>{if(this.props.collapsible!=="auto"||this.state.shouldCollapse)return;const n=this.tabBarRef.current;if(!n)return;const s=this.isTabsWrapped(n)||n.scrollWidth>n.clientWidth+1;s!==this.state.shouldCollapse&&this.setState({shouldCollapse:s})},this.isTabsWrapped=n=>{var s;if(this.props.tabPosition==="left")return!1;const r=Array.from(n.querySelectorAll(`.${U.TABS_TAB}`));if(r.length<=1)return!1;const o=(s=r[0])===null||s===void 0?void 0:s.offsetTop;return typeof o!="number"?!1:r.some(l=>l.offsetTop!==o)},this.handleResize=()=>{this.props.collapsible==="auto"&&this.checkOverflow()},this.handleItemClick=(n,s)=>{this.props.onTabClick(n,s)},this.handleKeyDown=(n,s,r)=>{this.props.handleKeyDown(n,s,r)},this.renderTabItem=n=>{const{size:s,type:r,deleteTabItem:o,handleKeyDown:l,tabPosition:c}=this.props,d=this._isActive(n.itemKey);return b.createElement(rr,Object.assign({},Ne(n,["disabled","icon","itemKey","tab","closable"]),{key:this._getBarItemKeyByItemKey(n.itemKey),selected:d,size:s,type:r,tabPosition:c,handleKeyDown:l,deleteTabItem:o,onClick:this.handleItemClick}))},this.scrollTabItemIntoViewByKey=function(n){let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"nearest",r=arguments.length>2?arguments[2]:void 0;const o=document.querySelector(`[data-uuid="${t.state.uuid}"] .${U.TABS_TAB}[data-scrollkey="${n}"]`);o==null||o.scrollIntoView({behavior:r||"smooth",block:s,inline:s})},this.scrollActiveTabItemIntoView=(n,s)=>{const r=this._getBarItemKeyByItemKey(this.props.activeKey);this.scrollTabItemIntoViewByKey(r,n,s)},this.renderTabComponents=n=>n.map(s=>this.renderTabItem(s)),this.handleArrowClick=(n,s)=>{const r=s==="start"?n.pop():n.shift();if(!r)return;const o=this._getBarItemKeyByItemKey(r.itemKey);this.scrollTabItemIntoViewByKey(o)},this.renderCollapse=(n,s,r)=>{var o;const l=M({[`${U.TABS_BAR}-arrow-${r}`]:r,[`${U.TABS_BAR}-arrow`]:!0});if(li(n))return b.createElement("div",{role:"presentation",className:l},b.createElement(Ft,{disabled:!0,icon:s,theme:"borderless"}));const{dropdownClassName:c,dropdownStyle:d,showRestInDropdown:u,dropdownProps:h}=this.props,{rePosKey:g}=this.state,m=!n.length,y=b.createElement(Fe.Menu,null,n.map(v=>{const{icon:w,tab:_,itemKey:O}=v,I=w?this.renderIcon(v.icon):null;return b.createElement(Fe.Item,{key:O,onClick:E=>this.handleItemClick(O,E),active:this._isActive(O)},I,_)})),p=b.createElement("div",{role:"presentation",className:l,onClick:v=>this.handleArrowClick(n,r)},b.createElement(Ft,{disabled:m,icon:s,theme:"borderless"})),f=M(c,{[`${U.TABS_BAR}-dropdown`]:!0}),S=(o=h==null?void 0:h[r])!==null&&o!==void 0?o:{};return b.createElement(b.Fragment,null,u?b.createElement(Fe,Object.assign({className:f,clickToHide:!0,clickTriggerToHide:!0,key:`${g}-${r}`,position:r==="start"?"bottomLeft":"bottomRight",render:m?null:y,showTick:!0,style:d,trigger:"hover",disableFocusListener:!0},S),p):p)},this.renderOverflow=n=>n.map((s,r)=>{const o=r===0?"start":"end",l=r===0?b.createElement(bi,null):b.createElement(js,null),c=this.renderCollapse(s,l,o);return this.props.renderArrow?this.props.renderArrow(s,o,()=>this.handleArrowClick(s,o),c):c}),this.renderCollapsedTab=()=>{const{list:n}=this.props,s=n.map(r=>{const{itemKey:o}=r;return Object.assign({key:this._getBarItemKeyByItemKey(o),active:this._isActive(o)},r)});return b.createElement(Qe,{items:s,overflowRenderDirection:this.props.arrowPosition,wrapperStyle:this.props.visibleTabsStyle,overflowRenderer:this.renderOverflow,renderMode:"scroll",className:`${U.TABS_BAR}-overflow-list`,visibleItemRenderer:this.renderTabItem,onVisibleStateChange:r=>{var o,l;const c=new Map;if(r.forEach((d,u)=>{c.set(this._getItemKeyByBarItemKey(u),d)}),this.isFirstShowInViewport&&Array.from(c.values()).some(u=>u)&&(this.scrollActiveTabItemIntoView("nearest","auto"),this.isFirstShowInViewport=!1),this.props.collapsible==="auto"&&Array.from(c.values()).some(u=>u)){const u=Array.from(c.values()).some(h=>!h);u!==this.state.shouldCollapse&&this.setState({shouldCollapse:u})}(l=(o=this.props).onVisibleTabsChange)===null||l===void 0||l.call(o,c)}})},this.renderWithMoreTrigger=()=>{const{list:n,more:s}=this.props;let r=[],o=b.createElement("div",{className:M({[`${U.TABS_BAR}-more-trigger`]:!0,[`${U.TABS_BAR}-more-trigger-${this.props.type}`]:!0})},b.createElement(Ee,{componentName:"Tabs"},(c,d)=>b.createElement("div",{className:`${U.TABS_BAR}-more-trigger-content`},b.createElement("div",null,c.more),b.createElement(Ms,{className:`${U.TABS_BAR}-more-trigger-content-icon`})))),l;if(typeof s=="number")l=n.length-Math.min(s,n.length),r=n.slice(0,l).map(c=>this.renderTabItem(c));else if(typeof s=="object")l=n.length-Math.min(s.count,n.length),r=n.slice(0,l).map(c=>this.renderTabItem(c)),s.render&&(o=s.render());else if(s!==void 0)throw new Error("[Semi Tabs]: invalid tab props format: more");return b.createElement(b.Fragment,null,r,this.renderMoreDropdown(n.slice(l),s==null?void 0:s.dropdownProps,o))},this.renderMoreDropdown=(n,s,r)=>b.createElement(Fe,Object.assign({trigger:"hover",showTick:!0,position:"bottomLeft",className:`${U.TABS_BAR}-more-dropdown-${this.props.type}`,clickToHide:!0,menu:n.map(o=>({node:"item",name:o.tab,icon:o.icon,onClick:l=>this.props.onTabClick(o.itemKey,l),active:this.props.activeKey===o.itemKey}))},s),r),this._isActive=n=>n===this.props.activeKey,this._getBarItemKeyByItemKey=n=>`${n}-bar`,this._getItemKeyByBarItemKey=n=>n.replace(/-bar$/,""),this.state={endInd:e.list.length,rePosKey:0,startInd:0,uuid:"",currentVisibleItems:[],shouldCollapse:!1},this.isFirstShowInViewport=!0,this.tabBarRef=L.createRef()}componentDidMount(){this.setState({uuid:tl()}),this.props.collapsible==="auto"&&requestAnimationFrame(()=>this.checkOverflow())}componentDidUpdate(e){e.activeKey!==this.props.activeKey&&this.getEffectiveCollapsible()&&this.scrollActiveTabItemIntoView(),this.props.collapsible==="auto"&&e.list!==this.props.list&&this.checkOverflow()}renderIcon(e){return b.createElement("span",null,e)}renderExtra(){const{tabBarExtraContent:e,type:t,size:n}=this.props,s={float:"right"},r=e&&e.props?e.props.style:{},o=M(U.TABS_BAR_EXTRA,{[`${U.TABS_BAR}-${t}-extra`]:t,[`${U.TABS_BAR}-${t}-extra-${n}`]:n});if(e){const l=Object.assign(Object.assign({},s),r);return b.createElement("div",{className:o,style:l,"x-semi-prop":"tabBarExtraContent"},e)}return null}render(){const e=this.props,{type:t,style:n,className:s,list:r,tabPosition:o,more:l,collapsible:c}=e,d=wh(e,["type","style","className","list","tabPosition","more","collapsible"]),u=this.getEffectiveCollapsible(),h=M(s,{[U.TABS_BAR]:!0,[U.TABS_BAR_LINE]:t==="line",[U.TABS_BAR_CARD]:t==="card",[U.TABS_BAR_BUTTON]:t==="button",[U.TABS_BAR_SLASH]:t==="slash",[`${U.TABS_BAR}-${o}`]:o,[`${U.TABS_BAR}-collapse`]:u}),g=this.renderExtra(),m=u?this.renderCollapsedTab():l?this.renderWithMoreTrigger():this.renderTabComponents(r),y=b.createElement("div",Object.assign({role:"tablist","aria-orientation":o==="left"?"vertical":"horizontal",className:h,style:n},qt(d),{"data-uuid":this.state.uuid,ref:this.tabBarRef}),m,g);return c==="auto"?b.createElement(Pt,{onResize:this.handleResize},y):y}}Is.propTypes={activeKey:a.string,className:a.string,collapsible:a.oneOfType([a.bool,a.oneOf(["auto"])]),list:a.array,onTabClick:a.func,size:a.oneOf(Xe.SIZE),style:a.object,tabBarExtraContent:a.node,tabPosition:a.oneOf(Xe.POSITION_MAP),type:a.oneOf(Xe.TYPE_MAP),closable:a.bool,deleteTabItem:a.func,more:a.oneOfType([a.number,a.object])};const ua=b.createContext({});var vh=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);s{if(t!==null&&e!==null&&Array.isArray(n)&&n.length){const r=n.findIndex(c=>c.itemKey===e),o=n.findIndex(c=>c.itemKey===t),l=n.findIndex(c=>c.itemKey===s);return r===o?l>r:o{const{itemKey:e}=this.props,{activeKey:t,lazyRender:n}=this.context,s=t===e;return this._active=this._active||s,n?this._active:!0}}render(){const{tabPaneMotion:e,tabPosition:t,prevActiveKey:n}=this.context,s=this.props,{className:r,style:o,children:l,itemKey:c,tabIndex:d}=s,u=vh(s,["className","style","children","itemKey","tabIndex"]),h=this.context.activeKey===c,g=M(r,{[U.TABS_PANE_INACTIVE]:!h,[U.TABS_PANE_ACTIVE]:h,[U.TABS_PANE]:!0}),m=this.shouldRender(),y=(()=>{const S=this.getDirection(this.context.activeKey,c,this.context.panes,n);return t==="top"?S?U.TABS_PANE_ANIMATE_RIGHT_SHOW:U.TABS_PANE_ANIMATE_LEFT_SHOW:S?U.TABS_PANE_ANIMATE_BOTTOM_SHOW:U.TABS_PANE_ANIMATE_TOP_SHOW})(),p=!this.context.panes.find(S=>S.itemKey===n),f=e&&h&&!p&&!this.context.forceDisableMotion;return b.createElement("div",Object.assign({ref:this.ref,role:"tabpanel",id:`semiTabPanel${c}`,"aria-labelledby":`semiTab${c}`,className:g,style:o,"aria-hidden":h?"false":"true",tabIndex:d||0},qt(u),{"x-semi-prop":"children"}),b.createElement(hi,{motion:f,animationState:h?"enter":"leave",startClassName:y},S=>{let{animationClassName:v,animationEventsNeedBind:w}=S;return b.createElement("div",Object.assign({className:M(U.TABS_PANE_MOTION_OVERLAY,v),"x-semi-prop":"children"},w),m?l:null)}))}}dn.isTabPane=!0;dn.contextType=ua;dn.propTypes={className:a.string,style:a.object,children:a.node,disabled:a.bool,itemKey:a.string,tab:a.node,icon:a.node,closable:a.bool};var Ch=function(i,e){var t={};for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(i);s{this.contentRef={current:t}},this.getPanes=()=>{const{tabList:t,children:n}=this.props;return Array.isArray(t)&&t.length?t:b.Children.map(n,s=>{if(s){const{tab:r,icon:o,disabled:l,itemKey:c,closable:d}=s.props;return{tab:r,icon:o,disabled:l,itemKey:c,closable:d}}})},this.onTabClick=(t,n)=>{this.foundation.handleTabClick(t,n)},this.rePosChildren=(t,n)=>{const s=[],r=b.Children.toArray(t);return t.length&&(s.push(...r.filter(o=>o.props&&o.props.itemKey===n)),s.push(...r.filter(o=>o.props&&o.props.itemKey!==n))),s},this.getActiveItem=()=>{const{activeKey:t}=this.state,{children:n,tabList:s}=this.props;return s||!Array.isArray(n)?n:b.Children.toArray(n).filter(r=>L.isValidElement(r)&&r.type&&r.type.isTabPane?r.props.itemKey===t:!0)},this.deleteTabItem=(t,n)=>{n.stopPropagation(),this.foundation.handleTabDelete(t)},this.foundation=new bh(this.adapter),this.state={activeKey:this.foundation.getDefaultActiveKey(),panes:this.getPanes(),prevActiveKey:null,forceDisableMotion:!1},this.contentRef=L.createRef(),this.contentHeight="auto"}get adapter(){return Object.assign(Object.assign({},super.adapter),{collectPane:()=>{const e=this.getPanes();this.setState({panes:e})},collectActiveKey:()=>{const{tabList:e,children:t,activeKey:n}=this.props;if(typeof n<"u")return;const{activeKey:s}=this.state,r=this.getPanes();r.findIndex(o=>o.itemKey===s)===-1&&(r.length>0?this.setState({activeKey:r[0].itemKey}):this.setState({activeKey:""}))},notifyTabClick:(e,t)=>{this.props.onTabClick(e,t)},notifyChange:e=>{this.props.onChange(e)},setNewActiveKey:e=>{this.setState({activeKey:e})},getDefaultActiveKeyFromChildren:()=>{const{tabList:e,children:t}=this.props;let n="";return(e||b.Children.toArray(t).map(r=>L.isValidElement(r)?r.props:null)).forEach(r=>{r&&!n&&!r.disabled&&(n=r.itemKey)}),n},notifyTabDelete:e=>{this.props.onTabClose&&this.props.onTabClose(e)}})}static getDerivedStateFromProps(e,t){const n={};return!Xt(e.activeKey)&&e.activeKey!==t.activeKey&&(t.prevActiveKey=t.activeKey,n.activeKey=e.activeKey),n}componentDidUpdate(e,t){const n=b.Children.toArray(e.children).map(o=>Ne(L.isValidElement(o)?o.props:null,Zo)),s=b.Children.toArray(this.props.children).map(o=>Ne(L.isValidElement(o)?o.props:null,Zo)),r=this.props.tabList||e.tabList;if(re(this.props.tabList,e.tabList)||this.foundation.handleTabListChange(),t.activeKey!==this.state.activeKey&&t.activeKey!==this.state.prevActiveKey&&this.setState({prevActiveKey:t.activeKey}),e.activeKey!==this.props.activeKey){const o=(()=>{const l=new Set(n.map(c=>c.itemKey));return s.map(c=>c.itemKey).filter(c=>!l.has(c))})();this.setState({forceDisableMotion:o.includes(this.props.activeKey)})}!re(n,s)&&!r&&this.foundation.handleTabPanesChange()}render(){const e=this.props,{children:t,className:n,collapsible:s,contentStyle:r,keepDOM:o,lazyRender:l,renderTabBar:c,showRestInDropdown:d,size:u,style:h,tabBarClassName:g,tabBarExtraContent:m,tabBarStyle:y,tabPaneMotion:p,tabPosition:f,type:S,more:v,onVisibleTabsChange:w,visibleTabsStyle:_,arrowPosition:O,renderArrow:I,dropdownProps:E}=e,k=Ch(e,["children","className","collapsible","contentStyle","keepDOM","lazyRender","renderTabBar","showRestInDropdown","size","style","tabBarClassName","tabBarExtraContent","tabBarStyle","tabPaneMotion","tabPosition","type","more","onVisibleTabsChange","visibleTabsStyle","arrowPosition","renderArrow","dropdownProps"]),{panes:N,activeKey:P}=this.state,A=M(n,{[U.TABS]:!0,[`${U.TABS}-${f}`]:f}),F=M({[U.TABS_CONTENT]:!0,[`${U.TABS_CONTENT}-${f}`]:f}),K={activeKey:P,className:g,collapsible:s,list:N,onTabClick:this.onTabClick,showRestInDropdown:d,size:u,style:y,tabBarExtraContent:m,tabPosition:f,type:S,deleteTabItem:this.deleteTabItem,handleKeyDown:this.foundation.handleKeyDown,more:v,onVisibleTabsChange:w,visibleTabsStyle:_,arrowPosition:O,renderArrow:I,dropdownProps:E},z=c?c(K,Is):b.createElement(Is,Object.assign({},K)),q=o?t:this.getActiveItem();return b.createElement("div",Object.assign({className:A,style:h},this.getDataAttr(k)),z,b.createElement(ua.Provider,{value:{activeKey:P,lazyRender:l,panes:N,tabPaneMotion:p,tabPosition:f,prevActiveKey:this.state.prevActiveKey,forceDisableMotion:this.state.forceDisableMotion}},b.createElement("div",{ref:this.setContentRef,className:F,style:Object.assign({},r)},q)))}}tt.TabPane=dn;tt.TabItem=rr;tt.propTypes={activeKey:a.string,className:a.string,collapsible:a.oneOfType([a.bool,a.oneOf(["auto"])]),contentStyle:a.oneOfType([a.object]),defaultActiveKey:a.string,keepDOM:a.bool,lazyRender:a.bool,onChange:a.func,onTabClick:a.func,renderTabBar:a.func,showRestInDropdown:a.bool,size:a.oneOf(Xe.SIZE),style:a.object,tabBarClassName:a.string,tabBarExtraContent:a.node,tabBarStyle:a.object,tabList:a.array,tabPaneMotion:a.bool,tabPosition:a.oneOf(Xe.POSITION_MAP),type:a.oneOf(Xe.TYPE_MAP),onTabClose:a.func,preventScroll:a.bool,more:a.oneOfType([a.number,a.object]),arrowPosition:a.string,renderArrow:a.func,dropdownProps:a.object};tt.__SemiComponentName__="Tabs";tt.defaultProps=ks(tt.__SemiComponentName__,{children:[],collapsible:!1,keepDOM:!0,lazyRender:!1,onChange:()=>{},onTabClick:()=>{},size:"large",tabPaneMotion:!0,tabPosition:"top",type:"line",onTabClose:()=>{},showRestInDropdown:!0,arrowPosition:"both"});export{bi as I,it as T,pl as V,_s as _,tt as a,dn as b,mr as c,Pe as d,Kt as e,js as f,Ze as g,gd as h,$t as i,We as j,Bt as k,yi as l,Jt as r}; diff --git a/frontends/desktop/dist/assets/index-gTPS8Hpa.css b/frontends/desktop/dist/assets/index-gTPS8Hpa.css new file mode 100644 index 000000000..be54af90e --- /dev/null +++ b/frontends/desktop/dist/assets/index-gTPS8Hpa.css @@ -0,0 +1 @@ +.semi-highlight-tag{color:var(--semi-color-highlight);background-color:var(--semi-color-highlight-bg);font-weight:600}.semi-space{display:inline-flex}.semi-space-vertical{flex-direction:column}.semi-space-horizontal{flex-direction:row}.semi-space-align-center{align-items:center}.semi-space-align-end{align-items:flex-end}.semi-space-align-start{align-items:flex-start}.semi-space-align-baseline{align-items:baseline}.semi-space-wrap{flex-wrap:wrap}.semi-space-tight-horizontal{column-gap:8px}.semi-space-tight-vertical{row-gap:8px}.semi-space-medium-horizontal{column-gap:16px}.semi-space-medium-vertical{row-gap:16px}.semi-space-loose-horizontal{column-gap:24px}.semi-space-loose-vertical{row-gap:24px}.semi-rtl .semi-space,.semi-portal-rtl .semi-space{direction:rtl}.semi-checkbox{box-sizing:border-box;position:relative;display:flex;align-items:flex-start;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none));column-gap:8px}.semi-checkbox input[type=checkbox]{position:absolute;left:0;top:0;width:100%;height:100%;margin:0;opacity:0}.semi-checkbox-content{flex:1;display:flex;flex-direction:column;row-gap:4px}.semi-checkbox-addon{display:flex;flex:1;align-items:center;color:var(--semi-color-text-0);line-height:20px;-webkit-user-select:none;user-select:none}.semi-checkbox:hover .semi-checkbox-inner-display{background:var(--semi-color-fill-0);box-shadow:inset 0 0 0 1px var(--semi-color-focus-border)}.semi-checkbox:hover .semi-checkbox-inner-checked .semi-checkbox-inner-display{background:var(--semi-color-primary-hover);box-shadow:none}.semi-checkbox:active .semi-checkbox-inner-checked .semi-checkbox-inner-display{background:var(--semi-color-primary-active);box-shadow:none}.semi-checkbox.semi-checkbox-disabled:hover .semi-checkbox-inner-display,.semi-checkbox.semi-checkbox-disabled:active .semi-checkbox-inner-display{background:var(--semi-color-disabled-fill);box-shadow:inset 0 0 0 1px var(--semi-color-border)}.semi-checkbox.semi-checkbox-disabled:hover .semi-checkbox-inner-checked .semi-checkbox-inner-display,.semi-checkbox.semi-checkbox-disabled:active .semi-checkbox-inner-checked .semi-checkbox-inner-display{color:var(--semi-color-white);background:var(--semi-color-primary-disabled);box-shadow:none}.semi-checkbox-inner{position:relative;display:flex;align-items:center;width:16px;height:20px;-webkit-user-select:none;user-select:none;cursor:pointer}.semi-checkbox-inner-display{box-sizing:border-box;position:relative;width:16px;height:16px;margin:0;background:transparent;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);box-shadow:inset 0 0 0 1px var(--semi-color-text-3);border-radius:var(--semi-border-radius-extra-small)}.semi-checkbox-inner-display .semi-icon{font-size:16px}.semi-checkbox-inner-checked .semi-checkbox-inner-display{background:var(--semi-color-primary);color:var(--semi-color-white);box-shadow:inset 0 0 0 1px var(--semi-color-primary);border-radius:var(--semi-border-radius-extra-small)}.semi-checkbox-inner-checked>.semi-checkbox-addon{color:var(--semi-color-text-0)}.semi-checkbox:hover .semi-checkbox-inner-display{background:var(--semi-color-fill-0)}.semi-checkbox:hover.semi-checkbox-indeterminate .semi-checkbox-inner-display{background:var(--semi-color-primary-hover);box-shadow:none;color:var(--semi-color-white)}.semi-checkbox:hover .semi-checkbox-inner-checked .semi-checkbox-inner-display{background:var(--semi-color-primary-hover);border-color:var(--semi-color-primary-hover);color:var(--semi-color-white)}.semi-checkbox:hover.semi-checkbox-cardType.semi-checkbox-unChecked.semi-checkbox-cardType_enable .semi-checkbox-inner-display{background:var(--semi-color-white)}.semi-checkbox:active .semi-checkbox-inner-display{background:var(--semi-color-fill-1)}.semi-checkbox:active.semi-checkbox-indeterminate .semi-checkbox-inner-display{background:var(--semi-color-primary-active);border-color:var(--semi-color-primary-active);color:var(--semi-color-white);box-shadow:none}.semi-checkbox:active .semi-checkbox-inner-checked .semi-checkbox-inner-display{background:var(--semi-color-primary-active);border-color:var(--semi-color-primary-active);color:var(--semi-color-white)}.semi-checkbox:active.semi-checkbox-cardType.semi-checkbox-unChecked.semi-checkbox-cardType_enable .semi-checkbox-inner-display{background:var(--semi-color-white)}.semi-checkbox-cardType{flex-wrap:nowrap;align-items:flex-start;border-radius:3px;padding:12px 16px;background:transparent;border:1px solid transparent}.semi-checkbox-cardType .semi-checkbox-inner{position:relative;flex-shrink:0}.semi-checkbox-cardType .semi-checkbox-inner-display{background:var(--semi-color-white)}.semi-checkbox-cardType .semi-checkbox-inner-pureCardType{opacity:0;width:0}.semi-checkbox-cardType .semi-checkbox-addon{font-weight:600;font-size:14px;line-height:20px;color:var(--semi-color-text-0)}.semi-checkbox-cardType .semi-checkbox-extra{font-weight:400;font-size:14px;line-height:20px;color:var(--semi-color-text-2)}.semi-checkbox-cardType .semi-checkbox-extra.semi-checkbox-cardType_extra_noChildren{margin-top:0}.semi-checkbox-cardType:hover{background:var(--semi-color-fill-0)}.semi-checkbox-cardType:active{background:var(--semi-color-fill-1)}.semi-checkbox-cardType_checked{background:var(--semi-color-primary-light-default);border:1px solid var(--semi-color-primary)}.semi-checkbox-cardType_checked:hover{background:var(--semi-color-primary-light-default);border-color:var(--semi-color-primary-hover)}.semi-checkbox-cardType_checked:hover .semi-checkbox-inner-checked .semi-checkbox-inner-display{box-shadow:none}.semi-checkbox-cardType_checked:active{background:var(--semi-color-primary-light-default);border-color:var(--semi-color-primary-active)}.semi-checkbox-cardType_disabled:active,.semi-checkbox-cardType_disabled:hover{background:transparent}.semi-checkbox-cardType_checked_disabled.semi-checkbox-cardType{background:var(--semi-color-primary-light-default);border:1px solid var(--semi-color-primary-disabled)}.semi-checkbox-cardType_checked_disabled.semi-checkbox-cardType:hover .semi-checkbox-inner-checked .semi-checkbox-inner-display{box-shadow:none}.semi-checkbox-indeterminate .semi-checkbox-inner-display,.semi-checkbox-checked .semi-checkbox-inner-display{background:var(--semi-color-primary);color:var(--semi-color-white);box-shadow:inset 0 0 0 1px var(--semi-color-primary);border-radius:var(--semi-border-radius-extra-small)}.semi-checkbox-indeterminate .semi-checkbox-inner-display:hover,.semi-checkbox-checked .semi-checkbox-inner-display:hover{background:var(--semi-color-primary-hover);border-color:var(--semi-color-primary-hover);color:var(--semi-color-white)}.semi-checkbox-indeterminate .semi-checkbox-inner-display:active,.semi-checkbox-checked .semi-checkbox-inner-display:active{background:var(--semi-color-primary-active);border-color:var(--semi-color-primary-active);color:var(--semi-color-white)}.semi-checkbox-indeterminate .semi-checkbox-inner-addon,.semi-checkbox-checked .semi-checkbox-inner-addon{color:var(--semi-color-text-0)}.semi-checkbox-disabled,.semi-checkbox-disabled .semi-checkbox-inner{cursor:not-allowed}.semi-checkbox-disabled .semi-checkbox-inner-display{color:var(--semi-color-white);background:var(--semi-color-disabled-fill);box-shadow:inset 0 0 0 1px var(--semi-color-border)}.semi-checkbox-disabled .semi-checkbox-inner-display:hover{color:var(--semi-color-white);background:transparent}.semi-checkbox-disabled .semi-checkbox-inner-checked{color:var(--semi-color-white)}.semi-checkbox-disabled .semi-checkbox-inner-checked .semi-checkbox-inner-display{opacity:.75;background:var(--semi-color-primary-disabled);box-shadow:inset 0 0 0 1px var(--semi-color-primary-disabled)}.semi-checkbox-disabled .semi-checkbox-inner-checked .semi-checkbox-inner-display:hover{color:var(--semi-color-white);background:var(--semi-color-primary-disabled)}.semi-checkbox-disabled .semi-checkbox-addon,.semi-checkbox-disabled .semi-checkbox-extra{color:var(--semi-color-disabled-text)}.semi-checkbox.semi-checkbox-disabled.semi-checkbox-indeterminate .semi-checkbox-inner-display{opacity:.75;background:var(--semi-color-primary-disabled);box-shadow:inset 0 0 0 1px var(--semi-color-primary-disabled);color:var(--semi-color-white)}.semi-checkbox-extra{flex-shrink:0;flex-grow:1;flex-basis:100%;box-sizing:border-box;color:var(--semi-color-text-2)}.semi-checkbox-focus{outline:2px solid var(--semi-color-primary-light-active)}.semi-checkbox-focus-border{box-shadow:inset 0 0 0 1px var(--semi-color-focus-border)}.semi-checkboxGroup{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:14px}.semi-checkboxGroup .semi-checkbox.semi-checkbox-vertical{margin-bottom:16px}.semi-checkboxGroup-horizontal{display:flex;flex-wrap:wrap;gap:16px}.semi-checkboxGroup-horizontal .semi-checkbox{display:inline-flex}.semi-checkboxGroup-vertical{display:flex;flex-direction:column;row-gap:12px}.semi-checkboxGroup-vertical-cardType{row-gap:16px}.semi-checkboxGroup-vertical-pureCardType .semi-checkbox{column-gap:0}.semi-rtl .semi-checkbox,.semi-portal-rtl .semi-checkbox{direction:rtl}.semi-rtl .semi-checkbox input[type=checkbox],.semi-portal-rtl .semi-checkbox input[type=checkbox]{left:auto;right:0}.semi-rtl .semi-checkboxGroup,.semi-portal-rtl .semi-checkboxGroup{direction:rtl}.semi-overflow-list{display:flex;flex-wrap:nowrap;min-width:0}.semi-overflow-list-spacer{flex-shrink:1;width:1px}.semi-overflow-list-scroll-wrapper{display:flex;flex:1;flex-wrap:nowrap;overflow-x:scroll}.semi-rtl .semi-overflow-list,.semi-portal-rtl .semi-overflow-list{direction:rtl}.semi-page{display:flex;list-style:none;padding:0;align-items:center;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;margin-block-start:0;margin-block-end:0}.semi-page-small{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;color:var(--semi-color-text-2);padding:0}.semi-page-disabled{cursor:not-allowed}.semi-page-disabled .semi-page-total{color:var(--semi-color-disabled-text)}.semi-page-item{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;min-width:32px;border:0px solid transparent;cursor:pointer;-webkit-user-select:none;user-select:none;height:32px;margin-left:4px;margin-right:4px;font-weight:400;color:var(--semi-color-text-0);border-radius:var(--semi-border-radius-small);text-align:center;line-height:32px;display:flex;align-items:center;justify-content:center;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-page-item:hover{border-color:transparent;background-color:var(--semi-color-fill-0);color:var(--semi-color-text-0)}.semi-page-item-rest-opening{background-color:var(--semi-color-fill-0);color:var(--semi-color-text-0)}.semi-page-item:active{border-color:transparent;background-color:var(--semi-color-fill-1);color:var(--semi-color-text-0)}.semi-page-item-active{border-color:transparent;color:var(--semi-color-primary);font-weight:600;background-color:var(--semi-color-primary-light-default)}.semi-page-item-active:hover{border-color:transparent;color:var(--semi-color-primary);background-color:var(--semi-color-primary-light-default)}.semi-page-item-disabled{border-color:transparent;color:var(--semi-color-disabled-text);background-color:transparent;cursor:not-allowed}.semi-page-item-disabled:hover{background-color:transparent}.semi-page-item-small{min-width:44px;margin:0}.semi-page-item-all-disabled{border-color:transparent;color:var(--semi-color-disabled-text);background-color:transparent;cursor:not-allowed}.semi-page-item-all-disabled:hover{background-color:transparent;color:var(--semi-color-disabled-text)}.semi-page-item-all-disabled-active{background-color:var(--semi-color-disabled-fill);font-weight:600}.semi-page-item-all-disabled-active:hover{background-color:var(--semi-color-disabled-fill)}.semi-page-total{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2)}.semi-page-prev,.semi-page-next{color:var(--semi-color-tertiary);cursor:pointer}.semi-page-prev.semi-page-item-disabled,.semi-page-next.semi-page-item-disabled{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-page-quickjump{margin-left:24px;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;display:flex;justify-content:center;align-items:center;flex-shrink:0;color:var(--semi-color-text-0)}.semi-page-quickjump-input-number{max-width:50px;margin-left:4px;margin-right:4px}.semi-page-quickjump-disabled{color:var(--semi-color-disabled-text)}.semi-page .semi-select,.semi-select-dropdown{-webkit-user-select:none;user-select:none}.semi-page-rest-list{padding-top:4px;padding-bottom:4px}.semi-page-rest-list>div{position:relative}.semi-page-rest-item{height:32px;line-height:32px;display:flex;justify-content:center;box-sizing:border-box;cursor:pointer}.semi-page-rest-item:hover{background-color:var(--semi-color-fill-0)}.semi-page-rest-item:active{background-color:var(--semi-color-fill-1)}.semi-rtl .semi-page,.semi-portal-rtl .semi-page{direction:rtl}.semi-rtl .semi-page-item,.semi-portal-rtl .semi-page-item{margin-right:4px;margin-left:4px}.semi-rtl .semi-page-prev,.semi-rtl .semi-page-next,.semi-portal-rtl .semi-page-prev,.semi-portal-rtl .semi-page-next{transform:scaleX(-1)}.semi-select-option{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;word-break:break-all;padding:8px 12px;color:var(--semi-color-text-0);border-radius:0;position:relative;display:flex;flex-wrap:nowrap;align-items:center;cursor:pointer;box-sizing:border-box;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-select-option-icon{width:12px;color:transparent;margin-right:8px;display:flex;justify-content:center;align-content:center}.semi-select-option-text{display:flex;flex-wrap:wrap;white-space:pre}.semi-select-option-keyword{color:var(--semi-color-primary);background-color:inherit;font-weight:600}.semi-select-option:active{background-color:var(--semi-color-fill-1)}.semi-select-option-empty{cursor:not-allowed;color:var(--semi-color-disabled-text);justify-content:center}.semi-select-option-empty:hover,.semi-select-option-empty:active{background-color:inherit}.semi-select-option-disabled{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-select-option-disabled:hover{background-color:var(--semi-color-fill-0)}.semi-select-option-selected{font-weight:600;background:transparent}.semi-select-option-selected .semi-select-option-icon{color:var(--semi-color-text-2)}.semi-select-option-focused{background-color:var(--semi-color-fill-0)}.semi-select{box-sizing:border-box;border-radius:var(--semi-border-radius-small);border:1px solid transparent;height:32px;font-weight:400;background-color:var(--semi-color-fill-0);display:inline-flex;vertical-align:middle;position:relative;outline:none;cursor:pointer;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none));max-height:300px;overflow-y:auto}.semi-select:hover{background-color:var(--semi-color-fill-1);border:1px solid transparent}.semi-select:focus{border:1px solid var(--semi-color-focus-border);background-color:var(--semi-color-fill-0);outline:0}.semi-select:active{background-color:var(--semi-color-fill-2)}.semi-select-small{height:24px;line-height:24px}.semi-select-large{min-height:40px;line-height:40px}.semi-select-large .semi-select-selection{font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-select-open,.semi-select-focus{border:1px solid var(--semi-color-focus-border);outline:0}.semi-select-open:hover,.semi-select-focus:hover{background-color:var(--semi-color-fill-0);border:1px solid var(--semi-color-focus-border)}.semi-select-open:active,.semi-select-focus:active{background-color:var(--semi-color-fill-2);border:1px solid var(--semi-color-focus-border)}.semi-select-warning{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning-light-default)}.semi-select-warning:hover{background-color:var(--semi-color-warning-light-hover);border-color:var(--semi-color-warning-light-hover)}.semi-select-warning:focus{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning)}.semi-select-warning:active{background-color:var(--semi-color-warning-light-active);border-color:var(--semi-color-warning-light-active)}.semi-select-error{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger-light-default)}.semi-select-error:hover{background-color:var(--semi-color-danger-light-hover);border-color:var(--semi-color-danger-light-hover)}.semi-select-error:focus{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger)}.semi-select-error:active{background-color:var(--semi-color-danger-light-active);border-color:var(--semi-color-danger-light-active)}.semi-select-disabled{cursor:not-allowed;background-color:var(--semi-color-disabled-fill)}.semi-select-disabled:hover{background-color:var(--semi-color-disabled-fill)}.semi-select-disabled:focus{border:1px solid transparent;background-color:var(--semi-color-disabled-fill)}.semi-select-disabled .semi-select-selection,.semi-select-disabled .semi-select-selection-placeholder{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-select-disabled .semi-select-arrow,.semi-select-disabled .semi-select-prefix,.semi-select-disabled .semi-select-suffix{color:var(--semi-color-disabled-text)}.semi-select-disabled .semi-tag{color:var(--semi-color-disabled-text);background-color:transparent}.semi-select-selection{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;height:100%;display:flex;align-items:center;flex-grow:1;overflow:hidden;margin-left:12px;cursor:pointer;color:var(--semi-color-text-0)}.semi-select-selection-text{width:100%;overflow:hidden;text-overflow:ellipsis}.semi-select-selection-text-inactive{display:flex;opacity:.4}.semi-select-selection-text-hide{display:none}.semi-select-selection-placeholder{color:var(--semi-color-text-2)}.semi-select-selection .semi-tag{margin-top:1px;margin-right:4px;margin-bottom:1px}.semi-select-selection .semi-tag:nth-of-type(1){margin-left:0}.semi-select-selection .semi-tag-group{height:inherit}.semi-select-selection .semi-tag-group .semi-tag{margin-top:1px;margin-right:4px;margin-bottom:1px}.semi-select-content-wrapper{white-space:nowrap;overflow:hidden;display:flex;align-items:center;height:100%}.semi-select-content-wrapper-collapse{display:inline-flex;flex-shrink:0;width:100%}.semi-select-content-wrapper-collapse .semi-overflow-list-overflow{max-width:100%;min-width:50px}.semi-select-content-wrapper-collapse>.semi-select-content-wrapper-collapse-tag{background-color:transparent}.semi-select-content-wrapper-collapse>.semi-select-content-wrapper-collapse-N{background-color:transparent;padding:4px;color:var(--semi-color-text-0);font-size:12px}.semi-select-multiple{height:auto}.semi-select-multiple .semi-select-selection{margin-left:4px}.semi-select-multiple .semi-select-content-wrapper{width:100%;min-height:30px;flex-wrap:wrap}.semi-select-multiple .semi-select-content-wrapper-empty{margin-left:8px}.semi-select-multiple .semi-select-content-wrapper .semi-tag-group{display:flex;align-items:center}.semi-select-multiple .semi-select-content-wrapper-one-line{flex-wrap:nowrap}.semi-select-multiple .semi-select-content-wrapper-one-line .semi-tag-group{flex-wrap:nowrap;justify-content:flex-start;overflow:hidden;flex-shrink:0}.semi-select-multiple .semi-select-inline-label-wrapper{flex-shrink:0}.semi-select-multiple.semi-select-large .semi-select-content-wrapper{min-height:38px}.semi-select-multiple.semi-select-small .semi-select-content-wrapper{min-height:22px}.semi-select-arrow{display:flex;align-items:center;justify-content:center;width:32px;color:var(--semi-color-text-2);flex-shrink:0;transform:rotate(var(--semi-transform-rotate-none))}.semi-select-arrow-empty{display:flex;width:12px}.semi-select-prefix,.semi-select-suffix{display:flex;justify-content:center;align-items:center}.semi-select-prefix-text,.semi-select-suffix-text{margin:0 12px;color:var(--semi-color-text-2);font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600}.semi-select-prefix-icon,.semi-select-suffix-icon{color:var(--semi-color-text-2);margin:0 8px}.semi-select-suffix{display:flex;justify-content:center;align-items:center}.semi-select-clear{display:flex;justify-content:center;align-items:center;width:32px;color:var(--semi-color-text-2);flex-shrink:0}.semi-select-clear:hover{color:var(--semi-color-primary)}.semi-select-inset-label-wrapper{display:inline}.semi-select-inset-label{margin:0 12px;font-weight:600;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2);flex-shrink:0;white-space:nowrap}.semi-select-create-tips{color:var(--semi-color-text-2);margin-right:4px}.semi-select-with-prefix .semi-select-selection{margin-left:0}.semi-select-single.semi-select-filterable .semi-select-content-wrapper{flex-grow:1;height:100%;overflow:hidden;position:relative}.semi-select-single.semi-select-filterable .semi-input-wrapper{position:absolute;top:0;left:0;height:100%;width:100%;border:none;background-color:transparent}.semi-select-single.semi-select-filterable .semi-input-wrapper-focus{border:none}.semi-select-single.semi-select-filterable .semi-input{padding-left:0;padding-right:0;height:100%}.semi-select-multiple.semi-select-filterable .semi-select-content-wrapper{flex-grow:1;height:100%;overflow:hidden;position:relative}.semi-select-multiple.semi-select-filterable .semi-select-content-wrapper:not(.semi-select-content-wrapper-empty) .semi-input-wrapper{height:24px;line-height:24px}.semi-select-multiple.semi-select-filterable .semi-select-content-wrapper:not(.semi-select-content-wrapper-empty) .semi-input-wrapper .semi-input-default{height:24px}.semi-select-multiple.semi-select-filterable .semi-select-content-wrapper-empty .semi-input-wrapper{position:absolute;top:0;left:0;height:100%}.semi-select-multiple.semi-select-filterable .semi-select-content-wrapper-empty .semi-input-wrapper .semi-input-default{height:100%}.semi-select-multiple.semi-select-filterable .semi-input-wrapper{height:100%;width:100%;border:none;background-color:transparent}.semi-select-multiple.semi-select-filterable .semi-input-wrapper-focus{border:none}.semi-select-multiple.semi-select-filterable .semi-input{padding-left:0;padding-right:0}.semi-select-multiple.semi-select-filterable.semi-select-large .semi-select-content-wrapper:not(.semi-select-content-wrapper-empty) .semi-input-wrapper-large{height:24px;line-height:24px}.semi-select-multiple.semi-select-filterable.semi-select-large .semi-select-content-wrapper:not(.semi-select-content-wrapper-empty) .semi-input-wrapper-large .semi-input-large{height:24px}.semi-select-multiple.semi-select-filterable.semi-select-small .semi-select-content-wrapper:not(.semi-select-content-wrapper-empty) .semi-input-wrapper{height:20px;line-height:20px}.semi-select-multiple.semi-select-filterable.semi-select-small .semi-select-content-wrapper:not(.semi-select-content-wrapper-empty) .semi-input-wrapper .semi-input-small{height:20px}.semi-select-option-list-wrapper{padding:4px 0}.semi-select-option-list{overflow-x:hidden;overflow-y:auto}.semi-select-option-list-chosen .semi-select-option-icon{display:flex}.semi-select-group{color:var(--semi-color-text-2);margin-top:4px;padding:12px 16px 4px 32px;font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:default}.semi-select-group:not(:nth-of-type(1)){border-top:1px solid var(--semi-color-border)}.semi-select-loading-wrapper{padding:8px 16px;cursor:not-allowed;height:20px;box-sizing:content-box}.semi-select-borderless:not(:focus-within):not(:hover){background-color:transparent;border-color:transparent}.semi-select-borderless:not(:focus-within):not(:hover) .semi-select-arrow{opacity:0}.semi-select-borderless:focus-within:not(:active){background-color:transparent}.semi-select-borderless.semi-select-error:not(:focus-within){border-color:var(--semi-color-danger)}.semi-select-borderless.semi-select-warning:not(:focus-within){border-color:var(--semi-color-warning)}.semi-select-borderless.semi-select-error:focus-within{border-color:var(--semi-color-danger)}.semi-select-borderless.semi-select-warning:focus-within{border-color:var(--semi-color-warning)}.semi-select-dropdown-search-wrapper{padding:8px 12px;border-bottom:1px solid transparent}.semi-rtl .semi-select,.semi-portal-rtl .semi-select{direction:rtl}.semi-rtl .semi-select-selection,.semi-portal-rtl .semi-select-selection{margin-left:0;margin-right:12px}.semi-rtl .semi-select-selection .semi-tag:nth-of-type(1),.semi-portal-rtl .semi-select-selection .semi-tag:nth-of-type(1){margin-right:0}.semi-rtl .semi-select-selection .semi-tag-group .semi-tag,.semi-portal-rtl .semi-select-selection .semi-tag-group .semi-tag{margin-left:4px;margin-right:0}.semi-rtl .semi-select-multiple .semi-select-selection,.semi-portal-rtl .semi-select-multiple .semi-select-selection{margin-left:0;margin-right:4px}.semi-rtl .semi-select-multiple .semi-select-content-wrapper-empty,.semi-portal-rtl .semi-select-multiple .semi-select-content-wrapper-empty{margin-left:0;margin-right:8px}.semi-rtl .semi-select-create-tips,.semi-portal-rtl .semi-select-create-tips{margin-right:0;margin-left:4px}.semi-rtl .semi-select-with-prefix .semi-select-selection,.semi-portal-rtl .semi-select-with-prefix .semi-select-selection{margin-left:auto;margin-right:0}.semi-rtl .semi-select-single.semi-select-filterable .semi-input-wrapper,.semi-portal-rtl .semi-select-single.semi-select-filterable .semi-input-wrapper,.semi-rtl .semi-select-multiple.semi-select-filterable .semi-select-content-wrapper-empty .semi-input-wrapper,.semi-portal-rtl .semi-select-multiple.semi-select-filterable .semi-select-content-wrapper-empty .semi-input-wrapper{left:auto;right:0}.semi-rtl .semi-select-group,.semi-portal-rtl .semi-select-group{padding-left:32px;padding-right:16px}.semi-rtl .semi-select-option-icon,.semi-portal-rtl .semi-select-option-icon{margin-right:0;margin-left:8px}.semi-table-panel-operation{background-color:var(--semi-color-primary);padding:8px 16px;display:flex;justify-content:space-between;color:var(--semi-color-text-2)}.semi-table-panel-operation-right,.semi-table-panel-operation-left{display:flex;justify-content:space-between}.semi-table-panel-operation-selected{color:var(--semi-color-primary-light-active)}.semi-table-pagination-info{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400}.semi-table-pagination-outer{display:flex;justify-content:space-between;align-items:center}.semi-table{width:100%;text-align:left;border-collapse:separate;border-spacing:0;font-size:inherit;display:table}.semi-table-wrapper{zoom:1;position:relative;clear:both;box-sizing:border-box;margin:0;padding:0;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-0);width:100%}.semi-table-wrapper[data-column-fixed=true]{z-index:1}.semi-table-wrapper-ltr,.semi-table-wrapper-ltr .semi-spin{direction:ltr}.semi-table-middle .semi-table-tbody>.semi-table-row>.semi-table-row-cell{padding-top:12px;padding-bottom:12px}.semi-table-small .semi-table-tbody>.semi-table-row>.semi-table-row-cell{padding-top:8px;padding-bottom:8px}.semi-table-title{position:relative;padding:16px 0}.semi-table-container{position:relative}.semi-table-header{overflow:hidden;scrollbar-base-color:transparent}.semi-table-header::-webkit-scrollbar{background-color:transparent;border-bottom:2px solid var(--semi-color-border)}.semi-table-header-sticky{position:sticky;z-index:102}.semi-table-header-sticky .semi-table-thead>.semi-table-row>.semi-table-row-head{background-color:var(--semi-color-bg-1)}.semi-table-header-hidden{height:0}.semi-table-align-center .semi-table-operate-wrapper{justify-content:center}.semi-table-align-right .semi-table-operate-wrapper{justify-content:flex-end}.semi-table-operate-wrapper{display:flex;justify-content:flex-start}.semi-table-body{overflow:auto;width:100%;box-sizing:border-box}.semi-table-colgroup{display:table-column-group}.semi-table-colgroup .semi-table-col{display:table-column}.semi-table-colgroup .semi-table-column-expand,.semi-table-colgroup .semi-table-column-selection{width:48px}.semi-table-thead>.semi-table-row>.semi-table-row-head{background-color:var(--semi-color-bg-1);color:var(--semi-color-text-2);font-weight:600;text-align:left;border-bottom:2px solid var(--semi-color-border);padding:8px 16px;vertical-align:middle;overflow-wrap:break-word;position:relative;transition:background-color var(--semi-transition_duration-none) linear}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-row-head-clickSort{cursor:pointer}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-row-head-clickSort:hover{background-image:linear-gradient(0deg,var(--semi-color-fill-0),var(--semi-color-fill-0));background-color:var(--semi-color-bg-0)}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-left,.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right{z-index:101;position:sticky;background-color:var(--semi-color-bg-1)}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-left-last{border-right:1px solid var(--semi-color-border);box-shadow:3px 0 0 0 var(--semi-color-shadow)}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-left-last.resizing{border-right:2px solid var(--semi-color-primary)}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-left-last.resizing .react-resizable-handle:hover{background-color:unset}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right-first{border-left:1px solid var(--semi-color-border);box-shadow:-3px 0 0 0 var(--semi-color-shadow)}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right-first.resizing{border-right:2px solid var(--semi-color-primary)}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right-first.resizing .react-resizable-handle:hover{background-color:unset}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right-first[x-type=column-scrollbar]{box-shadow:none;border-left:transparent}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-column-selection{text-align:center}.semi-table-thead>.semi-table-row>.semi-table-row-head[colspan]:not([colspan="1"]){text-align:center}.semi-table-thead>.semi-table-row>.semi-table-row-head .semi-table-header-column{display:inline-flex;align-items:center}.semi-table-thead>.semi-table-row>.semi-table-row-head-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-table-thead>.semi-table-row>.semi-table-row-head-ellipsis .semi-table-row-head-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-table-thead>.semi-table-row .react-resizable{position:relative;background-clip:padding-box}.semi-table-thead>.semi-table-row .resizing{border-right:2px solid var(--semi-color-primary)}.semi-table-thead>.semi-table-row .resizing .react-resizable-handle:hover{background-color:unset}.semi-table-thead>.semi-table-row .react-resizable-handle{position:absolute;width:9px;height:calc(100% - 8px);background-color:var(--semi-color-border);bottom:4px;right:-1px;cursor:col-resize;z-index:0}.semi-table-thead>.semi-table-row .react-resizable-handle:hover{background-color:var(--semi-color-primary)}.semi-table-tbody{display:table-row-group}.semi-table-tbody>.semi-table-row{display:table-row;background-color:var(--semi-color-bg-1)}.semi-table-tbody>.semi-table-row.semi-table-row-hovered>.semi-table-row-cell{background-image:linear-gradient(0deg,var(--semi-color-fill-0),var(--semi-color-fill-0));background-color:var(--semi-color-bg-0)}.semi-table-tbody>.semi-table-row.semi-table-row-hovered>.semi-table-row-cell.semi-table-cell-fixed-left,.semi-table-tbody>.semi-table-row.semi-table-row-hovered>.semi-table-row-cell.semi-table-cell-fixed-right{background-image:linear-gradient(0deg,var(--semi-color-fill-0),var(--semi-color-fill-0));background-color:var(--semi-color-bg-1)}.semi-table-tbody>.semi-table-row:hover>.semi-table-row-cell{background-image:linear-gradient(0deg,var(--semi-color-fill-0),var(--semi-color-fill-0));background-color:var(--semi-color-bg-0)}.semi-table-tbody>.semi-table-row:hover>.semi-table-row-cell.semi-table-cell-fixed-left,.semi-table-tbody>.semi-table-row:hover>.semi-table-row-cell.semi-table-cell-fixed-right{background-image:linear-gradient(0deg,var(--semi-color-fill-0),var(--semi-color-fill-0));background-color:var(--semi-color-bg-1)}.semi-table-tbody>.semi-table-row>.semi-table-row-cell{display:table-cell;overflow-wrap:break-word;border-left:none;border-right:none;border-bottom:1px solid var(--semi-color-border);padding:16px;box-sizing:border-box;position:relative;vertical-align:middle}.semi-table-tbody>.semi-table-row>.semi-table-row-cell.resizing{border-right:2px solid var(--semi-color-primary)}.semi-table-tbody>.semi-table-row>.semi-table-row-cell-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-table-tbody>.semi-table-row.semi-table-row-expand>.semi-table-row-cell{background-color:var(--semi-color-fill-0)}.semi-table-tbody>.semi-table-row.semi-table-row-hidden{display:none}.semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-left,.semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-right{z-index:101;position:sticky;background-color:var(--semi-color-bg-1)}.semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-left-last{border-right:1px solid var(--semi-color-border);box-shadow:3px 0 0 0 var(--semi-color-shadow)}.semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-right-first{border-left:1px solid var(--semi-color-border);box-shadow:-3px 0 0 0 var(--semi-color-shadow)}.semi-table-tbody>.semi-table-row>.semi-table-cell-fixed>*{transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeOut) 0ms}.semi-table-tbody>.semi-table-row>*{transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeOut) 0ms}.semi-table-tbody>.semi-table-row-section{display:table-row}.semi-table-tbody>.semi-table-row-section>.semi-table-row-cell{background-color:rgba(var(--semi-grey-0),1);border-bottom:1px solid var(--semi-color-border)}.semi-table-tbody>.semi-table-row-section>.semi-table-row-cell:not(.semi-table-column-selection){padding:10px 16px}.semi-table-tbody>.semi-table-row-section .semi-table-section-inner{display:inline-flex;align-items:center}.semi-table-virtualized .semi-table-tbody{display:block}.semi-table-virtualized .semi-table-tbody>.semi-table-row{display:flex}.semi-table-virtualized .semi-table-tbody>.semi-table-row>.semi-table-row-cell{word-wrap:unset;word-break:unset;white-space:nowrap;display:inline-flex;align-items:center;overflow:hidden}.semi-table-virtualized .semi-table-tbody>.semi-table-row-section>.semi-table-row-cell{padding-top:16px;padding-bottom:16px;display:flex}.semi-table-virtualized .semi-table-tbody>.semi-table-row-expand>.semi-table-row-cell{padding:0;overflow:unset}.semi-table-footer{background-color:var(--semi-color-fill-0);padding:16px;margin:0;position:relative}.semi-table .semi-table-selection-wrap{display:inline-flex;vertical-align:bottom}.semi-table .semi-table-selection-disabled{cursor:not-allowed}.semi-table .semi-table-selection-disabled>.semi-checkbox{pointer-events:none}.semi-table .semi-table-column-hidden{display:none}.semi-table .semi-table-column-selection{text-align:center}.semi-table .semi-table-column-selection .semi-checkbox-inner-display .semi-icon{left:0;top:0}.semi-table .semi-table-column-expand .semi-table-expand-icon{transform:translateY(2px)}.semi-table .semi-table-column-expand .semi-table-expand-icon:last-child{margin-right:0}.semi-table .semi-table-column-sorter{display:inline-block;width:16px;height:16px;vertical-align:middle;text-align:center}.semi-table .semi-table-column-sorter-wrapper{display:flex;gap:4px;align-items:center;cursor:pointer;overflow:hidden}.semi-table .semi-table-column-sorter-up,.semi-table .semi-table-column-sorter-down{height:0;display:block;color:var(--semi-color-text-2)}.semi-table .semi-table-column-sorter-up:hover .anticon,.semi-table .semi-table-column-sorter-down:hover .anticon{color:var(--semi-color-text-2)}.semi-table .semi-table-column-sorter-up svg,.semi-table .semi-table-column-sorter-down svg{width:16px;height:16px}.semi-table .semi-table-column-sorter-up.on .semi-icon-caretup,.semi-table .semi-table-column-sorter-up.on .semi-icon-caretdown,.semi-table .semi-table-column-sorter-down.on .semi-icon-caretup,.semi-table .semi-table-column-sorter-down.on .semi-icon-caretdown{color:var(--semi-color-primary)}.semi-table .semi-table-column-filter{margin-left:4px;display:inline-flex;cursor:pointer;color:var(--semi-color-text-2);align-items:center}.semi-table .semi-table-column-filter svg{width:16px;height:16px}.semi-table .semi-table-column-filter.on{color:var(--semi-color-primary)}.semi-table-bordered>.semi-table-title{padding-left:16px;padding-right:16px;border-top:1px solid var(--semi-color-border);border-right:1px solid var(--semi-color-border);border-left:1px solid var(--semi-color-border)}.semi-table-bordered>.semi-table-container{border:1px solid var(--semi-color-border);border-right:0;border-bottom:0}:where(.semi-table-bordered)>.semi-table-container>.semi-table-header::-webkit-scrollbar{border-right:1px solid var(--semi-color-border)}:where(.semi-table-bordered)>.semi-table-container>.semi-table-footer{border-left:1px solid var(--semi-color-border);border-right:1px solid var(--semi-color-border);border-bottom:1px solid var(--semi-color-border)}.semi-table-bordered:not(.semi-table-scroll-position-right)>.semi-table-container:after{content:"";position:absolute;top:0;right:0;bottom:0;width:1px;background-color:var(--semi-color-border);display:block;z-index:103;pointer-events:none}.semi-table-bordered:not(.semi-table-scroll-position-right)>.semi-table-container>.semi-table-header{box-shadow:inset -1px 0 0 0 var(--semi-color-border)}:where(.semi-table-bordered>.semi-table-container)>.semi-table-body>.semi-table-placeholder{border-right:1px solid var(--semi-color-border)}:where(.semi-table-bordered>.semi-table-container>.semi-table-body)>.semi-table>.semi-table-thead>.semi-table-row>.semi-table-row-head .react-resizable-handle{background-color:transparent}:where(.semi-table-bordered>.semi-table-container>.semi-table-body)>.semi-table>.semi-table-thead>.semi-table-row>.semi-table-row-head,:where(.semi-table-bordered>.semi-table-container>.semi-table-body)>.semi-table>.semi-table-tbody>.semi-table-row>.semi-table-row-cell{border-right:1px solid var(--semi-color-border)}:where(.semi-table-bordered>.semi-table-container>.semi-table-header)>.semi-table>.semi-table-thead>.semi-table-row>.semi-table-row-head{border-right:1px solid var(--semi-color-border)}:where(.semi-table-bordered>.semi-table-container>.semi-table-header)>.semi-table>.semi-table-thead>.semi-table-row>.semi-table-row-head .react-resizable-handle{background-color:transparent}.semi-table-placeholder{position:sticky;left:0;z-index:1;box-sizing:border-box;padding:16px 12px;color:var(--semi-color-text-2);font-size:14px;text-align:center;background:transparent;border-bottom:1px solid var(--semi-color-border)}.semi-table-fixed{table-layout:fixed;min-width:100%}.semi-table-fixed>.semi-table-tbody>.semi-table-row-expand>.semi-table-row-cell>.semi-table-expand-inner,.semi-table-fixed>.semi-table-tbody>.semi-table-row-section>.semi-table-row-cell>.semi-table-section-inner{position:sticky;overflow:auto;left:0;margin-left:-16px;margin-right:-16px;padding-left:16px;padding-right:16px;height:100%;display:flex;align-items:center}.semi-table-fixed-header table{table-layout:fixed}.semi-table-scroll-position-left .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-left-last,.semi-table-scroll-position-left .semi-table-thead>.semi-table-row>.semi-table-cell-fixed-left-last{box-shadow:none}.semi-table-scroll-position-right .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-right-first,.semi-table-scroll-position-right .semi-table-thead>.semi-table-row>.semi-table-cell-fixed-right-first{box-shadow:none}.semi-table-pagination-outer{color:var(--semi-color-text-2);min-height:60px}.semi-table-expand-icon{color:var(--semi-color-text-2);cursor:pointer;display:inline-flex;align-items:center;-webkit-user-select:none;user-select:none;background:transparent;position:relative;margin-right:8px}.semi-table-expand-icon-cell{display:inline-flex;align-items:center;justify-content:center}.semi-table-expand-icon .semi-table-expandedIcon-show{transition:transform .15s cubic-bezier(.62,.05,.36,.95);transform:rotate(90deg)}.semi-table-expand-icon .semi-table-expandedIcon-hide{transition:transform .15s cubic-bezier(.62,.05,.36,.95);transform:rotate(0)}.semi-table-column-filter-dropdown .semi-dropdown-menu{max-height:290px;overflow-y:auto}.semi-table-wrapper-rtl .semi-table{direction:rtl;text-align:right}.semi-table-wrapper-rtl .semi-table-align-left .semi-table-operate-wrapper{justify-content:flex-end}.semi-table-wrapper-rtl .semi-table-align-right .semi-table-operate-wrapper{justify-content:flex-start}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row>.semi-table-row-head{text-align:right}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-left-last{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-left-last.resizing{border-left:2px solid var(--semi-color-primary)}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right-first{border-left:0;border-right:1px solid var(--semi-color-border)}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right-first.resizing{border-left:2px solid var(--semi-color-primary)}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right-first[x-type=column-scrollbar]{box-shadow:none;border-right:transparent}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row .resizing{border-left:2px solid var(--semi-color-primary)}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row .react-resizable-handle{right:auto;left:-1px}.semi-table-wrapper-rtl .semi-table-tbody{display:table-row-group}.semi-table-wrapper-rtl .semi-table-tbody>.semi-table-row>.semi-table-row-cell.resizing{border-right:0;border-left:2px solid var(--semi-color-primary)}.semi-table-wrapper-rtl .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-left-last{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-table-wrapper-rtl .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-right-first{border-left:0;border-right:1px solid var(--semi-color-border)}.semi-table-wrapper-rtl .semi-table .semi-table-column-selection .semi-checkbox-inner-display .semi-icon{left:auto;right:0}.semi-table-wrapper-rtl .semi-table .semi-table-column-expand .semi-table-expand-icon{transform:scaleX(-1) translateY(2px)}.semi-table-wrapper-rtl .semi-table .semi-table-column-expand .semi-table-expand-icon:last-child{margin-right:auto;margin-left:0}.semi-table-wrapper-rtl .semi-table .semi-table-column-sorter,.semi-table-wrapper-rtl .semi-table .semi-table-column-filter{margin-left:0;margin-right:4px}.semi-table-wrapper-rtl .semi-table-bordered .semi-table-container{border-left:0;border-right:1px solid var(--semi-color-border)}.semi-table-wrapper-rtl .semi-table-bordered .semi-table-thead>.semi-table-row>.semi-table-row-head,.semi-table-wrapper-rtl .semi-table-bordered .semi-table-tbody>.semi-table-row>.semi-table-row-cell{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-table-wrapper-rtl .semi-table-bordered .semi-table-placeholder{border-left:1px solid var(--semi-color-border);border-right:0}.semi-table-wrapper-rtl .semi-table-bordered .semi-table-header::-webkit-scrollbar{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-table-wrapper-rtl .semi-table-bordered:not(.semi-table-scroll-position-left)>.semi-table-container:after{content:"";position:absolute;top:0;left:0;bottom:0;width:1px;background-color:var(--semi-color-border);display:block;z-index:103;pointer-events:none}.semi-table-wrapper-rtl .semi-table-fixed>.semi-table-tbody>.semi-table-row-expand>.semi-table-row-cell>.semi-table-expand-inner,.semi-table-wrapper-rtl .semi-table-fixed>.semi-table-tbody>.semi-table-row-section>.semi-table-row-cell>.semi-table-section-inner{left:auto;right:0;margin-right:-16px;margin-left:-16px;padding-right:16px;padding-left:16px}.semi-table-wrapper-rtl .semi-table-scroll-position-left .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-left-last,.semi-table-wrapper-rtl .semi-table-scroll-position-left .semi-table-thead>.semi-table-row>.semi-table-cell-fixed-left-last{box-shadow:3px 0 0 0 var(--semi-color-shadow)}.semi-table-wrapper-rtl .semi-table-scroll-position-left .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-right-first,.semi-table-wrapper-rtl .semi-table-scroll-position-left .semi-table-thead>.semi-table-row>.semi-table-cell-fixed-right-first{box-shadow:none}.semi-table-wrapper-rtl .semi-table-scroll-position-right .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-left-last,.semi-table-wrapper-rtl .semi-table-scroll-position-right .semi-table-thead>.semi-table-row>.semi-table-cell-fixed-left-last{box-shadow:none}.semi-table-wrapper-rtl .semi-table-scroll-position-right .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-right-first,.semi-table-wrapper-rtl .semi-table-scroll-position-right .semi-table-thead>.semi-table-row>.semi-table-cell-fixed-right-first{box-shadow:-3px 0 0 0 var(--semi-color-shadow)}.semi-table-wrapper-rtl .semi-table-expand-icon{margin-right:auto;margin-left:8px;transform:scaleX(-1) translateY(2px)}.semi-table-wrapper-rtl .semi-spin{direction:rtl}.semi-tabs{box-sizing:border-box;position:relative}.semi-tabs-left{display:flex;flex-direction:row}.semi-tabs-bar{position:relative;white-space:nowrap;outline:none}.semi-tabs-bar-left{display:flex;flex-direction:column}.semi-tabs-bar-extra{padding:0 5px}.semi-tabs-bar-more-trigger{display:inline-block;cursor:pointer;color:var(--semi-color-text-2)}.semi-tabs-bar-more-trigger-content{display:flex;align-content:center}.semi-tabs-bar-more-trigger-content-icon:not(:not(.semi-tabs-bar-more-trigger-content-icon)){margin:0 8px;flex-shrink:0;display:flex;align-items:center}.semi-tabs-bar-more-trigger-line{padding:16px 4px 14px}.semi-tabs-bar-more-trigger-card,.semi-tabs-bar-more-trigger-button{padding:8px 12px}.semi-tabs-bar .semi-tabs-tab{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer;box-sizing:border-box;position:relative;display:block;float:left;font-weight:400;color:var(--semi-color-text-2);-webkit-user-select:none;user-select:none}.semi-tabs-bar .semi-tabs-tab .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){position:relative;margin-right:8px;top:3px;color:var(--semi-color-text-2);transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-tabs-bar .semi-tabs-tab .semi-icon.semi-tabs-tab-icon-close{margin-right:0;font-size:14px;color:var(--semi-color-text-2);margin-left:10px;cursor:pointer}.semi-tabs-bar .semi-tabs-tab:hover{color:var(--semi-color-text-0)}.semi-tabs-bar .semi-tabs-tab:hover .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){color:var(--semi-color-text-0)}.semi-tabs-bar .semi-tabs-tab:active{color:var(--semi-color-text-0)}.semi-tabs-bar .semi-tabs-tab:active .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){color:var(--semi-color-text-0)}.semi-tabs-bar .semi-tabs-tab-active,.semi-tabs-bar .semi-tabs-tab-active:hover{cursor:default;font-weight:600;color:var(--semi-color-text-0)}.semi-tabs-bar .semi-tabs-tab-active .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate),.semi-tabs-bar .semi-tabs-tab-active:hover .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){color:var(--semi-color-primary)}.semi-tabs-bar .semi-tabs-tab-active .semi-icon.semi-tabs-tab-icon-close,.semi-tabs-bar .semi-tabs-tab-active:hover .semi-icon.semi-tabs-tab-icon-close{color:var(--semi-color-text-2)}.semi-tabs-bar .semi-tabs-tab-active .semi-icon.semi-tabs-tab-icon-close:hover{color:var(--semi-color-text-1)}.semi-tabs-bar .semi-tabs-tab-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text)}.semi-tabs-bar .semi-tabs-tab-disabled:hover{color:var(--semi-color-disabled-text);border-bottom:none}.semi-tabs-tab-single.semi-tabs-tab{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer;box-sizing:border-box;position:relative;display:inline-block;font-weight:400;color:var(--semi-color-text-2);-webkit-user-select:none;user-select:none}.semi-tabs-tab-single.semi-tabs-tab .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){position:relative;margin-right:8px;top:3px;color:var(--semi-color-text-2);transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-tabs-tab-single.semi-tabs-tab .semi-icon.semi-tabs-tab-icon-close{margin-right:0;font-size:14px;color:var(--semi-color-text-2);margin-left:10px;cursor:pointer}.semi-tabs-tab-single.semi-tabs-tab .semi-icon.semi-tabs-tab-icon-close.semi-icon-close:hover,.semi-tabs-tab-single.semi-tabs-tab:hover{color:var(--semi-color-text-0)}.semi-tabs-tab-single.semi-tabs-tab:hover .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){color:var(--semi-color-text-0)}.semi-tabs-tab-single.semi-tabs-tab:hover .semi-icon.semi-tabs-tab-icon-close{color:var(--semi-color-text-2)}.semi-tabs-tab-single.semi-tabs-tab:active{color:var(--semi-color-text-0)}.semi-tabs-tab-single.semi-tabs-tab:active .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){color:var(--semi-color-text-0)}.semi-tabs-tab-single.semi-tabs-tab:active .semi-icon.semi-tabs-tab-icon-close{color:var(--semi-color-text-2)}.semi-tabs-tab-single.semi-tabs-tab-active,.semi-tabs-tab-single.semi-tabs-tab-active:hover{cursor:default;font-weight:600;color:var(--semi-color-text-0)}.semi-tabs-tab-single.semi-tabs-tab-active .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate),.semi-tabs-tab-single.semi-tabs-tab-active:hover .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){color:var(--semi-color-primary)}.semi-tabs-tab-single.semi-tabs-tab-active .semi-icon.semi-tabs-tab-icon-close,.semi-tabs-tab-single.semi-tabs-tab-active:hover .semi-icon.semi-tabs-tab-icon-close{color:var(--semi-color-text-2)}.semi-tabs-tab-single.semi-tabs-tab-active .semi-icon.semi-tabs-tab-icon-close:hover{color:var(--semi-color-text-1)}.semi-tabs-tab-single.semi-tabs-tab-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text)}.semi-tabs-tab-single.semi-tabs-tab-disabled:hover{color:var(--semi-color-disabled-text);border-bottom:none}.semi-tabs-bar-collapse,.semi-tabs-bar-collapse .semi-tabs-bar-overflow-list{display:flex;align-items:center}.semi-tabs-bar-collapse .semi-overflow-list{flex:1}.semi-tabs-bar-collapse .semi-overflow-list .semi-overflow-list-scroll-wrapper{-ms-overflow-style:none;scrollbar-width:none}.semi-tabs-bar-collapse .semi-overflow-list .semi-overflow-list-scroll-wrapper::-webkit-scrollbar{display:none;width:0;height:0}.semi-tabs-bar-collapse .semi-overflow-list .semi-overflow-list-scroll-wrapper:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-tabs-bar-collapse .semi-overflow-list>.semi-button-disabled{color:var(--semi-color-disabled-text);background-color:transparent}.semi-tabs-bar-collapse .semi-overflow-list>.semi-button-disabled:hover{color:var(--semi-color-disabled-text);background-color:transparent}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-start{margin-right:4px}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-start>.semi-button[aria-disabled=false]{color:var(--semi-color-primary);padding:8px;border:0px solid transparent;background-color:transparent}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-start>.semi-button[aria-disabled=false]:hover{background-color:var(--semi-color-fill-0);color:var(--semi-color-primary);border-color:transparent}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-start>.semi-button[aria-disabled=false]:active{background-color:var(--semi-color-fill-1);color:var(--semi-color-primary);border-color:transparent}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-end{margin-left:4px}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-end>.semi-button[aria-disabled=false]{color:var(--semi-color-primary);padding:8px;border:0px solid transparent;background-color:transparent}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-end>.semi-button[aria-disabled=false]:hover{background-color:var(--semi-color-fill-0);color:var(--semi-color-primary);border-color:transparent}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-end>.semi-button[aria-disabled=false]:active{background-color:var(--semi-color-fill-1);color:var(--semi-color-primary);border-color:transparent}.semi-tabs-bar-dropdown{max-height:300px;overflow-y:auto}.semi-tabs-bar:after{content:"";height:0;display:block;clear:both}.semi-tabs-bar-line.semi-tabs-bar-top{border-bottom:1px solid var(--semi-color-border);transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab{padding:16px 4px 14px;transition:border-bottom-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);border-bottom:2px solid transparent}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:nth-of-type(1){padding-left:0}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:hover{border-bottom:2px solid var(--semi-color-fill-0)}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-1px}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:active{border-bottom:2px solid var(--semi-color-fill-1)}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type){margin-right:24px}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab-small{padding:8px 4px 6px}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab-medium{padding:12px 4px 10px}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab-active,.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab-active:hover{border-bottom:2px solid var(--semi-color-primary)}.semi-tabs-bar-line.semi-tabs-bar-left{border-right:1px solid var(--semi-color-border)}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab{padding:12px;border-left:2px solid transparent;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:hover{border-left:2px solid var(--semi-color-fill-0);background-color:var(--semi-color-fill-0)}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:active{border-left:2px solid var(--semi-color-fill-1);background-color:var(--semi-color-fill-1)}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-small{padding:6px}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-medium{padding:10px}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-active{background-color:var(--semi-color-primary-light-default)}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-active,.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-active:hover{border-left:2px solid var(--semi-color-primary);background-color:var(--semi-color-primary-light-default)}.semi-tabs-bar-line .semi-tabs-bar-extra{height:50px;line-height:50px}.semi-tabs-bar-line .semi-tabs-bar-line-extra-small{height:36px;line-height:36px}.semi-tabs-bar-card.semi-tabs-bar-top:before{position:absolute;right:0;left:0;bottom:0;border-bottom:1px solid var(--semi-color-border);content:""}.semi-tabs-bar-card.semi-tabs-bar-top .semi-tabs-tab{border:1px solid transparent;border-bottom:none;border-radius:var(--semi-border-radius-small) var(--semi-border-radius-small) 0 0}.semi-tabs-bar-card.semi-tabs-bar-top .semi-tabs-tab:hover{border-bottom:none}.semi-tabs-bar-card.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type){margin-right:8px}.semi-tabs-bar-card.semi-tabs-bar-top .semi-tabs-tab-active,.semi-tabs-bar-card.semi-tabs-bar-top .semi-tabs-tab-active:hover{padding:8px 12px 7px;border:1px solid var(--semi-color-border);border-bottom:1px solid var(--semi-color-bg-1);background:transparent}.semi-tabs-bar-card.semi-tabs-bar-left{border-right:1px solid var(--semi-color-border)}.semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab{border:1px solid transparent;border-right:none;border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab:hover{border-right:none}.semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab:not(:last-of-type){margin-bottom:8px}.semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab-active:after{content:" ";width:1px;position:absolute;right:-1px;top:0;bottom:0;background:var(--semi-color-bg-1)}.semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab-active,.semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab-active:hover{padding:8px 12px;border:1px solid var(--semi-color-border);border-right:none;background:transparent}.semi-tabs-bar-card .semi-tabs-tab{padding:8px 12px;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-tabs-bar-card .semi-tabs-tab:hover{background:var(--semi-color-fill-0)}.semi-tabs-bar-card .semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-tabs-bar-card .semi-tabs-tab:active{background:var(--semi-color-fill-1)}.semi-tabs-bar-button{border:none}.semi-tabs-bar-button.semi-tabs-bar-left .semi-tabs-tab:not(:last-of-type){margin-bottom:8px}.semi-tabs-bar-button.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type){margin-right:8px}.semi-tabs-bar-button .semi-tabs-tab{padding:8px 12px;border-radius:var(--semi-border-radius-small);color:var(--semi-color-text-2);border:none;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-tabs-bar-button .semi-tabs-tab:hover{border:none;background-color:var(--semi-color-fill-0)}.semi-tabs-bar-button .semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-tabs-bar-button .semi-tabs-tab:active{background-color:var(--semi-color-fill-1)}.semi-tabs-bar-button .semi-tabs-tab-active,.semi-tabs-bar-button .semi-tabs-tab-active:hover{color:var(--semi-color-primary);border:none;background-color:var(--semi-color-primary-light-default)}.semi-tabs-bar-slash .semi-tabs-tab{padding:12px 0}.semi-tabs-bar-slash .semi-tabs-tab:nth-of-type(1){padding-left:0}.semi-tabs-bar-slash .semi-tabs-tab:not(:last-of-type){margin-right:16px}.semi-tabs-bar-slash .semi-tabs-tab:not(:last-of-type):after{content:"";margin-left:16px;display:inline-block;height:14px;width:8px;margin-top:3px;margin-bottom:3px;vertical-align:bottom;background:linear-gradient(to bottom right,transparent 0%,transparent calc(50% - 1px),var(--semi-color-text-2) 50%,transparent calc(50% + 1px),transparent 100%)}.semi-tabs-content{width:100%;padding:5px 0}.semi-tabs-content-left{height:100%;padding:0 5px}.semi-tabs-pane{width:100%;overflow:hidden;color:var(--semi-color-text-0)}.semi-tabs-pane:focus-visible{outline:2px solid var(--semi-color-primary-light-active)}.semi-tabs-pane-inactive,.semi-tabs-content-no-animated .semi-tabs-pane-inactive{display:none}@keyframes semi-tabs-panel-keyframe-leftShow{0%{transform:translate(60px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes semi-tabs-panel-keyframe-rightShow{0%{transform:translate(-60px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes semi-tabs-panel-keyframe-topShow{0%{transform:translateY(60px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes semi-tabs-panel-keyframe-bottomShow{0%{transform:translateY(-60px);opacity:0}to{transform:translateY(0);opacity:1}}.semi-tabs-pane-animate-leftShow{animation:.2s semi-tabs-panel-keyframe-leftShow ease-in-out 0s;animation-fill-mode:forwards}.semi-tabs-pane-animate-rightShow{animation:.2s semi-tabs-panel-keyframe-rightShow ease-in-out 0s;animation-fill-mode:forwards}.semi-tabs-pane-animate-topShow{animation:.2s semi-tabs-panel-keyframe-topShow ease-in-out 0s;animation-fill-mode:forwards}.semi-tabs-pane-animate-bottomShow{animation:.2s semi-tabs-panel-keyframe-bottomShow ease-in-out 0s;animation-fill-mode:forwards}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab{font-size:14px;padding:16px 4px 14px;transition:border-bottom-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);border-bottom:2px solid transparent}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab:nth-of-type(1){padding-left:0}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab:hover{border-bottom:2px solid var(--semi-color-fill-0)}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-1px}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab:active{border-bottom:2px solid var(--semi-color-fill-1)}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab-small{font-size:14px;padding:8px 4px 6px}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab-medium{font-size:14px;padding:12px 4px 10px}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab-active,.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab-active:hover{border-bottom:2px solid var(--semi-color-primary)}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab{padding:12px;border-left:2px solid transparent;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab:hover{border-left:2px solid var(--semi-color-fill-0);background-color:var(--semi-color-fill-0)}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab:active{border-left:2px solid var(--semi-color-fill-1);background-color:var(--semi-color-fill-1)}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab-small{padding:6px}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab-medium{padding:10px}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab-active{background-color:var(--semi-color-primary-light-default)}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab-active,.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab-active:hover{border-left:2px solid var(--semi-color-primary);background-color:var(--semi-color-primary-light-default)}.semi-tabs-tab-card.semi-tabs-tab-top.semi-tabs-tab{border:1px solid transparent;border-bottom:none;border-radius:var(--semi-border-radius-small) var(--semi-border-radius-small) 0 0}.semi-tabs-tab-card.semi-tabs-tab-top.semi-tabs-tab:hover{border-bottom:none}.semi-tabs-tab-card.semi-tabs-tab-top.semi-tabs-tab-active,.semi-tabs-tab-card.semi-tabs-tab-top.semi-tabs-tab-active:hover{padding:8px 12px 7px;border:1px solid var(--semi-color-border);border-bottom:1px solid var(--semi-color-bg-1);background:transparent}.semi-tabs-tab-card.semi-tabs-tab-left.semi-tabs-tab{border:1px solid transparent;border-right:none;border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-tabs-tab-card.semi-tabs-tab-left.semi-tabs-tab:hover{border-right:none}.semi-tabs-tab-card.semi-tabs-tab-left.semi-tabs-tab-active:after{content:" ";width:1px;position:absolute;right:-1px;top:0;bottom:0;background:var(--semi-color-bg-1)}.semi-tabs-tab-card.semi-tabs-tab-left.semi-tabs-tab-active,.semi-tabs-tab-card.semi-tabs-tab-left.semi-tabs-tab-active:hover{padding:8px 12px;border:1px solid var(--semi-color-border);border-right:none;background:transparent}.semi-tabs-tab-card.semi-tabs-tab{padding:8px 12px;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-tabs-tab-card.semi-tabs-tab:hover{background:var(--semi-color-fill-0)}.semi-tabs-tab-card.semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-tabs-tab-card.semi-tabs-tab:active{background:var(--semi-color-fill-1)}.semi-tabs-tab-button{border:none}.semi-tabs-tab-button.semi-tabs-tab{padding:8px 12px;border-radius:var(--semi-border-radius-small);color:var(--semi-color-text-2);border:none;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-tabs-tab-button.semi-tabs-tab:hover{border:none;background-color:var(--semi-color-fill-0)}.semi-tabs-tab-button.semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-tabs-tab-button.semi-tabs-tab:active{background-color:var(--semi-color-fill-1)}.semi-tabs-tab-button.semi-tabs-tab-active,.semi-tabs-tab-button.semi-tabs-tab-active:hover{color:var(--semi-color-primary);border:none;background-color:var(--semi-color-primary-light-default)}.semi-rtl .semi-tabs,.semi-portal-rtl .semi-tabs{direction:rtl}.semi-rtl .semi-tabs-bar .semi-tabs-tab,.semi-portal-rtl .semi-tabs-bar .semi-tabs-tab{float:right}.semi-rtl .semi-tabs-bar .semi-tabs-tab .semi-icon,.semi-portal-rtl .semi-tabs-bar .semi-tabs-tab .semi-icon{margin-right:0;margin-left:8px}.semi-rtl .semi-tabs-bar-collapse .semi-tabs-bar-arrow-start,.semi-portal-rtl .semi-tabs-bar-collapse .semi-tabs-bar-arrow-start{margin-right:0;margin-left:4px}.semi-rtl .semi-tabs-bar-collapse .semi-tabs-bar-arrow-end,.semi-portal-rtl .semi-tabs-bar-collapse .semi-tabs-bar-arrow-end{margin-left:0;margin-right:4px}.semi-rtl .semi-tabs-bar-collapse .semi-icon-chevron_right,.semi-rtl .semi-tabs-bar-collapse .semi-icon-chevron_left,.semi-portal-rtl .semi-tabs-bar-collapse .semi-icon-chevron_right,.semi-portal-rtl .semi-tabs-bar-collapse .semi-icon-chevron_left{transform:scaleX(-1)}.semi-rtl .semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type),.semi-portal-rtl .semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type){margin-right:0;margin-left:24px}.semi-rtl .semi-tabs-bar-line.semi-tabs-bar-left,.semi-portal-rtl .semi-tabs-bar-line.semi-tabs-bar-left{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab,.semi-portal-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab{border-left:0;border-right:2px solid transparent}.semi-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:hover,.semi-portal-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:hover{border-left:0;border-right:2px solid var(--semi-color-fill-0)}.semi-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:active,.semi-portal-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:active{border-left:0;border-right:2px solid var(--semi-color-fill-1)}.semi-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-active,.semi-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-active:hover,.semi-portal-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-active,.semi-portal-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-active:hover{border-left:0;border-right:2px solid var(--semi-color-primary)}.semi-rtl .semi-tabs-bar-card.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type),.semi-portal-rtl .semi-tabs-bar-card.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type){margin-left:0;margin-right:8px}.semi-rtl .semi-tabs-bar-card.semi-tabs-bar-left,.semi-portal-rtl .semi-tabs-bar-card.semi-tabs-bar-left{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-rtl .semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab,.semi-portal-rtl .semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab{border:1px solid transparent;border-left:none}.semi-rtl .semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab:hover,.semi-portal-rtl .semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab:hover{border-left:none}.semi-rtl .semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab-active:after,.semi-portal-rtl .semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab-active:after{right:auto;left:-1px}.semi-rtl .semi-tabs-bar-button.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type),.semi-portal-rtl .semi-tabs-bar-button.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type){margin-right:auto;margin-left:8px} diff --git a/frontends/desktop/dist/assets/loading-6Qy4iUUr.css b/frontends/desktop/dist/assets/loading-6Qy4iUUr.css new file mode 100644 index 000000000..43c2b57bb --- /dev/null +++ b/frontends/desktop/dist/assets/loading-6Qy4iUUr.css @@ -0,0 +1 @@ +.semi-progress{display:flex;align-items:center}.semi-progress-track{background-color:var(--semi-color-fill-0);border-radius:var(--semi-border-radius-small)}.semi-progress-horizontal{height:4px;margin-top:4px;margin-bottom:4px}.semi-progress-horizontal.semi-progress-large{height:6px}.semi-progress-horizontal .semi-progress-track{height:100%;width:100%}.semi-progress-horizontal .semi-progress-track-inner{height:100%;background-color:var(--semi-color-success);border-radius:var(--semi-border-radius-small);transition:width .3s;transition-timing-function:cubic-bezier(.62,.05,.36,.95)}.semi-progress-horizontal .semi-progress-line-text{min-width:45px;font-weight:600;margin-left:16px;color:var(--semi-color-text-0)}.semi-progress-vertical{width:4px;display:inline-flex;height:100%;margin-left:4px;margin-right:4px;flex-direction:column}.semi-progress-vertical.semi-progress-large{width:6px}.semi-progress-vertical .semi-progress-track{height:100%;width:100%}.semi-progress-vertical .semi-progress-track-inner{background-color:var(--semi-color-success);border-radius:var(--semi-border-radius-small);width:100%;transition:height .3s;transition-timing-function:cubic-bezier(.62,.05,.36,.95)}.semi-progress-vertical .semi-progress-line-text{font-weight:600;margin-top:8px}.semi-progress-circle{position:relative;display:inline-block}.semi-progress-circle-ring{display:block}.semi-progress-circle-ring-track{stroke:var(--semi-color-fill-0)}.semi-progress-circle-ring-inner{transition:stroke-dashoffset .3s;transition-timing-function:cubic-bezier(.62,.05,.36,.95);transform:rotate(-90deg);transform-origin:50% 50%;stroke:var(--semi-color-success)}.semi-progress-circle-text{position:absolute;top:50%;left:50%;width:100%;text-align:center;transform:translate(-50%,-50%);-webkit-user-select:none;user-select:none;color:var(--semi-color-mode-minor-text)}.semi-rtl .semi-progress,.semi-portal-rtl .semi-progress{direction:rtl}.semi-rtl .semi-progress-horizontal .semi-progress-line-text,.semi-portal-rtl .semi-progress-horizontal .semi-progress-line-text{margin-left:0;margin-right:16px}.semi-rtl .semi-progress-circle-ring-inner,.semi-portal-rtl .semi-progress-circle-ring-inner{transform:rotate(-90deg);transform-origin:50% 50%}.semi-rtl .semi-progress-circle-text,.semi-portal-rtl .semi-progress-circle-text{left:auto;right:50%;transform:translate(50%,-50%)}:root{font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,Microsoft YaHei UI,Helvetica Neue,sans-serif;background:var(--semi-color-bg-0);color:var(--semi-color-text-0)}*{box-sizing:border-box}html,body,#loading-root{width:100%;height:100%;margin:0}body{overflow:hidden;background:var(--semi-color-bg-0)}.ga-bootstrap-shell{height:100%;display:flex;flex-direction:column}.ga-bootstrap-app{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;padding:28px;background:radial-gradient(circle at 50% 18%,color-mix(in srgb,var(--semi-color-primary) 8%,transparent),transparent 42%),var(--semi-color-bg-0);color:var(--semi-color-text-0)}.ga-bootstrap-screen{width:min(100%,380px);text-align:center}.ga-bootstrap-loading{display:flex;flex-direction:column;align-items:center;gap:18px}.ga-bootstrap-title.semi-typography{margin:0;color:var(--semi-color-text-0)}.ga-bootstrap-description.semi-typography{margin:8px auto 22px;max-width:340px;line-height:1.65}.ga-bootstrap-progress-bar{margin-top:4px}.ga-bootstrap-stages{display:grid;gap:2px;margin:18px 0 0;padding:0;list-style:none;text-align:left}.ga-bootstrap-stages li{display:flex;align-items:center;gap:10px;min-height:30px;padding:4px 8px;border-radius:var(--semi-border-radius-small);color:var(--semi-color-text-2)}.ga-bootstrap-stages li[data-state=running]{background:var(--semi-color-primary-light-default);color:var(--semi-color-primary)}.ga-bootstrap-stages li[data-state=done]{color:var(--semi-color-success)}.ga-bootstrap-stages li[data-state=failed]{background:var(--semi-color-danger-light-default);color:var(--semi-color-danger)}.ga-bootstrap-stage-dot{width:14px;height:14px;border:2px solid var(--semi-color-border);border-radius:50%;flex:0 0 auto}.ga-bootstrap-log{margin-top:18px;text-align:left;border-top:1px solid var(--semi-color-border)}.ga-bootstrap-log .semi-collapse-header{padding-inline:4px;color:var(--semi-color-text-2)}.ga-bootstrap-log pre{max-height:150px;margin:0;padding:12px;overflow:auto;border:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-medium);background:var(--semi-color-fill-0);color:var(--semi-color-text-1);font:11px/1.55 ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere;-webkit-user-select:text;user-select:text}.ga-bootstrap-ready{display:flex;flex-direction:column;align-items:center;gap:10px}.ga-bootstrap-ready-icon{margin-bottom:4px;color:var(--semi-color-success)} diff --git a/frontends/desktop/dist/assets/loading-VXGdS4iv.js b/frontends/desktop/dist/assets/loading-VXGdS4iv.js new file mode 100644 index 000000000..37bd778ba --- /dev/null +++ b/frontends/desktop/dist/assets/loading-VXGdS4iv.js @@ -0,0 +1,2 @@ +import{c as ie,b as v,B as oe,l as A,R as x,au as Y,P as l,an as le,aj as o,T as j,ap as K,S as te,U as ce,ak as pe,at as de,aq as ue,as as ge,ar as he}from"./tauri-compat-tfiFK9EG.js";import{S as fe}from"./index-D_sWIqse.js";import{A as me}from"./Animation-TKQfYYOo.js";import{W as be}from"./WindowsTitlebar-CrkUa1UM.js";function ye(e){return v.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},e),v.createElement("g",{clipPath:"url(#clip_loading)"},v.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 0c.66 0 1.2.54 1.2 1.2v5.2a1.2 1.2 0 0 1-2.4 0V1.2c0-.66.54-1.2 1.2-1.2Zm7.05 2.3c.54.38.66 1.13.27 1.67l-3.06 4.2a1.2 1.2 0 0 1-1.94-1.4l3.06-4.21a1.2 1.2 0 0 1 1.67-.27Zm-14.1 0a1.2 1.2 0 0 1 1.67.26l3.06 4.2a1.2 1.2 0 1 1-1.94 1.41l-3.06-4.2a1.2 1.2 0 0 1 .27-1.68Zm-4.36 6c.2-.64.88-.98 1.5-.78l4.95 1.6a1.2 1.2 0 0 1-.74 2.3L1.36 9.8a1.2 1.2 0 0 1-.77-1.5Zm22.82 0c.2.62-.14 1.3-.77 1.5l-4.94 1.61a1.2 1.2 0 0 1-.74-2.28l4.94-1.6c.63-.21 1.3.13 1.51.76Zm-15.6 5.06c.21.63-.13 1.3-.77 1.51l-4.94 1.6a1.2 1.2 0 0 1-.74-2.27l4.94-1.61c.63-.2 1.31.14 1.52.77Zm8.37 0c.21-.63.89-.98 1.52-.77l4.94 1.6a1.2 1.2 0 0 1-.74 2.29l-4.94-1.6a1.2 1.2 0 0 1-.78-1.52Zm-6.77 2.2c.54.39.66 1.14.27 1.68l-3.06 4.2a1.2 1.2 0 1 1-1.94-1.4l3.06-4.21a1.2 1.2 0 0 1 1.67-.27Zm5.18 0a1.2 1.2 0 0 1 1.67.27l3.06 4.2a1.2 1.2 0 0 1-1.94 1.41l-3.06-4.2a1.2 1.2 0 0 1 .27-1.68ZM12 16.4c.66 0 1.2.54 1.2 1.2v5.2a1.2 1.2 0 0 1-2.4 0v-5.2c0-.66.54-1.2 1.2-1.2Z",fill:"currentColor"})),v.createElement("defs",null,v.createElement("clipPath",{id:"clip_loading"},v.createElement("rect",{width:24,height:24,fill:"currentColor"}))))}const Se=ie(ye,"loading"),ve={PREFIX:`${oe}-progress`},m={types:["line","circle"],DEFAULT_TYPE:"line",STROKE_DEFAULT:"var(--semi-color-success)",strokeLineCap:["square","round"],DEFAULT_LINECAP:"round",sizes:["default","small","large"],DEFAULT_SIZE:"default",directions:["vertical","horizontal"],DEFAULT_DIRECTION:"horizontal"};function ke(e,r,t){try{const n=xe(e,r,t);if(n.length!==0)return n}catch{return}}function xe(e,r,t){if(e.sort((s,i)=>s.percent-i.percent),e[0].percent>r)return m.STROKE_DEFAULT;const n=e[e.length-1];if(n.percenti.percent)continue;const a=e[s-1];return t?Ee({startColor:F(a.color),endColor:F(i.color),size:i.percent-a.percent-1},r-a.percent-1):F(a.color)}}function Ee(e,r){const{startColor:t,endColor:n,size:s}=e,i=t.split(""),a=n.split(""),c=[parseInt(`${i[1]}${i[2]}`,16),parseInt(`${a[1]}${a[2]}`,16)],h=[parseInt(`${i[3]}${i[4]}`,16),parseInt(`${a[3]}${a[4]}`,16)],d=[parseInt(`${i[5]}${i[6]}`,16),parseInt(`${a[5]}${a[6]}`,16)],p=[parseInt(`${i[7]}${i[8]}`,16),parseInt(`${a[7]}${a[8]}`,16)],u=(c[0]-c[1])/(s+1),D=(h[0]-h[1])/(s+1),O=(d[0]-d[1])/(s+1),R=(p[0]-p[1])/(s+1);function $(g){const k=Math.round(c[0]-u*(g+1)).toString(16),_=Math.round(h[0]-D*(g+1)).toString(16),G=Math.round(d[0]-O*(g+1)).toString(16),w=`${N(k)}${N(_)}${N(G)}`,b=Math.floor(R*(g+1)+p[1]).toString(16);return S.Hex(`#${w}`,b)}function N(g){return g.length===1?`0${g}`:g.length===0?"00":g}if(typeof r>"u"){const g=[t];for(let k=0;kt+t).join("")),`#${e}${r||"ff"}`)},SemiDesignToken(e){if(typeof window>"u")return;const r=getComputedStyle(document.body).getPropertyValue(`--semi-${e}`);if(r==="")return;const t=`rgba(${r}, 1)`;return S.RgbA(t)},HslA(e){const r=C.hslA.exec(e),t=parseInt(r[2]),n=parseInt(r[3])/100,s=parseInt(r[4])/100,i=r[5],a=(1-Math.abs(2*s-1))*n,c=a*(1-Math.abs(t/60%2-1)),h=s-a/2;let d=0,p=0,u=0;return 0<=t&&t<60?(d=a,p=c,u=0):60<=t&&t<120?(d=c,p=a,u=0):120<=t&&t<180?(d=0,p=a,u=c):180<=t&&t<240?(d=0,p=c,u=a):240<=t&&t<300?(d=c,p=0,u=a):300<=t&&t<360&&(d=a,p=0,u=c),d=Math.round((d+h)*255).toString(16),p=Math.round((p+h)*255).toString(16),u=Math.round((u+h)*255).toString(16),S.utils.pAL(d,p,u,i)},RgbA(e){const r=C.rgbA.exec(e),t=parseInt(r[2],10).toString(16),n=parseInt(r[3],10).toString(16),s=parseInt(r[4],10).toString(16),i=r[5];return S.utils.pAL(t,n,s,i)},utils:{pAL(e,r,t,n){return e.length==1&&(e="0"+e),r.length==1&&(r="0"+r),t.length==1&&(t="0"+t),typeof n<"u"?(n=Math.round(parseInt(n)*255).toString(16),n.length==1&&(n="0"+n),"#"+e+r+t+n):"#"+e+r+t}}},C={hex:/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,hslA:/(hsl)a?\(\s*?(\d+),?\s*?(\d+)%,?\s*?(\d+)%,?\s*?\/?(\s*?[\d.]+)?\s*?\)/,rgbA:/(rgb)a?\(\s*?(\d+),?\s*?(\d+),?\s*?(\d+),?\s*?\/?(\s*?[\d.]+)?\s*?\)/,semiDesignTokens:/(\w+)?-?(\w+)-?(\d)?/},V={ALONG:["black","white"],SEQUENCE:["amber","blue","cyan","green","grey","indigo","light-blue","light-green","lime","orange","pink","purple","red","teal","violet","yellow"]};var X=function(e,r){var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&r.indexOf(n)<0&&(t[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(e);s{if(this._mounted===!1)return;const n=parseInt(t.value);this.setState({percentNumber:n})}),this.animation.on("rest",()=>{this._mounted!==!1&&this.setState({percentNumber:this.props.percent})}),this.animation.start()}}componentWillUnmount(){this.animation&&this.animation.destroy(),this._mounted=!1}renderCircleProgress(){const r=this.props,{strokeLinecap:t,style:n,className:s,strokeWidth:i,format:a,size:c,stroke:h,strokeGradient:d,showInfo:p,percent:u,orbitStroke:D,id:O}=r,R=X(r,["strokeLinecap","style","className","strokeWidth","format","size","stroke","strokeGradient","showInfo","percent","orbitStroke","id"]),$=this.props["aria-label"],N=this.props["aria-labelledby"],g=this.props["aria-valuetext"],{percentNumber:k}=this.state,_={wrapper:A(`${y}-circle`,s),svg:A(`${y}-circle-ring`),circle:A(`${y}-circle-ring-inner`),track:A(`${y}-circle-ring-track`)},G=this.calcPercent(u),w=this.calcPercent(k);let b;this.props.width?b=this.props.width:c===m.DEFAULT_SIZE?b=72:b=24;const q=this.selectStroke(h,u,d),L=b/2,U=b/2,Z=(b-i)/2,W=Z*2*Math.PI,se=(1-G/100)*W,B=`${W} ${W}`,ae=a(w);return x.createElement("div",Object.assign({id:O,className:_.wrapper,style:n,role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":w,"aria-labelledby":N,"aria-label":$,"aria-valuetext":g},Y(R)),x.createElement("svg",{key:c,className:_.svg,height:b,width:b,"aria-hidden":!0},x.createElement("circle",{className:_.track,strokeDashoffset:0,strokeWidth:i,strokeDasharray:B,strokeLinecap:t,fill:"transparent",style:{stroke:D},r:Z,cx:U,cy:L,"aria-hidden":!0}),x.createElement("circle",{className:_.circle,strokeDashoffset:se,strokeWidth:i,strokeDasharray:B,strokeLinecap:t,fill:"transparent",style:{stroke:q},r:Z,cx:U,cy:L,"aria-hidden":!0})),p&&c!=="small"?x.createElement("span",{className:`${y}-circle-text`},ae):null)}calcPercent(r){let t;return r>100?t=100:r<0?t=0:t=r,t}selectStroke(r,t,n){if(typeof r=="string")return r;const s=ke(r,t,n);return typeof s<"u"?s:null}renderLineProgress(){const r=this.props,{className:t,style:n,stroke:s,strokeGradient:i,direction:a,format:c,showInfo:h,size:d,percent:p,orbitStroke:u,id:D}=r,O=X(r,["className","style","stroke","strokeGradient","direction","format","showInfo","size","percent","orbitStroke","id"]),R=this.props["aria-label"],$=this.props["aria-labelledby"],N=this.props["aria-valuetext"],{percentNumber:g}=this.state,k=A(y,t,{[`${y}-horizontal`]:a===m.DEFAULT_DIRECTION,[`${y}-vertical`]:a!==m.DEFAULT_DIRECTION,[`${y}-large`]:d==="large"}),_=A({[`${y}-track`]:!0}),G=A(`${y}-track-inner`),w=this.calcPercent(p),b=this.calcPercent(g),L={background:this.selectStroke(s,p,i)};a===m.DEFAULT_DIRECTION?L.width=`${w}%`:L.height=`${w}%`;const U=c(b);return x.createElement("div",Object.assign({id:D,className:k,style:n,role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":w,"aria-labelledby":$,"aria-label":R,"aria-valuetext":N},Y(O)),x.createElement("div",{className:_,style:u?{backgroundColor:u}:{},"aria-hidden":!0},x.createElement("div",{className:G,style:L,"aria-hidden":!0})),h?x.createElement("div",{className:`${y}-line-text`},U):null)}render(){const{type:r}=this.props;return r==="line"?this.renderLineProgress():this.renderCircleProgress()}}H.propTypes={"aria-label":l.string,"aria-labelledby":l.string,"aria-valuetext":l.string,className:l.string,direction:l.oneOf(m.directions),format:l.oneOfType([l.func,l.node]),id:l.string,motion:l.oneOfType([l.bool,l.func,l.object]),orbitStroke:l.string,percent:l.number,scale:l.number,showInfo:l.bool,size:l.oneOf(m.sizes),stroke:l.oneOfType([l.string,l.arrayOf(l.shape({percent:l.number,color:l.string}))]),strokeGradient:l.bool,strokeLinecap:l.oneOf(m.strokeLineCap),strokeWidth:l.number,style:l.object,type:l.oneOf(m.types),width:l.number};H.defaultProps={className:"",direction:m.DEFAULT_DIRECTION,format:e=>`${e}%`,motion:!0,percent:0,showInfo:!1,size:m.DEFAULT_SIZE,strokeGradient:!1,strokeLinecap:m.DEFAULT_LINECAP,strokeWidth:4,style:{},type:m.DEFAULT_TYPE};const Q=["validate","python","dependencies","service","ui"],_e={buildId:"",platform:"",projectDir:"",pythonPath:"",portState:"unknown",bridgeIdentity:null,recentLogs:[]},we={seq:-1,route:"loading",mode:"cold_start",phase:"idle",stage:null,stages:[],logs:[],failure:null,diagnostics:_e,overallPct:0};function Ie(e){return e.phase==="ready"?"ready":e.mode==="prepare"||e.phase==="preparing"?"progress":"loading"}function Te(e){if(e.mode!=="prepare"&&e.phase!=="preparing")return[];const r=e.stage?Q.indexOf(e.stage):-1;return Q.map((t,n)=>{let s="pending";return e.phase==="failed"&&t===e.stage?s="failed":e.phase==="ready"||r>n?s="done":r===n&&(s="running"),{key:t,state:s,pct:e.progress}})}function Ne(e,r){if(r.type!=="snapshot"||r.snapshot.seq<=e.seq)return e;const t=r.snapshot;return{seq:t.seq,route:Ie(t),mode:t.mode,phase:t.phase,stage:t.stage,stages:Te(t),logs:t.diagnostics.recentLogs,failure:t.failure,diagnostics:t.diagnostics,overallPct:t.progress}}let I=null,T=null,P=0,Ae=0;const $e={start:"validate",venv:"python",deps:"dependencies",done:"service",starting:"service"};function Le(e,r,t){const n=Number.isFinite(r)?Math.max(0,Math.min(100,r)):0;return{seq:e,mode:"prepare",phase:n>=100?"ready":"preparing",stage:$e[t]??"dependencies",progress:n,failure:null,diagnostics:{buildId:"",platform:navigator.platform||"",projectDir:"",pythonPath:"",portState:"unknown",bridgeIdentity:null,recentLogs:[]}}}function Ce(e,r){const t=window,n=t.__GA_LEGACY_PROGRESS__??[];t.__GA_LEGACY_PROGRESS__=n;const s=t.gaProgress,i=(c,h)=>{r===P&&e({type:"snapshot",snapshot:Le(++Ae,c,String(h||""))})},a=n.splice(0,n.length);return t.gaProgress=i,a.forEach(({pct:c,key:h})=>i(c,h)),()=>{t.gaProgress===i&&(s?t.gaProgress=s:delete t.gaProgress)}}function z(e,r){const t=r==="preparing";return{seq:e,mode:t?"prepare":"cold_start",phase:r,stage:t?"dependencies":r==="starting_service"?"service":null,progress:r==="ready"?100:t?55:15,failure:null,diagnostics:{buildId:"development",platform:navigator.platform||"web",projectDir:"",pythonPath:"",portState:"unknown",bridgeIdentity:null,recentLogs:t?["Installing runtime components…"]:[]}}}function Pe(e){const r=[setTimeout(()=>e({type:"snapshot",snapshot:z(1,"resolving")}),300),setTimeout(()=>e({type:"snapshot",snapshot:z(2,"preparing")}),900),setTimeout(()=>e({type:"snapshot",snapshot:z(3,"starting_service")}),1800),setTimeout(()=>e({type:"snapshot",snapshot:z(4,"ready")}),2600)];I=()=>r.forEach(clearTimeout)}async function je(e){var s,i;const r=++P;T==null||T(),T=Ce(e,r);const t=window.__TAURI__;if(!((s=t==null?void 0:t.core)!=null&&s.invoke)){Pe(e);return}let n;if((i=t.event)!=null&&i.listen)try{n=await t.event.listen("bootstrap",a=>{r===P&&e({type:"snapshot",snapshot:a.payload})})}catch(a){console.warn("[bootstrap] event subscription unavailable; using legacy progress updates",a)}if(r!==P){n==null||n();return}n&&(I==null||I(),I=n);try{const a=await t.core.invoke("get_bootstrap_snapshot");r===P&&e({type:"snapshot",snapshot:a})}catch(a){if(!le(a,"get_bootstrap_snapshot"))throw a}}function De(){P+=1,I&&(I(),I=null),T==null||T(),T=null}const f=(navigator.language||"").toLowerCase().startsWith("zh"),re={starting:f?"正在启动 GenericAgent":"Starting GenericAgent",resuming:f?"正在恢复 GenericAgent":"Resuming GenericAgent",preparing:f?"正在准备本地运行环境":"Preparing the local runtime",preparingDetail:f?"首次启动可能需要几分钟,完成后会自动打开主界面。":"The first launch may take a few minutes. The main window will open automatically.",stage_validate:f?"检查本地文件":"Checking local files",stage_python:f?"准备 Python 环境":"Preparing Python environment",stage_dependencies:f?"安装运行组件":"Installing runtime components",stage_service:f?"启动后台服务":"Starting background service",stage_ui:f?"打开主界面":"Opening the main window",ready:f?"准备完成":"Ready",readyDetail:f?"正在进入主界面…":"Opening the main window…",logTitle:f?"启动详情":"Startup details",stagesLabel:f?"启动阶段":"Startup stages"};function E(e){return re[e]}function Oe(e,r){return re[e]??r}function Re({mode:e}){return o.jsxs("section",{className:"ga-bootstrap-screen ga-bootstrap-loading","aria-live":"polite",children:[o.jsx(fe,{size:"large"}),o.jsx(j.Title,{heading:5,className:"ga-bootstrap-title",children:E(e==="hot_start"?"resuming":"starting")})]})}function Ge({state:e}){return e==="done"?o.jsx(te,{"aria-hidden":"true"}):e==="failed"?o.jsx(ce,{"aria-hidden":"true"}):e==="running"?o.jsx(Se,{spin:!0,"aria-hidden":"true"}):o.jsx("span",{className:"ga-bootstrap-stage-dot","aria-hidden":"true"})}function Fe({stages:e,overallPct:r,logs:t}){return o.jsxs("section",{className:"ga-bootstrap-screen ga-bootstrap-progress","aria-live":"polite",children:[o.jsx(j.Title,{heading:5,className:"ga-bootstrap-title",children:E("preparing")}),o.jsx(j.Paragraph,{type:"tertiary",className:"ga-bootstrap-description",children:E("preparingDetail")}),o.jsx(H,{"aria-label":E("preparing"),percent:Math.max(0,Math.min(100,r)),showInfo:!0,stroke:"var(--semi-color-primary)",className:"ga-bootstrap-progress-bar"}),o.jsx("ul",{className:"ga-bootstrap-stages","aria-label":E("stagesLabel"),children:e.map(n=>o.jsxs("li",{"data-state":n.state,children:[o.jsx(Ge,{state:n.state}),o.jsx(j.Text,{type:n.state==="pending"?"tertiary":void 0,children:Oe(`stage_${n.key}`,n.key)})]},n.key))}),t.length>0&&o.jsx(K,{className:"ga-bootstrap-log",accordion:!0,children:o.jsx(K.Panel,{itemKey:"startup-log",header:E("logTitle"),children:o.jsx("pre",{children:t.slice(-20).join(` +`)})})})]})}function Me(){return o.jsxs("section",{className:"ga-bootstrap-screen ga-bootstrap-ready","aria-live":"polite",children:[o.jsx(te,{size:"extra-large",className:"ga-bootstrap-ready-icon","aria-hidden":"true"}),o.jsx(j.Title,{heading:5,className:"ga-bootstrap-title",children:E("ready")}),o.jsx(j.Text,{type:"tertiary",children:E("readyDetail")})]})}function Ue(){const[e,r]=v.useReducer(Ne,we);v.useEffect(()=>(je(r).catch(n=>{console.error("[bootstrap] failed to subscribe to startup state",n)}),()=>De()),[]);let t;switch(e.route){case"loading":t=o.jsx(Re,{mode:e.mode});break;case"progress":t=o.jsx(Fe,{stages:e.stages,overallPct:e.overallPct,logs:e.logs});break;case"ready":t=o.jsx(Me,{});break}return o.jsxs("div",{className:"ga-bootstrap-shell",children:[pe&&o.jsx(be,{}),o.jsx("main",{className:"ga-bootstrap-app","data-route":e.route,children:t})]})}function ne(e){e.matches?(document.documentElement.dataset.appearance="dark",document.body.setAttribute("theme-mode","dark")):(document.documentElement.dataset.appearance="light",document.body.removeAttribute("theme-mode"))}const M=window.matchMedia("(prefers-color-scheme: dark)");ne(M);var ee;(ee=M.addEventListener)==null||ee.call(M,"change",()=>ne(M));const J=document.getElementById("loading-root");J&&de.createRoot(J).render(o.jsx(v.StrictMode,{children:o.jsx(ue,{locale:f?ge:he,children:o.jsx(Ue,{})})})); diff --git a/frontends/desktop/dist/assets/main-Knf6L_en.js b/frontends/desktop/dist/assets/main-Knf6L_en.js new file mode 100644 index 000000000..907286dc6 --- /dev/null +++ b/frontends/desktop/dist/assets/main-Knf6L_en.js @@ -0,0 +1,33 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MarkdownPart-Bhe_jloX.js","assets/tauri-compat-tfiFK9EG.js","assets/tauri-compat-BTcpEvqB.css","assets/markdown-preprocess-Bvg4n8KE.js","assets/markdown-preprocess-Cp579UoJ.css","assets/index-Bpi3BHKj.js","assets/index-D0pGtk0y.css","assets/WindowsTitlebar-CrkUa1UM.js","assets/WindowsTitlebar-U0YG9JNA.css","assets/MarkdownPart-Cp90Gu77.css","assets/SummaryPart-D48OOFSQ.js","assets/ServicesPage-DrjRw530.js","assets/index-DwVcZP0M.js","assets/index-D_sWIqse.js","assets/index-DkG9Cu-r.css","assets/index-gTPS8Hpa.css","assets/IconFile-CgfQSwGI.js","assets/ServicesPage-Cbm5nbW7.css","assets/TokenPage-C6-RA6yj.js","assets/Animation-TKQfYYOo.js","assets/index-DpGuh58E.js","assets/index-ClU1uQYs.css","assets/TokenPage-DwLDOw_j.css","assets/CollabPage-bnm43hIR.js","assets/CollabPage-CG38jm3S.css"])))=>i.map(i=>d[i]); +var _i=Object.defineProperty;var Mi=(n,e,t)=>e in n?_i(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var xt=(n,e,t)=>Mi(n,typeof e!="symbol"?e+"":e,t);import{g as We,r as Li,a as Ii,c as fe,b as a,d as $s,e as As,B as Te,_ as Be,f as ge,h as $,i as De,j as Ti,E as Ri,R as g,k as de,l as I,m as Ge,n as Fs,P as h,w as zs,o as jo,p as Je,q as rn,s as ln,t as No,u as Ni,v as Di,x as $i,y as Ai,z as Fi,A as zi,C as Bi,D as Ui,F as Vi,G as Ki,H as Bs,I as Wi,T as Do,J as sn,K as Hi,L as Zi,M as qi,N as Pt,O as Us,Q as Vs,S as Ks,U as Ws,V as Gi,W as Hs,X as Zs,Y as Eo,Z as Qi,$ as Yi,a0 as Xi,a1 as Ji,a2 as ea,a3 as ta,a4 as na,a5 as oa,a6 as ra,a7 as sa,a8 as ia,a9 as aa,aa as Go,ab as $e,ac as la,ad as ca,ae as Jt,af as da,ag as ua,ah as Oo,ai as me,aj as i,ak as pa,al as ha,am as ma,an as fa,ao as Qo,ap as dt,aq as ga,ar as ya,as as ba,at as va}from"./tauri-compat-tfiFK9EG.js";import{I as cn,a as qs,b as Gs,c as Qs,B as ie}from"./index-Bpi3BHKj.js";import{W as xa}from"./WindowsTitlebar-CrkUa1UM.js";const wa="modulepreload",Ca=function(n){return"/"+n},Yo={},Gt=function(e,t,o){let r=Promise.resolve();if(t&&t.length>0){let l=function(p){return Promise.all(p.map(d=>Promise.resolve(d).then(m=>({status:"fulfilled",value:m}),m=>({status:"rejected",reason:m}))))};document.getElementsByTagName("link");const c=document.querySelector("meta[property=csp-nonce]"),u=(c==null?void 0:c.nonce)||(c==null?void 0:c.getAttribute("nonce"));r=l(t.map(p=>{if(p=Ca(p),p in Yo)return;Yo[p]=!0;const d=p.endsWith(".css"),m=d?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${p}"]${m}`))return;const f=document.createElement("link");if(f.rel=d?"stylesheet":wa,d||(f.as="script"),f.crossOrigin="",f.href=p,u&&f.setAttribute("nonce",u),document.head.appendChild(f),d)return new Promise((b,y)=>{f.addEventListener("load",b),f.addEventListener("error",()=>y(new Error(`Unable to preload CSS for ${p}`)))})}))}function s(l){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=l,window.dispatchEvent(c),!c.defaultPrevented)throw l}return r.then(l=>{for(const c of l||[])c.status==="rejected"&&s(c.reason);return e().catch(s)})};function Xo(n,e){const t=e,o=new URL(t);if(o.protocol!=="http:"&&o.protocol!=="https:")throw new Error(`Service endpoint must use HTTP(S): ${t}`);return o.toString().replace(/\/+$/,"")}function Jo(n){const e=new URL(n);return e.protocol=e.protocol==="https:"?"wss:":"ws:",e.pathname=`${e.pathname.replace(/\/+$/,"")}/ws`,e.toString().replace(/\/$/,"")}function Sa(n){const e=Xo(n.VITE_BRIDGE_BASE,"http://127.0.0.1:14168"),t=Xo(n.VITE_CONDUCTOR_BASE,"http://127.0.0.1:8900");return{bridgeBase:e,conductorBase:t,wsUrl:Jo(e),conductorWsUrl:Jo(t)}}const dn=Sa({VITE_BRIDGE_BASE:void 0,VITE_CONDUCTOR_BASE:void 0}),ee=dn.bridgeBase,ka=dn.conductorBase,ja=dn.wsUrl,Ea=dn.conductorWsUrl,Oa=1e3,Pa=3e4;let ke=null,Po=0,kn=null;const jt=new Map;let _o="offline";const Mo=new Set;let er=!1;const _a=new Set;function jn(n){n!==_o&&(_o=n,n==="ready"&&(er||(er=!0,_a.forEach(e=>e()))),Mo.forEach(e=>e(n)))}function tr(){return _o}function Ys(n){return Mo.add(n),()=>{Mo.delete(n)}}function Xs(){if(!(ke&&(ke.readyState===WebSocket.OPEN||ke.readyState===WebSocket.CONNECTING))){jn("connecting");try{ke=new WebSocket(ja)}catch{nr();return}ke.onopen=()=>{Po=0,jn("ready")},ke.onmessage=n=>{try{const e=JSON.parse(n.data),t=e.type;if(!t)return;const o=jt.get(t);o&&o.forEach(r=>r(e))}catch{}},ke.onclose=()=>{ke=null,jn("connecting"),nr()},ke.onerror=()=>{ke==null||ke.close()}}}function nr(){if(kn)return;const n=Math.min(Oa*2**Po,Pa);Po++,kn=setTimeout(()=>{kn=null,Xs()},n)}function Ve(n,e){return jt.has(n)||jt.set(n,new Set),jt.get(n).add(e),Xs(),()=>{var t;(t=jt.get(n))==null||t.delete(e)}}let or=[];const Ma=new Set;let rr=!1;function La(){for(const n of Ma)n()}function En(n){or=[...or.slice(-39),n],La()}function Ia(){rr||(rr=!0,Ve("session-state",n=>{const e=n;if(!e.sessionId||!e.status)return;const t=e.status==="running"?"Turn started":e.status==="idle"?"Turn complete":e.status==="error"?"Turn error":`Session ${e.status}`;En(t)}),Ve("service.changed",n=>{const e=n;if(!e.service)return;const t=e.service.name??e.service.id??"service",o=e.service.status??"unknown";En(`${t}: ${o}`)}),Ve("token.changed",n=>{const e=n;!e.session_id||!e.total_output||En(`Token update: +${e.total_output} output`)}))}Ia();const Js=new Set(["http:","https:"]),Ta=new Set(["\\href","\\url"]),Ra=/^data:image\/(?:avif|gif|jpeg|png|webp);base64,[a-z0-9+/]+={0,2}$/i,Na=/^(?:\/|\.\/)?assets\//,Da=/%(?:2e|2f|5c)/i,ei=/[\u0000-\u001f\u007f]/;function $o(n){const e=n.trim();if(!/^https?:\/\//i.test(e)||ei.test(e))return null;try{const t=new URL(e);return Js.has(t.protocol)?t.href:null}catch{return null}}function $a(n){if(!Na.test(n)||n.startsWith("//")||n.includes("\\")||Da.test(n))return null;try{const e=new URL(n,"https://genericagent.invalid/");return e.origin==="https://genericagent.invalid"&&e.pathname.startsWith("/assets/")?n:null}catch{return null}}function Aa(n){const e=n.trim();if(!e||ei.test(e))return null;if(Ra.test(e))return e;if(/^blob:/i.test(e))try{return new URL(e).protocol==="blob:"?e:null}catch{return null}if(/^asset:/i.test(e))try{const t=new URL(e);return t.protocol==="asset:"&&(t.hostname===""||t.hostname==="localhost")&&!t.username&&!t.password?e:null}catch{return null}if(/^https?:\/\/asset\.localhost(?:\/|$)/i.test(e))try{const t=new URL(e);return t.hostname==="asset.localhost"&&Js.has(t.protocol)?t.href:null}catch{return null}return $a(e)}const Sm=(n,e,t)=>{if(e==="href")return $o(n)??void 0;if(e==="src"&&t.tagName==="img")return Aa(n)??void 0};function Fa(n){return!Ta.has(n.command)||!("url"in n)?!1:$o(n.url)!==null}const km={strict:"ignore",trust:Fa};function za(n,e){const t=n.target;if(!(t instanceof Element))return;const o=t.closest("[href]");if(!o)return;const r=$o(o.getAttribute("href")??"");if(!r){n.preventDefault();return}const s=new URL(r);if(!(!e||s.origin===location.origin)){n.preventDefault();try{Promise.resolve(e(r)).catch(l=>{console.error("[external-link] opener failed:",l)})}catch(l){console.error("[external-link] opener failed:",l)}}}var Ba=Li();const Lo=We(Ba);var Ua=Ii();const jm=We(Ua);function Va(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.7 2.8a1 1 0 0 1 0 1.4l-3 3a1 1 0 0 1-1.4 0L1.8 5.7a1 1 0 0 1 1.4-1.4l.8.79 2.3-2.3a1 1 0 0 1 1.4 0Z",fill:"currentColor"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.7 9.8a1 1 0 0 1 0 1.4l-3 3a1 1 0 0 1-1.4 0l-1.5-1.5a1 1 0 1 1 1.4-1.4l.8.79 2.3-2.3a1 1 0 0 1 1.4 0Z",fill:"currentColor"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.7 16.8a1 1 0 0 1 0 1.4l-3 3a1 1 0 0 1-1.4 0l-1.5-1.5a1 1 0 1 1 1.4-1.4l.8.79 2.3-2.3a1 1 0 0 1 1.4 0Z",fill:"currentColor"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.5 12a1 1 0 0 1 1-1h11a1 1 0 1 1 0 2h-11a1 1 0 0 1-1-1Z",fill:"currentColor"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.5 19a1 1 0 0 1 1-1h11a1 1 0 1 1 0 2h-11a1 1 0 0 1-1-1Z",fill:"currentColor"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.5 5a1 1 0 0 1 1-1h11a1 1 0 1 1 0 2h-11a1 1 0 0 1-1-1Z",fill:"currentColor"}))}const Ka=fe(Va,"checklist_stroked");function Wa(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm5.04-6.14a1.5 1.5 0 0 1-2.13.04l-2.87-2.78L9.26 17A1.5 1.5 0 0 1 7.1 14.9l2.78-2.87L7 9.26A1.5 1.5 0 1 1 9.1 7.1l2.87 2.78L14.74 7A1.5 1.5 0 0 1 16.9 9.1l-2.78 2.87L17 14.74c.6.58.61 1.53.04 2.12Z",fill:"currentColor"}))}const Ha=fe(Wa,"clear");function Za(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M21 2a1 1 0 0 1 1 1v6a1 1 0 1 1-2 0V5.41l-9.3 9.3a1 1 0 0 1-1.4-1.42L18.58 4H15a1 1 0 1 1 0-2h6ZM2 5a1 1 0 0 1 1-1h8a1 1 0 1 1 0 2H4v14h14v-7a1 1 0 1 1 2 0v8a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5Z",fill:"currentColor"}))}const qa=fe(Za,"external_open_stroked");function Ga(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M21.7 3.7a1 1 0 0 0-1.4-1.4L17.3 5.26A11.59 11.59 0 0 0 12 4C5 4 1 10 1 12c0 1.18 1.38 3.73 3.94 5.64L2.3 20.3a1 1 0 1 0 1.42 1.42l18-18ZM7.84 14.77l1.46-1.47a3 3 0 0 1 4-4l1.47-1.46a5 5 0 0 0-6.93 6.93Z",fill:"currentColor"}),a.createElement("path",{d:"M12 20c-1.22 0-2.35-.18-3.38-.5l2.57-2.57a5 5 0 0 0 5.75-5.75l3.56-3.56C22.13 9.27 23 11.07 23 12c0 2-4 8-11 8Z",fill:"currentColor"}))}const Qa=fe(Ga,"eye_closed_solid");function Ya(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 4C5 4 1 10 1 12s4 8 11 8 11-6 11-8-4-8-11-8Zm5 8a5 5 0 1 1-10 0 5 5 0 0 1 10 0Zm-5 3a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z",fill:"currentColor"}))}const Xa=fe(Ya,"eye_opened");function Ja(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{d:"M8 1c2.5 0 3.19.3 4.15.68L13 2c1.5.5 3 1 5 1 .89 0 1.78-.2 2.5-.42.7-.22 1.5.3 1.5 1.04v10.76c0 .38-.21.73-.56.87l-.3.12c-.78.28-1.96.63-3.14.63-2 0-3.5-.5-5-1-.31-.1-.58-.2-.84-.3-.98-.39-1.79-.7-4.16-.7-1.27 0-3.27.3-4 .5V21a1 1 0 0 1-.84.99h-.04a1 1 0 0 1-.24 0h-.04A1 1 0 0 1 2 21V3.58c0-.36.2-.69.51-.85C3.57 2.18 6.08 1 8 1Zm0 2c-.61 0-1.46.2-2.38.54-.6.22-1.17.47-1.62.68v8.37l.46-.13C5.36 12.21 6.54 12 8 12c1.27 0 2.2.08 3 .24.8.17 1.39.4 1.88.59l.75.27c1.5.5 2.73.9 4.37.9.68 0 1.4-.17 2-.36V4.78c-.61.13-1.3.22-2 .22-2.36 0-4.13-.6-5.63-1.1l-.95-.35c-.5-.2-.76-.3-1.17-.39a8.82 8.82 0 0 0-1.46-.15L8 3Z",fill:"currentColor"}))}const el=fe(Ja,"flag_stroked");function tl(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{d:"M9 7a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z",fill:"currentColor"}),a.createElement("path",{d:"M9 14a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z",fill:"currentColor"}),a.createElement("path",{d:"M11 19a2 2 0 1 1-4 0 2 2 0 0 1 4 0Z",fill:"currentColor"}),a.createElement("path",{d:"M15 7a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z",fill:"currentColor"}),a.createElement("path",{d:"M17 12a2 2 0 1 1-4 0 2 2 0 0 1 4 0Z",fill:"currentColor"}),a.createElement("path",{d:"M15 21a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z",fill:"currentColor"}))}const nl=fe(tl,"handle");function ol(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm-.17-8.4c-.86 0-1.3-.53-1.3-1.23 0-1.05.53-1.72 1.74-2.64l.06-.05c.83-.62 1.4-1.06 1.4-1.85 0-.9-.83-1.4-1.76-1.4-.76 0-1.34.28-1.8.87-.33.34-.6.53-1.05.53C8.38 8.83 8 8.3 8 7.7c0-.6.34-1.22.88-1.68A5.15 5.15 0 0 1 12.28 5c2.71 0 4.62 1.34 4.62 3.64 0 1.68-1 2.5-2.2 3.31-.8.59-1.17.93-1.48 1.62-.33.6-.58 1.04-1.4 1.04Zm-.02 4.17c-.94 0-1.71-.6-1.71-1.54 0-.94.77-1.55 1.7-1.55.95 0 1.7.6 1.7 1.55 0 .93-.75 1.54-1.7 1.54Z",fill:"currentColor"}))}const rl=fe(ol,"help_circle");function sl(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.22 4.22a10.97 10.97 0 0 1 15.56 0l-.7.7.7-.7a10.97 10.97 0 0 1 0 15.56 10.97 10.97 0 0 1-15.56 0l.7-.7-.7.7a10.97 10.97 0 0 1 0-15.56ZM12 3a8.97 8.97 0 0 0-9 9 8.97 8.97 0 0 0 9 9 8.97 8.97 0 0 0 9-9 8.97 8.97 0 0 0-9-9Z",fill:"currentColor"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8 9.31a4 4 0 1 1 5 3.88v1.12a1 1 0 1 1-2 0v-2a1 1 0 0 1 1-1 2 2 0 1 0-2-2 1 1 0 0 1-2 0Z",fill:"currentColor"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 18.81a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Z",fill:"currentColor"}))}const il=fe(sl,"help_circle_stroked");function al(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M10.1 10.58c.06 0 .1.05.1.12l-1.1 6.36 7.02-7.11h-3.07a.1.1 0 0 1-.1-.15l3.5-6.8H9.71l-3.5 7.58h3.88ZM8.3 1.29A.5.5 0 0 1 8.76 1H18.9c.37 0 .61.4.44.73l-3.18 6.22h3.55a.5.5 0 0 1 .36.85L7.18 21.87a.5.5 0 0 1-.85-.44l1.51-8.85H3.88a.5.5 0 0 1-.46-.71L8.3 1.29Z",fill:"currentColor"}))}const ll=fe(al,"lightning_stroked");function cl(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("circle",{cx:12,cy:12,r:5,fill:"currentColor"}))}const dl=fe(cl,"radio");function ul(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 12a7.5 7.5 0 0 1 13.8-4.07l-2-.4a1.5 1.5 0 0 0-.6 2.94l5 1c.76.15 1.51-.3 1.74-1.04l1.5-5a1.5 1.5 0 1 0-2.88-.86l-.43 1.45A10.49 10.49 0 0 0 1.5 12a10.5 10.5 0 0 0 20.4 3.5 1.5 1.5 0 1 0-2.83-1A7.5 7.5 0 0 1 4.5 12Z",fill:"currentColor"}))}const pl=fe(ul,"refresh");function hl(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M16 10a6 6 0 1 1-12 0 6 6 0 0 1 12 0Zm-1.1 6.32a8 8 0 1 1 1.41-1.41l5.4 5.38a1 1 0 0 1-1.42 1.42l-5.38-5.39Z",fill:"currentColor"}))}const ti=fe(hl,"search_stroked");function ml(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 5.5a3.5 3.5 0 1 1 1 2.45l-5.13 3.11a3.5 3.5 0 0 1 .03 1.79l5.22 3.08A3.49 3.49 0 0 1 21 18.5a3.5 3.5 0 1 1-6.9-.85l-5.22-3.08A3.49 3.49 0 0 1 3 12a3.5 3.5 0 0 1 5.8-2.63l5.27-3.19A3.51 3.51 0 0 1 14 5.5ZM17.5 4a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3Zm-11 6.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3Zm9.5 8a1.5 1.5 0 1 1 3 0 1.5 1.5 0 0 1-3 0Z",fill:"currentColor"}))}const fl=fe(ml,"share_stroked");function gl(n){return a.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{d:"m3 4.13 9-1.63 9 1.63v5.39c0 5.66-3.62 10.69-9 12.48-5.37-1.8-9-6.82-9-12.49V4.13Z",stroke:"currentColor",strokeWidth:2,strokeLinejoin:"round"}),a.createElement("path",{d:"M11.97 7.47v8",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),a.createElement("path",{d:"M7.97 11.47h8",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}))}const yl=fe(gl,"shield_stroked");var On,sr;function ni(){if(sr)return On;sr=1;var n=$s(),e=As(),t="[object Number]";function o(r){return typeof r=="number"||e(r)&&n(r)==t}return On=o,On}var bl=ni();const Io=We(bl),oi={PREFIX:`${Te}-input`},Qt={SIZE:["small","large","default"],DEFAULT_SIZE:"default",STATUS:["default","error","warning","success"],CLEARBTN_CLICKED_EVENT_FLAG:"__fromClearBtn",MODE:["password"]},vl={};function xl(n){const{value:e,maxLength:t,getValueLength:o}=n;if(Be(o)){let r=0,s=e.length;for(;rt?s=l:r=l+1}return e.slice(0,r)}else return e.slice(0,t)}class Ao extends ge{static get inputDefaultAdapter(){return{notifyChange:$,setValue:$}}constructor(e){super(Object.assign(Object.assign({},Ao.inputDefaultAdapter),e)),this.compositionEnter=!1,this.getNextValue=t=>{const{maxLength:o,minLength:r,getValueLength:s}=this._adapter.getProps();return Be(s)?o?this.handleVisibleMaxLength(t):(r&&this.handleVisibleMinLength(t),t):t},this.changeInput=(t,o)=>{this._isControlledComponent()?this._adapter.notifyChange(t,o):(this._adapter.setValue(t),this._adapter.notifyChange(t,o))},this.handleCompositionStart=t=>{this.compositionEnter=!0,this._adapter.notifyCompositionStart(t)},this.handleCompositionEnd=t=>{const{composition:o}=this._adapter.getProps(),r=t.target.value;if(this.compositionEnter=!1,this._adapter.notifyCompositionEnd(t),o){const u=this.getNextValue(r);this.changeInput(u,t);return}const{getValueLength:s,maxLength:l,minLength:c}=this.getProps();if(Be(s)){if(l){const u=this.handleVisibleMaxLength(r);u!==r&&this.changeInput(u,t)}c&&this.handleVisibleMinLength(r)}},this.handleCompositionUpdate=t=>{this._adapter.notifyCompositionUpdate(t)}}destroy(){this._timer&&(clearTimeout(this._timer),this._timer=null)}setDisable(){}setValue(e){this._adapter.setValue(e)}handleChange(e,t){const{composition:o}=this._adapter.getProps();let r=e;if(o&&this.compositionEnter){this._adapter.setValue(r);return}this.compositionEnter||(r=this.getNextValue(r)),this.changeInput(r,t)}handleVisibleMinLength(e){const{minLength:t,getValueLength:o}=this._adapter.getProps(),{minLength:r}=this._adapter.getStates();if(Io(t)&&t>=0&&Be(o)&&De(e)){const s=o(e);if(s=0&&Be(o)&&De(e)&&o(e)>t?(console.warn("[Semi Input] The input character is truncated because the input length exceeds the maximum length limit"),this.handleTruncateValue(e,t)):e}handleTruncateValue(e,t){const{getValueLength:o}=this._adapter.getProps();return xl({value:e,maxLength:t,getValueLength:o})}handleClear(e){let t=e;const o="";this._isControlledComponent("value")?this._adapter.setState({isFocus:!1}):this._adapter.setState({value:"",isFocus:!1}),(!t||typeof t!="object")&&(t={}),Ti(t,Qt.CLEARBTN_CLICKED_EVENT_FLAG,!0),this._adapter.notifyChange(o,t),this._adapter.notifyClear(t),t&&this.stopPropagation(t)}handleClick(e){const{disabled:t}=this._adapter.getProps(),{isFocus:o}=this._adapter.getStates();t||o||this._adapter.isEventTarget(e)&&(this._adapter.focusInput(),this._adapter.toggleFocusing(!0))}handleModeChange(e){e==="password"?this._adapter.setEyeClosed(!0):this._adapter.setEyeClosed(!1)}handleClickEye(e){const t=this._adapter.getState("eyeClosed");this._adapter.focusInput(),this._adapter.toggleFocusing(!0),this._adapter.setEyeClosed(!t)}handleInputType(e){const t=this._adapter.getProp("mode"),o=this._adapter.getState("eyeClosed");return t==="password"?o?"password":"text":e}handleMouseDown(e){e.preventDefault()}handleMouseUp(e){e.preventDefault()}handleBlur(e){const{value:t}=this.getStates();this._adapter.toggleFocusing(!1),this._adapter.notifyBlur(t,e)}handleFocus(e){const{value:t}=this.getStates();this._adapter.toggleFocusing(!0),this._adapter.notifyFocus(t,e)}handleInput(e){this._adapter.notifyInput(e)}handleKeyDown(e){this._adapter.notifyKeyDown(e)}handleKeyUp(e){this._adapter.notifyKeyUp(e)}handleKeyPress(e){this._adapter.notifyKeyPress(e),e.key===Ri&&this._adapter.notifyEnterPress(e)}isAllowClear(){const{value:e,isFocus:t,isHovering:o}=this._adapter.getStates(),{showClear:r,disabled:s,showClearIgnoreDisabled:l}=this._adapter.getProps();return e&&r&&(!s||l)&&(t||o)}handleClickPrefixOrSuffix(e){const{disabled:t}=this._adapter.getProps(),{isFocus:o}=this._adapter.getStates();!t&&!o&&(this._adapter.focusInput(),this._adapter.toggleFocusing(!0))}handlePreventMouseDown(e){e&&Be(e.preventDefault)&&e.preventDefault()}handleModeEnterPress(e){["Enter"," "].includes(e==null?void 0:e.key)&&(this.handlePreventMouseDown(e),this.handleClickEye(e))}}var wl=function(n,e){var t={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&e.indexOf(o)<0&&(t[o]=n[o]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(n);r{this.foundation.handleClear(o)},this.handleClick=o=>{this.foundation.handleClick(o)},this.handleMouseOver=o=>{this.setState({isHovering:!0})},this.handleMouseLeave=o=>{this.setState({isHovering:!1})},this.handleModeChange=o=>{this.foundation.handleModeChange(o)},this.handleClickEye=o=>{this.foundation.handleClickEye(o)},this.handleMouseDown=o=>{this.foundation.handleMouseDown(o)},this.handleMouseUp=o=>{this.foundation.handleMouseUp(o)},this.handleModeEnterPress=o=>{this.foundation.handleModeEnterPress(o)},this.handleClickPrefixOrSuffix=o=>{this.foundation.handleClickPrefixOrSuffix(o)},this.handlePreventMouseDown=o=>{this.foundation.handlePreventMouseDown(o)};const t="value"in e?e.value:e.defaultValue;this.state={value:t,cachedValue:e.value,disabled:!1,props:{},isFocus:!1,isHovering:!1,eyeClosed:e.mode==="password",minLength:e.minLength},this.inputRef=g.createRef(),this.prefixRef=g.createRef(),this.suffixRef=g.createRef(),this.foundation=new Ao(this.adapter)}get adapter(){return Object.assign(Object.assign({},super.adapter),{setValue:e=>this.setState({value:e}),setEyeClosed:e=>this.setState({eyeClosed:e}),toggleFocusing:e=>{this.setState({isFocus:e})},focusInput:()=>{const{preventScroll:e}=this.props,t=this.inputRef&&this.inputRef.current;t&&t.focus({preventScroll:e})},toggleHovering:e=>this.setState({isHovering:e}),getIfFocusing:()=>this.state.isFocus,notifyChange:(e,t)=>this.props.onChange(e,t),notifyBlur:(e,t)=>this.props.onBlur(t),notifyFocus:(e,t)=>this.props.onFocus(t),notifyInput:e=>this.props.onInput(e),notifyKeyPress:e=>this.props.onKeyPress(e),notifyKeyDown:e=>this.props.onKeyDown(e),notifyKeyUp:e=>this.props.onKeyUp(e),notifyEnterPress:e=>this.props.onEnterPress(e),notifyClear:e=>this.props.onClear(e),notifyCompositionStart:e=>this.props.onCompositionStart(e),notifyCompositionEnd:e=>this.props.onCompositionEnd(e),notifyCompositionUpdate:e=>this.props.onCompositionUpdate(e),setMinLength:e=>this.setState({minLength:e}),isEventTarget:e=>e&&e.target===e.currentTarget})}static getDerivedStateFromProps(e,t){const o={};return e.value!==t.cachedValue&&(o.value=e.value,o.cachedValue=e.value),o}componentDidUpdate(e){const{mode:t}=this.props;e.mode!==t&&this.handleModeChange(t)}componentDidMount(){const{disabled:e,autoFocus:t,preventScroll:o}=this.props;!e&&(t||this.props.autofocus)&&this.inputRef.current.focus({preventScroll:o})}renderPrepend(){const{addonBefore:e}=this.props;if(e){const t=I({[`${U}-prepend`]:!0,[`${U}-prepend-text`]:e&&De(e),[`${U}-prepend-icon`]:Ge(e)});return g.createElement("div",{className:t,"x-semi-prop":"addonBefore"},e)}return null}renderAppend(){const{addonAfter:e}=this.props;if(e){const t=I({[`${U}-append`]:!0,[`${U}-append-text`]:e&&De(e),[`${U}-append-icon`]:Ge(e)});return g.createElement("div",{className:t,"x-semi-prop":"addonAfter"},e)}return null}renderClearBtn(){const e=I(`${U}-clearbtn`),{clearIcon:t}=this.props;return this.foundation.isAllowClear()?g.createElement("div",{className:e,onMouseDown:this.handleClear},t||g.createElement(Ha,null)):null}renderModeBtn(){const{eyeClosed:e}=this.state,{mode:t,disabled:o}=this.props,r=I(`${U}-modebtn`),s=e?g.createElement(Qa,null):g.createElement(Xa,null),l=t==="password"&&!o,c=e?"Show password":"Hidden password";return l?g.createElement("div",{role:"button",tabIndex:0,"aria-label":c,className:r,onClick:this.handleClickEye,onMouseDown:this.handleMouseDown,onMouseUp:this.handleMouseUp,onKeyPress:this.handleModeEnterPress},s):null}renderPrefix(){const{prefix:e,insetLabel:t,insetLabelId:o}=this.props,r=e||t;if(!r)return null;const s=I({[`${U}-prefix`]:!0,[`${U}-inset-label`]:t,[`${U}-prefix-text`]:r&&De(r),[`${U}-prefix-icon`]:Ge(r)});return g.createElement("div",{className:s,onMouseDown:this.handlePreventMouseDown,onClick:this.handleClickPrefixOrSuffix,id:o,"x-semi-prop":"prefix,insetLabel"},r)}renderSuffix(e){const{suffix:t,hideSuffix:o}=this.props;if(!t)return null;const r=I({[`${U}-suffix`]:!0,[`${U}-suffix-text`]:t&&De(t),[`${U}-suffix-icon`]:Ge(t),[`${U}-suffix-hidden`]:e&&!!o});return g.createElement("div",{className:r,onMouseDown:this.handlePreventMouseDown,onClick:this.handleClickPrefixOrSuffix,"x-semi-prop":"suffix"},t)}getInputRef(){const{forwardRef:e}=this.props;if(!Fs(e)){if(typeof e=="function")return t=>{e(t),this.inputRef={current:t}};if(Object.prototype.toString.call(e)==="[object Object]")return this.inputRef=e,e}return this.inputRef}render(){const e=this.props,{addonAfter:t,addonBefore:o,autoFocus:r,clearIcon:s,className:l,disabled:c,defaultValue:u,placeholder:p,prefix:d,mode:m,insetLabel:f,insetLabelId:b,validateStatus:y,type:S,readonly:w,size:C,suffix:k,style:_,showClear:x,onEnterPress:j,onClear:v,hideSuffix:O,inputStyle:E,forwardRef:D,maxLength:P,getValueLength:R,preventScroll:L,borderless:z,showClearIgnoreDisabled:W,onlyBorder:A,composition:M}=e,Z=wl(e,["addonAfter","addonBefore","autoFocus","clearIcon","className","disabled","defaultValue","placeholder","prefix","mode","insetLabel","insetLabelId","validateStatus","type","readonly","size","suffix","style","showClear","onEnterPress","onClear","hideSuffix","inputStyle","forwardRef","maxLength","getValueLength","preventScroll","borderless","showClearIgnoreDisabled","onlyBorder","composition"]),{value:ue,isFocus:we,minLength:T}=this.state,F=this.foundation.isAllowClear(),Q=Ge(k),se=this.getInputRef(),te=`${U}-wrapper`,Ce=I(te,l,{[`${U}-wrapper__with-prefix`]:d||f,[`${U}-wrapper__with-suffix`]:k,[`${U}-wrapper__with-suffix-hidden`]:F&&!!O,[`${U}-wrapper__with-suffix-icon`]:Q,[`${U}-wrapper__with-append`]:o,[`${U}-wrapper__with-prepend`]:t,[`${U}-wrapper__with-append-only`]:o&&!t,[`${U}-wrapper__with-prepend-only`]:!o&&t,[`${te}-readonly`]:w,[`${te}-disabled`]:c,[`${te}-warning`]:y==="warning",[`${te}-error`]:y==="error",[`${te}-focus`]:we,[`${te}-clearable`]:x,[`${te}-modebtn`]:m==="password",[`${te}-hidden`]:S==="hidden",[`${te}-${C}`]:C,[`${U}-borderless`]:z,[`${U}-only_border`]:A!=null}),pe=I(U,{[`${U}-${C}`]:C,[`${U}-disabled`]:c,[`${U}-sibling-clearbtn`]:this.foundation.isAllowClear(),[`${U}-sibling-modebtn`]:m==="password"}),vt=ue??"",nt=Object.assign(Object.assign({},Z),{style:E,className:pe,disabled:c,readOnly:w,type:this.foundation.handleInputType(S),placeholder:p,onInput:B=>this.foundation.handleInput(B),onChange:B=>this.foundation.handleChange(B.target.value,B),onFocus:B=>this.foundation.handleFocus(B),onBlur:B=>this.foundation.handleBlur(B),onKeyUp:B=>this.foundation.handleKeyUp(B),onKeyDown:B=>this.foundation.handleKeyDown(B),onKeyPress:B=>this.foundation.handleKeyPress(B),onCompositionStart:this.foundation.handleCompositionStart,onCompositionEnd:this.foundation.handleCompositionEnd,onCompositionUpdate:this.foundation.handleCompositionUpdate,value:vt});Be(R)||(nt.maxLength=P),T&&(nt.minLength=T),y==="error"&&(nt["aria-invalid"]="true");let N=Object.assign({},_);return A!==void 0&&(N=Object.assign({borderWidth:A},_)),g.createElement("div",{className:Ce,style:N,onMouseEnter:B=>this.handleMouseOver(B),onMouseLeave:B=>this.handleMouseLeave(B),onClick:B=>this.handleClick(B)},this.renderPrepend(),this.renderPrefix(),g.createElement("input",Object.assign({},nt,{ref:se})),this.renderClearBtn(),this.renderSuffix(F),this.renderModeBtn(),this.renderAppend())}}Fo.propTypes={"aria-label":h.string,"aria-labelledby":h.string,"aria-invalid":h.bool,"aria-errormessage":h.string,"aria-describedby":h.string,"aria-required":h.bool,addonBefore:h.node,addonAfter:h.node,clearIcon:h.node,prefix:h.node,suffix:h.node,mode:h.oneOf(kl),value:h.any,defaultValue:h.any,disabled:h.bool,readonly:h.bool,autoFocus:h.bool,type:h.string,showClear:h.bool,hideSuffix:h.bool,placeholder:h.any,size:h.oneOf(Cl),className:h.string,style:h.object,validateStatus:h.oneOf(Sl),onClear:h.func,onChange:h.func,onBlur:h.func,onFocus:h.func,onInput:h.func,onKeyDown:h.func,onKeyUp:h.func,onKeyPress:h.func,onEnterPress:h.func,onCompositionStart:h.func,onCompositionEnd:h.func,onCompositionUpdate:h.func,insetLabel:h.node,insetLabelId:h.string,inputStyle:h.object,getValueLength:h.func,preventScroll:h.bool,borderless:h.bool,composition:h.bool};Fo.defaultProps={addonBefore:"",addonAfter:"",prefix:"",suffix:"",readonly:!1,type:"text",showClear:!1,hideSuffix:!1,placeholder:"",size:"default",className:"",onClear:$,onChange:$,onBlur:$,onFocus:$,onInput:$,onKeyDown:$,onKeyUp:$,onKeyPress:$,onEnterPress:$,onCompositionStart:$,onCompositionEnd:$,onCompositionUpdate:$,validateStatus:"default",borderless:!1,composition:!1};const ut=g.forwardRef((n,e)=>g.createElement(Fo,Object.assign({},n,{forwardRef:e}))),jl={PREFIX:`${Te}-avatar`},un={SHAPE:["circle","square"],SIZE:["extra-extra-small","extra-small","small","default","medium","large","extra-large"],COLOR:["grey","red","pink","purple","violet","indigo","blue","light-blue","cyan","teal","green","light-green","lime","yellow","amber","orange","white"]};class El extends ge{constructor(e){super(Object.assign({},e)),this.handleFocusVisible=t=>{const{target:o}=t;try{o.matches(":focus-visible")&&this._adapter.setFocusVisible(!0)}catch{zs(!0,"Warning: [Semi Avatar] The current browser does not support the focus-visible")}},this.handleBlur=()=>{this._adapter.setFocusVisible(!1)},this.changeScale=()=>{const{gap:t}=this.getProps(),o=this._adapter.getAvatarNode(),r=o==null?void 0:o.firstChild,[s,l]=[(o==null?void 0:o.offsetWidth)||0,(r==null?void 0:r.offsetWidth)||0];if(s!==0&&l!==0&&t*2l?1:(s-t*2)/l;this._adapter.setScale(c)}}}init(){const{children:e}=this.getProps();typeof e=="string"&&this.changeScale()}destroy(){}handleImgLoadError(){const{onError:e}=this.getProps();(e?e():void 0)!==!1&&this._adapter.notifyImgState(!1)}handleEnter(e){this._adapter.notifyEnter(e)}handleLeave(e){this._adapter.notifyLeave(e)}}const Ol=n=>{let{gradientStart:e,gradientEnd:t}=n;const o=jo();return g.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"51",height:"52",viewBox:"0 0 51 52",fill:"none"},g.createElement("g",{filter:"url(#filter0_d_6_2)"},g.createElement("path",{d:"M40.4918 46.5592C44.6795 43.176 46.261 34.1333 47.5301 25.6141C49.5854 11.8168 39.6662 1 25.8097 1C11.2857 1 3 11.4279 3 25.3518C3 33.7866 6.29361 43.8947 10.4602 46.5592C12.5868 47.9192 12.5868 47.9051 25.8097 47.9192C38.3651 47.9282 38.5352 48.14 40.4918 46.5592Z",fill:`url(#${o})`})),g.createElement("defs",null,g.createElement("filter",{id:"filter0_d_6_2",x:"0.789215",y:"0.447304",width:"49.2216",height:"51.3549",filterUnits:"userSpaceOnUse",colorInterpolationFilters:"sRGB"},g.createElement("feFlood",{floodOpacity:"0",result:"BackgroundImageFix"}),g.createElement("feColorMatrix",{in:"SourceAlpha",type:"matrix",values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",result:"hardAlpha"}),g.createElement("feOffset",{dy:"1.65809"}),g.createElement("feGaussianBlur",{stdDeviation:"1.10539"}),g.createElement("feColorMatrix",{type:"matrix",values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"}),g.createElement("feBlend",{mode:"normal",in2:"BackgroundImageFix",result:"effect1_dropShadow_6_2"}),g.createElement("feBlend",{mode:"normal",in:"SourceGraphic",in2:"effect1_dropShadow_6_2",result:"shape"})),g.createElement("linearGradient",{id:o,x1:"17.671",y1:"31.7392",x2:"17.671",y2:"47.9333",gradientUnits:"userSpaceOnUse"},g.createElement("stop",{stopColor:e}),g.createElement("stop",{offset:"1",stopColor:t}))))};var Pl=function(n,e){var t={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&e.indexOf(o)<0&&(t[o]=n[o]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(n);r{this.foundation.handleFocusVisible(t)},this.handleBlur=t=>{this.foundation.handleBlur()},this.getContent=()=>{const{children:t,onClick:o,imgAttr:r,src:s,srcSet:l,alt:c}=this.props,{isImgExist:u}=this.state;let p=t;const d=o!==rn,m=s&&u,f={tabIndex:0,onKeyDown:this.handleKeyDown,onFocus:this.handleFocusVisible,onBlur:this.handleBlur};if(m){const b=d?`clickable Avatar: ${c}`:c,y=Object.assign(Object.assign({src:s,srcSet:l,onError:this.handleError},r),{className:I({[`${V}-no-focus-visible`]:d})}),S=d?Object.assign(Object.assign({},y),f):y;p=g.createElement("img",Object.assign({alt:b},S))}else if(typeof t=="string"){const b=c??t,S={role:"img","aria-label":d?`clickable Avatar: ${b}`:b,className:I(`${V}-label`,{[`${V}-no-focus-visible`]:d})},w=d?Object.assign(Object.assign({},S),f):S,C={transform:`scale(${this.state.scale})`};p=g.createElement("span",{className:`${V}-content`,style:C},g.createElement("span",Object.assign({},w,{"x-semi-prop":"children"}),t))}return p},this.renderBottomSlot=()=>{var t,o;if(!this.props.bottomSlot)return null;if(this.props.bottomSlot.render)return this.props.bottomSlot.render();const r=(t=this.props.bottomSlot.render)!==null&&t!==void 0?t:()=>{var s;const l={};return this.props.bottomSlot.bgColor&&(l.backgroundColor=this.props.bottomSlot.bgColor),this.props.bottomSlot.textColor&&(l.color=this.props.bottomSlot.textColor),g.createElement("span",{style:l,className:I(`${V}-bottom_slot-shape_${this.props.bottomSlot.shape}`,`${V}-bottom_slot-shape_${this.props.bottomSlot.shape}-${this.props.size}`,(s=this.props.bottomSlot.className)!==null&&s!==void 0?s:"")},this.props.bottomSlot.text)};return g.createElement("div",{className:I([`${V}-bottom_slot`]),style:(o=this.props.bottomSlot.style)!==null&&o!==void 0?o:{}},r())},this.renderTopSlot=()=>{var t,o,r,s;if(!this.props.topSlot)return null;if(this.props.topSlot.render)return this.props.topSlot.render();const l={};return this.props.topSlot.textColor&&(l.color=this.props.topSlot.textColor),g.createElement("div",{style:(t=this.props.topSlot.style)!==null&&t!==void 0?t:{},className:I([`${V}-top_slot-wrapper`,(o=this.props.topSlot.className)!==null&&o!==void 0?o:"",{[`${V}-animated`]:this.props.contentMotion}])},g.createElement("div",{className:I([`${V}-top_slot-bg`,`${V}-top_slot-bg-${this.props.size}`])},g.createElement("div",{className:I([`${V}-top_slot-bg-svg`,`${V}-top_slot-bg-svg-${this.props.size}`])},g.createElement(Ol,{gradientStart:(r=this.props.topSlot.gradientStart)!==null&&r!==void 0?r:"var(--semi-color-primary)",gradientEnd:(s=this.props.topSlot.gradientEnd)!==null&&s!==void 0?s:"var(--semi-color-primary)"}))),g.createElement("div",{className:I([`${V}-top_slot`])},g.createElement("div",{style:l,className:I([`${V}-top_slot-content`,`${V}-top_slot-content-${this.props.size}`])},this.props.topSlot.text)))},this.state={isImgExist:!0,hoverContent:"",focusVisible:!1,scale:1},this.onEnter=this.onEnter.bind(this),this.onLeave=this.onLeave.bind(this),this.handleError=this.handleError.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.getContent=this.getContent.bind(this),this.avatarRef=g.createRef()}get adapter(){return Object.assign(Object.assign({},super.adapter),{notifyImgState:e=>{this.setState({isImgExist:e})},notifyEnter:e=>{const{hoverMask:t}=this.props,o=t;this.setState({hoverContent:o},()=>{const{onMouseEnter:r}=this.props;r&&r(e)})},notifyLeave:e=>{this.setState({hoverContent:""},()=>{const{onMouseLeave:t}=this.props;t&&t(e)})},setFocusVisible:e=>{this.setState({focusVisible:e})},setScale:e=>{this.setState({scale:e})},getAvatarNode:()=>{var e;return(e=this.avatarRef)===null||e===void 0?void 0:e.current}})}componentDidMount(){this.foundation=new El(this.adapter),this.foundation.init()}componentDidUpdate(e){if(this.props.src&&this.props.src!==e.src){const t=new Image(0,0);t.src=this.props.src,t.onload=()=>{this.setState({isImgExist:!0})},t.onerror=()=>{this.setState({isImgExist:!1})},t.onabort=()=>{this.setState({isImgExist:!1})}}typeof this.props.children=="string"&&this.props.children!==e.children&&this.foundation.changeScale()}componentWillUnmount(){this.foundation.destroy()}onEnter(e){this.foundation.handleEnter(e)}onLeave(e){this.foundation.handleLeave(e)}handleError(){this.foundation.handleImgLoadError()}handleKeyDown(e){const{onClick:t}=this.props;switch(e.key){case"Enter":t(e),Je(e);break;case"Escape":e.target.blur();break}}render(){var e;const t=this.props,{shape:o,children:r,size:s,color:l,className:c,hoverMask:u,onClick:p,imgAttr:d,src:m,srcSet:f,style:b,alt:y,gap:S,bottomSlot:w,topSlot:C,border:k,contentMotion:_}=t,x=Pl(t,["shape","children","size","color","className","hoverMask","onClick","imgAttr","src","srcSet","style","alt","gap","bottomSlot","topSlot","border","contentMotion"]),{isImgExist:j,hoverContent:v,focusVisible:O}=this.state;let E={};un.SIZE.includes(s)||(E={width:s,height:s}),E=Object.assign(Object.assign({},E),b);const D=w||C||k,P={onClick:p,onMouseEnter:this.onEnter,onMouseLeave:this.onLeave},R=m&&j,L=I(V,{[`${V}-${o}`]:o,[`${V}-${s}`]:s,[`${V}-${l}`]:l&&!R,[`${V}-img`]:R,[`${V}-focus`]:O,[`${V}-animated`]:_},c),z=v?g.createElement("div",{className:`${V}-hover`,"x-semi-prop":"hoverContent"},v):null;let W=g.createElement("span",Object.assign({},x,{style:D?{}:E,className:L},D?{}:P,{role:"listitem",ref:this.avatarRef}),this.getContent(),z);if(k){const A={};typeof k=="object"&&(k!=null&&k.color)&&(A.borderColor=k==null?void 0:k.color),W=g.createElement("div",{style:Object.assign({position:"relative"},E)},W,g.createElement("span",{style:A,className:I([`${V}-additionalBorder`,`${V}-additionalBorder-${s}`,{[`${V}-${o}`]:o}])}),typeof this.props.border=="object"&&this.props.border.motion&&g.createElement("span",{style:A,className:I([`${V}-additionalBorder`,`${V}-additionalBorder-${s}`,{[`${V}-${o}`]:o,[`${V}-additionalBorder-animated`]:typeof this.props.border=="object"&&((e=this.props.border)===null||e===void 0?void 0:e.motion)}])}))}return D?g.createElement("span",Object.assign({className:I([`${V}-wrapper`]),style:E},P),W,C&&["extra-small","small","default","medium","large","extra-large"].includes(s)&&o==="circle"&&this.renderTopSlot(),w&&["extra-small","small","default","medium","large","extra-large"].includes(s)&&this.renderBottomSlot()):W}}ht.__SemiComponentName__="Avatar";ht.defaultProps=ln(ht.__SemiComponentName__,{size:"medium",color:"grey",shape:"circle",gap:3,onClick:rn,onMouseEnter:rn,onMouseLeave:rn});ht.propTypes={children:h.node,color:h.oneOf(Ll),shape:h.oneOf(Ml),size:h.oneOf(_l),hoverMask:h.node,className:h.string,style:h.object,gap:h.number,imgAttr:h.object,src:h.string,srcSet:h.string,alt:h.string,onError:h.func,onClick:h.func,onMouseEnter:h.func,onMouseLeave:h.func,bottomSlot:h.shape({render:h.func,shape:h.oneOf(["circle","square"]),text:h.node,bgColor:h.string,textColor:h.string,className:h.string,style:h.object}),topSlot:h.shape({render:h.func,gradientStart:h.string,gradientEnd:h.string,text:h.node,textColor:h.string,className:h.string,style:h.object}),border:h.oneOfType([h.shape({color:h.string,motion:h.bool}),h.bool]),contentMotion:h.bool};ht.elementType="Avatar";var Pn,ir;function Il(){if(ir)return Pn;ir=1;function n(e,t,o,r){for(var s=e.length,l=o+(r?1:-1);r?l--:++l-1}return Rn=e,Rn}var Nn,hr;function Fl(){if(hr)return Nn;hr=1;function n(e,t,o){for(var r=-1,s=e==null?0:e.length;++r=l&&(b=s,y=!1,p=new n(p));e:for(;++fthis.close(z,o,t)},g.createElement(cn,{size:"small"})):null,R=De(o),L=I(`${le}-content`,`${le}-content-${R?"ellipsis":"center"}`);return g.createElement("div",Object.assign({"aria-label":this.props["aria-label"]||R?`${l?"Closable ":""}Tag: ${o}`:""},D),w?g.createElement("div",{className:`${le}-prefix-icon`},w):null,b?this.renderAvatar():null,g.createElement("div",{className:L},o),C?g.createElement("div",{className:`${le}-suffix-icon`},C):null,P)}}Ae.defaultProps={size:si[0],color:ri[0],closable:!1,type:ii[0],onClose:()=>{},onClick:()=>{},onMouseEnter:()=>{},style:{},className:"",shape:"square",avatarShape:"square",prefixIcon:null,suffixIcon:null,colorful:!1,gradient:!1};Ae.propTypes={children:h.node,tagKey:h.oneOfType([h.string,h.number]),size:h.oneOf(si),color:h.oneOf(ri),type:h.oneOf(ii),closable:h.bool,visible:h.bool,onClose:h.func,onClick:h.func,prefixIcon:h.node,suffixIcon:h.node,style:h.object,className:h.string,avatarSrc:h.string,colorful:h.bool,gradient:h.bool,avatarShape:h.oneOf(Hl),"aria-label":h.string};$l();var An,gr;function Zl(){if(gr)return An;gr=1;var n=Fi();function e(t,o){return t==null?!0:n(t,o)}return An=e,An}Zl();var Fn,yr;function ql(){if(yr)return Fn;yr=1;var n=No(),e=zi(),t=Bi(),o=Ui(),r=Vi(),s=Ki(),l=Bs();function c(u){return t(u)?n(u,s):o(u)?[u]:e(r(l(u)))}return Fn=c,Fn}ql();var zn,br;function Gl(){if(br)return zn;br=1;var n=Object.prototype,e=n.hasOwnProperty;function t(o,r){return o!=null&&e.call(o,r)}return zn=t,zn}var Bn,vr;function Ql(){if(vr)return Bn;vr=1;var n=Gl(),e=Wi();function t(o,r){return o!=null&&e(o,r,n)}return Bn=t,Bn}Ql();function Yl(n,e){return n&&(typeof n=="function"||typeof n=="object")&&e&&(typeof e=="function"||typeof e=="object")&&Object.entries(e).forEach(t=>{let[o,r]=t;n[o]=r}),n}const Xl={PREFIX:`${Te}-empty`};var Jl=function(n,e){var t={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&e.indexOf(o)<0&&(t[o]=n[o]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(n);r{for(const o of t)o.type==="attributes"&&o.attributeName==="theme-mode"&&this.updateMode()},this.updateMode=()=>{const t=this.body.getAttribute("theme-mode");t!==this.state.mode&&this.setState({mode:t})},this.state={mode:null}}componentDidMount(){if(this.props.darkModeImage){this.body=window.document.body,this.updateMode();const e={attributes:!0,childList:!1,subtree:!1};this.observer=new MutationObserver(this.observe),this.observer.observe(this.body,e)}}componentWillUnmount(){this.observer&&this.observer.disconnect()}render(){const e=this.props,{className:t,image:o,description:r,style:s,title:l,imageStyle:c,children:u,layout:p,darkModeImage:d}=e,m=Jl(e,["className","image","description","style","title","imageStyle","children","layout","darkModeImage"]),f=typeof r=="string"?r:"empty",b=this.state.mode==="dark"&&d?d:o;let y=null;typeof b=="string"?y=g.createElement("img",{alt:f,src:b}):b&&"id"in b?y=g.createElement("svg",{"aria-hidden":"true"},g.createElement("use",{xlinkHref:`#${b.id}`})):y=b;const S=I(t,Ze,{[`${Ze}-${p}`]:p}),w=y?{heading:4}:{heading:6,style:{fontWeight:400}};return g.createElement("div",Object.assign({className:S,style:s},this.getDataAttr(m)),g.createElement("div",{className:`${Ze}-image`,style:c,"x-semi-prop":"image,darkModeImage"},y),g.createElement("div",{className:`${Ze}-content`},l?g.createElement(Do.Title,Object.assign({},w,{className:`${Ze}-title`,"x-semi-prop":"title"}),l):null,r?g.createElement("div",{className:`${Ze}-description`,"x-semi-prop":"description"},r):null,u?g.createElement("div",{className:`${Ze}-footer`,"x-semi-prop":"children"},u):null))}}ai.defaultProps={layout:"vertical"};const K={DIALOG:`${Te}-modal`},xr={SIZE:["small","medium","large","full-width"],directions:["ltr","rtl"]};function ec(n){return n!==null&&typeof n=="object"}function wr(n){return ec(n)&&typeof n.then=="function"}class tc extends ge{constructor(e){super(Object.assign({},e)),this._debouncedOk=Lo(t=>{this._invokeOk(t)},100,{leading:!0,trailing:!1}),this._debouncedCancel=Lo(t=>{this._invokeCancel(t)},100,{leading:!0,trailing:!1}),this._lastCancelTarget=null,this._lastOkTarget=null,this.toggleDisplayNone=(t,o)=>{this._adapter.toggleDisplayNone(t,o)}}destroy(){this._debouncedOk.cancel(),this._debouncedCancel.cancel(),this.afterHide()}handleCancel(e){var t,o;const r=(o=(t=e==null?void 0:e.currentTarget)!==null&&t!==void 0?t:e==null?void 0:e.target)!==null&&o!==void 0?o:null;r!==this._lastCancelTarget&&this._debouncedCancel.cancel(),this._lastCancelTarget=r,this._debouncedCancel(e)}handleOk(e){var t,o;const r=(o=(t=e==null?void 0:e.currentTarget)!==null&&t!==void 0?t:e==null?void 0:e.target)!==null&&o!==void 0?o:null;r!==this._lastOkTarget&&this._debouncedOk.cancel(),this._lastOkTarget=r,this._debouncedOk(e)}_invokeCancel(e){var t;const o=this._adapter.notifyCancel(e);wr(o)&&(this._adapter.setState({onCancelReturnPromiseStatus:"pending"}),(t=o==null?void 0:o.then(()=>{this._adapter.setState({onCancelReturnPromiseStatus:"fulfilled"})}))===null||t===void 0||t.catch(r=>{throw this._adapter.setState({onCancelReturnPromiseStatus:"rejected"}),r}))}_invokeOk(e){var t;const o=this._adapter.notifyOk(e);wr(o)&&(this._adapter.setState({onOKReturnPromiseStatus:"pending"}),(t=o==null?void 0:o.then(()=>{this._adapter.setState({onOKReturnPromiseStatus:"fulfilled"})}))===null||t===void 0||t.catch(r=>{throw this._adapter.setState({onOKReturnPromiseStatus:"rejected"}),r}))}beforeShow(){this._adapter.disabledBodyScroll()}afterHide(){this._adapter.enabledBodyScroll(),this._adapter.notifyClose()}enabledBodyScroll(){this._adapter.enabledBodyScroll()}}class zo extends ge{constructor(e){super(Object.assign(Object.assign({},zo.defaultAdapter),e)),this.handleKeyDown=t=>{const{closeOnEsc:o}=this.getProps();if(o&&t.keyCode===sn.ESC){t.stopPropagation(),this.close(t);return}}}destroy(){this.handleKeyDownEventListenerUnmount(),this.modalDialogBlur(),this.prevFocusElementReFocus()}handleDialogMouseDown(){this._adapter.notifyDialogMouseDown()}handleMaskMouseUp(){this._adapter.notifyDialogMouseUp()}handleKeyDownEventListenerMount(){this._adapter.addKeyDownEventListener()}handleKeyDownEventListenerUnmount(){this._adapter.removeKeyDownEventListener()}getMouseState(){this._adapter.getMouseState()}handleMaskClick(e){const{dialogMouseDown:t}=this.getStates();e.target===e.currentTarget&&!t&&this.close(e)}close(e){this._adapter.notifyClose(e)}modalDialogFocus(){this._adapter.modalDialogFocus()}modalDialogBlur(){this._adapter.modalDialogBlur()}prevFocusElementReFocus(){this._adapter.prevFocusElementReFocus()}}var Un,Cr;function nc(){if(Cr)return Un;Cr=1;var n=zl(),e=Hi(),t=Zi(),o=e(function(r,s){return t(r)?n(r,s):[]});return Un=o,Un}var oc=nc();const rc=We(oc);class Ue{constructor(e,t){var o;this.addFocusRedirectListener=r=>(this.focusRedirectListenerList.push(r),()=>this.removeFocusRedirectListener(r)),this.removeFocusRedirectListener=r=>{this.focusRedirectListenerList=rc(this.focusRedirectListenerList,r)},this.destroy=()=>{var r;(r=this.container)===null||r===void 0||r.removeEventListener("keydown",this.onKeyPress)},this.shouldFocusRedirect=r=>{if(!this.enable)return!1;for(const s of this.focusRedirectListenerList)if(!s(r))return!1;return!0},this.focusElement=(r,s)=>{const{preventScroll:l}=this.options;r==null||r.focus({preventScroll:l}),s.preventDefault()},this.onKeyPress=r=>{if(r&&r.key==="Tab"){const s=Ue.getFocusableElements(this.container);s.length&&(r.shiftKey?this.handleContainerShiftTabKeyDown(s,r):this.handleContainerTabKeyDown(s,r))}},this.handleContainerTabKeyDown=(r,s)=>{const l=Ue.getActiveElement(),c=r[r.length-1]===l,u=r[0];c&&this.shouldFocusRedirect(u)&&this.focusElement(u,s)},this.handleContainerShiftTabKeyDown=(r,s)=>{const l=Ue.getActiveElement(),c=r[0]===l,u=r[r.length-1];c&&this.shouldFocusRedirect(u)&&this.focusElement(u,s)},Object.freeze(t),this.container=e,this.options=t,this.enable=(o=t==null?void 0:t.enable)!==null&&o!==void 0?o:!0,this.focusRedirectListenerList=t!=null&&t.onFocusRedirectListener?Array.isArray(t.onFocusRedirectListener)?[...t.onFocusRedirectListener]:[t.onFocusRedirectListener]:[],this.container.addEventListener("keydown",this.onKeyPress)}get enable(){return this._enable}set enable(e){this._enable=e}static getFocusableElements(e){if(!qi(e))return[];const o=["input:not([disabled]):not([tabindex='-1'])","textarea:not([disabled]):not([tabindex='-1'])","button:not([disabled]):not([tabindex='-1'])","a[href]:not([tabindex='-1'])","select:not([disabled]):not([tabindex='-1'])","area[href]:not([tabindex='-1'])","iframe:not([tabindex='-1'])","object:not([tabindex='-1'])","*[tabindex]:not([tabindex='-1'])","*[contenteditable]:not([tabindex='-1'])"].join(",");return Array.from(e.querySelectorAll(o))}static getActiveElement(){return document?document.activeElement:null}}var Vn=function(n,e){var t={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&e.indexOf(o)<0&&(t[o]=n[o]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(n);r{this.foundation.handleKeyDown(t)},this.onDialogMouseDown=()=>{this.foundation.handleDialogMouseDown()},this.onMaskMouseUp=()=>{this.foundation.handleMaskMouseUp()},this.onMaskClick=t=>{this.foundation.handleMaskClick(t)},this.close=t=>{this.foundation.close(t)},this.getMaskElement=()=>{const t=Vn(this.props,[]),{mask:o,maskClassName:r}=t;if(o){const s=I(`${K.DIALOG}-mask`,{});return g.createElement("div",Object.assign({key:"mask"},this.props.maskExtraProps,{className:I(s,r),style:t.maskStyle}))}return null},this.renderCloseBtn=()=>{const{closable:t,closeIcon:o}=this.props;let r;if(t){const s=o||g.createElement(cn,{"x-semi-prop":"closeIcon"});r=g.createElement(qs,{"aria-label":"close",className:`${K.DIALOG}-close`,key:"close-btn",onClick:this.close,type:"tertiary",icon:s,theme:"borderless",size:"small"})}return r},this.renderIcon=()=>{const{icon:t}=this.props;return t?g.createElement("span",{className:`${K.DIALOG}-icon-wrapper`,"x-semi-prop":"icon"},t):null},this.renderHeader=()=>{if("header"in this.props)return this.props.header;const{title:t}=this.props,o=this.renderCloseBtn(),r=this.renderIcon();return t==null?null:g.createElement("div",{className:`${K.DIALOG}-header`},r,g.createElement(Do.Title,{heading:5,className:`${K.DIALOG}-title`,id:`${K.DIALOG}-title`,"x-semi-prop":"title"},t),o)},this.renderBody=()=>{const{bodyStyle:t,children:o,title:r}=this.props,s=I(`${K.DIALOG}-body`,{[`${K.DIALOG}-withIcon`]:this.props.icon}),l=this.renderCloseBtn(),c=this.renderIcon();return r!=null||"header"in this.props?g.createElement("div",{className:s,id:`${K.DIALOG}-body`,style:t,"x-semi-prop":"children"},o):g.createElement("div",{className:`${K.DIALOG}-body-wrapper`},c,g.createElement("div",{className:s,style:t,"x-semi-prop":"children"},o),l)},this.getDialogElement=()=>{const t=Vn(this.props,[]),o={},r=I(`${K.DIALOG}`,{[`${K.DIALOG}-centered`]:t.centered,[`${K.DIALOG}-${t.size}`]:t.size});t.width&&(o.width=t.width),t.height&&(o.height=t.height),t.isFullScreen&&(o.width="100%",o.height="100%",o.margin="unset");const s=this.renderBody(),l=this.renderHeader(),c=t.footer?g.createElement("div",{className:`${K.DIALOG}-footer`,"x-semi-prop":"footer"},t.footer):null,u=g.createElement("div",{role:"dialog",ref:this.modalDialogRef,"aria-modal":"true","aria-labelledby":`${K.DIALOG}-title`,"aria-describedby":`${K.DIALOG}-body`,onAnimationEnd:t.onAnimationEnd,className:I([`${K.DIALOG}-content`,t.contentClassName,{[`${K.DIALOG}-content-fullScreen`]:t.isFullScreen,[`${K.DIALOG}-content-height-set`]:t.height||Pt(t.style,"height")}])},l,s,c);return g.createElement("div",{key:"dialog-element",className:r,onMouseDown:this.onDialogMouseDown,style:Object.assign(Object.assign({},t.style),o),id:this.dialogId},t!=null&&t.modalRender?t==null?void 0:t.modalRender(u):u)},this.state={dialogMouseDown:!1,prevFocusElement:Ue.getActiveElement()},this.foundation=new zo(this.adapter),this.dialogId=`dialog-${sc++}`,this.modalDialogRef=g.createRef()}get adapter(){return Object.assign(Object.assign({},super.adapter),{notifyClose:e=>{this.props.onClose(e)},notifyDialogMouseDown:()=>{this.setState({dialogMouseDown:!0})},notifyDialogMouseUp:()=>{this.state.dialogMouseDown&&(this.timeoutId=setTimeout(()=>{this.setState({dialogMouseDown:!1})},0))},addKeyDownEventListener:()=>{this.props.closeOnEsc&&document.addEventListener("keydown",this.foundation.handleKeyDown)},removeKeyDownEventListener:()=>{this.props.closeOnEsc&&document.removeEventListener("keydown",this.foundation.handleKeyDown)},getMouseState:()=>this.state.dialogMouseDown,modalDialogFocus:()=>{var e,t,o;const{preventScroll:r}=this.props;let s;if(this.modalDialogRef){const l=Ue.getActiveElement();s=this.modalDialogRef.current.contains(l),(e=this.focusTrapHandle)===null||e===void 0||e.destroy(),this.focusTrapHandle=new Ue(this.modalDialogRef.current,{preventScroll:r})}s||(o=(t=this.modalDialogRef)===null||t===void 0?void 0:t.current)===null||o===void 0||o.focus({preventScroll:r})},modalDialogBlur:()=>{var e,t;(e=this.modalDialogRef)===null||e===void 0||e.current.blur(),(t=this.focusTrapHandle)===null||t===void 0||t.destroy()},prevFocusElementReFocus:()=>{const{prevFocusElement:e}=this.state,{preventScroll:t}=this.props,o=Pt(e,"focus");Be(o)&&e.focus({preventScroll:t})}})}componentDidMount(){var e;this.foundation.handleKeyDownEventListenerMount(),this.foundation.modalDialogFocus();const t=Ue.getFocusableElements(this.modalDialogRef.current);this.modalDialogRef.current.contains(document.activeElement)||(e=t[0])===null||e===void 0||e.focus()}componentWillUnmount(){clearTimeout(this.timeoutId),this.foundation.destroy()}render(){var e;const t=this.props,{maskClosable:o,className:r,getPopupContainer:s,maskFixed:l,getContainerContext:c}=t,u=Vn(t,["maskClosable","className","getPopupContainer","maskFixed","getContainerContext"]),{direction:p}=this.context,d=I(r,{[`${K.DIALOG}-popup`]:s&&s()!==((e=globalThis==null?void 0:globalThis.document)===null||e===void 0?void 0:e.body)&&!l,[`${K.DIALOG}-fixed`]:l,[`${K.DIALOG}-rtl`]:p==="rtl"}),m=c(),f=this.getDataAttr(u),b=g.createElement("div",Object.assign({className:d},f),this.getMaskElement(),g.createElement("div",Object.assign({role:"none",className:I({[`${K.DIALOG}-wrap`]:!0,[`${K.DIALOG}-wrap-center`]:this.props.centered}),onClick:o?this.onMaskClick:null,onMouseUp:o?this.onMaskMouseUp:null},this.props.contentExtraProps),this.getDialogElement()));return m&&m.Provider?g.createElement(m.Provider,{value:m.value},b):b}}hn.contextType=Us;hn.propTypes={close:h.func,getContainerContext:h.func,contentClassName:h.string,maskClassName:h.string,onAnimationEnd:h.func,preventScroll:h.bool};hn.defaultProps={close:$,getContainerContext:$,contentClassName:"",maskClassName:""};var ic=function(n,e){var t={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&e.indexOf(o)<0&&(t[o]=n[o]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(n);r{const[e,t]=a.useState(!0),[o,r]=a.useState(),[s,l]=a.useState(),{direction:c}=n,{title:u,content:p,icon:d,type:m,onCancel:f,onOk:b,className:y}=n,S=ic(n,["title","content","icon","type","onCancel","onOk","className"]),w=a.useCallback(E=>{const D=b&&b(E);D&&D.then?(r(!0),D.then(function(){t(!1),r(!1)},P=>{r(!1)})):t(!1)},[b]),C=a.useCallback(E=>{const D=f&&f(E);D&&D.then?(l(!0),D.then(function(){t(!1),l(!1)},P=>{l(!1)})):t(!1)},[f]),k=`${K.DIALOG}-confirm`,_=I(y,k,{[`${k}-rtl`]:c==="rtl"}),x=I(`${K.DIALOG}-${m}`),j=Ge(d)?g.cloneElement(d,{className:`${k}-icon ${x}-icon`,size:"extra-large"}):d,v=u==null?null:g.createElement("span",{className:`${k}-title-text`},u),O=I(`${k}-content`,{[`${k}-content-withIcon`]:n.icon});return g.createElement(re,Object.assign({className:_,title:v,confirmLoading:o,cancelLoading:s,onOk:w,onCancel:C,icon:j,visible:e},S),g.createElement("div",{className:O,"x-semi-prop":"content"},p))};function Yt(n){const e=document.createElement("div");document.body.appendChild(e);let t=Object.assign({},n);const o=()=>{Hs(e),e.parentNode&&e.parentNode.removeChild(e);for(let c=0;c{u==null||u(),o()},motion:n.motion})),e)}function s(){t=Object.assign(Object.assign({},t),{visible:!1}),r(t)}function l(c){t=Object.assign(Object.assign({},t),c),r(t)}return r(t),Qe.push(s),{destroy:s,update:l}}function ci(n){return Object.assign({type:"info",icon:g.createElement(Gs,null)},n)}function di(n){return Object.assign({type:"success",icon:g.createElement(Ks,null)},n)}function ui(n){return Object.assign({type:"warning",icon:g.createElement(Qs,null)},n)}function pi(n){return Object.assign({type:"error",icon:g.createElement(Ws,null),okButtonProps:Object.assign({type:"danger"},n.okButtonProps)},Gi(n,["okButtonProps"]))}function hi(n){return Object.assign({type:"confirm",icon:g.createElement(rl,null)},n)}var ac=function(n,e){var t={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&e.indexOf(o)<0&&(t[o]=n[o]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(n);r{var{afterClose:t,config:o}=n;ac(n,["afterClose","config"]);const[r,s]=g.useState(o);g.useImperativeHandle(e,()=>({destroy:()=>{s(c=>Object.assign(Object.assign({},c),{visible:!1}))},update:c=>{s(u=>Object.assign(Object.assign({},u),c))}}));const l=()=>{var c;(c=o==null?void 0:o.afterClose)===null||c===void 0||c.call(o),t()};return g.createElement(li,Object.assign({},r,{afterClose:l}))},cc=g.forwardRef(lc);let Sr=0;function dc(){const[n,e]=g.useState([]);function t(o){return e(r=>[...r,o]),()=>{e(r=>r.filter(s=>s!==o))}}return[n,t]}function uc(){const[n,e]=dc();function t(o){return function(s){Sr+=1;const l=g.createRef();let c;const u=g.createElement(cc,{key:`semi-modal-${Sr}`,config:o(s),ref:l,afterClose:()=>{c()}});return c=e(u),{destroy:()=>{l.current&&l.current.destroy()},update:p=>{l.current&&l.current.update(p)}}}}return[{info:t(ci),success:t(di),error:t(pi),warning:t(ui),confirm:t(hi)},g.createElement(g.Fragment,null,n)]}var pc=function(n,e){var t={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&e.indexOf(o)<0&&(t[o]=n[o]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(n);r{this.foundation.handleCancel(t)},this.handleOk=t=>{this.foundation.handleOk(t)},this.updateState=()=>{const{visible:t}=this.props;this.foundation.toggleDisplayNone(!t)},this.renderFooter=()=>{const{okText:t,okType:o,cancelText:r,confirmLoading:s,cancelLoading:l,hasCancel:c,footerFill:u}=this.props,p=d=>{var m;return c?g.createElement(ie,Object.assign({"aria-label":"cancel",onClick:this.handleCancel,loading:l===void 0?this.state.onCancelReturnPromiseStatus==="pending":l,type:"tertiary",block:u,autoFocus:!0},this.props.cancelButtonProps,{style:Object.assign(Object.assign({},u?{marginLeft:"unset"}:{}),(m=this.props.cancelButtonProps)===null||m===void 0?void 0:m.style),"x-semi-children-alias":"cancelText"}),r||d.cancel):null};return g.createElement(Zs,{componentName:"Modal"},(d,m)=>g.createElement("div",{className:I({[`${K.DIALOG}-footerfill`]:u})},p(d),g.createElement(ie,Object.assign({"aria-label":"confirm",type:o,theme:"solid",block:u,loading:s===void 0?this.state.onOKReturnPromiseStatus==="pending":s,onClick:this.handleOk},this.props.okButtonProps,{"x-semi-children-alias":"okText"}),t||d.confirm)))},this.renderDialog=()=>{var t;let o=this.props,{footer:r,className:s,motion:l,maskStyle:c,keepDOM:u,style:p,zIndex:d,getPopupContainer:m,visible:f,modalContentClass:b}=o,y=pc(o,["footer","className","motion","maskStyle","keepDOM","style","zIndex","getPopupContainer","visible","modalContentClass"]),S=p;const w=c,C="footer"in this.props?r:this.renderFooter();let k={zIndex:d};m&&m()!==((t=globalThis==null?void 0:globalThis.document)===null||t===void 0?void 0:t.body)&&(k={zIndex:d,position:"static"});const _=I(s,{[`${K.DIALOG}-displayNone`]:u&&this.state.displayNone}),x=this.props.visible||this.props.keepDOM&&(!this.props.lazyRender||this._haveRendered)||this.props.motion&&!this.state.displayNone;return x&&(this._haveRendered=!0),g.createElement(Eo,{motion:this.props.motion,animationState:f?"enter":"leave",startClassName:f?`${K.DIALOG}-content-animate-show`:`${K.DIALOG}-content-animate-hide`,onAnimationEnd:()=>{this.updateState()}},j=>{let{animationClassName:v,animationEventsNeedBind:O}=j;return g.createElement(Eo,{motion:this.props.motion,animationState:f?"enter":"leave",startClassName:f?`${K.DIALOG}-mask-animate-show`:`${K.DIALOG}-mask-animate-hide`,onAnimationEnd:()=>{this.updateState()}},E=>{let{animationClassName:D,animationEventsNeedBind:P}=E;return x?g.createElement(Qi,{style:k,getPopupContainer:m}," ",g.createElement(hn,Object.assign({},y,{contentExtraProps:O,maskExtraProps:P,isFullScreen:this.state.isFullScreen,contentClassName:`${v} ${b}`,maskClassName:D,className:_,getPopupContainer:m,maskStyle:w,style:S,ref:this.modalRef,footer:C,onClose:this.handleCancel}))):g.createElement(g.Fragment,null)})})},this.state={displayNone:!e.visible,isFullScreen:e.fullScreen},this.foundation=new tc(this.adapter),this.modalRef=g.createRef(),this.scrollBarWidth=0,this.originBodyWidth="100%"}get adapter(){return Object.assign(Object.assign({},super.adapter),{getProps:()=>this.props,disabledBodyScroll:()=>{var e;const{getPopupContainer:t}=this.props;this.bodyOverflow=document.body.style.overflow||"",(!t||t()===((e=globalThis==null?void 0:globalThis.document)===null||e===void 0?void 0:e.body))&&this.bodyOverflow!=="hidden"&&(document.body.style.overflow="hidden",document.body.style.width=`calc(${this.originBodyWidth||"100%"} - ${this.scrollBarWidth}px)`)},enabledBodyScroll:()=>{var e;const{getPopupContainer:t}=this.props;(!t||t()===((e=globalThis==null?void 0:globalThis.document)===null||e===void 0?void 0:e.body))&&this.bodyOverflow!==null&&this.bodyOverflow!=="hidden"&&(document.body.style.overflow=this.bodyOverflow,document.body.style.width=this.originBodyWidth)},notifyCancel:e=>this.props.onCancel(e),notifyOk:e=>this.props.onOk(e),notifyClose:()=>{this.props.afterClose()},toggleDisplayNone:(e,t)=>{e!==this.state.displayNone&&this.setState({displayNone:e},t||$)},notifyFullScreen:e=>{e!==this.state.isFullScreen&&this.setState({isFullScreen:e})}})}static getDerivedStateFromProps(e,t){const o={};return e.fullScreen!==t.isFullScreen&&(o.isFullScreen=e.fullScreen),e.visible&&t.displayNone&&(o.displayNone=!1),o}componentDidMount(){this.scrollBarWidth=Yi(),this.originBodyWidth=document.body.style.width,this.props.visible&&this.foundation.beforeShow()}componentDidUpdate(e,t,o){!e.visible&&this.props.visible&&this.foundation.beforeShow(),!t.displayNone&&this.state.displayNone&&this.foundation.afterHide()}componentWillUnmount(){this.props.visible?this.foundation.destroy():this.foundation.enabledBodyScroll()}render(){const{visible:e,keepDOM:t,lazyRender:o}=this.props;return this.renderDialog()}}re.propTypes={mask:h.bool,closable:h.bool,centered:h.bool,visible:h.bool,width:h.oneOfType([h.string,h.number]),height:h.oneOfType([h.string,h.number]),confirmLoading:h.bool,cancelLoading:h.bool,okText:h.string,okType:h.string,cancelText:h.string,maskClosable:h.bool,onCancel:h.func,onOk:h.func,modalRender:h.func,afterClose:h.func,okButtonProps:h.object,cancelButtonProps:h.object,style:h.object,className:h.string,maskStyle:h.object,bodyStyle:h.object,zIndex:h.number,title:h.node,icon:h.node,header:h.node,footer:h.node,hasCancel:h.bool,motion:h.bool,children:h.node,getPopupContainer:h.func,getContainerContext:h.func,maskFixed:h.bool,closeIcon:h.node,closeOnEsc:h.bool,size:h.oneOf(xr.SIZE),keepDOM:h.bool,lazyRender:h.bool,direction:h.oneOf(xr.directions),fullScreen:h.bool,footerFill:h.bool};re.__SemiComponentName__="Modal";re.defaultProps=ln(re.__SemiComponentName__,{zIndex:1e3,motion:!0,mask:!0,centered:!1,closable:!0,visible:!1,okType:"primary",maskClosable:!0,hasCancel:!0,onCancel:$,onOk:$,afterClose:$,maskFixed:!1,closeOnEsc:!0,size:"small",keepDOM:!1,lazyRender:!0,fullScreen:!1});re.useModal=uc;re.info=function(n){return Yt(ci(n))};re.success=function(n){return Yt(di(n))};re.error=function(n){return Yt(pi(n))};re.warning=function(n){return Yt(ui(n))};re.confirm=function(n){return Yt(hi(n))};re.destroyAll=function(){for(let e=0,t=Qe.length;eo.ariaDisabled==="false"):null}setFocusToFirstMenuItem(e){const t=this.getMenuItemNodes(e);t&&Ji(t)}setFocusToLastMenuItem(e){const t=this.getMenuItemNodes(e);t&&ea(t)}handleKeyDown(e){var t,o;const r=(o=(t=e.target)===null||t===void 0?void 0:t.attributes["data-popupid"])===null||o===void 0?void 0:o.value,{visible:s}=this._adapter.getStates();switch(e.key){case" ":case"Enter":e.target.click();break;case"ArrowDown":this.setFocusToFirstMenuItem(r),s&&Je(e);break;case"ArrowUp":this.setFocusToLastMenuItem(r),s&&Je(e);break}}}class mc extends ge{constructor(){super(...arguments),this.menuItemNodes=null,this.firstChars=[]}handleEscape(e){this._adapter.getContext("trigger")==="custom"&&(e&&ta(document.querySelectorAll("[data-popupid]"),e.id)).focus()}setFocusByFirstCharacter(e,t){const o=na(this.menuItemNodes,e,this.firstChars,t);o>=0&&oa(this.menuItemNodes,this.menuItemNodes[o])}onMenuKeydown(e){const t=ra(e.target,"tooltip");this.menuItemNodes||(this.menuItemNodes=[...e.target.parentNode.getElementsByTagName("li")].filter(r=>r.ariaDisabled!=="true")),this.firstChars.length===0&&this.menuItemNodes.forEach(r=>{var s;this.firstChars.push((s=r.textContent.trim()[0])===null||s===void 0?void 0:s.toLowerCase())});const o=this.menuItemNodes.find(r=>r.tabIndex===0);switch(e.key){case" ":case"Enter":e.target.click();break;case"Escape":this.handleEscape(t);break;case"ArrowUp":aa(this.menuItemNodes,o),Je(e);break;case"ArrowDown":ia(this.menuItemNodes,o),Je(e);break;default:sa(e.key)&&this.setFocusByFirstCharacter(o,e.key);break}}}const mt=g.createContext({level:0});var fc=function(n,e){var t={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&e.indexOf(o)<0&&(t[o]=n[o]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(n);rthis.foundation.onMenuKeydown(l)}),t)}}Bo.propTypes={children:h.node,className:h.string,style:h.object};Bo.contextType=mt;const qe=Xt.PREFIX;class fn extends de{render(){const{children:e,disabled:t,className:o,forwardRef:r,style:s,type:l,active:c,icon:u,onKeyDown:p,showTick:d,hover:m,innerRef:f}=this.props,{showTick:b}=this.context,y=b??d,S=I(o,{[`${qe}-item`]:!0,[`${qe}-item-disabled`]:t,[`${qe}-item-hover`]:m,[`${qe}-item-withTick`]:y,[`${qe}-item-${l}`]:l,[`${qe}-item-active`]:c}),w={};t||["onClick","onMouseEnter","onMouseLeave","onContextMenu"].forEach(_=>{this.context.level!==1&&_==="onClick"?w.onMouseDown=j=>{var v,O;j.button===0&&((O=(v=this.props)[_])===null||O===void 0||O.call(v,j))}:w[_]=this.props[_]});let C=null;switch(!0){case(y&&c):C=g.createElement(Go,null);break;case(y&&!c):C=g.createElement(Go,{style:{color:"transparent"}});break;default:C=null;break}let k=null;return u&&(k=g.createElement("div",{className:`${qe}-item-icon`},u)),g.createElement("li",Object.assign({role:"menuitem",tabIndex:-1,"aria-disabled":t},w,{onKeyDown:p,ref:_=>{r(_),typeof f=="function"?f(_):f&&typeof f=="object"&&(f.current=_)},className:S,style:s},this.getDataAttr(this.props)),C,k,e)}}fn.propTypes={children:h.oneOfType([h.string,h.node]),name:h.string,disabled:h.bool,selected:h.bool,onClick:h.func,onMouseEnter:h.func,onMouseLeave:h.func,onContextMenu:h.func,className:h.string,style:h.object,forwardRef:h.func,type:h.oneOf(mn.ITEM_TYPE),active:h.bool,icon:h.node};fn.contextType=mt;fn.defaultProps={disabled:!1,divided:!1,selected:!1,onMouseEnter:$,onMouseLeave:$,forwardRef:$};const mi=g.forwardRef((n,e)=>g.createElement(fn,Object.assign({},n,{innerRef:e})));mi.elementType="Dropdown.Item";const yc=Xt.PREFIX,bc=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{style:e,className:t}=n;return g.createElement("div",{className:I(`${yc}-divider`,t),style:e})},jr=Xt.PREFIX;class Uo extends a.PureComponent{render(){const{className:e,style:t,children:o}=this.props,{showTick:r}=this.context,s=I({[`${jr}-title`]:!0,[`${jr}-title-withTick`]:r},e);return g.createElement("div",{className:s,style:t},o)}}Uo.propTypes={children:h.node,className:h.string,style:h.object};Uo.contextType=mt;var Kn=function(n,e){var t={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&e.indexOf(o)<0&&(t[o]=n[o]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(n);rthis.foundation.handleVisibleChange(t),this.state={popVisible:e.visible},this.foundation=new hc(this.adapter),this.tooltipRef=g.createRef()}get adapter(){return Object.assign(Object.assign({},super.adapter),{setPopVisible:e=>this.setState({popVisible:e}),notifyVisibleChange:e=>{var t,o;return(o=(t=this.props).onVisibleChange)===null||o===void 0?void 0:o.call(t,e)},getPopupId:()=>this.tooltipRef.current.getPopupId()})}renderContent(){const{render:e,menu:t,contentClassName:o,style:r,showTick:s,prefixCls:l,trigger:c}=this.props,u=I(l,o),{level:p=0}=this.context,d={showTick:s,level:p+1,trigger:c};let m=null;return g.isValidElement(e)?m=e:Array.isArray(t)&&(m=this.renderMenu()),g.createElement(mt.Provider,{value:d},g.createElement("div",{className:u,style:r},g.createElement("div",{className:`${l}-content`,"x-semi-prop":"render"},m)))}renderMenu(){const{menu:e}=this.props,t=e.map((o,r)=>{switch(o.node){case"title":{const{name:s,node:l}=o,c=Kn(o,["name","node"]);return g.createElement(ae.Title,Object.assign({},c,{key:l+s+r}),s)}case"item":{const{node:s,name:l}=o,c=Kn(o,["node","name"]);return g.createElement(ae.Item,Object.assign({},c,{key:s+l+r}),l)}case"divider":return g.createElement(ae.Divider,{key:o.node+r});default:return null}});return g.createElement(ae.Menu,null,t)}renderPopCard(){const{render:e,contentClassName:t,style:o,showTick:r,prefixCls:s}=this.props,l=I(s,t),{level:c=0}=this.context,u={showTick:r,level:c+1};return g.createElement(mt.Provider,{value:u},g.createElement("div",{className:l,style:o},g.createElement("div",{className:`${s}-content`},e)))}render(){const e=this.props,{children:t,position:o,trigger:r,onVisibleChange:s,zIndex:l,className:c,motion:u,margin:p,style:d,prefixCls:m}=e,f=Kn(e,["children","position","trigger","onVisibleChange","zIndex","className","motion","margin","style","prefixCls"]);let{spacing:b}=this.props;const{level:y}=this.context,{popVisible:S}=this.state,w=this.renderContent();return y>0?b=typeof b=="number"?b:kr.NESTED_SPACING:(b===null||typeof b>"u")&&(b=kr.SPACING),g.createElement($e,Object.assign({zIndex:l,motion:u,margin:p,content:w,className:c,prefixCls:m,spacing:b,position:o,trigger:r,onVisibleChange:this.handleVisibleChange,showArrow:!1,returnFocusOnClose:!0,ref:this.tooltipRef},f),g.isValidElement(t)?g.cloneElement(t,{className:I(Pt(t,"props.className"),{[`${m}-showing`]:S}),"aria-haspopup":!0,"aria-expanded":S,onKeyDown:C=>{this.foundation.handleKeyDown(C);const k=Pt(t,"props.onKeyDown");k&&k(C)}}):t)}}ae.Menu=Bo;ae.Item=mi;ae.Divider=bc;ae.Title=Uo;ae.contextType=mt;ae.propTypes={children:h.node,contentClassName:h.oneOfType([h.string,h.array]),className:h.string,getPopupContainer:h.func,margin:h.oneOfType([h.number,h.object]),mouseEnterDelay:h.number,mouseLeaveDelay:h.number,menu:h.array,motion:h.oneOfType([h.bool,h.func,h.object]),onVisibleChange:h.func,prefixCls:h.string,position:h.oneOf(vc),rePosKey:h.oneOfType([h.string,h.number]),render:h.node,spacing:h.oneOfType([h.number,h.object]),showTick:h.bool,style:h.object,trigger:h.oneOf(xc),visible:h.bool,zIndex:h.number};ae.__SemiComponentName__="Dropdown";ae.defaultProps=ln(ae.__SemiComponentName__,{onVisibleChange:$,prefixCls:Xt.PREFIX,zIndex:la.DEFAULT_Z_INDEX,motion:!0,trigger:"hover",position:"bottom",mouseLeaveDelay:mn.DEFAULT_LEAVE_DELAY,showTick:!1,closeOnEsc:!0,onEscKeyDown:$});var Wn,Er;function wc(){if(Er)return Wn;Er=1;var n=ni();function e(t){return n(t)&&t!=+t}return Wn=e,Wn}var Cc=wc();const Sc=We(Cc),kc=(n,e)=>{const{isNaN:t}=Number;return t(n)&&t(e)};var jc=Bs();const Re=We(jc);var Ec=ca();const rt=We(Ec),Oc=Object.assign({},oi),Ye=Object.assign(Object.assign({},vl),{DEFAULT_STEP:1,DEFAULT_SHIFT_STEP:10,DEFAULT_PRESS_TIMEOUT:250,DEFAULT_PRESS_INTERVAL:0,MOUSE_BUTTON_LEFT:0}),Pc=Object.assign({},Qt);function _c(n,e){const t=(n.toString().split(".")[1]||"").length,o=(e.toString().split(".")[1]||"").length,r=Math.pow(10,Math.max(t,o));return Math.round(n*r+e*r)/r}function Or(n,e){return _c(n,-e)}class Mc extends ge{constructor(){super(...arguments),this._decimalPointSymbol=void 0,this._currencySymbol=""}init(){this._isCurrency()&&this._setCurrencySymbol(),this._setInitValue()}destroy(){this._unregisterInterval(),this._unregisterTimer(),this._adapter.unregisterGlobalEvent("mouseup")}isControlled(){return this._isControlledComponent("value")}_isCurrency(){const{currency:e}=this.getProps();return e===!0||typeof e=="string"&&e.trim()!==""}_getFinalCurrency(){const{currency:e}=this.getProps();return e===!0?this.getProp("defaultCurrency"):e}_doInput(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,r=e,s=e,l=!0;const c=this.isControlled();typeof e!="number"&&(s=this.doParse(e,!1),l=!isNaN(s)),l&&(r=s,c||this._adapter.setNumber(s)),c||this._adapter.setValue(e,o),this.getProp("keepFocus")&&this._adapter.setFocusing(!0,()=>{this._adapter.setClickUpOrDown(!0)}),this.notifyChange(r,t)}_registerInterval(e){const t=this.getProp("pressInterval")||Ye.DEFAULT_PRESS_INTERVAL;this._intervalHasRegistered=!0,this._interval=setInterval(()=>{typeof e=="function"&&this._intervalHasRegistered&&e()},t)}_unregisterInterval(){this._interval&&(this._intervalHasRegistered=!1,clearInterval(this._interval),this._interval=null)}_registerTimer(e){const t=this.getProp("pressTimeout")||Ye.DEFAULT_PRESS_TIMEOUT;this._timerHasRegistered=!0,this._timer=setTimeout(()=>{this._timerHasRegistered&&typeof e=="function"&&e()},t)}_unregisterTimer(){this._timer&&(this._timerHasRegistered=!1,clearTimeout(this._timer),this._timer=null)}_setCurrencySymbol(){const{localeCode:e,currencyDisplay:t}=this.getProps(),o=new Intl.NumberFormat(e,{style:"currency",currency:this._getFinalCurrency()||this.getCurrencyByLocaleCode(),currencyDisplay:t}).formatToParts(1234.5);for(const r of o)r.type==="decimal"&&(this._decimalPointSymbol=r.value),r.type==="currency"&&(this._currencySymbol=r.value)}handleInputFocus(e){const t=this.getState("value");if(t!==""&&this._isScientificNotation()&&!this._isCurrency()){const o=Re(t);if(/e/i.test(o)&&/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)[eE][+-]?\d+$/.test(o.trim())){const s=this.doParse(o,!1,!1,!1);if(this.isValidNumber(s)){const l=this.doFormat(s,!0,!1);this._adapter.setValue(l)}}}this._adapter.recordCursorPosition(),this._adapter.setFocusing(!0,null),this._adapter.setClickUpOrDown(!1),this._adapter.notifyFocus(e)}handleInputChange(e,t){const o=this.doParse(e,!0,!0,!0),r=this.doParse(e,!1,!1,!1),s=this.afterParser(e);this._adapter.recordCursorPosition();let l,c=r,u=e;if(e==="")this.isControlled()||(c=null);else if(this.isValidNumber(r)&&this.isValidNumber(o))l=r,u=this.doFormat(r,!1);else{if(typeof r=="number"&&!isNaN(r)){u=this.doFormat(r,!1);const p=s.lastIndexOf("."),d=s.length-1-p,m=this._getPrecLen(r);if(m){if(m-1?s.slice(p):"";u+=f}c=r}else u=this.doFormat(s,!1);l=this.isControlled()?u:s}!this.isControlled()&&(c===null||typeof c=="number"&&!isNaN(c))&&this._adapter.setNumber(c),this._adapter.setValue(this.isControlled()&&!this._isCurrency()?u:this.doFormat(s,!1),()=>{this._adapter.restoreCursor()}),this.notifyChange(l,t)}handleInputKeyDown(e){const t=e.keyCode;if(t===sn.UP||t===sn.DOWN){this._adapter.setClickUpOrDown(!0),this._adapter.recordCursorPosition();const o=t===sn.UP?this.add(null,e):this.minus(null,e);this._doInput(o,e,()=>{this._adapter.restoreCursor()}),e.preventDefault()}this._adapter.notifyKeyDown(e)}handleInputBlur(e){const t=Re(this.getState("value"));let o=this.getState("number");if(o!=null||t!=null&&t!==""){const r=this.doParse(t,!1,!0,!0);let s=!1,l=!1,c,u;if(this.isValidNumber(r)&&o!==r&&(c=r,this.isControlled()||(o=c),s=!0),!this.isValidNumber(r)){const d=parseFloat(t);if(isNaN(d)){if(typeof o=="number"&&!isNaN(o)){const m=this.fetchMinOrMax(o);m!==o&&(c=m,this.isControlled()||(o=c),s=!0)}}else{const m=this.fetchMinOrMax(d);m!==o&&(c=m,this.isControlled()||(o=c),s=!0)}}const p=this.doFormat(o,!0,!0);if(p!==t&&(u=p,l=!0),l||s){const d=u??c;u!=null&&this._adapter.setValue(u),c!=null&&(this._isControlledComponent("value")||this._adapter.setNumber(c)),this.notifyChange(d,e)}}this._adapter.setFocusing(!1),this._adapter.notifyBlur(e)}handleInputMouseEnter(e){this._adapter.setHovering(!0)}handleInputMouseLeave(e){this._adapter.setHovering(!1)}handleInputMouseMove(e){this._adapter.setHovering(!0)}handleMouseUp(e){this._unregisterInterval(),this._unregisterTimer(),this._adapter.unregisterGlobalEvent("mouseup")}handleUpClick(e){const{readonly:t}=this.getProps();!this._isMouseButtonLeft(e)||t||(this._adapter.setClickUpOrDown(!0),e&&(this._persistEvent(e),e.stopPropagation(),this._preventDefault(e)),this.upClick(e),this._registerTimer(()=>{this._registerInterval(()=>{this.upClick(e)})}))}handleDownClick(e){const{readonly:t}=this.getProps();!this._isMouseButtonLeft(e)||t||(this._adapter.setClickUpOrDown(!0),e&&(this._persistEvent(e),e.stopPropagation(),this._preventDefault(e)),this.downClick(e),this._registerTimer(()=>{this._registerInterval(()=>{this.downClick(e)})}))}_isMouseButtonLeft(e){return Pt(e,"button")===Ye.MOUSE_BUTTON_LEFT}_preventDefault(e){const t=this._adapter.getProp("keepFocus"),o=this._adapter.getProp("innerButtons");(t||o)&&e.preventDefault()}handleMouseLeave(e){this._adapter.registerGlobalEvent("mouseup",()=>{this.handleMouseUp(e)})}upClick(e){const t=this.add(null,e);this._doInput(t,e),this._adapter.notifyUpClick(t,e)}downClick(e){const t=this.minus(null,e);this._doInput(t,e),this._adapter.notifyDownClick(t,e)}_setInitValue(){const{defaultValue:e,value:t}=this.getProps(),o=this._isControlledComponent("value")?t:e;let r=o;typeof o=="number"&&!this._isCurrency()?r=this.doFormat(o):this._isCurrency()||(r=Re(o));const s=this.doParse(r,!1,!0,!0);let l=null;typeof s=="number"&&!isNaN(s)&&(l=s);const c=typeof l=="number"?this.doFormat(l,!0,!0):"";this._adapter.setNumber(l),this._adapter.setValue(c),De(c)&&c!==String(o??"")&&this.notifyChange(c,null)}add(e,t){const r=t&&t.shiftKey?this.getProp("shiftStep"):this.getProp("step");e=e==null?r:Number(e);const s=Math.abs(rt(e)),l=this.getState("number");let c=this.toNumber(l)||0;const u=this.getProp("min"),p=this.getProp("max"),d=this._getPrecLen(u),m=this._getPrecLen(p),f=this._getPrecLen(c),b=this._getPrecLen(e),y=Math.pow(10,Math.max(d,m,f,b));return e<0?Math.abs(Or(u,c))>=s&&(c=Math.round(c*y+e*y)/y):e>0&&Math.abs(Or(p,c))>=s&&(c=Math.round(c*y+e*y)/y),typeof u=="number"&&u>c&&(c=u),typeof p=="number"&&p=1?t:15}return 15}_toScientificNotation(e){const t=this._getScientificNotationThreshold(),o=Math.abs(e),r=String(o),s=/e/i.test(r),l=r.replace(/[.\-+eE]/g,"").replace(/^0+/,"");if((s||l.length>=t)&&o!==0){const c=Math.max(0,Math.min(100,Math.floor(t)-1));return e.toExponential(c).replace(/(\.\d*?)0+e/,"$1e").replace(/\.e/,"e")}return String(e)}doFormat(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const{formatter:r}=this.getProps();let s;if(this._isCurrency()&&o?s=this.formatCurrency(e):t?s=this._adjustPrec(e):s=Re(e),this._isScientificNotation()&&o&&!this._isCurrency()){const l=typeof e=="number"?e:parseFloat(s);!isNaN(l)&&isFinite(l)&&(s=this._toScientificNotation(l))}return typeof r=="function"&&(s=r(s)),s}fetchMinOrMax(e){const{min:t,max:o}=this.getProps();return eo?o:e}parseInternationalCurrency(e){let t=e.replace(this._currencySymbol,"").replace(new RegExp(`[^\\d${this._decimalPointSymbol}\\-]`,"g"),"");return this._decimalPointSymbol&&this._decimalPointSymbol!=="."&&(t=t.replace(this._decimalPointSymbol,".")),parseFloat(t)}doParse(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(this._isCurrency()&&typeof e=="string"&&(e=this.parseInternationalCurrency(e)),typeof e=="number")return r&&(e=this.fetchMinOrMax(e)),o&&(e=this._adjustPrec(e)),rt(e);const s=this.getProp("parser");if(typeof s=="function"){const l=s(e);e=typeof l=="number"?Re(l):l}if(typeof e=="string"&&/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)[eE][+-]?\d+$/.test(e.trim())){const l=parseFloat(e.trim());if(!isNaN(l))return r?this.fetchMinOrMax(l):o?rt(this._adjustPrec(l)):l}if(t&&typeof e=="string"){const l=e.indexOf(".")===-1||e.indexOf(".")>-1&&(e==="0"||e.lastIndexOf("0")u===".").length<2;if(!l||!c)return NaN}return o&&(e=this._adjustPrec(e)),typeof e=="string"&&e.length?r?this.fetchMinOrMax(rt(e)):rt(e):NaN}afterParser(e){const t=this.getProp("parser");return Re(typeof e=="string"&&typeof t=="function"?t(e):e)}toNumber(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(typeof e=="number")return e;if(typeof e=="string"){const{parser:o}=this.getProps();if(this._isCurrency()&&(e=this.parseInternationalCurrency(e)),typeof o=="function"){const r=o(e);e=typeof r=="number"?Re(r):r}t&&(e=this._adjustPrec(e))}return rt(e)}isValidNumber(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(typeof e=="number"&&!isNaN(e)){const{min:o,max:r,precision:s}=this.getProps(),l=this._getPrecLen(e),c=t?typeof s=="number"&&l<=s||typeof s!="number":!0;if(e>=o&&e<=r&&c)return!0}return!1}isValidString(e){if(typeof e=="string"&&e.length){const t=this.doParse(e);return this.isValidNumber(t)}return!1}notifyChange(e,t){if(e==null||e==="")this._adapter.notifyChange("",t);else{const o=this.toNumber(e,!0);typeof o=="number"&&!isNaN(o)?(this._adapter.notifyChange(o,t),this.notifyNumberChange(o,t)):this._adapter.notifyChange(this.afterParser(e),t)}}notifyNumberChange(e,t){const{number:o}=this.getStates();this.isValidNumber(e)&&e!==o&&this._adapter.notifyNumberChange(e,t)}updateStates(e,t){this._adapter.updateStates(e,t)}getCurrencyByLocaleCode(){const{localeCode:e}=this.getProps(),t={"zh-CN":"CNY","zh-HK":"HKD","zh-TW":"TWD","ja-JP":"JPY","ko-KR":"KRW","th-TH":"THB","vi-VN":"VND","ms-MY":"MYR","id-ID":"IDR","hi-IN":"INR","ar-SA":"SAR","en-GB":"GBP","de-DE":"EUR","fr-FR":"EUR","it-IT":"EUR","es-ES":"EUR","pt-PT":"EUR","ru-RU":"RUB","en-US":"USD","en-CA":"CAD","es-MX":"MXN","pt-BR":"BRL","es-AR":"ARS","en-AU":"AUD","en-NZ":"NZD","en-ZA":"ZAR","ar-EG":"EGP"};if(t[e])return t[e];const o=e.split("-")[0],r={en:"USD",zh:"CNY",es:"EUR",fr:"EUR",de:"EUR",it:"EUR",ja:"JPY",ko:"KRW",ru:"RUB",ar:"SAR"};return r[o]?r[o]:"USD"}}var Lc=function(n,e){var t={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&e.indexOf(o)<0&&(t[o]=n[o]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(n);rthis.setState({value:t},o),setNumber:(t,o)=>this.setState({number:t},o),setFocusing:(t,o)=>this.setState({focusing:t},o),setHovering:t=>this.setState({hovering:t}),notifyChange:function(){return e.props.onChange(...arguments)},notifyNumberChange:function(){return e.props.onNumberChange(...arguments)},notifyBlur:t=>this.props.onBlur(t),notifyFocus:t=>this.props.onFocus(t),notifyUpClick:(t,o)=>this.props.onUpClick(t,o),notifyDownClick:(t,o)=>this.props.onDownClick(t,o),notifyKeyDown:t=>this.props.onKeyDown(t),registerGlobalEvent:(t,o)=>{t&&typeof o=="function"&&(this.adapter.unregisterGlobalEvent(t),this.adapter.setCache(t,o),document.addEventListener(t,o))},unregisterGlobalEvent:t=>{if(t){const o=this.adapter.getCache(t);document.removeEventListener(t,o),this.adapter.setCache(t,null)}},getInputCharacter:t=>this.inputNode.value[t],recordCursorPosition:()=>{try{this.inputNode&&(this.cursorStart=this.inputNode.selectionStart,this.cursorEnd=this.inputNode.selectionEnd,this.currentValue=this.inputNode.value,this.cursorBefore=this.inputNode.value.substring(0,this.cursorStart),this.cursorAfter=this.inputNode.value.substring(this.cursorEnd))}catch(t){console.warn(t)}},restoreByAfter:t=>{if(Jt(t))return!1;const o=this.inputNode.value,r=o.lastIndexOf(t);return r===-1?!1:r+t.length===o.length?(this.adapter.fixCaret(r,r),!0):!1},restoreCursor:function(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:e.cursorAfter;return Jt(t)?!1:Array.prototype.some.call(t,(o,r)=>{const s=t.substring(r);return e.adapter.restoreByAfter(s)})},fixCaret:(t,o)=>{if(!(t===void 0||o===void 0||!this.inputNode||!this.inputNode.value))try{const r=this.inputNode.selectionStart,s=this.inputNode.selectionEnd;(t!==r||o!==s)&&this.inputNode.setSelectionRange(t,o)}catch{}},setClickUpOrDown:t=>{this.clickUpOrDown=t},updateStates:(t,o)=>{this.setState(t,o)}})}constructor(e){super(e),this.setInputRef=o=>{const{forwardedRef:r}=this.props;this.inputNode=o,r&&typeof r=="object"?r.current=o:typeof r=="function"&&r(o)},this.handleInputFocus=o=>this.foundation.handleInputFocus(o),this.handleInputChange=(o,r)=>this.foundation.handleInputChange(o,r),this.handleInputBlur=o=>this.foundation.handleInputBlur(o),this.handleInputKeyDown=o=>this.foundation.handleInputKeyDown(o),this.handleInputMouseEnter=o=>this.foundation.handleInputMouseEnter(o),this.handleInputMouseLeave=o=>this.foundation.handleInputMouseLeave(o),this.handleInputMouseMove=o=>this.foundation.handleInputMouseMove(o),this.handleUpClick=o=>this.foundation.handleUpClick(o),this.handleDownClick=o=>this.foundation.handleDownClick(o),this.handleMouseUp=o=>this.foundation.handleMouseUp(o),this.handleMouseLeave=o=>this.foundation.handleMouseLeave(o),this.renderButtons=()=>{const{prefixCls:o,disabled:r,innerButtons:s,max:l,min:c}=this.props,{hovering:u,focusing:p,number:d}=this.state,m=r||d===l,f=r||d===c,b=I(`${o}-number-suffix-btns`,{[`${o}-number-suffix-btns-inner`]:s,[`${o}-number-suffix-btns-inner-hover`]:s&&u&&!p}),y=I(`${o}-number-button`,`${o}-number-button-up`,{[`${o}-number-button-up-disabled`]:r,[`${o}-number-button-up-not-allowed`]:m}),S=I(`${o}-number-button`,`${o}-number-button-down`,{[`${o}-number-button-down-disabled`]:r,[`${o}-number-button-down-not-allowed`]:f});return g.createElement("div",{className:b},g.createElement("span",{className:y,onMouseDown:m?$:this.handleUpClick,onMouseUp:this.handleMouseUp,onMouseLeave:this.handleMouseLeave},g.createElement(da,{size:"extra-small"})),g.createElement("span",{className:S,onMouseDown:f?$:this.handleDownClick,onMouseUp:this.handleMouseUp,onMouseLeave:this.handleMouseLeave},g.createElement(ua,{size:"extra-small"})))},this.renderSuffix=()=>{const{innerButtons:o,suffix:r}=this.props,{hovering:s,focusing:l}=this.state;return o&&(s||l)?this.renderButtons():r},this.foundation=new Mc(this.adapter),this.inputNode=null,this.clickUpOrDown=!1;const t=this._getInitState(e);this.state={value:t.value,number:t.number,focusing:!!e.autofocus||!1,hovering:!1}}_getInitState(e){const t=this.isControlled("value")?e.value:e.defaultValue;if(Jt(t)||t==="")return{value:"",number:null};if(e.currency===!0||typeof e.currency=="string"&&e.currency.trim()!==""){if(typeof t=="number"){const l=this.foundation.doParse(t,!1,!0,!0);return this.foundation.isValidNumber(l)?{value:this.foundation.doFormat(l,!0,!1),number:l}:{value:"",number:null}}return{value:String(t),number:null}}let r=t;typeof t=="number"&&(r=this.foundation.doFormat(t));const s=this.foundation.doParse(r,!1,!0,!0);return this.foundation.isValidNumber(s)?{value:this.foundation.doFormat(s,!0,!0),number:s}:{value:"",number:null}}componentDidUpdate(e){const{value:t,preventScroll:o}=this.props,{focusing:r}=this.state;let s;if(t!==e.value&&!kc(t,e.value)){if(Jt(t)||t==="")s="",this.foundation.updateStates({value:s,number:null});else{let l=t;typeof t=="number"&&(l=this.foundation.doFormat(t));const c=this.foundation.doParse(l,!1,!0,!0),u=typeof t=="number"?t:this.foundation.doParse(l,!1,!1,!1);if(r)if(this.foundation.isValidNumber(c)&&c!==this.state.number){const p={number:c};this.clickUpOrDown&&(p.value=this.foundation.doFormat(p.number,!0),s=p.value),this.foundation.updateStates(p,()=>this.adapter.restoreCursor())}else Sc(u)?this.foundation.updateStates({value:l}):(s=this.foundation.doFormat(u,!1),this.foundation.updateStates({value:s}));else this.foundation.isValidNumber(c)?(s=this.foundation.doFormat(c,!0,!0),this.foundation.updateStates({number:c,value:s})):(s="",this.foundation.updateStates({number:null,value:s}))}if(s&&De(s)&&s!==String(this.props.value))if(this.foundation._isCurrency()){const l=this.foundation.doParse(s),c=typeof this.props.value=="string"?this.foundation.doParse(this.props.value):this.props.value;l!==c&&this.foundation.notifyChange(s,null)}else this.foundation.notifyChange(s,null)}this.clickUpOrDown&&this.props.keepFocus&&this.state.focusing&&document.activeElement!==this.inputNode&&this.inputNode.focus({preventScroll:o})}render(){const e=this.props,{disabled:t,className:o,prefixCls:r,min:s,max:l,step:c,shiftStep:u,precision:p,formatter:d,parser:m,forwardedRef:f,onUpClick:b,onDownClick:y,pressInterval:S,pressTimeout:w,suffix:C,size:k,hideButtons:_,innerButtons:x,style:j,onNumberChange:v,keepFocus:O,defaultValue:E,defaultCurrency:D,currency:P,currencyDisplay:R,minimumFractionDigits:L,maximumFractionDigits:z,showCurrencySymbol:W,localeCode:A}=e,M=Lc(e,["disabled","className","prefixCls","min","max","step","shiftStep","precision","formatter","parser","forwardedRef","onUpClick","onDownClick","pressInterval","pressTimeout","suffix","size","hideButtons","innerButtons","style","onNumberChange","keepFocus","defaultValue","defaultCurrency","currency","currencyDisplay","minimumFractionDigits","maximumFractionDigits","showCurrencySymbol","localeCode"]),{value:Z,number:ue}=this.state,we=I(o,`${r}-number`,{[`${r}-number-size-${k}`]:k}),T=this.renderButtons(),F={"aria-disabled":t,step:c};return ue&&(F["aria-valuenow"]=ue),l!==1/0&&(F["aria-valuemax"]=l),s!==-1/0&&(F["aria-valuemin"]=s),g.createElement("div",{className:we,style:j,onMouseMove:se=>this.handleInputMouseMove(se),onMouseEnter:se=>this.handleInputMouseEnter(se),onMouseLeave:se=>this.handleInputMouseLeave(se)},g.createElement(ut,Object.assign({role:"spinbutton"},F,M,{size:k,disabled:t,ref:this.setInputRef,value:Z,onFocus:this.handleInputFocus,onChange:this.handleInputChange,onBlur:this.handleInputBlur,onKeyDown:this.handleInputKeyDown,suffix:this.renderSuffix()})),_||x?null:T)}}an.propTypes={"aria-label":h.string,"aria-labelledby":h.string,"aria-invalid":h.bool,"aria-errormessage":h.string,"aria-describedby":h.string,"aria-required":h.bool,autofocus:h.bool,clearIcon:h.node,className:h.string,defaultValue:h.oneOfType([h.number,h.string]),disabled:h.bool,formatter:h.func,forwardedRef:h.any,hideButtons:h.bool,innerButtons:h.bool,insetLabel:h.node,insetLabelId:h.string,keepFocus:h.bool,max:h.number,min:h.number,parser:h.func,precision:h.number,prefixCls:h.string,pressInterval:h.number,pressTimeout:h.number,preventScroll:h.bool,shiftStep:h.number,showCurrencySymbol:h.bool,step:h.number,style:h.object,suffix:h.any,value:h.oneOfType([h.number,h.string]),scientificNotation:h.oneOfType([h.bool,h.object]),onBlur:h.func,onChange:h.func,onDownClick:h.func,onKeyDown:h.func,onNumberChange:h.func,onUpClick:h.func};an.defaultProps={forwardedRef:$,innerButtons:!1,keepFocus:!1,max:1/0,min:-1/0,prefixCls:Oc.PREFIX,pressInterval:Ye.DEFAULT_PRESS_TIMEOUT,pressTimeout:Ye.DEFAULT_PRESS_TIMEOUT,shiftStep:Ye.DEFAULT_SHIFT_STEP,showCurrencySymbol:!0,size:Pc.DEFAULT_SIZE,step:Ye.DEFAULT_STEP,onBlur:$,onChange:$,onDownClick:$,onFocus:$,onKeyDown:$,onNumberChange:$,onUpClick:$};const Hn=Yl(g.forwardRef(function(e,t){return g.createElement(Zs,{componentName:"InputNumber"},(o,r,s,l)=>g.createElement(an,Object.assign({localeCode:r,defaultCurrency:l},e,{forwardedRef:t})))}),an),fi={PREFIX:`${Te}-radio`},Ic={PREFIX:`${Te}-radioGroup`},oe={DIRECTION_SET:["horizontal","vertical"],DEFAULT_DIRECTION:"horizontal",MODE:["advanced",""],TYPE_DEFAULT:"default",TYPE_BUTTON:"button",TYPE_CARD:"card",TYPE_PURECARD:"pureCard",BUTTON_SIZE:["middle","small","large"]};class Tc extends ge{constructor(e){super(Object.assign({},e))}init(){const e=this._getDisplayValue();this._setValue(e)}_getDisplayValue(){const{value:e,defaultValue:t}=this.getProps();let o;return"value"in this.getProps()?o=e:"defaultValue"in this.getProps()&&(o=t),o}handleChange(e){const t=this.getProp("mode"),o=this.getState("value"),{checked:r,value:s}=e.target,l=this._adapter.isInProps("value"),c=Object.assign(Object.assign({},e),{target:Object.assign(Object.assign({},e.target),{value:s})});t==="advanced"&&!r&&(c.target.value=void 0),l||(t==="advanced"&&!r?this._setValue(void 0):this._setValue(s)),(t==="advanced"||o!==s)&&this._adapter.notifyChange(c)}handlePropValueChange(e){this._setValue(e)}_setValue(e){this._adapter.setValue(e)}destroy(){}}const Vo=g.createContext(null);class Rc extends ge{constructor(){super(...arguments),this.handleFocusVisible=e=>{const{target:t}=e;try{t.matches(":focus-visible")&&this._adapter.setFocusVisible(!0)}catch{zs(!0,"Warning: [Semi Radio] The current browser does not support the focus-visible")}},this.handleBlur=()=>{this._adapter.setFocusVisible(!1)}}init(){const{children:e,extra:t,extraId:o,addonId:r}=this._adapter.getProps();e&&!r&&this._adapter.setAddonId(),t&&!o&&this._adapter.setExtraId()}setHover(e){this._adapter.setHover(e)}setChecked(e){this._adapter.setChecked(e)}}class Nc extends ge{constructor(e){super(Object.assign({},e))}init(){const e=this._adapter.getProp("checked"),t=this._adapter.getProp("defaultChecked");this.setChecked(e||t)}setChecked(e){this._adapter.setNativeControlChecked(e)}getChecked(){return this._adapter.getProp("checked")}handleChange(e){const t="checked"in this.getProps(),{checked:o}=e.target,r=()=>{e.stopPropagation()},s=()=>{e.preventDefault()},l={target:Object.assign(Object.assign({},this.getProps()),{checked:o}),stopPropagation:r,preventDefault:s};t?this._adapter.notifyChange(l):(this.setChecked(o),this._adapter.notifyChange(l))}destroy(){}}class gn extends de{constructor(e){super(e),this.state={checked:!1},this.foundation=new Nc(this.adapter),this.onChange=this.onChange.bind(this)}get adapter(){return Object.assign(Object.assign({},super.adapter),{setNativeControlChecked:e=>{this.setState({checked:e})},notifyChange:e=>{this.props.onChange(e)}})}componentDidMount(){this.foundation.init()}componentDidUpdate(e){e.checked!==this.props.checked&&this.foundation.setChecked(this.props.checked)}componentWillUnmount(){this.foundation.destroy()}blur(){this.inputEntity.blur()}focus(){const{preventScroll:e}=this.props;this.inputEntity.focus({preventScroll:e})}onChange(e){this.foundation.handleChange(e)}render(){const{disabled:e,mode:t,autoFocus:o,name:r,isButtonRadio:s,isPureCardRadioGroup:l,addonId:c,extraId:u,"aria-label":p,focusInner:d,onInputFocus:m,onInputBlur:f}=this.props,{checked:b}=this.state,y=this.props.prefixCls||fi.PREFIX,S=I({[`${y}-inner`]:!0,[`${y}-inner-checked`]:!!b,[`${y}-inner-buttonRadio`]:s,[`${y}-inner-pureCardRadio`]:l}),w=I({[`${y}-focus`]:d,[`${y}-focus-border`]:d&&!b,[`${y}-inner-display`]:!s});return g.createElement("span",{className:S},g.createElement("input",{ref:C=>{this.inputEntity=C},autoFocus:o,type:t==="advanced"?"checkbox":"radio",checked:!!b,disabled:e,onChange:this.onChange,name:r,"aria-label":p,"aria-labelledby":c,"aria-describedby":u,onFocus:m,onBlur:f}),g.createElement("span",{className:w},b?g.createElement(dl,null):null))}}gn.contextType=Vo;gn.propTypes={checked:h.bool,disabled:h.bool,isButtonRadio:h.bool,onChange:h.func,mode:h.oneOf(["advanced",""]),"aria-label":h.string,focusInner:h.bool,onInputFocus:h.func,onInputBlur:h.func,preventScroll:h.bool};gn.defaultProps={onChange:$,isButtonRadio:!1};var Dc=function(n,e){var t={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&e.indexOf(o)<0&&(t[o]=n[o]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(n);r{const{onChange:o}=this.props;if(this.isInGroup()){const{radioGroup:r}=this.context;r.onChange&&r.onChange(t)}!("checked"in this.props)&&this.foundation.setChecked(t.target.checked),o&&o(t)},this.handleMouseEnter=t=>{this.props.onMouseEnter(t),this.foundation.setHover(!0)},this.handleMouseLeave=t=>{this.props.onMouseLeave(t),this.foundation.setHover(!1)},this.handleFocusVisible=t=>{this.foundation.handleFocusVisible(t)},this.handleBlur=t=>{this.foundation.handleBlur()},this.state={hover:!1,addonId:e.addonId,extraId:e.extraId,checked:e.checked||e.defaultChecked||!1},this.foundation=new Rc(this.adapter),this.radioEntity=null}componentDidUpdate(e){this.props.checked!==e.checked&&(Fs(this.props.checked)?this.foundation.setChecked(!1):Vl(this.props.checked)&&this.foundation.setChecked(this.props.checked))}get adapter(){return Object.assign(Object.assign({},super.adapter),{setHover:e=>{this.setState({hover:e})},setAddonId:()=>{this.setState({addonId:jo({prefix:"addon"})})},setChecked:e=>{this.setState({checked:e})},setExtraId:()=>{this.setState({extraId:jo({prefix:"extra"})})},setFocusVisible:e=>{this.setState({focusVisible:e})}})}isInGroup(){return this.context&&this.context.radioGroup}focus(){this.radioEntity.focus()}blur(){this.radioEntity.blur()}render(){const e=this.props,{addonClassName:t,addonStyle:o,disabled:r,style:s,className:l,prefixCls:c,displayMode:u,children:p,extra:d,mode:m,type:f,value:b,name:y}=e,S=Dc(e,["addonClassName","addonStyle","disabled","style","className","prefixCls","displayMode","children","extra","mode","type","value","name"]);let w,C,k,_,x,j,v,O,E;const{hover:D,addonId:P,extraId:R,focusVisible:L,checked:z}=this.state,W={checked:z,disabled:r};this.isInGroup()?(w=this.context.radioGroup.value===b,C=r||this.context.radioGroup.disabled,k=this.context.mode,_=this.context.radioGroup.isButtonRadio,x=this.context.radioGroup.isCardRadio,j=this.context.radioGroup.isPureCardRadio,O=this.context.radioGroup.buttonSize,E=c||this.context.radioGroup.prefixCls,W.checked=w,W.disabled=C):(w=z,C=r,k=m,v=f==="button",E=c,_=f===oe.TYPE_BUTTON,j=f===oe.TYPE_PURECARD,x=f===oe.TYPE_CARD||j);const A=typeof _>"u"?v:_,M=E||fi.PREFIX,Z=x||j||A,ue=I(M,{[`${M}-disabled`]:C,[`${M}-checked`]:w,[`${M}-${u}`]:!!u,[`${M}-buttonRadioComponent`]:v,[`${M}-buttonRadioGroup`]:_,[`${M}-buttonRadioGroup-${O}`]:_&&O,[`${M}-cardRadioGroup`]:x,[`${M}-cardRadioGroup_disabled`]:C&&x,[`${M}-cardRadioGroup_checked`]:x&&w&&!C,[`${M}-cardRadioGroup_checked_disabled`]:x&&w&&C,[`${M}-cardRadioGroup_hover`]:x&&!w&&D&&!C,[l]:!!l,[`${M}-focus`]:L&&(x||j)}),we=this.isInGroup()&&this.context.radioGroup.name,T=I({[`${M}-addon`]:!A,[`${M}-addon-buttonRadio`]:A,[`${M}-addon-buttonRadio-checked`]:A&&w,[`${M}-addon-buttonRadio-disabled`]:A&&C,[`${M}-addon-buttonRadio-hover`]:A&&!w&&!C&&D,[`${M}-addon-buttonRadio-${O}`]:A&&O,[`${M}-focus`]:L&&A},t),F=()=>!p&&!d?null:g.createElement("div",{className:I([`${M}-content`,{[`${M}-isCardRadioGroup_content`]:x}])},p?g.createElement("span",{className:T,style:o,id:P,"x-semi-prop":"children"},p):null,d&&!A?g.createElement("div",{className:`${M}-extra`,id:R,"x-semi-prop":"extra"},d):null);return g.createElement("label",Object.assign({style:s,className:ue,onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave},this.getDataAttr(S)),g.createElement(gn,Object.assign({},this.props,W,{mode:k,name:y??we,isButtonRadio:A,isPureCardRadioGroup:j,onChange:this.onChange,ref:Q=>{this.radioEntity=Q},addonId:p&&P,extraId:d&&R,focusInner:L&&!Z,onInputFocus:this.handleFocusVisible,onInputBlur:this.handleBlur})),F())}}et.contextType=Vo;et.propTypes={autoFocus:h.bool,checked:h.bool,defaultChecked:h.bool,value:h.any,style:h.object,className:h.string,disabled:h.bool,prefixCls:h.string,displayMode:h.oneOf(["vertical",""]),onChange:h.func,onMouseEnter:h.func,onMouseLeave:h.func,mode:h.oneOf(oe.MODE),extra:h.node,addonStyle:h.object,addonClassName:h.string,type:h.oneOf([oe.TYPE_DEFAULT,oe.TYPE_BUTTON,oe.TYPE_CARD,oe.TYPE_PURECARD]),"aria-label":h.string,preventScroll:h.bool};et.defaultProps={autoFocus:!1,defaultChecked:!1,value:void 0,style:void 0,onMouseEnter:$,onMouseLeave:$,mode:"",type:"default"};et.elementType="Radio";var $c=function(n,e){var t={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&e.indexOf(o)<0&&(t[o]=n[o]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(n);r{this.foundation.handleChange(t)},this.getFormatName=()=>this.props.name||"default",this.state={value:e.value||e.defaultValue},this.foundation=new Tc(this.adapter)}componentDidMount(){this.foundation.init()}componentDidUpdate(e){typeof e.value=="number"&&isNaN(e.value)&&typeof this.props.value=="number"&&isNaN(this.props.value)||e.value!==this.props.value&&this.foundation.handlePropValueChange(this.props.value)}componentWillUnmount(){this.foundation.destroy()}get adapter(){return Object.assign(Object.assign({},super.adapter),{setValue:e=>{this.setState({value:e})},getProps:()=>this.props,isInProps:e=>e in this.props,notifyChange:e=>{this.props.onChange&&this.props.onChange(e)}})}render(){const e=this.props,{children:t,options:o,mode:r,prefixCls:s,className:l,style:c,direction:u,type:p,buttonSize:d,id:m}=e,f=$c(e,["children","options","mode","prefixCls","className","style","direction","type","buttonSize","id"]),b=p===oe.TYPE_BUTTON,y=p===oe.TYPE_PURECARD,S=p===oe.TYPE_CARD||y,w=p===oe.TYPE_DEFAULT,C=s||Ic.PREFIX,k=I(l,{[C]:!0,[`${C}-wrapper`]:!0,[`${C}-${u}`]:u&&!b,[`${C}-${u}-default`]:u&&w,[`${C}-${u}-card`]:u&&S,[`${C}-buttonRadio`]:b}),_=this.state.value;let x;return o?x=(o||[]).map((j,v)=>typeof j=="string"?g.createElement(et,{key:v,disabled:this.props.disabled,value:j},j):g.createElement(et,{key:v,disabled:j.disabled||this.props.disabled,value:j.value,extra:j.extra,className:j.className,style:j.style,addonId:j.addonId,addonStyle:j.addonStyle,addonClassName:j.addonClassName,extraId:j.extraId},j.label)):t&&(x=g.Children.map(t,(j,v)=>g.isValidElement(j)?g.cloneElement(j,{key:v}):null)),g.createElement("div",Object.assign({className:k,style:c,id:m,"aria-label":this.props["aria-label"],"aria-invalid":this.props["aria-invalid"],"aria-errormessage":this.props["aria-errormessage"],"aria-labelledby":this.props["aria-labelledby"],"aria-describedby":this.props["aria-describedby"],"aria-required":this.props["aria-required"]},this.getDataAttr(f)),g.createElement(Vo.Provider,{value:{radioGroup:{onChange:this.onChange,value:_,disabled:this.props.disabled,name:this.getFormatName(),isButtonRadio:b,isCardRadio:S,isPureCardRadio:y,buttonSize:d,prefixCls:s},mode:r}},x))}}Ke.propTypes={defaultValue:h.any,disabled:h.bool,name:h.string,options:h.array,buttonSize:h.oneOf(oe.BUTTON_SIZE),type:h.oneOf([oe.TYPE_DEFAULT,oe.TYPE_BUTTON,oe.TYPE_CARD,oe.TYPE_PURECARD]),value:h.any,onChange:h.func,children:h.node,prefixCls:h.string,className:h.string,style:h.object,direction:h.oneOf(oe.DIRECTION_SET),mode:h.oneOf(oe.MODE),"aria-label":h.string,"aria-describedby":h.string,"aria-errormessage":h.string,"aria-invalid":h.bool,"aria-labelledby":h.string,"aria-required":h.bool,id:h.string};Ke.defaultProps={disabled:!1,onChange:$,direction:oe.DEFAULT_DIRECTION,mode:"",type:oe.TYPE_DEFAULT,buttonSize:"middle"};class Me extends et{}Me.Group=Ke;class Ko extends ge{constructor(e){super(Object.assign(Object.assign({},Ko.defaultAdapter),e)),this.handleMouseInSideChange=t=>{this._adapter.handleMouseInSideChange(t)},this.getInputWrapperRect=()=>this._adapter.getInputWrapperRect()}hasToast(e){return this._adapter.getState("list").map(o=>{let{id:r}=o;return r}).includes(e)}addToast(e){const t=this._adapter.getState("list");t.push(e),this._adapter.updateToast(t,[],[])}updateToast(e,t){let o=this._adapter.getState("list");o=o.map(s=>s.id===e?Object.assign(Object.assign({},s),t):s);const r=o.filter(s=>s.id===e);this._adapter.updateToast(o,[],r)}removeToast(e){let t=this._adapter.getState("list");const o=[];t=t.filter(r=>r.id===e?(o.push(r),!1):!0),this._adapter.updateToast(t,o,[])}destroyAll(){const e=this._adapter.getState("list");e.length>0&&this._adapter.updateToast([],e,[])}}const Pr=`${Te}-toast`,ct={PREFIX:Pr,WRAPPER:`${Pr}-wrapper`},Ot={types:["warning","success","info","error","default"],themes:["normal","light"],directions:["ltr","rtl"]},Ac={duration:3};class Wo extends ge{constructor(e){super(Object.assign(Object.assign({},Wo.defaultAdapter),e)),this._timer=null,this._id=null}init(){this.startCloseTimer_(),this._id=this._adapter.getProp("id")}destroy(){this.clearCloseTimer_()}startCloseTimer_(){const e=this._adapter.getProp("duration");e&&Io(e)&&(this._timer=setTimeout(()=>{this.close()},e*1e3))}close(e){e&&e.stopPropagation(),this._adapter.notifyWrapperToRemove(this._id),this._adapter.notifyClose()}clearCloseTimer_(){this._timer&&(clearTimeout(this._timer),this._timer=null)}restartCloseTimer(){this.clearCloseTimer_(),this.startCloseTimer_()}}const Pe=ct.PREFIX;let tt=class extends de{constructor(e){super(e),this.toastEle=g.createRef(),this.clearCloseTimer=()=>{this.foundation.clearCloseTimer_()},this.startCloseTimer=()=>{this.foundation.startCloseTimer_()},this.restartCloseTimer=()=>{this.foundation.restartCloseTimer()},this.state={},this.foundation=new Wo(this.adapter)}get adapter(){return Object.assign(Object.assign({},super.adapter),{notifyWrapperToRemove:e=>{this.props.close(e)},notifyClose:()=>{this.props.onClose()}})}componentDidMount(){this.foundation.init()}componentWillUnmount(){this.foundation.destroy()}close(e){this.foundation.close(e)}renderIcon(){const{type:e,icon:t}=this.props,r={warning:g.createElement(Qs,null),success:g.createElement(Ks,null),info:g.createElement(Gs,null),error:g.createElement(Ws,null)}[e],s="large",l=I(`${Pe}-icon`,`${Pe}-icon-${e}`);return t?Ge(t)?g.cloneElement(t,{size:s,className:`${Pe}-icon`}):t:e&&r?g.cloneElement(r,{size:s,className:l}):null}render(){const{content:e,type:t,theme:o,showClose:r,textMaxWidth:s,className:l,style:c}=this.props,u=this.props.direction||this.context.direction,p=I(Pe,l,{[`${Pe}-${t}`]:!0,[`${Pe}-${o}`]:o==="light",[`${Pe}-rtl`]:u==="rtl"}),d={};d.maxWidth=s;const m="borderless",f="small",b=this.props.positionInList?this.props.positionInList.length-this.props.positionInList.index-1:0,y=g.createElement("div",{ref:this.toastEle,role:"alert","aria-label":`${t||"default"} type`,className:p,style:Object.assign(Object.assign({},c),{transform:`translate3d(0,0,${b*-10}px)`}),onMouseEnter:this.clearCloseTimer,onMouseLeave:this.startCloseTimer,onAnimationStart:this.props.onAnimationStart,onAnimationEnd:this.props.onAnimationEnd},g.createElement("div",{className:`${Pe}-content`},this.renderIcon(),g.createElement("span",{className:`${Pe}-content-text`,style:d,"x-semi-prop":"content"},e),r&&g.createElement("div",{className:`${Pe}-close-button`},g.createElement(qs,{onClick:S=>this.close(S),type:"tertiary",icon:g.createElement(cn,{"x-semi-prop":"icon"}),theme:m,size:f}))));if(this.props.stack){const S=this.props.stackExpanded&&this.toastEle.current&&getComputedStyle(this.toastEle.current).height||0;return g.createElement("div",{className:`${Pe}-zero-height-wrapper`,style:{height:S}},y)}else return y}};tt.contextType=Us;tt.propTypes={onClose:h.func,content:h.node,close:h.func,duration:h.number,theme:h.oneOf(Ot.themes),type:h.oneOf(Ot.types),textMaxWidth:h.oneOfType([h.string,h.number]),style:h.object,className:h.string,showClose:h.bool,stack:h.bool,stackExpanded:h.bool,icon:h.node,direction:h.oneOf(Ot.directions)};tt.__SemiComponentName__="Toast";tt.defaultProps=ln(tt.__SemiComponentName__,{onClose:$,content:"",close:$,duration:Ac.duration,textMaxWidth:450,showClose:!0,stack:!1,stackExpanded:!1,theme:"normal"});var Fc=function(n,e){var t={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&e.indexOf(o)<0&&(t[o]=n[o]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(n);r{var{afterClose:t}=n,o=Fc(n,["afterClose"]);const[r,s]=a.useState(!0),l=()=>{s(!1)};return g.useImperativeHandle(e,()=>({close:()=>{s(!1)}})),a.useEffect(()=>{r||t(o.id)},[r]),r?g.createElement(tt,Object.assign({},o,{close:l})):null},Bc=g.forwardRef(zc),wt={motion:!0,zIndex:1010,duration:3};function Uc(){const[n,e]=g.useState([]);function t(o,r){return e(s=>[{element:o,config:r},...s]),s=>{e(l=>l.filter(c=>{let{config:u}=c;return u.id!==s}))}}return[n,t]}function Vc(){const[n,e]=Uc(),t=a.useRef(new Map),o=s=>{const l=Oo("semi_toast_"),c=Object.assign(Object.assign({},s),{id:l});let u;const p=g.createElement(Bc,Object.assign({},c,{key:l,afterClose:d=>u(d),ref:d=>{var m;t.current.set(l,{close:(m=d==null?void 0:d.close)!==null&&m!==void 0?m:$})}}));return u=e(p,Object.assign({},c)),l},r=s=>{var l;const{close:c}=(l=t.current.get(s))!==null&&l!==void 0?l:{};c==null||c()};return[{success:s=>o(Object.assign(Object.assign(Object.assign({},wt),s),{type:"success"})),info:s=>o(Object.assign(Object.assign(Object.assign({},wt),s),{type:"info"})),error:s=>o(Object.assign(Object.assign(Object.assign({},wt),s),{type:"error"})),warning:s=>o(Object.assign(Object.assign(Object.assign({},wt),s),{type:"warning"})),open:s=>o(Object.assign(Object.assign(Object.assign({},wt),s),{type:"default"})),close:s=>r(s)},g.createElement(g.Fragment,null,Array.isArray(n)&&n.length?g.createElement(g.Fragment,null,n.map(s=>s.element)):null)]}const Kc=()=>{var n;return n=class J extends de{constructor(t){super(t),this.stack=!1,this.innerWrapperRef=g.createRef(),this.handleMouseEnter=o=>{this.stack&&this.foundation.handleMouseInSideChange(!0)},this.handleMouseLeave=o=>{var r;this.stack&&(!((r=this.foundation.getInputWrapperRect())===null||r===void 0)&&r.height)&&this.foundation.handleMouseInSideChange(!1)},this.state={list:[],removedItems:[],updatedItems:[],mouseInSide:!1},this.foundation=new Ko(this.adapter)}get adapter(){return Object.assign(Object.assign({},super.adapter),{updateToast:(t,o,r)=>{this.setState({list:t,removedItems:o,updatedItems:r})},handleMouseInSideChange:t=>{this.setState({mouseInSide:t})},getInputWrapperRect:()=>{var t;return(t=this.innerWrapperRef.current)===null||t===void 0?void 0:t.getBoundingClientRect()}})}static create(t){var o,r,s;const l=(o=t.id)!==null&&o!==void 0?o:Oo("toast"),c=((s=(r=me===null||me===void 0?void 0:me.config)===null||r===void 0?void 0:r.overrideDefaultProps)===null||s===void 0?void 0:s.Toast)||{},u=Object.assign(Object.assign(Object.assign({},J.defaultOpts),c),t);if(J.ref){const p=document.querySelector(`#${this.wrapperId}`);["top","left","bottom","right"].map(d=>{d in u&&(p.style[d]=typeof u[d]=="number"?`${u[d]}px`:u[d])}),!!u.stack!==J.ref.stack&&(J.ref.stack=!!u.stack),J.ref.has(l)?J.ref.update(l,Object.assign(Object.assign({},u),{id:l})):J.ref.add(Object.assign(Object.assign({},u),{id:l}))}else{const p=document.createElement("div");this.wrapperId||(this.wrapperId=Oo("toast-wrapper").slice(0,26)),p.className=ct.WRAPPER,p.id=this.wrapperId,p.style.zIndex=String(typeof t.zIndex=="number"?t.zIndex:u.zIndex),["top","left","bottom","right"].map(d=>{if(d in u){const m=u[d];p.style[d]=typeof m=="number"?`${m}px`:m}}),u.getPopupContainer?u.getPopupContainer().appendChild(p):document.body.appendChild(p),Vs(g.createElement(J,{ref:d=>{d&&(J.ref=d,d.add(Object.assign(Object.assign({},u),{id:l})),d.stack=!!u.stack)}}),p)}return l}static close(t){J.ref&&J.ref.remove(t)}static destroyAll(){var t;if(J.ref){J.ref.destroyAll();const o=document.querySelector(`#${this.wrapperId}`);o&&(Hs(o),(t=o.parentNode)===null||t===void 0||t.removeChild(o)),J.ref=null,this.wrapperId=null}}static getWrapperId(){return this.wrapperId}static info(t){var o,r;typeof t=="string"&&(t={content:t});const s=((r=(o=me===null||me===void 0?void 0:me.config)===null||o===void 0?void 0:o.overrideDefaultProps)===null||r===void 0?void 0:r.Toast)||{};return this.create(Object.assign(Object.assign(Object.assign(Object.assign({},J.defaultOpts),s),t),{type:"info"}))}static warning(t){var o,r;typeof t=="string"&&(t={content:t});const s=((r=(o=me===null||me===void 0?void 0:me.config)===null||o===void 0?void 0:o.overrideDefaultProps)===null||r===void 0?void 0:r.Toast)||{};return this.create(Object.assign(Object.assign(Object.assign(Object.assign({},J.defaultOpts),s),t),{type:"warning"}))}static error(t){var o,r;typeof t=="string"&&(t={content:t});const s=((r=(o=me===null||me===void 0?void 0:me.config)===null||o===void 0?void 0:o.overrideDefaultProps)===null||r===void 0?void 0:r.Toast)||{};return this.create(Object.assign(Object.assign(Object.assign(Object.assign({},J.defaultOpts),s),t),{type:"error"}))}static success(t){var o,r;typeof t=="string"&&(t={content:t});const s=((r=(o=me===null||me===void 0?void 0:me.config)===null||o===void 0?void 0:o.overrideDefaultProps)===null||r===void 0?void 0:r.Toast)||{};return this.create(Object.assign(Object.assign(Object.assign(Object.assign({},J.defaultOpts),s),t),{type:"success"}))}static config(t){["top","left","bottom","right"].forEach(o=>{o in t&&(J.defaultOpts[o]=t[o])}),typeof t.theme=="string"&&Ot.themes.includes(t.theme)&&(J.defaultOpts.theme=t.theme),typeof t.zIndex=="number"&&(J.defaultOpts.zIndex=t.zIndex),typeof t.duration=="number"&&(J.defaultOpts.duration=t.duration),typeof t.getPopupContainer=="function"&&(J.defaultOpts.getPopupContainer=t.getPopupContainer)}has(t){return this.foundation.hasToast(t)}add(t){return this.foundation.addToast(t)}update(t,o){return this.foundation.updateToast(t,o)}remove(t){return this.foundation.removeToast(t)}destroyAll(){return this.foundation.destroyAll()}render(){let{list:t}=this.state;const{removedItems:o,updatedItems:r}=this.state;t=Array.from(new Set([...t,...o]));const s=r.map(c=>{let{id:u}=c;return u}),l=c=>{var u;!((u=c==null?void 0:c.foundation)===null||u===void 0)&&u._id&&s.includes(c.foundation._id)&&c.foundation.restartCloseTimer()};return g.createElement(g.Fragment,null,g.createElement("div",{className:I({[`${ct.PREFIX}-innerWrapper`]:!0,[`${ct.PREFIX}-innerWrapper-hover`]:this.state.mouseInSide}),ref:this.innerWrapperRef,onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave},t.map((c,u)=>{const p=o.find(m=>m.id===c.id)!==void 0,d=p?"leave":"enter";return g.createElement(Eo,{key:c.id,motion:c.motion,animationState:d,startClassName:p?`${ct.PREFIX}-animation-hide`:`${ct.PREFIX}-animation-show`,onAnimationEnd:m=>{d==="leave"&&this.setState(f=>{var b;return!((b=f.removedItems)===null||b===void 0)&&b.some(y=>y.id===c.id)?Object.assign(Object.assign({},f),{removedItems:f.removedItems.filter(y=>y.id!==c.id)}):null})}},m=>{let{animationClassName:f,animationEventsNeedBind:b,isAnimating:y}=m;return g.createElement(tt,Object.assign({},c,{stack:this.stack,stackExpanded:this.state.mouseInSide,positionInList:{length:t.length,index:u},className:I({[c.className]:!!c.className,[f]:!0})},b,{style:Object.assign({},c.style),close:S=>this.remove(S),ref:l}))})})))}},n.defaultOpts={motion:!0,zIndex:1010,content:""},n.propTypes={content:h.node,duration:h.number,onClose:h.func,icon:h.node,direction:h.oneOf(Ot.directions),stack:h.bool},n.defaultProps={},n};class Wc{static create(e){const t=Kc();return t.useToast=Vc,e&&t.config(e),t}}const G=Wc.create(),Zn=n=>n==="vertical"?["bottom","top"]:["right","left"],ft=(n,e)=>n.endsWith("px")?Number(n.replace("px","")):n.endsWith("%")?Number(n.replace("%",""))/100*e:typeof n>"u"?n:Number(n),en=function(n,e,t,o){let r=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;e=e??"0%",t=t??"100%";const s=ft(e,o),l=ft(t,o);return nl},qn=(n,e,t,o,r)=>{e=e??"0%",t=t??"100%";const s=ft(e,o),l=ft(t,o);return nl?l:n},_r=(n,e)=>{if(e==="horizontal"){const t=parseFloat(n.paddingLeft),o=parseFloat(n.paddingRight),r=parseFloat(n.borderLeftWidth),s=parseFloat(n.borderRightWidth);return t+o+r+s}else{const t=parseFloat(n.paddingTop),o=parseFloat(n.paddingBottom),r=parseFloat(n.borderTopWidth),s=parseFloat(n.borderBottomWidth);return t+o+r+s}};class Hc extends ge{constructor(e){super(Object.assign({},e))}init(){this._adapter.registerEvents()}destroy(){this._adapter.unregisterEvents()}}class Zc extends ge{constructor(e){super(Object.assign({},e))}init(){}destroy(){}}class qc extends ge{constructor(e){super(Object.assign({},e)),this.registerEvents=()=>{this._adapter.registerEvents(this.type)},this.unregisterEvents=()=>{this._adapter.unregisterEvents(this.type)},this.onResizeStart=(t,o,r)=>{this.type=r;let{clientX:s,clientY:l}=o,c=this._adapter.getItem(t),u=this._adapter.getItem(t+1),p,d;const m=this.window.getComputedStyle(c),f=this.window.getComputedStyle(u);p=_r(m,this.direction)+this.itemMinusMap.get(t),d=_r(f,this.direction)+this.itemMinusMap.get(t+1);let b=(this.direction==="horizontal"?c.offsetWidth:c.offsetHeight)+this.itemMinusMap.get(t),y=(this.direction==="horizontal"?u.offsetWidth:u.offsetHeight)+this.itemMinusMap.get(t+1);const S=this.getStates();this.setState({isResizing:!0,originalPosition:{x:s,y:l,lastItemSize:b,nextItemSize:y,lastOffset:p,nextOffset:d},backgroundStyle:Object.assign(Object.assign({},S.backgroundStyle),{cursor:this.window.getComputedStyle(o.target).cursor||"auto"}),curHandler:t}),this.registerEvents();let w=this._adapter.getItemStart(t),C=this._adapter.getItemStart(t+1),[k,_]=Zn(this.direction);w&&w(o,k),C&&C(o,_)},this.onMouseMove=t=>{this.onResizing(t)},this.onTouchMove=t=>{t.preventDefault(),this.onResizing(t)},this.onResizing=t=>{const o=this.getStates();if(!o.isResizing)return;const{curHandler:r,originalPosition:s}=o;let{x:l,y:c,lastItemSize:u,nextItemSize:p,lastOffset:d,nextOffset:m}=s,{clientX:f,clientY:b}=this.type==="mouse"?t:t.targetTouches[0];const y=this.getProps(),{direction:S}=y;let w=this._adapter.getItem(r),C=this._adapter.getItem(r+1),k=this.groupSize,_=S==="horizontal"?f-l:b-c,x=u+_,j=p-_,v=en(x,this._adapter.getItemMin(r),this._adapter.getItemMax(r),k,d),O=en(j,this._adapter.getItemMin(r+1),this._adapter.getItemMax(r+1),k,m);v&&(x=qn(x,this._adapter.getItemMin(r),this._adapter.getItemMax(r),k,d),j=u+p-x),O&&(j=qn(j,this._adapter.getItemMin(r+1),this._adapter.getItemMax(r+1),k,m),x=u+p-j);let E=this.itemPercentMap.get(r),D=this.itemPercentMap.get(r+1),P=x/k*100,R=E+D-P;this.itemPercentMap.set(r,P),this.itemPercentMap.set(r+1,R),S==="horizontal"?(w.style.width=`calc(${P}% - ${this.itemMinusMap.get(r)}px)`,C.style.width=`calc(${R}% - ${this.itemMinusMap.get(r+1)}px)`):S==="vertical"&&(w.style.height=`calc(${P}% - ${this.itemMinusMap.get(r)}px)`,C.style.height=`calc(${R}% - ${this.itemMinusMap.get(r+1)}px)`);let L=this._adapter.getItemChange(r),z=this._adapter.getItemChange(r+1),[W,A]=Zn(this.direction);L&&L({width:w.offsetWidth,height:w.offsetHeight},t,W),z&&z({width:C.offsetWidth,height:C.offsetHeight},t,A)},this.onResizeEnd=t=>{const{curHandler:o}=this.getStates();let r=this._adapter.getItem(o),s=this._adapter.getItem(o+1),l=this._adapter.getItemEnd(o),c=this._adapter.getItemEnd(o+1),[u,p]=Zn(this.direction);l&&l({width:r.offsetWidth,height:r.offsetHeight},t,u),c&&c({width:s.offsetWidth,height:s.offsetHeight},t,p),this.setState({isResizing:!1,curHandler:null}),this.unregisterEvents()},this.initSpace=()=>{const t=this.getProps(),{direction:o}=t;let r=new Array(this._adapter.getHandlerCount()).fill(0),s=this.groupSize;this.totalMinus=0;for(let d=0;dS&&console.warn("[Semi ResizableItem]: min size bigger than max size");let w=this._adapter.getItemDefaultSize(d);if(w){let C;if(typeof w=="string"){if(w.endsWith("%"))C=parseFloat(w.slice(0,-1)),this.itemPercentMap.set(d,C);else if(w.endsWith("px"))C=parseFloat(w.slice(0,-2))/s*100,this.itemPercentMap.set(d,C);else if(/^-?\d+(\.\d+)?$/.test(w)){c.set(d,parseFloat(w)),u+=parseFloat(w);continue}}else if(typeof w=="number"){c.set(d,w),u+=w;continue}l+=C,o==="horizontal"?m.style.width=`calc(${C}% - ${this.itemMinusMap.get(d)}px)`:m.style.height=`calc(${C}% - ${this.itemMinusMap.get(d)}px)`,CS&&console.warn("[Semi ResizableGroup]: item size bigger than max size")}else c.set(d,1),u+=1}let p=100-l;l>100&&(console.warn("[Semi ResizableGroup]: total Size bigger than 100%"),p=10),c.forEach((d,m)=>{const f=this._adapter.getItem(m),b=d/u*p;this.itemPercentMap.set(m,b),o==="horizontal"?f.style.width=`calc(${b}% - ${this.itemMinusMap.get(m)}px)`:f.style.height=`calc(${b}% - ${this.itemMinusMap.get(m)}px)`})},this.ensureConstraint=Lo(()=>{const{direction:t}=this.getProps(),o=this._adapter.getItemCount();let r=!0;for(let s=0;s{const{notifyResizeStart:o}=this.context;o(this.handlerIndex,t,"mouse")},this.onTouchStart=t=>{const{notifyResizeStart:o}=this.context;o(this.handlerIndex,t.targetTouches[0],"touch")},this.getHandler=()=>this.handlerRef.current,this.state={},this.handlerRef=a.createRef(),this.foundation=new Hc(this.adapter),this.handlerIndex=-1}componentDidMount(){this.foundation.init(),this.handlerIndex===-1&&(this.handlerIndex=this.context.registerHandler(this.handlerRef))}componentDidUpdate(e){}componentWillUnmount(){this.foundation.destroy()}get adapter(){return Object.assign(Object.assign({},super.adapter),{registerEvents:()=>{this.handlerRef.current.addEventListener("mousedown",this.onMouseDown),this.handlerRef.current.addEventListener("touchstart",this.onTouchStart)},unregisterEvents:()=>{this.handlerRef.current.removeEventListener("mousedown",this.onMouseDown),this.handlerRef.current.removeEventListener("touchstart",this.onTouchStart)}})}render(){const{style:e,className:t,children:o}=this.props,{direction:r}=this.context;return g.createElement("div",{className:I(t,Mr+"-handler",Mr+"-handler-"+r),style:e,ref:this.handlerRef},o??g.createElement(nl,{size:"inherit",style:{rotate:this.context.direction==="horizontal"?"0deg":"90deg"}}))}}bn.propTypes={children:h.node,direction:h.string,onResizeStart:h.func,className:h.string,disabled:h.bool,style:h.object};bn.defaultProps={};bn.contextType=yn;var Qc=function(n,e){var t={};for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&e.indexOf(o)<0&&(t[o]=n[o]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(n);r0&&arguments[0]!==void 0?arguments[0]:"mouse";t.window&&(o==="mouse"?(t.window.addEventListener("mousemove",t.foundation.onMouseMove),t.window.addEventListener("mouseup",t.foundation.onResizeEnd),t.window.addEventListener("mouseleave",t.foundation.onResizeEnd)):(t.window.addEventListener("touchmove",t.foundation.onTouchMove,{passive:!1}),t.window.addEventListener("touchend",t.foundation.onResizeEnd),t.window.addEventListener("touchcancel",t.foundation.onResizeEnd)))},this.unregisterEvent=function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"mouse";t.window&&(o==="mouse"?(t.window.removeEventListener("mousemove",t.foundation.onMouseMove),t.window.removeEventListener("mouseup",t.foundation.onResizeEnd),t.window.removeEventListener("mouseleave",t.foundation.onResizeEnd)):(t.window.removeEventListener("touchmove",t.foundation.onTouchMove,{passive:!1}),t.window.removeEventListener("touchend",t.foundation.onResizeEnd),t.window.removeEventListener("touchcancel",t.foundation.onResizeEnd)))},this.registerItem=(o,r,s,l,c,u,p)=>{if(Array.from(this.itemRefs.values()).some(m=>m===o))return-1;let d=this.itemRefs.size;return this.itemRefs.set(d,o),this.itemMinMap.set(d,r),this.itemMaxMap.set(d,s),this.itemDefaultSizeList.set(d,l),this.itemResizeStart.set(d,c),this.itemResizing.set(d,u),this.itemResizeEnd.set(d,p),d},this.registerHandler=o=>{if(Array.from(this.handlerRefs.values()).some(s=>s===o))return-1;let r=this.handlerRefs.size;return this.handlerRefs.set(r,o),r},this.getGroupSize=()=>this.groupSize,this.groupRef=a.createRef(),this.foundation=new qc(this.adapter),this.state={isResizing:!1,originalPosition:{x:0,y:0,lastItemSize:0,nextItemSize:0,lastOffset:0,nextOffset:0},backgroundStyle:{cursor:"auto"},curHandler:null,contextValue:{direction:e.direction,registerItem:this.registerItem,registerHandler:this.registerHandler,notifyResizeStart:this.foundation.onResizeStart,getGroupSize:this.getGroupSize}}}componentDidMount(){this.foundation.init(),window.addEventListener("resize",this.foundation.ensureConstraint)}componentDidUpdate(e){this.props.direction!==e.direction&&(this.setState(t=>Object.assign(Object.assign({},t),{contextValue:Object.assign(Object.assign({},t.contextValue),{direction:this.props.direction})})),this.foundation.direction=this.props.direction)}componentWillUnmount(){this.foundation.destroy(),window.removeEventListener("resize",this.foundation.ensureConstraint)}get adapter(){return Object.assign(Object.assign({},super.adapter),{getGroupRef:()=>this.groupRef.current,getItem:e=>this.itemRefs.get(e).current,getItemCount:()=>this.itemRefs.size,getHandler:e=>this.handlerRefs.get(e).current,getHandlerCount:()=>this.handlerRefs.size,getItemMin:e=>this.itemMinMap.get(e),getItemMax:e=>this.itemMaxMap.get(e),getItemChange:e=>this.itemResizing.get(e),getItemEnd:e=>this.itemResizeEnd.get(e),getItemStart:e=>this.itemResizeStart.get(e),getItemDefaultSize:e=>this.itemDefaultSizeList.get(e),registerEvents:this.registerEvent,unregisterEvents:this.unregisterEvent})}get window(){var e;return(e=this.groupRef.current.ownerDocument.defaultView)!==null&&e!==void 0?e:null}render(){const e=this.props,{children:t,direction:o,className:r}=e,s=Qc(e,["children","direction","className"]);return g.createElement(yn.Provider,{value:this.state.contextValue},g.createElement("div",Object.assign({style:{flexDirection:o==="vertical"?"column":"row"},ref:this.groupRef,className:I(r,Lr+"-group")},s),this.state.isResizing&&g.createElement("div",{style:this.state.backgroundStyle,className:I(r,Lr+"-background")}),t))}}vn.propTypes={};vn.defaultProps={direction:"horizontal"};vn.contextType=yn;var Yc=Object.defineProperty,Ir=Object.getOwnPropertySymbols,Xc=Object.prototype.hasOwnProperty,Jc=Object.prototype.propertyIsEnumerable,Tr=(n,e,t)=>e in n?Yc(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,ed=(n,e)=>{for(var t in e||(e={}))Xc.call(e,t)&&Tr(n,t,e[t]);if(Ir)for(var t of Ir(e))Jc.call(e,t)&&Tr(n,t,e[t]);return n};function td(n){return a.createElement("svg",ed({width:200,height:200,viewBox:"0 0 200 200",fill:"none",xmlns:"http://www.w3.org/2000/svg",focusable:!1,"aria-hidden":!0},n),a.createElement("path",{d:"M74.7 78.6c20.78-6.32 57.55-12.26 71.81-9.86 4.21.7 8.12 1.98 11.36 3.42-.51-1.69-.95-3.5-1.38-5.3l-.04-.18c-1.03-4.27-2.05-8.44-3.95-10.55-4.8-5.32.67-10.12.67-10.12l.93-10.53c13.02 4.82 21.65 14.92 27 25.08 4.57 8.67 6.75 17.37 7.25 22.89 1.06 12-8.18 18.86-19.2 18.86-9.74 0-18.36-1.64-24.81-3.1.64 2.18 5.44 19.18 7.53 32.66l-46.15.58-7.58-14.68-4.66-12.26c-19.46 7.46-50.77 19.02-64.9 18.44-10.35-.42-15.68-15.68-17.44-28.7a71.55 71.55 0 0 1-.67-9.4c0-5.64.3-12.18 2.22-17.89.74-2.21 1.73-4.3 3.04-6.17a18.1 18.1 0 0 1 4.6-4.59c0 4-1.02 13.54 2.8 14.12 5.06.78 10.4-9.08 13.85-7.06 3.87 2.27-1.65 16.34-1.33 17.2.27.7.53 1.4.76 2.07a48.99 48.99 0 0 1 2.25 8.55C46.59 87.56 60 83.06 74.69 78.6Z",fill:"#C6CACD"}),a.createElement("path",{d:"M181.1 60.56c4.57 8.67 6.75 17.37 7.25 22.89 1.06 12-8.18 18.86-19.2 18.86-9.74 0-18.36-1.64-24.81-3.1m36.77-38.65c-5.36-10.16-13.99-20.26-27-25.08l-.94 10.53s-5.46 4.8-.67 10.12c1.9 2.11 2.92 6.28 3.95 10.55m24.66-6.12c-6-.37-18.32.8-24.66 6.12m0 0c1.57 6.53 3.15 13.3 7.91 13.3 7.2 0-3.6-8.84-17.85-11.24-14.25-2.4-51.03 3.54-71.82 9.86-20.78 6.32-39.04 12.71-42.77 19.1-3.63 6.23 13.24 10.92 4.49-14.17m0 0c-.23-.67-.49-1.36-.76-2.08-.32-.85 5.2-14.92 1.33-17.19-3.45-2.02-8.8 7.84-13.85 7.06-3.82-.58-2.8-10.12-2.8-14.12a18.1 18.1 0 0 0-4.6 4.6M36.4 83.52c-7.27 1.58-21.92 8.1-25.27 11.73m0 0a71.55 71.55 0 0 1-.67-9.41c0-5.64.3-12.18 2.22-17.89m-1.55 27.3c1.76 13 7.09 28.27 17.45 28.7 14.12.57 45.43-10.99 64.89-18.45l4.66 12.26 7.58 14.68 46.15-.58c-2.09-13.48-6.89-30.48-7.53-32.67M15.73 61.8c-.98 3-1.08 5.5.19 7.8m-.2-7.8a24.08 24.08 0 0 0-3.03 6.16m0 0a5.43 5.43 0 0 0 1.25 4.22m130.4 27.02c-.9-3.08-3.12-9.95-4.76-12.76",stroke:"#1C1F23"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m156.89 15.66-2.04 27.96 2.57 28.1c-7.51-3.07-13.32-4.34-27.25-3.36-11.94.83-31.75 3.95-46.23 7.62-16.66 4.27-37.81 11.64-45.21 15.9-.77-4.64-2.92-10.15-2.92-10.15-.07-.7 2.63-8.32 2.73-13.06.08-3.08-.91-4.45-2.33-4.75a3.47 3.47 0 0 0-2.05.35c-.63.32-.86.48-1.38.84-1.34.98-2.38 2.02-3.95 3.34a17.14 17.14 0 0 1-3.04 2.17 4.6 4.6 0 0 1-2.89.63c-.63-.1-1.21-.47-1.71-1.58l-.07-.89c-.5-5.79-2.7-20.12-2.7-34.91 0-7.74 1.61-10.04 2.7-11.59l.13-.18c3.85-5.53 13.67-6.75 23.12-6.96 2.5-.14 5.2-.2 8.1-.17l.11.15H53.15l-.52.07 18.32 25.49-3.62 14.08 10.2 15.98-2.84-16.49 10-11.99-3.5-27.7s8.78-.5 19.47-1.77c10.69-1.28 18.47-1.9 29.42-1.83 1.64.01 3.4.1 5.23.22 9.64.65 18.55 2.56 21.46 4.4l.13.09h-.01Z",fill:"var(--semi-color-primary)",fillOpacity:.2}),a.createElement("path",{d:"M143 27.91a1.38 1.38 0 0 1 1.77-.85c.5.17.98.41 1.44.71a1.38 1.38 0 0 1-1.53 2.31c-.26-.17-.53-.3-.82-.4a1.38 1.38 0 0 1-.85-1.77Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M140.65 28.12c.21.74-.21 1.5-.95 1.71-.36.1-.73.23-1.11.37a1.38 1.38 0 1 1-.95-2.6c.43-.16.87-.3 1.3-.43.74-.2 1.5.22 1.71.95Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M134.74 30.4c.37.67.14 1.51-.53 1.89l-1.07.62a1.38 1.38 0 1 1-1.41-2.38l1.12-.65a1.38 1.38 0 0 1 1.89.52Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M97.86 31.43h.76a1.38 1.38 0 1 1-.06 2.77h-.52a6.7 6.7 0 0 0-.57.1 1.38 1.38 0 1 1-.64-2.68c.33-.08.64-.14.94-.18l.09-.01Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M147.78 31.75c.73-.23 1.5.19 1.72.92.13.42.25.88.35 1.35a1.38 1.38 0 0 1-2.7.58c-.1-.4-.19-.78-.3-1.13-.22-.73.2-1.5.93-1.72Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M102.27 33.13c.19-.75.94-1.2 1.68-1.01.45.11.89.23 1.3.37a1.38 1.38 0 0 1-.84 2.63c-.36-.11-.73-.22-1.13-.32a1.38 1.38 0 0 1-1-1.67Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M129.3 33.68c.42.64.25 1.5-.4 1.92l-.52.34-.53.36a1.38 1.38 0 0 1-1.53-2.31l.32-.21.21-.14.3-.2.23-.15c.64-.42 1.5-.25 1.92.39Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M108.25 35.22c.36-.67 1.2-.92 1.88-.55a246.5 246.5 0 0 1 1.11.61 1.38 1.38 0 0 1-1.33 2.43l-.5-.28h-.01l-.6-.34a1.38 1.38 0 0 1-.55-1.87Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M92.83 35.77c.76-.01 1.4.6 1.4 1.36.01.16.03.34.07.54a1.38 1.38 0 1 1-2.7.58 5.62 5.62 0 0 1-.13-1.07c-.01-.76.6-1.4 1.36-1.4Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M124 37.2c.31.7 0 1.51-.7 1.82a6.07 6.07 0 0 1-1.44.45 1.38 1.38 0 1 1-.67-2.68l.58-.16c.1-.03.24-.07.42-.15.7-.3 1.51.02 1.82.72Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M113.9 38.14c.15-.75.89-1.22 1.63-1.07.35.08.72.14 1.1.17a1.38 1.38 0 0 1-.26 2.76c-.49-.05-.96-.12-1.41-.22a1.38 1.38 0 0 1-1.07-1.64Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M148.98 37.95c.76-.01 1.4.6 1.4 1.36a38.45 38.45 0 0 1 0 1.42 1.38 1.38 0 0 1-2.77-.08 24.28 24.28 0 0 0 0-1.3c0-.76.6-1.39 1.37-1.4Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M148.6 44.88c.75.16 1.22.9 1.06 1.65-.1.47-.22.94-.34 1.41a1.38 1.38 0 1 1-2.68-.7c.12-.43.22-.87.31-1.3.17-.75.9-1.22 1.65-1.06Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M146.69 51.6c.7.31 1 1.13.7 1.83-.2.44-.41.88-.63 1.31a1.38 1.38 0 0 1-2.48-1.24c.2-.4.4-.8.58-1.2.31-.7 1.13-1.01 1.83-.7Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M41.67 55.45c.07.76-.5 1.44-1.25 1.5-.43.04-.86.1-1.26.19a1.38 1.38 0 0 1-.54-2.72c.5-.1 1.02-.17 1.55-.22.76-.07 1.43.5 1.5 1.25Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M44.58 55.78c.22-.73 1-1.15 1.72-.93l.74.23a1.38 1.38 0 1 1-.9 2.62l-.62-.2a1.38 1.38 0 0 1-.94-1.72Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M91.9 56.9c.05.76-.52 1.41-1.29 1.46-.44.03-.89.07-1.32.12a1.38 1.38 0 0 1-.31-2.75c.48-.05.96-.1 1.45-.13.77-.05 1.42.53 1.47 1.3Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M94.72 56.95c.07-.76.74-1.33 1.5-1.26l1.43.14a1.38 1.38 0 1 1-.32 2.75c-.45-.05-.9-.1-1.35-.13a1.38 1.38 0 0 1-1.26-1.5Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M101.64 57.83c.16-.75.9-1.22 1.64-1.07l1.39.3a1.38 1.38 0 1 1-.62 2.7l-1.34-.29a1.38 1.38 0 0 1-1.07-1.64Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M34.85 57.26c.48.6.39 1.46-.2 1.94-.33.27-.63.55-.9.84a1.38 1.38 0 0 1-2.03-1.89c.36-.39.76-.76 1.18-1.1.6-.48 1.46-.39 1.95.2Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M85 57.9c.29.71-.06 1.51-.78 1.8a15.8 15.8 0 0 0-1.26.54 1.38 1.38 0 1 1-1.15-2.52 74.1 74.1 0 0 1 1.4-.6c.71-.28 1.52.07 1.8.78Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M143.4 57.76c.61.47.72 1.34.26 1.94-.3.4-.62.78-.94 1.15a1.38 1.38 0 0 1-2.09-1.81 24 24 0 0 0 .84-1.03c.47-.6 1.33-.71 1.94-.25Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M108.43 59.46c.22-.74.99-1.15 1.72-.93l1.35.4a1.38 1.38 0 1 1-.82 2.65l-1.32-.4a1.38 1.38 0 0 1-.93-1.72Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M115.08 61.58a1.38 1.38 0 0 1 1.77-.83l1.32.5a1.38 1.38 0 0 1-.97 2.58l-1.3-.48a1.38 1.38 0 0 1-.82-1.77Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M138.67 62.89c.42.64.25 1.5-.4 1.92-.41.27-.85.54-1.29.78a1.38 1.38 0 0 1-1.32-2.43c.37-.2.73-.43 1.1-.66.63-.42 1.49-.25 1.91.39Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M30.5 62.78c.77.07 1.33.74 1.26 1.5l-.03.59.01.75-1.6 1.4a1.38 1.38 0 0 1-1.16-1.32l-.02-.83c0-.28.02-.56.04-.84.07-.76.75-1.32 1.5-1.25Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M121.6 64.07c.3-.7 1.1-1.04 1.8-.75a135.68 135.68 0 0 1 1.26.52 1.38 1.38 0 1 1-.97 2.59 19.62 19.62 0 0 1-1.35-.55c-.7-.3-1.04-1.1-.74-1.81Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M72.11 64.94c.48.6.4 1.47-.2 1.95-.38.3-.74.61-1.09.92A1.38 1.38 0 1 1 69 65.73c.37-.33.76-.66 1.17-.99.59-.48 1.46-.4 1.94.2Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M132.4 65.92c.09.76-.46 1.44-1.22 1.53-.5.05-1.02.08-1.53.09a1.38 1.38 0 1 1-.02-2.77c.42 0 .84-.03 1.25-.07.76-.09 1.44.46 1.53 1.22Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M66.66 69.9c.57.52.6 1.4.09 1.96l-.73.8-.02.02-.16.18-.08.09a1.38 1.38 0 0 1-2.05-1.86l.25-.28.75-.82c.51-.56 1.39-.6 1.95-.09Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M61.6 75.28c.45.61.31 1.48-.3 1.93-.44.31-.88.61-1.36.89a1.38 1.38 0 1 1-1.4-2.4c.4-.22.77-.46 1.12-.73a1.38 1.38 0 0 1 1.94.3Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M37.67 75.97c.42.19.86.36 1.35.53a1.38 1.38 0 0 1-.89 2.62c-.56-.19-1.1-.4-1.6-.63l.72-2.63c.14.01.28.05.42.11Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M55.05 78.57c.12.75-.4 1.46-1.15 1.58-.5.08-1 .15-1.54.2a1.38 1.38 0 0 1-.28-2.75c.49-.05.95-.11 1.39-.18.75-.12 1.46.4 1.58 1.15Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M43.4 78.87c.06-.76.73-1.33 1.49-1.27a38.43 38.43 0 0 0 1.5.1 1.38 1.38 0 1 1-.12 2.76 62.94 62.94 0 0 1-1.6-.1 1.38 1.38 0 0 1-1.27-1.5Z",fill:"var(--semi-color-primary)"}),a.createElement("g",{clipPath:"url(#clip_failure_dark_46_27)"},a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M30.9 46.87a13.45 13.45 0 0 1 9.37-16.53 13.45 13.45 0 0 1 16.52 9.39c2.64 9.56-4.77 29.27-5.14 29.9a.75.75 0 0 1-.99.27c-.64-.34-17.11-13.47-19.76-23.03Zm14.36 1.54a6.1 6.1 0 0 1-3.25-11.75 6.1 6.1 0 0 1 3.25 11.75Z",fill:"var(--semi-color-primary)"})),a.createElement("path",{d:"M102.31 100.69c-2.8 1.55-5.63 2.85-9.36 4.58l1.48 3.92c2.14-.96 6.16-6.03 7.88-8.5Z",fill:"#1C1F23"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M121 63.04c8.85 2.1 12.43-6.5 13.12-8.77.68-2.27-5.6-11.86-8-11.2-.13.05-.3.09-.47.13l-.18.05-1.37.37c-3.64 1.03-9.93 3.2-10.98 7.63-1.3 5.46 2.4 10.49 7.88 11.79Z",fill:"#1C1F23"}),a.createElement("path",{d:"M134.5 64.73c-.43.47-1.2.74-2.33.73a12.7 12.7 0 0 1-4.06-.86 31.25 31.25 0 0 1-9.94-6.22c-3.25-2.97-5.97-5.8-7.59-8.42-1.61-2.61-2.05-4.89-.98-6.84a3.7 3.7 0 0 1 2.11-1.86 4.53 4.53 0 0 1 2.9.15c2.16.76 4.57 2.83 6.48 6.01 3.4 5.64 6.89 8.24 9.7 10.33.49.36.95.7 1.38 1.04a7.3 7.3 0 0 1 2.61 3.48c.34 1.1.16 1.97-.28 2.46Z",fill:"#C6CACD",stroke:"#1C1F23"}),a.createElement("mask",{id:"mask_failure_dark_130_527","mask-type":"alpha",maskUnits:"userSpaceOnUse",x:101,y:47,width:30,height:22},a.createElement("path",{d:"M130.53 62.1c-.5-3.3-9.52-14.75-16.08-15.03l-12.68 4.52 6.47 14.16 17.25 3.07c1.84-1.14 5.43-4.07 5.04-6.72Z",fill:"#C4C4C4"})),a.createElement("g",{mask:"url(#mask_failure_dark_130_527)"},a.createElement("path",{d:"M127.2 63.62a9.74 9.74 0 0 1-13.76.5 9.74 9.74 0 0 1-.32-13.78 9.74 9.74 0 0 1 13.77-.49 9.74 9.74 0 0 1 .32 13.77Z",fill:"#C6CACD",stroke:"#1C1F23"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m116.79 47.35-.02.37c2.86.5 8.57 2.59 8.58 6.87 0 5.36-7.44 9.34-14.47 3.46-.34-.28-.66-.53-.95-.74a10.09 10.09 0 0 0 3.17 7.17 10.24 10.24 0 0 0 14.47-.52 10.24 10.24 0 0 0-.34-14.47 10.16 10.16 0 0 0-10.44-2.14Z",fill:"#1C1F23"}),a.createElement("path",{d:"M119.34 55a.79.79 0 1 0-1.1-1.12.79.79 0 0 0 1.1 1.12Z",fill:"#1C1F23"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M119.98 50.72c.21-.09.45.01.54.22a7.86 7.86 0 0 0 1.84 2.65.41.41 0 0 1-.55.62 8.67 8.67 0 0 1-2.05-2.95.41.41 0 0 1 .22-.54Z",fill:"#1C1F23"}),a.createElement("path",{d:"M114.85 52.4a.79.79 0 1 0-1.1-1.11.79.79 0 0 0 1.1 1.12Z",fill:"#1C1F23"}),a.createElement("mask",{id:"path-15-inside-1",fill:"white"},a.createElement("ellipse",{rx:2.97818,ry:2.97818,transform:"matrix(0.727696 0.6859 -0.685903 0.727693 128.435 60.0508)"})),a.createElement("ellipse",{rx:2.97818,ry:2.97818,transform:"matrix(0.727696 0.6859 -0.685903 0.727693 128.435 60.0508)",fill:"#C6CACD"}),a.createElement("path",{d:"m128.42 60.04.01-.01a.03.03 0 0 1 .02 0l-4.12 4.37a5.98 5.98 0 0 0 8.45-.25l-4.36-4.11Zm.03 0v.02l-4.37-4.11a5.98 5.98 0 0 0 .25 8.45l4.12-4.37Zm0 .03h-.03l4.12-4.37a5.98 5.98 0 0 0-8.46.25l4.37 4.12Zm-.03 0v-.03l4.37 4.11a5.98 5.98 0 0 0-.25-8.45l-4.12 4.37Z",fill:"#1C1F23",mask:"url(#path-15-inside-1)"})),a.createElement("path",{d:"M145.63 40.19c1.37-2.75 12.75 2.35 16.14 6.78 3.38 4.43 1.48 10.74-1.9 9.68-6.69-2.12-7.56-6.7-7.94-9.48-1.2-1.85-7.67-4.24-6.3-6.98Z",fill:"#C6CACD",stroke:"#1C1F23"}),a.createElement("path",{d:"m158.95 41.56 6.64 2.52 1.66 12.47-8.3 1.98-3.47-12.03 3.47-4.94Z",fill:"#C6CACD"}),a.createElement("path",{d:"M167.3 151.94c5.19 1.66 23.35 35.57 19.05 35.57-13.86 0-34.5.53-71.42.53-15.63 0-17.9-5.16-11.79-22.08a353.23 353.23 0 0 1 6.14-15.76l32.5 1.26c-.43 1.53-.91 3.07-1.38 4.4a26.82 26.82 0 0 1 8.73-1.47c5.27 0 7.04 1.4 11.77 0 2.13-.62 4.8-2.97 6.4-2.45Z",fill:"#C6CACD"}),a.createElement("path",{d:"M140.4 155.87c.47-1.34.95-2.88 1.38-4.4l-32.5-1.27a353.23 353.23 0 0 0-6.14 15.76c-6.1 16.92-3.84 22.08 11.79 22.08 36.93 0 57.56-.53 71.42-.53 4.3 0-13.86-33.91-19.06-35.57-1.6-.52-4.26 1.83-6.4 2.45-4.72 1.4-6.5 0-11.76 0-3.08 0-6.06.55-8.72 1.48Zm0 0a26.67 26.67 0 0 1-4.44 8.38c-1.7 2.22-3.99 4.43-5.43 4.33-1.44-.1-1.42-3.18 0-5.66 1.97-3.44 6.45-5.87 9.88-7.05Z",stroke:"#1C1F23"}),a.createElement("path",{d:"M149.25 131.7s3.36 19.46-12.34 21.04c-11.53 1.15-40.77-4.55-53.76-7.79 4.72 12.82 9.61 39.86 7 42.16-3.33 2.93-47.55 1.76-55.96 0-8.42-1.75 13.82-11.46 15.45-14.66 2.99-5.84-5.48-21.18-5.75-45.45-.27-24.27 18.18-24.86 34.47-21.64 13.02 2.57 41.63 18.33 52.56 26.86l18.33-.52Z",fill:"#C6CACD",stroke:"#1C1F23"}),a.createElement("path",{d:"M141.5 153.87c-3.11 2.55-27.72 5-35.58 3.53l2.75-6.8c20.23 2.85 28.08 3.34 33.46 1.16l-.63 2.11Z",fill:"#1C1F23"}),a.createElement("path",{d:"M126.02 142.7c-3.1-2.99-5-7.5-4.16-12.35",stroke:"#1C1F23"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M130.6 95.65c-9.03-10.98-18.97-19.74-25.5-24.56l1.63-2.22c6.7 4.95 16.81 13.86 26 25.02 9.18 11.16 17.54 24.67 20.59 38.83l-2.7.59c-2.91-13.56-10.97-26.67-20.02-37.66Z",fill:"#1C1F23"}),a.createElement("path",{d:"m149.12 107.09-16.36 13.2 22.27 17.8 8.87-19.19c-.14-3.93-2.34-5.34-5.83-4.66l-3.12-2.5c.08-3.5-2.18-5.64-5.83-4.65Z",fill:"#6B7075"}),a.createElement("path",{d:"m148.24 128.62 9.45-14.34-2.91-2.33-10.94 13.07 4.4 3.6Z",stroke:"#1C1F23"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M143.67 127.98a6.93 6.93 0 1 1-10.82-8.66 6.93 6.93 0 0 1 10.82 8.66Zm12.28 9.82a6.93 6.93 0 1 1-10.82-8.65 6.93 6.93 0 0 1 10.82 8.65Z",fill:"#1C1F23"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m133.43 123.46 9.21-1.8.32 1.61-9.2 1.81-.33-1.62Z",fill:"#C6CACD"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m145.5 133.11 9.21-1.8.32 1.62-9.2 1.8-.33-1.62Z",fill:"#C6CACD"}),a.createElement("defs",null,a.createElement("clipPath",{id:"clip_failure_dark_46_27"},a.createElement("rect",{width:44.4004,height:44.4627,fill:"white",transform:"matrix(0.963965 -0.266028 0.266198 0.963918 18.4214 34.6221)"}))))}var nd=td,od=Object.defineProperty,Rr=Object.getOwnPropertySymbols,rd=Object.prototype.hasOwnProperty,sd=Object.prototype.propertyIsEnumerable,Nr=(n,e,t)=>e in n?od(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,id=(n,e)=>{for(var t in e||(e={}))rd.call(e,t)&&Nr(n,t,e[t]);if(Rr)for(var t of Rr(e))sd.call(e,t)&&Nr(n,t,e[t]);return n};function ad(n){return a.createElement("svg",id({width:200,height:200,viewBox:"0 0 200 200",fill:"none",xmlns:"http://www.w3.org/2000/svg",focusable:!1,"aria-hidden":!0},n),a.createElement("rect",{width:200,height:200,fill:"transparent"}),a.createElement("path",{d:"M74.7 78.6c20.78-6.32 57.55-12.26 71.81-9.86 4.21.7 8.12 1.98 11.36 3.42-.51-1.69-.95-3.5-1.38-5.3l-.04-.18c-1.03-4.27-2.05-8.44-3.95-10.55-4.8-5.32.67-10.12.67-10.12l.93-10.53c13.02 4.82 21.65 14.92 27 25.08 4.57 8.67 6.75 17.37 7.25 22.89 1.06 12-8.18 18.86-19.2 18.86-9.74 0-18.36-1.64-24.81-3.1.64 2.18 5.44 19.18 7.53 32.66l-46.15.58-7.58-14.68-4.66-12.26c-19.46 7.46-50.77 19.02-64.9 18.44-10.35-.42-15.68-15.68-17.44-28.7a71.55 71.55 0 0 1-.67-9.4c0-5.64.3-12.18 2.22-17.89.74-2.21 1.73-4.3 3.04-6.17a18.1 18.1 0 0 1 4.6-4.59c0 4-1.02 13.54 2.8 14.12 5.06.78 10.4-9.08 13.85-7.06 3.87 2.27-1.65 16.34-1.33 17.2.27.7.53 1.4.76 2.07a48.99 48.99 0 0 1 2.25 8.55C46.59 87.56 60 83.06 74.69 78.6Z",fill:"white"}),a.createElement("path",{d:"M181.1 60.56c4.57 8.67 6.75 17.37 7.25 22.89 1.06 12-8.18 18.86-19.2 18.86-9.74 0-18.36-1.64-24.81-3.1m36.77-38.65c-5.36-10.16-13.99-20.26-27-25.08l-.94 10.53s-5.46 4.8-.67 10.12c1.9 2.11 2.92 6.28 3.95 10.55m24.66-6.12c-6-.37-18.32.8-24.66 6.12m0 0c1.57 6.53 3.15 13.3 7.91 13.3 7.2 0-3.6-8.84-17.85-11.24-14.25-2.4-51.03 3.54-71.82 9.86-20.78 6.32-39.04 12.71-42.77 19.1-3.63 6.23 13.24 10.92 4.49-14.17m0 0c-.23-.67-.49-1.36-.76-2.08-.32-.85 5.2-14.92 1.33-17.19-3.45-2.02-8.8 7.84-13.85 7.06-3.82-.58-2.8-10.12-2.8-14.12a18.1 18.1 0 0 0-4.6 4.6M36.4 83.52c-7.27 1.58-21.92 8.1-25.27 11.73m0 0a71.55 71.55 0 0 1-.67-9.41c0-5.64.3-12.18 2.22-17.89m-1.55 27.3c1.76 13 7.09 28.27 17.45 28.7 14.12.57 45.43-10.99 64.89-18.45l4.66 12.26 7.58 14.68 46.15-.58c-2.09-13.48-6.89-30.48-7.53-32.67M15.73 61.8c-.98 3-1.08 5.5.19 7.8m-.2-7.8a24.08 24.08 0 0 0-3.03 6.16m0 0a5.43 5.43 0 0 0 1.25 4.22m130.4 27.02c-.9-3.08-3.12-9.95-4.76-12.76",stroke:"#515151"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m156.89 15.66-2.04 27.96 2.57 28.1c-7.51-3.07-13.32-4.34-27.25-3.36-11.94.83-31.75 3.95-46.23 7.62-16.66 4.27-37.81 11.64-45.21 15.9-.77-4.64-2.92-10.15-2.92-10.15-.07-.7 2.63-8.32 2.73-13.06.08-3.08-.91-4.45-2.33-4.75a3.47 3.47 0 0 0-2.05.35c-.63.32-.86.48-1.38.84-1.34.98-2.38 2.02-3.95 3.34a17.14 17.14 0 0 1-3.04 2.17 4.6 4.6 0 0 1-2.89.63c-.63-.1-1.21-.47-1.71-1.58l-.07-.89c-.5-5.79-2.7-20.12-2.7-34.91 0-7.74 1.61-10.04 2.7-11.59l.13-.18c3.85-5.53 13.67-6.75 23.12-6.96 2.5-.14 5.2-.2 8.1-.17l.11.15H53.15l-.52.07 18.32 25.49-3.62 14.08 10.2 15.98-2.84-16.49 10-11.99-3.5-27.7s8.78-.5 19.47-1.77c10.69-1.28 18.47-1.9 29.42-1.83 1.64.01 3.4.1 5.23.22 9.64.65 18.55 2.56 21.46 4.4l.13.09h-.01Z",fill:"var(--semi-color-primary-light-default)"}),a.createElement("path",{d:"M143 27.91a1.38 1.38 0 0 1 1.77-.85c.5.18.98.41 1.44.71a1.38 1.38 0 0 1-1.53 2.31c-.26-.17-.53-.3-.82-.4a1.38 1.38 0 0 1-.85-1.77Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M140.65 28.12c.21.74-.21 1.5-.95 1.72-.36.1-.73.22-1.11.36a1.38 1.38 0 1 1-.95-2.6c.43-.16.87-.3 1.3-.43.74-.2 1.5.22 1.71.95Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M134.74 30.4c.37.67.14 1.51-.53 1.89l-1.07.62a1.38 1.38 0 1 1-1.41-2.38l1.12-.65a1.38 1.38 0 0 1 1.89.52Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M97.86 31.43h.76a1.38 1.38 0 1 1-.06 2.77h-.52a6.7 6.7 0 0 0-.57.1 1.38 1.38 0 0 1-.64-2.68c.33-.08.64-.14.94-.18l.09-.01Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M147.78 31.75c.73-.23 1.5.19 1.72.92.13.43.25.88.35 1.35a1.38 1.38 0 0 1-2.7.58c-.1-.4-.19-.78-.3-1.13-.22-.73.2-1.5.93-1.72Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M102.27 33.13c.19-.75.94-1.2 1.68-1.01.45.11.89.23 1.3.37a1.38 1.38 0 0 1-.84 2.63c-.36-.11-.73-.22-1.13-.32a1.38 1.38 0 0 1-1-1.67Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M129.3 33.68c.42.64.25 1.5-.4 1.92l-.52.34-.53.36a1.38 1.38 0 0 1-1.53-2.31l.32-.21.21-.14.3-.2.23-.15c.64-.42 1.5-.25 1.92.39Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M108.25 35.22c.36-.67 1.2-.92 1.88-.55a246.5 246.5 0 0 1 1.11.61 1.38 1.38 0 0 1-1.33 2.43l-.5-.28h-.01l-.6-.34a1.38 1.38 0 0 1-.55-1.87Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M92.83 35.77c.76-.01 1.4.6 1.4 1.36.01.16.03.34.07.55a1.38 1.38 0 1 1-2.7.58 5.62 5.62 0 0 1-.13-1.08c-.01-.76.6-1.4 1.36-1.4Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M124 37.2c.31.7 0 1.51-.7 1.82a6.07 6.07 0 0 1-1.44.45 1.38 1.38 0 1 1-.67-2.68l.58-.16c.1-.03.24-.07.42-.15.7-.3 1.51.02 1.82.72Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M113.9 38.14c.15-.75.89-1.22 1.63-1.06.35.07.72.13 1.1.16a1.38 1.38 0 0 1-.26 2.76c-.49-.05-.96-.12-1.41-.22a1.38 1.38 0 0 1-1.07-1.64Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M148.98 37.95c.76-.01 1.4.6 1.4 1.36a38.45 38.45 0 0 1 0 1.42 1.38 1.38 0 0 1-2.77-.08 24.28 24.28 0 0 0 0-1.3c0-.76.6-1.39 1.37-1.4Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M148.6 44.88c.75.16 1.22.9 1.06 1.65-.1.47-.22.94-.34 1.41a1.38 1.38 0 1 1-2.68-.7c.12-.43.22-.87.31-1.3.17-.75.9-1.22 1.65-1.06Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M146.69 51.6c.7.31 1 1.13.7 1.83-.2.44-.41.88-.63 1.31a1.38 1.38 0 0 1-2.48-1.24c.2-.4.4-.8.58-1.2.31-.7 1.13-1.01 1.83-.7Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M41.67 55.45c.07.77-.5 1.44-1.25 1.5-.43.04-.86.1-1.26.19a1.38 1.38 0 1 1-.54-2.72c.5-.1 1.02-.17 1.55-.22.76-.07 1.43.5 1.5 1.25Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M44.58 55.78c.22-.73 1-1.15 1.72-.93l.74.23a1.38 1.38 0 1 1-.9 2.62l-.62-.2a1.38 1.38 0 0 1-.94-1.72Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M91.9 56.9c.05.76-.52 1.42-1.29 1.47-.44.02-.89.06-1.32.11a1.38 1.38 0 0 1-.31-2.75c.48-.05.96-.1 1.45-.13.77-.05 1.42.53 1.47 1.3Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M94.72 56.95c.07-.76.74-1.33 1.5-1.26l1.43.14a1.38 1.38 0 0 1-.32 2.75c-.45-.05-.9-.1-1.35-.13a1.38 1.38 0 0 1-1.26-1.5Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M101.64 57.83c.16-.75.9-1.22 1.64-1.07l1.39.31a1.38 1.38 0 1 1-.62 2.7l-1.34-.3a1.38 1.38 0 0 1-1.07-1.64Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M34.85 57.26c.48.6.39 1.46-.2 1.94-.33.27-.63.55-.9.84a1.38 1.38 0 0 1-2.03-1.89c.36-.39.76-.75 1.18-1.1.6-.48 1.46-.39 1.95.2Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M85 57.9c.29.71-.06 1.51-.78 1.8a15.8 15.8 0 0 0-1.26.54 1.38 1.38 0 1 1-1.15-2.52 71.64 71.64 0 0 1 1.4-.6c.71-.28 1.52.07 1.8.78Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M143.4 57.76c.61.47.72 1.34.26 1.95-.3.39-.62.77-.94 1.14a1.38 1.38 0 0 1-2.09-1.81 24 24 0 0 0 .84-1.03c.47-.6 1.33-.71 1.94-.25Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M108.43 59.46c.22-.74.99-1.15 1.72-.93l1.35.41a1.38 1.38 0 1 1-.82 2.64l-1.32-.4a1.38 1.38 0 0 1-.93-1.72Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M115.08 61.58a1.38 1.38 0 0 1 1.77-.82l1.32.48a1.38 1.38 0 0 1-.97 2.6c-.43-.17-.87-.33-1.3-.48a1.38 1.38 0 0 1-.82-1.78Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M138.67 62.89c.42.64.25 1.5-.4 1.92-.41.27-.85.54-1.29.78a1.38 1.38 0 0 1-1.32-2.43c.37-.2.73-.43 1.1-.66.63-.42 1.49-.25 1.91.39Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M30.5 62.78c.77.07 1.33.74 1.26 1.5l-.03.59.01.75-1.6 1.4a1.38 1.38 0 0 1-1.16-1.32l-.02-.83c0-.28.02-.56.04-.84.07-.76.75-1.32 1.5-1.25Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M121.6 64.07c.3-.7 1.1-1.04 1.8-.75a146.8 146.8 0 0 1 1.26.52 1.38 1.38 0 1 1-.97 2.59 19.62 19.62 0 0 1-1.35-.55c-.7-.3-1.04-1.1-.74-1.81Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M72.11 64.94c.48.6.4 1.47-.2 1.95-.38.3-.74.62-1.09.92A1.38 1.38 0 1 1 69 65.73c.37-.33.76-.66 1.17-.99.59-.48 1.46-.39 1.94.2Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M132.4 65.92c.09.76-.46 1.44-1.22 1.53-.5.05-1.02.08-1.53.09a1.38 1.38 0 1 1-.02-2.77c.42 0 .84-.03 1.25-.07.76-.09 1.44.46 1.53 1.22Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M66.66 69.9c.57.52.6 1.4.09 1.96l-.73.8-.02.02-.16.18-.08.09a1.38 1.38 0 0 1-2.05-1.86l.25-.28.75-.82c.51-.56 1.39-.6 1.95-.09Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M61.6 75.28c.45.61.31 1.48-.3 1.93-.44.31-.88.61-1.36.89a1.38 1.38 0 1 1-1.4-2.4c.4-.22.77-.46 1.12-.72a1.38 1.38 0 0 1 1.94.3Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M37.67 75.97c.42.19.86.37 1.35.53a1.38 1.38 0 0 1-.89 2.62c-.56-.19-1.1-.4-1.6-.63l.72-2.63c.14.01.28.05.42.11Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M55.05 78.57c.12.75-.4 1.46-1.15 1.58-.5.08-1 .15-1.54.2a1.38 1.38 0 1 1-.28-2.75c.49-.05.95-.11 1.39-.18.75-.12 1.46.4 1.58 1.15Z",fill:"var(--semi-color-primary)"}),a.createElement("path",{d:"M43.4 78.87c.06-.76.73-1.33 1.49-1.27a38.43 38.43 0 0 0 1.5.1 1.38 1.38 0 1 1-.12 2.76 62.94 62.94 0 0 1-1.6-.1 1.38 1.38 0 0 1-1.27-1.49Z",fill:"var(--semi-color-primary)"}),a.createElement("g",{clipPath:"url(#clip_failure_96_39_65)"},a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M30.9 46.87a13.45 13.45 0 0 1 9.37-16.53 13.46 13.46 0 0 1 16.52 9.39c2.64 9.56-4.76 29.27-5.14 29.9a.75.75 0 0 1-.99.27c-.64-.34-17.11-13.47-19.76-23.03Zm14.36 1.54a6.1 6.1 0 0 1-3.25-11.75 6.1 6.1 0 0 1 3.25 11.75Z",fill:"var(--semi-color-primary)"})),a.createElement("path",{d:"M102.31 100.69c-2.8 1.55-5.63 2.85-9.36 4.58l1.48 3.92c2.14-.96 6.16-6.03 7.88-8.5Z",fill:"#515151"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M121 63.04c8.85 2.1 12.43-6.5 13.12-8.77.68-2.27-5.6-11.86-8-11.2l-.42.12-.23.06c-3.1.82-11.15 2.94-12.35 8-1.3 5.46 2.4 10.49 7.88 11.79Z",fill:"#515151"}),a.createElement("path",{d:"M134.5 64.73c-.43.47-1.2.74-2.33.73a12.7 12.7 0 0 1-4.06-.86 31.25 31.25 0 0 1-9.94-6.22c-3.25-2.97-5.97-5.8-7.59-8.42-1.61-2.61-2.05-4.88-.98-6.84a3.7 3.7 0 0 1 2.11-1.86 4.53 4.53 0 0 1 2.9.15c2.16.76 4.57 2.83 6.48 6.02 3.4 5.63 6.89 8.23 9.7 10.33.49.35.95.7 1.38 1.03a7.29 7.29 0 0 1 2.61 3.48c.34 1.1.16 1.97-.28 2.46Z",fill:"white",stroke:"#515151"}),a.createElement("mask",{id:"mask_failure_130_526","mask-type":"alpha",maskUnits:"userSpaceOnUse",x:98,y:44,width:36,height:27},a.createElement("path",{d:"M130.53 62.1c-.5-3.3-9.52-14.75-16.08-15.03l-12.68 4.52 6.47 14.16 17.25 3.07c1.84-1.14 5.43-4.07 5.04-6.72Z",fill:"#C4C4C4"})),a.createElement("g",{mask:"url(#mask_failure_130_526)"},a.createElement("path",{d:"M127.2 63.62a9.74 9.74 0 0 1-13.76.5 9.74 9.74 0 0 1-.32-13.77 9.74 9.74 0 0 1 13.77-.5 9.74 9.74 0 0 1 .32 13.77Z",fill:"white",stroke:"#515151"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m116.79 47.35-.02.37c2.86.5 8.57 2.59 8.58 6.87 0 5.36-7.44 9.34-14.47 3.46-.34-.28-.66-.53-.95-.74a10.09 10.09 0 0 0 3.17 7.17 10.24 10.24 0 0 0 14.47-.52 10.24 10.24 0 0 0-.34-14.47 10.16 10.16 0 0 0-10.44-2.14Z",fill:"#515151"}),a.createElement("path",{d:"M119.34 55a.79.79 0 1 0-1.1-1.12.79.79 0 0 0 1.1 1.12Z",fill:"#515151"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M119.98 50.72c.21-.09.45.01.54.22a7.87 7.87 0 0 0 1.84 2.65.41.41 0 1 1-.55.62 8.67 8.67 0 0 1-2.05-2.95.41.41 0 0 1 .22-.54Z",fill:"#515151"}),a.createElement("path",{d:"M114.85 52.4a.79.79 0 1 0-1.1-1.1.79.79 0 0 0 1.1 1.1Z",fill:"#515151"}),a.createElement("mask",{id:"path-18-inside-1",fill:"white"},a.createElement("ellipse",{rx:2.97818,ry:2.97818,transform:"matrix(0.727696 0.6859 -0.685903 0.727693 128.435 60.0508)"})),a.createElement("ellipse",{rx:2.97818,ry:2.97818,transform:"matrix(0.727696 0.6859 -0.685903 0.727693 128.435 60.0508)",fill:"white"}),a.createElement("path",{d:"m128.42 60.04.01-.01a.03.03 0 0 1 .02 0l-4.12 4.37a5.98 5.98 0 0 0 8.45-.25l-4.36-4.11Zm.03 0v.02l-4.37-4.11a5.98 5.98 0 0 0 .25 8.45l4.12-4.37Zm0 .03h-.01a.03.03 0 0 1-.02 0l4.12-4.37a5.98 5.98 0 0 0-8.46.25l4.37 4.12Zm-.03 0v-.03l4.37 4.11a5.98 5.98 0 0 0-.25-8.45l-4.12 4.37Z",fill:"#515151",mask:"url(#path-18-inside-1)"})),a.createElement("path",{d:"M145.63 40.19c1.37-2.75 12.75 2.35 16.14 6.78 3.38 4.43 1.48 10.74-1.9 9.68-6.69-2.12-7.56-6.7-7.94-9.48-1.2-1.85-7.67-4.24-6.3-6.98Z",fill:"white",stroke:"#515151"}),a.createElement("path",{d:"m158.95 41.56 6.64 2.52 1.66 12.47-8.3 1.98-3.47-12.03 3.47-4.94Z",fill:"white"}),a.createElement("path",{d:"M167.3 151.94c5.19 1.66 23.35 35.57 19.05 35.57-13.86 0-34.5.53-71.42.53-15.63 0-17.9-5.16-11.79-22.08a353.23 353.23 0 0 1 6.14-15.76l32.5 1.26c-.43 1.53-.91 3.07-1.38 4.4a26.82 26.82 0 0 1 8.73-1.47c5.27 0 7.04 1.4 11.77 0 2.13-.62 4.8-2.97 6.4-2.45Z",fill:"white",className:""}),a.createElement("path",{d:"M140.4 155.87c.47-1.34.95-2.88 1.38-4.4l-32.5-1.27a353.23 353.23 0 0 0-6.14 15.76c-6.1 16.92-3.84 22.08 11.79 22.08 36.93 0 57.56-.53 71.42-.53 4.3 0-13.86-33.91-19.06-35.57-1.6-.52-4.26 1.83-6.4 2.45-4.72 1.4-6.5 0-11.76 0-3.08 0-6.06.55-8.72 1.48Zm0 0a26.67 26.67 0 0 1-4.44 8.38c-1.7 2.22-3.99 4.43-5.43 4.33-1.44-.1-1.42-3.18 0-5.66 1.97-3.44 6.45-5.87 9.88-7.05Z",stroke:"#1C1F23",className:""}),a.createElement("path",{d:"M149.25 131.7s3.36 19.46-12.34 21.04c-11.53 1.15-40.77-4.55-53.76-7.79 4.72 12.82 9.61 39.86 7 42.16-3.33 2.93-47.55 1.76-55.96 0-8.42-1.75 13.82-11.46 15.45-14.66 2.99-5.84-5.48-21.18-5.75-45.45-.27-24.27 18.18-24.86 34.47-21.64 13.02 2.57 41.63 18.33 52.56 26.86l18.33-.52Z",fill:"white",stroke:"#515151"}),a.createElement("path",{d:"M141.5 153.87c-3.11 2.55-27.72 5-35.58 3.53l2.75-6.8c20.23 2.85 28.08 3.34 33.46 1.16l-.63 2.11Z",fill:"#515151",className:"__web-inspector-hide-shortcut__"}),a.createElement("path",{d:"M141.5 153.87c-3.11 2.55-27.72 5-35.58 3.53l2.75-6.8c20.23 2.85 28.08 3.34 33.46 1.16l-.63 2.11Z",fill:"#515151"}),a.createElement("path",{d:"M126.02 142.7c-3.1-2.99-4.99-7.5-4.16-12.35",stroke:"#515151"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M130.6 95.65c-9.03-10.98-18.97-19.74-25.5-24.56l1.63-2.22c6.7 4.95 16.81 13.86 26 25.02 9.18 11.16 17.54 24.67 20.59 38.83l-2.7.59c-2.91-13.56-10.97-26.67-20.02-37.66Z",fill:"#515151"}),a.createElement("path",{d:"m149.12 107.09-16.36 13.2 22.27 17.8 8.87-19.19c-.14-3.93-2.34-5.34-5.83-4.66l-3.12-2.5c.08-3.5-2.18-5.64-5.83-4.65Z",fill:"#E6E8EA"}),a.createElement("path",{d:"m148.24 128.62 9.45-14.34-2.91-2.33-10.94 13.07 4.4 3.6Z",stroke:"#515151"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M143.67 127.98a6.93 6.93 0 1 1-10.82-8.65 6.93 6.93 0 0 1 10.82 8.65Zm12.28 9.82a6.93 6.93 0 1 1-10.82-8.66 6.93 6.93 0 0 1 10.82 8.66Z",fill:"#515151"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m133.43 123.46 9.21-1.8.32 1.61-9.2 1.81-.33-1.62Z",fill:"white"}),a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m145.5 133.11 9.21-1.8.32 1.62-9.2 1.8-.33-1.62Z",fill:"white"}),a.createElement("defs",null,a.createElement("clipPath",{id:"clip_failure_96_39_65"},a.createElement("rect",{width:44.4004,height:44.4627,transform:"matrix(0.963965 -0.266028 0.266198 0.963918 18.4214 34.6221)",fill:"white"}))))}var ld=ad;const Dr=n=>{let e;const t=new Set,o=(p,d)=>{const m=typeof p=="function"?p(e):p;if(!Object.is(m,e)){const f=e;e=d??(typeof m!="object"||m===null)?m:Object.assign({},e,m),t.forEach(b=>b(e,f))}},r=()=>e,c={setState:o,getState:r,getInitialState:()=>u,subscribe:p=>(t.add(p),()=>t.delete(p))},u=e=n(o,r,c);return c},cd=(n=>n?Dr(n):Dr),dd=n=>n;function ud(n,e=dd){const t=g.useSyncExternalStore(n.subscribe,g.useCallback(()=>e(n.getState()),[n,e]),g.useCallback(()=>e(n.getInitialState()),[n,e]));return g.useDebugValue(t),t}const $r=n=>{const e=cd(n),t=o=>ud(e,o);return Object.assign(t,e),t},gt=(n=>n?$r(n):$r);function pd(){var n,e;return((e=(n=window.__TAURI__)==null?void 0:n.core)==null?void 0:e.invoke)||null}const hd=ee;async function Oe(n,e){const t=await fetch(`${hd}${n}`,{headers:{"Content-Type":"application/json"},...e});if(!t.ok){const o=await t.text().catch(()=>"");let r=`${t.status} ${t.statusText}`;try{const s=JSON.parse(o);r=s.error||s.message||r}catch{}throw new Error(r)}return t.json()}function be(){return window.ga||null}function xe(){return!!be()}async function md(){if(xe())try{return(await be().getConfig()).config}catch{}try{return(await Oe("/config")).config}catch{return{lang:localStorage.getItem("ga_lang")||"zh",theme:"light",appearance:localStorage.getItem("ga_appearance")||"light",plain:!1,fontSize:parseInt(localStorage.getItem("ga_font_size")||"14",10),llmNo:0}}}async function fd(n){if(xe())try{await be().saveConfig({config:n});return}catch{}try{await Oe("/config",{method:"POST",body:JSON.stringify({config:n})})}catch{}}async function gd(){if(xe())try{return(await be().getModelProfiles()).profiles||[]}catch{}try{return(await Oe("/model-profiles")).profiles||[]}catch{return[]}}async function yd(n){if(xe())try{return(await be().rpc("model-profiles/get",{id:n})).profile||null}catch{}try{return(await Oe(`/model-profiles/${n}`)).profile||null}catch{return null}}async function bd(n){return xe()?(await be().rpc("model-profiles/add",n)).profiles:(await Oe("/model-profiles",{method:"POST",body:JSON.stringify(n)})).profiles}async function vd(n,e){return xe()?(await be().rpc("model-profiles/edit",{id:n,...e})).profiles:(await Oe(`/model-profiles/${n}`,{method:"PUT",body:JSON.stringify(e)})).profiles}async function xd(n){return xe()?(await be().rpc("model-profiles/delete",{id:n})).profiles:(await Oe(`/model-profiles/${n}`,{method:"DELETE"})).profiles}async function wd(n){return xe()?(await be().rpc("model-profiles/mixin-add",{id:n})).profiles:(await Oe(`/model-profiles/${n}/mixin`,{method:"POST",body:"{}"})).profiles}async function Cd(n){return xe()?(await be().rpc("model-profiles/mixin-remove",{id:n})).profiles:(await Oe(`/model-profiles/${n}/mixin`,{method:"DELETE"})).profiles}async function Ar(n){return xe()?(await be().rpc("model-profiles/mixin-reorder",{members:n})).profiles:(await Oe("/model-profiles/mixin/order",{method:"PUT",body:JSON.stringify({members:n})})).profiles}async function Sd(){if(xe())try{return(await be().getMykeyContent()).content}catch{}try{return(await Oe("/services/mykey")).content||""}catch{return""}}async function kd(n){if(xe()){await be().saveMykeyContent(n);return}await Oe("/services/mykey",{method:"POST",body:JSON.stringify({content:n})})}async function _e(n,e){if(xe())return be().tauriInvoke(n,e);const t=pd();if(t)return t(n,e);throw new Error("Tauri IPC not available")}const Et={lang:"ga_lang",theme:"ga_theme",appearance:"ga_appearance",fontSize:"ga_font_size",llmNo:"ga_llm_no"};function jd(n){try{localStorage.setItem(Et.lang,n.lang),localStorage.setItem(Et.appearance,n.appearance),localStorage.setItem(Et.fontSize,String(n.chatFontSize)),localStorage.setItem(Et.llmNo,String(n.defaultModelNo))}catch{}}function Gn(n,e){const t=document.documentElement;t.dataset.appearance=n,delete t.dataset.plain,t.dataset.chatFont=String(e),t.style.setProperty("--chat-font",e+"px"),n==="dark"?document.body.setAttribute("theme-mode","dark"):document.body.removeAttribute("theme-mode")}function Ed(){const n=document.documentElement;return{appearance:n.dataset.appearance==="dark"?"dark":"light",chatFontSize:parseInt(n.dataset.chatFont||"14",10)||14,lang:n.lang==="en"?"en":"zh",defaultModelNo:parseInt(localStorage.getItem(Et.llmNo)||"0",10)}}const H=gt((n,e)=>({visible:!1,modelProfiles:[],liveModel:null,...Ed(),open:()=>n({visible:!0}),close:()=>n({visible:!1}),setAppearance:t=>{n({appearance:t}),Gn(t,e().chatFontSize),e().persist()},setChatFontSize:t=>{const o=Math.max(10,Math.min(20,t));n({chatFontSize:o}),Gn(e().appearance,o),e().persist()},setLang:t=>{n({lang:t}),document.documentElement.lang=t==="en"?"en":"zh-CN",e().persist()},setModelProfiles:t=>n({modelProfiles:t}),setDefaultModel:t=>{e().modelProfiles[t]&&(n({defaultModelNo:t}),e().persist())},setLiveModel:t=>n({liveModel:t}),loadFromBridge:async()=>{try{const[t,o]=await Promise.all([md(),gd()]);n({appearance:t.appearance==="dark"?"dark":"light",chatFontSize:t.fontSize||14,lang:t.lang==="en"?"en":"zh",defaultModelNo:t.llmNo||0,modelProfiles:o});const r=e();Gn(r.appearance,r.chatFontSize)}catch{}},persist:async()=>{const t=e();jd(t);try{await fd({lang:t.lang,theme:"1",appearance:t.appearance,plain:!1,fontSize:t.chatFontSize,llmNo:t.defaultModelNo})}catch{}}})),Od={robot:"","symbol-misc":"",comment:"",files:"",graph:"",search:"",add:"","kebab-vertical":"",grabber:"","arrow-left":"","chevron-right":"","settings-gear":"","server-process":"",link:"","layout-sidebar-left":"","layout-sidebar-left-off":"","circle-filled":"","layout-sidebar-right":"","layout-sidebar-right-off":"",pin:"",pinned:"",edit:"",trash:""};function Ee({name:n,size:e,className:t}){const o=Od[n];return i.jsx("span",{className:`codicon${t?" "+t:""}`,style:{fontSize:e,display:"inline-block",lineHeight:1},"aria-hidden":"true",children:o??"?"})}const Ie=gt(n=>({activePage:"chat",sidebarCollapsed:!1,servicesTab:"channels",setPage:e=>n({activePage:e}),setServicesTab:e=>n({servicesTab:e}),toggleSidebar:()=>n(e=>({sidebarCollapsed:!e.sidebarCollapsed}))}));typeof window<"u"&&window.addEventListener("ga:go-page",(n=>{Ie.getState().setPage(n.detail.page)}));function Fr(n,e="completed"){const t={id:String(n.id),role:n.role,content:n.content||"",status:n.status??e,createdAt:n.createdAt??n.ts};return Array.isArray(n.turn_segs)&&(t.turn_segs=n.turn_segs),Array.isArray(n.images)&&n.images.length>0&&(t.images=n.images),Array.isArray(n.files)&&n.files.length>0&&(t.files=n.files),t}async function Pd(){return(await(await fetch(`${ee}/session/new`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cwd:"",mcp_servers:[]})})).json()).sessionId}async function _d(n,e,t){const r=await(await fetch(`${ee}/upload`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e,dataUrl:t,sid:n})})).json();if(!r.ok)throw new Error(r.error||"upload failed");return r.path}async function Md(n,e){const o=await(await fetch(`${ee}/upload`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:n,dataUrl:e,sid:"_files"})})).json();if(!o.ok)throw new Error(o.error||"upload failed");return o.path}async function Ld(n,e,t,o){var u;const r=(t||[]).map(p=>({name:p.name,path:p.path,size:p.size})),s=[];for(const p of o||[])if(p.path&&!p.path.startsWith("data:")&&p.path!==p.name)s.push({name:p.name,path:p.path});else{const m=p.base64||((u=p.path)!=null&&u.startsWith("data:")?p.path:void 0);if(m){const f=await _d(n,p.name,m);s.push({name:p.name,path:f})}}return(await(await fetch(`${ee}/session/${n}/prompt`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:n,prompt:e,display:e,files:r,imageMetas:s})})).json()).userMessageId}async function Qn(n,e,t=50){const o=new URLSearchParams({limit:String(t)}),s=await(await fetch(`${ee}/session/${n}/messages?${o}`)).json();return{messages:(s.messages||[]).map(l=>Fr(l)),partial:s.partial?Fr(s.partial,"in_progress"):void 0,status:s.status,plan:s.plan,model:s.model}}async function Id(n){await fetch(`${ee}/session/${n}/cancel`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:n})})}async function zr(n,e){return(await fetch(`${ee}/session/${n}/model`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({llmNo:e})})).json()}async function Yn(){return((await(await fetch(`${ee}/sessions`)).json()).sessions||[]).filter(o=>!o.id.startsWith("tui_"))}async function Td(n){await fetch(`${ee}/session/${n}`,{method:"DELETE"})}async function Rd(n,e){await fetch(`${ee}/session/${n}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:e})})}async function Nd(n,e){await fetch(`${ee}/session/${n}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({pinned:e})})}const Ct="__partial__",Dd=1e3;let St=null,st=null,tn=null;const je=new Map,X=gt((n,e)=>{function t(p,d,m){const f=p.filter(S=>S.id!==Ct),b=f.filter(S=>String(S.id).startsWith("local-"));let y=f.filter(S=>!String(S.id).startsWith("local-"));for(const S of d){if(y.some(C=>C.id===S.id))continue;const w=b.findIndex(C=>C.role===S.role&&C.content===S.content);w>=0&&b.splice(w,1),y.push(S)}return y=[...y,...b],y.sort((S,w)=>(S.createdAt??0)-(w.createdAt??0)),m&&y.push({...m,id:Ct,status:"in_progress"}),y}function o(p){for(let d=p.length-1;d>=0;d--)if(p[d].role==="user"&&p[d].createdAt)return p[d].createdAt;return Date.now()}function r(p,d){je.set(p,d);const{activeSessionId:m}=e();p===m&&n({turnStartedAt:d})}function s(p){je.delete(p);const{activeSessionId:d}=e();p===d&&n({turnStartedAt:null})}function l(){if(st=null,!St)return;const p=St;St=null;const{messages:d}=e(),m=d.filter(f=>f.id!==Ct);n({messages:[...m,p]})}function c(){u(),tn=setInterval(()=>{const{activeSessionId:p,status:d}=e();if(!p||d!=="running"){u();return}Qn(p).then(m=>{if(n(f=>({messages:t(f.messages,m.messages,m.partial),status:m.status,turnStartedAt:m.status==="running"?f.turnStartedAt:null})),m.model&&(H.getState().setLiveModel(m.model),m.model.llmNo!=null&&m.status!=="running"&&n({sessionModelNo:m.model.llmNo})),m.status!=="running"){s(p),u();const{pendingQueue:f,status:b}=e();if(b==="idle"&&f.length>0){const[y,...S]=f;n({pendingQueue:S}),e().sendMessage(y.text,y.opts)}}}).catch(()=>{})},Dd)}function u(){tn!==null&&(clearInterval(tn),tn=null)}return Ve("partial-update",p=>{const d=p,{activeSessionId:m}=e();!d.sessionId||d.sessionId!==m||(St={id:Ct,role:"assistant",content:d.content||"",status:"in_progress",turn_segs:d.turn_segs},st===null&&(st=requestAnimationFrame(l)))}),Ve("session-state",p=>{const d=p;d.sessionId&&d.status&&n(f=>{const b=new Set(f.runningSessions);return d.status==="running"?b.add(d.sessionId):b.delete(d.sessionId),{runningSessions:b}});const{activeSessionId:m}=e();d.sessionId&&d.sessionId===m&&(d.status==="running"?(je.has(d.sessionId)?n({turnStartedAt:je.get(d.sessionId)}):r(d.sessionId,Date.now()),n({status:"running"}),c()):(d.status==="idle"||d.status==="error"||d.status==="cancelled")&&(u(),st!==null&&(cancelAnimationFrame(st),st=null),St=null,s(d.sessionId),n({status:"idle"}),Qn(m).then(f=>{n(S=>({messages:t(S.messages.filter(w=>w.id!==Ct),f.messages,void 0)})),f.model&&(H.getState().setLiveModel(f.model),f.model.llmNo!=null&&n({sessionModelNo:f.model.llmNo}));const{pendingQueue:b,status:y}=e();if(y==="idle"&&b.length>0){const[S,...w]=b;n({pendingQueue:w}),e().sendMessage(S.text,S.opts)}}).catch(()=>{}))),d.sessionId&&d.sessionId!==m&&(d.status==="idle"||d.status==="error"||d.status==="cancelled"?je.delete(d.sessionId):d.status==="running"&&!je.has(d.sessionId)&&je.set(d.sessionId,Date.now())),(d.status==="idle"||d.status==="error")&&Yn().then(f=>n({sessions:f})).catch(()=>{})}),Yn().then(p=>n({sessions:p})).catch(()=>{}),{activeSessionId:null,messages:[],status:"idle",sessions:[],runningSessions:new Set,turnStartedAt:null,pendingQueue:[],sessionModelNo:null,async newSession(){n({activeSessionId:null,messages:[],status:"idle",turnStartedAt:null,pendingQueue:[],sessionModelNo:null})},async sendMessage(p,d){var C;let{activeSessionId:m,status:f}=e();if(!m){m=await Pd(),n({activeSessionId:m}),e().loadSessions();const k=e().sessionModelNo;k!=null&&zr(m,k).catch(()=>{})}if(f==="running"){n(k=>({pendingQueue:[...k.pendingQueue,{text:p,opts:d}]}));return}const b=Date.now(),y=(C=d==null?void 0:d.images)==null?void 0:C.map(k=>({name:k.name,path:k.base64||k.path||k.name})),S=d==null?void 0:d.files,w={id:`local-${b}`,role:"user",content:p,status:"completed",createdAt:b,images:y,files:S};n(k=>({messages:[...k.messages,w],status:"running"})),r(m,b),c(),await Ld(m,p,d==null?void 0:d.files,d==null?void 0:d.images)},cancelQueued(p){n(d=>({pendingQueue:d.pendingQueue.filter((m,f)=>f!==p)}))},async cancel(){const{activeSessionId:p}=e();p&&await Id(p)},setActiveSession(p){u();const d=p?je.get(p)??null:null;n({activeSessionId:p,messages:[],status:"idle",turnStartedAt:d,pendingQueue:[],sessionModelNo:null}),p&&Qn(p).then(m=>{const f=t([],m.messages,m.partial);if(n({messages:f,status:m.status}),m.model&&(H.getState().setLiveModel(m.model),m.model.llmNo!=null&&n({sessionModelNo:m.model.llmNo})),m.status==="running"){if(je.has(p))n({turnStartedAt:je.get(p)});else{const b=o(m.messages);r(p,b)}c()}else je.delete(p),n({turnStartedAt:null})}).catch(()=>{})},async loadSessions(){try{const p=await Yn();n({sessions:p})}catch{}},async deleteSession(p){const{activeSessionId:d}=e();d===p&&n({activeSessionId:null,messages:[],status:"idle",turnStartedAt:null}),je.delete(p),n(m=>({sessions:m.sessions.filter(f=>f.id!==p)}));try{await Td(p)}catch{}},async renameSession(p,d){n(m=>({sessions:m.sessions.map(f=>f.id===p?{...f,title:d,untitled:!1}:f)}));try{await Rd(p,d)}catch{}},async pinSession(p,d){n(m=>({sessions:m.sessions.map(f=>f.id===p?{...f,pinned:d}:f)}));try{await Nd(p,d)}catch{}},async selectSessionModel(p){const{activeSessionId:d}=e(),m=e().sessionModelNo;if(n({sessionModelNo:p}),!!d)try{const f=await zr(d,p);f.model&&(H.getState().setLiveModel(f.model),f.model.llmNo!=null&&n({sessionModelNo:f.model.llmNo}))}catch{n({sessionModelNo:m})}}}});Ys(n=>{n==="ready"&&X.getState().loadSessions()});const $d={"app.title":"GenericAgent","brand.sub":"","nav.chat":"新建会话","nav.services":"运行状态","nav.channels":"消息通道","nav.status":"运行状态","nav.collab":"指挥家","nav.token":"用量","foot.settings":"配置","foot.runtimeManagement":"运行时管理","foot.ver":"GenericAgent","chat.startTitle":"开始对话","chat.startSub":"直接输入,或点预设功能一键启动","chat.inputPlaceholder":"输入消息…","preset.butler.t":"指挥家","preset.butler.d":"复杂任务自动拆解,只需查看进度和简报","preset.plan.t":"计划模式","preset.plan.d":"加载 Plan SOP,按探索→规划→执行→验证流程","preset.goal.t":"目标模式","preset.goal.d":"设定目标,自主完成","preset.autonomous.t":"自主行动","preset.autonomous.d":"按 SOP 规划/执行任务,产出报告(reflect/autonomous.py 同源)","preset.hive.t":"集群协作","preset.hive.d":"多 worker 协同攻坚","preset.review.t":"深度复核","preset.review.d":"挑刺式质量把关","preset.findwork.t":"找点事做","preset.findwork.d":"分析当前情况,推荐一批让你感兴趣的 TODO","preset.mine.t":"我的·周报","preset.mine.d":"自定义:抓本周提交并写周报","preset.add.t":"自定义","preset.add.d":"任意一句话存为功能","composer.placeholder":"今天帮你做些什么?","composer.placeholder.new.0":"今天帮你做些什么?@ 引用文件;/ 调用预设技能","composer.placeholder.new.1":"交给我一个任务","composer.placeholder.new.2":"有什么想法?","composer.placeholder.new.3":"描述你的需求","composer.placeholder.new.4":"今天解决什么?","composer.placeholder.new.5":"随便问","composer.placeholder.new.6":"从目标开始","composer.placeholder.followUp.0":"继续补充…","composer.placeholder.followUp.1":"添加更多上下文","composer.placeholder.followUp.2":"细化你的请求","composer.placeholder.followUp.3":"接下来做什么?","composer.placeholder.followUp.4":"继续推进","composer.placeholder.reconnecting":"重新连接中…","search.placeholder":"搜索会话…","search.noResults":"无匹配会话","conv.new":"新对话","section.sessions":"会话","ctx.pin":"置顶","ctx.unpin":"取消置顶","ctx.rename":"重命名","ctx.del":"删除","common.close":"关闭","common.more":"更多","common.optional":"选填","common.save":"保存","common.cancel":"取消","common.confirm":"确认","common.edit":"编辑","common.delete":"删除","common.done":"完成","modal.preset":"预设功能","modal.addModel":"添加模型","modal.editModel":"编辑模型","modal.settings":"配置","modal.features":"功能","modal.customPreset":"自定义预设","modal.editCustomPreset":"编辑任务","customPreset.titlePh":"标题,例如「写周报」","customPreset.promptPh":"Prompt 内容,发送时会作为消息提交","customPreset.empty":"标题和 Prompt 不能为空","customPreset.removeTitle":"删除","customPreset.editTitle":"编辑","builtinPreset.restoreBtn":"恢复默认预设","set.appearance":"外观","set.plainUi":"素色","set.fontSize":"聊天字号","set.lang":"语言","set.model":"模型配置","set.addModel":"添加模型","set.features":"功能","set.importMykey":"导入已有密钥配置","set.exportMykey":"导出当前模型配置","set.serviceManager":"运行状态","shortcut.askConfirm":"是否在桌面创建 GenericAgent 快捷方式?","appearance.light":"浅色","appearance.dark":"深色","set.noModels":"暂无模型,点击下方添加","set.current":"当前","lang.zh":"简体中文","lang.en":"English","model.name":"备注名","model.namePh":"选填,方便自己辨认","model.apikey":"API Key","model.apikeyPh":"请输入 API Key","model.apikeyKeep":"留空则保持原 Key 不变","model.apibase":"API URL","model.apibasePh":"请输入 API URL","model.protocol":"模型协议","model.protocolPick":"请选择…","model.protocolOai":"OpenAI 兼容 (chat/completions)","model.protocolClaude":"Anthropic (Claude /v1/messages)","model.stream":"响应方式","model.streamOn":"流式","model.streamOff":"非流式","model.model":"模型 ID","model.modelPh":"请输入模型唯一标识","model.modelHint":"须与服务商文档中的 model 字段完全一致","model.retries":"重试次数","model.connTimeout":"连接超时 (s)","model.readTimeout":"读取超时 (s)","model.save":"保存","model.auto":"自动选择","model.menuLabel":"选择模型","model.aggregation":"默认组","model.aggregationShort":"默认组","model.aggregationDesc":"按顺序尝试,失败自动切换到下一个","model.configurationHelp":"模型配置说明","model.configurationTip":"设置新会话默认使用的模型;也可以在会话输入框中临时切换","model.aggregationTip":"默认组会按列表顺序尝试模型;当前模型不可用时自动切换到下一项","model.emptyMixin":"尚未加入模型","model.addToMixin":"加入默认组","model.inMixin":"已在默认组","model.removeFromMixin":"移出默认组","model.alreadyInMixin":"已在默认组中","model.dragReorder":"拖拽调整顺序","model.routeProvider":"服务商接入","model.routeCustom":"自定义接入","model.selectProvider":"选择服务商","model.providerLocked":"由服务商预设,不可更改","model.advanced":"高级配置","model.getKey":"获取 API Key →","pq.title":"快速接入官方模型","pq.sub":"填好 API Key 即可使用","pq.toggle":"展开 / 收起","pq.deepseekDesc":"深度求索 · DeepSeek 开放平台","pq.qwenDesc":"阿里云百炼 · 通义大模型","pq.doubaoDesc":"火山引擎 · 火山方舟平台","pq.minimaxDesc":"MiniMax · 开放平台","pq.zhipuDesc":"智谱 AI · GLM 开放平台","pq.kimiDesc":"月之暗面 · Moonshot 平台","pq.stepfunDesc":"阶跃星辰 · Step 开放平台","guide.step1":"点击下方链接,登录后创建并复制 API Key","guide.step2":"把 Key 粘贴到下方「API Key」输入框","guide.step3":"点击保存,即可在模型列表中选用","guide.prefillTip":"已为你预填 API 地址、协议与模型,可按需修改","guide.getKey":"获取 {name} 的 API Key","guide.copy":"复制链接","guide.copied":"链接已复制","err.modelSave":"保存失败","err.modelRequired":"请填写模型、API Key 和 API 地址","err.modelDelete":"删除失败","err.modelDeleteLast":"至少保留一个模型","err.mixinFailed":"操作失败","confirm.modelDelete":"确定删除该模型配置?","page.services.title":"运行状态","page.services.sub":"查看消息通道及本地运行环境中各组件的状态、日志与控制项","svc.colName":"运行组件","svc.colStatus":"状态","svc.colPid":"PID","svc.colMemory":"内存 (MB)","svc.colCpu":"CPU (%)","svc.colActions":"操作","svc.empty":"暂无运行组件","page.channels.title":"消息通道","page.channels.sub":"管理消息通道,查看启停状态与日志","page.status.title":"运行状态","page.status.sub":"查看本地运行环境中各组件的状态、日志与控制项","page.collab.title":"指挥家","page.collab.sub":"交代目标,自动拆活与跟进","collab.progressTitle":"分工进度","collab.progressEmpty":"还没有任务在执行。告诉指挥家你的目标后,这里会显示拆分后的处理进度。","collab.placeholder":"请对指挥家描述你想完成的目标","collab.guideTitle":"把要完成的事告诉指挥家","collab.guideWhen":"适合需要多步处理、要花一些时间才能完成的目标。日常聊天和快问快答,请用左侧「聊天」。","collab.guideStep1t":"描述目标","collab.guideStep1d":"在聊天框里写下你想做的事,发给指挥家","collab.guideStep2t":"自动拆解","collab.guideStep2d":"指挥家自动拆解、分配任务,实时监督和调度","collab.guideStep3t":"交付摘要","collab.guideStep3d":"指挥家根据执行状态,呈上任务简报","collab.guideStep4t":"随时调整","collab.guideStep4d":"随时补充要求或细节,指挥家都会处理","collab.chipProgress":"现在进展如何?","collab.chipPause":"先暂停当前任务","collab.chipSummary":"总结一下目前的结果","collab.showProgressTitle":"查看分工进度","collab.statRunning":"进行中","collab.statDone":"已完成","collab.plusMenu":"更多操作","collab.switchMode":"切换模式","collab.typing":"指挥家正在处理","collab.offline":"暂时无法连接指挥家服务,请稍后重试。","collab.offlineTitle":"指挥家离线","collab.offlineSub":"指挥家服务暂时不可用,请检查连接后重试。","collab.retry":"重试","collab.terminateWorker":"终止任务","collab.terminateWorkerConfirm":"要终止“{name}”吗?该执行者当前尚未回报的进度可能会丢失。","collab.terminateWorkerFailed":"终止任务失败","collab.reconnect":"连接断开,正在重连… 已保留上次任务进度。","collab.reconnectIn":"{n} 秒后重试","collab.stRunning":"执行中","collab.stReported":"已回报","collab.stPaused":"已暂停","collab.stFailed":"遇到问题","collab.stTerminated":"已终止","collab.summaryRunning":"正在处理中…","collab.summaryWait":"等待回报","collab.taskFallback":"任务 {n}","collab.timeJust":"刚刚","collab.timeSec":"{n} 秒前","collab.timeMin":"{n} 分钟前","collab.timeHr":"{n} 小时前","collab.timeDay":"{n} 天前","page.token.title":"用量","page.token.sub":"每会话与累计用量及缓存率","status.connecting":"正在连接…","status.ready":"服务在线","status.running":"处理中","status.disconnected":"服务离线","status.stopped":"已停止","status.idle":"待命","conv.emptyList":"暂无会话,点「+ 新对话」开始","conv.defaultTitle":"新对话","err.bridge":"服务未响应","err.newSession":"新建会话失败","err.poll":"轮询失败","err.stop":"停止失败","err.interruptTimeout":"等待上一轮停止超时,请稍后再试","sys.interruptPrev.hint":"已停止上一轮,正在处理新消息","chat.interrupting":"正在停止上一轮…","chat.sessionLoading":"正在加载会话…","sys.stopRequested":"已请求停止","slash.help":`可用命令: +/new 新会话 /clear 清屏 /stop 停止 /settings 设置`,"slash.unknown":"未知命令","upload.hint":"上传文件:选择 / 拖拽 / 粘贴","upload.button":"上传文件","upload.tooLarge":"文件过大或数量超限","upload.empty":"跳过空文件","upload.failed":"上传失败","err.charLimit":"已达字数上限({n}),发送时将自动截断","err.charLimitReached":"已达字数上限({n})","err.numMax":"不能超过 {n}","file.openFailed":"无法打开文件","file.kindGeneric":"文件","file.kindDoc":"文档","file.kindSheet":"表格","file.kindSlide":"幻灯片","file.kindCode":"代码","file.kindArchive":"压缩包","file.kindAudio":"音频","file.kindVideo":"视频","upload.removeTitle":"移除","upload.dropHint":"松开以上传文件","lightbox.closeTitle":"关闭","fold.thinking":"思考","fold.tool":"工具调用","fold.toolResult":"工具结果","fold.llm":"LLM Running","fold.turn":"第 {n} 轮","plan.header":"计划 ({done}/{total})","plan.complete":"✓ 计划完成 ({n}/{n})","plan.running":"计划执行中","plan.completeTitle":"计划完成","plan.placeholder":"计划模式已激活","plan.waiting":"等待写入 {path} …","plan.overflow":"还有 {n} 项","plan.current":"当前","plan.collapse":"收起","plan.expand":"展开","plan.details":"详情","plan.capsuleRunning":"运行中","plan.capsuleComplete":"已完成","timing.elapsed":"已运行 {t}","chip.plan":"Plan","chip.auto":"Auto","ch.wechat":"微信","ch.wecom":"企业微信","ch.lark":"飞书","ch.dingtalk":"钉钉","ch.qq":"QQ","ch.telegram":"Telegram","ch.discord":"Discord","ch.loading":"加载中…","ch.empty":"未发现 IM 进程脚本","ch.logEmpty":"暂无日志","err.channelLoad":"加载失败","err.channelStart":"启动失败","err.channelStop":"停止失败","err.mykeyImport":"导入模型配置失败","err.mykeyExport":"导出模型配置失败","err.channelNotConfigured":"请先在密钥配置中完成该平台设置","sys.channelStarted":"已启动","sys.channelStopped":"已停止","sys.bridgeDisconnecting":"正在断开本地连接","modal.channelLogs":"进程日志","modal.mykeyConfig":"密钥配置","sys.configSaved":"配置已保存","sys.mykeyImported":"模型配置已导入","sys.mykeyExported":"模型配置已导出","st.starting":"启动中…","st.stopping":"停止中…","st.online":"在线","st.offline":"离线","st.error":"错误","st.running":"运行中","st.stopped":"已停止","st.abnormal":"异常","st.warning":"警告","err.portBusy":"端口被占用,已自动重连","err.conductorCrash":"内部线程异常退出","err.missingModule":"缺少依赖模块","err.connRefused":"连接被拒绝,将自动重试","err.timeout":"连接超时","err.apiKeyInvalid":"API Key 无效或已过期","err.modelNotFound":"模型不存在或不可用","err.rateLimit":"请求频率超限,请稍后重试","err.quotaExceeded":"额度不足","err.processCrash":"后台进程异常退出","act.configure":"配置","act.logs":"日志","act.restart":"重启","act.stop":"停止","act.start":"启动","act.disconnect":"断开","act.copy":"复制","act.copied":"已复制","act.copyTex":"TeX","act.send":"发送","proc.imbotWechat":"imbot · 微信","proc.imbotDing":"imbot · 钉钉","proc.bridge":"本地连接","proc.bridgeSummary":"连接桌面应用与本地运行环境","proc.bridgeTip":"保持桌面应用与本地运行环境通信","proc.scheduler":"定时任务","proc.schedulerSummary":"按计划自动执行任务","proc.schedulerTip":"在设定时间自动触发并执行任务","proc.conductor":"指挥家","proc.conductorSummary":"异步处理多步骤任务","proc.conductorTip":"通过异步对话拆解任务、分派执行,并持续跟进进度","proc.runtimeComponent":"运行组件","proc.runtimeComponentSummary":"本地运行环境中持续工作的组件","proc.runtimeComponentTip":"查看该组件的状态、日志与控制项","cm.scheduling":"调度中","cm.running":"执行中","cm.idleSt":"空闲","cm.master":"已派 3 子任务","cm.w1":"子任务:抓取数据","cm.w2":"子任务:复核结果","cm.sub":"等待派单","tok.total":"累计","tok.cost":"缓存率","tok.today":"今日","tok.tabAll":"会话","tok.tabConductor":"指挥家","tok.condTotal":"指挥家累计","tok.condCurrent":"指挥家本次","tok.condTip":"指挥家消耗不计入会话累计","tok.condOffline":"指挥家服务离线","tok.disclaimer":"不同 API 网站的计费价格可能会有差异,请以实际网站为准。","tok.colSession":"会话","tok.colIn":"输入","tok.colOut":"输出","tok.colCacheW":"缓存写入","tok.colCache":"缓存读取","tok.colCost":"成本","tok.from":"从","tok.to":"到","tok.reset":"重置","tok.noData":"暂无记录","tok.deleted":"此会话已删除","tok.pricingUnknown":"⚠ 此模型计费规则尚未明确,按默认估算","tok.priceInput":"输入: $","tok.priceOutput":"输出: $","tok.priceCacheW":"缓存写入: $","tok.priceCacheR":"缓存读取: $","presetPrompt.goal":"进入 Goal 模式:读 L3 goal mode SOP,自主达成我接下来描述的目标。","presetPrompt.plan":"进入 Plan 模式:先读 memory/plan_sop.md,按其中「探索→规划→执行→验证」流程,等我接下来描述要做的任务。","presetPrompt.autonomous":"🤖 进入自主行动模式:阅读 memory/autonomous_operation_sop.md,按 SOP 选取或规划任务,独立执行并产出报告。","presetPrompt.hive":"启动 Goal Hive 模式:按 hive SOP 拉起多个 worker 协同完成我接下来的目标。","presetPrompt.review":"进入监察者模式:对刚才的产出严格挑刺、逐项复核并报告问题。","presetPrompt.findwork":"按照自主行动的规划部分,充分分析我的情况,给我生成一批 TODO,务必让我感兴趣。","presetPrompt.mine":"抓取本周的 git 提交并写一份周报。","ask.banner":"应用正在等待你的回答","ask.replyHint":"在下方输入框回复","ask.placeholderOpen":"在此输入你的回答… (Enter 发送)","session.rename":"重命名","session.pin":"置顶","session.unpin":"取消置顶","session.delete":"删除","session.deleteConfirm":"确定删除这个会话吗?","bridge.connected":"已连接","bridge.connecting":"连接中","bridge.offline":"离线","bridge.offlineHint":"本地连接暂时不可用,请检查连接模式或稍后刷新界面","bridge.staleData":"本地连接已断开,正在显示上次状态","bridge.notRunning":"本地连接尚未建立","bridge.notRunningHint":"请从桌面版打开此页面以管理本地连接","bridge.inferenceReady":"推理就绪","bridge.inferenceConnecting":"推理连接中","bridge.inferenceError":"推理异常","bridge.inferenceOffline":"推理离线","bridge.restart":"重新连接","bridge.refresh":"刷新界面","bridge.openServices":"查看运行状态","bridge.recentActivity":"最近活动","bridge.viewAllLogs":"查看全部日志","bridge.logLineCount":"共 {count} 行","bridge.noActivity":"暂无活动记录","conductor.openPage":"打开指挥家 →","data.title":"数据维护","data.sectionHelp":"数据维护说明","data.sectionTip":"在这里导入或导出密钥配置、记忆与会话;记忆与会话备份默认不包含密钥配置","data.importKey":"导入密钥配置","data.importKeyTip":"从本地配置文件读取模型密钥与接口地址,并替换当前密钥配置","data.importKeyBtn":"导入","data.importKeySuccess":"密钥配置已导入","data.importKeyError":"导入失败","data.exportKey":"导出密钥配置","data.exportKeyTip":"将当前模型密钥与接口地址单独保存为配置文件;文件包含敏感信息,请妥善保管","data.exportKeyBtn":"导出","data.exportKeySuccess":"已导出","data.exportKeyError":"导出失败","data.importData":"导入记忆与会话","data.importDataTip":"导入前会完整备份当前记忆;来源中的同名记忆会覆盖当前版本,回复记录与会话只添加新项,密钥配置不受影响","data.importDataBtn":"选择来源","data.importing":"正在读取…","data.importDataSuccess":"导入完成 — 写入 {memory} 个记忆文件,新增 {responses} 个回复记录和 {sessions} 个会话","data.importDataError":"导入失败","data.importDataInvalid":"无法读取此备份或数据文件夹","data.importSourceTitle":"选择导入来源","data.importSourceDescription":"可以直接导入本应用生成的备份文件,也可以从旧数据文件夹迁移。","data.importBackupBtn":"选择备份文件","data.importFolderBtn":"选择旧数据文件夹","data.importBackupPickerTitle":"选择数据备份","data.importFolderPickerTitle":"选择旧数据文件夹","data.importConfirmTitle":"导入这些数据?","data.importConfirmBtn":"导入","data.importExportedAt":"备份时间","data.importSource":"数据来源","data.importContents":"包含内容","data.importContentsValue":"{memory} 个记忆文件、{sessions} 个会话、{responses} 个回复记录","data.importMergeNotice":"导入开始前会完整备份当前记忆。来源中的同名记忆会覆盖当前版本;回复记录和会话只添加新项,重复项保留当前数据。","data.importLegacySource":"旧数据文件夹","data.maintenanceBlocked":"请先停止所有运行中的会话和受管理服务,再导入或导出数据。当前会话状态:{sessions};运行服务:{services}。","data.maintenanceBlockedServer":"数据操作未开始:仍有 {sessions} 个会话或 {services} 个受管理服务在运行。请停止后重试。","data.externalProcessWarning":"导入前还应停止使用同一数据文件夹的其他 GenericAgent 命令行、终端进程和自动化;桌面应用无法暂停这些外部进程。","data.importResultTitle":"导入完成","data.importResultMemory":"记忆文件","data.importResultMemoryValue":"已写入 {count} 个(同名文件以来源为准)","data.importResultResponses":"回复记录","data.importResultSessions":"会话","data.importResultAddSkipValue":"新增 {added} 个,跳过 {skipped} 个重复项","data.importResultBackup":"导入前备份","data.importResultNoBackup":"本次无需创建导入前记忆备份","data.importRestoreHint":"如需恢复,请先停止会话、受管理服务及使用同一数据文件夹的外部进程,再从以上目录恢复 memory 文件夹。","data.importNoRestoreNeeded":"本次没有需要预先备份的记忆变更。回复记录和会话仍按只新增规则处理。","data.exportData":"导出记忆与会话","data.exportDataTip":"将当前记忆和历史会话创建为一份备份快照;不会移动或删除原数据,也不包含密钥配置","data.exportDataBtn":"导出","data.exporting":"正在导出…","data.exportDataConfirmTitle":"导出记忆与会话?","data.exportDataConfirmMessage":"导出文件将包含记忆和历史会话,请妥善保管。密钥配置不会包含在内。","data.exportDataConfirmBtn":"选择保存位置","data.exportDataPickerTitle":"保存数据备份","data.exportDataSuccessTitle":"导出完成","data.exportDataSuccessMessage":"备份已保存到:","data.exportDataReveal":"在 Finder 中显示","data.exportDataError":"导出失败","data.exportDataRevealError":"无法在 Finder 中显示此文件","connection.title":"连接模式","connection.sectionHelp":"连接模式说明","connection.sectionTip":"连接模式决定本桌面应用从哪里运行;切换不会复制、移动或合并两边的数据","connection.description":"选择本桌面应用从哪里运行:使用本桌面应用内置的运行环境,或连接你已有的本地仓库。切换后,记忆与会话也会随所选位置切换。","connection.included":"内置运行环境","connection.includedDescription":"使用本桌面应用内置的运行环境,无需另选仓库,开箱即用并支持离线使用","connection.includedTip":"这套运行环境随桌面应用安装,不需要你准备其他仓库;切换到这里后,将使用内置环境中的记忆与会话","connection.local":"本地仓库","connection.localDescription":"连接你在使用桌面版之前已经拥有的本地仓库,继续使用其中的记忆与会话","connection.localTip":"桌面应用会直接连接你选择的本地仓库,不会把仓库复制、移动或合并到内置运行环境","connection.current":"当前使用","connection.currentRepository":"当前仓库","connection.pendingRepository":"将连接到","connection.chooseRepository":"选择本地仓库","connection.changeRepository":"重新选择","connection.repositoryPickerTitle":"选择本地仓库","connection.repositoryValidated":"仓库可用,应用后生效","connection.pendingNotice":"所选模式尚未应用","connection.runningTaskBlock":"请等待当前任务完成后再切换连接模式","connection.apply":"应用并连接","connection.applying":"正在连接…","connection.includedSuccess":"正在使用内置运行环境","connection.localSuccess":"正在使用所选本地仓库","connection.status":"运行状态","connection.statusTip":"显示当前所选运行环境是否可用;详细页面可查看运行组件、日志和控制项","connection.statusReady":"运行正常","connection.statusConnecting":"正在连接","connection.statusUnavailable":"暂时不可用","connection.viewStatus":"查看运行状态","connection.errorInvalid":"无效仓库 — 缺少必要文件","connection.errorIncompatible":"此仓库与当前桌面版不兼容","connection.errorTimeout":"连接超时 — 请检查仓库是否完整","connection.errorGeneric":"无法完成连接,请稍后重试","helpFeedback.title":"帮助与反馈","helpFeedback.communityTitle":"加入官方社群","helpFeedback.communityDescription":"前往项目主页查看最新的官方社群二维码。","helpFeedback.communityAction":"查看社群二维码","helpFeedback.tutorialTitle":"阅读官方教程","helpFeedback.tutorialDescription":"从安装、配置到日常使用,跟随教程逐步了解。","helpFeedback.tutorialAction":"打开官方教程","helpFeedback.maintainersTitle":"联系桌面版维护者","helpFeedback.maintainersDescription":"桌面版使用中遇到问题或有建议,可添加微信联系:","helpFeedback.copy":"复制","helpFeedback.copySuccess":"微信号已复制","helpFeedback.copyError":"复制失败,请手动复制微信号"},Ad={"app.title":"GenericAgent","brand.sub":"","nav.chat":"New Session","nav.services":"Runtime status","nav.channels":"Message channels","nav.status":"Runtime status","nav.collab":"Conductor","nav.token":"Usage","foot.settings":"Settings","foot.runtimeManagement":"Runtime management","foot.ver":"GenericAgent","chat.startTitle":"Start a conversation","chat.startSub":"Type a message, or pick a preset","chat.inputPlaceholder":"Type a message…","preset.butler.t":"Conductor","preset.butler.d":"Auto-decompose complex tasks; just check progress and briefings","preset.plan.t":"Plan mode","preset.plan.d":"Load Plan SOP — explore→plan→execute→verify","preset.goal.t":"Goal mode","preset.goal.d":"Set a goal, run autonomously","preset.autonomous.t":"Autonomous mode","preset.autonomous.d":"Plan/execute tasks per SOP and produce reports (same as reflect/autonomous.py)","preset.hive.t":"Hive","preset.hive.d":"Multi-worker collaboration","preset.review.t":"Deep review","preset.review.d":"Strict quality check","preset.findwork.t":"Find me work","preset.findwork.d":"Analyze my context and suggest a batch of interesting TODOs","preset.mine.t":"My · Weekly","preset.mine.d":"Custom: weekly report from commits","preset.add.t":"Custom","preset.add.d":"Save any prompt as a function","composer.placeholder":"What are we building?","composer.placeholder.new.0":"What are we building? @ mention files · / invoke skills","composer.placeholder.new.1":"Give me a task","composer.placeholder.new.2":"What's on your mind?","composer.placeholder.new.3":"Describe what you need","composer.placeholder.new.4":"What should we tackle?","composer.placeholder.new.5":"Ask anything","composer.placeholder.new.6":"Start with a goal","composer.placeholder.followUp.0":"Send a follow-up","composer.placeholder.followUp.1":"Add more context","composer.placeholder.followUp.2":"Refine the request","composer.placeholder.followUp.3":"What's next?","composer.placeholder.followUp.4":"Keep it going","composer.placeholder.reconnecting":"Reconnecting…","search.placeholder":"Search chats…","search.noResults":"No matching chats","conv.new":"New chat","section.sessions":"Sessions","ctx.pin":"Pin","ctx.unpin":"Unpin","ctx.rename":"Rename","ctx.del":"Delete","common.close":"Close","common.more":"More","common.optional":"Optional","common.save":"Save","common.cancel":"Cancel","common.confirm":"Confirm","common.edit":"Edit","common.delete":"Delete","common.done":"Done","modal.preset":"Presets","modal.addModel":"Add model","modal.editModel":"Edit model","modal.settings":"Settings","modal.features":"Features","modal.customPreset":"Custom preset","modal.editCustomPreset":"Edit task","customPreset.titlePh":'Title, e.g. "Weekly report"',"customPreset.promptPh":"Prompt body — sent as the message when clicked","customPreset.empty":"Title and Prompt cannot be empty","customPreset.removeTitle":"Delete","customPreset.editTitle":"Edit","builtinPreset.restoreBtn":"Restore defaults","set.appearance":"Appearance","set.plainUi":"Plain","set.fontSize":"Chat font size","set.lang":"Language","set.model":"Model configuration","set.addModel":"Add model","set.features":"Features","set.importMykey":"Import key configuration","set.exportMykey":"Export current model config","set.serviceManager":"Runtime status","shortcut.askConfirm":"Create a desktop shortcut for GenericAgent?","appearance.light":"Light","appearance.dark":"Dark","set.noModels":"No models yet — add one below","set.current":"Active","lang.zh":"简体中文","lang.en":"English","model.name":"Alias","model.namePh":"Optional, for your own reference","model.apikey":"API Key","model.apikeyPh":"Enter API Key","model.apikeyKeep":"Leave blank to keep the current key","model.apibase":"API URL","model.apibasePh":"Enter API URL","model.protocol":"Protocol","model.protocolPick":"Select…","model.protocolOai":"OpenAI-compatible (chat/completions)","model.protocolClaude":"Anthropic (Claude /v1/messages)","model.stream":"Response","model.streamOn":"Stream","model.streamOff":"Non-stream","model.model":"Model ID","model.modelPh":"Enter model identifier","model.modelHint":"Must match the model field in your provider docs exactly","model.retries":"Retries","model.connTimeout":"Connect (s)","model.readTimeout":"Read (s)","model.save":"Save","model.auto":"Auto","model.menuLabel":"Select model","model.aggregation":"Default group","model.aggregationShort":"Default","model.aggregationDesc":"Tries in order, switches to the next on failure","model.configurationHelp":"About model configuration","model.configurationTip":"Set the default model for new sessions; you can still switch models from the composer for an individual session","model.aggregationTip":"The default group tries models in list order and automatically moves to the next when one is unavailable","model.emptyMixin":"No models added yet","model.addToMixin":"Add to default group","model.inMixin":"In default group","model.removeFromMixin":"Remove from group","model.alreadyInMixin":"Already in the group","model.dragReorder":"Drag to reorder","model.routeProvider":"Provider","model.routeCustom":"Custom","model.selectProvider":"Select provider","model.providerLocked":"Set by provider preset (read-only)","model.advanced":"Advanced","model.getKey":"Get API Key →","pq.title":"Quick connect a model","pq.sub":"Add your API key to get started","pq.toggle":"Expand / collapse","pq.deepseekDesc":"DeepSeek · Open Platform","pq.qwenDesc":"Alibaba Cloud Bailian · Qwen","pq.doubaoDesc":"Volcengine · Ark Platform","pq.minimaxDesc":"MiniMax · Open Platform","pq.zhipuDesc":"Zhipu AI · GLM Platform","pq.kimiDesc":"Moonshot AI · Developer Platform","pq.stepfunDesc":"StepFun · Open Platform","guide.step1":"Open the link, sign in, then create & copy your API key","guide.step2":'Paste the key into the "API Key" field below',"guide.step3":"Click Save — then pick it from the model list","guide.prefillTip":"API base, protocol and model are pre-filled — edit if needed","guide.getKey":"Get your {name} API key","guide.copy":"Copy link","guide.copied":"Link copied","err.modelSave":"Save failed","err.modelRequired":"Model, API Key and base URL are required","err.modelDelete":"Delete failed","err.modelDeleteLast":"At least one model is required","err.mixinFailed":"Operation failed","confirm.modelDelete":"Delete this model profile?","page.services.title":"Runtime status","page.services.sub":"View message channels and the status, logs, and controls for components in the local environment","svc.colName":"Runtime component","svc.colStatus":"Status","svc.colPid":"PID","svc.colMemory":"Memory (MB)","svc.colCpu":"CPU (%)","svc.colActions":"Actions","svc.empty":"No runtime components","page.channels.title":"Message channels","page.channels.sub":"Manage message channels and view their status and logs","page.status.title":"Runtime status","page.status.sub":"View status, logs, and controls for components in the local environment","page.collab.title":"Conductor","page.collab.sub":"Describe a goal — split, delegate, and follow up","collab.progressTitle":"Progress","collab.progressEmpty":"No tasks running yet. After you describe a goal to Conductor, split tasks will appear here.","collab.placeholder":"Describe the goal you want to accomplish","collab.guideTitle":"Tell Conductor what you want done","collab.guideWhen":"Best for multi-step goals that take a while. For everyday chat and quick questions, use Chat in the sidebar.","collab.guideStep1t":"Describe your goal","collab.guideStep1d":"Write what you want done in the chat box and send it to Conductor","collab.guideStep2t":"Auto breakdown","collab.guideStep2d":"Conductor breaks down, assigns, monitors, and coordinates","collab.guideStep3t":"Summary","collab.guideStep3d":"Conductor delivers a briefing based on execution status","collab.guideStep4t":"Adjust anytime","collab.guideStep4d":"Add requirements or details anytime — Conductor handles them","collab.chipProgress":"How is it going?","collab.chipPause":"Pause current tasks","collab.chipSummary":"Summarize progress so far","collab.showProgressTitle":"View task progress","collab.statRunning":"Running","collab.statDone":"Done","collab.plusMenu":"More actions","collab.switchMode":"Switch mode","collab.typing":"Conductor is working","collab.offline":"The Conductor service is temporarily unavailable. Try again shortly.","collab.offlineTitle":"Conductor Offline","collab.offlineSub":"Conductor is temporarily unavailable. Check your connection and try again.","collab.retry":"Retry","collab.terminateWorker":"Terminate task","collab.terminateWorkerConfirm":"Terminate “{name}”? Current progress from this worker may be lost.","collab.terminateWorkerFailed":"Failed to terminate the task","collab.reconnect":"Disconnected — reconnecting… Your last progress is kept.","collab.reconnectIn":"Retry in {n}s","collab.stRunning":"Running","collab.stReported":"Reported","collab.stPaused":"Paused","collab.stFailed":"Issue","collab.stTerminated":"Ended","collab.summaryRunning":"Working…","collab.summaryWait":"Awaiting report","collab.taskFallback":"Task {n}","collab.timeJust":"just now","collab.timeSec":"{n}s ago","collab.timeMin":"{n}m ago","collab.timeHr":"{n}h ago","collab.timeDay":"{n}d ago","page.token.title":"Usage","page.token.sub":"Per-session and total usage & cache rate","status.connecting":"Connecting…","status.ready":"Service online","status.running":"Working…","status.disconnected":"Service offline","status.stopped":"Stopped","status.idle":"Standby","conv.emptyList":'No chats yet — click "+ New chat"',"conv.defaultTitle":"New chat","err.bridge":"Service not responding","err.newSession":"Failed to create session","err.poll":"Polling failed","err.stop":"Stop failed","err.interruptTimeout":"Timed out waiting for the previous reply to stop — try again","sys.interruptPrev.hint":"Previous reply stopped — processing new message","chat.interrupting":"Stopping previous reply…","chat.sessionLoading":"Loading conversation…","sys.stopRequested":"Stop requested","slash.help":`Commands: +/new new chat /clear clear /stop stop /settings settings`,"slash.unknown":"Unknown command","upload.hint":"Upload file: pick / drag / paste","upload.button":"Upload file","upload.tooLarge":"File too large or limit reached","upload.empty":"Skipped empty file","upload.failed":"Upload failed","err.charLimit":"Character limit reached ({n}), text will be truncated on send","err.charLimitReached":"Character limit reached ({n})","err.numMax":"Cannot exceed {n}","file.openFailed":"Cannot open file","file.kindGeneric":"File","file.kindDoc":"Document","file.kindSheet":"Spreadsheet","file.kindSlide":"Slides","file.kindCode":"Code","file.kindArchive":"Archive","file.kindAudio":"Audio","file.kindVideo":"Video","upload.removeTitle":"Remove","upload.dropHint":"Drop to upload files","lightbox.closeTitle":"Close","fold.thinking":"Thinking","fold.tool":"Tool call","fold.toolResult":"Tool result","fold.llm":"LLM Running","fold.turn":"Turn {n}","plan.header":"Plan ({done}/{total})","plan.complete":"✓ Plan complete ({n}/{n})","plan.running":"Running plan","plan.completeTitle":"Plan complete","plan.placeholder":"Plan mode activated","plan.waiting":"waiting for {path} …","plan.overflow":"+{n} more","plan.current":"Now","plan.collapse":"Collapse","plan.expand":"Expand","plan.details":"Details","plan.capsuleRunning":"Running","plan.capsuleComplete":"Done","timing.elapsed":"Elapsed {t}","chip.plan":"Plan","chip.auto":"Auto","ch.wechat":"WeChat","ch.wecom":"WeCom","ch.lark":"Lark","ch.dingtalk":"DingTalk","ch.qq":"QQ","ch.telegram":"Telegram","ch.discord":"Discord","ch.loading":"Loading…","ch.empty":"No IM process scripts found","ch.logEmpty":"No log output yet","err.channelLoad":"Failed to load","err.channelStart":"Start failed","err.channelStop":"Stop failed","err.mykeyImport":"Failed to import model config","err.mykeyExport":"Failed to export model config","err.channelNotConfigured":"Complete this platform setup in Key configuration first","sys.channelStarted":"Started","sys.channelStopped":"Stopped","sys.bridgeDisconnecting":"Disconnecting from the local runtime","modal.channelLogs":"Process logs","modal.mykeyConfig":"Key configuration","sys.configSaved":"Configuration saved","sys.mykeyImported":"Model config imported","sys.mykeyExported":"Model config exported","st.starting":"Starting…","st.stopping":"Stopping…","st.online":"Online","st.offline":"Offline","st.error":"Error","st.running":"Running","st.stopped":"Stopped","st.abnormal":"Error","st.warning":"Warning","err.portBusy":"Port was busy, reconnected","err.conductorCrash":"Internal thread crashed","err.missingModule":"Missing module","err.connRefused":"Connection refused, retrying","err.timeout":"Connection timed out","err.apiKeyInvalid":"API key invalid or expired","err.modelNotFound":"Model not found or unavailable","err.rateLimit":"Rate limited, try again later","err.quotaExceeded":"Quota exceeded","err.processCrash":"Background process crashed","act.configure":"Configure","act.logs":"Logs","act.restart":"Restart","act.stop":"Stop","act.start":"Start","act.disconnect":"Disconnect","act.copy":"Copy","act.copied":"Copied","act.copyTex":"TeX","act.send":"Send","proc.imbotWechat":"imbot · WeChat","proc.imbotDing":"imbot · DingTalk","proc.bridge":"Local connection","proc.bridgeSummary":"Connects the desktop app to the local runtime","proc.bridgeTip":"Keeps the desktop app and local runtime communicating","proc.scheduler":"Scheduled tasks","proc.schedulerSummary":"Runs tasks on schedule","proc.schedulerTip":"Triggers and runs tasks at configured times","proc.conductor":"Conductor","proc.conductorSummary":"Handles multi-step work asynchronously","proc.conductorTip":"Uses async conversations to break down, delegate, and follow through on tasks","proc.runtimeComponent":"Runtime component","proc.runtimeComponentSummary":"A component that runs in the local environment","proc.runtimeComponentTip":"View this component’s status, logs, and controls","cm.scheduling":"Scheduling","cm.running":"Running","cm.idleSt":"Idle","cm.master":"Dispatched 3 subtasks","cm.w1":"Subtask: fetch data","cm.w2":"Subtask: review results","cm.sub":"Waiting for tasks","tok.total":"Total","tok.cost":"Cache rate","tok.today":"Today","tok.tabAll":"Chat","tok.tabConductor":"Conductor","tok.condTotal":"Conductor Total","tok.condCurrent":"Conductor Current","tok.condTip":"Conductor usage is not included in chat totals","tok.condOffline":"Service offline","tok.disclaimer":"Pricing may vary by API provider. Please refer to the actual website.","tok.colSession":"Session","tok.colIn":"Input","tok.colOut":"Output","tok.colCacheW":"Cache write","tok.colCache":"Cache read","tok.colCost":"Cost","tok.from":"From","tok.to":"To","tok.reset":"Reset","tok.noData":"No records","tok.deleted":"Session deleted","tok.pricingUnknown":"⚠ Pricing not confirmed, using defaults","tok.priceInput":"Input: $","tok.priceOutput":"Output: $","tok.priceCacheW":"Cache write: $","tok.priceCacheR":"Cache read: $","presetPrompt.goal":"Enter Goal mode: read the L3 goal-mode SOP and autonomously achieve the goal I describe next.","presetPrompt.plan":"Enter Plan mode: first read memory/plan_sop.md, follow its explore→plan→execute→verify flow, and wait for the task I describe next.","presetPrompt.autonomous":"🤖 Enter autonomous mode: read memory/autonomous_operation_sop.md, follow the SOP to pick or plan a task, execute independently, and produce a report.","presetPrompt.hive":"Start Goal Hive mode: per the hive SOP, spawn multiple workers to collaboratively achieve the goal I describe next.","presetPrompt.review":"Enter reviewer mode: strictly scrutinize the previous output, review item by item and report issues.","presetPrompt.findwork":"Following the autonomous planning section, analyze my situation thoroughly and generate a batch of TODOs that genuinely interest me.","presetPrompt.mine":"Collect this week's git commits and write a weekly report.","ask.banner":"The app is waiting for your answer","ask.replyHint":"Reply in the input below","ask.placeholderOpen":"Type your answer here… (Enter to send)","session.rename":"Rename","session.pin":"Pin","session.unpin":"Unpin","session.delete":"Delete","session.deleteConfirm":"Delete this session?","bridge.connected":"Connected","bridge.connecting":"Connecting","bridge.offline":"Offline","bridge.offlineHint":"The local connection is temporarily unavailable. Check Connection mode or refresh the interface shortly.","bridge.staleData":"Local connection lost — showing the last known state","bridge.notRunning":"Local connection has not been established","bridge.notRunningHint":"Open this page in the desktop app to manage the local connection","bridge.inferenceReady":"Inference ready","bridge.inferenceConnecting":"Connecting","bridge.inferenceError":"Inference error","bridge.inferenceOffline":"Inference offline","bridge.restart":"Reconnect","bridge.refresh":"Refresh interface","bridge.openServices":"View runtime status","bridge.recentActivity":"RECENT ACTIVITY","bridge.viewAllLogs":"View all logs","bridge.logLineCount":"{count} lines","bridge.noActivity":"No recent activity","conductor.openPage":"Open Conductor →","data.title":"Data management","data.sectionHelp":"About data management","data.sectionTip":"Import or export key configuration, memory, and sessions here; memory and session backups do not include key configuration by default","data.importKey":"Import key config","data.importKeyTip":"Read model keys and endpoints from a local config file and replace the current key configuration","data.importKeyBtn":"Import","data.importKeySuccess":"Key config imported","data.importKeyError":"Import failed","data.exportKey":"Export key config","data.exportKeyTip":"Save current model keys and endpoints as a separate config file; the file contains sensitive information, so store it securely","data.exportKeyBtn":"Export","data.exportKeySuccess":"Exported","data.exportKeyError":"Export failed","data.importData":"Import memory and sessions","data.importDataTip":"The current memory is fully backed up first; source memory overwrites same-name files, while response records and sessions are add-only. Key configuration is unchanged","data.importDataBtn":"Choose source","data.importing":"Reading…","data.importDataSuccess":"Import complete — {memory} memory files written, {responses} response records and {sessions} sessions added","data.importDataError":"Import failed","data.importDataInvalid":"This backup or data folder could not be read","data.importSourceTitle":"Choose an import source","data.importSourceDescription":"Import a backup created by this app, or migrate from an older data folder.","data.importBackupBtn":"Choose backup file","data.importFolderBtn":"Choose older data folder","data.importBackupPickerTitle":"Choose a data backup","data.importFolderPickerTitle":"Choose an older data folder","data.importConfirmTitle":"Import this data?","data.importConfirmBtn":"Import","data.importExportedAt":"Backup time","data.importSource":"Data source","data.importContents":"Contents","data.importContentsValue":"{memory} memory files, {sessions} sessions, {responses} response records","data.importMergeNotice":"Current memory is fully backed up before import. Source memory overwrites same-name files; response records and sessions are add-only, so current duplicates are kept.","data.importLegacySource":"Older data folder","data.maintenanceBlocked":"Stop every running session and managed service before importing or exporting data. Session state: {sessions}; running services: {services}.","data.maintenanceBlockedServer":"The data operation did not start: {sessions} sessions or {services} managed services are still running. Stop them and try again.","data.externalProcessWarning":"Before importing, also stop other GenericAgent command-line or terminal processes and automations that use the same data folder. The desktop app cannot pause those external processes.","data.importResultTitle":"Import complete","data.importResultMemory":"Memory files","data.importResultMemoryValue":"{count} written (source wins for same-name files)","data.importResultResponses":"Response records","data.importResultSessions":"Sessions","data.importResultAddSkipValue":"{added} added, {skipped} duplicates skipped","data.importResultBackup":"Pre-import backup","data.importResultNoBackup":"No pre-import memory backup was required","data.importRestoreHint":"To restore, first stop sessions, managed services, and external processes using this data folder, then restore the memory folder from the directory above.","data.importNoRestoreNeeded":"This import had no memory change that required a prior backup. Response records and sessions still followed the add-only rule.","data.exportData":"Export memory and sessions","data.exportDataTip":"Create a backup snapshot of current memory and session history; original data stays in place and key configuration is not included","data.exportDataBtn":"Export","data.exporting":"Exporting…","data.exportDataConfirmTitle":"Export memory and sessions?","data.exportDataConfirmMessage":"The export contains memory and session history. Store it securely. Key configuration is not included.","data.exportDataConfirmBtn":"Choose save location","data.exportDataPickerTitle":"Save data backup","data.exportDataSuccessTitle":"Export complete","data.exportDataSuccessMessage":"Your backup was saved to:","data.exportDataReveal":"Show in Finder","data.exportDataError":"Export failed","data.exportDataRevealError":"This file could not be shown in Finder","connection.title":"Connection mode","connection.sectionHelp":"About connection mode","connection.sectionTip":"Connection mode decides where this desktop app runs from; switching does not copy, move, or merge data between the two locations","connection.description":"Choose where this desktop app runs from: the environment installed with the desktop app or a local repository you already own. Memory and sessions follow the selected location.","connection.included":"Included environment","connection.includedDescription":"Use the environment included with this desktop app, with no repository selection required and offline use supported","connection.includedTip":"This environment is installed with the desktop app, so you do not need to prepare another repository; selecting it uses the memory and sessions stored in the included environment","connection.local":"Local repository","connection.localDescription":"Connect a local repository you already owned before using the desktop app and continue with its memory and sessions","connection.localTip":"The desktop app connects directly to the selected local repository and does not copy, move, or merge it into the included environment","connection.current":"Current","connection.currentRepository":"Current repository","connection.pendingRepository":"Will connect to","connection.chooseRepository":"Choose local repository","connection.changeRepository":"Choose again","connection.repositoryPickerTitle":"Choose a local repository","connection.repositoryValidated":"Repository is available — apply to use it","connection.pendingNotice":"The selected mode has not been applied","connection.runningTaskBlock":"Wait for the current task to finish before switching connection mode","connection.apply":"Apply and connect","connection.applying":"Connecting…","connection.includedSuccess":"Using the included environment","connection.localSuccess":"Using the selected local repository","connection.status":"Runtime status","connection.statusTip":"Shows whether the selected environment is available; open the detailed page to view its components, logs, and controls","connection.statusReady":"Running normally","connection.statusConnecting":"Connecting","connection.statusUnavailable":"Temporarily unavailable","connection.viewStatus":"View runtime status","connection.errorInvalid":"Invalid repository — required files are missing","connection.errorIncompatible":"This repository is incompatible with the current desktop app","connection.errorTimeout":"Connection timed out — check that the repository is complete","connection.errorGeneric":"Could not connect. Try again shortly.","helpFeedback.title":"Help & Feedback","helpFeedback.communityTitle":"Join the official community","helpFeedback.communityDescription":"Visit the project page for the latest official community QR code.","helpFeedback.communityAction":"View community QR code","helpFeedback.tutorialTitle":"Read the official tutorial","helpFeedback.tutorialDescription":"Follow the tutorial from installation and setup through everyday use.","helpFeedback.tutorialAction":"Open official tutorial","helpFeedback.maintainersTitle":"Contact the desktop maintainers","helpFeedback.maintainersDescription":"If you run into an issue or have a suggestion while using the desktop app, contact us on WeChat:","helpFeedback.copy":"Copy","helpFeedback.copySuccess":"WeChat ID copied","helpFeedback.copyError":"Copy failed. Please copy the WeChat ID manually."},Br={zh:$d,en:Ad};function Fd(n,e,t){let r=(Br[n]||Br.zh)[e]??e;if(t)for(const[s,l]of Object.entries(t))r=r.replaceAll(`{${s}}`,String(l));return r}function ce(){const n=H(e=>e.lang);return a.useMemo(()=>({lang:n,t:(e,t)=>Fd(n,e,t)}),[n])}function zd({label:n,count:e,open:t,onToggle:o,onAction:r,defaultOpen:s=!0}){const[l,c]=a.useState(s),u=t??l;function p(){const m=!u;c(m),o==null||o(m)}function d(m){m.stopPropagation(),r==null||r()}return i.jsxs("div",{className:"ga-section-header",onClick:p,children:[i.jsx("span",{className:"ga-section-dot"}),i.jsx("span",{className:"ga-section-label",children:n}),i.jsx("span",{className:"ga-section-count",children:e}),i.jsx("span",{className:`ga-section-chevron${u?" open":""}`,children:i.jsx(Ee,{name:"chevron-right",size:"0.625rem"})}),r&&i.jsx("button",{type:"button",className:"ga-section-action",onClick:d,children:i.jsx(Ee,{name:"add",size:"0.75rem"})})]})}function Bd(n){if(!n)return"";const e=typeof n=="number"?n*1e3:new Date(n).getTime(),t=Date.now()-e,o=Math.floor(t/6e4);if(o<1)return"now";if(o<60)return`${o}m`;const r=Math.floor(o/60);return r<24?`${r}h`:`${Math.floor(r/24)}d`}function Ud({session:n,isActive:e,isWorking:t,onClick:o}){const{t:r}=ce(),s=X(v=>v.renameSession),l=X(v=>v.deleteSession),c=X(v=>v.pinSession),[u,p]=a.useState(!1),[d,m]=a.useState(!1),[f,b]=a.useState(""),y=a.useRef(null);a.useEffect(()=>{var v,O;d&&((v=y.current)==null||v.focus(),(O=y.current)==null||O.select())},[d]);const S=a.useCallback(()=>{b(n.title||""),m(!0),p(!1)},[n.title]),w=a.useCallback(()=>{const v=f.trim();v&&v!==n.title&&s(n.id,v),m(!1)},[f,n.id,n.title,s]),C=a.useCallback(()=>{m(!1)},[]),k=a.useCallback(v=>{v.nativeEvent.isComposing||v.keyCode===229||(v.key==="Enter"?(v.preventDefault(),w()):v.key==="Escape"&&(v.preventDefault(),C()))},[w,C]),_=a.useCallback(()=>{p(!1),setTimeout(()=>c(n.id,!n.pinned),0)},[n.id,n.pinned,c]),x=a.useCallback(()=>{p(!1),setTimeout(()=>{re.confirm({title:r("session.delete"),content:r("session.deleteConfirm"),okType:"danger",onOk:()=>l(n.id)})},0)},[n.id,l,r]),j=i.jsxs(ae.Menu,{className:"ga-session-menu",children:[i.jsxs(ae.Item,{onClick:S,children:[i.jsx(Ee,{name:"edit",size:"0.875rem"}),i.jsx("span",{children:r("session.rename")})]}),i.jsxs(ae.Item,{onClick:_,children:[i.jsx(Ee,{name:"pin",size:"0.875rem"}),i.jsx("span",{children:n.pinned?r("session.unpin"):r("session.pin")})]}),i.jsxs(ae.Item,{type:"danger",onClick:x,children:[i.jsx(Ee,{name:"trash",size:"0.875rem"}),i.jsx("span",{children:r("session.delete")})]})]});return i.jsxs("div",{className:`ga-session-item${e?" active":""}`,onClick:d||u?void 0:o,children:[i.jsxs("span",{className:"ga-session-content",children:[i.jsx("span",{className:`ga-status-dot${t?" working":""}`}),d?i.jsx("input",{ref:y,className:"ga-session-rename-input",value:f,onChange:v=>b(v.target.value),onKeyDown:k,onBlur:w,onClick:v=>v.stopPropagation()}):i.jsx("span",{className:"ga-session-title",children:n.title||"Untitled"})]}),!d&&i.jsxs(i.Fragment,{children:[n.pinned&&i.jsx("span",{className:"ga-session-pin-icon",children:i.jsx(Ee,{name:"pinned",size:"0.875rem"})}),i.jsx("span",{className:"ga-session-age",children:Bd(n.updatedAt)}),i.jsx("span",{className:`ga-session-actions${u?" menu-open":""}`,onClick:v=>v.stopPropagation(),onMouseDown:v=>v.stopPropagation(),children:i.jsx(ae,{trigger:"click",position:"bottomRight",visible:u,onVisibleChange:p,render:j,children:i.jsx("button",{type:"button",className:"ga-session-actions-btn",onClick:v=>v.stopPropagation(),"aria-label":"Session actions",children:i.jsx(Ee,{name:"kebab-vertical",size:"0.875rem"})})})})]})]})}function Vd(n){const e=Ys(n),t=Ve("bridge-ready",()=>n());return()=>{t(),e()}}function Zo(){return a.useSyncExternalStore(Vd,tr,tr)}async function Kd(){const n=await fetch(`${ee}/services/conductor/model`);if(!n.ok)throw new Error(`HTTP ${n.status}`);return(await n.json()).model}async function Wd(n){const e=await fetch(`${ee}/services/conductor/model`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({llmNo:n})});if(!e.ok)throw new Error(`HTTP ${e.status}`);return(await e.json()).model}async function Hd(){const n=await fetch(`${ee}/services/panel`);if(!n.ok)throw new Error(`HTTP ${n.status}`);return(await n.json()).services??[]}async function Zd(n){const e=await fetch(`${ee}/services/start`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:n})});if(!e.ok)throw new Error(`HTTP ${e.status}`);const t=await e.json();return{ok:t.ok??!0,service:t.service}}async function qd(n){const e=await fetch(`${ee}/services/stop`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:n})});if(!e.ok)throw new Error(`HTTP ${e.status}`);const t=await e.json();return{ok:t.ok??!0,service:t.service}}async function gi(n,e=200){const t=await fetch(`${ee}/services/logs?id=${encodeURIComponent(n)}&tail=${e}`);if(!t.ok)throw new Error(`HTTP ${t.status}`);return(await t.json()).lines??[]}async function Gd(){const n=await fetch(`${ee}/services/mykey`);if(!n.ok)throw new Error(`HTTP ${n.status}`);return(await n.json()).content??""}async function Qd(n){const e=await fetch(`${ee}/services/mykey`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:n})});if(!e.ok)throw new Error(`HTTP ${e.status}`);return(await e.json()).ok??!1}async function Yd(){const n=await fetch(`${ee}/services/bridge/exit`,{method:"POST"});if(!n.ok)throw new Error(`HTTP ${n.status}`);return(await n.json()).ok??!1}const Xd=1200,Jd=3e4,eu=5;function tu(n,e){return n==="running"?"running":n==="failed"?"failed":n==="aborted"?"terminated":n==="stopped"&&e.trim()?"reported":"paused"}let nu=0;const Xn=new Map;function Ur(n){const e=String(n.id??"");Xn.has(e)||Xn.set(e,++nu);const t=tu(String(n.status??""),String(n.reply??""));let o=String(n.prompt??"").replace(/^[\s请帮我麻烦]+/u,"").trim();o?(o=(o.split(/[\n。!?.!?]/)[0]||"").trim(),o.length>18&&(o=o.slice(0,18)+"…")):o=`Task #${Xn.get(e)}`;const r=String(n.reply??"").replace(/\s+/g," ").trim(),s=r?r.length>80?r.slice(0,80)+"…":r:t==="running"?"Working…":"Waiting…";return{id:e,title:o,status:t,summary:s,fullReply:String(n.reply??""),updatedAt:n.updated_at}}let Le=null,it=0,Ne=null,at=0,lt=!1;const yi=gt((n,e)=>{function t(){if(Ne&&clearTimeout(Ne),!lt&&at>=eu){n({connectionStatus:"offline"});return}const r=Math.min(Jd,Xd*Math.pow(2,Math.max(0,at-1)));n({connectionStatus:"connecting"}),Ne=setTimeout(()=>e().connect(),r)}function o(r,s){if(s===it)if(r.type==="hello"){const l=(r.chat||[]).map(u=>({id:String(u.id??""),role:u.role||"system",msg:String(u.msg??""),ts:u.ts,read:u.read,files:u.files||[],images:u.images||[]})),c=(r.subagents||[]).map(Ur);n({messages:l,workers:c,conductorTyping:!!r.running,runtimeModel:r.model??null})}else if(r.type==="subagents"){const l=(r.items||[]).map(Ur);n({workers:l})}else if(r.type==="chat"){const l=r.item,c={id:String(l.id??""),role:l.role||"system",msg:String(l.msg??""),ts:l.ts,read:l.read,files:l.files||[],images:l.images||[]};n(u=>{if(c.id&&u.messages.some(d=>d.id===c.id))return u;if(c.role==="user"){const d=c.msg.replace(/\[(Image|File)\s+#\d+\]\s*/g,"").trim();for(let m=u.messages.length-1;m>=0;m--){const f=u.messages[m];if(f._local&&f.role==="user"&&(f.msg.replace(/\[(Image|File)\s+#\d+\]\s*/g,"").trim()===d||f.msg===c.msg)){const y=[...u.messages];return y[m]={...y[m],id:c.id||y[m].id,ts:c.ts??y[m].ts,_local:!1},{messages:y}}}}const p=c.role==="conductor"?!1:u.conductorTyping;return{messages:[...u.messages,c],conductorTyping:p}})}else r.type==="model"&&n({runtimeModel:r.model})}return{connectionStatus:"offline",messages:[],workers:[],conductorTyping:!1,modelConfig:null,runtimeModel:null,connect(){if(Le&&(Le.readyState===WebSocket.OPEN||Le.readyState===WebSocket.CONNECTING))return;Ne&&(clearTimeout(Ne),Ne=null);const r=++it;n({connectionStatus:"connecting"});let s;try{s=new WebSocket(Ea)}catch{at++,t();return}Le=s,s.onopen=()=>{r===it&&(lt=!0,at=0,n({connectionStatus:"ready"}),e().loadModel())},s.onclose=()=>{r===it&&(n({connectionStatus:lt?"connecting":"offline"}),lt||at++,t())},s.onerror=()=>{},s.onmessage=l=>{if(r===it)try{o(JSON.parse(l.data),r)}catch{}}},disconnect(){if(it++,Ne&&(clearTimeout(Ne),Ne=null),Le){const r=Le;Le=null,r.onopen=r.onclose=r.onerror=r.onmessage=null;try{r.close()}catch{}}at=0,lt=!1,n({connectionStatus:"offline",messages:[],workers:[],conductorTyping:!1,runtimeModel:null})},sendMessage(r,s,l){if(!Le||Le.readyState!==WebSocket.OPEN)return;const c={msg:r};s&&s.length>0&&(c.files=s),l&&l.length>0&&(c.images=l),Le.send(JSON.stringify(c));const u={id:`local-${Date.now()}`,role:"user",msg:r,ts:Date.now()/1e3,files:s,images:l,_local:!0};n(p=>({messages:[...p.messages,u],conductorTyping:!0}))},async killWorker(r){const s=await fetch(`${ka}/subagent/${r}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"kill"})});if(!s.ok)throw new Error(`Failed to terminate worker (${s.status})`)},async loadModel(){try{n({modelConfig:await Kd()})}catch{}},async selectModel(r){const s=e().modelConfig;n({modelConfig:{configured:r,effective:r,fallbackReason:null}});try{n({modelConfig:await Wd(r)})}catch{n({modelConfig:s})}}}});yi.getState().connect();function ou({className:n,...e}){return i.jsx("div",{className:`ga-log-view ${n??""}`,"data-selectable-text":"true",...e})}function Vr({tone:n}){const e={good:"var(--ui-accent, #0053fd)",warn:"#f59e0b",bad:"#cf2d56",muted:"color-mix(in srgb, var(--ui-text-tertiary) 40%, transparent)"};return i.jsx("span",{"aria-hidden":"true",className:n==="warn"?"ga-statusbar-dot--pulse":void 0,style:{display:"inline-block",width:"6px",height:"6px",borderRadius:"50%",background:e[n],flexShrink:0}})}function ru(){return i.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",children:[i.jsx("path",{d:"M13.5 2.5v4h-4",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round",strokeLinejoin:"round"}),i.jsx("path",{d:"M2.5 8a5.5 5.5 0 0 1 9.3-3.95L13.5 6.5",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round",strokeLinejoin:"round"}),i.jsx("path",{d:"M2.5 13.5v-4h4",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round",strokeLinejoin:"round"}),i.jsx("path",{d:"M13.5 8a5.5 5.5 0 0 1-9.3 3.95L2.5 9.5",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round",strokeLinejoin:"round"})]})}function su(){return i.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",children:[i.jsx("rect",{x:"2",y:"2",width:"5",height:"5",rx:"0.5",stroke:"currentColor",strokeWidth:"1.3"}),i.jsx("rect",{x:"9",y:"2",width:"5",height:"5",rx:"0.5",stroke:"currentColor",strokeWidth:"1.3"}),i.jsx("rect",{x:"2",y:"9",width:"5",height:"5",rx:"0.5",stroke:"currentColor",strokeWidth:"1.3"}),i.jsx("rect",{x:"9",y:"9",width:"5",height:"5",rx:"0.5",stroke:"currentColor",strokeWidth:"1.3"})]})}const Kr=[{id:"__bridge__",labelKey:"proc.bridge"},{id:"frontends/conductor.py",labelKey:"proc.conductor"},{id:"reflect/scheduler.py",labelKey:"proc.scheduler"}],Wr=12,iu=3e3;function au({onClose:n}){const{t:e}=ce(),t=Zo(),o=yi(x=>x.connectionStatus),r=Ie(x=>x.setPage),s=a.useRef(null),l=a.useRef(null),[c,u]=a.useState(Kr[0].id),[p,d]=a.useState(null),[m,f]=a.useState(0),b=a.useCallback(async x=>{try{const j=await gi(x,200);f(j.length),d(j.slice(-Wr))}catch{d([]),f(0)}},[]);a.useEffect(()=>(d(null),b(c),l.current=setInterval(()=>b(c),iu),()=>{l.current&&(clearInterval(l.current),l.current=null)}),[c,b]),a.useEffect(()=>{function x(v){var E;const O=(E=s.current)==null?void 0:E.parentElement;O&&!O.contains(v.target)&&n()}function j(v){v.key==="Escape"&&n()}return document.addEventListener("mousedown",x),document.addEventListener("keydown",j),()=>{document.removeEventListener("mousedown",x),document.removeEventListener("keydown",j)}},[n]);const y=t==="ready"?"good":t==="connecting"?"warn":"bad",S=o==="ready"?"good":o==="connecting"?"warn":o==="error"?"bad":"muted",w=e(t==="ready"?"bridge.connected":t==="connecting"?"bridge.connecting":"bridge.offline"),C=e(o==="ready"?"bridge.inferenceReady":o==="connecting"?"bridge.inferenceConnecting":o==="error"?"bridge.inferenceError":"bridge.inferenceOffline"),k=()=>{n(),Ie.getState().setServicesTab("status"),r("services")},_=m>Wr;return i.jsxs("div",{ref:s,id:"ga-runtime-management-panel",className:"ga-bridge-panel","data-slot":"bridge-panel",role:"dialog","aria-label":e("foot.runtimeManagement"),children:[i.jsxs("div",{className:"ga-bridge-panel-header",children:[i.jsxs("div",{className:"ga-bridge-panel-status-rows",children:[i.jsxs("span",{className:"ga-bridge-panel-row ga-bridge-panel-row--primary",children:[i.jsx(Vr,{tone:y}),w]}),i.jsxs("span",{className:"ga-bridge-panel-row ga-bridge-panel-row--secondary",children:[i.jsx(Vr,{tone:S}),C]})]}),i.jsxs("div",{className:"ga-bridge-panel-actions",children:[i.jsx("button",{className:"ga-bridge-panel-action-btn",onClick:()=>{n(),window.location.reload()},title:e("bridge.refresh"),children:i.jsx(ru,{})}),i.jsx("button",{className:"ga-bridge-panel-action-btn",onClick:k,title:e("bridge.openServices"),children:i.jsx(su,{})})]})]}),i.jsxs("div",{className:"ga-bridge-panel-section",children:[i.jsx("div",{className:"ga-bridge-panel-tabs",children:Kr.map(x=>i.jsx("button",{className:`ga-bridge-panel-tab ${c===x.id?"active":""}`,onClick:()=>u(x.id),children:e(x.labelKey)},x.id))}),p===null?i.jsx("div",{className:"ga-bridge-panel-log-empty",children:"…"}):p.length===0?i.jsx("div",{className:"ga-bridge-panel-log-empty",children:e("bridge.noActivity")}):i.jsx(ou,{className:"ga-bridge-panel-log",children:p.join(` +`)}),i.jsxs("div",{className:"ga-bridge-panel-section-foot",children:[_&&i.jsx("span",{className:"ga-bridge-panel-truncated",children:e("bridge.logLineCount",{count:m})}),i.jsxs("button",{className:"ga-bridge-panel-link-btn",onClick:k,children:[e("bridge.viewAllLogs")," →"]})]})]})]})}const lu=[{key:"services",icon:"symbol-misc",textKey:"nav.services"},{key:"collab",icon:"robot",textKey:"nav.collab"},{key:"token",icon:"graph",textKey:"nav.token"}];function cu(){const{activePage:n,setPage:e}=Ie(),t=H(E=>E.open),o=X(E=>E.newSession),r=X(E=>E.sessions),s=X(E=>E.activeSessionId),l=X(E=>E.setActiveSession),c=X(E=>E.runningSessions),{t:u}=ce(),[p,d]=a.useState(!0),[m,f]=a.useState(""),[b,y]=a.useState(!1),[S,w]=a.useState(!1),C=a.useCallback(()=>y(!1),[]),k=a.useCallback(()=>{C(),t()},[C,t]),_=a.useCallback(()=>{w(!1),y(E=>!E)},[]),x=[...r].sort((E,D)=>{if(E.pinned&&!D.pinned)return-1;if(!E.pinned&&D.pinned)return 1;const P=Number(E.updatedAt||E.createdAt||0);return Number(D.updatedAt||D.createdAt||0)-P}),j=m.trim()?x.filter(E=>E.title.toLowerCase().includes(m.trim().toLowerCase())):x;function v(){o(),e("chat")}function O(E){l(E),e("chat")}return i.jsxs("div",{className:"ga-left-sidebar",children:[i.jsxs("nav",{className:"ga-nav-rail","aria-label":"Main navigation",children:[i.jsxs("button",{type:"button",className:"ga-nav-btn",onClick:v,"aria-label":u("nav.chat"),children:[i.jsx("span",{className:"ga-nav-icon",children:i.jsx(Ee,{name:"comment",size:"1rem"})}),i.jsx("span",{className:"ga-nav-label",children:u("nav.chat")})]}),lu.map(E=>i.jsxs("button",{type:"button",className:`ga-nav-btn${n===E.key?" active":""}`,onClick:()=>e(E.key),"aria-label":u(E.textKey),"aria-current":n===E.key?"page":void 0,children:[i.jsx("span",{className:"ga-nav-icon",children:i.jsx(Ee,{name:E.icon,size:"1rem"})}),i.jsx("span",{className:"ga-nav-label",children:u(E.textKey)})]},E.key))]}),i.jsx("div",{className:"ga-sidebar-search",children:i.jsx(ut,{prefix:i.jsx(ti,{style:{fontSize:14}}),placeholder:u("search.placeholder"),size:"small",value:m,onChange:f})}),!m&&i.jsx(zd,{label:u("section.sessions"),count:r.length,open:p,onToggle:d,onAction:v}),i.jsx("div",{className:"ga-session-section",children:(m||p)&&(j.length===0?i.jsx("div",{className:"ga-session-empty",children:i.jsx("p",{children:u(m?"search.noResults":"conv.emptyList")})}):i.jsx("div",{className:"ga-session-list",children:j.map(E=>i.jsx(Ud,{session:E,isActive:E.id===s,isWorking:c.has(E.id),onClick:()=>O(E.id)},E.id))}))}),i.jsxs("div",{className:"ga-sidebar-footer",children:[i.jsx($e,{content:u("foot.settings"),position:"top",clickToHide:!0,children:i.jsx("button",{type:"button",className:"ga-sidebar-footer-btn",onClick:k,"aria-label":u("foot.settings"),children:i.jsx(Ee,{name:"settings-gear",size:"1rem"})})}),i.jsxs("div",{className:"ga-sidebar-footer-anchor",children:[i.jsx($e,{content:u("foot.runtimeManagement"),position:"top",visible:S&&!b,onVisibleChange:w,children:i.jsx("button",{type:"button",className:"ga-sidebar-footer-btn",onClick:_,"aria-label":u("foot.runtimeManagement"),"aria-expanded":b,"aria-haspopup":"dialog","aria-controls":"ga-runtime-management-panel",children:i.jsx(Ee,{name:"server-process",size:"1rem"})})}),b&&i.jsx(au,{onClose:C})]})]})]})}const du=24;function uu(){const n=a.useRef(null),[e,t]=a.useState(!0),o=a.useRef(!0),r=a.useRef(0),s=a.useCallback(()=>{const u=n.current;if(!u)return;const p=u.scrollHeight-u.scrollTop-u.clientHeight{const p=n.current;p&&(u==="instant"?p.scrollTop=p.scrollHeight:pu(p,p.scrollHeight-p.clientHeight,170),o.current=!0,t(!0))},[]),c=a.useCallback(()=>{o.current=!1},[]);return a.useEffect(()=>{const u=n.current;if(!u)return;const p=()=>s(),d=new MutationObserver(()=>{o.current&&(cancelAnimationFrame(r.current),r.current=requestAnimationFrame(()=>{u.scrollTop=u.scrollHeight}))});return u.addEventListener("scroll",p,{passive:!0}),d.observe(u,{childList:!0,subtree:!0,characterData:!0}),()=>{u.removeEventListener("scroll",p),d.disconnect(),cancelAnimationFrame(r.current)}},[s]),{scrollRef:n,isAtBottom:e,scrollToBottom:l,stopScroll:c}}function pu(n,e,t){const o=n.scrollTop,r=e-o,s=performance.now();function l(c){const u=c-s,p=Math.min(u/t,1),d=1-Math.pow(1-p,3);n.scrollTop=o+r*d,p<1&&requestAnimationFrame(l)}requestAnimationFrame(l)}function hu(n,e,t,o){a.useEffect(()=>{const r=n.current;if(!r||!o)return;t(),r.scrollTop=r.scrollHeight;let s=0,l=r.scrollHeight,c=0;function u(){if(r){if(c++,r.scrollHeight===l?s++:(s=0,l=r.scrollHeight,r.scrollTop=r.scrollHeight),s>=5||c>=90){e("instant");return}requestAnimationFrame(u)}}requestAnimationFrame(u)},[o,n,e,t])}function mu({children:n}){return i.jsx("div",{"data-slot":"aui_thread-content",children:n})}function yt(n){const e=/^[ \t]*(`{3,})([^\n`]*)[ \t]*$/.exec(n??"");return e?{ticks:e[1].length,tag:e[2]}:null}function bi(n,e){if(/^🛠️ Tool:/.test(n))return!0;if(!(e!=null&&e.forToolResult)){const t=yt(n);if(t&&t.ticks>=5&&t.tag==="")return!0}return!!(/^\*\*LLM Running \(Turn \d+\)/.test(n)||/^/i.test(n))}function xn(n,e,t){for(let o=e;o=0)return null}else{r=e+1,s=n.length;for(let l=e+1;l=0?null:{body:n.slice(o,r).join(` +`),nextLine:r,inFlight:!0}}function yu(n){return n.replace(/^\s*\**LLM Running \(Turn \d+\) \.\.\.\**\s*/i,"")}function bu(n,e){const t=String(n||"").split(` +`),o=[];let r=0,s=0;const l=c=>{c<=r||(o.push(t.slice(r,c).join(` +`)),r=c)};for(;s0)return t.join(` +`);try{const o=JSON.parse(n);if(o!=null&&o.question)return String(o.question)}catch{}return n.trim()}function To(n){const e=[];let t=yu(n);const o=[];t=t.replace(/([\s\S]*?)<\/thinking>/gi,(u,p)=>(o.push(p),` +§§THINK:${o.length-1}§§ +`));const r=[];t=t.replace(/

([\s\S]*?)<\/summary>/gi,(u,p)=>(r.push(p),` +§§SUMMARY:${r.length-1}§§ +`));const s=[],l=[];t=bu(t,{onTool(u,p,d){return s.push({name:u,body:p,inFlight:d==null?void 0:d.inFlight}),` +§§TOOL:${s.length-1}§§ +`},onResult(u,p){return l.push({body:u,inFlight:p==null?void 0:p.inFlight}),` +§§RESULT:${l.length-1}§§ +`}}),t=t.replace(/[\s\S]*?<\/function_calls>/gi,u=>(s.push({name:"function_call",body:u}),` +§§TOOL:${s.length-1}§§ +`)),t=t.replace(/[\s\S]*?<\/function_results>/gi,u=>(l.push({body:u}),` +§§RESULT:${l.length-1}§§ +`));const c=t.split(/\n?(§§(?:THINK|TOOL|RESULT|SUMMARY):\d+§§)\n?/);for(const u of c){const p=/^§§THINK:(\d+)§§$/.exec(u);if(p){e.push({type:"thinking",content:o[Number(p[1])]});continue}const d=/^§§TOOL:(\d+)§§$/.exec(u);if(d){const y=s[Number(d[1])];if(y.name==="ask_user"){const S=vu(y.body),w=xu(y.body);e.push({type:"approval",content:w,candidates:S})}else e.push({type:"tool",content:y.body,label:y.name,inFlight:y.inFlight});continue}const m=/^§§RESULT:(\d+)§§$/.exec(u);if(m){const y=l[Number(m[1])];e.push({type:"result",content:y.body,inFlight:y.inFlight});continue}const f=/^§§SUMMARY:(\d+)§§$/.exec(u);if(f){e.push({type:"summary",content:r[Number(f[1])]});continue}const b=u.trim();b&&e.push({type:"prose",content:b})}return e}function Hr(n){return n.map((e,t)=>{const o=To(e),r=o.reduce((s,l)=>s+l.content.length,0);return{index:t,segments:o,weight:r}})}function wu(n){const e=[];let t=0;for(;t{s.stopPropagation(),navigator.clipboard.writeText(n).then(()=>{t(!0),o.current&&clearTimeout(o.current),o.current=setTimeout(()=>t(!1),2e3)})},[n]);return typeof navigator>"u"||!navigator.clipboard?null:i.jsx("button",{"data-slot":"user-bubble-copy",onClick:r,title:e?"Copied":"Copy",children:e?i.jsx("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",children:i.jsx("path",{d:"M3 8.5l3 3 7-7",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}):i.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",children:[i.jsx("rect",{x:"5.5",y:"5.5",width:"7",height:"7",rx:"1",stroke:"currentColor",strokeWidth:"1.2"}),i.jsx("path",{d:"M3.5 10.5v-7a1 1 0 011-1h7",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})]})})}const wi=a.memo(function({content:e,msgId:t,images:o,files:r}){const s=a.useRef(null),[l,c]=a.useState(!1),[u,p]=a.useState(!1),d=a.useRef(!1);if(d.current=u,a.useLayoutEffect(()=>{const f=s.current;if(!f)return;const b=new ResizeObserver(()=>{d.current||c(f.scrollHeight>f.clientHeight+2)});return b.observe(f),()=>b.disconnect()},[]),!e&&(!o||o.length===0)&&(!r||r.length===0))return null;const m=Cu(e);return i.jsxs(i.Fragment,{children:[o&&o.length>0&&i.jsx("div",{"data-slot":"user-images",children:o.map((f,b)=>i.jsx("img",{"data-slot":"user-image-thumb",src:f.path.startsWith("data:")?f.path:`${ee}/upload/raw?path=${encodeURIComponent(f.path)}`,alt:f.name},b))}),r&&r.length>0&&i.jsx("div",{"data-slot":"user-files",children:r.map((f,b)=>i.jsxs("div",{"data-slot":"user-file-chip",children:[i.jsx("span",{"data-slot":"user-file-icon",children:ku(f.name)}),i.jsx("span",{"data-slot":"user-file-name",children:f.name}),f.size!=null&&f.size>0&&i.jsx("span",{"data-slot":"user-file-size",children:Su(f.size)})]},b))}),i.jsx("div",{"data-slot":"aui_user-message-root",id:t?`msg-${t}`:void 0,"data-msg-id":t||void 0,"data-role":"user",children:i.jsxs("div",{"data-slot":"user-bubble","data-clamped":l||void 0,"data-expanded":u||void 0,children:[i.jsx(ju,{text:e}),i.jsx("div",{ref:s,"data-slot":"user-bubble-text",children:m?i.jsxs(i.Fragment,{children:[i.jsxs("span",{className:"skill-chip",children:["/",m.id]}),m.rest&&i.jsxs(i.Fragment,{children:[" ",m.rest]})]}):e}),l&&i.jsx("button",{"data-slot":"user-bubble-expand","aria-expanded":u,"aria-label":u?"Collapse":"Expand",onClick:()=>p(f=>!f),children:i.jsx("svg",{viewBox:"0 0 16 16",fill:"none",children:i.jsx("path",{d:"M4 6l4 4 4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})]})})]})}),Eu=a.memo(function({content:e,isStreaming:t}){const[o,r]=a.useState(null),s=a.useRef(null),l=o!==null?o:t,c=a.useCallback(()=>{r(u=>u===null?!t:!u)},[t]);return a.useEffect(()=>{t&&l&&s.current&&(s.current.scrollTop=s.current.scrollHeight)},[e,t,l]),e.trim()?i.jsxs("details",{"data-slot":"aui_thinking-disclosure",open:l,onToggle:c,children:[i.jsx("summary",{"data-slot":"thinking-summary",children:i.jsx("span",{className:t?"thinking-shimmer":"",children:"Thinking"})}),i.jsx("div",{ref:s,"data-slot":"thinking-body","data-streaming":t||void 0,children:e})]}):null}),kt=new Set,Zr=2048;function Ci(n,e,t){a.useEffect(()=>{if(!(!t||!n.current||kt.has(e))){if(kt.size>=Zr){const o=Array.from(kt).slice(0,Zr/2);for(const r of o)kt.delete(r)}kt.add(e),n.current.animate([{opacity:0,transform:"translateY(0.375rem)"},{opacity:1,transform:"translateY(0)"}],{duration:180,easing:"cubic-bezier(0.16, 1, 0.3, 1)",fill:"both"})}},[])}const Jn=new Map;function qr(n){const e=Math.floor(n/1e3);return e<60?`${e}s`:`${Math.floor(e/60)}m ${e%60}s`}function Ou(n,e){const[,t]=a.useState(0),o=a.useRef(null);a.useEffect(()=>{let s=Jn.get(n);return e&&!s&&(s={start:Date.now()},Jn.set(n,s)),!e&&s&&!s.end&&(s.end=Date.now()),e&&!o.current&&(o.current=setInterval(()=>t(l=>l+1),1e3)),()=>{!e&&o.current&&(clearInterval(o.current),o.current=null)}},[n,e]),a.useEffect(()=>()=>{o.current&&clearInterval(o.current)},[]);const r=Jn.get(n);if(!r)return{elapsed:null,duration:null};if(e){const s=Date.now()-r.start;return{elapsed:qr(s),duration:null}}if(r.end){const s=r.end-r.start;return s<1e3?{elapsed:null,duration:null}:{elapsed:null,duration:qr(s)}}return{elapsed:null,duration:null}}const Pu=a.memo(function({name:e,content:t,inFlight:o,segmentKey:r="",isStreaming:s=!1}){const[l,c]=a.useState(!1),u=a.useRef(null);Ci(u,r,s);const{elapsed:p,duration:d}=Ou(r,o);return i.jsxs("div",{ref:u,"data-slot":"tool-block","data-tool-row":!0,"data-status":o?"running":"success",children:[i.jsxs("div",{"data-slot":"tool-header",onClick:()=>c(!l),children:[o&&i.jsx("span",{"data-slot":"tool-glyph",children:i.jsx("span",{"data-slot":"tool-spinner"})}),i.jsx("span",{"data-slot":"tool-title",children:e}),o&&i.jsx("span",{"data-slot":"tool-dots",children:"…"}),p&&i.jsx("span",{"data-slot":"tool-duration",children:p}),d&&i.jsx("span",{"data-slot":"tool-duration",children:d})]}),l&&t&&i.jsx("pre",{"data-slot":"tool-body",children:t})]})}),_u=a.memo(function({content:e,inFlight:t,segmentKey:o="",isStreaming:r=!1}){const[s,l]=a.useState(!1),c=e.length>200,u=a.useRef(null);return Ci(u,o,r),i.jsxs("div",{ref:u,"data-slot":"tool-block","data-tool-row":!0,"data-status":t?"running":"success",children:[i.jsxs("div",{"data-slot":"tool-header",onClick:()=>c&&l(!s),children:[i.jsx("span",{"data-slot":"tool-title",children:t?"Output…":"Output"}),c&&!s&&i.jsxs("span",{"data-slot":"tool-duration",children:[e.length," chars"]})]}),(s||!c)&&i.jsx("pre",{"data-slot":"tool-body",children:e})]})});function Gr(n){return n<26?String.fromCharCode(65+n):null}function Mu({question:n,answer:e}){return i.jsxs("div",{"data-slot":"approval-card","data-settled":!0,children:[i.jsx("div",{"data-slot":"approval-question",children:n}),i.jsx("div",{"data-slot":"approval-settled",children:e||i.jsx("em",{children:"Skipped"})})]})}const Lu=a.memo(function({question:e,candidates:t}){const o=X(L=>L.sendMessage),[r,s]=a.useState(null),[l,c]=a.useState(""),[u,p]=a.useState(!1),[d,m]=a.useState(!1),[f,b]=a.useState(null),y=a.useRef(null),S=a.useRef(null),w=r??(l.trim()||null),C=t.length>0,k=a.useCallback(L=>{s(L),c("")},[]),_=a.useCallback(async L=>{u||d||(p(!0),await o(L),b(L),m(!0),p(!1))},[u,d,o]),x=a.useCallback(async()=>{u||d||(p(!0),await o(""),b(null),m(!0),p(!1))},[u,d,o]),j=a.useCallback(()=>{w!==null&&_(w)},[w,_]),v=a.useCallback(()=>{s(null)},[]),O=a.useCallback(L=>{c(L.target.value),s(null)},[]),E=a.useCallback(L=>{if(!(L.nativeEvent.isComposing||L.keyCode===229)&&L.key==="Enter"&&!L.shiftKey){L.preventDefault();const z=l.trim();z&&_(z)}},[l,_]);if(a.useEffect(()=>{if(d||u)return;function L(z){var M;if(z.metaKey||z.ctrlKey||z.altKey||z.defaultPrevented)return;const W=document.activeElement;if(W){const Z=W.tagName.toLowerCase();if(Z==="input"||Z==="textarea"||W.isContentEditable)return}const A=z.key.toLowerCase();if(A.length===1&&A>="a"&&A<="z"){const Z=A.charCodeAt(0)-97;Zwindow.removeEventListener("keydown",L)},[d,u,t,r,l,k,_]),d)return i.jsx(Mu,{question:e,answer:f});const D=t.length,P=Gr(D),R=l.trim().length>0&&r===null;return i.jsxs("div",{"data-slot":"approval-card",ref:S,"data-submitting":u||void 0,children:[i.jsx("div",{"data-slot":"approval-question",children:e}),C?i.jsxs("div",{"data-slot":"approval-options",children:[t.map((L,z)=>{const W=Gr(z),A=r===L;return i.jsxs("button",{"data-slot":"approval-option-row","data-selected":A||void 0,disabled:u,onClick:()=>k(L),type:"button",children:[W&&i.jsx("kbd",{"data-slot":"approval-badge","data-active":A||void 0,children:W}),i.jsx("span",{children:L})]},z)}),i.jsxs("div",{"data-slot":"approval-other",children:[P&&i.jsx("kbd",{"data-slot":"approval-badge","data-active":R||void 0,children:P}),i.jsx("textarea",{ref:y,"data-slot":"approval-other-input",placeholder:"Other…",value:l,onChange:O,onFocus:v,onKeyDown:E,disabled:u,rows:1})]})]}):i.jsx("div",{"data-slot":"approval-options",children:i.jsx("textarea",{ref:y,"data-slot":"approval-other-input","data-fullwidth":!0,placeholder:"Type your response…",value:l,onChange:O,onKeyDown:E,disabled:u,rows:1})}),i.jsxs("div",{"data-slot":"approval-actions",children:[i.jsx("button",{type:"button","data-slot":"approval-skip-btn",disabled:u,onClick:x,children:"Skip"}),i.jsxs("button",{type:"button","data-slot":"approval-confirm-btn",disabled:u||w===null,onClick:j,children:[u?i.jsx("span",{"data-slot":"approval-spinner"}):null,"Continue"]})]})]})});function Si(n){const e=Math.floor(n/1e3);return e<60?`${e}s`:`${Math.floor(e/60)}m ${e%60}s`}const Iu=a.memo(function(){const[e,t]=a.useState(0),o=a.useRef(Date.now());return a.useEffect(()=>{const r=setInterval(()=>t(Date.now()-o.current),1e3);return()=>clearInterval(r)},[]),i.jsxs("div",{"data-slot":"stream-indicator",children:[i.jsx("span",{"data-slot":"dither-square"}),i.jsx("span",{"data-slot":"indicator-timer",children:Si(e)})]})}),Tu=a.memo(function({contentLength:e}){const[t,o]=a.useState(!1),[r,s]=a.useState(0),l=a.useRef(e),c=a.useRef(Date.now()),u=a.useRef(null);return a.useEffect(()=>{e!==l.current&&(l.current=e,c.current=Date.now(),u.current=null,o(!1),s(0))},[e]),a.useEffect(()=>{const p=setInterval(()=>{Date.now()-c.current>=2e3&&(u.current||(u.current=c.current+2e3),o(!0),s(Date.now()-u.current))},500);return()=>clearInterval(p)},[]),t?i.jsxs("div",{"data-slot":"stream-indicator","data-stall":!0,children:[i.jsx("span",{"data-slot":"dither-square"}),i.jsxs("span",{"data-slot":"indicator-timer",children:["+",Si(r)]})]}):null}),Ru=a.lazy(async()=>({default:(await Gt(()=>import("./MarkdownPart-Bhe_jloX.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]))).MarkdownPart})),Nu=a.lazy(async()=>({default:(await Gt(()=>import("./SummaryPart-D48OOFSQ.js"),__vite__mapDeps([10,1,2,3,4,5,6,7,8]))).SummaryPart})),Du=a.memo(function({segments:e,isStreaming:t,messageId:o=""}){if(e.length===0&&t)return i.jsx("div",{"data-slot":"aui_assistant-message-content",children:i.jsx(Iu,{})});if(e.length===0)return null;const r=t?e:e.map(c=>c.inFlight?{...c,inFlight:!1}:c),s=r.reduce((c,u)=>c+u.content.length,0),l=r.some(c=>c.type==="approval");return i.jsxs("div",{"data-slot":"aui_assistant-message-content",children:[r.map((c,u)=>{const p=`${o}-${u}`;switch(c.type){case"prose":return i.jsx(a.Suspense,{fallback:i.jsx("span",{"data-slot":"aui_markdown-loading","aria-busy":"true"}),children:i.jsx(Ru,{content:c.content,isStreaming:t&&u===r.length-1})},u);case"thinking":return i.jsx(Eu,{content:c.content,isStreaming:!!c.inFlight||t},u);case"tool":return i.jsx(Pu,{name:c.label||"tool",content:c.content,inFlight:!!c.inFlight,segmentKey:p,isStreaming:t},u);case"result":return i.jsx(_u,{content:c.content,inFlight:!!c.inFlight,segmentKey:p,isStreaming:t},u);case"summary":return i.jsx(a.Suspense,{fallback:i.jsx("span",{"data-slot":"aui_summary-loading","aria-busy":"true"}),children:i.jsx(Nu,{content:c.content})},u);case"approval":return i.jsx(Lu,{question:c.content,candidates:c.candidates||[]},u);default:return null}}),t&&!l&&i.jsx(Tu,{contentLength:s})]})}),$u=a.memo(function({getMessageText:e}){const[t,o]=a.useState(!1),r=a.useRef(),s=a.useCallback(()=>{const l=e();l&&navigator.clipboard.writeText(l).then(()=>{o(!0),r.current&&clearTimeout(r.current),r.current=setTimeout(()=>o(!1),2e3)})},[e]);return typeof navigator>"u"||!navigator.clipboard?null:i.jsx("div",{"data-slot":"assistant-action-bar",children:i.jsx("button",{"data-slot":"action-bar-btn",onClick:s,title:t?"Copied":"Copy",children:t?i.jsx("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",children:i.jsx("path",{d:"M3 8.5l3 3 7-7",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}):i.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",children:[i.jsx("rect",{x:"5.5",y:"5.5",width:"7",height:"7",rx:"1",stroke:"currentColor",strokeWidth:"1.2"}),i.jsx("path",{d:"M3.5 10.5v-7a1 1 0 011-1h7",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})]})})})}),Au=a.memo(function({message:e,isStreaming:t}){const o=a.useMemo(()=>{const l=e.turn_segs;return l&&l.length>0?l.flatMap(c=>To(c)):To(e.content)},[e.content,e.turn_segs]),r=a.useRef(o);r.current=o;const s=a.useCallback(()=>{const l=r.current,c=[];for(const u of l)(u.type==="prose"||u.type==="summary")&&c.push(u.content);return c.join(` + +`)},[]);return i.jsxs("div",{"data-slot":"aui_assistant-message-root","data-role":"assistant","data-streaming":t||void 0,children:[i.jsx(Du,{segments:o,isStreaming:t,messageId:String(e.id)}),i.jsx($u,{getMessageText:s})]})}),Fu=a.memo(function({userMsg:e,assistantMsg:t,isStreaming:o}){return i.jsxs("div",{"data-slot":"aui_turn-pair",children:[i.jsx(wi,{content:e.content,msgId:e.id,images:e.images,files:e.files}),i.jsx(Au,{message:t,isStreaming:o})]})}),zu=[{pattern:/invalid.?api.?key|api.?key.?invalid|Incorrect API key/i,key:"err.apiKeyInvalid"},{pattern:/model.*not found|does not exist|model_not_found/i,key:"err.modelNotFound"},{pattern:/rate.?limit|429|Too Many Requests/i,key:"err.rateLimit"},{pattern:/quota|insufficient.?funds|balance|billing/i,key:"err.quotaExceeded"},{pattern:/timed?\s*out|TimeoutError/i,key:"err.timeout"},{pattern:/Connection\s*refused|ConnectionRefusedError/i,key:"err.connRefused"},{pattern:/errno 48|address already in use/i,key:"err.portBusy"},{pattern:/Traceback|Exception.*thread|exit code \d+/i,key:"err.processCrash"}];function Bu(n,e){if(!n)return"";for(const t of zu)if(t.pattern.test(n))return e(t.key);return n.length<=80?n:n.slice(0,77)+"…"}const Uu=a.memo(function({error:e,msgId:t}){const{t:o}=ce(),r=Bu(e,o);return i.jsx("div",{className:"ga-inline-error",role:"alert",id:`msg-${t}`,children:i.jsx("span",{className:"ga-inline-error-text",children:r})})}),Vu=300;function Ku(n){return n.kind==="turn"?n.turns.reduce((e,t)=>e+t.segments.length,0):1}const Wu=a.memo(function({messages:e,isRunning:t,budgetMultiplier:o,onShowEarlier:r,scrollRef:s}){const l=a.useMemo(()=>wu(e),[e]),c=a.useRef(null),u=a.useMemo(()=>{if(!isFinite(o))return 0;const f=Vu*o;let b=0;for(let y=l.length-1;y>=0;y--)if(b+=Ku(l[y]),b>f)return y+1;return 0},[l,o]),p=a.useMemo(()=>l.slice(u),[l,u]),d=u;a.useLayoutEffect(()=>{c.current!==null&&(s!=null&&s.current)&&(s.current.scrollTop=s.current.scrollHeight-c.current,c.current=null)});const m=()=>{const f=s==null?void 0:s.current;f&&(c.current=f.scrollHeight-f.scrollTop),r()};return e.length===0?i.jsx("div",{"data-slot":"thread-empty",children:i.jsx("p",{children:"Send a message to begin."})}):i.jsxs(i.Fragment,{children:[d>0&&i.jsxs("button",{"data-slot":"show-earlier-btn",onClick:m,children:["Show ",d," earlier messages"]}),p.map((f,b)=>{const y=u+b;return f.kind==="turn"?i.jsx(Fu,{userMsg:f.userMsg,assistantMsg:f.assistantMsg,isStreaming:t&&y===l.length-1},f.assistantMsg.id):f.msg.role==="user"?i.jsx("div",{"data-slot":"aui_turn-pair",children:i.jsx(wi,{content:f.msg.content,msgId:f.msg.id,images:f.msg.images,files:f.msg.files})},f.msg.id):f.msg.role==="error"?i.jsx(Uu,{error:f.msg.content,msgId:f.msg.id},f.msg.id):i.jsx("div",{"data-slot":"standalone-message","data-status":f.msg.status,children:f.msg.content},f.msg.id)})]})}),Qr=3,Yr=40,Hu=170,Xr=12;function Jr(n){const e=n.replace(/\s+/g," ").trim();return e.length<=Yr?e:e.slice(0,Yr)+"…"}function Zu(n){return 1-Math.pow(1-n,3)}let eo=0;function qu(n,e,t){cancelAnimationFrame(eo);const o=n.scrollTop,r=e-o;if(Math.abs(r)<1)return;const s=performance.now();function l(c){const u=c-s,p=Math.min(u/t,1);n.scrollTop=o+r*Zu(p),p<1&&(eo=requestAnimationFrame(l))}eo=requestAnimationFrame(l)}const Gu=a.memo(function({messages:e,stopScroll:t,onJumpToCollapsed:o}){const r=a.useMemo(()=>e.filter(y=>y.role==="user").map(y=>({id:y.id,content:y.content})),[e]),[s,l]=a.useState(null),[c,u]=a.useState(!1),p=a.useRef(null),d=a.useRef(0),m=a.useCallback(()=>{p.current&&(clearTimeout(p.current),p.current=null),u(!0)},[]),f=a.useCallback(()=>{p.current=setTimeout(()=>{u(!1),p.current=null},150)},[]);a.useEffect(()=>{if(r.length0&&(k=r[0].id),k&&l(k)}function w(){d.current||(d.current=requestAnimationFrame(S))}return y.addEventListener("scroll",w,{passive:!0}),S(),()=>{y.removeEventListener("scroll",w),cancelAnimationFrame(d.current)}},[r]);const b=a.useCallback(y=>{const S=document.querySelector('[data-slot="aui_thread-viewport"]'),w=document.getElementById(`msg-${y}`);if(!w){o(y);return}if(!S)return;t();const _=(w.closest('[data-slot="aui_turn-pair"]')||w).offsetTop-Xr;qu(S,_,Hu)},[t,o]);return r.lengthi.jsx("button",{"data-slot":"rail-panel-item","data-active":y.id===s||void 0,onClick:()=>b(y.id),children:Jr(y.content)},y.id))}),i.jsx("div",{"data-slot":"rail-marks",children:r.map(y=>i.jsx("button",{"data-slot":"rail-mark","data-active":y.id===s||void 0,"aria-label":Jr(y.content),onClick:()=>b(y.id),children:i.jsx("span",{"data-slot":"rail-mark-line"})},y.id))})]})})});function Qu(){const{messages:n,status:e,activeSessionId:t}=X(),{scrollRef:o,isAtBottom:r,scrollToBottom:s,stopScroll:l}=uu(),[c,u]=a.useState(1),p=a.useRef(null);hu(o,s,l,t),a.useEffect(()=>{u(1),p.current=null},[t]),a.useEffect(()=>{if(!p.current)return;const b=p.current,y=requestAnimationFrame(()=>{const S=document.getElementById(`msg-${b}`);if(S){p.current=null;const w=o.current;if(w){const k=S.closest('[data-slot="aui_turn-pair"]')||S;w.scrollTop=k.offsetTop-12}}});return()=>cancelAnimationFrame(y)},[c,o]);const d=a.useCallback(()=>{u(1/0)},[]),m=a.useCallback(b=>{p.current=b,d()},[d]),f=a.useCallback(()=>{o.current,u(b=>b+1)},[o]);return i.jsxs("div",{"data-slot":"thread-root",children:[i.jsx("div",{ref:o,"data-slot":"aui_thread-viewport","data-following":r,children:i.jsxs(mu,{children:[i.jsx(Wu,{messages:n,isRunning:e==="running",budgetMultiplier:c,onShowEarlier:f,scrollRef:o}),i.jsx("div",{"data-slot":"aui_composer-clearance"})]})}),i.jsx(Gu,{messages:n,stopScroll:l,onJumpToCollapsed:m}),!r&&i.jsx("button",{"data-slot":"scroll-to-bottom",onClick:()=>s("smooth"),children:i.jsx("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",children:i.jsx("path",{d:"M8 3v10m0 0l-3.5-3.5M8 13l3.5-3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})]})}function Ro(n){let e="";for(const t of n.childNodes)if(t.nodeType===Node.TEXT_NODE)e+=t.textContent||"";else if(t instanceof HTMLElement)if(t.dataset.refText)e+=t.dataset.refText;else if(t.tagName==="BR")e+=` +`;else{const o=Ro(t);o&&(e+=` +`+o)}return e}function Yu(n){const e=Array.from(n.childNodes);for(const t of e)if(t instanceof HTMLElement){if(t.dataset.refText||t.tagName==="BR")continue;if(t.tagName==="DIV"||t.tagName==="P"){const o=document.createElement("br");for(n.insertBefore(o,t);t.firstChild;)n.insertBefore(t.firstChild,t);n.removeChild(t)}}n.normalize()}function ki(n){const e=document.createRange();e.selectNodeContents(n),e.collapse(!1);const t=window.getSelection();t&&(t.removeAllRanges(),t.addRange(e))}function es(n,e){n.focus();const t=window.getSelection();if(!t||t.rangeCount===0){n.appendChild(e);return}const o=t.getRangeAt(0);o.deleteContents(),o.insertNode(e),o.setStartAfter(e),o.collapse(!0),t.removeAllRanges(),t.addRange(o)}function Xu(n,e){n.textContent=e,ki(n)}function Ju(n,e,t){const o=document.createElement("span");return o.contentEditable="false",o.dataset.refText=`@${n}:\`${e}\``,o.dataset.refKind=n,o.className="ref-chip",o.innerHTML=`${r0(n)}${o0(t||e)}`,o}function e0(n,e,t,o){const r=Ju(e,t,o);es(n,r);const s=document.createTextNode(" ");es(n,s)}function t0(n,e){const t=document.createElement("span");return t.contentEditable="false",t.dataset.refText=e,t.dataset.skillId=n,t.className="skill-chip",t.textContent=`/${n}`,t}function n0(n,e,t){n.textContent="";const o=t0(e,t);n.appendChild(o);const r=document.createTextNode(" ");n.appendChild(r),ki(n)}function o0(n){return n.replace(/&/g,"&").replace(//g,">").replace(/"/g,""")}function r0(n){switch(n){case"file":return'';case"url":return'';case"image":return'';default:return''}}const s0=a.forwardRef(function({placeholder:e,disabled:t,onInput:o,onKeyDown:r,onSlashTrigger:s,onSlashDismiss:l,onAtTrigger:c,onAtDismiss:u,onPasteFiles:p},d){const m=a.useRef(null),f=a.useRef(!1),b=a.useRef("");a.useImperativeHandle(d,()=>({focus(){var x;(x=m.current)==null||x.focus()},clear(){m.current&&(m.current.textContent="",b.current="")},getText(){return m.current?Ro(m.current):""},setText(x){m.current&&(Xu(m.current,x),b.current=x,o(x))},insertChip(x,j,v){m.current&&(m.current.focus(),e0(m.current,x,j,v),y())},setSkillChip(x,j){m.current&&(n0(m.current,x,j),y())},getElement(){return m.current}}));const y=a.useCallback(()=>{if(!m.current)return;const x=Ro(m.current);b.current=x,o(x);const j=x.trimStart();j.startsWith("/")&&!j.includes(` +`)?s==null||s(j.slice(1)):l==null||l();const v=x.match(/@([^\s@]*)$/);v?c==null||c(v[1]):u==null||u()},[o,s,l,c,u]),S=a.useCallback(()=>{f.current||(m.current&&Yu(m.current),y())},[y]),w=a.useCallback(()=>{f.current=!0},[]),C=a.useCallback(()=>{f.current=!1,S()},[S]),k=a.useCallback(x=>{f.current||x.nativeEvent.isComposing||x.keyCode===229||r(x)},[r]),_=a.useCallback(x=>{var E;const j=(E=x.clipboardData)==null?void 0:E.items;if(!j)return;const v=[];for(const D of Array.from(j))if(D.type.startsWith("image/")&&D.type!=="image/svg+xml"){const P=D.getAsFile();P&&v.push(P)}if(v.length>0){x.preventDefault(),p==null||p(v);return}const O=x.clipboardData.getData("text/plain");O&&(x.preventDefault(),document.execCommand("insertText",!1,O))},[p]);return a.useEffect(()=>{const x=m.current;if(!x)return;const j=new ResizeObserver(v=>{var E,D,P;const O=((P=(D=(E=v[0])==null?void 0:E.borderBoxSize)==null?void 0:D[0])==null?void 0:P.blockSize)??x.offsetHeight;x.style.setProperty("--editor-scroll-height",`${O}px`)});return j.observe(x),()=>j.disconnect()},[]),i.jsx("div",{ref:m,"data-slot":"composer-rich-input",contentEditable:!t,role:"textbox","aria-multiline":"true","aria-placeholder":e,"data-placeholder":e,suppressContentEditableWarning:!0,onInput:S,onKeyDown:k,onCompositionStart:w,onCompositionEnd:C,onPaste:_})});function i0(){try{const n=localStorage.getItem("ga_custom_presets");return n?JSON.parse(n):[]}catch{return[]}}function a0({visible:n,query:e,onSelect:t,onClose:o}){const r=H(m=>m.lang),[s,l]=a.useState(0),c=a.useRef(null),u=i0(),p=[...Xe,...u],d=e?p.filter(m=>m.id.startsWith(e.toLowerCase())||m.title.toLowerCase().includes(e.toLowerCase())):p;return a.useEffect(()=>{l(0)},[e]),a.useEffect(()=>{if(!n)return;function m(f){f.key==="ArrowDown"?(f.preventDefault(),l(b=>Math.min(b+1,d.length-1))):f.key==="ArrowUp"?(f.preventDefault(),l(b=>Math.max(b-1,0))):f.key==="Enter"?(f.preventDefault(),d[s]&&t(d[s].id,d[s].prompt)):f.key==="Escape"&&(f.preventDefault(),o())}return document.addEventListener("keydown",m,!0),()=>document.removeEventListener("keydown",m,!0)},[n,s,d,t,o]),a.useEffect(()=>{if(!c.current)return;const m=c.current.querySelector("[data-focused]");m==null||m.scrollIntoView({block:"nearest"})},[s]),!n||d.length===0?null:i.jsx("div",{ref:c,"data-slot":"completion-drawer",children:d.map((m,f)=>i.jsx("button",{"data-slot":"completion-item","data-focused":f===s?"":void 0,onClick:()=>t(m.id,m.prompt),onMouseEnter:()=>l(f),children:i.jsxs("span",{"data-slot":"completion-info",children:[i.jsxs("span",{"data-slot":"completion-title",children:["/",m.id]}),i.jsx("span",{"data-slot":"completion-desc",children:m.desc[r]||m.desc.en})]})},m.id))})}const l0=[{id:"file",label:"file"},{id:"url",label:"url"},{id:"image",label:"image"}];function c0({visible:n,query:e,onConfirm:t,onClose:o}){const r=a.useRef(null),[s,l]=a.useState("file"),[c,u]=a.useState("");a.useEffect(()=>{n&&(u(e),l("file"),setTimeout(()=>{var d;return(d=r.current)==null?void 0:d.focus()},0))},[n,e]),a.useEffect(()=>{if(!n)return;function d(m){m.key==="Escape"&&(m.preventDefault(),m.stopPropagation(),o())}return document.addEventListener("keydown",d,!0),()=>document.removeEventListener("keydown",d,!0)},[n,o]);const p=a.useCallback(d=>{d.preventDefault();const m=c.trim();m&&t(s,m)},[s,c,t]);return n?i.jsx("div",{"data-slot":"at-ref-popover",children:i.jsxs("form",{onSubmit:p,"data-slot":"at-ref-form",children:[i.jsx("div",{"data-slot":"at-ref-kinds",children:l0.map(d=>i.jsx("button",{type:"button","data-slot":"at-ref-kind-btn","data-active":d.id===s?"":void 0,onClick:()=>l(d.id),title:d.label,children:i.jsx(d0,{kind:d.id})},d.id))}),i.jsx("input",{ref:r,"data-slot":"at-ref-input",type:"text",value:c,onChange:d=>u(d.target.value),placeholder:s==="url"?"https://...":"path/to/file"}),i.jsx("button",{type:"submit","data-slot":"at-ref-confirm",disabled:!c.trim(),children:"↵"})]})}):null}function d0({kind:n}){switch(n){case"file":return i.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",children:[i.jsx("path",{d:"M4 2h5l4 4v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1z",stroke:"currentColor",strokeWidth:"1.2"}),i.jsx("path",{d:"M9 2v4h4",stroke:"currentColor",strokeWidth:"1.2"})]});case"url":return i.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",children:i.jsx("path",{d:"M6.5 9.5l3-3M7 11l-1.5 1.5a2.12 2.12 0 1 1-3-3L4 8m5-3l1.5-1.5a2.12 2.12 0 1 1 3 3L12 8",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})});case"image":return i.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",children:[i.jsx("rect",{x:"2",y:"2",width:"12",height:"12",rx:"1",stroke:"currentColor",strokeWidth:"1.2"}),i.jsx("circle",{cx:"5.5",cy:"5.5",r:"1",fill:"currentColor"}),i.jsx("path",{d:"M2 11l3-3 2 2 3-3 4 4",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})]});default:return null}}const ts={title:{zh:"附加",en:"Attach"},file:{zh:"文件…",en:"File…"},image:{zh:"图片…",en:"Image…"},paste:{zh:"粘贴图片",en:"Paste image"},hint:{zh:"提示:输入 @ 以内联引用文件",en:"Tip: type @ to reference files inline"}};function u0({onUploadFile:n,onUploadImage:e,onPasteImage:t}){const[o,r]=a.useState(!1),s=a.useRef(null),l=a.useRef(null),c=H(m=>m.lang),u=m=>ts[m][c]||ts[m].en,p=a.useCallback(()=>r(m=>!m),[]);a.useEffect(()=>{if(!o)return;function m(b){s.current&&!s.current.contains(b.target)&&l.current&&!l.current.contains(b.target)&&r(!1)}function f(b){b.key==="Escape"&&r(!1)}return document.addEventListener("mousedown",m),document.addEventListener("keydown",f),()=>{document.removeEventListener("mousedown",m),document.removeEventListener("keydown",f)}},[o]);const d=a.useCallback(m=>()=>{m(),r(!1)},[]);return i.jsxs("div",{"data-slot":"context-menu-wrap",children:[i.jsx("button",{ref:l,"data-slot":"composer-attach-btn",onClick:p,"aria-label":u("title"),title:u("title"),children:i.jsx(p0,{})}),o&&i.jsxs("div",{ref:s,"data-slot":"context-menu",children:[i.jsx("div",{"data-slot":"context-menu-title",children:u("title")}),i.jsxs("button",{"data-slot":"context-menu-item",onClick:d(n),children:[i.jsx("span",{"data-slot":"context-menu-icon",children:i.jsx(h0,{})}),i.jsx("span",{"data-slot":"context-menu-label",children:u("file")})]}),i.jsxs("button",{"data-slot":"context-menu-item",onClick:d(e),children:[i.jsx("span",{"data-slot":"context-menu-icon",children:i.jsx(m0,{})}),i.jsx("span",{"data-slot":"context-menu-label",children:u("image")})]}),i.jsxs("button",{"data-slot":"context-menu-item",onClick:d(t),children:[i.jsx("span",{"data-slot":"context-menu-icon",children:i.jsx(f0,{})}),i.jsx("span",{"data-slot":"context-menu-label",children:u("paste")})]}),i.jsx("div",{"data-slot":"context-menu-hint",children:u("hint")})]})]})}function p0(){return i.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:i.jsx("path",{d:"M8 3v10M3 8h10",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}function h0(){return i.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",children:[i.jsx("path",{d:"M4 2h5l4 4v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1z",stroke:"currentColor",strokeWidth:"1.2"}),i.jsx("path",{d:"M9 2v4h4",stroke:"currentColor",strokeWidth:"1.2"})]})}function m0(){return i.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",children:[i.jsx("rect",{x:"2",y:"2",width:"12",height:"12",rx:"1",stroke:"currentColor",strokeWidth:"1.2"}),i.jsx("circle",{cx:"5.5",cy:"5.5",r:"1",fill:"currentColor"}),i.jsx("path",{d:"M2 11l3-3 2 2 3-3 4 4",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})]})}function f0(){return i.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",children:[i.jsx("rect",{x:"3",y:"2",width:"10",height:"12",rx:"1",stroke:"currentColor",strokeWidth:"1.2"}),i.jsx("path",{d:"M6 2V1.5A.5.5 0 0 1 6.5 1h3a.5.5 0 0 1 .5.5V2",stroke:"currentColor",strokeWidth:"1.2"})]})}var g0="OpenAI";function Mt(n){"@babel/helpers - typeof";return Mt=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Mt(n)}var y0=["size","style"];function ns(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function to(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function C0(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var S0=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=w0(n,y0);return i.jsxs("svg",to(to({fill:"currentColor",fillRule:"evenodd",height:t,style:to({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:g0}),i.jsx("path",{d:"M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z"})]}))}),k0="Anthropic";function Lt(n){"@babel/helpers - typeof";return Lt=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Lt(n)}var j0=["size","style"];function os(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function no(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function M0(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var L0=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=_0(n,j0);return i.jsxs("svg",no(no({fill:"currentColor",fillRule:"evenodd",height:t,style:no({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:k0}),i.jsx("path",{d:"M13.827 3.52h3.603L24 20h-3.603l-6.57-16.48zm-7.258 0h3.767L16.906 20h-3.674l-1.343-3.461H5.017l-1.344 3.46H0L6.57 3.522zm4.132 9.959L8.453 7.687 6.205 13.48H10.7z"})]}))}),I0="DeepSeek";function It(n){"@babel/helpers - typeof";return It=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},It(n)}var T0=["size","style"];function rs(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function oo(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function A0(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var F0=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=$0(n,T0);return i.jsxs("svg",oo(oo({fill:"currentColor",fillRule:"evenodd",height:t,style:oo({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:I0}),i.jsx("path",{d:"M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z"})]}))}),z0="Qwen";function Tt(n){"@babel/helpers - typeof";return Tt=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Tt(n)}var B0=["size","style"];function ss(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function ro(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function H0(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var Z0=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=W0(n,B0);return i.jsxs("svg",ro(ro({fill:"currentColor",fillRule:"evenodd",height:t,style:ro({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:z0}),i.jsx("path",{d:"M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z"})]}))}),q0="Google";function Rt(n){"@babel/helpers - typeof";return Rt=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Rt(n)}var G0=["size","style"];function is(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function so(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function e1(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var t1=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=J0(n,G0);return i.jsxs("svg",so(so({fill:"currentColor",fillRule:"evenodd",height:t,style:so({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:q0}),i.jsx("path",{d:"M23 12.245c0-.905-.075-1.565-.236-2.25h-10.54v4.083h6.186c-.124 1.014-.797 2.542-2.294 3.569l-.021.136 3.332 2.53.23.022C21.779 18.417 23 15.593 23 12.245z"}),i.jsx("path",{d:"M12.225 23c3.03 0 5.574-.978 7.433-2.665l-3.542-2.688c-.948.648-2.22 1.1-3.891 1.1a6.745 6.745 0 01-6.386-4.572l-.132.011-3.465 2.628-.045.124C4.043 20.531 7.835 23 12.225 23z"}),i.jsx("path",{d:"M5.84 14.175A6.65 6.65 0 015.463 12c0-.758.138-1.491.361-2.175l-.006-.147-3.508-2.67-.115.054A10.831 10.831 0 001 12c0 1.772.436 3.447 1.197 4.938l3.642-2.763z"}),i.jsx("path",{d:"M12.225 5.253c2.108 0 3.529.892 4.34 1.638l3.167-3.031C17.787 2.088 15.255 1 12.225 1 7.834 1 4.043 3.469 2.197 7.062l3.63 2.763a6.77 6.77 0 016.398-4.572z"})]}))}),n1="Meta";function Nt(n){"@babel/helpers - typeof";return Nt=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Nt(n)}var o1=["size","style"];function as(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function io(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function l1(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var c1=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=a1(n,o1);return i.jsxs("svg",io(io({fill:"currentColor",fillRule:"evenodd",height:t,style:io({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:n1}),i.jsx("path",{d:"M6.897 4c1.915 0 3.516.932 5.43 3.376l.282-.373c.19-.246.383-.484.58-.71l.313-.35C14.588 4.788 15.792 4 17.225 4c1.273 0 2.469.557 3.491 1.516l.218.213c1.73 1.765 2.917 4.71 3.053 8.026l.011.392.002.25c0 1.501-.28 2.759-.818 3.7l-.14.23-.108.153c-.301.42-.664.758-1.086 1.009l-.265.142-.087.04a3.493 3.493 0 01-.302.118 4.117 4.117 0 01-1.33.208c-.524 0-.996-.067-1.438-.215-.614-.204-1.163-.56-1.726-1.116l-.227-.235c-.753-.812-1.534-1.976-2.493-3.586l-1.43-2.41-.544-.895-1.766 3.13-.343.592C7.597 19.156 6.227 20 4.356 20c-1.21 0-2.205-.42-2.936-1.182l-.168-.184c-.484-.573-.837-1.311-1.043-2.189l-.067-.32a8.69 8.69 0 01-.136-1.288L0 14.468c.002-.745.06-1.49.174-2.23l.1-.573c.298-1.53.828-2.958 1.536-4.157l.209-.34c1.177-1.83 2.789-3.053 4.615-3.16L6.897 4zm-.033 2.615l-.201.01c-.83.083-1.606.673-2.252 1.577l-.138.199-.01.018c-.67 1.017-1.185 2.378-1.456 3.845l-.004.022a12.591 12.591 0 00-.207 2.254l.002.188c.004.18.017.36.04.54l.043.291c.092.503.257.908.486 1.208l.117.137c.303.323.698.492 1.17.492 1.1 0 1.796-.676 3.696-3.641l2.175-3.4.454-.701-.139-.198C9.11 7.3 8.084 6.616 6.864 6.616zm10.196-.552l-.176.007c-.635.048-1.223.359-1.82.933l-.196.198c-.439.462-.887 1.064-1.367 1.807l.266.398c.18.274.362.56.55.858l.293.475 1.396 2.335.695 1.114c.583.926 1.03 1.6 1.408 2.082l.213.262c.282.326.529.54.777.673l.102.05c.227.1.457.138.718.138.176.002.35-.023.518-.073.338-.104.61-.32.813-.637l.095-.163.077-.162c.194-.459.29-1.06.29-1.785l-.006-.449c-.08-2.871-.938-5.372-2.2-6.798l-.176-.189c-.67-.683-1.444-1.074-2.27-1.074z"})]}))}),d1="Mistral";function Dt(n){"@babel/helpers - typeof";return Dt=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Dt(n)}var u1=["size","style"];function ls(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function ao(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function g1(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var y1=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=f1(n,u1);return i.jsxs("svg",ao(ao({fill:"currentColor",fillRule:"evenodd",height:t,style:ao({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:d1}),i.jsx("path",{clipRule:"evenodd",d:"M3.428 3.4h3.429v3.428h3.429v3.429h-.002 3.431V6.828h3.427V3.4h3.43v13.714H24v3.429H13.714v-3.428h-3.428v-3.429h-3.43v3.428h3.43v3.429H0v-3.429h3.428V3.4zm10.286 13.715h3.428v-3.429h-3.427v3.429z"})]}))}),b1="MoonshotAI";function $t(n){"@babel/helpers - typeof";return $t=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$t(n)}var v1=["size","style"];function cs(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function lo(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function k1(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var j1=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=S1(n,v1);return i.jsxs("svg",lo(lo({fill:"currentColor",fillRule:"evenodd",height:t,style:lo({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:b1}),i.jsx("path",{d:"M1.052 16.916l9.539 2.552a21.007 21.007 0 00.06 2.033l5.956 1.593a11.997 11.997 0 01-5.586.865l-.18-.016-.044-.004-.084-.009-.094-.01a11.605 11.605 0 01-.157-.02l-.107-.014-.11-.016a11.962 11.962 0 01-.32-.051l-.042-.008-.075-.013-.107-.02-.07-.015-.093-.019-.075-.016-.095-.02-.097-.023-.094-.022-.068-.017-.088-.022-.09-.024-.095-.025-.082-.023-.109-.03-.062-.02-.084-.025-.093-.028-.105-.034-.058-.019-.08-.026-.09-.031-.066-.024a6.293 6.293 0 01-.044-.015l-.068-.025-.101-.037-.057-.022-.08-.03-.087-.035-.088-.035-.079-.032-.095-.04-.063-.028-.063-.027a5.655 5.655 0 01-.041-.018l-.066-.03-.103-.047-.052-.024-.096-.046-.062-.03-.084-.04-.086-.044-.093-.047-.052-.027-.103-.055-.057-.03-.058-.032a6.49 6.49 0 01-.046-.026l-.094-.053-.06-.034-.051-.03-.072-.041-.082-.05-.093-.056-.052-.032-.084-.053-.061-.039-.079-.05-.07-.047-.053-.035a7.785 7.785 0 01-.054-.036l-.044-.03-.044-.03a6.066 6.066 0 01-.04-.028l-.057-.04-.076-.054-.069-.05-.074-.054-.056-.042-.076-.057-.076-.059-.086-.067-.045-.035-.064-.052-.074-.06-.089-.073-.046-.039-.046-.039a7.516 7.516 0 01-.043-.037l-.045-.04-.061-.053-.07-.062-.068-.06-.062-.058-.067-.062-.053-.05-.088-.084a13.28 13.28 0 01-.099-.097l-.029-.028-.041-.042-.069-.07-.05-.051-.05-.053a6.457 6.457 0 01-.168-.179l-.08-.088-.062-.07-.071-.08-.042-.049-.053-.062-.058-.068-.046-.056a7.175 7.175 0 01-.027-.033l-.045-.055-.066-.082-.041-.052-.05-.064-.02-.025a11.99 11.99 0 01-1.44-2.402zm-1.02-5.794l11.353 3.037a20.468 20.468 0 00-.469 2.011l10.817 2.894a12.076 12.076 0 01-1.845 2.005L.657 15.923l-.016-.046-.035-.104a11.965 11.965 0 01-.05-.153l-.007-.023a11.896 11.896 0 01-.207-.741l-.03-.126-.018-.08-.021-.097-.018-.081-.018-.09-.017-.084-.018-.094c-.026-.141-.05-.283-.071-.426l-.017-.118-.011-.083-.013-.102a12.01 12.01 0 01-.019-.161l-.005-.047a12.12 12.12 0 01-.034-2.145zm1.593-5.15l11.948 3.196c-.368.605-.705 1.231-1.01 1.875l11.295 3.022c-.142.82-.368 1.612-.668 2.365l-11.55-3.09L.124 10.26l.015-.1.008-.049.01-.067.015-.087.018-.098c.026-.148.056-.295.088-.442l.028-.124.02-.085.024-.097c.022-.09.045-.18.07-.268l.028-.102.023-.083.03-.1.025-.082.03-.096.026-.082.031-.095a11.896 11.896 0 011.01-2.232zm4.442-4.4L17.352 4.59a20.77 20.77 0 00-1.688 1.721l7.823 2.093c.267.852.442 1.744.513 2.665L2.106 5.213l.045-.065.027-.04.04-.055.046-.065.055-.076.054-.072.064-.086.05-.065.057-.073.055-.07.06-.074.055-.069.065-.077.054-.066.066-.077.053-.06.072-.082.053-.06.067-.074.054-.058.073-.078.058-.06.063-.067.168-.17.1-.098.059-.056.076-.071a12.084 12.084 0 012.272-1.677zM12.017 0h.097l.082.001.069.001.054.002.068.002.046.001.076.003.047.002.06.003.054.002.087.005.105.007.144.011.088.007.044.004.077.008.082.008.047.005.102.012.05.006.108.014.081.01.042.006.065.01.207.032.07.012.065.011.14.026.092.018.11.022.046.01.075.016.041.01L14.7.3l.042.01.065.015.049.012.071.017.096.024.112.03.113.03.113.032.05.015.07.02.078.024.073.023.05.016.05.016.076.025.099.033.102.036.048.017.064.023.093.034.11.041.116.045.1.04.047.02.06.024.041.018.063.026.04.018.057.025.11.048.1.046.074.035.075.036.06.028.092.046.091.045.102.052.053.028.049.026.046.024.06.033.041.022.052.029.088.05.106.06.087.051.057.034.053.032.096.059.088.055.098.062.036.024.064.041.084.056.04.027.062.042.062.043.023.017c.054.037.108.075.161.114l.083.06.065.048.056.043.086.065.082.064.04.03.05.041.086.069.079.065.085.071c.712.6 1.353 1.283 1.909 2.031L7.222.994l.062-.027.065-.028.081-.034.086-.035c.113-.045.227-.09.341-.131l.096-.035.093-.033.084-.03.096-.031c.087-.03.176-.058.264-.085l.091-.027.086-.025.102-.03.085-.023.1-.026L9.04.37l.09-.023.091-.022.095-.022.09-.02.098-.021.091-.02.095-.018.092-.018.1-.018.091-.016.098-.017.092-.014.097-.015.092-.013.102-.013.091-.012.105-.012.09-.01.105-.01c.093-.01.186-.018.28-.024l.106-.008.09-.005.11-.006.093-.004.1-.004.097-.002.099-.002.197-.002z"})]}))}),E1="Volcengine";function At(n){"@babel/helpers - typeof";return At=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},At(n)}var O1=["size","style"];function ds(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function co(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function I1(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var T1=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=L1(n,O1);return i.jsxs("svg",co(co({fill:"currentColor",fillRule:"evenodd",height:t,style:co({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:E1}),i.jsx("path",{d:"M7.29 5.36L3.148 21.737a.215.215 0 00.203.261h8.29a.214.214 0 00.215-.261L7.7 5.359a.214.214 0 00-.41 0z",fillOpacity:".5"}),i.jsx("path",{clipRule:"evenodd",d:"M4.553 16.18l-1.406 5.558a.214.214 0 00.203.261h2.42-4.551a.214.214 0 01-.214-.26l2.275-8.961a.214.214 0 01.409 0l.864 3.402z"}),i.jsx("path",{d:"M14.44.15a.214.214 0 00-.41 0L8.366 21.739a.214.214 0 00.214.261H19.9a.214.214 0 00.215-.261L14.44.151z",fillOpacity:".5"}),i.jsx("path",{clipRule:"evenodd",d:"M16.694 22h3.207a.215.215 0 00.214-.262l-1.839-6.993 1.164-4.592a.214.214 0 01.411 0l2.951 11.586a.214.214 0 01-.214.261h-5.894z"}),i.jsx("path",{d:"M10.278 7.741L6.685 21.736a.214.214 0 00.214.264h7.17a.216.216 0 00.214-.166.216.216 0 000-.098L10.687 7.742a.214.214 0 00-.409 0z"})]}))}),R1="Minimax";function Ft(n){"@babel/helpers - typeof";return Ft=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ft(n)}var N1=["size","style"];function us(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function uo(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function z1(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var B1=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=F1(n,N1);return i.jsxs("svg",uo(uo({fill:"currentColor",fillRule:"evenodd",height:t,style:uo({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:R1}),i.jsx("path",{d:"M16.278 2c1.156 0 2.093.927 2.093 2.07v12.501a.74.74 0 00.744.709.74.74 0 00.743-.709V9.099a2.06 2.06 0 012.071-2.049A2.06 2.06 0 0124 9.1v6.561a.649.649 0 01-.652.645.649.649 0 01-.653-.645V9.1a.762.762 0 00-.766-.758.762.762 0 00-.766.758v7.472a2.037 2.037 0 01-2.048 2.026 2.037 2.037 0 01-2.048-2.026v-12.5a.785.785 0 00-.788-.753.785.785 0 00-.789.752l-.001 15.904A2.037 2.037 0 0113.441 22a2.037 2.037 0 01-2.048-2.026V18.04c0-.356.292-.645.652-.645.36 0 .652.289.652.645v1.934c0 .263.142.506.372.638.23.131.514.131.744 0a.734.734 0 00.372-.638V4.07c0-1.143.937-2.07 2.093-2.07zm-5.674 0c1.156 0 2.093.927 2.093 2.07v11.523a.648.648 0 01-.652.645.648.648 0 01-.652-.645V4.07a.785.785 0 00-.789-.78.785.785 0 00-.789.78v14.013a2.06 2.06 0 01-2.07 2.048 2.06 2.06 0 01-2.071-2.048V9.1a.762.762 0 00-.766-.758.762.762 0 00-.766.758v3.8a2.06 2.06 0 01-2.071 2.049A2.06 2.06 0 010 12.9v-1.378c0-.357.292-.646.652-.646.36 0 .653.29.653.646V12.9c0 .418.343.757.766.757s.766-.339.766-.757V9.099a2.06 2.06 0 012.07-2.048 2.06 2.06 0 012.071 2.048v8.984c0 .419.343.758.767.758.423 0 .766-.339.766-.758V4.07c0-1.143.937-2.07 2.093-2.07z"})]}))}),U1="Zhipu";function zt(n){"@babel/helpers - typeof";return zt=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},zt(n)}var V1=["size","style"];function ps(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function po(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function q1(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var G1=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=Z1(n,V1);return i.jsxs("svg",po(po({fill:"currentColor",fillRule:"evenodd",height:t,style:po({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:U1}),i.jsx("path",{d:"M11.991 23.503a.24.24 0 00-.244.248.24.24 0 00.244.249.24.24 0 00.245-.249.24.24 0 00-.22-.247l-.025-.001zM9.671 5.365a1.697 1.697 0 011.099 2.132l-.071.172-.016.04-.018.054c-.07.16-.104.32-.104.498-.035.71.47 1.279 1.186 1.314h.366c1.309.053 2.338 1.173 2.286 2.523-.052 1.332-1.152 2.38-2.478 2.327h-.174c-.715.018-1.274.64-1.239 1.368 0 .124.018.23.053.337.209.373.54.658.96.8.75.23 1.517-.125 1.9-.782l.018-.035c.402-.64 1.17-.96 1.92-.711.854.284 1.378 1.226 1.099 2.167a1.661 1.661 0 01-2.077 1.102 1.711 1.711 0 01-.907-.711l-.017-.035c-.2-.323-.463-.58-.851-.711l-.056-.018a1.646 1.646 0 00-1.954.746 1.66 1.66 0 01-1.065.764 1.677 1.677 0 01-1.989-1.279c-.209-.906.332-1.83 1.257-2.043a1.51 1.51 0 01.296-.035h.018c.68-.071 1.151-.622 1.116-1.333a1.307 1.307 0 00-.227-.693 2.515 2.515 0 01-.366-1.403 2.39 2.39 0 01.366-1.208c.14-.195.21-.444.227-.693.018-.71-.506-1.261-1.186-1.332l-.07-.018a1.43 1.43 0 01-.299-.07l-.05-.019a1.7 1.7 0 01-1.047-2.114 1.68 1.68 0 012.094-1.101zm-5.575 10.11c.26-.264.639-.367.994-.27.355.096.633.379.728.74.095.362-.007.748-.267 1.013-.402.41-1.053.41-1.455 0a1.062 1.062 0 010-1.482zm14.845-.294c.359-.09.738.024.992.297.254.274.344.665.237 1.025-.107.36-.396.634-.756.718-.551.128-1.1-.22-1.23-.781a1.05 1.05 0 01.757-1.26zm-.064-4.39c.314.32.49.753.49 1.206 0 .452-.176.886-.49 1.206-.315.32-.74.5-1.185.5-.444 0-.87-.18-1.184-.5a1.727 1.727 0 010-2.412 1.654 1.654 0 012.369 0zm-11.243.163c.364.484.447 1.128.218 1.691a1.665 1.665 0 01-2.188.923c-.855-.36-1.26-1.358-.907-2.228a1.68 1.68 0 011.33-1.038c.593-.08 1.183.169 1.547.652zm11.545-4.221c.368 0 .708.2.892.524.184.324.184.724 0 1.048a1.026 1.026 0 01-.892.524c-.568 0-1.03-.47-1.03-1.048 0-.579.462-1.048 1.03-1.048zm-14.358 0c.368 0 .707.2.891.524.184.324.184.724 0 1.048a1.026 1.026 0 01-.891.524c-.569 0-1.03-.47-1.03-1.048 0-.579.461-1.048 1.03-1.048zm10.031-1.475c.925 0 1.675.764 1.675 1.706s-.75 1.705-1.675 1.705-1.674-.763-1.674-1.705c0-.942.75-1.706 1.674-1.706zm-2.626-.684c.362-.082.653-.356.761-.718a1.062 1.062 0 00-.238-1.028 1.017 1.017 0 00-.996-.294c-.547.14-.881.7-.752 1.257.13.558.675.907 1.225.783zm0 16.876c.359-.087.644-.36.75-.72a1.062 1.062 0 00-.237-1.019 1.018 1.018 0 00-.985-.301 1.037 1.037 0 00-.762.717c-.108.361-.017.754.239 1.028.245.263.606.377.953.305l.043-.01zM17.19 3.5a.631.631 0 00.628-.64c0-.355-.279-.64-.628-.64a.631.631 0 00-.628.64c0 .355.28.64.628.64zm-10.38 0a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64a.631.631 0 00-.628.64c0 .355.279.64.628.64zm-5.182 7.852a.631.631 0 00-.628.64c0 .354.28.639.628.639a.63.63 0 00.627-.606l.001-.034a.62.62 0 00-.628-.64zm5.182 9.13a.631.631 0 00-.628.64c0 .355.279.64.628.64a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64zm10.38.018a.631.631 0 00-.628.64c0 .355.28.64.628.64a.631.631 0 00.628-.64c0-.355-.279-.64-.628-.64zm5.182-9.148a.631.631 0 00-.628.64c0 .354.279.639.628.639a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64zm-.384-4.992a.24.24 0 00.244-.249.24.24 0 00-.244-.249.24.24 0 00-.244.249c0 .142.122.249.244.249zM11.991.497a.24.24 0 00.245-.248A.24.24 0 0011.99 0a.24.24 0 00-.244.249c0 .133.108.236.223.247l.021.001zM2.011 6.36a.24.24 0 00.245-.249.24.24 0 00-.244-.249.24.24 0 00-.244.249.24.24 0 00.244.249zm0 11.263a.24.24 0 00-.243.248.24.24 0 00.244.249.24.24 0 00.244-.249.252.252 0 00-.244-.248zm19.995-.018a.24.24 0 00-.245.248.24.24 0 00.245.25.24.24 0 00.244-.25.252.252 0 00-.244-.248z"})]}))}),Q1="StepFun";function Bt(n){"@babel/helpers - typeof";return Bt=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Bt(n)}var Y1=["size","style"];function hs(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function ho(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function np(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var op=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=tp(n,Y1);return i.jsxs("svg",ho(ho({fill:"currentColor",fillRule:"evenodd",height:t,style:ho({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:Q1}),i.jsx("path",{d:"M12 0C5.372 0 0 5.372 0 12s5.372 12 12 12 12-5.372 12-12S18.628 0 12 0zM8.762 19.614H4.376v-4.386h4.386v4.386zm5.423 0H9.798v-4.386h4.387v4.386zm0-5.42H9.798V9.81h4.387v4.386zm0-5.418H9.798V4.39h4.387v4.386zm5.422-.004h-4.386V4.386h4.386v4.386z"})]}))}),rp="Kimi";function Ut(n){"@babel/helpers - typeof";return Ut=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ut(n)}var sp=["size","style"];function ms(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function mo(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function dp(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var up=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=cp(n,sp);return i.jsxs("svg",mo(mo({fill:"currentColor",fillRule:"evenodd",height:t,style:mo({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:rp}),i.jsx("path",{d:"M21.846 0a1.923 1.923 0 110 3.846H20.15a.226.226 0 01-.227-.226V1.923C19.923.861 20.784 0 21.846 0z"}),i.jsx("path",{d:"M11.065 11.199l7.257-7.2c.137-.136.06-.41-.116-.41H14.3a.164.164 0 00-.117.051l-7.82 7.756c-.122.12-.302.013-.302-.179V3.82c0-.127-.083-.23-.185-.23H3.186c-.103 0-.186.103-.186.23V19.77c0 .128.083.23.186.23h2.69c.103 0 .186-.102.186-.23v-3.25c0-.069.025-.135.069-.178l2.424-2.406a.158.158 0 01.205-.023l6.484 4.772a7.677 7.677 0 003.453 1.283c.108.012.2-.095.2-.23v-3.06c0-.117-.07-.212-.164-.227a5.028 5.028 0 01-2.027-.807l-5.613-4.064c-.117-.078-.132-.279-.028-.381z"})]}))}),pp="OpenRouter";function Vt(n){"@babel/helpers - typeof";return Vt=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vt(n)}var hp=["size","style"];function fs(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function fo(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function bp(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var vp=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=yp(n,hp);return i.jsxs("svg",fo(fo({fill:"currentColor",fillRule:"evenodd",height:t,style:fo({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:pp}),i.jsx("path",{d:"M18.654 3.87a5.087 5.087 0 110 10.174L23.7 19.09c.64.641.187 1.737-.72 1.737H8.48a8.479 8.479 0 010-16.958h10.175zM8.479 7.26a5.087 5.087 0 100 10.176 5.087 5.087 0 000-10.175z"})]}))}),xp="Groq";function Kt(n){"@babel/helpers - typeof";return Kt=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Kt(n)}var wp=["size","style"];function gs(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function go(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function Ep(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var Op=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=jp(n,wp);return i.jsxs("svg",go(go({fill:"currentColor",fillRule:"evenodd",height:t,style:go({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:xp}),i.jsx("path",{d:"M12.036 2c-3.853-.035-7 3-7.036 6.781-.035 3.782 3.055 6.872 6.908 6.907h2.42v-2.566h-2.292c-2.407.028-4.38-1.866-4.408-4.23-.029-2.362 1.901-4.298 4.308-4.326h.1c2.407 0 4.358 1.915 4.365 4.278v6.305c0 2.342-1.944 4.25-4.323 4.279a4.375 4.375 0 01-3.033-1.252l-1.851 1.818A7 7 0 0012.029 22h.092c3.803-.056 6.858-3.083 6.879-6.816v-6.5C18.907 4.963 15.817 2 12.036 2z"})]}))}),Pp="Cohere";function Wt(n){"@babel/helpers - typeof";return Wt=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Wt(n)}var _p=["size","style"];function ys(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function yo(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function Rp(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var Np=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=Tp(n,_p);return i.jsxs("svg",yo(yo({fill:"currentColor",fillRule:"evenodd",height:t,style:yo({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:Pp}),i.jsx("path",{clipRule:"evenodd",d:"M8.128 14.099c.592 0 1.77-.033 3.398-.703 1.897-.781 5.672-2.2 8.395-3.656 1.905-1.018 2.74-2.366 2.74-4.18A4.56 4.56 0 0018.1 1H7.549A6.55 6.55 0 001 7.55c0 3.617 2.745 6.549 7.128 6.549z"}),i.jsx("path",{clipRule:"evenodd",d:"M9.912 18.61a4.387 4.387 0 012.705-4.052l3.323-1.38c3.361-1.394 7.06 1.076 7.06 4.715a5.104 5.104 0 01-5.105 5.104l-3.597-.001a4.386 4.386 0 01-4.386-4.387z"}),i.jsx("path",{d:"M4.776 14.962A3.775 3.775 0 001 18.738v.489a3.776 3.776 0 007.551 0v-.49a3.775 3.775 0 00-3.775-3.775z"})]}))}),Dp="Grok";function Ht(n){"@babel/helpers - typeof";return Ht=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ht(n)}var $p=["size","style"];function bs(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function bo(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function Up(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var Vp=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=Bp(n,$p);return i.jsxs("svg",bo(bo({fill:"currentColor",fillRule:"evenodd",height:t,style:bo({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:Dp}),i.jsx("path",{d:"M6.469 8.776L16.512 23h-4.464L2.005 8.776H6.47zm-.004 7.9l2.233 3.164L6.467 23H2l4.465-6.324zM22 2.582V23h-3.659V7.764L22 2.582zM22 1l-9.952 14.095-2.233-3.163L17.533 1H22z"})]}))}),Kp="Baichuan";function Zt(n){"@babel/helpers - typeof";return Zt=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Zt(n)}var Wp=["size","style"];function vs(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function vo(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function Qp(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var Yp=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=Gp(n,Wp);return i.jsxs("svg",vo(vo({fill:"currentColor",fillRule:"evenodd",height:t,style:vo({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:Kp}),i.jsx("path",{d:"M7.333 2h-3.2l-2 4.333V17.8L0 22h5.2l2.028-4.2L7.333 2zm7.334 0h-5.2v20h5.2V2zM16.8 7.733H22V22h-5.2V7.733zM22 2h-5.2v4.133H22V2z"})]}))}),Xp="ByteDance";function qt(n){"@babel/helpers - typeof";return qt=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qt(n)}var Jp=["size","style"];function xs(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,o)}return t}function xo(n){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(n,o)&&(t[o]=n[o])}return t}function rh(n,e){if(n==null)return{};var t={},o=Object.keys(n),r,s;for(s=0;s=0)&&(t[r]=n[r]);return t}var sh=a.memo(function(n){var e=n.size,t=e===void 0?"1em":e,o=n.style,r=oh(n,Jp);return i.jsxs("svg",xo(xo({fill:"currentColor",fillRule:"evenodd",height:t,style:xo({flex:"none",lineHeight:1},o),viewBox:"0 0 24 24",width:t,xmlns:"http://www.w3.org/2000/svg"},r),{},{children:[i.jsx("title",{children:Xp}),i.jsx("path",{d:"M14.944 18.587l-1.704-.445V10.01l1.824-.462c1-.254 1.84-.461 1.88-.453.032 0 .056 2.235.056 4.972v4.973l-.176-.008c-.104 0-.952-.207-1.88-.446z"}),i.jsx("path",{d:"M7 16.542c0-2.736.024-4.98.064-4.98.032-.008.872.2 1.88.454l1.816.461-.016 4.05-.024 4.049-1.632.422c-.896.23-1.736.445-1.856.469L7 21.523v-4.98z"}),i.jsx("path",{d:"M19.24 12.477c0-9.03.008-9.515.144-9.475.072.024.784.207 1.576.406.792.207 1.576.405 1.744.445l.296.08-.016 8.56-.024 8.568-1.624.414c-.888.23-1.728.437-1.856.47l-.24.055v-9.523z"}),i.jsx("path",{d:"M1 12.509c0-4.678.024-8.505.064-8.505.032 0 .872.207 1.872.454l1.824.461v7.582c0 4.16-.016 7.574-.032 7.574-.024 0-.872.215-1.88.47L1 21.013v-8.505z"})]}))});const ih={openai:{key:"openai",displayName:"OpenAI",color:"#10A37F",Component:S0},anthropic:{key:"anthropic",displayName:"Claude",color:"#D97706",Component:L0},deepseek:{key:"deepseek",displayName:"DeepSeek",color:"#4D6BFE",Component:F0},qwen:{key:"qwen",displayName:"Qwen",color:"#615CED",Component:Z0},google:{key:"google",displayName:"Google",color:"#4285F4",Component:t1},meta:{key:"meta",displayName:"Meta",color:"#0081FB",Component:c1},mistral:{key:"mistral",displayName:"Mistral",color:"#FF7000",Component:y1},moonshot:{key:"moonshot",displayName:"Moonshot",color:"#7C3AED",Component:j1},doubao:{key:"doubao",displayName:"火山引擎",color:"#006EFF",Component:T1},minimax:{key:"minimax",displayName:"MiniMax",color:"#F23F5D",Component:B1},zhipu:{key:"zhipu",displayName:"Zhipu",color:"#3859FF",Component:G1},stepfun:{key:"stepfun",displayName:"StepFun",color:"#005AFF",Component:op},kimi:{key:"kimi",displayName:"Kimi",color:"#000000",Component:up},openrouter:{key:"openrouter",displayName:"OpenRouter",color:"#6366F1",Component:vp},groq:{key:"groq",displayName:"Groq",color:"#F55036",Component:Op},cohere:{key:"cohere",displayName:"Cohere",color:"#39594D",Component:Np},xai:{key:"xai",displayName:"xAI",color:"#000000",Component:Vp},baichuan:{key:"baichuan",displayName:"Baichuan",color:"#4A90E2",Component:Yp},bytedance:{key:"bytedance",displayName:"ByteDance",color:"#006EFF",Component:sh}};function ji(n){return ih[n]}function Cn(n){const e=(n||"").toLowerCase(),t=e.lastIndexOf("/"),o=t>=0?e.slice(t+1):e;return o.startsWith("claude")||e.includes("anthropic")?"anthropic":o.startsWith("gpt")||o.startsWith("o1")||o.startsWith("o3")||o.startsWith("o4")?"openai":e.includes("deepseek")?"deepseek":o.startsWith("qwen")?"qwen":o.startsWith("moonshot")?"moonshot":o.startsWith("glm")?"zhipu":o.startsWith("step-")?"stepfun":o.startsWith("doubao")?"doubao":o.startsWith("minimax")||o.startsWith("abab")?"minimax":e.includes("gemini")?"google":o.startsWith("llama")||e.includes("meta-llama")?"meta":o.startsWith("mistral")||o.startsWith("mixtral")||o.startsWith("codestral")?"mistral":o.startsWith("command")?"cohere":o.startsWith("grok")?"xai":o.startsWith("baichuan")?"baichuan":o.startsWith("kimi")?"kimi":null}const wo={deepseek:"#4D6BFE",dashscope:"#615CED",qwen:"#615CED",openai:"#10A37F",anthropic:"#D97706",openrouter:"#6366F1",google:"#4285F4",moonshot:"#7C3AED",kimi:"#7C3AED",doubao:"#006EFF",minimax:"#F23F5D",zhipu:"#3859FF",stepfun:"#005AFF"};function Ei(n,e){const t=(n||"").toLowerCase();for(const[r,s]of Object.entries(wo))if(t.includes(r))return s;const o=Cn(e||"");return o&&wo[o]?wo[o]:"var(--semi-color-text-3, #8f959e)"}function ah(n,e){const t=(n||"").toLowerCase();if(t.includes("deepseek"))return"DEEPSEEK";if(t.includes("dashscope")||t.includes("qwen"))return"QWEN";if(t.includes("anthropic"))return"ANTHROPIC";if(t.includes("openai"))return"OPENAI";if(t.includes("openrouter"))return"OPENROUTER";if(t.includes("google"))return"GOOGLE";if(t.includes("moonshot"))return"KIMI";if(t.includes("volces")||t.includes("volcengine"))return"DOUBAO";if(t.includes("minimax"))return"MINIMAX";if(t.includes("bigmodel")||t.includes("zhipu"))return"ZHIPU";if(t.includes("stepfun"))return"STEPFUN";const o=Cn(e||"");return o?o.toUpperCase():"OTHER"}function lh(n){const e=String(n||""),t=e.indexOf("/");return(t>=0?e.slice(t+1):e).trim()}function pt(n){const e=n.model||"",t=e.lastIndexOf("/");return t>=0?e.slice(t+1):e||lh(n.name)}function ch(n,e,t,o){const r=n[e],s=r?pt(r):"";if(t==null||t===e)return s;const l=n[t];return l?`${pt(l)} → ${s}`:s}function ws({apibase:n,model:e,size:t=14}){const o=Cn(e||"")||dh(n),r=o?ji(o):void 0;if(r!=null&&r.Component){const s=r.Component;return i.jsx(s,{size:t})}return i.jsx("span",{"data-slot":"provider-dot",style:{background:Ei(n,e)}})}function dh(n){const e=(n||"").toLowerCase();return e.includes("deepseek")?"deepseek":e.includes("dashscope")||e.includes("qwen")?"qwen":e.includes("anthropic")?"anthropic":e.includes("openai")?"openai":e.includes("openrouter")?"openrouter":e.includes("google")?"google":e.includes("moonshot")?"moonshot":e.includes("volces")||e.includes("volcengine")?"doubao":e.includes("minimax")?"minimax":e.includes("bigmodel")||e.includes("zhipu")?"zhipu":e.includes("stepfun")?"stepfun":null}function uh(n){const e=[],t=new Map;return n.forEach((o,r)=>{if(o.kind==="mixin"){e.push({profile:o,idx:r});return}const s=ah(o.apibase,o.model);t.has(s)||t.set(s,{provider:s,color:Ei(o.apibase,o.model),items:[]}),t.get(s).items.push({profile:o,idx:r})}),{groups:Array.from(t.values()),mixins:e}}function ph({selectedNo:n,runningNo:e,isRunning:t,onSelect:o}={}){const[r,s]=a.useState(!1),[l,c]=a.useState(""),[u,p]=a.useState(null),[d,m]=a.useState(!1),f=a.useRef(null),b=a.useRef(null),y=a.useRef(null),S=a.useRef(null),{lang:w,t:C}=ce(),k=H(T=>T.modelProfiles),_=H(T=>T.defaultModelNo),x=H(T=>T.liveModel),j=X(T=>T.sessionModelNo),v=X(T=>T.status),O=X(T=>T.selectSessionModel),E=n??j??_,D=e!==void 0?e:x==null?void 0:x.runningLlmNo,P=t??v==="running",R=k.length===0,L=k[E],z=a.useMemo(()=>L?P&&D!=null&&D!==E?ch(k,E,D):L.kind==="mixin"?C("model.aggregationShort"):pt(L):C("model.menuLabel"),[L,P,k,D,E,C]),{groups:W,mixins:A}=a.useMemo(()=>uh(k),[k]),M=a.useMemo(()=>{if(!l.trim())return W;const T=l.toLowerCase();return W.map(F=>({...F,items:F.items.filter(({profile:Q})=>pt(Q).toLowerCase().includes(T)||(Q.model||"").toLowerCase().includes(T)||F.provider.toLowerCase().includes(T))})).filter(F=>F.items.length>0)},[W,l]),Z=a.useCallback(()=>{s(T=>(T||c(""),!T))},[]),ue=a.useCallback(T=>{o?o(T):O(T),s(!1)},[o,O]);a.useEffect(()=>{r&&S.current&&S.current.focus()},[r]),a.useEffect(()=>{var Q;const T=(Q=y.current)==null?void 0:Q.closest('[data-slot="composer-toolbar"]');if(!T)return;const F=new ResizeObserver(se=>{var Ce,pe;const te=((pe=(Ce=se[0])==null?void 0:Ce.contentRect)==null?void 0:pe.width)??T.offsetWidth;m(te<320)});return F.observe(T),()=>F.disconnect()},[]),a.useEffect(()=>{if(!r)return;function T(Q){f.current&&!f.current.contains(Q.target)&&b.current&&!b.current.contains(Q.target)&&s(!1)}function F(Q){Q.key==="Escape"&&s(!1)}return document.addEventListener("mousedown",T),document.addEventListener("keydown",F),()=>{document.removeEventListener("mousedown",T),document.removeEventListener("keydown",F)}},[r]),a.useEffect(()=>{function T(F){if((F.metaKey||F.ctrlKey)&&F.key>="1"&&F.key<="9"){const Q=parseInt(F.key)-1;Qdocument.removeEventListener("keydown",T)},[k,O]);const we=a.useCallback(()=>{s(!1),H.getState().open()},[]);return i.jsxs("div",{ref:y,"data-slot":"model-selector",children:[i.jsx("button",{ref:b,"data-slot":"model-chip","data-loading":R?"":void 0,"data-open":r?"":void 0,onClick:Z,title:L?L.kind==="mixin"?C("model.aggregation"):`${L.model}${L.apibase?" @ "+L.apibase:""}`:C("model.menuLabel"),children:R?i.jsx("span",{"data-slot":"model-chip-spinner",children:i.jsx("span",{})}):i.jsxs(i.Fragment,{children:[!d&&i.jsx("span",{"data-slot":"model-chip-label",children:z}),i.jsx("span",{"data-slot":"model-chip-caret","data-open":r?"":void 0,children:i.jsx(Cs,{})})]})}),r&&!R&&i.jsxs("div",{ref:f,"data-slot":"model-menu",children:[i.jsxs("div",{"data-slot":"model-menu-search",children:[i.jsx(hh,{}),i.jsx("input",{ref:S,type:"text",placeholder:C("model.menuLabel"),value:l,onChange:T=>c(T.target.value),"data-slot":"model-menu-search-input"})]}),i.jsxs("div",{"data-slot":"model-menu-body",children:[M.map(T=>{var F,Q;return i.jsxs("div",{"data-slot":"model-menu-section",children:[i.jsxs("div",{"data-slot":"model-menu-section-header",children:[i.jsx(ws,{apibase:((F=T.items[0])==null?void 0:F.profile.apibase)||"",model:(Q=T.items[0])==null?void 0:Q.profile.model}),T.provider]}),T.items.map(({profile:se,idx:te})=>i.jsxs("button",{"data-slot":"model-menu-item","data-active":te===E?"":void 0,onClick:()=>ue(te),title:`${se.model}${se.apibase?" @ "+se.apibase:""}`,children:[te===E&&i.jsx("span",{"data-slot":"model-check",children:"✓"}),i.jsx("span",{"data-slot":"model-menu-name",children:pt(se)})]},se.id))]},T.provider)}),A.length>0&&i.jsxs("div",{"data-slot":"model-menu-section",children:[i.jsx("div",{"data-slot":"model-menu-section-header",children:C("model.aggregationShort").toUpperCase()}),A.map(({profile:T,idx:F})=>{var te;const Q=u===F,se=((te=T.name)==null?void 0:te.trim())||C("model.aggregationShort");return i.jsxs("div",{"data-slot":"model-menu-group",children:[i.jsxs("button",{"data-slot":"model-menu-item","data-active":F===E?"":void 0,onClick:()=>ue(F),title:C("model.aggregationDesc"),children:[F===E&&i.jsx("span",{"data-slot":"model-check",children:"✓"}),i.jsx("span",{"data-slot":"model-menu-name",children:se}),T.members&&T.members.length>0&&i.jsx("span",{"data-slot":"mixin-caret","data-expanded":Q?"":void 0,onClick:Ce=>{Ce.stopPropagation(),p(Q?null:F)},children:i.jsx(Cs,{})})]}),Q&&T.members&&i.jsxs("div",{"data-slot":"mixin-members",children:[T.members.map(Ce=>{const pe=k.find(vt=>vt.name===Ce);return i.jsxs("div",{"data-slot":"mixin-member",children:[i.jsx(ws,{apibase:(pe==null?void 0:pe.apibase)||"",model:pe==null?void 0:pe.model,size:12}),i.jsx("span",{"data-slot":"model-menu-name",children:pe?pt(pe):String(Ce)})]},Ce)}),T.members.length===0&&i.jsx("div",{"data-slot":"mixin-member",style:{opacity:.5},children:C("model.emptyMixin")})]})]},T.id)})]}),M.length===0&&A.length===0&&i.jsx("div",{"data-slot":"model-menu-empty",children:C("set.noModels")})]}),i.jsx("div",{"data-slot":"model-menu-footer",children:i.jsx("button",{"data-slot":"model-menu-action",onClick:we,children:w==="zh"?"编辑模型…":"Edit models…"})})]})]})}function Cs(){return i.jsx("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"currentColor","aria-hidden":"true",children:i.jsx("path",{d:"M2.5 3.5L5 6.5L7.5 3.5",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})})}function hh(){return i.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true","data-slot":"model-menu-search-icon",children:i.jsx("path",{d:"M7 12A5 5 0 107 2a5 5 0 000 10zM14 14l-3.5-3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}const mh={pdf:{char:"📄",color:"#E53E3E"},doc:{char:"📝",color:"#2B6CB0"},docx:{char:"📝",color:"#2B6CB0"},xls:{char:"📊",color:"#276749"},xlsx:{char:"📊",color:"#276749"},csv:{char:"📊",color:"#276749"},zip:{char:"📦",color:"#744210"},rar:{char:"📦",color:"#744210"},py:{char:"🐍",color:"#3182CE"},js:{char:"⚡",color:"#D69E2E"},ts:{char:"⚡",color:"#3182CE"},md:{char:"📋",color:"#4A5568"},txt:{char:"📋",color:"#4A5568"},json:{char:"{ }",color:"#6366F1"}};function fh(n){var t;const e=((t=n.split(".").pop())==null?void 0:t.toLowerCase())||"";return mh[e]||{char:"📎",color:"var(--semi-color-text-3, #8f959e)"}}function gh(n){return!n||n<0?"":n<1024?n+" B":n<1048576?(n/1024).toFixed(1)+" KB":(n/1048576).toFixed(1)+" MB"}function yh(n){try{return new URL(n).hostname}catch{return n.slice(0,30)}}function bh({files:n,onRemove:e,onRetry:t}){const o=a.useCallback(s=>l=>{l.stopPropagation(),e(s)},[e]),r=a.useCallback(s=>l=>{l.stopPropagation(),t==null||t(s)},[t]);return n.length===0?null:i.jsx("div",{"data-slot":"attachment-strip","data-has-items":"",children:n.map(s=>{if(s.type==="image"&&s.preview)return i.jsxs("div",{"data-slot":"attachment-thumb","data-status":s.status,children:[i.jsx("img",{src:s.preview,alt:s.name}),s.status==="uploading"&&i.jsx("span",{"data-slot":"attachment-spinner"}),s.status==="error"&&i.jsx("button",{"data-slot":"attachment-error-badge",onClick:r(s.id),title:s.errorMsg||"Error",children:"!"}),s.status!=="uploading"&&i.jsx("button",{"data-slot":"attachment-remove",onClick:o(s.id),"aria-label":"Remove",children:"×"})]},s.id);if(s.type==="url")return i.jsxs("div",{"data-slot":"attachment-file-chip","data-status":s.status,children:[i.jsx("span",{"data-slot":"attachment-file-icon",children:"🔗"}),i.jsx("span",{"data-slot":"attachment-file-meta",children:i.jsx("span",{"data-slot":"attachment-file-name",children:s.url?yh(s.url):s.name})}),i.jsx("button",{"data-slot":"attachment-remove",onClick:o(s.id),"aria-label":"Remove",children:"×"})]},s.id);const l=fh(s.name);return i.jsxs("div",{"data-slot":"attachment-file-chip","data-status":s.status,children:[s.status==="uploading"?i.jsx("span",{"data-slot":"attachment-spinner"}):s.status==="error"?i.jsx("button",{"data-slot":"attachment-error-badge",onClick:r(s.id),title:s.errorMsg||"Error",children:"!"}):i.jsx("span",{"data-slot":"attachment-file-icon",style:{color:l.color},children:l.char}),i.jsxs("span",{"data-slot":"attachment-file-meta",children:[i.jsx("span",{"data-slot":"attachment-file-name",children:s.name}),s.status==="error"&&s.errorMsg&&i.jsx("span",{"data-slot":"attachment-file-error",children:s.errorMsg}),s.status!=="error"&&s.size>0&&i.jsx("span",{"data-slot":"attachment-file-size",children:gh(s.size)})]}),s.status!=="uploading"&&i.jsx("button",{"data-slot":"attachment-remove",onClick:o(s.id),"aria-label":"Remove",children:"×"})]},s.id)})})}const vh="ga_custom_presets";function xh(){try{const n=localStorage.getItem(vh);return n?JSON.parse(n):[]}catch{return[]}}const Ss={hint:{zh:"提示:输入 / 以内联调用技能",en:"Tip: type / to invoke a skill inline"}};function wh({onSelect:n}){const[e,t]=a.useState(!1),[o,r]=a.useState(-1),s=a.useRef(null),l=a.useRef(null),c=H(f=>f.lang),u=xh(),p=[...Xe,...u],d=a.useCallback(()=>{t(f=>!f),r(-1)},[]),m=a.useCallback((f,b)=>{n(f,b),t(!1)},[n]);return a.useEffect(()=>{if(!e)return;function f(y){s.current&&!s.current.contains(y.target)&&l.current&&!l.current.contains(y.target)&&t(!1)}function b(y){if(y.key==="Escape"){t(!1);return}y.key==="ArrowDown"&&(y.preventDefault(),r(S=>Math.min(S+1,p.length-1))),y.key==="ArrowUp"&&(y.preventDefault(),r(S=>Math.max(S-1,0))),y.key==="Enter"&&o>=0&&o{document.removeEventListener("mousedown",f),document.removeEventListener("keydown",b)}},[e,o,p,m]),i.jsxs("div",{"data-slot":"skill-wrap",children:[i.jsx("button",{ref:l,"data-slot":"skill-trigger",onClick:d,"aria-label":"Presets",title:"Prompt presets",children:i.jsx(Ch,{})}),e&&i.jsxs("div",{ref:s,"data-slot":"skill-panel",children:[i.jsxs("div",{"data-slot":"skill-section",children:[i.jsx("div",{"data-slot":"skill-section-title",children:"Presets"}),Xe.map((f,b)=>i.jsx("button",{"data-slot":"skill-item","data-focused":o===b?"":void 0,onClick:()=>m(f.id,f.prompt),onMouseEnter:()=>r(b),children:i.jsxs("span",{"data-slot":"skill-info",children:[i.jsx("span",{"data-slot":"skill-name",children:f.title}),i.jsx("span",{"data-slot":"skill-desc",children:f.desc[c]||f.desc.en})]})},f.id))]}),u.length>0&&i.jsxs("div",{"data-slot":"skill-section",children:[i.jsx("div",{"data-slot":"skill-section-title",children:"Custom"}),u.map((f,b)=>i.jsx("button",{"data-slot":"skill-item","data-focused":o===Xe.length+b?"":void 0,onClick:()=>m(f.id,f.prompt),onMouseEnter:()=>r(Xe.length+b),children:i.jsxs("span",{"data-slot":"skill-info",children:[i.jsx("span",{"data-slot":"skill-name",children:f.title}),i.jsx("span",{"data-slot":"skill-desc",children:f.desc[c]||f.desc.en})]})},f.id))]}),i.jsx("div",{"data-slot":"skill-panel-hint",children:Ss.hint[c]||Ss.hint.en})]})]})}function Ch(){return i.jsx("svg",{width:"16",height:"16",viewBox:"0 0 256 256",fill:"currentColor","aria-hidden":"true",children:i.jsx("path",{d:"M215.79 118.17a8 8 0 0 0-5-5.66L153.18 90.9l14.66-73.33a8 8 0 0 0-13.69-7l-112 120a8 8 0 0 0 3 13.05l57.63 21.61-14.62 73.12a8 8 0 0 0 13.69 7l112-120a8 8 0 0 0 1.94-7.18Z"})})}function Sh(n,e,t=!1){return t?"disabled":n&&e?"queue":n?"stop":e?"send":"disabled"}function kh({state:n,onSend:e,onStop:t,onQueue:o}){const r=a.useCallback(()=>{switch(n){case"send":e();break;case"stop":t();break;case"queue":o==null||o();break}},[n,e,t,o]);a.useEffect(()=>{if(n!=="stop")return;function l(c){c.key==="Escape"&&(c.preventDefault(),t())}return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[n,t]);const s=n==="stop"?"Stop generating":n==="queue"?"Queue message":"Send message";return i.jsxs("button",{"data-slot":"composer-cta","data-state":n,onClick:r,disabled:n==="disabled","aria-label":s,title:s,children:[n==="stop"&&i.jsx(Eh,{}),n==="queue"&&i.jsx(Oh,{}),(n==="send"||n==="disabled")&&i.jsx(jh,{})]})}function jh(){return i.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:i.jsx("path",{d:"M8 14V2m0 0L3 7m5-5l5 5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function Eh(){return i.jsx("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",children:i.jsx("rect",{x:"3",y:"3",width:"10",height:"10",rx:"2",fill:"currentColor"})})}function Oh(){return i.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:i.jsx("path",{d:"M3 4h10M3 8h10M3 12h10",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}const ks={thinking:{zh:"思考中…",en:"Thinking…"},queued:{zh:"排队中",en:"Queued"}};function Ph(){const n=X(s=>s.status==="running"),e=X(s=>s.pendingQueue),t=X(s=>s.cancelQueued),o=H(s=>s.lang);if(!n&&e.length===0)return null;const r=s=>ks[s][o]||ks[s].en;return i.jsxs("div",{"data-slot":"composer-status-stack",children:[n&&i.jsxs("div",{"data-slot":"status-running",children:[i.jsx("span",{"data-slot":"status-dot"}),i.jsx("span",{"data-slot":"status-label",children:r("thinking")})]}),e.map((s,l)=>i.jsxs("div",{"data-slot":"status-queued",children:[i.jsxs("span",{"data-slot":"status-queue-num",children:["#",l+1]}),i.jsxs("span",{"data-slot":"status-queue-text",children:[s.text.slice(0,40),s.text.length>40?"…":""]}),i.jsx("button",{"data-slot":"status-queue-cancel",onClick:()=>t(l),"aria-label":"Cancel",children:i.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",children:i.jsx("path",{d:"M4 4l8 8M12 4l-8 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})})]},l))]})}const js=7,_h=5;function Es(n){return Math.floor(Math.random()*n)}function Mh(){const{t:n}=ce(),e=X(s=>s.activeSessionId),t=X(s=>s.messages.length>0),o=a.useRef({sessionId:null,index:Es(js),wasNew:!0});return{text:a.useMemo(()=>{const s=o.current;if(s.sessionId!==e){const c=!t,p=Es(c?js:_h);return o.current={sessionId:e,index:p,wasNew:c},n(`composer.placeholder.${c?"new":"followUp"}.${p}`)}const l=s.wasNew?"new":"followUp";return n(`composer.placeholder.${l}.${s.index}`)},[e,t,n])}}let Lh=0;function Ih({onSend:n,onStop:e,isGenerating:t,editorRef:o,hideStatusStack:r,modelControl:s}){const l=a.useRef(null),c=o??l,u=a.useRef(null),p=a.useRef(null),d=a.useRef(null),{text:m}=Mh(),[f,b]=a.useState(""),[y,S]=a.useState([]),[w,C]=a.useState(!1),[k,_]=a.useState(null),[x,j]=a.useState(null);a.useEffect(()=>{const N=u.current;if(!N)return;const B=new ResizeObserver(ne=>{var he,ye,ve;const q=((ve=(ye=(he=ne[0])==null?void 0:he.borderBoxSize)==null?void 0:ye[0])==null?void 0:ve.blockSize)??N.offsetHeight;document.documentElement.style.setProperty("--composer-measured-height",`${q}px`)});return B.observe(N),()=>B.disconnect()},[]);const v=a.useCallback(N=>{const ne=[];for(const q of Array.from(N)){const he=`att-${++Lh}`,ye=q.type.startsWith("image/")&&q.type!=="image/svg+xml",ve=q.size>52428800;if(ye&&!ve){const Se=new FileReader;Se.onload=Y=>{S(Fe=>Fe.map(ze=>{var ot;return ze.id===he?{...ze,preview:(ot=Y.target)==null?void 0:ot.result,status:"ready"}:ze}))},Se.readAsDataURL(q)}else if(!ye&&!ve){const Se=new FileReader;Se.onload=async Y=>{var Fe;try{const ze=(Fe=Y.target)==null?void 0:Fe.result,ot=await Md(q.name,ze);S(Sn=>Sn.map(He=>He.id===he?{...He,path:ot,status:"ready",errorMsg:void 0}:He))}catch(ze){const ot=ze instanceof Error?ze.message:"upload failed";S(Sn=>Sn.map(He=>He.id===he?{...He,status:"error",errorMsg:ot}:He))}},Se.onerror=()=>{S(Y=>Y.map(Fe=>Fe.id===he?{...Fe,status:"error",errorMsg:"read failed"}:Fe))},Se.readAsDataURL(q)}ne.push({id:he,name:q.name,size:q.size,type:ye?"image":"file",status:ve?"error":"uploading",errorMsg:ve?"File too large (max 50 MB)":void 0,path:q.path||q.name})}S(q=>[...q,...ne])},[]),O=a.useCallback(()=>{var Se;const N=f.trim();if(!N&&y.length===0)return;const B=y.filter(Y=>Y.type==="image"&&Y.status==="ready"),ne=y.filter(Y=>Y.type==="image"&&Y.status==="uploading"),q=y.filter(Y=>Y.type==="file"&&Y.status==="uploading"),he=y.filter(Y=>Y.status==="error");if(ne.length>0||q.length>0||he.length>0)return;const ye={},ve=y.filter(Y=>Y.type==="file");ve.length>0&&(ye.files=ve.map(Y=>({name:Y.name,path:Y.path||Y.name,size:Y.size}))),B.length>0&&(ye.images=B.map(Y=>({name:Y.name,path:Y.path||Y.name,base64:Y.preview}))),n(N||"",Object.keys(ye).length>0?ye:void 0),(Se=c.current)==null||Se.clear(),b(""),S([])},[f,y,n]),E=a.useCallback(N=>{N.key==="Enter"&&!N.shiftKey&&(N.preventDefault(),O())},[O]),D=a.useCallback(N=>{b(N)},[]),P=a.useCallback(N=>{_(N)},[]),R=a.useCallback(()=>{_(null)},[]),L=a.useCallback((N,B)=>{var ne,q;(ne=c.current)==null||ne.setSkillChip(N,B),(q=c.current)==null||q.focus(),_(null)},[]),z=a.useCallback(N=>{j(N)},[]),W=a.useCallback(()=>{j(null)},[]),A=a.useCallback((N,B)=>{var he,ye,ve,Se;const ne=((he=c.current)==null?void 0:he.getText())||"",q=ne.lastIndexOf("@");q>=0&&((ye=c.current)==null||ye.setText(ne.slice(0,q))),(ve=c.current)==null||ve.insertChip(N,B),(Se=c.current)==null||Se.focus(),j(null)},[]),M=a.useCallback(N=>{v(N)},[v]),Z=a.useCallback(N=>{S(B=>B.filter(ne=>ne.id!==N))},[]),ue=a.useCallback((N,B)=>{var ne,q;(ne=c.current)==null||ne.setSkillChip(N,B),(q=c.current)==null||q.focus()},[]),we=a.useCallback(()=>{var N;(N=p.current)==null||N.click()},[]),T=a.useCallback(()=>{var N;(N=d.current)==null||N.click()},[]),F=a.useCallback(async()=>{try{const N=await navigator.clipboard.read();for(const B of N){const ne=B.types.find(q=>q.startsWith("image/"));if(ne){const q=await B.getType(ne),he=new File([q],"clipboard-image.png",{type:ne});v([he]);return}}}catch{}},[v]),Q=a.useCallback(N=>{N.target.files&&N.target.files.length>0&&v(N.target.files),N.target.value=""},[v]),se=a.useCallback(N=>{N.preventDefault(),C(!0)},[]),te=a.useCallback(N=>{N.preventDefault(),C(!1)},[]),Ce=a.useCallback(N=>{N.preventDefault(),C(!1),N.dataTransfer.files.length>0&&v(N.dataTransfer.files)},[v]),pe=f.trim().length>0||y.length>0,vt=y.some(N=>N.status==="uploading"),nt=Sh(t,pe,vt);return i.jsxs("div",{ref:u,"data-slot":"composer-root",onDragOver:se,onDragLeave:te,onDrop:Ce,children:[w&&i.jsx("div",{"data-slot":"composer-drop-overlay",children:"Drop files here"}),i.jsxs("div",{"data-slot":"composer-surface",children:[!r&&i.jsx(Ph,{}),i.jsx(bh,{files:y,onRemove:Z}),i.jsx(a0,{visible:k!==null,query:k||"",onSelect:L,onClose:R}),i.jsx(c0,{visible:x!==null,query:x||"",onConfirm:A,onClose:W}),i.jsx("div",{"data-slot":"composer-input-row",children:i.jsx(s0,{ref:c,placeholder:m,disabled:!1,onInput:D,onKeyDown:E,onSlashTrigger:P,onSlashDismiss:R,onAtTrigger:z,onAtDismiss:W,onPasteFiles:M})}),i.jsxs("div",{"data-slot":"composer-toolbar",children:[i.jsxs("div",{"data-slot":"composer-toolbar-left",children:[i.jsx(u0,{onUploadFile:we,onUploadImage:T,onPasteImage:F}),i.jsx(wh,{onSelect:ue})]}),i.jsxs("div",{"data-slot":"composer-toolbar-right",children:[s===void 0?i.jsx(ph,{}):s,i.jsx(kh,{state:nt,onSend:O,onStop:e,onQueue:O})]})]})]}),i.jsx("input",{ref:p,type:"file",multiple:!0,style:{display:"none"},onChange:Q}),i.jsx("input",{ref:d,type:"file",multiple:!0,accept:"image/*",style:{display:"none"},onChange:Q})]})}const Th="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201099.5%20105'%20width='1099.5'%20height='105'%20fill='%23000000'%3e%3cg%20transform='translate(-5.6%2088.5)'%3e%3cpath%20d='M62.70%200L20.40%200Q16.40%200%2013-2Q9.60-4%207.60-7.40Q5.60-10.80%205.60-14.80L5.60-14.80L5.60-57.20Q5.60-61.30%207.60-64.65Q9.60-68%2013-70Q16.40-72%2020.40-72L20.40-72L62.70-72Q66.80-72%2070.15-70Q73.50-68%2075.55-64.65Q77.60-61.30%2077.60-57.20L77.60-57.20L77.60-50.40L61.90-50.40L61.90-56.40L21.10-56.40L21.10-15.60L61.90-15.60L61.90-26.40L46.30-26.40L46.30-42L77.60-42L77.60-14.80Q77.60-10.80%2075.55-7.40Q73.50-4%2070.15-2Q66.80%200%2062.70%200L62.70%200ZM161.30%200L94.80%200L94.80-72L161.30-72L161.30-56.40L110.50-56.40L110.50-43.80L151.40-43.80L151.40-28.20L110.50-28.20L110.50-15.60L161.30-15.60L161.30%200ZM192.70%200L177.20%200L177.20-72L193.20-72L233.50-24L233.50-72L249.20-72L249.20%200L233.20%200L192.70-48.20L192.70%200ZM333.10%200L266.60%200L266.60-72L333.10-72L333.10-56.40L282.30-56.40L282.30-43.80L323.20-43.80L323.20-28.20L282.30-28.20L282.30-15.60L333.10-15.60L333.10%200ZM420.90%200L404.90%200L385.00-23.60L364.50-23.60L364.50%200L349.00%200L349.00-71.90L406.10-71.90Q410.20-71.90%20413.55-69.90Q416.90-67.90%20418.95-64.50Q421.00-61.10%20421.00-57.10L421.00-57.10L421.00-38.50Q421.00-34.50%20418.95-31.10Q416.90-27.70%20413.55-25.70Q410.20-23.70%20406.10-23.70L406.10-23.70L405.30-23.70L420.90-5.30L420.90%200ZM364.50-56.40L364.50-39.30L405.30-39.30L405.30-56.40L364.50-56.40ZM450.30%200L435.00%200L435.00-72L450.30-72L450.30%200ZM536.70%200L479.70%200Q475.60%200%20472.25-2Q468.90-4%20466.90-7.35Q464.90-10.70%20464.90-14.80L464.90-14.80L464.90-57.20Q464.90-61.30%20466.90-64.65Q468.90-68%20472.25-70Q475.60-72%20479.70-72L479.70-72L536.70-72L536.70-56.40L483.70-56.40Q482.10-56.40%20481.25-55.60Q480.40-54.80%20480.40-53.10L480.40-53.10L480.40-18.90Q480.40-17.30%20481.25-16.45Q482.10-15.60%20483.70-15.60L483.70-15.60L536.70-15.60L536.70%200ZM607%200L591.50%200L591.50-57.20Q591.50-61.30%20593.50-64.65Q595.50-68%20598.90-70Q602.30-72%20606.30-72L606.30-72L648.60-72Q652.70-72%20656.05-70Q659.40-68%20661.45-64.65Q663.50-61.30%20663.50-57.20L663.50-57.20L663.50%200L647.80%200L647.80-23.20L607-23.20L607%200ZM607-56.40L607-38.80L647.80-38.80L647.80-56.40L607-56.40ZM738.00%200L695.70%200Q691.70%200%20688.30-2Q684.90-4%20682.90-7.40Q680.90-10.80%20680.90-14.80L680.90-14.80L680.90-57.20Q680.90-61.30%20682.90-64.65Q684.90-68%20688.30-70Q691.70-72%20695.70-72L695.70-72L738.00-72Q742.10-72%20745.45-70Q748.80-68%20750.85-64.65Q752.90-61.30%20752.90-57.20L752.90-57.20L752.90-50.40L737.20-50.40L737.20-56.40L696.40-56.40L696.40-15.60L737.20-15.60L737.20-26.40L721.60-26.40L721.60-42L752.90-42L752.90-14.80Q752.90-10.80%20750.85-7.40Q748.80-4%20745.45-2Q742.10%200%20738.00%200L738.00%200ZM836.60%200L770.10%200L770.10-72L836.60-72L836.60-56.40L785.80-56.40L785.80-43.80L826.70-43.80L826.70-28.20L785.80-28.20L785.80-15.60L836.60-15.60L836.60%200ZM868.00%200L852.50%200L852.50-72L868.50-72L908.80-24L908.80-72L924.50-72L924.50%200L908.50%200L868.00-48.20L868.00%200ZM981.90%200L966.30%200L966.30-56.40L938.10-56.40L938.10-72L1010.10-72L1010.10-56.40L981.90-56.40L981.90%200Z'%3e%3c/path%3e%3crect%20x='1050.1'%20y='-88.5'%20width='55'%20height='105'%3e%3c/rect%3e%3c/g%3e%3c/svg%3e",Rh="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201099.5%20105'%20width='1099.5'%20height='105'%20fill='%23FFFFFF'%3e%3cg%20transform='translate(-5.6%2088.5)'%3e%3cpath%20d='M62.70%200L20.40%200Q16.40%200%2013-2Q9.60-4%207.60-7.40Q5.60-10.80%205.60-14.80L5.60-14.80L5.60-57.20Q5.60-61.30%207.60-64.65Q9.60-68%2013-70Q16.40-72%2020.40-72L20.40-72L62.70-72Q66.80-72%2070.15-70Q73.50-68%2075.55-64.65Q77.60-61.30%2077.60-57.20L77.60-57.20L77.60-50.40L61.90-50.40L61.90-56.40L21.10-56.40L21.10-15.60L61.90-15.60L61.90-26.40L46.30-26.40L46.30-42L77.60-42L77.60-14.80Q77.60-10.80%2075.55-7.40Q73.50-4%2070.15-2Q66.80%200%2062.70%200L62.70%200ZM161.30%200L94.80%200L94.80-72L161.30-72L161.30-56.40L110.50-56.40L110.50-43.80L151.40-43.80L151.40-28.20L110.50-28.20L110.50-15.60L161.30-15.60L161.30%200ZM192.70%200L177.20%200L177.20-72L193.20-72L233.50-24L233.50-72L249.20-72L249.20%200L233.20%200L192.70-48.20L192.70%200ZM333.10%200L266.60%200L266.60-72L333.10-72L333.10-56.40L282.30-56.40L282.30-43.80L323.20-43.80L323.20-28.20L282.30-28.20L282.30-15.60L333.10-15.60L333.10%200ZM420.90%200L404.90%200L385.00-23.60L364.50-23.60L364.50%200L349.00%200L349.00-71.90L406.10-71.90Q410.20-71.90%20413.55-69.90Q416.90-67.90%20418.95-64.50Q421.00-61.10%20421.00-57.10L421.00-57.10L421.00-38.50Q421.00-34.50%20418.95-31.10Q416.90-27.70%20413.55-25.70Q410.20-23.70%20406.10-23.70L406.10-23.70L405.30-23.70L420.90-5.30L420.90%200ZM364.50-56.40L364.50-39.30L405.30-39.30L405.30-56.40L364.50-56.40ZM450.30%200L435.00%200L435.00-72L450.30-72L450.30%200ZM536.70%200L479.70%200Q475.60%200%20472.25-2Q468.90-4%20466.90-7.35Q464.90-10.70%20464.90-14.80L464.90-14.80L464.90-57.20Q464.90-61.30%20466.90-64.65Q468.90-68%20472.25-70Q475.60-72%20479.70-72L479.70-72L536.70-72L536.70-56.40L483.70-56.40Q482.10-56.40%20481.25-55.60Q480.40-54.80%20480.40-53.10L480.40-53.10L480.40-18.90Q480.40-17.30%20481.25-16.45Q482.10-15.60%20483.70-15.60L483.70-15.60L536.70-15.60L536.70%200ZM607%200L591.50%200L591.50-57.20Q591.50-61.30%20593.50-64.65Q595.50-68%20598.90-70Q602.30-72%20606.30-72L606.30-72L648.60-72Q652.70-72%20656.05-70Q659.40-68%20661.45-64.65Q663.50-61.30%20663.50-57.20L663.50-57.20L663.50%200L647.80%200L647.80-23.20L607-23.20L607%200ZM607-56.40L607-38.80L647.80-38.80L647.80-56.40L607-56.40ZM738.00%200L695.70%200Q691.70%200%20688.30-2Q684.90-4%20682.90-7.40Q680.90-10.80%20680.90-14.80L680.90-14.80L680.90-57.20Q680.90-61.30%20682.90-64.65Q684.90-68%20688.30-70Q691.70-72%20695.70-72L695.70-72L738.00-72Q742.10-72%20745.45-70Q748.80-68%20750.85-64.65Q752.90-61.30%20752.90-57.20L752.90-57.20L752.90-50.40L737.20-50.40L737.20-56.40L696.40-56.40L696.40-15.60L737.20-15.60L737.20-26.40L721.60-26.40L721.60-42L752.90-42L752.90-14.80Q752.90-10.80%20750.85-7.40Q748.80-4%20745.45-2Q742.10%200%20738.00%200L738.00%200ZM836.60%200L770.10%200L770.10-72L836.60-72L836.60-56.40L785.80-56.40L785.80-43.80L826.70-43.80L826.70-28.20L785.80-28.20L785.80-15.60L836.60-15.60L836.60%200ZM868.00%200L852.50%200L852.50-72L868.50-72L908.80-24L908.80-72L924.50-72L924.50%200L908.50%200L868.00-48.20L868.00%200ZM981.90%200L966.30%200L966.30-56.40L938.10-56.40L938.10-72L1010.10-72L1010.10-56.40L981.90-56.40L981.90%200Z'%3e%3c/path%3e%3crect%20x='1050.1'%20y='-88.5'%20width='55'%20height='105'%3e%3c/rect%3e%3c/g%3e%3c/svg%3e",Nh={plan:i.jsx(Ka,{size:"small"}),goal:i.jsx(el,{size:"small"}),autonomous:i.jsx(ll,{size:"small"}),hive:i.jsx(fl,{size:"small"}),review:i.jsx(yl,{size:"small"}),findwork:i.jsx(ti,{size:"small"})};function Dh({onPresetClick:n}){const{t:e}=ce();return i.jsxs("div",{"data-slot":"empty-state-root",children:[i.jsxs("div",{"data-slot":"empty-state-wordmark",children:[i.jsx("img",{src:Th,alt:"GenericAgent",className:"empty-state-wordmark-light"}),i.jsx("img",{src:Rh,alt:"",className:"empty-state-wordmark-dark","aria-hidden":"true"})]}),i.jsx("div",{"data-slot":"empty-state-presets",children:Xe.map(t=>i.jsxs("button",{type:"button",className:"empty-state-preset-btn",onClick:()=>n(t),children:[i.jsx("span",{className:"empty-state-preset-icon",children:Nh[t.id]}),i.jsx("span",{children:e(`preset.${t.id}.t`)||t.title})]},t.id))})]})}function $h(){const{t:n}=ce(),e=Zo(),t=X(m=>m.status),o=X(m=>m.messages),r=X(m=>m.sendMessage),s=X(m=>m.cancel),l=a.useRef(null),c=a.useCallback((m,f)=>{(m||f)&&r(m,f)},[r]),u=a.useCallback(m=>{var f,b;(f=l.current)==null||f.setSkillChip(m.id,m.prompt),(b=l.current)==null||b.focus()},[]),p=o.length===0&&t==="idle",d=p&&e!=="ready";return i.jsxs("div",{className:"chat-view-root","data-empty":p||void 0,children:[d?i.jsx("div",{className:"ga-chat-offline",children:i.jsx("span",{children:n(e==="connecting"?"bridge.connecting":"bridge.offline")})}):p?i.jsx(Dh,{onPresetClick:u}):i.jsx(Qu,{}),i.jsx(Ih,{onSend:c,onStop:s,isGenerating:t==="running",editorRef:l})]})}const Ah=a.lazy(async()=>({default:(await Gt(()=>import("./ServicesPage-DrjRw530.js"),__vite__mapDeps([11,1,2,12,13,14,5,6,15,16,7,8,17]))).ServicesPage})),Fh=a.lazy(async()=>({default:(await Gt(()=>import("./TokenPage-C6-RA6yj.js"),__vite__mapDeps([18,1,2,12,13,14,5,6,15,19,20,21,7,8,22]))).TokenPage})),zh=a.lazy(async()=>({default:(await Gt(()=>import("./CollabPage-bnm43hIR.js"),__vite__mapDeps([23,1,2,0,3,4,5,6,7,8,9,24]))).CollabPage}));function Co({children:n}){return i.jsx(a.Suspense,{fallback:i.jsx("span",{"data-slot":"deferred-page-loading","aria-busy":"true"}),children:n})}function Os(){const n=Ie(e=>e.activePage);return n==="chat"?i.jsx("div",{className:"ga-main-area ga-main-chat",children:i.jsx($h,{})}):n==="services"?i.jsx("div",{className:"ga-main-area ga-main-full",children:i.jsx(Co,{children:i.jsx(Ah,{})})}):n==="token"?i.jsx("div",{className:"ga-main-area ga-main-full",children:i.jsx(Co,{children:i.jsx(Fh,{})})}):n==="collab"?i.jsx("div",{className:"ga-main-area ga-main-chat",children:i.jsx(Co,{children:i.jsx(zh,{})})}):i.jsx("div",{className:"ga-main-area"})}function Bh(){const n=Ie(t=>t.sidebarCollapsed),e=Ie(t=>t.toggleSidebar);return a.useEffect(()=>{function t(o){(o.metaKey||o.ctrlKey)&&o.key==="b"&&(o.preventDefault(),e())}return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[e]),i.jsx("div",{className:"ga-titlebar-controls",children:i.jsx("button",{type:"button",className:"ga-titlebar-btn",onClick:e,title:n?"显示侧边栏":"隐藏侧边栏","aria-label":n?"显示侧边栏":"隐藏侧边栏",children:i.jsx(Ee,{name:n?"layout-sidebar-left-off":"layout-sidebar-left",size:"16px"})})})}function Uh(){const n=a.useRef(!1),{t:e}=ce();return a.useEffect(()=>{var o,r;if(n.current||(n.current=!0,document.documentElement.dataset.platform==="macos"))return;const t=(r=(o=window.__TAURI__)==null?void 0:o.core)==null?void 0:r.invoke;t&&(async()=>{try{if(!await t("shortcut_should_ask"))return;re.confirm({title:e("common.confirm"),content:e("shortcut.askConfirm"),onOk:()=>t("shortcut_decide",{create:!0}),onCancel:()=>t("shortcut_decide",{create:!1})})}catch{}})()},[e]),null}function Vh(){return a.useCallback(n=>{var s,l,c,u;if(!ha||n.button!==0||n.target.closest("button, a, input, [data-no-drag]"))return;const t=n.currentTarget.getBoundingClientRect();if(n.clientY-t.top>38)return;n.preventDefault();const r=window.__TAURI__;(u=(c=(l=(s=r==null?void 0:r.window)==null?void 0:s.getCurrentWindow)==null?void 0:l.call(s))==null?void 0:c.startDragging)==null||u.call(c)},[])}function Kh(){const n=Ie(t=>t.sidebarCollapsed),e=Vh();return i.jsxs("div",{className:"ga-app-layout",onMouseDown:e,children:[pa&&i.jsx(xa,{}),i.jsx(Bh,{}),i.jsx("div",{className:"ga-app-body",children:n?i.jsx("div",{className:"ga-body-collapsed",children:i.jsx(Os,{})}):i.jsxs(vn,{direction:"horizontal",children:[i.jsx(_t,{defaultSize:"260px",min:"200px",max:"340px",className:"ga-sidebar-item",children:i.jsx(cu,{})}),i.jsx(bn,{}),i.jsx(_t,{className:"ga-main-item",children:i.jsx(Os,{})})]})}),i.jsx(Uh,{})]})}const Ps=4;let Wh=0;const _s=gt((n,e)=>({items:[],notify(t){const o=`notif-${++Wh}-${Date.now()}`,r={...t,id:o,createdAt:Date.now()};n(s=>{const l=s.items.find(u=>u.message===r.message&&u.kind===r.kind);if(l)return{items:s.items.map(u=>u.id===l.id?{...r,id:l.id}:u)};const c=[...s.items,r];return{items:c.length>Ps?c.slice(-Ps):c}}),t.kind==="info"||t.kind==="success"?setTimeout(()=>e().dismiss(o),5e3):(t.kind==="error"||t.kind==="warning")&&setTimeout(()=>e().dismiss(o),8e3)},dismiss(t){n(o=>({items:o.items.filter(r=>r.id!==t)}))},clear(){n({items:[]})}}));function Ms({item:n,onDismiss:e}){const t=n.kind==="error"||n.kind==="warning";return i.jsxs("div",{className:`ga-notification ga-notification--${n.kind}`,role:"alert",children:[i.jsxs("div",{className:"ga-notification-body",children:[n.title&&i.jsx("div",{className:"ga-notification-title",children:n.title}),i.jsx("div",{className:"ga-notification-message",children:n.message}),n.action&&i.jsx("button",{className:"ga-notification-action",onClick:n.action.onClick,children:n.action.label})]}),t&&i.jsx("button",{className:"ga-notification-dismiss",onClick:e,"aria-label":"close",children:i.jsx(cn,{size:"small"})})]})}function Hh(){const n=_s(s=>s.items),e=_s(s=>s.dismiss),t=a.useRef(null);if(a.useEffect(()=>{if(!t.current){const s=document.createElement("div");s.id="ga-notification-portal",document.body.appendChild(s),t.current=s}return()=>{t.current&&(document.body.removeChild(t.current),t.current=null)}},[]),!t.current||n.length===0)return null;const o=n.filter(s=>s.kind==="error"||s.kind==="warning"),r=n.filter(s=>s.kind==="info"||s.kind==="success");return ma.createPortal(i.jsxs(i.Fragment,{children:[o.length>0&&i.jsx("div",{className:"ga-notification-stack ga-notification-stack--top",children:o.map(s=>i.jsx(Ms,{item:s,onDismiss:()=>e(s.id)},s.id))}),r.length>0&&i.jsx("div",{className:"ga-notification-stack ga-notification-stack--bottom",children:r.map(s=>i.jsx(Ms,{item:s,onDismiss:()=>e(s.id)},s.id))})]}),t.current)}function bt({children:n,tip:e,tipLabel:t}){return i.jsxs("div",{className:"ga-set-sec-heading",children:[i.jsx("h2",{className:"ga-set-sec-t",children:n}),e&&i.jsx($e,{content:e,position:"topLeft",children:i.jsx("span",{className:"ga-settings-section-help",tabIndex:0,"aria-label":[t,e].filter(Boolean).join(":"),children:i.jsx(il,{size:"small","aria-hidden":"true"})})})]})}function Zh(){const{t:n}=ce(),e=H(o=>o.appearance),t=H(o=>o.setAppearance);return i.jsxs("div",{className:"ga-set-block",children:[i.jsx(bt,{children:n("set.appearance")}),i.jsxs(Ke,{type:"button",value:e,onChange:o=>t(o.target.value),children:[i.jsx(Me,{value:"light",children:n("appearance.light")}),i.jsx(Me,{value:"dark",children:n("appearance.dark")})]})]})}function qh(){const{t:n}=ce(),e=H(o=>o.lang),t=H(o=>o.setLang);return i.jsxs("div",{className:"ga-set-block",children:[i.jsx(bt,{children:n("set.lang")}),i.jsxs(Ke,{type:"button",value:e,onChange:o=>t(o.target.value),children:[i.jsx(Me,{value:"zh",children:n("lang.zh")}),i.jsx(Me,{value:"en",children:n("lang.en")})]})]})}function Ls({model:n,size:e=16}){const t=Cn(n),o=t?ji(t):void 0;if(!(o!=null&&o.Component))return null;const r=o.Component;return i.jsx(r,{size:e})}function So(n){const e=n.model||"",t=e.lastIndexOf("/");if(e)return t>=0?e.slice(t+1):e;const o=(n.name||"").trim(),r=o.indexOf("/");return(r>=0?o.slice(r+1):o)||"(unnamed)"}function Gh({onAdd:n,onEdit:e}){const{t}=ce(),o=H(x=>x.modelProfiles),r=H(x=>x.defaultModelNo),s=H(x=>x.setDefaultModel),l=H(x=>x.setModelProfiles),[c,u]=a.useState(!0),p=o.find(x=>x.kind==="mixin"),d=o.filter(x=>x.kind!=="mixin"),m=p?o.indexOf(p):-1,f=a.useCallback(x=>{s(x)},[s]),b=a.useCallback((x,j)=>{re.confirm({title:t("common.delete"),content:`${t("common.delete")} "${j}"?`,okText:t("common.delete"),cancelText:t("common.cancel"),okType:"danger",onOk:async()=>{try{const v=await xd(x);l(v),G.success({content:t("common.delete")})}catch{G.error({content:t("err.modelDelete")})}}})},[l,t]),y=a.useCallback(x=>{e(x)},[e]),S=a.useCallback(()=>{n()},[n]),w=a.useCallback(async x=>{try{const j=await wd(x);l(j)}catch{G.error({content:t("err.mixinFailed")})}},[l,t]),C=a.useCallback(async x=>{try{const j=await Cd(x);l(j)}catch{G.error({content:t("err.mixinFailed")})}},[l,t]),k=a.useCallback(async x=>{if(!(p!=null&&p.members))return;const j=[...p.members],v=j.indexOf(x);if(!(v<=0)){[j[v-1],j[v]]=[j[v],j[v-1]];try{const O=await Ar(j);l(O)}catch{G.error({content:t("err.mixinFailed")})}}},[p,l,t]),_=a.useCallback(async x=>{if(!(p!=null&&p.members))return;const j=[...p.members],v=j.indexOf(x);if(!(v<0||v>=j.length-1)){[j[v],j[v+1]]=[j[v+1],j[v]];try{const O=await Ar(j);l(O)}catch{G.error({content:t("err.mixinFailed")})}}},[p,l,t]);return i.jsxs("div",{className:"ga-set-block",children:[i.jsx(bt,{tip:t("model.configurationTip"),tipLabel:t("model.configurationHelp"),children:t("set.model")}),p&&i.jsxs("div",{className:"ga-mixin-group",children:[i.jsxs("div",{className:`ga-mixin-head${m===r?" ga-mixin-head--active":""}`,onClick:()=>f(m),children:[i.jsx("button",{type:"button",className:"ga-mixin-toggle",onClick:x=>{x.stopPropagation(),u(j=>!j)},"aria-label":"toggle",children:i.jsx(Qh,{expanded:c})}),i.jsx($e,{content:t("model.aggregationTip"),position:"topLeft",children:i.jsx("span",{className:"ga-mixin-label",tabIndex:0,"aria-label":`${t("model.aggregation")}:${t("model.aggregationTip")}`,children:t("model.aggregation")})}),m===r&&i.jsx(Ae,{color:"green",size:"small",children:t("set.current")})]}),c&&i.jsxs("div",{className:"ga-mixin-body",children:[!p.members||p.members.length===0?i.jsx("div",{className:"ga-mixin-empty",children:t("model.emptyMixin")}):i.jsx("div",{className:"ga-mixin-members",children:p.members.map((x,j)=>{const v=d.find(E=>E.name===x),O=v?So(v):x;return i.jsxs("div",{className:"ga-mixin-member",children:[i.jsx("span",{className:"ga-mixin-member-rank",children:j+1}),i.jsx(Ls,{model:(v==null?void 0:v.model)||"",size:14}),i.jsx("span",{className:"ga-mixin-member-name",children:O}),i.jsxs("span",{className:"ga-mixin-member-actions",children:[i.jsx("button",{type:"button",className:"ga-icon-btn",disabled:j===0,onClick:()=>k(x),title:"↑",children:"↑"}),i.jsx("button",{type:"button",className:"ga-icon-btn",disabled:j===p.members.length-1,onClick:()=>_(x),title:"↓",children:"↓"}),i.jsx("button",{type:"button",className:"ga-icon-btn ga-icon-btn--danger",onClick:()=>v&&C(v.id),title:t("model.removeFromMixin"),children:"×"})]})]},x)})}),i.jsx("div",{className:"ga-mixin-hint",children:t("model.aggregationDesc")})]})]}),i.jsxs("div",{className:"ga-model-list",children:[d.length===0&&i.jsx("div",{className:"ga-model-empty",children:t("set.noModels")}),d.map(x=>{const j=o.indexOf(x),v=j===r;return i.jsxs("div",{className:`ga-model-item${v?" ga-model-item--selected":""}`,onClick:()=>f(j),children:[i.jsxs("div",{className:"ga-model-row-content",children:[i.jsx(Ls,{model:x.model||""}),i.jsx("span",{className:"ga-model-name",children:So(x)}),v&&i.jsx(Ae,{color:"green",size:"small",children:t("set.current")}),x.inMixin&&i.jsx(Ae,{size:"small",children:t("model.inMixin")})]}),i.jsxs("span",{className:"ga-model-actions",children:[p&&!x.inMixin&&i.jsx(ie,{size:"small",type:"tertiary",theme:"borderless",onClick:O=>{O.stopPropagation(),w(x.id)},children:"+"}),i.jsx(ie,{size:"small",type:"tertiary",theme:"borderless",onClick:O=>{O.stopPropagation(),y(x.id)},children:t("common.edit")}),i.jsx(ie,{size:"small",type:"danger",theme:"borderless",onClick:O=>{O.stopPropagation(),b(x.id,So(x))},children:t("common.delete")})]})]},x.id)})]}),i.jsxs(ie,{type:"tertiary",onClick:S,className:"ga-add-model-btn",children:["+ ",t("set.addModel")]})]})}function Qh({expanded:n}){return i.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"currentColor",style:{transform:n?"rotate(90deg)":"rotate(0deg)",transition:"transform 0.15s"},children:i.jsx("path",{d:"M4.5 2.5L8 6L4.5 9.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})})}class Oi extends Error{constructor(t,o){super(t);xt(this,"code");xt(this,"runningSessions");xt(this,"runningExtras");this.name="DataBackupError",this.code=typeof o.code=="string"?o.code:null,this.runningSessions=Array.isArray(o.runningSessions)?o.runningSessions.filter(r=>typeof r=="string"):[],this.runningExtras=Array.isArray(o.runningExtras)?o.runningExtras.filter(r=>typeof r=="string"):[]}}async function qo(n,e){const t=await fetch(`${ee}${n}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),o=await t.json().catch(()=>({}));if(!t.ok){const r=typeof(o==null?void 0:o.error)=="string"?o.error:`HTTP ${t.status}`;throw new Oi(r,o)}return o}async function Yh(){try{return(await fetch(`${ee}/memory/import/inspect`,{method:"HEAD"})).status!==404}catch{return!1}}function Xh(n,e=new Date){const t={year:e.getFullYear(),month:String(e.getMonth()+1).padStart(2,"0"),day:String(e.getDate()).padStart(2,"0"),hour:String(e.getHours()).padStart(2,"0"),minute:String(e.getMinutes()).padStart(2,"0"),second:String(e.getSeconds()).padStart(2,"0")},o=`${t.year}-${t.month}-${t.day}-${t.hour}${t.minute}${t.second}`;return`GenericAgent-${n==="zh"?"数据备份":"data-backup"}-${o}.zip`}function Jh(n){return qo("/memory/import/inspect",{sourcePath:n})}function em(n){return qo("/memory/import",{sourcePath:n})}function tm(n,e){return qo("/memory/export",{destinationPath:n,sourceMode:e})}const Is=gt((n,e)=>(Ve("services.snapshot",t=>{const o=t;o.services&&n({services:o.services,loading:!1,error:null})}),Ve("service.changed",t=>{const o=t;o.service&&n(r=>({services:r.services.map(s=>s.id===o.service.id?o.service:s)}))}),{services:[],loading:!0,error:null,mykeyContent:"",mykeyLoading:!1,async fetchServices(){e().services.length===0&&n({loading:!0}),n({error:null});try{const t=await Hd();n({services:t,loading:!1})}catch(t){n({loading:!1,error:t.message})}},async startService(t){try{const{ok:o,service:r}=await Zd(t);return r&&n(s=>({services:s.services.map(l=>l.id===r.id?r:l)})),o}catch{return!1}},async stopService(t){try{const{ok:o,service:r}=await qd(t);return r&&n(s=>({services:s.services.map(l=>l.id===r.id?r:l)})),o}catch{return!1}},async exitBridge(){try{return await Yd()}catch{return!1}},async restartService(t){return await e().stopService(t)?(await new Promise(r=>setTimeout(r,500)),e().startService(t)):!1},async fetchLogs(t,o=200){try{return await gi(t,o)}catch{return[]}},async fetchMykey(){n({mykeyLoading:!0});try{const t=await Gd();n({mykeyContent:t,mykeyLoading:!1})}catch{n({mykeyLoading:!1})}},async saveMykey(t){try{const o=await Qd(t);return o&&n({mykeyContent:t}),o}catch{return!1}}}));function Pi(){return typeof window.__TAURI__<"u"}async function Om(){var e,t;const n=(t=(e=window.__TAURI__)==null?void 0:e.core)==null?void 0:t.invoke;if(!n)throw new Error("Not in Tauri environment");await n("start_bridge")}const ko=Pi();function nn({label:n,tip:e,btnText:t,onClick:o,disabled:r}){return i.jsxs("div",{className:"ga-data-row",children:[i.jsx("div",{className:"ga-data-row-info",children:i.jsx($e,{content:e,children:i.jsx("span",{className:"ga-data-row-label",tabIndex:0,children:n})})}),i.jsx(ie,{className:"ga-data-action",size:"small",type:"tertiary",onClick:o,disabled:r,children:t})]})}function nm(n,e){if(!n)return"—";const t=new Date(n);return Number.isNaN(t.getTime())?"—":new Intl.DateTimeFormat(e==="zh"?"zh-CN":"en-US",{dateStyle:"medium",timeStyle:"short"}).format(t)}function om(){const{lang:n,t:e}=ce(),[t,o]=a.useState(!1),[r,s]=a.useState(!1),[l,c]=a.useState(!1),[u,p]=a.useState(null),[d,m]=a.useState(null),[f,b]=a.useState(!1),y=X(P=>{const R=new Set(P.runningSessions);return P.sessions.forEach(L=>{L.status==="running"&&R.add(L.id)}),P.status==="running"&&R.add(P.activeSessionId||"__active_session__"),R.size}),w=Is(P=>P.services).filter(P=>P.managed&&P.running),C=y>0||w.length>0;a.useEffect(()=>{if(!ko)return;let P=!0;return Yh().then(R=>{P&&b(R)}),Is.getState().fetchServices(),()=>{P=!1}},[]);const k=a.useCallback(()=>e("data.maintenanceBlocked",{sessions:y,services:w.length}),[w.length,y,e]),_=a.useCallback((P,R)=>{if(P instanceof Oi&&P.code==="maintenance_conflict"){G.error({content:e("data.maintenanceBlockedServer",{sessions:P.runningSessions.length,services:P.runningExtras.length})});return}G.error({content:e(R)})},[e]),x=a.useCallback(()=>{const P=document.createElement("input");P.type="file",P.accept=".py,text/plain",P.onchange=async()=>{var R;try{const L=(R=P.files)==null?void 0:R[0];if(!L)return;const z=await L.text();await kd(z),await H.getState().loadFromBridge(),G.success({content:e("data.importKeySuccess")})}catch(L){console.error("[DataSection] import key config failed:",L),G.error({content:e("data.importKeyError")})}},P.click()},[e]),j=a.useCallback(async()=>{try{const P=await Sd();if(ko)try{await _e("export_mykey",{content:P})&&G.success({content:e("data.exportKeySuccess")})}catch{Ts(P,"mykey.py"),G.success({content:e("data.exportKeySuccess")})}else Ts(P,"mykey.py"),G.success({content:e("data.exportKeySuccess")})}catch(P){console.error("[DataSection] export key config failed:",P),G.error({content:e("data.exportKeyError")})}},[e]),v=a.useCallback((P,R)=>{const L=R.sourceType==="legacyFolder"?e("data.importLegacySource"):R.sourceMode==="localRepository"?e("connection.local"):e("connection.included"),{memory:z,responses:W,sessions:A}=R.content;re.confirm({title:e("data.importConfirmTitle"),content:i.jsxs("div",{className:"ga-data-confirm-summary",children:[R.sourceType==="backupZip"&&i.jsxs("div",{children:[i.jsx("span",{children:e("data.importExportedAt")}),i.jsx("strong",{children:nm(R.exportedAt,n)})]}),i.jsxs("div",{children:[i.jsx("span",{children:e("data.importSource")}),i.jsx("strong",{children:L})]}),i.jsxs("div",{children:[i.jsx("span",{children:e("data.importContents")}),i.jsx("strong",{children:e("data.importContentsValue",{memory:z,sessions:A,responses:W})})]}),i.jsx("p",{children:e("data.importMergeNotice")})]}),okText:e("data.importConfirmBtn"),cancelText:e("common.cancel"),onOk:async()=>{o(!0);try{const M=await em(P);G.success({content:e("data.importDataSuccess",{memory:M.memoryCopied||0,responses:M.responsesCopied||0,sessions:M.sessionsAdded||0})}),await X.getState().loadSessions(),m(M)}catch(M){console.error("[DataSection] import data failed:",M),_(M,"data.importDataError")}finally{o(!1)}}})},[n,_,e]),O=a.useCallback(async P=>{if(c(!1),C){G.warning({content:k()});return}try{const R=P==="backup"?await _e("pick_data_backup_file",{title:e("data.importBackupPickerTitle")}):await _e("pick_directory",{title:e("data.importFolderPickerTitle")});if(!R)return;o(!0);const L=await Jh(R);o(!1),v(R,L)}catch(R){o(!1),console.error("[DataSection] inspect import source failed:",R),G.error({content:e("data.importDataInvalid")})}},[v,C,k,e]),E=a.useCallback(()=>{if(C){G.warning({content:k()});return}re.confirm({title:e("data.exportDataConfirmTitle"),content:e("data.exportDataConfirmMessage"),okText:e("data.exportDataConfirmBtn"),cancelText:e("common.cancel"),onOk:async()=>{try{const P=await _e("pick_data_export_path",{defaultName:Xh(n),title:e("data.exportDataPickerTitle")});if(!P)return;s(!0);const R=await _e("get_ga_source",{}),L=await tm(P,R?"localRepository":"included");window.setTimeout(()=>p(L.path),0)}catch(P){console.error("[DataSection] export data failed:",P),_(P,"data.exportDataError")}finally{s(!1)}}})},[n,C,k,_,e]),D=a.useCallback(async()=>{if(u)try{await _e("reveal_in_file_manager",{path:u}),p(null)}catch(P){console.error("[DataSection] reveal export failed:",P),G.error({content:e("data.exportDataRevealError")})}},[u,e]);return i.jsxs("div",{className:"ga-set-block","data-testid":"data-maintenance-section",children:[i.jsx(bt,{tip:e("data.sectionTip"),tipLabel:e("data.sectionHelp"),children:e("data.title")}),i.jsx(nn,{label:e("data.importKey"),tip:e("data.importKeyTip"),btnText:e("data.importKeyBtn"),onClick:x}),i.jsx(nn,{label:e("data.exportKey"),tip:e("data.exportKeyTip"),btnText:e("data.exportKeyBtn"),onClick:j}),ko&&f&&i.jsxs(i.Fragment,{children:[i.jsx(nn,{label:e("data.importData"),tip:e("data.importDataTip"),btnText:e(t?"data.importing":"data.importDataBtn"),onClick:()=>c(!0),disabled:t||r||C}),i.jsx(nn,{label:e("data.exportData"),tip:e("data.exportDataTip"),btnText:e(r?"data.exporting":"data.exportDataBtn"),onClick:E,disabled:t||r||C}),C&&i.jsx("p",{className:"ga-data-maintenance-note",role:"status",children:k()}),i.jsx("p",{className:"ga-data-maintenance-note",children:e("data.externalProcessWarning")})]}),i.jsx(re,{visible:l,title:e("data.importSourceTitle"),width:520,onCancel:()=>c(!1),footer:i.jsxs("div",{className:"ga-data-source-actions",children:[i.jsx(ie,{onClick:()=>c(!1),children:e("common.cancel")}),i.jsx(ie,{disabled:C,onClick:()=>O("folder"),children:e("data.importFolderBtn")}),i.jsx(ie,{disabled:C,type:"primary",onClick:()=>O("backup"),children:e("data.importBackupBtn")})]}),children:i.jsx("p",{className:"ga-data-source-description",children:e("data.importSourceDescription")})}),i.jsx(re,{visible:!!d,title:e("data.importResultTitle"),width:620,onCancel:()=>m(null),footer:i.jsx(ie,{type:"primary",onClick:()=>m(null),children:e("common.done")}),children:d&&i.jsxs("div",{className:"ga-data-confirm-summary",children:[i.jsxs("div",{children:[i.jsx("span",{children:e("data.importResultMemory")}),i.jsx("strong",{children:e("data.importResultMemoryValue",{count:d.memoryCopied||0})})]}),i.jsxs("div",{children:[i.jsx("span",{children:e("data.importResultResponses")}),i.jsx("strong",{children:e("data.importResultAddSkipValue",{added:d.responsesCopied||0,skipped:d.responsesSkipped||0})})]}),i.jsxs("div",{children:[i.jsx("span",{children:e("data.importResultSessions")}),i.jsx("strong",{children:e("data.importResultAddSkipValue",{added:d.sessionsAdded||0,skipped:d.sessionsSkipped||0})})]}),i.jsxs("div",{children:[i.jsx("span",{children:e("data.importResultBackup")}),d.backupDir?i.jsx("code",{className:"ga-data-export-path ga-data-export-path--inline",children:d.backupDir}):i.jsx("strong",{children:e("data.importResultNoBackup")})]}),i.jsx("p",{children:d.backupDir?e("data.importRestoreHint"):e("data.importNoRestoreNeeded")})]})}),i.jsxs(re,{visible:!!u,title:e("data.exportDataSuccessTitle"),width:560,onCancel:()=>p(null),footer:i.jsxs("div",{className:"ga-data-source-actions",children:[i.jsx(ie,{onClick:()=>p(null),children:e("common.done")}),i.jsx(ie,{type:"primary",onClick:D,children:e("data.exportDataReveal")})]}),children:[i.jsx("p",{children:e("data.exportDataSuccessMessage")}),u&&i.jsx("code",{className:"ga-data-export-path",children:u})]})]})}function Ts(n,e){const t=new Blob([n],{type:"text/plain"}),o=URL.createObjectURL(t),r=document.createElement("a");r.href=o,r.download=e,r.click(),URL.revokeObjectURL(o)}const Rs=Pi();function Ns(n,e){return n.includes("agentmain.py")?e("connection.errorInvalid"):n.includes("not compatible")||n.includes("compatibility probe")?e("connection.errorIncompatible"):n.includes("20s")||n.includes("ready")?e("connection.errorTimeout"):e("connection.errorGeneric")}function rm(){const{t:n}=ce(),e=H(M=>M.visible),t=X(M=>M.runningSessions),o=Zo(),r=Ie(M=>M.setPage),s=Ie(M=>M.setServicesTab),[l,c]=a.useState("included"),[u,p]=a.useState(""),[d,m]=a.useState("included"),[f,b]=a.useState(""),[y,S]=a.useState(!0),[w,C]=a.useState(!1),[k,_]=a.useState(!1),x=a.useCallback(async()=>{if(Rs){S(!0);try{const M=await _e("get_ga_source",{}),Z=M?"localRepository":"included";c(Z),p(M||""),m(Z),b(M||"")}catch(M){console.error("[ConnectionMode] load current mode failed:",M)}finally{S(!1)}}},[]);a.useEffect(()=>{e&&x()},[x,e]);const j=a.useCallback(async()=>{C(!0);try{const M=await _e("pick_directory",{title:n("connection.repositoryPickerTitle")});if(!M)return;let Z,ue=!1;try{Z=await _e("validate_ga_source",{dir:M})}catch(we){if(!fa(we,"validate_ga_source"))throw we;Z=M,ue=!0}b(Z),m("localRepository"),ue||G.success({content:n("connection.repositoryValidated")})}catch(M){console.error("[ConnectionMode] validate repository failed:",M);const Z=Qo(M);Z.includes("Tauri IPC")||G.error({content:Ns(Z,n)})}finally{C(!1)}},[n]),v=a.useCallback(M=>{if(M==="included"){m("included");return}if(f){m("localRepository");return}j()},[j,f]),O=l!==d||d==="localRepository"&&f!==u,E=d==="localRepository"&&(l!=="localRepository"||f!==u),D=d==="localRepository"?f:u,P=t.size>0,R=y||w||k||!O||P,L=a.useCallback(async()=>{if(!R){_(!0);try{d==="localRepository"?await _e("set_ga_source",{dir:f}):await _e("clear_ga_source",{}),await Promise.allSettled([X.getState().loadSessions(),H.getState().loadFromBridge()]);const M=d==="localRepository"?f:"";c(d),p(M),G.success({content:n(d==="localRepository"?"connection.localSuccess":"connection.includedSuccess")})}catch(M){console.error("[ConnectionMode] apply failed:",M),G.error({content:Ns(Qo(M),n)})}finally{_(!1)}}},[R,d,f,n]),z=a.useCallback(()=>{s("status"),r("services"),H.getState().close()},[r,s]),W=a.useMemo(()=>o==="ready"?"connection.statusReady":o==="connecting"?"connection.statusConnecting":"connection.statusUnavailable",[o]),A=o==="ready"?"on":o==="connecting"?"switching":"unavailable";return Rs?i.jsxs("div",{className:"ga-set-block ga-connection-section","data-testid":"connection-mode-section",children:[i.jsx(bt,{tip:n("connection.sectionTip"),tipLabel:n("connection.sectionHelp"),children:n("connection.title")}),i.jsx("p",{className:"ga-connection-description",children:n("connection.description")}),i.jsxs(Ke,{"aria-label":n("connection.title"),name:"desktop-connection-mode",type:"pureCard",value:d,disabled:y||k,onChange:M=>v(M.target.value),className:"ga-connection-mode-grid",children:[i.jsx(Me,{value:"included",className:"ga-connection-mode-card",extra:n("connection.includedDescription"),children:i.jsx($e,{content:n("connection.includedTip"),position:"topLeft",children:i.jsxs("span",{className:"ga-connection-card-title",tabIndex:0,"aria-label":`${n("connection.included")}:${n("connection.includedTip")}`,children:[n("connection.included"),l==="included"&&i.jsx(Ae,{size:"small",color:"green",children:n("connection.current")})]})})}),i.jsx(Me,{value:"localRepository",className:"ga-connection-mode-card",extra:n("connection.localDescription"),children:i.jsx($e,{content:n("connection.localTip"),position:"topLeft",children:i.jsxs("span",{className:"ga-connection-card-title",tabIndex:0,"aria-label":`${n("connection.local")}:${n("connection.localTip")}`,children:[n("connection.local"),l==="localRepository"&&i.jsx(Ae,{size:"small",color:"green",children:n("connection.current")})]})})})]}),(d==="localRepository"||l==="localRepository")&&i.jsxs("div",{className:"ga-connection-repository-detail",children:[i.jsxs("div",{className:"ga-connection-repository-header",children:[i.jsx("span",{children:n(E?"connection.pendingRepository":"connection.currentRepository")}),i.jsx(ie,{size:"small",type:"tertiary",loading:w,disabled:k,onClick:j,children:n(f?"connection.changeRepository":"connection.chooseRepository")})]}),D&&i.jsx("code",{className:"ga-connection-path",children:D})]}),i.jsxs("div",{className:"ga-connection-apply-row",children:[i.jsx("div",{className:"ga-connection-apply-note",role:"status",children:P?n("connection.runningTaskBlock"):O?n("connection.pendingNotice"):""}),i.jsx(ie,{type:"primary",loading:k,disabled:R,onClick:L,children:n(k?"connection.applying":"connection.apply")})]}),i.jsxs("div",{className:"ga-connection-status-row",children:[i.jsxs("div",{className:"ga-connection-status-copy",children:[i.jsx("span",{className:`ga-source-dot ga-source-dot--${A}`}),i.jsx($e,{content:n("connection.statusTip"),position:"topLeft",children:i.jsx("span",{className:"ga-connection-status-label",tabIndex:0,"aria-label":`${n("connection.status")}:${n("connection.statusTip")}`,children:n("connection.status")})}),i.jsx("strong",{children:n(W)})]}),i.jsx(ie,{size:"small",type:"tertiary",onClick:z,children:n("connection.viewStatus")})]})]}):null}const sm="https://github.com/lsdefine/GenericAgent#-社区与支持",im="https://datawhalechina.github.io/hello-generic-agent/",am=["RoundSquisheen","_Ashes_in_the_Snow_","pax1123581321"];async function lm(n,e=t=>navigator.clipboard.writeText(t)){await e(n)}function cm(){return i.jsx("svg",{"aria-hidden":"true",className:"ga-help-feedback-wechat-icon",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:i.jsx("path",{d:"M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 0 1 .213.665l-.39 1.48c-.019.07-.048.141-.048.213 0 .163.13.295.29.295a.326.326 0 0 0 .167-.054l1.903-1.114a.864.864 0 0 1 .717-.098 10.16 10.16 0 0 0 2.837.403c.276 0 .543-.027.811-.05-.857-2.578.157-4.972 1.932-6.446 1.703-1.415 3.882-1.98 5.853-1.838-.576-3.583-4.196-6.348-8.596-6.348zM5.785 5.991c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178A1.17 1.17 0 0 1 4.623 7.17c0-.651.52-1.18 1.162-1.18zm5.813 0c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178 1.17 1.17 0 0 1-1.162-1.178c0-.651.52-1.18 1.162-1.18zm5.34 2.867c-1.797-.052-3.746.512-5.28 1.786-1.72 1.428-2.687 3.72-1.78 6.22.942 2.453 3.666 4.229 6.884 4.229.826 0 1.622-.12 2.361-.336a.722.722 0 0 1 .598.082l1.584.926a.272.272 0 0 0 .14.047c.134 0 .24-.111.24-.247 0-.06-.023-.12-.038-.177l-.327-1.233a.582.582 0 0 1-.023-.156.49.49 0 0 1 .201-.398C23.024 18.48 24 16.82 24 14.98c0-3.21-2.931-5.837-6.656-6.088V8.89c-.135-.01-.27-.027-.407-.03zm-2.53 3.274c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983.976.976 0 0 1-.969-.983c0-.542.434-.982.97-.982zm4.844 0c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983.976.976 0 0 1-.969-.983c0-.542.434-.982.969-.982z"})})}function Ds({description:n,href:e,label:t}){return i.jsxs("div",{className:"ga-help-feedback-resource",children:[i.jsx("p",{children:n}),i.jsxs("a",{className:"ga-help-feedback-link",href:e,target:"_blank",rel:"noopener noreferrer",children:[i.jsx("span",{children:t}),i.jsx(qa,{size:"small","aria-hidden":"true"})]})]})}function dm(){const{t:n}=ce(),e=a.useCallback(async t=>{try{await lm(t),G.success({content:n("helpFeedback.copySuccess")})}catch{G.error({content:n("helpFeedback.copyError")})}},[n]);return i.jsxs("section",{className:"ga-set-block ga-help-feedback-section","data-testid":"help-feedback-section",children:[i.jsx(bt,{children:n("helpFeedback.title")}),i.jsxs(dt,{className:"ga-help-feedback-collapse",defaultActiveKey:[],children:[i.jsx(dt.Panel,{itemKey:"community",header:n("helpFeedback.communityTitle"),children:i.jsx(Ds,{description:n("helpFeedback.communityDescription"),href:sm,label:n("helpFeedback.communityAction")})}),i.jsx(dt.Panel,{itemKey:"tutorial",header:n("helpFeedback.tutorialTitle"),children:i.jsx(Ds,{description:n("helpFeedback.tutorialDescription"),href:im,label:n("helpFeedback.tutorialAction")})}),i.jsxs(dt.Panel,{itemKey:"maintainers",header:n("helpFeedback.maintainersTitle"),children:[i.jsx("p",{className:"ga-help-feedback-description",children:n("helpFeedback.maintainersDescription")}),i.jsx("div",{className:"ga-help-feedback-list",children:am.map(t=>i.jsxs("div",{className:"ga-help-feedback-row",children:[i.jsxs("div",{className:"ga-help-feedback-contact",children:[i.jsx(cm,{}),i.jsx("code",{className:"ga-help-feedback-id",children:t})]}),i.jsx(ie,{size:"small",type:"tertiary",onClick:()=>e(t),children:n("helpFeedback.copy")})]},t))})]})]})]})}const um=[{key:"deepseek",label:"DeepSeek",descKey:"pq.deepseekDesc",protocol:"oai",apibase:"https://api.deepseek.com/v1",defaultModel:"deepseek-v4-pro",defaultName:"DeepSeek",keyUrl:"https://platform.deepseek.com/api_keys",color:"#4D6BFE",iconPath:"M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z"},{key:"qwen",label:"通义千问",descKey:"pq.qwenDesc",protocol:"oai",apibase:"https://dashscope.aliyuncs.com/compatible-mode/v1",defaultModel:"qwen3.7-max",defaultName:"通义千问",keyUrl:"https://bailian.console.aliyun.com/?apiKey=1",color:"#615CED",iconPath:"M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z"},{key:"doubao",label:"火山方舟",descKey:"pq.doubaoDesc",protocol:"oai",apibase:"https://ark.cn-beijing.volces.com/api/v3",defaultModel:"doubao-seed-2.1-pro",defaultName:"火山方舟",keyUrl:"https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey",color:"#006EFF",iconPath:["M10.278 7.741L6.685 21.736a.214.214 0 00.214.264h7.17a.216.216 0 00.214-.166.216.216 0 000-.098L10.687 7.742a.214.214 0 00-.409 0z","M4.553 16.18l-1.406 5.558a.214.214 0 00.203.261h2.42-4.551a.214.214 0 01-.214-.26l2.275-8.961a.214.214 0 01.409 0l.864 3.402z","M16.694 22h3.207a.215.215 0 00.214-.262l-1.839-6.993 1.164-4.592a.214.214 0 01.411 0l2.951 11.586a.214.214 0 01-.214.261h-5.894z"]},{key:"minimax",label:"MiniMax",descKey:"pq.minimaxDesc",protocol:"oai",apibase:"https://api.minimax.chat/v1",defaultModel:"MiniMax-M3",defaultName:"MiniMax",keyUrl:"https://platform.minimaxi.com/user-center/basic-information/interface-key",color:"#F23F5D",iconPath:"M16.278 2c1.156 0 2.093.927 2.093 2.07v12.501a.74.74 0 00.744.709.74.74 0 00.743-.709V9.099a2.06 2.06 0 012.071-2.049A2.06 2.06 0 0124 9.1v6.561a.649.649 0 01-.652.645.649.649 0 01-.653-.645V9.1a.762.762 0 00-.766-.758.762.762 0 00-.766.758v7.472a2.037 2.037 0 01-2.048 2.026 2.037 2.037 0 01-2.048-2.026v-12.5a.785.785 0 00-.788-.753.785.785 0 00-.789.752l-.001 15.904A2.037 2.037 0 0113.441 22a2.037 2.037 0 01-2.048-2.026V18.04c0-.356.292-.645.652-.645.36 0 .652.289.652.645v1.934c0 .263.142.506.372.638.23.131.514.131.744 0a.734.734 0 00.372-.638V4.07c0-1.143.937-2.07 2.093-2.07zm-5.674 0c1.156 0 2.093.927 2.093 2.07v11.523a.648.648 0 01-.652.645.648.648 0 01-.652-.645V4.07a.785.785 0 00-.789-.78.785.785 0 00-.789.78v14.013a2.06 2.06 0 01-2.07 2.048 2.06 2.06 0 01-2.071-2.048V9.1a.762.762 0 00-.766-.758.762.762 0 00-.766.758v3.8a2.06 2.06 0 01-2.071 2.049A2.06 2.06 0 010 12.9v-1.378c0-.357.292-.646.652-.646.36 0 .653.29.653.646V12.9c0 .418.343.757.766.757s.766-.339.766-.757V9.099a2.06 2.06 0 012.07-2.048 2.06 2.06 0 012.071 2.048v8.984c0 .419.343.758.767.758.423 0 .766-.339.766-.758V4.07c0-1.143.937-2.07 2.093-2.07z"},{key:"zhipu",label:"智谱 GLM",descKey:"pq.zhipuDesc",protocol:"oai",apibase:"https://open.bigmodel.cn/api/paas/v4",defaultModel:"glm-5.2",defaultName:"智谱 GLM",keyUrl:"https://open.bigmodel.cn/usercenter/apikeys",color:"#3859FF",iconPath:"M11.991 23.503a.24.24 0 00-.244.248.24.24 0 00.244.249.24.24 0 00.245-.249.24.24 0 00-.22-.247l-.025-.001zM9.671 5.365a1.697 1.697 0 011.099 2.132l-.071.172-.016.04-.018.054c-.07.16-.104.32-.104.498-.035.71.47 1.279 1.186 1.314h.366c1.309.053 2.338 1.173 2.286 2.523-.052 1.332-1.152 2.38-2.478 2.327h-.174c-.715.018-1.274.64-1.239 1.368 0 .124.018.23.053.337.209.373.54.658.96.8.75.23 1.517-.125 1.9-.782l.018-.035c.402-.64 1.17-.96 1.92-.711.854.284 1.378 1.226 1.099 2.167a1.661 1.661 0 01-2.077 1.102 1.711 1.711 0 01-.907-.711l-.017-.035c-.2-.323-.463-.58-.851-.711l-.056-.018a1.646 1.646 0 00-1.954.746 1.66 1.66 0 01-1.065.764 1.677 1.677 0 01-1.989-1.279c-.209-.906.332-1.83 1.257-2.043a1.51 1.51 0 01.296-.035h.018c.68-.071 1.151-.622 1.116-1.333a1.307 1.307 0 00-.227-.693 2.515 2.515 0 01-.366-1.403 2.39 2.39 0 01.366-1.208c.14-.195.21-.444.227-.693.018-.71-.506-1.261-1.186-1.332l-.07-.018a1.43 1.43 0 01-.299-.07l-.05-.019a1.7 1.7 0 01-1.047-2.114 1.68 1.68 0 012.094-1.101zm-5.575 10.11c.26-.264.639-.367.994-.27.355.096.633.379.728.74.095.362-.007.748-.267 1.013-.402.41-1.053.41-1.455 0a1.062 1.062 0 010-1.482zm14.845-.294c.359-.09.738.024.992.297.254.274.344.665.237 1.025-.107.36-.396.634-.756.718-.551.128-1.1-.22-1.23-.781a1.05 1.05 0 01.757-1.26zm-.064-4.39c.314.32.49.753.49 1.206 0 .452-.176.886-.49 1.206-.315.32-.74.5-1.185.5-.444 0-.87-.18-1.184-.5a1.727 1.727 0 010-2.412 1.654 1.654 0 012.369 0zm-11.243.163c.364.484.447 1.128.218 1.691a1.665 1.665 0 01-2.188.923c-.855-.36-1.26-1.358-.907-2.228a1.68 1.68 0 011.33-1.038c.593-.08 1.183.169 1.547.652zm11.545-4.221c.368 0 .708.2.892.524.184.324.184.724 0 1.048a1.026 1.026 0 01-.892.524c-.568 0-1.03-.47-1.03-1.048 0-.579.462-1.048 1.03-1.048zm-14.358 0c.368 0 .707.2.891.524.184.324.184.724 0 1.048a1.026 1.026 0 01-.891.524c-.569 0-1.03-.47-1.03-1.048 0-.579.461-1.048 1.03-1.048zm10.031-1.475c.925 0 1.675.764 1.675 1.706s-.75 1.705-1.675 1.705-1.674-.763-1.674-1.705c0-.942.75-1.706 1.674-1.706zm-2.626-.684c.362-.082.653-.356.761-.718a1.062 1.062 0 00-.238-1.028 1.017 1.017 0 00-.996-.294c-.547.14-.881.7-.752 1.257.13.558.675.907 1.225.783zm0 16.876c.359-.087.644-.36.75-.72a1.062 1.062 0 00-.237-1.019 1.018 1.018 0 00-.985-.301 1.037 1.037 0 00-.762.717c-.108.361-.017.754.239 1.028.245.263.606.377.953.305l.043-.01zM17.19 3.5a.631.631 0 00.628-.64c0-.355-.279-.64-.628-.64a.631.631 0 00-.628.64c0 .355.28.64.628.64zm-10.38 0a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64a.631.631 0 00-.628.64c0 .355.279.64.628.64zm-5.182 7.852a.631.631 0 00-.628.64c0 .354.28.639.628.639a.63.63 0 00.627-.606l.001-.034a.62.62 0 00-.628-.64zm5.182 9.13a.631.631 0 00-.628.64c0 .355.279.64.628.64a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64zm10.38.018a.631.631 0 00-.628.64c0 .355.28.64.628.64a.631.631 0 00.628-.64c0-.355-.279-.64-.628-.64zm5.182-9.148a.631.631 0 00-.628.64c0 .354.279.639.628.639a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64zm-.384-4.992a.24.24 0 00.244-.249.24.24 0 00-.244-.249.24.24 0 00-.244.249c0 .142.122.249.244.249zM11.991.497a.24.24 0 00.245-.248A.24.24 0 0011.99 0a.24.24 0 00-.244.249c0 .133.108.236.223.247l.021.001zM2.011 6.36a.24.24 0 00.245-.249.24.24 0 00-.244-.249.24.24 0 00-.244.249.24.24 0 00.244.249zm0 11.263a.24.24 0 00-.243.248.24.24 0 00.244.249.24.24 0 00.244-.249.252.252 0 00-.244-.248zm19.995-.018a.24.24 0 00-.245.248.24.24 0 00.245.25.24.24 0 00.244-.25.252.252 0 00-.244-.248z"},{key:"kimi",label:"Kimi",descKey:"pq.kimiDesc",protocol:"oai",apibase:"https://api.moonshot.cn/v1",defaultModel:"kimi-k2.7-code",defaultName:"Kimi",keyUrl:"https://platform.moonshot.cn/console/api-keys",color:"#000000",iconPath:["M21.846 0a1.923 1.923 0 110 3.846H20.15a.226.226 0 01-.227-.226V1.923C19.923.861 20.784 0 21.846 0z","M11.065 11.199l7.257-7.2c.137-.136.06-.41-.116-.41H14.3a.164.164 0 00-.117.051l-7.82 7.756c-.122.12-.302.013-.302-.179V3.82c0-.127-.083-.23-.185-.23H3.186c-.103 0-.186.103-.186.23V19.77c0 .128.083.23.186.23h2.69c.103 0 .186-.102.186-.23v-3.25c0-.069.025-.135.069-.178l2.424-2.406a.158.158 0 01.205-.023l6.484 4.772a7.677 7.677 0 003.453 1.283c.108.012.2-.095.2-.23v-3.06c0-.117-.07-.212-.164-.227a5.028 5.028 0 01-2.027-.807l-5.613-4.064c-.117-.078-.132-.279-.028-.381z"]},{key:"stepfun",label:"阶跃星辰",descKey:"pq.stepfunDesc",protocol:"oai",apibase:"https://api.stepfun.com/v1",defaultModel:"step-3.7-flash",defaultName:"阶跃星辰",keyUrl:"https://platform.stepfun.com/interface-key",color:"#005AFF",iconPath:"M22.012 0h1.032v.927H24v.968h-.956V3.78h-1.032V1.896h-1.878v-.97h1.878V0zM2.6 12.371V1.87h.969v10.502h-.97zm10.423.66h10.95v.918h-6.208v9.579h-4.742V13.03zM5.629 3.333v12.356H0v4.51h10.386V8L20.859 8l-.003-4.668-15.227.001z"}];function pm({preset:n,onClick:e}){const{t}=ce();return i.jsxs("button",{type:"button",className:"ga-provider-card",onClick:e,style:{"--provider-color":n.color},children:[i.jsx("svg",{className:"ga-provider-card-icon",width:"20",height:"20",viewBox:"0 0 24 24",fill:n.color,fillRule:"evenodd",xmlns:"http://www.w3.org/2000/svg",children:Array.isArray(n.iconPath)?n.iconPath.map((o,r)=>i.jsx("path",{d:o},r)):i.jsx("path",{d:n.iconPath})}),i.jsxs("span",{className:"ga-provider-card-body",children:[i.jsx("span",{className:"ga-provider-card-label",children:n.label}),i.jsx("span",{className:"ga-provider-card-desc",children:t(n.descKey)})]}),i.jsx("span",{className:"ga-provider-card-caret",children:"›"})]})}const on={model:"",apikey:"",apibase:"",name:"",protocol:"oai",stream:!0,max_retries:5,connect_timeout:15,read_timeout:300};function hm({editingId:n,onDone:e}){const t=H(v=>v.setModelProfiles),{t:o}=ce(),[r,s]=a.useState("choose"),[l,c]=a.useState(null),[u,p]=a.useState(null),[d,m]=a.useState(on),[f,b]=a.useState(!1),[y,S]=a.useState(!1),w=n!=null;a.useEffect(()=>{w?(s("form"),c("custom"),p(null),S(!0),yd(n).then(v=>{v&&m({model:v.model||"",apikey:v.apikey||"",apibase:v.apibase||"",name:v.name||"",protocol:v.protocol||"oai",stream:v.stream!==!1,max_retries:v.max_retries??5,connect_timeout:v.connect_timeout??15,read_timeout:v.read_timeout??300}),S(!1)})):(m(on),s("choose"),c(null),p(null),b(!1),S(!1))},[n,w]);const C=a.useCallback(v=>{p(v),c("provider"),m({...on,model:v.defaultModel,apibase:v.apibase,name:v.defaultName,protocol:v.protocol}),s("form")},[]),k=a.useCallback(()=>{c("custom"),p(null),m(on),s("form")},[]),_=a.useCallback(()=>{s("choose"),c(null),p(null)},[]),x=async()=>{if(!d.model.trim()||!d.apibase.trim()){G.warning({content:o("model.model")+" / "+o("model.apibase")+" required"});return}if(!d.apikey.trim()){G.warning({content:o("model.apikey")+" required"});return}try{const v={model:d.model.trim(),apibase:d.apibase.trim(),name:d.name.trim()||void 0,protocol:d.protocol,stream:d.stream,max_retries:d.max_retries,connect_timeout:d.connect_timeout,read_timeout:d.read_timeout};d.apikey.trim()&&(v.apikey=d.apikey.trim());let O;w?O=await vd(n,v):O=await bd(v),t(O),G.success({content:o(w?"model.save":"set.addModel")}),e()}catch{G.error({content:"Error"})}},j=l==="provider"&&u!=null;return y?i.jsx("div",{style:{padding:24,textAlign:"center",color:"var(--semi-color-text-2)"},children:"Loading…"}):r==="choose"?i.jsxs("div",{children:[i.jsxs("button",{type:"button",className:"ga-form-back",onClick:e,children:["← ",o("common.cancel")]}),i.jsxs("div",{className:"ga-route-picker",children:[i.jsx("button",{type:"button",className:"ga-route-btn ga-route-btn--active",onClick:()=>{},children:o("model.routeProvider")}),i.jsx("button",{type:"button",className:"ga-route-btn",onClick:k,children:o("model.routeCustom")})]}),i.jsx("div",{className:"ga-provider-list",children:um.map(v=>i.jsx(pm,{preset:v,onClick:()=>C(v)},v.key))})]}):i.jsxs("div",{className:"ga-form",children:[!w&&i.jsxs("button",{type:"button",className:"ga-form-back",onClick:_,children:["← ",o("model.selectProvider")]}),w&&i.jsxs("button",{type:"button",className:"ga-form-back",onClick:e,children:["← ",o("common.cancel")]}),i.jsxs("div",{className:"ga-form-field",children:[i.jsx("label",{className:"ga-form-label",children:o("model.name")}),i.jsx(ut,{value:d.name,onChange:v=>m(O=>({...O,name:v})),placeholder:o("model.namePh"),maxLength:50})]}),i.jsxs("div",{className:"ga-form-field",children:[i.jsxs("label",{className:"ga-form-label",children:[o("model.model")," ",i.jsx("span",{className:"ga-form-req",children:"*"})]}),i.jsx(ut,{value:d.model,onChange:v=>m(O=>({...O,model:v})),placeholder:o("model.modelPh"),maxLength:50})]}),i.jsxs("div",{className:"ga-form-field",children:[i.jsxs("label",{className:"ga-form-label",children:[o("model.protocol")," ",i.jsx("span",{className:"ga-form-req",children:"*"})]}),i.jsxs(Ke,{value:d.protocol,onChange:v=>m(O=>({...O,protocol:v.target.value})),disabled:j,children:[i.jsx(Me,{value:"oai",children:o("model.protocolOai")}),i.jsx(Me,{value:"claude",children:o("model.protocolClaude")})]}),j&&i.jsx("span",{className:"ga-form-locked-hint",children:o("model.providerLocked")})]}),i.jsxs("div",{className:"ga-form-field",children:[i.jsxs("label",{className:"ga-form-label",children:[o("model.apibase")," ",i.jsx("span",{className:"ga-form-req",children:"*"})]}),i.jsx(ut,{value:d.apibase,onChange:v=>m(O=>({...O,apibase:v})),placeholder:o("model.apibasePh"),maxLength:200,disabled:j}),j&&i.jsx("span",{className:"ga-form-locked-hint",children:o("model.providerLocked")})]}),i.jsxs("div",{className:"ga-form-field",children:[i.jsxs("label",{className:"ga-form-label",children:[o("model.apikey")," ",!w&&i.jsx("span",{className:"ga-form-req",children:"*"}),j&&u&&i.jsx("a",{className:"ga-form-key-link",href:u.keyUrl,target:"_blank",rel:"noopener noreferrer",children:o("model.getKey")})]}),i.jsx(ut,{mode:"password",value:d.apikey,onChange:v=>m(O=>({...O,apikey:v})),placeholder:o("model.apikeyPh"),maxLength:200})]}),i.jsxs("div",{className:"ga-form-field",children:[i.jsx("label",{className:"ga-form-label",children:o("model.stream")}),i.jsxs(Ke,{value:d.stream,onChange:v=>m(O=>({...O,stream:v.target.value})),children:[i.jsx(Me,{value:!0,children:o("model.streamOn")}),i.jsx(Me,{value:!1,children:o("model.streamOff")})]})]}),i.jsxs("button",{type:"button",className:"ga-form-advanced-toggle","data-expanded":f||void 0,onClick:()=>b(v=>!v),children:[i.jsx("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"currentColor",children:i.jsx("path",{d:"M3 1.5L7 5L3 8.5",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})}),o("model.advanced")]}),f&&i.jsx("div",{className:"ga-form-advanced-body",children:i.jsxs("div",{className:"ga-form-row",children:[i.jsxs("div",{className:"ga-form-field",children:[i.jsx("label",{className:"ga-form-label",children:o("model.retries")}),i.jsx(Hn,{value:d.max_retries,onChange:v=>m(O=>({...O,max_retries:v})),min:1,max:20,style:{width:"100%"}})]}),i.jsxs("div",{className:"ga-form-field",children:[i.jsx("label",{className:"ga-form-label",children:o("model.connTimeout")}),i.jsx(Hn,{value:d.connect_timeout,onChange:v=>m(O=>({...O,connect_timeout:v})),min:1,max:300,suffix:"s",style:{width:"100%"}})]}),i.jsxs("div",{className:"ga-form-field",children:[i.jsx("label",{className:"ga-form-label",children:o("model.readTimeout")}),i.jsx(Hn,{value:d.read_timeout,onChange:v=>m(O=>({...O,read_timeout:v})),min:5,max:3600,suffix:"s",style:{width:"100%"}})]})]})}),i.jsx("div",{style:{marginTop:8,display:"flex",justifyContent:"flex-end"},children:i.jsx(ie,{type:"primary",onClick:x,children:o("model.save")})})]})}function mm(){const{visible:n,open:e,close:t,loadFromBridge:o}=H(),{t:r}=ce(),[s,l]=a.useState("main"),[c,u]=a.useState(null);a.useEffect(()=>{const b=()=>{o(),e()},y=()=>t();return window.addEventListener("ga:open-settings",b),window.addEventListener("ga:close-settings",y),()=>{window.removeEventListener("ga:open-settings",b),window.removeEventListener("ga:close-settings",y)}},[e,t,o]),a.useEffect(()=>{n||(l("main"),u(null))},[n]);const p=a.useCallback(()=>{u(null),l("addModel")},[]),d=a.useCallback(b=>{u(b),l("addModel")},[]),m=a.useCallback(()=>{l("main"),u(null)},[]),f=s==="main"?r("modal.settings"):c!=null?r("modal.editModel"):r("modal.addModel");return i.jsx(re,{visible:n,onCancel:t,title:f,footer:null,width:870,centered:!0,closeOnEsc:!0,className:"ga-settings-dialog",children:s==="main"?i.jsxs(i.Fragment,{children:[i.jsx(Zh,{}),i.jsx(qh,{}),i.jsx(Gh,{onAdd:p,onEdit:d}),i.jsx(om,{}),i.jsx(rm,{}),i.jsx(dm,{})]}):i.jsx(hm,{editingId:c,onDone:m})})}const fm={zh:ba,en:ya};function gm(){const n=H(t=>t.lang),e=H(t=>t.loadFromBridge);return a.useEffect(()=>{e()},[e]),i.jsxs(ga,{locale:fm[n],children:[i.jsx(Kh,{}),i.jsx(mm,{}),i.jsx(Hh,{})]})}document.documentElement.dataset.appearance==="dark"&&document.body.setAttribute("theme-mode","dark");document.addEventListener("click",n=>{var t;const e=(t=window.__TAURI__)==null?void 0:t.opener;za(n,typeof(e==null?void 0:e.openUrl)=="function"?o=>e.openUrl(o):void 0)});setTimeout(()=>{document.body.classList.remove("no-transition")},0);class ym extends g.Component{constructor(){super(...arguments);xt(this,"state",{error:null})}static getDerivedStateFromError(t){return{error:t}}componentDidCatch(t,o){console.error("[RootErrorBoundary] React crashed:",t,o.componentStack)}render(){if(this.state.error){const t=(navigator.language||"").toLowerCase().startsWith("zh"),o=this.state.error;return i.jsxs("main",{className:"ga-root-error",role:"alert",children:[i.jsx(ai,{className:"ga-root-error-result",image:i.jsx(ld,{}),darkModeImage:i.jsx(nd,{}),title:t?"界面遇到问题":"Something went wrong",description:t?"GenericAgent 的界面未能继续运行。你的会话和记忆不会受到影响。":"The GenericAgent interface could not continue. Your sessions and memory are safe.",children:i.jsx(ie,{type:"primary",theme:"solid",icon:i.jsx(pl,{}),onClick:()=>window.location.reload(),children:t?"重新加载":"Reload"})}),i.jsx(dt,{className:"ga-root-error-details",accordion:!0,children:i.jsxs(dt.Panel,{itemKey:"technical-details",header:t?"技术详情":"Technical details",children:[i.jsx(Do.Paragraph,{type:"tertiary",children:t?"复制以下信息可帮助排查问题。":"Copy the information below to help troubleshoot the issue."}),i.jsx("pre",{tabIndex:0,children:[o.message,o.stack].filter(Boolean).join(` + +`)})]})})]})}return this.props.children}}async function bm(){const n=document.getElementById("app");va.createRoot(n).render(i.jsx(ym,{children:i.jsx(gm,{})}))}bm();export{Hn as A,ee as B,ka as C,Re as D,ai as E,ut as F,ae as G,yi as H,Ha as I,uu as J,H as K,Ih as L,re as M,ph as N,Ee as O,G as P,Fa as Q,et as R,Sm as S,Ae as T,km as U,Aa as V,$o as W,Io as _,jm as a,ce as b,oi as c,Is as d,Zo as e,Pi as f,pl as g,Ie as h,Om as i,Lo as j,Yl as k,gt as l,Ve as m,X as n,Nl as o,zl as p,Al as q,$l as r,Qt as s,xl as t,_s as u,Fl as v,Vl as w,Il as x,Kl as y,pn as z}; diff --git a/frontends/desktop/dist/assets/main-uLcKKTNv.css b/frontends/desktop/dist/assets/main-uLcKKTNv.css new file mode 100644 index 000000000..a260aacd0 --- /dev/null +++ b/frontends/desktop/dist/assets/main-uLcKKTNv.css @@ -0,0 +1 @@ +*{box-sizing:border-box;margin:0;padding:0}.no-transition,.no-transition *,.no-transition *:before,.no-transition *:after{transition:none!important;animation:none!important}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--semi-color-fill-2);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--semi-color-fill-1)}@font-face{font-family:codicon;src:url(/assets/codicon-DjkITdqj.ttf) format("truetype");font-weight:400;font-style:normal}.codicon{font-family:codicon;font-weight:400;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:root{--font-sans: -apple-system, BlinkMacSystemFont, "SF Pro Text", system-ui, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, monospace;--foreground: hsl(0 0% 8%);--background: hsl(0 0% 100%);--ui-text-secondary: hsl(0 0% 30%);--ui-text-tertiary: hsl(0 0% 48%);--ui-text-quaternary: hsl(0 0% 60%);--ui-icon-nav: hsl(0 0% 24%);--ui-icon-nav-active: hsl(0 0% 8%);--theme-primary: hsl(220 80% 50%);--ui-row-hover-background: hsl(0 0% 95%);--ui-row-active-background: hsl(0 0% 92%);--ui-control-hover-background: hsl(0 0% 95%);--ui-control-active-background: hsl(0 0% 90%);--ui-sidebar-surface-background: hsl(0 0% 100%);--ui-stroke-tertiary: hsl(0 0% 88%);--sidebar-edge-border: hsl(0 0% 86%);--ui-accent: hsl(220 80% 50%);--chrome-action-hover: hsl(0 0% 93%);--dt-card: hsl(0 0% 100%);--dt-background: hsl(0 0% 97%);--ui-chat-surface-background: hsl(0 0% 100%);--ui-chat-bubble-background: hsl(0 0% 96%);--ui-stroke-secondary: hsl(0 0% 78%);--ui-tooltip-surface: #17181b;--ui-tooltip-text: #fff}[data-appearance=dark]{--foreground: hsl(0 0% 95%);--background: hsl(240 3% 7.5%);--ui-text-secondary: hsl(0 0% 78%);--ui-text-tertiary: hsl(0 0% 60%);--ui-text-quaternary: hsl(0 0% 48%);--ui-icon-nav: hsl(0 0% 72%);--ui-icon-nav-active: hsl(0 0% 95%);--theme-primary: hsl(220 80% 68%);--ui-row-hover-background: hsl(220 3% 15%);--ui-row-active-background: hsl(220 3% 18%);--ui-control-hover-background: hsl(220 3% 16%);--ui-control-active-background: hsl(220 3% 22%);--ui-sidebar-surface-background: hsl(210 3% 12%);--ui-stroke-tertiary: hsl(220 3% 22%);--sidebar-edge-border: hsl(220 3% 20%);--ui-accent: hsl(220 80% 68%);--chrome-action-hover: hsl(220 3% 18%);--dt-card: hsl(220 3% 14%);--dt-background: hsl(240 3% 7.5%);--ui-chat-surface-background: hsl(240 3% 7.5%);--ui-chat-bubble-background: hsl(220 3% 14%);--ui-stroke-secondary: hsl(220 3% 32%)}html,body,#app{height:100%;width:100%;overflow:hidden;font-family:var(--font-sans)}body{background:var(--background);color:var(--foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.semi-tooltip-wrapper{padding:5px 8px;background-color:var(--ui-tooltip-surface);color:var(--ui-tooltip-text);font-family:var(--font-sans);font-size:12px;line-height:18px}.semi-tooltip-wrapper .semi-tooltip-icon-arrow{color:var(--ui-tooltip-surface)}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;color:inherit}[data-appearance=dark] body{color-scheme:dark}[data-slot=model-chip-label],[data-slot=model-menu-name],.ga-model-name,.ga-mixin-member-name{font-family:var(--font-mono)}.ga-root-error{width:min(100%,620px);min-height:100%;margin:0 auto;padding:48px 32px;overflow:auto;color:var(--semi-color-text-0)}.ga-root-error-result.semi-empty{padding:32px 0 18px}.ga-root-error-details{margin-top:18px;border-top:1px solid var(--semi-color-border)}.ga-root-error-details .semi-collapse-header{padding-inline:4px;color:var(--semi-color-text-2)}.ga-root-error-details .semi-typography{margin-top:0}.ga-root-error-details pre{max-height:280px;margin:0;padding:14px;overflow:auto;border:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-medium);outline:none;background:var(--semi-color-fill-0);color:var(--semi-color-text-1);font:12px/1.55 var(--font-mono);white-space:pre-wrap;overflow-wrap:anywhere;-webkit-user-select:text;user-select:text}.ga-root-error-details pre:focus-visible{border-color:var(--semi-color-primary);box-shadow:0 0 0 2px var(--semi-color-primary-light-default)}@keyframes semi-input-active{0%{transform:scale(1)}to{transform:scale(.97)}}@keyframes semi-input-inactive{0%{transform:scale(.97)}to{transform:scale(1)}}.semi-input{transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-input-wrapper{display:inline-block;position:relative;vertical-align:middle;box-shadow:none;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;background-color:var(--semi-color-fill-0);border:1px transparent solid;border-radius:var(--semi-border-radius-small);width:100%;outline:none;cursor:text;box-sizing:border-box;color:var(--semi-color-text-0);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-input-wrapper-default{height:32px;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:30px}.semi-input-wrapper-small{height:24px;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:22px}.semi-input-wrapper-large{height:40px;font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:38px}.semi-input-wrapper:hover{background-color:var(--semi-color-fill-1);border-color:transparent}.semi-input-wrapper-focus{background-color:var(--semi-color-fill-0);border:var(--semi-color-focus-border) solid 1px}.semi-input-wrapper-focus:hover{background-color:var(--semi-color-fill-0);border-color:var(--semi-color-focus-border)}.semi-input-wrapper-focus:active{background-color:var(--semi-color-fill-2);border-color:var(--semi-color-focus-border)}.semi-input-wrapper.semi-input-readonly{cursor:default}.semi-input-wrapper-error{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger-light-default)}.semi-input-wrapper-error:hover{background-color:var(--semi-color-danger-light-hover);border-color:var(--semi-color-danger-light-hover)}.semi-input-wrapper-error.semi-input-wrapper-focus{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger)}.semi-input-wrapper-error:active{background-color:var(--semi-color-danger-light-active);border-color:var(--semi-color-danger)}.semi-input-wrapper-warning{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning-light-default)}.semi-input-wrapper-warning:hover{background-color:var(--semi-color-warning-light-hover);border-color:var(--semi-color-warning-light-hover)}.semi-input-wrapper-warning.semi-input-wrapper-focus{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning)}.semi-input-wrapper-warning:active{background-color:var(--semi-color-warning-light-active);border-color:var(--semi-color-warning)}.semi-input-wrapper__with-prefix{display:inline-flex;align-items:center}.semi-input-wrapper__with-prefix .semi-input{padding-left:0}.semi-input-wrapper__with-suffix{display:inline-flex;align-items:center}.semi-input-wrapper__with-suffix .semi-input{padding-right:0}.semi-input-wrapper-clearable,.semi-input-wrapper-modebtn{display:inline-flex;align-items:center}.semi-input-wrapper-hidden{border:none}.semi-input-wrapper .semi-icon{color:var(--semi-color-text-2)}.semi-input-wrapper .semi-input-clearbtn,.semi-input-wrapper .semi-input-modebtn{color:var(--semi-color-primary-hover)}.semi-input-wrapper .semi-input-clearbtn>svg,.semi-input-wrapper .semi-input-modebtn>svg{pointer-events:none}.semi-input-wrapper .semi-input-clearbtn:hover,.semi-input-wrapper .semi-input-modebtn:hover{cursor:pointer}.semi-input-wrapper .semi-input-clearbtn:hover .semi-icon,.semi-input-wrapper .semi-input-modebtn:hover .semi-icon{color:var(--semi-color-primary-hover)}.semi-input-wrapper .semi-input-clearbtn:focus-visible,.semi-input-wrapper .semi-input-modebtn:focus-visible{border-radius:var(--semi-border-radius-small);outline:2px solid var(--semi-color-primary-light-active);outline-offset:-1px}.semi-input-wrapper__with-suffix-icon.semi-input-wrapper-clearable:not(.semi-input-wrapper__with-suffix-hidden) .semi-input-clearbtn{min-width:24px;justify-content:flex-end}.semi-input-wrapper-modebtn.semi-input-wrapper-clearable .semi-input-clearbtn{min-width:16px;justify-content:center}.semi-input-wrapper.semi-input-wrapper__with-append-only .semi-input{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-input-wrapper.semi-input-wrapper__with-append-only .semi-input:not(:last-child){border-right-style:none;border-radius:0}.semi-input-wrapper.semi-input-wrapper__with-prepend-only .semi-input{border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-input-wrapper.semi-input-wrapper__with-prepend-only .semi-input:not(:last-child){border-right-style:none}.semi-input-wrapper.semi-input-wrapper__with-prepend,.semi-input-wrapper.semi-input-wrapper__with-append{display:inline-flex;align-items:center;background-color:transparent}.semi-input-wrapper.semi-input-wrapper__with-prepend:hover,.semi-input-wrapper.semi-input-wrapper__with-append:hover{background-color:transparent}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-focus,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-focus{border:1px transparent solid;background-color:transparent}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input{background-color:var(--semi-color-fill-0);border:1px transparent solid}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:hover,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:hover{background-color:var(--semi-color-fill-1)}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:hover+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:hover~.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:hover+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:hover~.semi-input-modebtn{background-color:var(--semi-color-fill-1)}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus{border:1px var(--semi-color-focus-border) solid;background-color:var(--semi-color-fill-0)}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus.semi-input-sibling-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus.semi-input-sibling-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus.semi-input-sibling-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus.semi-input-sibling-modebtn{border-right-style:none}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus.semi-input-sibling-modebtn+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus.semi-input-sibling-modebtn+.semi-input-clearbtn{border-right-style:none}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus~.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus~.semi-input-modebtn{box-sizing:border-box;background-color:var(--semi-color-fill-0)}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus+.semi-input-clearbtn{border:1px var(--semi-color-focus-border) solid;border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0;border-left-style:none}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus+.semi-input-clearbtn:not(:last-child),.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus+.semi-input-clearbtn:not(:last-child){border-radius:0}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus~.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus~.semi-input-modebtn{border:1px var(--semi-color-focus-border) solid;border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0;border-left-style:none}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus~.semi-input-modebtn:not(:last-child),.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus~.semi-input-modebtn:not(:last-child){border-radius:0}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:active,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:active{background-color:var(--semi-color-fill-2)}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:active+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:active~.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:active+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:active~.semi-input-modebtn{background-color:var(--semi-color-fill-2)}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-clearbtn:hover,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-modebtn:hover,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-clearbtn:hover,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-modebtn:hover{background-color:var(--semi-color-fill-0)}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-clearbtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-modebtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-clearbtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-modebtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-clearbtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-modebtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-clearbtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-modebtn:hover:last-child{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error{border-color:transparent}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger-light-default)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:hover,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:hover{background-color:var(--semi-color-danger-light-hover);border-color:var(--semi-color-danger-light-hover)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:hover+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:hover+.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:hover+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:hover+.semi-input-modebtn{background-color:var(--semi-color-danger-light-hover)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:focus,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:focus{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:focus+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:focus+.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:focus+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:focus+.semi-input-modebtn{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:active,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:active{background-color:var(--semi-color-danger-light-active)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:active+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:active+.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:active+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:active+.semi-input-modebtn{background-color:var(--semi-color-danger-light-active);border-color:var(--semi-color-danger)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-clearbtn:hover,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-modebtn:hover,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-clearbtn:hover,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-modebtn:hover{background-color:var(--semi-color-danger-light-default)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-clearbtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-modebtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-clearbtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-modebtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-clearbtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-modebtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-clearbtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-modebtn:hover:last-child{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning{border-color:transparent}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning-light-default)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:hover,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:hover{background-color:var(--semi-color-warning-light-hover);border-color:var(--semi-color-warning-light-hover)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:hover+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:hover+.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:hover+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:hover+.semi-input-modebtn{background-color:var(--semi-color-warning-light-hover)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:focus,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:focus{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:focus+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:focus+.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:focus+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:focus+.semi-input-modebtn{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:active,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:active{background-color:var(--semi-color-warning-light-active)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:active+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:active+.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:active+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:active+.semi-input-modebtn{background-color:var(--semi-color-warning-light-active);border-color:var(--semi-color-warning)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-clearbtn:hover,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-modebtn:hover,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-clearbtn:hover,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-modebtn:hover{background-color:var(--semi-color-warning-light-default)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-clearbtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-modebtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-clearbtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-modebtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-clearbtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-modebtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-clearbtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-modebtn:hover:last-child{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-input-wrapper-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text);background-color:var(--semi-color-disabled-fill);-webkit-text-fill-color:var(--semi-color-disabled-text)}.semi-input-wrapper-disabled:hover{background-color:var(--semi-color-disabled-fill)}.semi-input-wrapper-disabled .semi-input-append,.semi-input-wrapper-disabled .semi-input-prepend,.semi-input-wrapper-disabled .semi-input-suffix,.semi-input-wrapper-disabled .semi-input-prefix,.semi-input-wrapper-disabled .semi-icon{color:var(--semi-color-disabled-text)}.semi-input{border:none;outline:none;width:100%;color:inherit;padding-left:12px;padding-right:12px;background-color:transparent;box-sizing:border-box}.semi-input:placeholder-shown{text-overflow:ellipsis}.semi-input[type=password]::-ms-reveal,.semi-input[type=password]::-ms-clear{display:none}.semi-input[type=search]::-webkit-search-cancel-button{display:none}.semi-input::placeholder{color:var(--semi-color-text-2)}.semi-input-large{height:38px;font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:38px}.semi-input-small{height:22px;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:22px}.semi-input-default{height:30px;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:30px}.semi-input-disabled{cursor:not-allowed;color:inherit}.semi-input-inset-label{margin:0 12px;font-weight:600;color:var(--semi-color-text-2);flex-shrink:0;white-space:nowrap}.semi-input-prefix,.semi-input-suffix{display:flex;justify-content:center;align-items:center}.semi-input-prefix-text,.semi-input-suffix-text{margin:0 12px;color:var(--semi-color-text-2);font-weight:600;white-space:nowrap}.semi-input-prefix-icon,.semi-input-suffix-icon{color:var(--semi-color-text-2);margin:0 8px}.semi-input-suffix{display:flex;justify-content:center;align-items:center}.semi-input-clearbtn,.semi-input-modebtn{display:flex;align-items:center;height:100%;justify-content:center;min-width:32px}.semi-input-clearbtn+.semi-input-suffix+.semi-input-suffix-text{margin-left:0}.semi-input-clearbtn+.semi-input-suffix+.semi-input-suffix-icon{margin-left:0}.semi-input-suffix-hidden{display:none}.semi-input-prepend,.semi-input-append{height:100%;display:flex;align-items:center;background-color:var(--semi-color-fill-0);color:var(--semi-color-text-2);font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;flex-shrink:0}.semi-input-prepend-icon,.semi-input-prepend-text,.semi-input-append-icon,.semi-input-append-text{padding:0 12px}.semi-input-append{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0;border-left:1px transparent solid}.semi-input-prepend{border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small);border-right:1px transparent solid}.semi-input-disabled::placeholder{color:var(--semi-color-disabled-text)}.semi-input-group{display:inline-flex;align-items:center;align-content:center;flex-wrap:wrap}.semi-input-group .semi-select,.semi-input-group .semi-tagInput,.semi-input-group .semi-cascader,.semi-input-group .semi-tree-select,.semi-input-group>.semi-input-wrapper{border-radius:0}.semi-input-group .semi-select:first-child,.semi-input-group .semi-tagInput:first-child,.semi-input-group .semi-cascader:first-child,.semi-input-group .semi-tree-select:first-child,.semi-input-group>.semi-input-wrapper:first-child{border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-input-group .semi-select:last-child,.semi-input-group .semi-tagInput:last-child,.semi-input-group .semi-cascader:last-child,.semi-input-group .semi-tree-select:last-child,.semi-input-group>.semi-input-wrapper:last-child{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-input-group .semi-select:not(:last-child),.semi-input-group .semi-tagInput:not(:last-child),.semi-input-group .semi-cascader:not(:last-child),.semi-input-group .semi-tree-select:not(:last-child),.semi-input-group>.semi-input-wrapper:not(:last-child){position:relative}.semi-input-group .semi-select:not(:last-child):after,.semi-input-group .semi-tagInput:not(:last-child):after,.semi-input-group .semi-cascader:not(:last-child):after,.semi-input-group .semi-tree-select:not(:last-child):after,.semi-input-group>.semi-input-wrapper:not(:last-child):after{content:"";background-color:var(--semi-color-border);width:1px;position:absolute;right:-1px;top:1px;bottom:1px}.semi-input-group .semi-select{overflow-y:visible}.semi-input-group .semi-input-number .semi-input-wrapper,.semi-input-group .semi-input-number .semi-datepicker-range-input,.semi-input-group .semi-datepicker .semi-input-wrapper,.semi-input-group .semi-datepicker .semi-datepicker-range-input,.semi-input-group .semi-timepicker .semi-input-wrapper,.semi-input-group .semi-timepicker .semi-datepicker-range-input,.semi-input-group .semi-autocomplete .semi-input-wrapper,.semi-input-group .semi-autocomplete .semi-datepicker-range-input{border-radius:0}.semi-input-group .semi-input-number:first-child .semi-input-wrapper,.semi-input-group .semi-input-number:first-child .semi-datepicker-range-input,.semi-input-group .semi-datepicker:first-child .semi-input-wrapper,.semi-input-group .semi-datepicker:first-child .semi-datepicker-range-input,.semi-input-group .semi-timepicker:first-child .semi-input-wrapper,.semi-input-group .semi-timepicker:first-child .semi-datepicker-range-input,.semi-input-group .semi-autocomplete:first-child .semi-input-wrapper,.semi-input-group .semi-autocomplete:first-child .semi-datepicker-range-input{border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-input-group .semi-input-number:last-child .semi-input-wrapper,.semi-input-group .semi-input-number:last-child .semi-datepicker-range-input,.semi-input-group .semi-datepicker:last-child .semi-input-wrapper,.semi-input-group .semi-datepicker:last-child .semi-datepicker-range-input,.semi-input-group .semi-timepicker:last-child .semi-input-wrapper,.semi-input-group .semi-timepicker:last-child .semi-datepicker-range-input,.semi-input-group .semi-autocomplete:last-child .semi-input-wrapper,.semi-input-group .semi-autocomplete:last-child .semi-datepicker-range-input{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-input-group .semi-input-number:not(:last-child),.semi-input-group .semi-datepicker:not(:last-child),.semi-input-group .semi-timepicker:not(:last-child),.semi-input-group .semi-autocomplete:not(:last-child){position:relative}.semi-input-group .semi-input-number:not(:last-child):after,.semi-input-group .semi-datepicker:not(:last-child):after,.semi-input-group .semi-timepicker:not(:last-child):after,.semi-input-group .semi-autocomplete:not(:last-child):after{content:"";background-color:var(--semi-color-border);width:1px;position:absolute;right:-1px;top:1px;bottom:1px}.semi-input-group-wrapper-with-top-label{margin-top:16px;margin-bottom:16px}.semi-input-group-wrapper-with-top-label .semi-input-group{display:flex}.semi-input-group-wrapper-with-top-label .semi-input-group .semi-form-field{margin-top:0;margin-bottom:0}.semi-input-only_border,.semi-input-only_border:hover{background:transparent;border-color:var(--semi-color-border)}.semi-input-only_border:focus-within{background:transparent}.semi-input-borderless:not(:focus-within):not(:hover){background-color:transparent;border-color:transparent}.semi-input-borderless:focus-within:not(:active){background-color:transparent}.semi-input-borderless.semi-input-wrapper-error:not(:focus-within){border-color:var(--semi-color-danger)}.semi-input-borderless.semi-input-wrapper-warning:not(:focus-within){border-color:var(--semi-color-warning)}.semi-rtl .semi-input-wrapper,.semi-portal-rtl .semi-input-wrapper{direction:rtl}.semi-rtl .semi-input-wrapper__with-prefix .semi-input,.semi-portal-rtl .semi-input-wrapper__with-prefix .semi-input{padding-left:auto;padding-right:0}.semi-rtl .semi-input-wrapper__with-suffix .semi-input,.semi-portal-rtl .semi-input-wrapper__with-suffix .semi-input{padding-right:auto;padding-left:0}.semi-rtl .semi-input,.semi-portal-rtl .semi-input{padding-left:12px;padding-right:12px}.semi-rtl .semi-input-clearbtn+.semi-rtl .semi-input-suffix+.semi-input-suffix-text,.semi-rtl .semi-input-clearbtn+.semi-portal-rtl .semi-input-suffix+.semi-input-suffix-text,.semi-portal-rtl .semi-input-clearbtn+.semi-rtl .semi-input-suffix+.semi-input-suffix-text,.semi-portal-rtl .semi-input-clearbtn+.semi-portal-rtl .semi-input-suffix+.semi-input-suffix-text{margin-left:auto;margin-right:0}.semi-rtl .semi-input-clearbtn+.semi-rtl .semi-input-suffix+.semi-input-suffix-icon,.semi-rtl .semi-input-clearbtn+.semi-portal-rtl .semi-input-suffix+.semi-input-suffix-icon,.semi-portal-rtl .semi-input-clearbtn+.semi-rtl .semi-input-suffix+.semi-input-suffix-icon,.semi-portal-rtl .semi-input-clearbtn+.semi-portal-rtl .semi-input-suffix+.semi-input-suffix-icon{margin-left:auto;margin-right:0}.semi-rtl .semi-input-append,.semi-portal-rtl .semi-input-append{border-left:0;border-right:1px transparent solid}.semi-rtl .semi-input-prepend,.semi-portal-rtl .semi-input-prepend{border-right:0;border-left:1px transparent solid}.semi-rtl .semi-input-group .semi-select:not(:last-child):after,.semi-rtl .semi-input-group .semi-cascader:not(:last-child):after,.semi-rtl .semi-input-group .semi-tree-select:not(:last-child):after,.semi-rtl .semi-input-group>.semi-input-wrapper:not(:last-child):after,.semi-portal-rtl .semi-input-group .semi-select:not(:last-child):after,.semi-portal-rtl .semi-input-group .semi-cascader:not(:last-child):after,.semi-portal-rtl .semi-input-group .semi-tree-select:not(:last-child):after,.semi-portal-rtl .semi-input-group>.semi-input-wrapper:not(:last-child):after{right:auto;left:-1px}.semi-rtl .semi-input-group .semi-input-number:not(:last-child):after,.semi-portal-rtl .semi-input-group .semi-input-number:not(:last-child):after{right:auto;left:-1px}.semi-rtl .semi-input-textarea-wrapper,.semi-portal-rtl .semi-input-textarea-wrapper{direction:rtl}.semi-rtl .semi-input-textarea-counter,.semi-portal-rtl .semi-input-textarea-counter{text-align:left}.semi-rtl .semi-input-textarea-showClear,.semi-portal-rtl .semi-input-textarea-showClear{padding-right:0;padding-left:36px}.semi-avatar{position:relative;display:inline-flex;overflow:hidden;align-items:center;justify-content:center;white-space:nowrap;text-align:center;vertical-align:middle}.semi-avatar:focus-visible{outline:2px solid var(--semi-color-primary-light-active)}.semi-avatar-focus{outline:2px solid var(--semi-color-primary-light-active)}.semi-avatar-no-focus-visible:focus-visible{outline:none}.semi-avatar .semi-avatar-label{display:flex;align-items:center;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600}.semi-avatar-content{-webkit-user-select:none;user-select:none}.semi-avatar-extra-extra-small{width:20px;height:20px;border-radius:3px}.semi-avatar-extra-extra-small .semi-avatar-content{transform-origin:center;transform:scale(.8)}.semi-avatar-extra-extra-small .semi-avatar-label{font-size:10px;line-height:15px}.semi-avatar-extra-small{width:24px;height:24px;border-radius:3px}.semi-avatar-extra-small .semi-avatar-content{transform-origin:center;transform:scale(.8)}.semi-avatar-extra-small .semi-avatar-label{font-size:10px;line-height:15px}.semi-avatar-small{width:32px;height:32px;border-radius:3px}.semi-avatar-small .semi-avatar-label{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-avatar-default{width:40px;height:40px;border-radius:3px}.semi-avatar-default .semi-avatar-label{font-size:18px;line-height:24px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-avatar-medium{width:48px;height:48px;border-radius:3px}.semi-avatar-medium .semi-avatar-label{font-size:20px;line-height:28px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-avatar-large{width:72px;height:72px;border-radius:6px}.semi-avatar-large .semi-avatar-label{font-size:32px;line-height:44px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-avatar-extra-large{width:128px;height:128px;border-radius:12px}.semi-avatar-extra-large .semi-avatar-label{font-size:64px;line-height:77px}.semi-avatar-circle{border-radius:var(--semi-border-radius-circle)}.semi-avatar-image{background-color:transparent}.semi-avatar>img{display:block;width:100%;height:100%;object-fit:cover}.semi-avatar-hover{position:absolute;left:0;top:0;width:100%;height:100%}.semi-avatar:hover{cursor:pointer}.semi-avatar-wrapper{position:relative;display:inline-flex;flex-direction:column;align-items:center;width:fit-content}.semi-avatar-wrapper .semi-avatar-top_slot-bg{position:absolute;display:flex;justify-content:center;border-radius:50%;overflow:hidden}.semi-avatar-wrapper .semi-avatar-top_slot-bg-small{width:32px;height:32px}.semi-avatar-wrapper .semi-avatar-top_slot-bg-default{width:40px;height:40px}.semi-avatar-wrapper .semi-avatar-top_slot-bg-medium{width:48px;height:48px}.semi-avatar-wrapper .semi-avatar-top_slot-bg-large{width:72px;height:72px}.semi-avatar-wrapper .semi-avatar-top_slot-bg-extra-large{width:128px;height:128px}.semi-avatar-wrapper .semi-avatar-top_slot-bg-svg{position:absolute}.semi-avatar-wrapper .semi-avatar-top_slot-bg-svg-small{top:-28px;scale:.4}.semi-avatar-wrapper .semi-avatar-top_slot-bg-svg-default{top:-32px;scale:.7}.semi-avatar-wrapper .semi-avatar-top_slot-bg-svg-medium{top:-30px;scale:.8}.semi-avatar-wrapper .semi-avatar-top_slot-bg-svg-large{top:-30px;scale:1.1}.semi-avatar-wrapper .semi-avatar-top_slot-bg-svg-extra-large{top:-32px;scale:1.4}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper{position:absolute;display:flex;justify-content:center}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper .semi-avatar-top_slot{color:var(--semi-color-bg-0);font-weight:600}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper .semi-avatar-top_slot-content{-webkit-user-select:none;user-select:none;position:relative;line-height:normal}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper .semi-avatar-top_slot-content-small{font-size:5px;margin-top:0}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper .semi-avatar-top_slot-content-default{font-size:6px;margin-top:-2px}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper .semi-avatar-top_slot-content-medium{font-size:8px;margin-top:0}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper .semi-avatar-top_slot-content-large{font-size:14px;margin-top:0}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper .semi-avatar-top_slot-content-extra-large{font-size:16px;margin-top:0}.semi-avatar-wrapper .semi-avatar-bottom_slot{color:var(--semi-color-bg-0);position:absolute;cursor:pointer;bottom:3.5px;transform:translateY(50%);-webkit-user-select:none;user-select:none}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_circle{display:flex;justify-content:center;align-items:center;background:var(--semi-color-primary);border-radius:var(--semi-border-radius-circle);line-height:normal}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_circle-extra-small,.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_circle-small{width:12px;height:12px;font-size:5px}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_circle-default{width:16px;height:16px;font-size:12px}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_circle-medium{width:18px;height:18px;font-size:12px}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_circle-large{width:28px;height:28px;font-size:12px}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_circle-extra-large{width:28px;height:28px;font-size:14px}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_square{display:flex;justify-content:center;align-items:center;background:var(--semi-color-primary);border-radius:4px;padding:1px 4px;font-weight:600;border-style:solid;border-color:var(--semi-color-bg-0)}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_square-extra_small,.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_square-small{font-size:5px;border-width:2px}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_square-default,.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_square-medium,.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_square-large{font-size:12px;border-width:2px}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_square-extra-large{font-size:14px;border-width:2px}.semi-avatar-group{display:inline-block}.semi-avatar-group .semi-avatar{box-sizing:border-box}.semi-avatar-group .semi-avatar:first-child{margin-left:0}.semi-avatar-group .semi-avatar-extra-large{border:3px var(--semi-color-bg-1) solid;margin-left:-32px}.semi-avatar-group .semi-avatar-large{border:3px var(--semi-color-bg-1) solid;margin-left:-18px}.semi-avatar-group .semi-avatar-medium,.semi-avatar-group .semi-avatar-default,.semi-avatar-group .semi-avatar-small{border:2px var(--semi-color-bg-1) solid;margin-left:-12px}.semi-avatar-group .semi-avatar-extra-small{border:1px var(--semi-color-bg-1) solid;margin-left:-10px}.semi-avatar-group .semi-avatar-extra-extra-small{border:1px var(--semi-color-bg-1) solid;margin-left:-4px}.semi-avatar-group .semi-avatar-item-start-0{z-index:100}.semi-avatar-group .semi-avatar-item-end-0{z-index:80}.semi-avatar-group .semi-avatar-item-start-1{z-index:99}.semi-avatar-group .semi-avatar-item-end-1{z-index:81}.semi-avatar-group .semi-avatar-item-start-2{z-index:98}.semi-avatar-group .semi-avatar-item-end-2{z-index:82}.semi-avatar-group .semi-avatar-item-start-3{z-index:97}.semi-avatar-group .semi-avatar-item-end-3{z-index:83}.semi-avatar-group .semi-avatar-item-start-4{z-index:96}.semi-avatar-group .semi-avatar-item-end-4{z-index:84}.semi-avatar-group .semi-avatar-item-start-5{z-index:95}.semi-avatar-group .semi-avatar-item-end-5{z-index:85}.semi-avatar-group .semi-avatar-item-start-6{z-index:94}.semi-avatar-group .semi-avatar-item-end-6{z-index:86}.semi-avatar-group .semi-avatar-item-start-7{z-index:93}.semi-avatar-group .semi-avatar-item-end-7{z-index:87}.semi-avatar-group .semi-avatar-item-start-8{z-index:92}.semi-avatar-group .semi-avatar-item-end-8{z-index:88}.semi-avatar-group .semi-avatar-item-start-9{z-index:91}.semi-avatar-group .semi-avatar-item-end-9{z-index:89}.semi-avatar-group .semi-avatar-item-start-10,.semi-avatar-group .semi-avatar-item-end-10{z-index:90}.semi-avatar-group .semi-avatar-item-start-11{z-index:89}.semi-avatar-group .semi-avatar-item-end-11{z-index:91}.semi-avatar-group .semi-avatar-item-start-12{z-index:88}.semi-avatar-group .semi-avatar-item-end-12{z-index:92}.semi-avatar-group .semi-avatar-item-start-13{z-index:87}.semi-avatar-group .semi-avatar-item-end-13{z-index:93}.semi-avatar-group .semi-avatar-item-start-14{z-index:86}.semi-avatar-group .semi-avatar-item-end-14{z-index:94}.semi-avatar-group .semi-avatar-item-start-15{z-index:85}.semi-avatar-group .semi-avatar-item-end-15{z-index:95}.semi-avatar-group .semi-avatar-item-start-16{z-index:84}.semi-avatar-group .semi-avatar-item-end-16{z-index:96}.semi-avatar-group .semi-avatar-item-start-17{z-index:83}.semi-avatar-group .semi-avatar-item-end-17{z-index:97}.semi-avatar-group .semi-avatar-item-start-18{z-index:82}.semi-avatar-group .semi-avatar-item-end-18{z-index:98}.semi-avatar-group .semi-avatar-item-start-19{z-index:81}.semi-avatar-group .semi-avatar-item-end-19{z-index:99}.semi-avatar-group .semi-avatar-item-start-20{z-index:80}.semi-avatar-group .semi-avatar-item-end-20{z-index:100}.semi-avatar-group .semi-avatar-item-more{background-color:rgba(var(--semi-grey-5),1)}.semi-avatar-amber{background-color:rgba(var(--semi-amber-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-blue{background-color:rgba(var(--semi-blue-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-cyan{background-color:rgba(var(--semi-cyan-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-green{background-color:rgba(var(--semi-green-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-grey{background-color:rgba(var(--semi-grey-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-indigo{background-color:rgba(var(--semi-indigo-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-light-blue{background-color:rgba(var(--semi-light-blue-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-light-green{background-color:rgba(var(--semi-light-green-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-lime{background-color:rgba(var(--semi-lime-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-orange{background-color:rgba(var(--semi-orange-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-pink{background-color:rgba(var(--semi-pink-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-purple{background-color:rgba(var(--semi-purple-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-red{background-color:rgba(var(--semi-red-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-teal{background-color:rgba(var(--semi-teal-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-violet{background-color:rgba(var(--semi-violet-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-yellow{background-color:rgba(var(--semi-yellow-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-additionalBorder{border-style:solid;border-color:var(--semi-color-primary);display:inline-block;box-sizing:border-box;position:absolute;border-width:1.5px;top:-3.5px;left:-3.5px}.semi-avatar-additionalBorder-extra-extra-small{width:27px;height:27px}.semi-avatar-additionalBorder-extra-small{width:31px;height:31px}.semi-avatar-additionalBorder-small{width:39px;height:39px}.semi-avatar-additionalBorder-default{width:47px;height:47px}.semi-avatar-additionalBorder-medium{width:55px;height:55px}.semi-avatar-additionalBorder-large{width:79px;height:79px}.semi-avatar-additionalBorder-extra-large{width:135px;height:135px}.semi-avatar-square.semi-avatar-additionalBorder-extra_extra_small,.semi-avatar-square.semi-avatar-additionalBorder-extra_small,.semi-avatar-square.semi-avatar-additionalBorder-small,.semi-avatar-square.semi-avatar-additionalBorder-default,.semi-avatar-square.semi-avatar-additionalBorder-medium{border-radius:3px}.semi-avatar-square.semi-avatar-additionalBorder-large{border-radius:6px}.semi-avatar-additionalBorder-circle{border-radius:var(--semi-border-radius-circle)}.semi-avatar-additionalBorder-animated{animation:.8s linear infinite semi-avatar-additionalBorder}.semi-avatar-animated{animation:1s linear infinite semi-avatar-content}@keyframes semi-avatar-additionalBorder{0%{opacity:1;transform:scale(1)}to{border-width:0;opacity:0;transform:scale(1.15)}}@keyframes semi-avatar-content{0%{transform:scale(1)}50%{transform:scale(.9)}to{transform:scale(1)}}.semi-rtl .semi-avatar,.semi-portal-rtl .semi-avatar{direction:rtl}.semi-rtl .semi-avatar-extra-extra-small .semi-avatar-content,.semi-portal-rtl .semi-avatar-extra-extra-small .semi-avatar-content,.semi-rtl .semi-avatar-extra-small .semi-avatar-content,.semi-portal-rtl .semi-avatar-extra-small .semi-avatar-content{transform:scale(.8)}.semi-rtl .semi-avatar-hover,.semi-portal-rtl .semi-avatar-hover{left:auto;right:0}.semi-rtl .semi-avatar-group,.semi-portal-rtl .semi-avatar-group{direction:rtl}.semi-rtl .semi-avatar-group .semi-avatar:first-child,.semi-portal-rtl .semi-avatar-group .semi-avatar:first-child{margin-left:auto;margin-right:0}.semi-rtl .semi-avatar-group .semi-avatar-extra-large,.semi-portal-rtl .semi-avatar-group .semi-avatar-extra-large{margin-left:auto;margin-right:-32px}.semi-rtl .semi-avatar-group .semi-avatar-large,.semi-portal-rtl .semi-avatar-group .semi-avatar-large{margin-left:auto;margin-right:-18px}.semi-rtl .semi-avatar-group .semi-avatar-medium,.semi-rtl .semi-avatar-group .semi-avatar-small,.semi-portal-rtl .semi-avatar-group .semi-avatar-medium,.semi-portal-rtl .semi-avatar-group .semi-avatar-small{margin-left:auto;margin-right:-12px}.semi-rtl .semi-avatar-group .semi-avatar-extra-small,.semi-portal-rtl .semi-avatar-group .semi-avatar-extra-small{margin-left:auto;margin-right:-10px}.semi-rtl .semi-avatar-group .semi-avatar-extra-extra-small,.semi-portal-rtl .semi-avatar-group .semi-avatar-extra-extra-small{margin-left:auto;margin-right:-4px}.semi-tag{box-sizing:border-box;border-radius:var(--semi-border-radius-small);background-color:transparent;position:relative;-webkit-user-select:none;user-select:none;overflow:hidden;white-space:nowrap;vertical-align:bottom;display:flex;justify-content:center;align-items:center;display:inline-flex}.semi-tag-default,.semi-tag-small{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;height:20px;padding:2px 8px}.semi-tag-default:focus-visible,.semi-tag-small:focus-visible{outline:2px solid var(--semi-color-primary-light-active)}.semi-tag-square{border-radius:var(--semi-border-radius-small)}.semi-tag-circle{border-radius:var(--semi-border-radius-full)}.semi-tag-large{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;padding:4px 8px;height:24px}.semi-tag-large:focus-visible{outline:2px solid var(--semi-color-primary-light-active)}.semi-tag-invisible{display:none}.semi-tag-prefix-icon{display:flex;padding-right:4px}.semi-tag-suffix-icon{display:flex;padding-left:4px}.semi-tag-content{flex:1}.semi-tag-content-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.semi-tag-content-center{display:flex;justify-content:center;align-items:center;height:100%;min-width:0}.semi-tag-close{display:flex;justify-content:center;align-items:center;color:var(--semi-color-text-2);padding-left:4px;cursor:pointer}.semi-tag-close:hover{color:var(--semi-color-text-1)}.semi-tag-close:active{color:var(--semi-color-text-0)}.semi-tag-closable{padding:4px 4px 4px 8px}.semi-tag-avatar-square .semi-avatar,.semi-tag-avatar-circle .semi-avatar{margin-right:4px}.semi-tag-avatar-square{padding:0 4px 0 0}.semi-tag-avatar-square .semi-avatar>img{background-color:var(--semi-color-default)}.semi-tag-avatar-circle{padding:2px 4px 2px 2px}.semi-tag-avatar-square.semi-tag-default .semi-avatar,.semi-tag-avatar-square.semi-tag-small .semi-avatar{width:20px;height:20px}.semi-tag-avatar-square.semi-tag-large .semi-avatar{width:24px;height:24px}.semi-tag-avatar-circle.semi-tag-small,.semi-tag-avatar-circle.semi-tag-default{border-radius:11px}.semi-tag-avatar-circle.semi-tag-small .semi-avatar,.semi-tag-avatar-circle.semi-tag-default .semi-avatar{width:16px;height:16px}.semi-tag-avatar-circle.semi-tag-large{border-radius:13px}.semi-tag-avatar-circle.semi-tag-large .semi-avatar{width:20px;height:20px}.semi-tag-colorful{font-weight:600}.semi-tag-colorful.semi-tag-solid{background:var(--semi-color-ai-purple);color:var(--semi-color-white)}.semi-tag-colorful.semi-tag-solid.semi-tag-gradient{background:var(--semi-color-ai-general)}.semi-tag-colorful.semi-tag-light{background:rgba(var(--semi-ai-purple-0),1);color:var(--semi-color-ai-purple)}.semi-tag-colorful.semi-tag-light.semi-tag-gradient{background:var(--semi-ai-general-0)}.semi-tag-colorful.semi-tag-light.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(1){stop-color:rgba(var(--semi-ai-general-5-0),1)}.semi-tag-colorful.semi-tag-light.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(2){stop-color:rgba(var(--semi-ai-general-5-1),1)}.semi-tag-colorful.semi-tag-light.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(3){stop-color:rgba(var(--semi-ai-general-5-2),1)}.semi-tag-colorful.semi-tag-light.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(4){stop-color:rgba(var(--semi-ai-general-5-3),1)}.semi-tag-colorful.semi-tag-light.semi-tag-gradient .semi-tag-content{background:var(--semi-color-ai-general);-webkit-background-clip:text;background-clip:text;color:transparent}.semi-tag-colorful.semi-tag-ghost{background:var(--semi-color-white);color:var(--semi-color-ai-purple);border-color:var(--semi-color-ai-general)}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient{border:none}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(1){stop-color:rgba(var(--semi-ai-general-5-0),1)}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(2){stop-color:rgba(var(--semi-ai-general-5-1),1)}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(3){stop-color:rgba(var(--semi-ai-general-5-2),1)}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(4){stop-color:rgba(var(--semi-ai-general-5-3),1)}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient.semi-tag-circle:before{border-radius:var(--semi-border-radius-full)}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:var(--semi-border-radius-small);padding:1px;background:var(--semi-color-ai-general);-webkit-mask:linear-gradient(var(--semi-color-white) 0 0) content-box,linear-gradient(var(--semi-color-white) 0 0);mask:linear-gradient(var(--semi-color-white) 0 0) content-box,linear-gradient(var(--semi-color-white) 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient .semi-tag-content{background:var(--semi-color-ai-general);-webkit-background-clip:text;background-clip:text;color:transparent}.semi-tag-group{display:block;height:auto}.semi-tag-group .semi-tag{margin-bottom:0;margin-right:8px}.semi-tag-group-max.semi-tag-group-small{height:22px}.semi-tag-group-max.semi-tag-group-large{height:26px}.semi-tag-rest-group-popover .semi-tag{margin-right:8px;margin-bottom:0}.semi-tag-rest-group-popover .semi-tag:last-of-type{margin-right:0}.semi-tag-amber-ghost{background-color:transparent;border:1px solid rgba(var(--semi-amber-4),1);color:rgba(var(--semi-amber-5),1)}.semi-tag-amber-solid{background-color:rgba(var(--semi-amber-5),1);color:rgba(var(--semi-white),1)}.semi-tag-amber-light{background-color:rgba(var(--semi-amber-5),.15);color:rgba(var(--semi-amber-8),1)}.semi-tag-blue-ghost{background-color:transparent;border:1px solid rgba(var(--semi-blue-4),1);color:rgba(var(--semi-blue-5),1)}.semi-tag-blue-solid{background-color:rgba(var(--semi-blue-5),1);color:rgba(var(--semi-white),1)}.semi-tag-blue-light{background-color:rgba(var(--semi-blue-5),.15);color:rgba(var(--semi-blue-8),1)}.semi-tag-cyan-ghost{background-color:transparent;border:1px solid rgba(var(--semi-cyan-4),1);color:rgba(var(--semi-cyan-5),1)}.semi-tag-cyan-solid{background-color:rgba(var(--semi-cyan-5),1);color:rgba(var(--semi-white),1)}.semi-tag-cyan-light{background-color:rgba(var(--semi-cyan-5),.15);color:rgba(var(--semi-cyan-8),1)}.semi-tag-green-ghost{background-color:transparent;border:1px solid rgba(var(--semi-green-4),1);color:rgba(var(--semi-green-5),1)}.semi-tag-green-solid{background-color:rgba(var(--semi-green-5),1);color:rgba(var(--semi-white),1)}.semi-tag-green-light{background-color:rgba(var(--semi-green-5),.15);color:rgba(var(--semi-green-8),1)}.semi-tag-grey-ghost{background-color:transparent;border:1px solid rgba(var(--semi-grey-4),1);color:rgba(var(--semi-grey-5),1)}.semi-tag-grey-solid{background-color:rgba(var(--semi-grey-5),1);color:rgba(var(--semi-white),1)}.semi-tag-grey-light{background-color:rgba(var(--semi-grey-5),.15);color:rgba(var(--semi-grey-8),1)}.semi-tag-indigo-ghost{background-color:transparent;border:1px solid rgba(var(--semi-indigo-4),1);color:rgba(var(--semi-indigo-5),1)}.semi-tag-indigo-solid{background-color:rgba(var(--semi-indigo-5),1);color:rgba(var(--semi-white),1)}.semi-tag-indigo-light{background-color:rgba(var(--semi-indigo-5),.15);color:rgba(var(--semi-indigo-8),1)}.semi-tag-light-blue-ghost{background-color:transparent;border:1px solid rgba(var(--semi-light-blue-4),1);color:rgba(var(--semi-light-blue-5),1)}.semi-tag-light-blue-solid{background-color:rgba(var(--semi-light-blue-5),1);color:rgba(var(--semi-white),1)}.semi-tag-light-blue-light{background-color:rgba(var(--semi-light-blue-5),.15);color:rgba(var(--semi-light-blue-8),1)}.semi-tag-light-green-ghost{background-color:transparent;border:1px solid rgba(var(--semi-light-green-4),1);color:rgba(var(--semi-light-green-5),1)}.semi-tag-light-green-solid{background-color:rgba(var(--semi-light-green-5),1);color:rgba(var(--semi-white),1)}.semi-tag-light-green-light{background-color:rgba(var(--semi-light-green-5),.15);color:rgba(var(--semi-light-green-8),1)}.semi-tag-lime-ghost{background-color:transparent;border:1px solid rgba(var(--semi-lime-4),1);color:rgba(var(--semi-lime-5),1)}.semi-tag-lime-solid{background-color:rgba(var(--semi-lime-5),1);color:rgba(var(--semi-white),1)}.semi-tag-lime-light{background-color:rgba(var(--semi-lime-5),.15);color:rgba(var(--semi-lime-8),1)}.semi-tag-orange-ghost{background-color:transparent;border:1px solid rgba(var(--semi-orange-4),1);color:rgba(var(--semi-orange-5),1)}.semi-tag-orange-solid{background-color:rgba(var(--semi-orange-5),1);color:rgba(var(--semi-white),1)}.semi-tag-orange-light{background-color:rgba(var(--semi-orange-5),.15);color:rgba(var(--semi-orange-8),1)}.semi-tag-pink-ghost{background-color:transparent;border:1px solid rgba(var(--semi-pink-4),1);color:rgba(var(--semi-pink-5),1)}.semi-tag-pink-solid{background-color:rgba(var(--semi-pink-5),1);color:rgba(var(--semi-white),1)}.semi-tag-pink-light{background-color:rgba(var(--semi-pink-5),.15);color:rgba(var(--semi-pink-8),1)}.semi-tag-purple-ghost{background-color:transparent;border:1px solid rgba(var(--semi-purple-4),1);color:rgba(var(--semi-purple-5),1)}.semi-tag-purple-solid{background-color:rgba(var(--semi-purple-5),1);color:rgba(var(--semi-white),1)}.semi-tag-purple-light{background-color:rgba(var(--semi-purple-5),.15);color:rgba(var(--semi-purple-8),1)}.semi-tag-red-ghost{background-color:transparent;border:1px solid rgba(var(--semi-red-4),1);color:rgba(var(--semi-red-5),1)}.semi-tag-red-solid{background-color:rgba(var(--semi-red-5),1);color:rgba(var(--semi-white),1)}.semi-tag-red-light{background-color:rgba(var(--semi-red-5),.15);color:rgba(var(--semi-red-8),1)}.semi-tag-teal-ghost{background-color:transparent;border:1px solid rgba(var(--semi-teal-4),1);color:rgba(var(--semi-teal-5),1)}.semi-tag-teal-solid{background-color:rgba(var(--semi-teal-5),1);color:rgba(var(--semi-white),1)}.semi-tag-teal-light{background-color:rgba(var(--semi-teal-5),.15);color:rgba(var(--semi-teal-8),1)}.semi-tag-violet-ghost{background-color:transparent;border:1px solid rgba(var(--semi-violet-4),1);color:rgba(var(--semi-violet-5),1)}.semi-tag-violet-solid{background-color:rgba(var(--semi-violet-5),1);color:rgba(var(--semi-white),1)}.semi-tag-violet-light{background-color:rgba(var(--semi-violet-5),.15);color:rgba(var(--semi-violet-8),1)}.semi-tag-yellow-ghost{background-color:transparent;border:1px solid rgba(var(--semi-yellow-4),1);color:rgba(var(--semi-yellow-5),1)}.semi-tag-yellow-solid{background-color:rgba(var(--semi-yellow-5),1);color:rgba(var(--semi-white),1)}.semi-tag-yellow-light{background-color:rgba(var(--semi-yellow-5),.15);color:rgba(var(--semi-yellow-8),1)}.semi-tag-white-ghost,.semi-tag-white-solid,.semi-tag-white-light{background-color:var(--semi-color-bg-4);border:1px solid rgba(var(--semi-grey-2),.7);color:var(--semi-color-text-0)}.semi-tag-white-ghost .semi-tag-close,.semi-tag-white-light .semi-tag-close,.semi-tag-white-solid .semi-tag-close{color:var(--semi-color-text-2)}.semi-tag-avatar-square,.semi-tag-avatar-circle{background-color:var(--semi-color-bg-4);border:1px solid var(--semi-color-border);color:var(--semi-color-text-0)}.semi-tag-split{display:inline-flex;align-items:center}.semi-tag-split .semi-tag{border-radius:0;margin-right:1px}.semi-tag-split .semi-tag-first{border-top-left-radius:var(--semi-border-radius-small);border-bottom-left-radius:var(--semi-border-radius-small)}.semi-tag-split .semi-tag-last{border-top-right-radius:var(--semi-border-radius-small);border-bottom-right-radius:var(--semi-border-radius-small);margin-right:unset}.semi-tag-split .semi-tag-circle.semi-tag-first{border-top-left-radius:var(--semi-border-radius-full);border-bottom-left-radius:var(--semi-border-radius-full)}.semi-tag-split .semi-tag-circle.semi-tag-last{border-top-right-radius:var(--semi-border-radius-full);border-bottom-right-radius:var(--semi-border-radius-full)}.semi-rtl .semi-tag,.semi-portal-rtl .semi-tag{direction:rtl}.semi-rtl .semi-tag-close,.semi-portal-rtl .semi-tag-close{padding-left:auto;padding-right:4px}.semi-rtl .semi-tag-closable,.semi-portal-rtl .semi-tag-closable{padding:4px 8px 4px 4px}.semi-rtl .semi-tag-avatar-square .semi-avatar,.semi-rtl .semi-tag-avatar-circle .semi-avatar,.semi-portal-rtl .semi-tag-avatar-square .semi-avatar,.semi-portal-rtl .semi-tag-avatar-circle .semi-avatar{margin-right:auto;margin-left:4px}.semi-rtl .semi-tag-avatar-square,.semi-portal-rtl .semi-tag-avatar-square{padding-right:auto;padding-left:4px}.semi-rtl .semi-tag-avatar-circle,.semi-portal-rtl .semi-tag-avatar-circle{padding:2px 2px 2px 4px}.semi-rtl .semi-tag-group,.semi-portal-rtl .semi-tag-group{direction:rtl}.semi-rtl .semi-tag-group .semi-tag,.semi-portal-rtl .semi-tag-group .semi-tag{margin-right:auto;margin-left:8px}.semi-rtl .semi-tag-rest-group-popover,.semi-portal-rtl .semi-tag-rest-group-popover{direction:rtl}.semi-rtl .semi-tag-rest-group-popover .semi-tag,.semi-portal-rtl .semi-tag-rest-group-popover .semi-tag{margin-right:0;margin-left:8px}.semi-rtl .semi-tag-rest-group-popover .semi-tag:last-of-type,.semi-portal-rtl .semi-tag-rest-group-popover .semi-tag:last-of-type{margin-right:auto;margin-left:0}.semi-empty{display:flex}.semi-empty-image{display:flex;justify-content:center;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;pointer-events:none}.semi-empty-vertical{align-items:center;flex-direction:column}.semi-empty-vertical .semi-empty-content{margin-top:24px}.semi-empty-vertical .semi-empty-title,.semi-empty-vertical .semi-empty-description{text-align:center}.semi-empty-horizontal .semi-empty-content{margin-left:32px}.semi-empty-title.semi-typography{display:block;font-weight:600}.semi-empty-title+.semi-empty-description{margin-top:16px}.semi-empty-description{color:var(--semi-color-text-1)}.semi-empty-footer{margin-top:24px}.semi-rtl .semi-empty,.semi-portal-rtl .semi-empty{direction:rtl}.semi-rtl .semi-empty-horizontal .semi-empty-content,.semi-portal-rtl .semi-empty-horizontal .semi-empty-content{margin-left:auto;margin-right:32px}.semi-modal{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;position:relative;margin:80px auto;color:var(--semi-color-text-0)}.semi-modal-mask{position:fixed;top:0;right:0;left:0;bottom:0;background-color:var(--semi-color-overlay-bg);-webkit-backdrop-filter:none;backdrop-filter:none;height:100%;z-index:1000}.semi-modal-mask-hidden{display:none}.semi-modal-icon-wrapper{display:inline-flex;margin-right:12px;width:24px}.semi-modal-wrap{position:fixed;overflow:auto;top:0;right:0;bottom:0;left:0;z-index:1000;-webkit-overflow-scrolling:touch;outline:0}.semi-modal-wrap-center{display:flex;align-items:flex-start}.semi-modal-title{display:inline-flex;align-items:flex-start;justify-content:flex-start;width:100%;margin:0}.semi-modal-content{position:relative;display:flex;height:max-content;width:100%;box-sizing:border-box;flex-direction:column;background-color:var(--semi-color-bg-2);-webkit-backdrop-filter:none;backdrop-filter:none;border:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-large);padding:0 24px;background-clip:padding-box;overflow:hidden;box-shadow:var(--semi-shadow-elevated)}.semi-modal-footerfill{display:flex}.semi-modal-content-height-set{height:100%}.semi-modal-content-fullScreen{border-radius:0;border:none;height:100%;top:0}.semi-modal-header{display:flex;align-items:flex-start;margin:24px 0;padding:0;font-size:14px;font-weight:600;background-color:transparent;color:var(--semi-color-text-0);border-bottom:0 solid transparent}.semi-modal-body-wrapper{display:flex;align-items:flex-start;margin:24px 0}.semi-modal-body{flex:1 1 auto;margin:0;padding:0}.semi-modal-withIcon{margin-left:36px}.semi-modal-footer{margin:24px 0;padding:0;text-align:right;border-radius:0 0 5px 5px;border-top:0 solid transparent;background-color:transparent}.semi-modal-footer .semi-button{margin-left:12px;margin-right:0}.semi-modal-confirm .semi-modal-header{margin-bottom:8px}.semi-modal-confirm-icon-wrapper{display:inline-flex;margin-right:12px;width:24px}.semi-modal-confirm-icon{display:inline-flex;color:var(--semi-color-primary)}.semi-modal-info-icon{color:var(--semi-color-info)}.semi-modal-success-icon{color:var(--semi-color-success)}.semi-modal-error-icon{color:var(--semi-color-danger)}.semi-modal-warning-icon{color:var(--semi-color-warning)}.semi-modal-small{width:448px}.semi-modal-medium{width:684px}.semi-modal-large{width:920px}.semi-modal-full-width{width:calc(100vw - 64px)}.semi-modal-centered{margin:auto}.semi-modal-popup .semi-modal-mask,.semi-modal-popup .semi-modal-wrap{position:absolute;overflow:hidden}.semi-modal-fixed .semi-modal-mask,.semi-modal-fixed .semi-modal-wrap{position:fixed;overflow:hidden}.semi-modal-displayNone{display:none}.semi-modal-content-animate-show{animation:.12s semi-modal-content-keyframe-show cubic-bezier(.215,.61,.355,1) 0ms forwards;animation-fill-mode:forwards}.semi-modal-content-animate-hide{animation:.12s semi-modal-content-keyframe-hide cubic-bezier(.215,.61,.355,1) 0ms forwards;animation-fill-mode:forwards}.semi-modal-mask-animate-show{animation:90ms semi-modal-mask-keyframe-show cubic-bezier(.215,.61,.355,1) 0ms forwards;animation-fill-mode:forwards}.semi-modal-mask-animate-hide{animation:90ms semi-modal-mask-keyframe-hide cubic-bezier(.215,.61,.355,1) 0ms forwards;animation-fill-mode:forwards}@keyframes semi-modal-content-keyframe-show{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}@keyframes semi-modal-content-keyframe-hide{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.7)}}@keyframes semi-modal-mask-keyframe-show{0%{opacity:0}to{opacity:1}}@keyframes semi-modal-mask-keyframe-hide{0%{opacity:1}to{opacity:0}}.semi-modal-rtl{direction:rtl}.semi-modal-rtl .semi-modal-icon-wrapper,.semi-modal-confirm-rtl .semi-modal-icon-wrapper{margin-right:0;margin-left:12px}.semi-modal-rtl .semi-modal-withIcon,.semi-modal-confirm-rtl .semi-modal-withIcon{margin-left:0;margin-right:36px}.semi-modal-rtl .semi-modal-footer,.semi-modal-confirm-rtl .semi-modal-footer{text-align:left}.semi-modal-rtl .semi-modal-footer .semi-button,.semi-modal-confirm-rtl .semi-modal-footer .semi-button{margin-left:0;margin-right:12px}.semi-modal-confirm-rtl{direction:rtl}.semi-modal-confirm .semi-modal-confirm-rtl .semi-button{margin-left:0;margin-right:12px}.semi-dropdown{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-dropdown-wrapper{overflow-y:auto;box-shadow:var(--semi-shadow-elevated);position:relative;z-index:1050;border-radius:var(--semi-border-radius-medium);background:var(--semi-color-bg-3);-webkit-backdrop-filter:none;backdrop-filter:none;opacity:0}.semi-dropdown-wrapper-show{opacity:1}.semi-dropdown-trigger{display:inline-block}.semi-dropdown-menu{list-style:none;padding:4px 0;margin:0}.semi-dropdown-title{color:var(--semi-color-text-2);padding:8px 16px 4px;font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:default}.semi-dropdown-title-withTick{padding-left:31px}.semi-dropdown-item{padding:8px 16px;color:var(--semi-color-text-0);max-width:280px;display:flex;align-items:center;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeOut) 0ms;border-radius:0}.semi-dropdown-item-hover{background-color:var(--semi-color-fill-0)}.semi-dropdown-item:not(.semi-dropdown-item-active):hover{background-color:var(--semi-color-fill-0);cursor:pointer}.semi-dropdown-item:not(.semi-dropdown-item-active):active{background-color:var(--semi-color-fill-1)}.semi-dropdown-item:focus-visible{background-color:var(--semi-color-fill-0);outline:0}.semi-dropdown-item-icon{display:inline-flex;align-items:center;margin-right:8px}.semi-dropdown-item-danger{color:var(--semi-color-danger)}.semi-dropdown-item-secondary{color:var(--semi-color-secondary)}.semi-dropdown-item-warning{color:var(--semi-color-warning)}.semi-dropdown-item-tertiary{color:var(--semi-color-tertiary)}.semi-dropdown-item-primary{color:var(--semi-color-primary)}.semi-dropdown-item-withTick{padding-left:12px}.semi-dropdown-item>.semi-icon{flex-shrink:0;margin-right:9px;font-size:12px}.semi-dropdown-item-active{font-weight:600}.semi-dropdown-item.semi-dropdown-item-disabled{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-dropdown-item.semi-dropdown-item-disabled:hover,.semi-dropdown-item.semi-dropdown-item-disabled:active{cursor:not-allowed;background-color:transparent}.semi-dropdown-divider{display:block;height:1px;width:100%;min-width:100%;clear:both;background:var(--semi-color-border);margin:4px 0}.semi-rtl .semi-dropdown-wrapper,.semi-portal-rtl .semi-dropdown-wrapper{direction:rtl}.semi-rtl .semi-dropdown-title-withTick,.semi-portal-rtl .semi-dropdown-title-withTick{padding-left:0;padding-right:31px}.semi-rtl .semi-dropdown-item-withTick,.semi-portal-rtl .semi-dropdown-item-withTick{padding-left:auto;padding-right:12px}.semi-rtl .semi-dropdown-item>.semi-icon,.semi-portal-rtl .semi-dropdown-item>.semi-icon{margin-right:0;margin-left:9px}.semi-input-number{display:inline-flex;align-items:center;box-sizing:border-box;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-input-number-suffix-btns{display:inline-flex;flex-direction:column;margin-left:4px;border:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-small);background-color:var(--semi-color-bg-2);box-sizing:border-box}.semi-input-number-suffix-btns>.semi-input-number-button{height:50%;width:14px;padding:0;margin:0;display:inline-flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:0;color:var(--semi-color-text-2)}.semi-input-number-suffix-btns>.semi-input-number-button-up:not(.semi-input-number-button-up-not-allowed):hover,.semi-input-number-suffix-btns>.semi-input-number-button-down:not(.semi-input-number-button-down-not-allowed):hover{cursor:pointer;background-color:var(--semi-color-fill-0)}.semi-input-number-suffix-btns>.semi-input-number-button-up:not(.semi-input-number-button-up-not-allowed):active,.semi-input-number-suffix-btns>.semi-input-number-button-down:not(.semi-input-number-button-down-not-allowed):active{cursor:pointer;background-color:var(--semi-color-fill-1)}.semi-input-number-suffix-btns>.semi-input-number-button-up.semi-input-number-button-up-disabled,.semi-input-number-suffix-btns>.semi-input-number-button-down.semi-input-number-button-down-disabled{background-color:var(--semi-color-disabled-fill);color:var(--semi-color-disabled-text)}.semi-input-number-suffix-btns>.semi-input-number-button-up.semi-input-number-button-up-not-allowed,.semi-input-number-suffix-btns>.semi-input-number-button-down.semi-input-number-button-down-not-allowed{cursor:not-allowed}.semi-input-number-suffix-btns-inner-hover{border-color:var(--semi-color-fill-2)}.semi-input-number-suffix-btns-inner{margin-left:8px;border-radius:var(--semi-border-radius-small);overflow:hidden}.semi-input-number .semi-input-clearbtn+.semi-input-suffix{margin-left:-4px}.semi-input-number .semi-input-clearbtn+.semi-input-suffix .semi-input-number-suffix-btns-inner{margin-left:0}.semi-input-number-size-default .semi-input-number-suffix-btns{height:32px}.semi-input-number-size-default .semi-input-number-suffix-btns-inner{height:30px}.semi-input-number-size-large .semi-input-number-suffix-btns{height:40px}.semi-input-number-size-large .semi-input-number-suffix-btns-inner{height:38px}.semi-input-number-size-small .semi-input-number-suffix-btns{height:24px}.semi-input-number-size-small .semi-input-number-suffix-btns-inner{height:22px}.semi-input-number:not(:focus-within):not(:hover) .semi-input-borderless+.semi-input-number-suffix-btns{opacity:0}.semi-rtl .semi-input-number,.semi-portal-rtl .semi-input-number{direction:rtl}.semi-rtl .semi-input-number-suffix-btns,.semi-portal-rtl .semi-input-number-suffix-btns{margin-left:auto;margin-right:4px}.semi-rtl .semi-input-number-suffix-btns-inner,.semi-portal-rtl .semi-input-number-suffix-btns-inner{margin-left:auto;margin-right:8px}.semi-rtl .semi-input-number .semi-input-clearbtn+.semi-input-suffix,.semi-portal-rtl .semi-input-number .semi-input-clearbtn+.semi-input-suffix{margin-left:auto;margin-right:-4px}.semi-rtl .semi-input-number .semi-input-clearbtn+.semi-input-suffix .semi-input-number-suffix-btns-inner,.semi-portal-rtl .semi-input-number .semi-input-clearbtn+.semi-input-suffix .semi-input-number-suffix-btns-inner{margin-left:auto;margin-right:0}.semi-radio{box-sizing:border-box;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;position:relative;display:inline-flex;column-gap:8px;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);min-height:20px;min-width:16px;cursor:pointer;vertical-align:bottom;text-align:left}.semi-radio.semi-radio-vertical{display:block}.semi-radio input[type=checkbox],.semi-radio input[type=radio]{position:absolute;left:0;top:0;opacity:0;width:100%;height:100%;margin:0;cursor:pointer}.semi-radio:hover .semi-radio-inner-display{background:var(--semi-color-fill-0);border:solid 1px var(--semi-color-focus-border)}.semi-radio:hover.semi-radio-cardRadioGroup .semi-radio-inner-display{background:var(--semi-color-white)}.semi-radio:hover .semi-radio-inner-checked .semi-radio-inner-display{background:var(--semi-color-primary-hover);border-color:var(--semi-color-primary-hover)}.semi-radio:active.semi-radio-cardRadioGroup .semi-radio-inner-display{background:var(--semi-color-white)}.semi-radio:active .semi-radio-inner-checked .semi-radio-inner-display{background:var(--semi-color-primary-active);border-color:var(--semi-color-primary-active)}.semi-radio-buttonRadioComponent{padding:4px;background:var(--semi-color-fill-0);border-radius:var(--semi-border-radius-small)}.semi-radio-buttonRadioGroup{position:relative;padding:4px;border-radius:var(--semi-border-radius-small);line-height:16px}.semi-radio-buttonRadioGroup:not(:last-child){padding-right:0}.semi-radio-buttonRadioGroup-small{padding:2px 4px;line-height:16px}.semi-radio-buttonRadioGroup-large{padding:4px;line-height:20px}.semi-radio-cardRadioGroup{flex-wrap:nowrap;border-radius:var(--semi-border-radius-small);padding:12px 16px;background:transparent;border:1px solid transparent;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-radio-cardRadioGroup .semi-radio-inner{flex-shrink:0}.semi-radio-cardRadioGroup .semi-radio-inner-display{background:var(--semi-color-white)}.semi-radio-cardRadioGroup .semi-radio-addon{font-weight:600;font-size:14px;line-height:20px;color:var(--semi-color-text-0)}.semi-radio-cardRadioGroup .semi-radio-extra{font-weight:400;font-size:14px;line-height:20px;color:var(--semi-color-text-2);padding-left:0}.semi-radio-cardRadioGroup:active{background:var(--semi-color-fill-1)}.semi-radio-cardRadioGroup_checked{background:var(--semi-color-primary-light-default);border:1px solid var(--semi-color-primary)}.semi-radio-cardRadioGroup_checked:hover{border:1px solid var(--semi-color-primary-hover)}.semi-radio-cardRadioGroup_checked:hover .semi-radio-inner-checked .semi-radio-inner-display{border-color:var(--semi-color-primary-hover)}.semi-radio-cardRadioGroup_checked:active{background:var(--semi-color-primary-light-default);border:1px solid var(--semi-color-primary-active)}.semi-radio-cardRadioGroup_checked:active .semi-radio-inner-checked .semi-radio-inner-display{border-color:var(--semi-color-primary-active)}.semi-radio-cardRadioGroup_checked:active .semi-radio-inner-checked:hover .semi-radio-inner-display{background:var(--semi-color-primary-active)}.semi-radio-cardRadioGroup_hover{background:var(--semi-color-fill-0)}.semi-radio-cardRadioGroup_disabled:active{background:transparent}.semi-radio-cardRadioGroup_checked_disabled.semi-radio-cardRadioGroup{background:var(--semi-color-primary-light-default);border:1px solid var(--semi-color-primary-disabled)}.semi-radio-cardRadioGroup_checked_disabled.semi-radio-cardRadioGroup .semi-radio-inner-checked .semi-radio-inner-display,.semi-radio-cardRadioGroup_checked_disabled.semi-radio-cardRadioGroup:hover .semi-radio-inner-checked .semi-radio-inner-display{border-color:var(--semi-color-primary-disabled)}.semi-radio.semi-radio-disabled:hover .semi-radio-inner-display,.semi-radio.semi-radio-disabled:active .semi-radio-inner-display{background:var(--semi-color-disabled-fill);border:solid 1px var(--semi-color-border)}.semi-radio.semi-radio-disabled:hover .semi-radio-inner-checked .semi-radio-inner-display,.semi-radio.semi-radio-disabled:active .semi-radio-inner-checked .semi-radio-inner-display{color:rgba(var(--semi-white),1);background:var(--semi-color-primary-disabled);border-color:var(--semi-color-primary-disabled)}.semi-radio-inner{display:inline-flex;margin-top:2px;position:relative;width:16px;height:16px;vertical-align:sub;-webkit-user-select:none;user-select:none}.semi-radio-inner-display{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:16px;height:16px;border:solid 1px var(--semi-color-text-3);border-radius:16px;background:transparent;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-radio-inner-display .semi-icon{width:100%;height:100%;font-size:14px}.semi-radio-content{display:flex;flex-direction:column;row-gap:4px}.semi-radio:hover .semi-radio-inner-display{background:var(--semi-color-fill-0)}.semi-radio:active .semi-radio-inner-display{background:var(--semi-color-fill-1)}.semi-radio-addon{-webkit-user-select:none;user-select:none;color:var(--semi-color-text-0);display:inline-flex;align-items:center}.semi-radio-addon-buttonRadio{text-align:center;border-radius:var(--semi-border-radius-small);font-weight:600;color:var(--semi-color-text-1);font-size:12px;padding:4px 16px;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-radio-addon-buttonRadio-hover{font-weight:600;background:var(--semi-color-fill-1)}.semi-radio-addon-buttonRadio-checked{font-weight:600;background:var(--semi-color-bg-3);color:var(--semi-color-primary)}.semi-radio-addon-buttonRadio-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text)}.semi-radio-addon-buttonRadio-small{font-size:12px;padding:2px 16px}.semi-radio-addon-buttonRadio-large{font-size:14px;padding:6px 24px}.semi-radio .semi-radio-inner-checked:hover .semi-radio-inner-display{background:var(--semi-color-primary-hover)}.semi-radio .semi-radio-inner-checked:active .semi-radio-inner-display{background:var(--semi-color-primary-active)}.semi-radio .semi-radio-inner-checked .semi-radio-inner-display{border:solid 1px var(--semi-color-primary);background:var(--semi-color-primary);color:rgba(var(--semi-white),1);border-radius:16px}.semi-radio .semi-radio-inner-checked>.semi-radio-addon{color:var(--semi-color-text-0)}.semi-radio .semi-radio-inner-buttonRadio,.semi-radio .semi-radio-inner-pureCardRadio{position:absolute;top:0;left:0;width:100%;height:100%;margin-top:0;z-index:-1;opacity:0}.semi-radio-disabled,.semi-radio-disabled:hover,.semi-radio-disabled .semi-radio-inner{cursor:not-allowed}.semi-radio-disabled .semi-radio-inner-display{opacity:.75;background:var(--semi-color-disabled-fill);border-color:var(--semi-color-border)}.semi-radio-disabled .semi-radio-inner-display:hover{background:transparent}.semi-radio-disabled .semi-radio-inner-checked .semi-radio-inner-display,.semi-radio-disabled .semi-radio-inner-checked .semi-radio-inner-display:hover{color:rgba(var(--semi-white),1);background:var(--semi-color-primary-disabled);border-color:var(--semi-color-primary-disabled)}.semi-radio-disabled .semi-radio-addon,.semi-radio-disabled .semi-radio-extra{color:var(--semi-color-disabled-text)}.semi-radio-extra{color:var(--semi-color-text-2);box-sizing:border-box}.semi-radio-focus{outline:2px solid var(--semi-color-primary-light-active)}.semi-radio-focus-border{border:solid 1px var(--semi-color-focus-border)}.semi-radioGroup{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-radioGroup-vertical{display:flex;flex-direction:column;row-gap:12px}.semi-radioGroup-vertical-default .semi-radio,.semi-radioGroup-vertical-card .semi-radio{display:flex}.semi-radioGroup-horizontal{display:inline-flex;flex-wrap:wrap;vertical-align:bottom;gap:16px}.semi-radioGroup-buttonRadio{display:inline-block;background:var(--semi-color-fill-0);border-radius:var(--semi-border-radius-small);vertical-align:middle}.semi-rtl .semi-radio,.semi-portal-rtl .semi-radio{direction:rtl}.semi-rtl .semi-radio input[type=checkbox],.semi-rtl .semi-radio input[type=radio],.semi-portal-rtl .semi-radio input[type=checkbox],.semi-portal-rtl .semi-radio input[type=radio]{left:auto;right:0}.semi-rtl .semi-radio-buttonRadioGroup:not(:last-child),.semi-portal-rtl .semi-radio-buttonRadioGroup:not(:last-child){padding-left:0}.semi-rtl .semi-radioGroup,.semi-portal-rtl .semi-radioGroup{direction:rtl}.semi-toast{pointer-events:none}.semi-toast-wrapper{position:fixed;height:0;top:0;width:100%;display:flex;justify-content:center;z-index:1010}.semi-toast-wrapper .semi-toast-innerWrapper{width:fit-content;height:fit-content;text-align:center}.semi-toast-wrapper .semi-toast-innerWrapper-hover .semi-toast-zero-height-wrapper{perspective:unset;perspective-origin:center center}.semi-toast-zero-height-wrapper{transition:all .3s cubic-bezier(.22,.57,.02,1.2);perspective-origin:center 280px;perspective:280px;height:0;overflow:visible}.semi-toast-content{pointer-events:all;box-shadow:var(--semi-shadow-elevated);font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;background-color:var(--semi-color-bg-3);border-radius:var(--semi-border-radius-medium);padding:12px 8px;display:inline-flex;align-items:flex-start;justify-content:center;margin:12px;font-weight:600;color:var(--semi-color-text-0)}.semi-toast-content .semi-toast-close-button{margin-top:-2px;height:20px}.semi-toast-content .semi-toast-content-text{margin-left:12px;margin-right:12px;text-align:left;word-wrap:break-word;overflow-wrap:break-word}.semi-toast-light.semi-toast-warning .semi-toast-content{background-color:var(--semi-color-warning-light-default);border:1px solid var(--semi-color-warning)}.semi-toast-light.semi-toast-warning .semi-toast-icon-warning{color:var(--semi-color-warning)}.semi-toast-light.semi-toast-success .semi-toast-content{background-color:var(--semi-color-success-light-default);border:1px solid var(--semi-color-success)}.semi-toast-light.semi-toast-success .semi-toast-icon-success{color:var(--semi-color-success)}.semi-toast-light.semi-toast-info .semi-toast-content{background-color:var(--semi-color-info-light-default);border:1px solid var(--semi-color-info)}.semi-toast-light.semi-toast-info .semi-toast-icon-info{color:var(--semi-color-info)}.semi-toast-light.semi-toast-error .semi-toast-content{background-color:var(--semi-color-danger-light-default);border:1px solid var(--semi-color-danger)}.semi-toast-light.semi-toast-error .semi-toast-icon-error{color:var(--semi-color-danger)}.semi-toast .semi-toast-icon-warning{color:var(--semi-color-warning)}.semi-toast .semi-toast-icon-success{color:var(--semi-color-success)}.semi-toast .semi-toast-icon-info{color:var(--semi-color-info)}.semi-toast .semi-toast-icon-error{color:var(--semi-color-danger)}.semi-toast-animation-show{animation:.3s semi-toast-keyframe-toast-show cubic-bezier(.22,.57,.02,1.2) 0s;animation-fill-mode:forwards}.semi-toast-animation-hide{animation:.3s semi-toast-keyframe-toast-hide cubic-bezier(.22,.57,.02,1.2) 0s;animation-fill-mode:forwards}@keyframes semi-toast-keyframe-toast-show{0%{opacity:0;transform:translateY(-100%)}to{opacity:1}}@keyframes semi-toast-keyframe-toast-hide{0%{opacity:1}to{opacity:0;transform:translateY(-100%)}}.semi-toast-rtl{direction:rtl}.semi-toast-rtl .semi-toast-content .semi-toast-content-text{text-align:right;margin-left:12px;margin-right:12px}.semi-resizable-resizable{position:relative;box-sizing:border-box;flex-shrink:0}.semi-resizable-resizableHandler{position:absolute;-webkit-user-select:none;user-select:none;z-index:10}.semi-resizable-resizableHandler-top{width:100%;height:10px;left:0;cursor:row-resize;top:-5px}.semi-resizable-resizableHandler-right{width:10px;height:100%;top:0;cursor:col-resize;left:auto;right:-5px}.semi-resizable-resizableHandler-bottom{width:100%;height:10px;left:0;cursor:row-resize;top:auto;bottom:-5px}.semi-resizable-resizableHandler-left{width:10px;height:100%;top:0;cursor:col-resize;left:-5px}.semi-resizable-resizableHandler-topRight{width:20px;height:20px;position:absolute;right:-10px;top:-10px;cursor:ne-resize}.semi-resizable-resizableHandler-bottomRight{width:20px;height:20px;position:absolute;right:-10px;bottom:-10px;cursor:se-resize}.semi-resizable-resizableHandler-bottomLeft{width:20px;height:20px;position:absolute;left:-10px;bottom:-10px;cursor:sw-resize}.semi-resizable-resizableHandler-topLeft{width:20px;height:20px;position:absolute;left:-10px;top:-10px;cursor:nw-resize}.semi-resizable-group{display:flex;position:relative;box-sizing:border-box;height:100%;width:100%}.semi-resizable-item{position:relative;box-sizing:border-box;flex-shrink:0}.semi-resizable-handler{-webkit-user-select:none;user-select:none;z-index:10;display:flex;align-items:center;justify-content:center;background-color:var(--semi-color-fill-0);opacity:1}.semi-resizable-handler-vertical{width:100%;height:10px;flex-shrink:0;cursor:row-resize}.semi-resizable-handler-horizontal{height:100%;width:10px;flex-shrink:0;cursor:col-resize}.semi-resizable-background{height:100%;width:100%;top:0;right:0;bottom:0;left:0;z-index:20;opacity:0;position:fixed}.ga-log-tail{position:relative;height:100%;min-height:0}.ga-log-tail-copy{position:absolute;top:6px;right:8px;z-index:2;padding:2px 5px;border:none;border-radius:4px;background:var(--semi-color-fill-0, rgba(0, 0, 0, .04));color:var(--ui-text-tertiary);font-size:.75rem;cursor:pointer;opacity:.05;transition:opacity .15s}.ga-log-tail:hover .ga-log-tail-copy,.ga-log-tail-copy:focus-visible{opacity:1}.ga-log-tail-copy.copied{opacity:1;color:var(--ui-accent, #0053fd)}.ga-log-tail-scroll{height:100%;min-height:0;overflow-y:auto;scrollbar-width:thin;scrollbar-gutter:stable}.ga-log-tail-pre{margin:0;padding:8px 10px;font-family:var(--font-mono);font-size:.6875rem;line-height:1.5;white-space:pre-wrap;word-break:break-all;color:var(--semi-color-text-1);-webkit-user-select:text;user-select:text}.ga-log-tail-empty{margin:0;padding:8px 10px;font-family:var(--font-mono);font-size:.6875rem;line-height:1.5;color:var(--ui-text-quaternary)}.ga-log-separator{display:block;margin-top:4px;color:var(--ui-text-tertiary)}.ga-log-view{overflow:auto;border-radius:8px;border:1px solid var(--ui-stroke-tertiary, rgba(0, 0, 0, .06));padding:6px 10px;font-family:var(--font-mono);font-size:.6875rem;line-height:1.5;white-space:pre-wrap;word-break:break-all;color:var(--ui-text-tertiary);scrollbar-width:thin;-webkit-user-select:text;user-select:text}.ga-log-modal-body,.ga-log-modal-body .ga-log-tail-scroll{max-height:calc(85vh - 80px)}[data-slot=approval-card]{border:1px solid color-mix(in srgb,var(--semi-color-primary, #3370ff) 20%,transparent);border-radius:.5rem;padding:.625rem .75rem;background:var(--semi-color-bg-0, #fff)}[data-slot=approval-card][data-settled]{opacity:.6;pointer-events:none}[data-slot=approval-card][data-submitting]{pointer-events:none}[data-slot=approval-question]{font-size:var(--conversation-text-font-size, .875rem);line-height:1.5;color:var(--semi-color-text-0);white-space:pre-wrap;word-break:break-word;margin-bottom:.5rem}[data-slot=approval-options]{display:flex;flex-direction:column;gap:.25rem}[data-slot=approval-option-row]{display:flex;align-items:center;gap:.5rem;padding:.375rem .5rem;border-radius:.25rem;border:none;background:transparent;cursor:pointer;text-align:left;font-size:var(--conversation-text-font-size, .875rem);color:var(--semi-color-text-0);transition:background .12s ease-out;overflow-wrap:anywhere}[data-slot=approval-option-row]:hover,[data-slot=approval-option-row][data-selected]{background:var(--semi-color-fill-0)}[data-slot=approval-option-row]:disabled{cursor:default;opacity:.7}[data-slot=approval-badge]{display:inline-flex;align-items:center;justify-content:center;min-width:1.125rem;height:.75rem;padding:.125rem .25rem;font-size:.6875rem;font-family:inherit;font-weight:600;line-height:1;border-radius:.1875rem;border:1px solid var(--semi-color-border);background:var(--semi-color-bg-0, #fff);color:var(--semi-color-text-2);flex-shrink:0;transition:background .12s,border-color .12s,color .12s}[data-slot=approval-badge][data-active]{background:var(--semi-color-primary, #3370ff);border-color:var(--semi-color-primary, #3370ff);color:#fff}[data-slot=approval-other]{display:flex;align-items:flex-start;gap:.5rem;padding:.375rem .5rem;border-radius:.25rem}[data-slot=approval-other]>[data-slot=approval-badge]{margin-top:.25rem}[data-slot=approval-other-input]{flex:1;field-sizing:content;min-height:1.5em;max-height:10rem;padding:.25rem .375rem;font-size:var(--conversation-text-font-size, .875rem);font-family:inherit;line-height:1.5;color:var(--semi-color-text-0);background:var(--semi-color-fill-0);border:1px solid var(--semi-color-border);border-radius:.25rem;resize:none;overflow-y:auto;transition:border-color .12s}[data-slot=approval-other-input]:focus{outline:none;border-color:var(--semi-color-primary, #3370ff)}[data-slot=approval-other-input][data-fullwidth]{width:100%}[data-slot=approval-other-input]:disabled{opacity:.7;cursor:default}[data-slot=approval-actions]{display:flex;justify-content:flex-end;align-items:center;gap:.5rem;margin-top:.5rem}[data-slot=approval-skip-btn]{padding:.25rem .625rem;font-size:.75rem;font-weight:500;color:var(--semi-color-text-2);background:transparent;border:none;border-radius:.25rem;cursor:pointer;transition:color .12s,background .12s}[data-slot=approval-skip-btn]:hover{color:var(--semi-color-text-0);background:var(--semi-color-fill-0)}[data-slot=approval-skip-btn]:disabled{cursor:default;opacity:.5}[data-slot=approval-confirm-btn]{display:inline-flex;align-items:center;gap:.375rem;padding:.25rem .75rem;font-size:.75rem;font-weight:500;color:#fff;background:var(--semi-color-primary, #3370ff);border:none;border-radius:.25rem;cursor:pointer;transition:opacity .12s,background .12s}[data-slot=approval-confirm-btn]:hover:not(:disabled){opacity:.85}[data-slot=approval-confirm-btn]:disabled{cursor:default;opacity:.45}[data-slot=approval-spinner]{display:inline-block;width:.75rem;height:.75rem;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:approval-spin .6s linear infinite}@keyframes approval-spin{to{transform:rotate(360deg)}}[data-slot=approval-settled]{margin-top:.25rem;font-size:var(--conversation-caption-font-size, .8125rem);color:var(--semi-color-text-2)}[data-slot=approval-settled] em{font-style:italic;color:var(--semi-color-text-3)}[data-slot=assistant-action-bar]{display:flex;align-items:center;justify-content:flex-end;min-height:1.5rem;gap:.25rem;padding-right:var(--message-text-indent);padding-left:var(--message-text-indent);opacity:0;pointer-events:none;transition:opacity .12s ease-out}[data-slot=aui_assistant-message-root]:hover [data-slot=assistant-action-bar],[data-slot=aui_assistant-message-root]:focus-within [data-slot=assistant-action-bar]{opacity:1;pointer-events:auto}[data-slot=action-bar-btn]{display:grid;width:1.5rem;height:1.5rem;place-items:center;border:none;border-radius:.25rem;background:none;color:var(--semi-color-text-2);cursor:pointer;transition:color .1s,background .1s}[data-slot=action-bar-btn]:hover{background:var(--semi-color-fill-1);color:var(--semi-color-text-0)}[data-slot=user-turn-rail]{position:absolute;right:0;top:50%;transform:translateY(-50%);z-index:100;pointer-events:none}[data-slot=rail-hitarea]{position:relative;display:flex;align-items:center;justify-content:flex-end;padding:.5rem;pointer-events:auto}[data-slot=user-turn-rail][data-expanded] [data-slot=rail-hitarea]:before{content:"";position:absolute;top:0;bottom:0;right:0;left:-260px;pointer-events:auto}[data-slot=rail-marks]{display:flex;flex-direction:column;align-items:flex-end;gap:.25rem}[data-slot=user-turn-rail][data-expanded] [data-slot=rail-marks]{visibility:hidden}[data-slot=rail-mark]{width:2.5rem;height:.5rem;display:flex;align-items:center;justify-content:flex-end;border:none;padding:0;margin:0;background:transparent;cursor:pointer}[data-slot=rail-mark-line]{width:1rem;height:2px;border-radius:999px;background:var(--semi-color-fill-2);transition:background-color .12s ease}[data-slot=rail-mark][data-active] [data-slot=rail-mark-line]{background:var(--semi-color-text-0)}[data-slot=rail-panel]{position:absolute;right:calc(100% - .5rem);top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:1px;max-width:240px;min-width:140px;padding:.25rem;border-radius:.5rem;background:var(--semi-color-bg-3, #2a2a2a);box-shadow:0 2px 12px #00000026;opacity:0;pointer-events:none;transition:opacity .12s ease}[data-slot=user-turn-rail][data-expanded] [data-slot=rail-panel]{opacity:1;pointer-events:auto}[data-slot=rail-panel-item]{display:block;width:100%;padding:.3rem .5rem;border:none;border-radius:.25rem;background:transparent;color:var(--semi-color-text-2);font-size:.75rem;line-height:1.4;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;transition:background-color .1s ease}[data-slot=rail-panel-item]:hover,[data-slot=rail-panel-item][data-active]{background:var(--semi-color-fill-1);color:var(--semi-color-text-0)}[data-slot=rail-mark]:focus-visible [data-slot=rail-mark-line]{box-shadow:0 0 0 2px var(--semi-color-primary-light-default, rgba(0, 100, 250, .2))}[data-slot=rail-mark]:focus-visible{outline:none}@media(max-width:900px){[data-slot=user-turn-rail]{display:none}}:root{--conversation-text-font-size: .8125rem;--conversation-tool-font-size: .6875rem;--conversation-caption-font-size: .75rem;--conversation-line-height: 1.125rem;--conversation-caption-line-height: 1rem;--conversation-turn-gap: .375rem;--turn-block-gap: .75rem;--tool-row-gap: .375rem;--paragraph-gap: .7rem;--sticky-human-top: .23rem;--message-text-indent: .75rem;--dt-line-height: 1.5;--human-msg-line-height: 1.3;--composer-width: 780px;--thread-last-message-clearance: calc(var(--composer-measured-height, 62px) + 2rem)}[data-slot=thread-root]{position:relative;display:grid;grid-template-rows:minmax(0,1fr);height:100%;min-height:0;max-width:100%;overflow:clip;contain:layout style}[data-slot=aui_thread-viewport]{width:100%;height:100%;overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain;overflow-anchor:none}[data-slot=aui_thread-viewport][data-following=false]{overflow-anchor:auto}[data-slot=aui_thread-content]{max-width:var(--composer-width);width:100%;min-width:0;margin-inline:auto;padding-inline:1.5rem;padding-top:1.5rem;display:flex;flex-direction:column;gap:1.25rem}[data-slot=aui_composer-clearance]{height:var(--thread-last-message-clearance);flex-shrink:0}[data-slot=thread-empty]{display:flex;align-items:center;justify-content:center;min-height:40vh;color:var(--semi-color-text-2);font-size:var(--conversation-text-font-size)}[data-slot=aui_turn-pair]{position:relative;display:flex;flex-direction:column;gap:var(--conversation-turn-gap);min-width:0;padding-bottom:var(--conversation-turn-gap)}[data-slot=aui_user-message-root]{position:sticky;top:var(--sticky-human-top);z-index:40;display:flex;flex-direction:column;align-items:stretch;min-width:0;overflow:visible;padding-bottom:0;padding-top:0;background:transparent}[data-slot=user-bubble]{position:relative;display:flex;width:100%;min-width:0;max-width:100%;flex-direction:column;gap:.375rem;overflow:visible;border-radius:2px;border:1px solid var(--ui-stroke-tertiary);background:var(--ui-chat-bubble-background);padding:.5rem .75rem;font-size:var(--conversation-text-font-size);line-height:var(--human-msg-line-height);text-align:left}[data-slot=user-bubble]:hover{border-color:var(--ui-stroke-secondary)}[data-slot=user-bubble-text]{white-space:pre-wrap;word-break:break-word;max-height:calc(4 * var(--human-msg-line-height) * var(--conversation-text-font-size) + .15rem);overflow:hidden}[data-slot=user-bubble][data-clamped] [data-slot=user-bubble-text]{-webkit-mask-image:linear-gradient(to bottom,#000 55%,transparent);mask-image:linear-gradient(to bottom,#000 55%,transparent)}[data-slot=user-bubble][data-expanded] [data-slot=user-bubble-text]{max-height:40dvh;overflow-y:auto;-webkit-mask-image:none;mask-image:none}[data-slot=user-bubble-expand]{position:absolute;inset-inline:0;bottom:0;display:flex;height:1.75rem;cursor:pointer;align-items:flex-end;justify-content:center;padding-bottom:.25rem;border:none;background:linear-gradient(to top,var(--ui-chat-bubble-background),transparent);color:var(--ui-text-tertiary);transition:color .12s ease-out}[data-slot=user-bubble-expand]:hover{color:var(--foreground)}[data-slot=user-bubble-expand] svg{width:.875rem;height:.875rem;transition:transform .15s ease-out}[data-slot=user-bubble][data-expanded] [data-slot=user-bubble-expand]{background:none}[data-slot=user-bubble][data-expanded] [data-slot=user-bubble-expand] svg{transform:rotate(180deg)}[data-slot=user-bubble-copy]{position:absolute;top:.25rem;right:.25rem;display:grid;width:2rem;height:2rem;place-items:center;border:none;border-radius:.375rem;background:var(--ui-chat-bubble-background);color:var(--ui-text-tertiary);cursor:pointer;opacity:0;pointer-events:none;transition:opacity .12s ease-out,color .1s,background .1s}[data-slot=user-bubble]:hover [data-slot=user-bubble-copy],[data-slot=user-bubble]:focus-within [data-slot=user-bubble-copy]{opacity:1;pointer-events:auto}[data-slot=user-bubble-copy]:hover{background:var(--ui-control-hover-background);color:var(--foreground)}[data-slot=user-images]{display:flex;flex-wrap:wrap;gap:.5rem;padding:0 .75rem;margin-bottom:.375rem}[data-slot=user-image-thumb]{max-width:12rem;max-height:8rem;border-radius:.375rem;border:1px solid var(--ui-stroke-tertiary);object-fit:cover}[data-slot=user-files]{display:flex;flex-wrap:wrap;gap:.375rem;padding:0 .75rem;margin-bottom:.375rem}[data-slot=user-file-chip]{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .5rem;border-radius:.25rem;background:var(--ui-bg-secondary, hsl(0 0% 95%));border:1px solid var(--ui-stroke-tertiary, hsl(0 0% 88%));font-size:var(--conversation-caption-font-size);line-height:var(--conversation-caption-line-height);color:var(--ui-text-secondary, hsl(0 0% 40%));max-width:14rem}[data-slot=user-file-icon]{flex-shrink:0;font-size:.7rem;opacity:.7}[data-slot=user-file-name]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-slot=user-file-size]{flex-shrink:0;opacity:.6;font-size:.625rem}[data-slot=aui_assistant-message-root]{display:flex;flex-direction:column;gap:0;width:100%;min-width:0;max-width:100%;align-self:flex-start;overflow:hidden}[data-slot=aui_assistant-message-content]{padding-left:var(--message-text-indent);font-size:var(--conversation-text-font-size);line-height:var(--dt-line-height);color:var(--semi-color-text-0);display:flex;flex-direction:column;gap:var(--turn-block-gap);min-width:0;max-width:100%;overflow:hidden;overflow-wrap:anywhere}[data-slot=aui_thinking-disclosure]{border:1px solid var(--semi-color-border);border-radius:.375rem;opacity:.67;transition:opacity .12s ease-out}[data-slot=aui_thinking-disclosure]:hover,[data-slot=aui_thinking-disclosure]:focus-within{opacity:1}[data-slot=thinking-summary]{padding:.375rem .625rem;font-size:var(--conversation-tool-font-size);line-height:var(--conversation-line-height);color:var(--semi-color-text-2);cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none}[data-slot=thinking-body]{padding:0 .625rem .5rem;font-size:var(--conversation-tool-font-size);line-height:1.5;color:var(--semi-color-text-2);white-space:pre-wrap;word-break:break-word;max-height:10rem;overflow-y:auto}[data-slot=thinking-body][data-streaming]{mask-image:linear-gradient(to bottom,transparent 0%,black 28%,black 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0%,black 28%,black 100%)}.thinking-shimmer{animation:thinking-shimmer-anim 2s ease-in-out infinite}@keyframes thinking-shimmer-anim{0%,to{opacity:.55}50%{opacity:1}}[data-slot=tool-block]{display:grid;gap:var(--tool-row-gap);min-width:0;max-width:100%;overflow:hidden;opacity:.67;transition:opacity .12s ease-out}[data-slot=tool-block]:hover,[data-slot=tool-block]:focus-within{opacity:1}[data-slot=tool-header]{display:flex;align-items:center;gap:.375rem;cursor:pointer}[data-slot=tool-glyph]{display:grid;width:.875rem;height:.875rem;place-items:center;flex-shrink:0;align-self:center}[data-slot=tool-spinner]{width:.625rem;height:.625rem;border:1.5px solid var(--semi-color-border);border-top-color:var(--semi-color-primary);border-radius:50%;animation:thread-spin .7s linear infinite}@keyframes thread-spin{to{transform:rotate(360deg)}}[data-slot=tool-block][data-status=success] [data-slot=tool-glyph]{color:#16a34ad9}[data-slot=tool-title]{font-size:var(--conversation-tool-font-size);font-weight:500;line-height:var(--conversation-line-height);color:var(--semi-color-text-2);font-family:SF Mono,Cascadia Code,Fira Code,monospace}[data-slot=tool-duration]{flex-shrink:0;font-size:.625rem;font-variant-numeric:tabular-nums;color:var(--semi-color-text-3)}[data-slot=tool-dots]{animation:thread-pulse 1.2s ease-in-out infinite}@keyframes thread-pulse{0%,to{opacity:.4}50%{opacity:1}}[data-slot=tool-body]{margin:0;font-size:.7rem;line-height:1.5;font-family:SF Mono,Cascadia Code,Fira Code,monospace;background:var(--semi-color-fill-0);padding:.5rem .625rem;border-radius:.3125rem;border:1px solid var(--semi-color-border);overflow-x:auto;overscroll-behavior-x:contain;white-space:pre-wrap;word-break:break-all;max-height:7.5rem;overflow-y:auto;color:var(--semi-color-text-1)}[data-slot=summary-block]{font-size:var(--conversation-text-font-size);line-height:var(--dt-line-height);color:var(--semi-color-text-1, var(--ui-text-secondary));padding:.5rem .75rem;margin:.25rem 0;border-radius:4px;background:color-mix(in srgb,var(--theme-primary) 6%,transparent);width:fit-content}[data-slot=standalone-message]{padding:.5rem .75rem;font-size:var(--conversation-tool-font-size);line-height:1.25rem;color:var(--semi-color-text-2);background:var(--semi-color-fill-0);border-radius:.375rem}[data-slot=standalone-message][data-status=failed]{color:var(--semi-color-danger);background:var(--semi-color-danger-light-default)}[data-slot=scroll-to-bottom]{position:absolute;bottom:calc(var(--thread-last-message-clearance) + .625rem);left:50%;transform:translate(-50%);width:2rem;height:2rem;border-radius:50%;border:1px solid var(--semi-color-border);background:var(--semi-color-bg-0, #fff);box-shadow:0 2px 8px #0000000f;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--semi-color-text-0);z-index:50;transition:box-shadow .12s}[data-slot=scroll-to-bottom]:hover{box-shadow:0 4px 12px #0000001a}[data-slot=aui_markdown-part]{min-width:0;max-width:100%;overflow-wrap:anywhere}[data-slot=aui_markdown-part] p{margin:0}[data-slot=aui_markdown-part] p+p{margin-top:var(--paragraph-gap)}[data-slot=aui_markdown-part] h1{font-size:1rem;line-height:1.4;letter-spacing:-.01em;margin:1rem 0 .5rem;font-weight:600}[data-slot=aui_markdown-part] h2{font-size:.9375rem;line-height:1.4;letter-spacing:-.01em;margin:.875rem 0 .375rem;font-weight:600}[data-slot=aui_markdown-part] h3{font-size:.875rem;line-height:1.4;margin:.75rem 0 .25rem;font-weight:600}[data-slot=aui_markdown-part] h4{font-size:var(--conversation-text-font-size);line-height:1.4;margin:.5rem 0 .25rem;font-weight:600}[data-slot=aui_markdown-part] h1:first-child,[data-slot=aui_markdown-part] h2:first-child,[data-slot=aui_markdown-part] h3:first-child,[data-slot=aui_markdown-part] h4:first-child{margin-top:0}[data-slot=aui_markdown-part] ul,[data-slot=aui_markdown-part] ol{margin:.375rem 0;padding-left:1.25rem}[data-slot=aui_markdown-part] li{margin:.2rem 0}[data-slot=aui_markdown-part] li+li{margin-top:.25rem}[data-slot=aui_markdown-part] code{font-family:SF Mono,Cascadia Code,Fira Code,monospace;font-size:.92em;background:var(--semi-color-fill-0);padding:.1em .3em;border-radius:.25rem}[data-slot=aui_markdown-part] pre{margin:.5rem 0;padding:.625rem .75rem;font-size:.7rem;line-height:1.5;border-radius:.375rem;border:1px solid var(--semi-color-border);background:var(--semi-color-fill-0);overflow-x:auto}[data-slot=aui_markdown-part] pre code{background:transparent;padding:0;font-size:inherit}[data-slot=aui_markdown-part] blockquote{margin:.5rem 0;padding-left:.75rem;border-left:3px solid var(--semi-color-border);color:var(--semi-color-text-2)}[data-slot=md-table-wrap]{margin:.5rem 0;max-width:100%;overflow-x:auto;border-radius:.375rem;border:1px solid var(--semi-color-border)}[data-slot=md-table-wrap] table{margin:0;width:100%;min-width:12rem;border-collapse:collapse;font-size:var(--conversation-text-font-size);line-height:var(--dt-line-height)}[data-slot=md-table-wrap] thead{background:color-mix(in srgb,var(--semi-color-fill-0) 50%,transparent)}[data-slot=md-table-wrap] th{padding:.375rem .625rem;text-align:left;font-size:.75rem;font-weight:500;color:var(--semi-color-text-2);white-space:nowrap}[data-slot=md-table-wrap] td{padding:.375rem .625rem;font-size:var(--conversation-text-font-size);line-height:1.5;vertical-align:top;color:var(--semi-color-text-0)}[data-slot=md-table-wrap] tr{border-bottom:1px solid var(--semi-color-border)}[data-slot=md-table-wrap] tr:last-child{border-bottom:none}[data-slot=aui_markdown-part] strong{font-weight:600}[data-slot=aui_markdown-part] hr{border:none;border-top:1px solid var(--semi-color-border);margin:.75rem 0}[data-slot=show-earlier-btn]{display:flex;align-items:center;justify-content:center;padding:.5rem;margin:.5rem 0;font-size:.75rem;color:var(--semi-color-text-2);background:var(--semi-color-fill-0);border:1px solid var(--semi-color-border);border-radius:.375rem;cursor:pointer;transition:background .12s,color .12s;width:100%}[data-slot=show-earlier-btn]:hover{background:var(--semi-color-fill-1);color:var(--semi-color-text-0)}[data-slot=stream-indicator]{display:flex;align-items:center;gap:.5rem;padding:.25rem 0;color:var(--semi-color-text-3);font-size:var(--conversation-tool-font-size)}[data-slot=stream-indicator][data-stall]{margin-top:.375rem}[data-slot=dither-square]{display:inline-block;width:.75rem;height:.75rem;border-radius:2px;background:repeating-conic-gradient(currentColor 0% 25%,transparent 0% 50%) 0 0 / .125rem .125rem;opacity:.7;animation:indicator-pulse 1.2s ease-in-out infinite}[data-slot=indicator-timer]{font-variant-numeric:tabular-nums;font-size:.6875rem;color:var(--semi-color-text-3)}@keyframes indicator-pulse{0%,to{opacity:.4}50%{opacity:.9}}.ga-inline-error{padding:6px 12px;margin:4px 0;color:var(--semi-color-danger);font-size:var(--conversation-caption-font-size);line-height:var(--conversation-caption-line-height);opacity:.85}.ga-inline-error-text{white-space:pre-wrap;word-break:break-word}:root{--composer-width: 48.75rem;--composer-control-size: 1.75rem;--composer-surface-pad-x: .75rem;--composer-surface-pad-y: .5rem;--composer-input-min-height: 1.625rem;--composer-input-max-height: 9.375rem;--composer-fallback-height: 2.75rem;--composer-measured-height: 62px}[data-slot=composer-root]{position:absolute;bottom:0;left:50%;transform:translate(-50%);z-index:30;width:min(var(--composer-width),calc(100% - 2rem));padding-top:.5rem;padding-bottom:1rem}[data-slot=composer-root]:before{content:"";position:absolute;top:.5rem;right:0;bottom:0;left:0;background:var(--background);border-radius:var(--composer-border-radius, 1rem) var(--composer-border-radius, 1rem) 0 0;z-index:-1}[data-slot=composer-surface]{display:flex;flex-direction:column;gap:0;padding:var(--composer-surface-pad-y) var(--composer-surface-pad-x);border-radius:.75rem;border:1px solid var(--semi-color-border, #e0e0e0);background:color-mix(in srgb,var(--semi-color-bg-0, #fff) 85%,transparent);backdrop-filter:blur(.75rem) saturate(1.12);-webkit-backdrop-filter:blur(.75rem) saturate(1.12);box-shadow:0 2px 12px #0000000a;transition:border-color .15s}[data-slot=composer-surface]:focus-within{border-color:var(--semi-color-primary, #3370ff);box-shadow:0 0 0 2px color-mix(in srgb,var(--semi-color-primary, #3370ff) 15%,transparent)}[data-slot=composer-input-row]{display:flex;align-items:flex-end}[data-slot=composer-rich-input]{flex:1;min-height:var(--composer-input-min-height);max-height:var(--composer-input-max-height);padding:.375rem .25rem;border:none;background:transparent;font-size:.8125rem;line-height:1.5;color:var(--semi-color-text-0, #1c1f23);outline:none;font-family:inherit;overflow-y:auto;white-space:pre-wrap;word-wrap:break-word}[data-slot=composer-rich-input]:empty:before{content:attr(data-placeholder);color:var(--ui-text-secondary);pointer-events:none}[data-slot=composer-rich-input][contenteditable=false]{opacity:.5;cursor:default}.ref-chip{display:inline-flex;align-items:center;gap:2px;padding:1px 6px;border-radius:4px;background:color-mix(in srgb,var(--semi-color-primary, #3370ff) 10%,transparent);color:var(--semi-color-primary, #3370ff);font-size:.6875rem;vertical-align:baseline;-webkit-user-select:none;user-select:none;cursor:default;line-height:1.4}.ref-chip-icon{display:inline-flex;align-items:center}.ref-chip-label{max-width:10rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.skill-chip{display:inline-flex;align-items:center;padding:.1rem .4rem;border-radius:4px;background:#3b82f61f;color:#3b82f6;font-family:var(--font-mono, ui-monospace, monospace);font-size:.82em;font-weight:500;line-height:1.4;white-space:nowrap;-webkit-user-select:none;user-select:none;vertical-align:baseline}[data-slot=at-ref-popover]{position:relative;width:100%;margin-bottom:.25rem;animation:skillSlideUp .12s ease-out}[data-slot=at-ref-form]{display:flex;align-items:center;gap:.25rem;padding:.375rem .5rem;background:var(--semi-color-bg-0, #fff);border:1px solid var(--semi-color-border, #e0e0e0);border-radius:.5rem;box-shadow:0 4px 20px #00000014}[data-slot=at-ref-kinds]{display:flex;gap:2px}[data-slot=at-ref-kind-btn]{width:1.5rem;height:1.5rem;border:none;border-radius:.25rem;background:transparent;font-size:.75rem;cursor:pointer;display:grid;place-items:center;transition:background .1s}[data-slot=at-ref-kind-btn]:hover{background:var(--semi-color-fill-0, #f5f5f5)}[data-slot=at-ref-kind-btn][data-active]{background:color-mix(in srgb,var(--semi-color-primary, #3370ff) 12%,transparent)}[data-slot=at-ref-input]{flex:1;border:none;outline:none;background:transparent;font-size:.75rem;color:var(--semi-color-text-0, #1c1f23);font-family:monospace;min-width:0}[data-slot=at-ref-input]::placeholder{color:var(--semi-color-text-3, #8f959e)}[data-slot=at-ref-confirm]{width:1.5rem;height:1.5rem;border:none;border-radius:.25rem;background:var(--semi-color-text-0, #1c1f23);color:var(--semi-color-bg-0, #fff);font-size:.75rem;cursor:pointer;display:grid;place-items:center;transition:opacity .1s}[data-slot=at-ref-confirm]:disabled{opacity:.2;cursor:default}[data-slot=composer-toolbar]{display:flex;align-items:center;justify-content:space-between;padding-top:.25rem;border-top:1px solid color-mix(in srgb,var(--semi-color-border, #e0e0e0) 50%,transparent);margin-top:.25rem}[data-slot=composer-toolbar-left],[data-slot=composer-toolbar-right]{display:flex;align-items:center;gap:.25rem}[data-slot=composer-attach-btn]{width:var(--composer-control-size);height:var(--composer-control-size);border-radius:.375rem;border:none;background:transparent;color:var(--semi-color-text-2, #4e5969);display:grid;place-items:center;cursor:pointer;transition:background .12s,color .12s}[data-slot=composer-attach-btn]:hover{background:var(--semi-color-fill-0, #f5f5f5);color:var(--semi-color-text-0, #1c1f23)}[data-slot=composer-cta]{width:var(--composer-control-size);height:var(--composer-control-size);border-radius:50%;border:none;display:grid;place-items:center;cursor:pointer;transition:opacity .12s,background .12s,border-color .12s;background:var(--semi-color-text-0, #1c1f23);color:var(--semi-color-bg-0, #fff)}[data-slot=composer-cta]:disabled{opacity:.2;cursor:default}[data-slot=composer-cta]:not(:disabled):hover{opacity:.8}[data-slot=composer-cta][data-state=stop]{background:var(--semi-color-bg-0, #fff);color:var(--semi-color-text-0, #1c1f23);border:1px solid var(--semi-color-border, #e0e0e0)}[data-slot=composer-cta][data-state=stop]:hover{background:var(--semi-color-fill-0, #f5f5f5);opacity:1}[data-slot=composer-cta][data-state=queue]{background:var(--semi-color-primary, #3370ff);color:#fff}[data-slot=composer-status-stack]{display:flex;flex-wrap:wrap;gap:.25rem;padding:0 .25rem .25rem}[data-slot=status-running]{display:inline-flex;align-items:center;gap:.375rem;padding:.2rem .5rem;border-radius:1rem;background:color-mix(in srgb,var(--semi-color-primary, #3370ff) 8%,transparent);font-size:.6875rem;color:var(--semi-color-primary, #3370ff);-webkit-user-select:none;user-select:none}[data-slot=status-dot]{width:6px;height:6px;border-radius:50%;background:var(--semi-color-primary, #3370ff);animation:statusPulse 1.2s ease-in-out infinite}@keyframes statusPulse{0%,to{opacity:1}50%{opacity:.3}}[data-slot=status-queued]{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .375rem;border-radius:1rem;background:var(--semi-color-fill-0, #f5f5f5);font-size:.6875rem;color:var(--semi-color-text-1, #1c1f23);-webkit-user-select:none;user-select:none}[data-slot=status-queue-num]{font-weight:600;color:var(--semi-color-text-2, #4e5969);font-size:.625rem}[data-slot=status-queue-text]{max-width:8rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-slot=status-queue-cancel]{width:1rem;height:1rem;border:none;border-radius:50%;background:transparent;color:var(--semi-color-text-3, #8f959e);display:grid;place-items:center;cursor:pointer;transition:background .1s,color .1s}[data-slot=status-queue-cancel]:hover{background:#0000000f;color:var(--semi-color-text-0, #1c1f23)}[data-slot=composer-drop-overlay]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:100;display:grid;place-items:center;background:color-mix(in srgb,var(--semi-color-primary, #3370ff) 10%,transparent);border:2px dashed var(--semi-color-primary, #3370ff);border-radius:.75rem;color:var(--semi-color-primary, #3370ff);font-size:.8125rem;font-weight:500;pointer-events:none}[data-slot=model-selector]{position:relative}[data-slot=model-chip]{display:flex;align-items:center;gap:.25rem;height:var(--composer-control-size);padding:0 .5rem;border:none;border-radius:.375rem;background:transparent;color:var(--semi-color-text-2, #4e5969);font-size:.75rem;font-weight:400;cursor:pointer;transition:background .12s,color .12s;white-space:nowrap;max-width:10rem}[data-slot=model-chip]:hover,[data-slot=model-chip][data-open]{background:color-mix(in srgb,var(--semi-color-text-0, #1c1f23) 5%,transparent);color:var(--semi-color-text-0, #1c1f23)}[data-slot=model-chip][data-loading]{padding:0 .375rem}[data-slot=model-chip-label]{overflow:hidden;text-overflow:ellipsis;max-width:12rem}[data-slot=model-chip-caret]{display:inline-flex;opacity:.4;transition:transform .15s}[data-slot=model-chip-caret] svg{width:8px;height:8px}[data-slot=model-chip-caret][data-open]{transform:rotate(180deg)}[data-slot=model-chip-spinner]{display:inline-flex;gap:2px;align-items:center;height:10px}[data-slot=model-chip-spinner]:before,[data-slot=model-chip-spinner]:after,[data-slot=model-chip-spinner] span{content:"";display:block;width:3px;height:3px;border-radius:50%;background:currentColor;opacity:.4;animation:dotPulse 1s ease-in-out infinite}[data-slot=model-chip-spinner]:after{animation-delay:.2s}[data-slot=model-chip-spinner] span{animation-delay:.4s}@keyframes dotPulse{0%,80%,to{opacity:.25;transform:scale(.8)}40%{opacity:.8;transform:scale(1)}}[data-slot=provider-dot]{width:6px;height:6px;border-radius:50%;flex-shrink:0}[data-slot=model-menu]{position:absolute;bottom:calc(100% + 8px);right:0;width:16rem;max-height:24rem;display:flex;flex-direction:column;background:color-mix(in srgb,var(--semi-color-bg-0, #fff) 92%,transparent);backdrop-filter:blur(14px) saturate(1.15);-webkit-backdrop-filter:blur(14px) saturate(1.15);border:1px solid color-mix(in srgb,var(--semi-color-border, #e0e0e0) 50%,transparent);border-radius:.5rem;box-shadow:0 4px 24px #00000014,0 0 0 .5px #00000005;z-index:60;animation:skillSlideUp .12s ease-out;overflow:hidden}[data-slot=model-menu-search]{display:flex;align-items:center;gap:.375rem;padding:.5rem .625rem;border-bottom:1px solid color-mix(in srgb,var(--semi-color-border, #e0e0e0) 50%,transparent)}[data-slot=model-menu-search-icon]{flex-shrink:0;color:var(--semi-color-text-3, #8f959e)}[data-slot=model-menu-search-input]{flex:1;border:none;outline:none;background:transparent;font-size:.75rem;color:var(--semi-color-text-0, #1c1f23);min-width:0}[data-slot=model-menu-search-input]::placeholder{color:var(--semi-color-text-3, #8f959e)}[data-slot=model-menu-body]{flex:1;overflow-y:auto;padding:.25rem}[data-slot=model-menu-section]{padding-top:.25rem}[data-slot=model-menu-section]+[data-slot=model-menu-section]{border-top:1px solid color-mix(in srgb,var(--semi-color-border, #e0e0e0) 40%,transparent);margin-top:.25rem;padding-top:.375rem}[data-slot=model-menu-section-header]{display:flex;align-items:center;gap:.375rem;padding:.25rem .5rem;font-size:.5625rem;font-weight:600;color:var(--semi-color-text-3, #8f959e);letter-spacing:.05em;-webkit-user-select:none;user-select:none}[data-slot=model-menu-item]{display:flex;align-items:center;gap:.375rem;width:100%;padding:.375rem .5rem;border:none;border-radius:.25rem;background:transparent;color:var(--semi-color-text-0, #1c1f23);font-size:.75rem;cursor:pointer;text-align:left;transition:background .1s}[data-slot=model-menu-item]:hover{background:var(--semi-color-fill-0, #f5f5f5)}[data-slot=model-menu-item][data-active]{color:var(--semi-color-text-0, #1c1f23);font-weight:500}[data-slot=model-menu-name]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-slot=model-check]{font-size:.625rem;color:var(--semi-color-primary, #3370ff);flex-shrink:0;width:.75rem}[data-slot=mixin-caret]{display:inline-flex;padding:2px;border-radius:2px;transition:transform .15s;color:var(--semi-color-text-3, #8f959e)}[data-slot=mixin-caret]:hover{background:var(--semi-color-fill-1, #eee)}[data-slot=mixin-caret][data-expanded]{transform:rotate(180deg)}[data-slot=mixin-members]{padding-left:1.25rem}[data-slot=mixin-member]{display:flex;align-items:center;gap:.375rem;padding:.25rem .5rem;font-size:.6875rem;color:var(--semi-color-text-2, #4e5969)}[data-slot=model-menu-empty]{padding:1rem .5rem;text-align:center;font-size:.75rem;color:var(--semi-color-text-3, #8f959e)}[data-slot=model-menu-footer]{display:flex;border-top:1px solid color-mix(in srgb,var(--semi-color-border, #e0e0e0) 50%,transparent);padding:.25rem}[data-slot=model-menu-action]{flex:1;padding:.375rem .5rem;border:none;border-radius:.25rem;background:transparent;color:var(--semi-color-text-2, #4e5969);font-size:.6875rem;cursor:pointer;text-align:center;transition:background .1s,color .1s}[data-slot=model-menu-action]:hover{background:var(--semi-color-fill-0, #f5f5f5);color:var(--semi-color-text-0, #1c1f23)}[data-slot=attachment-strip]{display:flex;flex-wrap:wrap;gap:.375rem;padding-bottom:.375rem;animation:attachReveal .2s ease-out}@keyframes attachReveal{0%{opacity:0;max-height:0}to{opacity:1;max-height:200px}}[data-slot=attachment-thumb]{position:relative;width:3.5rem;height:3.5rem;border-radius:.375rem;overflow:hidden;border:1px solid var(--semi-color-border, #e0e0e0)}[data-slot=attachment-thumb] img{width:100%;height:100%;object-fit:cover}[data-slot=attachment-file-chip]{display:flex;align-items:center;gap:.375rem;padding:.25rem .5rem;border-radius:.375rem;border:1px solid var(--semi-color-border, #e0e0e0);background:var(--semi-color-fill-0, #f9f9f9);max-width:12rem}[data-slot=attachment-file-icon]{font-size:1rem;flex-shrink:0}[data-slot=attachment-file-meta]{display:flex;flex-direction:column;overflow:hidden;min-width:0}[data-slot=attachment-file-name]{font-size:.6875rem;color:var(--semi-color-text-0, #1c1f23);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[data-slot=attachment-file-size]{font-size:.625rem;color:var(--semi-color-text-3, #8f959e)}[data-slot=attachment-remove]{flex-shrink:0;width:1rem;height:1rem;border-radius:50%;border:none;background:var(--semi-color-fill-1, #eee);color:var(--semi-color-text-2, #4e5969);font-size:.625rem;line-height:1;cursor:pointer;display:grid;place-items:center;transition:background .1s}[data-slot=attachment-thumb] [data-slot=attachment-remove]{position:absolute;top:2px;right:2px;background:#00000080;color:#fff}[data-slot=attachment-remove]:hover{background:var(--semi-color-danger, #f53f3f);color:#fff}[data-slot=attachment-spinner]{width:12px;height:12px;border:1.5px solid var(--semi-color-border, #e0e0e0);border-top-color:var(--semi-color-primary, #3370ff);border-radius:50%;animation:chipSpin .6s linear infinite;flex-shrink:0}[data-slot=attachment-error-badge]{width:1rem;height:1rem;border-radius:50%;border:none;background:var(--semi-color-danger, #f53f3f);color:#fff;font-size:.625rem;font-weight:700;line-height:1;cursor:pointer;display:grid;place-items:center;flex-shrink:0}[data-slot=attachment-file-chip][data-status=error],[data-slot=attachment-thumb][data-status=error]{border-color:var(--semi-color-danger, #f53f3f)}[data-slot=attachment-file-error]{font-size:.5625rem;color:var(--semi-color-danger, #f53f3f)}[data-slot=skill-wrap]{position:relative}[data-slot=skill-trigger]{width:var(--composer-control-size);height:var(--composer-control-size);border-radius:.375rem;border:none;background:transparent;color:var(--semi-color-text-2, #4e5969);display:grid;place-items:center;cursor:pointer;transition:background .12s,color .12s}[data-slot=skill-trigger]:hover{background:var(--semi-color-fill-0, #f5f5f5);color:var(--semi-color-primary, #3370ff)}[data-slot=skill-panel]{position:absolute;bottom:calc(100% + 6px);left:0;min-width:11rem;max-height:24rem;overflow-y:auto;background:var(--semi-color-bg-0, #fff);border:1px solid var(--semi-color-border, #e0e0e0);border-radius:.5rem;box-shadow:0 4px 16px #00000014;padding:.25rem;z-index:60;animation:skillSlideUp .12s ease-out}@keyframes skillSlideUp{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}[data-slot=skill-section]{padding:.125rem 0}[data-slot=skill-section]+[data-slot=skill-section]{border-top:1px solid color-mix(in srgb,var(--semi-color-border, #e0e0e0) 50%,transparent);margin-top:.25rem;padding-top:.25rem}[data-slot=skill-section-title]{font-size:.625rem;font-weight:600;color:var(--semi-color-text-3, #8f959e);text-transform:uppercase;letter-spacing:.03em;padding:.25rem .5rem .125rem}[data-slot=skill-item]{display:flex;align-items:center;gap:.5rem;width:100%;padding:.375rem .5rem;border:none;border-radius:.25rem;background:transparent;color:var(--semi-color-text-0, #1c1f23);font-size:.75rem;cursor:pointer;text-align:left;transition:background .1s}[data-slot=skill-item]:hover,[data-slot=skill-item][data-focused]{background:var(--semi-color-fill-0, #f5f5f5)}[data-slot=skill-info]{display:flex;align-items:baseline;gap:.5rem;min-width:0}[data-slot=skill-name]{font-size:.75rem;font-weight:500;color:var(--semi-color-text-0, #1c1f23);flex-shrink:0}[data-slot=skill-desc]{font-size:.6875rem;color:var(--semi-color-text-2, #4e5969);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[data-slot=skill-panel-hint]{padding:.25rem .5rem;font-size:.6875rem;color:var(--semi-color-text-2, #4e5969);border-top:1px solid color-mix(in srgb,var(--semi-color-border, #e0e0e0) 50%,transparent);margin-top:.25rem;-webkit-user-select:none;user-select:none}[data-slot=completion-drawer]{position:relative;width:100%;max-height:16rem;overflow-y:auto;background:var(--semi-color-bg-0, #fff);border:1px solid var(--semi-color-border, #e0e0e0);border-radius:.5rem;box-shadow:0 4px 20px #00000014;padding:.25rem;margin-bottom:.25rem;animation:skillSlideUp .12s ease-out}[data-slot=completion-item]{display:flex;align-items:center;gap:.5rem;width:100%;padding:.375rem .5rem;border:none;border-radius:.25rem;background:transparent;cursor:pointer;text-align:left;transition:background .1s}[data-slot=completion-item]:hover,[data-slot=completion-item][data-focused]{background:var(--semi-color-fill-0, #f5f5f5)}[data-slot=completion-icon]{font-size:1rem;flex-shrink:0;width:1.25rem;text-align:center}[data-slot=completion-info]{display:flex;flex-direction:column;gap:1px;min-width:0}[data-slot=completion-title]{font-size:.75rem;font-weight:500;color:var(--semi-color-text-0, #1c1f23);font-family:monospace}[data-slot=completion-badge]{display:inline-block;margin-left:.375rem;font-size:.5625rem;font-family:sans-serif;font-weight:400;color:var(--semi-color-text-3, #8f959e);background:var(--semi-color-fill-0, #f5f5f5);padding:0 4px;border-radius:3px;vertical-align:middle}[data-slot=completion-desc]{font-size:.6875rem;color:var(--semi-color-text-3, #8f959e);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[data-slot=context-menu-wrap]{position:relative}[data-slot=context-menu]{position:absolute;bottom:calc(100% + 6px);left:0;min-width:11rem;background:var(--semi-color-bg-0, #fff);border:1px solid var(--semi-color-border, #e0e0e0);border-radius:.5rem;box-shadow:0 4px 16px #00000014;padding:.25rem;z-index:60;animation:skillSlideUp .12s ease-out}[data-slot=context-menu-title]{padding:.25rem .5rem .125rem;font-size:.625rem;font-weight:600;color:var(--semi-color-text-3, #8f959e);text-transform:uppercase;letter-spacing:.03em;-webkit-user-select:none;user-select:none}[data-slot=context-menu-item]{display:flex;align-items:center;gap:.5rem;width:100%;padding:.375rem .5rem;border:none;border-radius:.25rem;background:transparent;color:var(--semi-color-text-0, #1c1f23);font-size:.75rem;cursor:pointer;text-align:left;transition:background .1s}[data-slot=context-menu-item]:hover{background:var(--semi-color-fill-0, #f5f5f5)}[data-slot=context-menu-icon]{display:inline-flex;align-items:center;color:var(--semi-color-text-2, #4e5969)}[data-slot=context-menu-label]{flex:1}[data-slot=context-menu-separator]{display:block;height:1px;margin:.25rem .5rem;background:var(--semi-color-border, #e0e0e0)}[data-slot=context-menu-hint]{padding:.25rem .5rem;font-size:.6875rem;color:var(--semi-color-text-2, #4e5969);border-top:1px solid color-mix(in srgb,var(--semi-color-border, #e0e0e0) 50%,transparent);margin-top:.25rem;-webkit-user-select:none;user-select:none}[data-slot=empty-state-root]{display:flex;flex-direction:column;align-items:flex-start;padding-bottom:1rem;gap:1.25rem}[data-slot=empty-state-wordmark]{display:flex;align-items:center;padding-left:1px}[data-slot=empty-state-wordmark] img{height:4rem;width:auto}.empty-state-wordmark-dark,[data-appearance=dark] .empty-state-wordmark-light{display:none}[data-appearance=dark] .empty-state-wordmark-dark{display:block}[data-slot=empty-state-presets]{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:.5rem}.empty-state-preset-btn{display:inline-flex;align-items:center;gap:6px;padding:.375rem .625rem;border:1px solid var(--semi-color-border);border-radius:6px;background:none;color:var(--ui-text-secondary);font-size:.8125rem;font-weight:500;line-height:1;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s,box-shadow .15s}.empty-state-preset-btn:hover{background:color-mix(in srgb,var(--semi-color-primary) 4%,transparent);box-shadow:0 1px 4px color-mix(in srgb,var(--semi-color-primary) 12%,transparent)}.empty-state-preset-btn:active{background:color-mix(in srgb,var(--semi-color-primary) 8%,transparent)}.empty-state-preset-icon{display:flex;align-items:center;color:var(--foreground)}.chat-view-root[data-empty]{display:flex;flex-direction:column;align-items:center;justify-content:center}.chat-view-root[data-empty] [data-slot=empty-state-root]{width:min(var(--composer-width, 48.75rem),calc(100% - 2rem))}.chat-view-root[data-empty] [data-slot=composer-root]{position:relative;bottom:auto;left:auto;transform:none;width:min(var(--composer-width, 48.75rem),calc(100% - 2rem))}.chat-view-root[data-empty] [data-slot=composer-root]:before{display:none}.chat-view-root[data-empty] [data-slot=composer-surface]{border-color:var(--semi-color-primary)!important;box-shadow:0 0 20px color-mix(in srgb,var(--semi-color-primary) 12%,transparent),0 0 50px -4px color-mix(in srgb,var(--semi-color-primary) 8%,transparent)!important}.chat-view-root{position:relative;width:100%;height:100%;min-height:0;overflow:hidden}.ga-chat-offline{display:flex;align-items:center;justify-content:center;height:100%;color:var(--semi-color-text-2);font-size:14px}.ga-app-layout{position:relative;width:100vw;height:100vh;overflow:hidden;display:flex;flex-direction:column}:root{--ga-sidebar-top-padding: 36px}:root[data-platform=macos]{--ga-titlebar-height: 38px;--ga-titlebar-controls-left: 72px;--ga-titlebar-controls-top: 6px;--ga-sidebar-top-padding: 36px}:root[data-platform=windows]{--ga-sidebar-top-padding: 8px}:root[data-platform=windows] .ga-titlebar-controls{left:8px;top:2px}.ga-titlebar-controls{position:absolute;top:var(--ga-titlebar-controls-top, 8px);left:12px;z-index:999;display:flex;align-items:center;gap:2px}:root[data-platform=macos] .ga-titlebar-controls{left:var(--ga-titlebar-controls-left, 72px)}.ga-titlebar-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:6px;background:none;color:var(--ui-text-tertiary);cursor:pointer;transition:color .1s,background .1s;-webkit-app-region:no-drag}.ga-titlebar-btn:hover{background:var(--ui-control-hover-background);color:var(--foreground)}.ga-app-body{flex:1;min-height:0;overflow:hidden}.ga-app-body .semi-resizable-group{height:100%}.ga-body-collapsed{height:100%;display:flex;flex-direction:column;background:var(--background)}.ga-sidebar-item{display:flex;flex-direction:column;border-right:1px solid var(--semi-color-border);background:var(--ui-sidebar-surface-background)}.ga-left-sidebar{display:flex;flex-direction:column;height:100%;padding:var(--ga-sidebar-top-padding, 36px) 0 0}.ga-sidebar-brand{flex-shrink:0;padding:8px 10px 12px;display:flex;flex-direction:column;gap:2px}.ga-brand-title{font-size:13px;font-weight:600;color:var(--semi-color-text-0)}.ga-brand-sub{font-size:10px;color:var(--semi-color-text-2)}.ga-nav-rail{flex-shrink:0;display:flex;flex-direction:column;gap:1px;padding:0 10px}.ga-nav-btn{display:flex;align-items:center;width:100%;gap:8px;height:28px;padding:0 8px;border:1px solid transparent;border-radius:6px;background:none;color:var(--ui-text-secondary);font-size:.8125rem;font-weight:500;line-height:1;text-align:left;cursor:pointer;transition:color .1s ease-out,background .1s ease-out;-webkit-app-region:no-drag}.ga-nav-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ga-nav-icon{flex-shrink:0;color:var(--ui-icon-nav)}.ga-nav-btn:hover{background:var(--ui-control-hover-background);color:var(--foreground);transition:none}.ga-nav-btn:hover .ga-nav-icon{color:var(--ui-icon-nav-active)}.ga-nav-btn.active{background:var(--ui-control-active-background);border-color:var(--ui-stroke-tertiary);color:var(--foreground);box-shadow:none}.ga-nav-btn.active .ga-nav-icon{color:var(--ui-icon-nav-active)}.ga-sidebar-search{flex-shrink:0;padding:4px 10px}.ga-sidebar-search .semi-input-wrapper{border-radius:6px;border-color:transparent;background:var(--ui-control-hover-background);height:24px;font-size:.75rem}.ga-sidebar-search .semi-input-wrapper:hover{border-color:transparent;background:var(--ui-row-hover-background)}.ga-sidebar-search .semi-input-wrapper-focus{border-color:var(--ui-accent);background:transparent}.ga-sidebar-search .semi-input{font-size:.75rem}.ga-sidebar-search .semi-input-prefix{opacity:.5}.ga-session-section{flex:1;min-height:0;overflow-y:auto;padding:4px 10px;display:flex;flex-direction:column;gap:1px}.ga-session-section::-webkit-scrollbar{width:4px}.ga-session-section::-webkit-scrollbar-track{margin:8px 0}.ga-session-section::-webkit-scrollbar-thumb{background:transparent;border-radius:2px}.ga-session-section:hover::-webkit-scrollbar-thumb{background:var(--semi-color-fill-2)}.ga-session-section:hover::-webkit-scrollbar-thumb:hover{background:var(--semi-color-fill-1)}.ga-session-empty{flex:1;display:flex;align-items:center;justify-content:center;color:var(--semi-color-text-3);font-size:12px}.ga-session-list{display:flex;flex-direction:column;gap:1px}.ga-session-item{position:relative;display:flex;align-items:center;width:100%;min-height:26px;padding:0;border:none;border-radius:6px;background:none;cursor:pointer;text-align:left;transition:background .1s ease-out}.ga-session-item:hover{background:var(--ui-row-hover-background)}.ga-session-item.active{background:var(--ui-row-active-background)}.ga-session-content{display:flex;align-items:center;gap:6px;padding:2px 8px;min-width:0;flex:1;transition:padding-right .1s ease-out}.ga-session-item:hover .ga-session-content{padding-right:48px}.ga-status-dot{width:4px;height:4px;border-radius:50%;background:var(--ui-text-quaternary);flex-shrink:0}.ga-status-dot.working{width:6px;height:6px;background:var(--ui-accent);position:relative}.ga-status-dot.working:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:var(--ui-accent);animation:ga-ping 1.5s cubic-bezier(0,0,.2,1) infinite}@keyframes ga-ping{75%,to{transform:scale(2);opacity:0}}.ga-session-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.8125rem;color:var(--ui-text-secondary);line-height:1.4}.ga-session-item:hover .ga-session-title,.ga-session-item.active .ga-session-title{color:var(--foreground)}.ga-session-age{position:absolute;right:24px;top:50%;transform:translateY(-50%);font-size:.625rem;color:var(--ui-text-tertiary);opacity:0;transition:opacity .15s;pointer-events:none}.ga-session-item:hover .ga-session-age{opacity:1}.ga-session-actions{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .1s}.ga-session-item:hover .ga-session-actions,.ga-session-actions.menu-open{opacity:1}.ga-session-actions-btn{display:flex;align-items:center;justify-content:center;width:18px;height:18px;border:none;border-radius:3px;background:none;color:var(--ui-text-tertiary);cursor:pointer;transition:color .1s,background .1s}.ga-session-actions-btn:hover{background:var(--ui-control-active-background);color:var(--foreground)}.ga-session-rename-input{flex:1;min-width:0;height:20px;padding:0 4px;border:1px solid var(--ui-accent);border-radius:4px;background:var(--semi-color-bg-0);color:var(--foreground);font-size:.8125rem;font-family:inherit;outline:none}.ga-session-pin-icon{position:absolute;right:8px;top:50%;transform:translateY(-50%);display:flex;align-items:center;color:var(--ui-text-quaternary);opacity:1;transition:opacity .1s;pointer-events:none}.ga-session-item:hover .ga-session-pin-icon{opacity:0}.ga-session-menu.semi-dropdown-menu{min-width:140px;padding:4px}.ga-session-menu .semi-dropdown-item{display:flex;align-items:center;gap:8px;height:28px;padding:0 8px;border-radius:4px;font-size:.8125rem;font-weight:400;color:var(--ui-text-secondary)}.ga-session-menu .semi-dropdown-item:hover{background:var(--ui-control-hover-background);color:var(--foreground)}.ga-session-menu .semi-dropdown-item-danger{color:var(--semi-color-danger)}.ga-session-menu .semi-dropdown-item-danger:hover{color:var(--semi-color-danger);background:var(--ui-control-hover-background)}.ga-section-header{display:flex;align-items:center;gap:4px;padding:6px 8px 4px;border:none;background:none;cursor:pointer;width:100%}.ga-section-dot{width:8px;height:8px;border-radius:1px;background:var(--theme-primary);flex-shrink:0}.ga-section-label{font-size:.64rem;font-weight:600;text-transform:uppercase;letter-spacing:.16em;color:var(--theme-primary);line-height:1}.ga-section-count{font-size:.6875rem;font-weight:500;color:var(--ui-text-quaternary);line-height:1}.ga-section-chevron{color:var(--ui-text-tertiary);opacity:0;transition:opacity .15s,transform .15s;display:flex;align-items:center}.ga-section-header:hover .ga-section-chevron{opacity:1}.ga-section-chevron.open{transform:rotate(90deg)}.ga-section-action{margin-left:auto;display:flex;align-items:center;justify-content:center;width:18px;height:18px;border:none;border-radius:4px;background:none;color:var(--ui-text-tertiary);cursor:pointer;opacity:0;transition:opacity .15s,background .1s}.ga-section-header:hover .ga-section-action{opacity:1}.ga-section-action:hover{background:var(--ui-control-hover-background);color:var(--foreground)}.ga-sidebar-footer{flex-shrink:0;padding:4px 10px 6px;border-top:1px solid transparent;display:flex;align-items:center;gap:2px}.ga-sidebar-footer-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:none;color:var(--semi-color-text-1);cursor:pointer;padding:0;border-radius:4px}.ga-sidebar-footer-btn:hover{background:var(--semi-color-fill-0)}.ga-sidebar-footer-btn:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:1px}.ga-sidebar-footer-anchor{position:relative;display:flex}.ga-main-item{display:flex;flex-direction:column;min-height:0;background:var(--background)}.ga-main-area{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;padding:24px}.ga-main-area.ga-main-chat{padding:0;align-items:stretch}.ga-main-area.ga-main-full{padding:0;align-items:stretch;justify-content:stretch}:root[data-platform=macos] .ga-body-collapsed .ga-main-area.ga-main-full{padding-top:var(--ga-titlebar-height, 38px)}.ga-main-placeholder{text-align:center;color:var(--semi-color-text-2)}.ga-main-placeholder h2{margin:0 0 8px;font-size:20px;color:var(--semi-color-text-0)}.ga-main-placeholder p{margin:4px 0;font-size:14px}.ga-placeholder-hint{margin-top:16px!important;font-size:12px!important;color:var(--semi-color-text-3)!important;font-style:italic}.ga-app-body .semi-resizable-handler{width:2px;background:transparent;transition:background .15s}.ga-app-body .semi-resizable-handler:hover{background:var(--semi-color-primary)}.ga-app-body .semi-resizable-handler .semi-icon{display:none}.ga-statusbar{height:20px;display:flex;justify-content:space-between;align-items:stretch;gap:8px;border-top:1px solid var(--ui-stroke-tertiary);background:var(--ui-sidebar-surface-background);padding:0 4px;color:var(--ui-text-tertiary);flex-shrink:0;-webkit-app-region:no-drag}.ga-statusbar-group{display:flex;min-width:0;align-items:stretch;gap:2px}.ga-statusbar-item{display:inline-flex;align-items:center;height:100%;gap:4px;padding:0 6px;font-size:.6875rem;color:inherit;border:none;border-radius:0;background:none;text-decoration:none;cursor:default;transition:color .1s,background .1s}.ga-statusbar-item.action,.ga-statusbar-item.menu,.ga-statusbar-item.link{cursor:pointer}.ga-statusbar-item.action:hover,.ga-statusbar-item.menu:hover,.ga-statusbar-item.link:hover{color:var(--foreground);background:var(--chrome-action-hover)}.ga-statusbar-item.disabled{opacity:.45;cursor:default}.ga-statusbar-item.disabled:hover{color:inherit;background:none}.ga-statusbar-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ga-statusbar-detail{color:var(--ui-text-quaternary)}.ga-statusbar-icon{display:flex;align-items:center;flex-shrink:0}.ga-statusbar-spinner{animation:ga-spin 1s linear infinite}@keyframes ga-spin{to{transform:rotate(360deg)}}.ga-statusbar-dot--pulse{animation:ga-dot-pulse 1.2s ease-in-out infinite}@keyframes ga-dot-pulse{0%,to{opacity:1}50%{opacity:.35}}.ga-statusbar-menu-anchor{position:relative}.ga-bridge-panel{position:absolute;bottom:calc(100% + 6px);left:0;min-width:20rem;background:var(--semi-color-bg-0, #fff);border:1px solid var(--ui-stroke-secondary);border-radius:.5rem;box-shadow:0 4px 16px #00000014;-webkit-backdrop-filter:blur(12px) saturate(1.08);backdrop-filter:blur(12px) saturate(1.08);z-index:200;animation:ga-panel-slide-up .12s ease-out;font-size:.875rem}@keyframes ga-panel-slide-up{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.ga-bridge-panel-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.375rem .625rem}.ga-bridge-panel-status-rows{display:flex;flex-direction:column;gap:.25rem;min-width:0;font-size:.7rem;line-height:1}.ga-bridge-panel-row{display:flex;align-items:center;gap:.375rem}.ga-bridge-panel-row--primary{font-weight:500;color:var(--foreground)}.ga-bridge-panel-row--secondary{color:var(--ui-text-tertiary)}.ga-bridge-panel-actions{display:flex;align-items:center;gap:2px;flex-shrink:0}.ga-bridge-panel-action-btn{width:1.5rem;height:1.5rem;border:none;border-radius:4px;background:transparent;color:var(--ui-text-tertiary);display:grid;place-items:center;cursor:pointer;transition:background .1s,color .1s}.ga-bridge-panel-action-btn:hover{background:var(--chrome-action-hover);color:var(--foreground)}.ga-bridge-panel-section{border-top:1px solid color-mix(in srgb,var(--semi-color-border, #e0e0e0) 50%,transparent);padding:.375rem .625rem}.ga-panel-section-label{font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.14em;color:color-mix(in srgb,var(--ui-text-tertiary) 80%,transparent);margin-bottom:.25rem;-webkit-user-select:none;user-select:none}.ga-bridge-panel-list{list-style:none;display:flex;flex-direction:column;gap:.25rem;margin-top:.375rem}.ga-bridge-panel-list-item{display:flex;align-items:center;justify-content:space-between;gap:.5rem;font-size:.75rem}.ga-bridge-panel-svc-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-transform:capitalize;color:var(--foreground)}.ga-bridge-panel-svc-state{display:flex;align-items:center;gap:.375rem;font-size:.66rem;color:var(--ui-text-tertiary);flex-shrink:0}.ga-bridge-panel-svc-err{color:#ef4444;font-weight:700;font-size:.625rem}.ga-bridge-panel-section-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.ga-bridge-panel-link-btn{border:none;background:none;color:var(--ui-text-tertiary);font-size:.625rem;font-weight:500;cursor:pointer;padding:0;white-space:nowrap;transition:color .1s}.ga-bridge-panel-link-btn:hover{color:var(--foreground)}.ga-bridge-panel-log{margin-top:.25rem;max-height:8rem;border:none;padding:0}.ga-bridge-panel-tabs{display:flex;gap:2px;margin-bottom:.375rem}.ga-bridge-panel-tab{border:none;background:none;padding:.125rem .375rem;font-size:.625rem;font-weight:500;color:var(--ui-text-tertiary);border-radius:3px;cursor:pointer;transition:color .1s,background .1s}.ga-bridge-panel-tab:hover{color:var(--foreground);background:var(--chrome-action-hover)}.ga-bridge-panel-tab.active{color:var(--foreground);background:color-mix(in srgb,var(--ui-accent) 12%,transparent)}.ga-bridge-panel-section-foot{display:flex;align-items:center;justify-content:space-between;margin-top:.25rem;min-height:1rem}.ga-bridge-panel-truncated{font-size:.585rem;color:var(--ui-text-quaternary)}.ga-bridge-panel-log-empty{margin-top:.25rem;font-size:.6875rem;color:var(--ui-text-quaternary);font-style:italic}.ga-conductor-panel-stats{display:flex;align-items:center;gap:.25rem;flex-shrink:0}.ga-conductor-stat{display:inline-flex;align-items:center;justify-content:center;min-width:1rem;height:1rem;padding:0 .25rem;border-radius:.5rem;font-size:.6rem;font-weight:700;line-height:1}.ga-conductor-stat--run{background:color-mix(in srgb,var(--ui-accent, #0053fd) 12%,transparent);color:var(--ui-accent, #0053fd)}.ga-conductor-stat--done{background:color-mix(in srgb,#10b981 12%,transparent);color:#059669}.ga-conductor-stat--fail{background:color-mix(in srgb,#ef4444 12%,transparent);color:#dc2626}.ga-notification-stack{position:fixed;z-index:200;display:flex;flex-direction:column;gap:8px;pointer-events:none;max-width:360px}.ga-notification-stack--top{top:48px;left:50%;transform:translate(-50%)}.ga-notification-stack--bottom{bottom:24px;right:24px}.ga-notification{pointer-events:auto;display:flex;align-items:flex-start;gap:8px;padding:10px 14px;border-radius:8px;background:var(--semi-color-bg-3);box-shadow:var(--semi-shadow-elevated);font-size:13px;line-height:1.4;animation:notif-slide-in .2s ease-out}.ga-notification--error{border-left:3px solid var(--semi-color-danger)}.ga-notification--warning{border-left:3px solid var(--semi-color-warning)}.ga-notification--success{border-left:3px solid var(--semi-color-success)}.ga-notification--info{border-left:3px solid var(--semi-color-primary)}.ga-notification-body{flex:1;min-width:0}.ga-notification-title{font-weight:600;margin-bottom:2px}.ga-notification-message{color:var(--semi-color-text-1);word-break:break-word}.ga-notification-action{margin-top:6px;padding:2px 8px;border:1px solid var(--semi-color-border);border-radius:4px;background:transparent;color:var(--semi-color-primary);font-size:12px;cursor:pointer}.ga-notification-action:hover{background:var(--semi-color-fill-0)}.ga-notification-dismiss{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:20px;height:20px;border:none;background:transparent;color:var(--semi-color-text-2);cursor:pointer;border-radius:4px}.ga-notification-dismiss:hover{background:var(--semi-color-fill-1)}@keyframes notif-slide-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.ga-settings-dialog .semi-modal-content{padding-left:24px;padding-right:0;max-height:85vh;display:flex;flex-direction:column}.ga-settings-dialog .semi-modal-header{padding-right:24px;flex-shrink:0}.ga-settings-dialog .semi-modal-body{padding:8px 24px 8px 0;overflow-y:auto;flex:1;min-height:0}.ga-set-block{padding:16px 0;border-bottom:1px solid var(--semi-color-border, #e8e8e8)}.ga-set-block:last-child{border-bottom:none}.ga-set-sec-heading{display:flex;align-items:center;gap:6px;margin:0 0 12px}.ga-set-sec-t{margin:0;font-size:16px;line-height:24px;font-weight:600;color:var(--semi-color-text-0, #1c1f23)}.ga-settings-section-help{display:inline-flex;align-items:center;justify-content:center;color:var(--semi-color-text-2, #646a73);cursor:help}.ga-settings-section-help:focus-visible,.ga-mixin-label:focus-visible,.ga-connection-card-title:focus-visible,.ga-connection-status-label:focus-visible{border-radius:2px;outline:2px solid var(--semi-color-primary-light-active, #94bfff);outline-offset:2px}.ga-font-slider-row{display:flex;align-items:center;gap:12px}.ga-font-value{font-size:13px;color:var(--semi-color-text-2, #646a73);min-width:36px;text-align:right}.ga-mixin-group{margin-bottom:12px;border:1px solid var(--semi-color-border, #e8e8e8);border-radius:8px;overflow:hidden}.ga-mixin-head{display:flex;align-items:center;gap:8px;padding:8px 10px;cursor:pointer;transition:background .15s}.ga-mixin-head:hover{background:var(--semi-color-fill-0, #f5f5f5)}.ga-mixin-head--active{background:var(--semi-color-primary-light-default, #e8f3ff)}.ga-mixin-toggle{display:flex;align-items:center;justify-content:center;width:20px;height:20px;border:none;background:none;padding:0;cursor:pointer;color:var(--semi-color-text-2, #646a73);border-radius:4px}.ga-mixin-toggle:hover{background:var(--semi-color-fill-1, #eee)}.ga-mixin-label{font-size:14px;font-weight:500;flex:1;cursor:help}.ga-mixin-body{border-top:1px solid var(--semi-color-border, #e8e8e8);padding:6px 0}.ga-mixin-empty{padding:8px 16px;font-size:12px;color:var(--semi-color-text-2, #646a73)}.ga-mixin-members{display:flex;flex-direction:column}.ga-mixin-member{display:flex;align-items:center;gap:8px;padding:4px 12px;font-size:13px}.ga-mixin-member:hover .ga-mixin-member-actions{opacity:1}.ga-mixin-member-rank{width:18px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:4px;background:var(--semi-color-fill-0, #f5f5f5);font-size:11px;font-weight:600;color:var(--semi-color-text-2, #646a73);flex-shrink:0}.ga-mixin-member-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ga-mixin-member-actions{display:flex;gap:2px;opacity:0;transition:opacity .15s}.ga-icon-btn{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border:none;background:none;border-radius:4px;cursor:pointer;font-size:13px;color:var(--semi-color-text-2, #646a73)}.ga-icon-btn:hover:not(:disabled){background:var(--semi-color-fill-1, #eee);color:var(--semi-color-text-0, #1c1f23)}.ga-icon-btn:disabled{opacity:.3;cursor:default}.ga-icon-btn--danger:hover:not(:disabled){background:var(--semi-color-danger-light-default, #fee);color:var(--semi-color-danger, #f93920)}.ga-mixin-hint{padding:4px 16px;font-size:11px;color:var(--semi-color-text-3, #8f959e)}.ga-model-list{display:flex;flex-direction:column;gap:2px;margin-bottom:8px}.ga-model-item{display:flex;align-items:center;justify-content:space-between;padding:6px 8px;border-radius:6px;cursor:pointer;transition:background .15s}.ga-model-item:hover{background:var(--semi-color-fill-0, #f5f5f5)}.ga-model-item--selected{background:var(--semi-color-primary-light-default, #e8f3ff)}.ga-model-row-content{display:flex;align-items:center;gap:8px;min-width:0}.ga-model-name{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ga-model-actions{display:flex;gap:2px;flex-shrink:0;opacity:0;transition:opacity .15s}.ga-model-item:hover .ga-model-actions{opacity:1}.ga-model-empty{padding:12px 8px;font-size:13px;color:var(--semi-color-text-2, #646a73);text-align:center}.ga-add-model-btn{margin-top:4px}.ga-data-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0}.ga-data-row-info{flex:1;min-width:0}.ga-data-row-label{font-size:14px;font-weight:500;color:var(--semi-color-text-0, #1c1f23);cursor:help;border-radius:2px}.ga-data-row-label:focus-visible{outline:2px solid var(--semi-color-primary-light-active, #94bfff);outline-offset:2px}.ga-data-action.semi-button{font-size:13px;font-weight:500}.ga-data-divider{height:1px;background:var(--semi-color-border, #e8e8e8);margin:8px 0}.ga-data-confirm-summary{display:flex;flex-direction:column;gap:10px}.ga-data-confirm-summary>div{display:grid;grid-template-columns:88px minmax(0,1fr);align-items:start;gap:12px;font-size:13px}.ga-data-confirm-summary span{color:var(--semi-color-text-2, #646a73)}.ga-data-confirm-summary strong{overflow-wrap:anywhere;font-weight:500}.ga-data-confirm-summary p,.ga-data-source-description,.ga-data-maintenance-note{margin:4px 0 0;color:var(--semi-color-text-2, #646a73);font-size:13px;line-height:1.6}.ga-data-maintenance-note[role=status]{color:var(--semi-color-warning, #d99200)}.ga-data-source-actions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px}.ga-data-export-path{display:block;width:100%;margin-top:10px;padding:10px 12px;border-radius:6px;background:var(--semi-color-fill-0, #f5f5f5);font-family:var(--font-mono, ui-monospace, SFMono-Regular, monospace);font-size:12px;line-height:1.5;white-space:normal;overflow-wrap:anywhere;word-break:break-word;box-sizing:border-box}.ga-data-export-path--inline{margin-top:0}.ga-source-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.ga-source-dot--on{background:#10b981}.ga-source-dot--switching{background:var(--semi-color-primary, #3370ff);animation:ga-source-pulse 1.2s ease-in-out infinite}.ga-source-dot--unavailable{background:var(--semi-color-text-3, #8f959e)}@keyframes ga-source-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.85)}}.ga-connection-description{margin:0 0 12px;color:var(--semi-color-text-2, #646a73);font-size:14px;line-height:1.6}.ga-connection-mode-grid.semi-radioGroup{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%;gap:12px}.ga-connection-mode-card.semi-radio{width:100%;min-width:0;margin:0;box-sizing:border-box}.ga-connection-card-title{display:inline-flex;align-items:center;flex-wrap:wrap;gap:8px;cursor:help}.ga-connection-repository-detail{margin-top:12px;padding:10px 12px;border:1px solid var(--semi-color-border, #e8e8e8);border-radius:8px;background:var(--semi-color-fill-0, #f7f8fa)}.ga-connection-repository-header{display:flex;align-items:center;justify-content:space-between;gap:12px;color:var(--semi-color-text-1, #35383e);font-size:12px;font-weight:500}.ga-connection-path{display:block;width:100%;margin-top:8px;color:var(--semi-color-text-2, #646a73);font-family:var(--font-mono, ui-monospace, SFMono-Regular, monospace);font-size:12px;line-height:1.5;white-space:normal;overflow-wrap:anywhere;word-break:break-word;box-sizing:border-box}.ga-connection-apply-row{display:flex;align-items:center;justify-content:flex-end;margin-top:12px;gap:8px}.ga-connection-apply-note{flex:1;color:var(--semi-color-warning, #d46b08);font-size:12px;line-height:1.5}.ga-connection-status-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px;padding-top:12px;border-top:1px solid var(--semi-color-border, #e8e8e8)}.ga-connection-status-copy{display:flex;align-items:center;flex-wrap:wrap;gap:8px;min-width:0;color:var(--semi-color-text-2, #646a73);font-size:12px}.ga-connection-status-copy strong{color:var(--semi-color-text-0, #1c1f23);font-weight:500}.ga-connection-status-label{cursor:help}@media(max-width:700px){.ga-connection-mode-grid.semi-radioGroup{grid-template-columns:minmax(0,1fr)}.ga-connection-status-row,.ga-connection-repository-header{align-items:flex-start;flex-direction:column}}.ga-form{display:flex;flex-direction:column;gap:16px}.ga-form-field{display:flex;flex-direction:column;gap:4px}.ga-form-label{font-size:13px;font-weight:500;color:var(--semi-color-text-0, #1c1f23)}.ga-form-req{color:var(--semi-color-danger, #f93920);margin-left:2px}.ga-route-picker{display:flex;gap:8px;margin-bottom:16px}.ga-route-btn{flex:1;padding:10px 12px;border:1px solid var(--semi-color-border, #e0e0e0);border-radius:8px;background:var(--semi-color-bg-0, #fff);font-size:13px;font-weight:500;cursor:pointer;text-align:center;transition:border-color .12s,background .12s}.ga-route-btn:hover{border-color:var(--semi-color-primary, #3370ff);background:color-mix(in srgb,var(--semi-color-primary, #3370ff) 4%,transparent)}.ga-route-btn--active{border-color:var(--semi-color-primary, #3370ff);background:color-mix(in srgb,var(--semi-color-primary, #3370ff) 8%,transparent);color:var(--semi-color-primary, #3370ff)}.ga-provider-list{display:flex;flex-direction:column;gap:8px;margin-top:8px}.ga-provider-card{display:flex;align-items:center;gap:10px;padding:12px 14px;border:1px solid var(--semi-color-border, #e0e0e0);border-radius:8px;background:var(--semi-color-bg-0, #fff);cursor:pointer;transition:border-color .12s,box-shadow .12s;width:100%;text-align:left}.ga-provider-card:hover{border-color:var(--provider-color, var(--semi-color-primary));box-shadow:0 2px 8px color-mix(in srgb,var(--provider-color, #3370ff) 12%,transparent)}.ga-provider-card-icon{flex-shrink:0}.ga-provider-card-body{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}.ga-provider-card-label{font-size:13px;font-weight:600;color:var(--semi-color-text-0, #1c1f23)}.ga-provider-card-desc{font-size:11px;color:var(--semi-color-text-2, #4e5969)}.ga-provider-card-caret{font-size:16px;color:var(--semi-color-text-3, #8f959e);flex-shrink:0}.ga-form-row{display:flex;gap:12px}.ga-form-row>.ga-form-field{flex:1;min-width:0}.ga-form-advanced-toggle{display:flex;align-items:center;gap:4px;padding:0;border:none;background:none;font-size:12px;color:var(--semi-color-text-2, #4e5969);cursor:pointer;margin-top:4px}.ga-form-advanced-toggle:hover{color:var(--semi-color-text-0, #1c1f23)}.ga-form-advanced-toggle svg{transition:transform .15s}.ga-form-advanced-toggle[data-expanded] svg{transform:rotate(90deg)}.ga-form-advanced-body{margin-top:12px}.ga-form-back{display:inline-flex;align-items:center;gap:4px;padding:0;border:none;background:none;font-size:12px;color:var(--semi-color-text-2, #4e5969);cursor:pointer;margin-bottom:12px}.ga-form-back:hover{color:var(--semi-color-primary, #3370ff)}.ga-form-key-link{font-size:11px;color:var(--semi-color-primary, #3370ff);text-decoration:none;margin-left:8px;font-weight:400}.ga-form-key-link:hover{text-decoration:underline}.ga-form-locked-hint{font-size:11px;color:var(--semi-color-text-3, #8f959e);margin-top:2px}.ga-help-feedback-section .ga-set-sec-heading{margin-bottom:6px}.ga-help-feedback-collapse .semi-collapse-header{margin:0;padding:10px 0}.ga-help-feedback-collapse .semi-collapse-content{padding:2px 0 12px}.ga-help-feedback-resource{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.ga-help-feedback-resource p{color:var(--semi-color-text-2, #646a73);font-size:14px;line-height:1.6}.ga-help-feedback-link{display:inline-flex;align-items:center;gap:4px;color:var(--semi-color-link, #3370ff);font-size:13px;font-weight:500;line-height:20px;text-decoration:none}.ga-help-feedback-link:hover{color:var(--semi-color-link-hover, #1c53c7);text-decoration:underline}.ga-help-feedback-link:focus-visible{border-radius:2px;outline:2px solid var(--semi-color-primary-light-active, #94bfff);outline-offset:2px}.ga-help-feedback-description{margin:0 0 8px;color:var(--semi-color-text-2, #646a73);font-size:14px;line-height:1.6;overflow-wrap:anywhere}.ga-help-feedback-list{display:flex;flex-direction:column;gap:6px}.ga-help-feedback-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;padding:6px 8px;border-radius:6px;background:var(--semi-color-fill-0, #f5f5f5)}.ga-help-feedback-contact{display:flex;align-items:center;gap:8px;min-width:0}.ga-help-feedback-wechat-icon{width:18px;height:18px;flex-shrink:0;fill:#07c160}.ga-help-feedback-id{min-width:0;color:var(--semi-color-text-0, #1c1f23);font-family:var(--font-mono, ui-monospace, SFMono-Regular, monospace);font-size:14px;overflow-wrap:anywhere}.ga-help-feedback-row .semi-button{flex-shrink:0} diff --git a/frontends/desktop/dist/assets/markdown-preprocess-Bvg4n8KE.js b/frontends/desktop/dist/assets/markdown-preprocess-Bvg4n8KE.js new file mode 100644 index 000000000..7c6a432ec --- /dev/null +++ b/frontends/desktop/dist/assets/markdown-preprocess-Bvg4n8KE.js @@ -0,0 +1,295 @@ +import{g as ml,aj as jt}from"./tauri-compat-tfiFK9EG.js";import{V as To,W as Co}from"./main-Knf6L_en.js";function br(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?Ci(e.position):"start"in e||"end"in e?Ci(e):"line"in e||"column"in e?p0(e):""}function p0(e){return zi(e&&e.line)+":"+zi(e&&e.column)}function Ci(e){return p0(e&&e.start)+"-"+p0(e&&e.end)}function zi(e){return e&&typeof e=="number"?e:1}class Be extends Error{constructor(t,r,n){super(),typeof r=="string"&&(n=r,r=void 0);let i="",a={},l=!1;if(r&&("line"in r&&"column"in r?a={place:r}:"start"in r&&"end"in r?a={place:r}:"type"in r?a={ancestors:[r],place:r.position}:a={...r}),typeof t=="string"?i=t:!a.cause&&t&&(l=!0,i=t.message,a.cause=t),!a.ruleId&&!a.source&&typeof n=="string"){const o=n.indexOf(":");o===-1?a.ruleId=n:(a.source=n.slice(0,o),a.ruleId=n.slice(o+1))}if(!a.place&&a.ancestors&&a.ancestors){const o=a.ancestors[a.ancestors.length-1];o&&(a.place=o.position)}const s=a.place&&"start"in a.place?a.place.start:a.place;this.ancestors=a.ancestors||void 0,this.cause=a.cause||void 0,this.column=s?s.column:void 0,this.fatal=void 0,this.file="",this.message=i,this.line=s?s.line:void 0,this.name=br(a.place)||"1:1",this.place=a.place||void 0,this.reason=this.message,this.ruleId=a.ruleId||void 0,this.source=a.source||void 0,this.stack=l&&a.cause&&typeof a.cause.stack=="string"?a.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Be.prototype.file="";Be.prototype.name="";Be.prototype.reason="";Be.prototype.message="";Be.prototype.stack="";Be.prototype.column=void 0;Be.prototype.line=void 0;Be.prototype.ancestors=void 0;Be.prototype.cause=void 0;Be.prototype.fatal=void 0;Be.prototype.place=void 0;Be.prototype.ruleId=void 0;Be.prototype.source=void 0;const at={basename:zo,dirname:Mo,extname:Eo,join:Io,sep:"/"};function zo(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');Mr(e);let r=0,n=-1,i=e.length,a;if(t===void 0||t.length===0||t.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(a){r=i+1;break}}else n<0&&(a=!0,n=i+1);return n<0?"":e.slice(r,n)}if(t===e)return"";let l=-1,s=t.length-1;for(;i--;)if(e.codePointAt(i)===47){if(a){r=i+1;break}}else l<0&&(a=!0,l=i+1),s>-1&&(e.codePointAt(i)===t.codePointAt(s--)?s<0&&(n=i):(s=-1,n=l));return r===n?n=l:n<0&&(n=e.length),e.slice(r,n)}function Mo(e){if(Mr(e),e.length===0)return".";let t=-1,r=e.length,n;for(;--r;)if(e.codePointAt(r)===47){if(n){t=r;break}}else n||(n=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function Eo(e){Mr(e);let t=e.length,r=-1,n=0,i=-1,a=0,l;for(;t--;){const s=e.codePointAt(t);if(s===47){if(l){n=t+1;break}continue}r<0&&(l=!0,r=t+1),s===46?i<0?i=t:a!==1&&(a=1):i>-1&&(a=-1)}return i<0||r<0||a===0||a===1&&i===r-1&&i===n+1?"":e.slice(i,r)}function Io(...e){let t=-1,r;for(;++t0&&e.codePointAt(e.length-1)===47&&(r+="/"),t?"/"+r:r}function Bo(e,t){let r="",n=0,i=-1,a=0,l=-1,s,o;for(;++l<=e.length;){if(l2){if(o=r.lastIndexOf("/"),o!==r.length-1){o<0?(r="",n=0):(r=r.slice(0,o),n=r.length-1-r.lastIndexOf("/")),i=l,a=0;continue}}else if(r.length>0){r="",n=0,i=l,a=0;continue}}t&&(r=r.length>0?r+"/..":"..",n=2)}else r.length>0?r+="/"+e.slice(i+1,l):r=e.slice(i+1,l),n=l-i-1;i=l,a=0}else s===46&&a>-1?a++:a=-1}return r}function Mr(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const Fo={cwd:Ro};function Ro(){return"/"}function d0(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function Lo(e){if(typeof e=="string")e=new URL(e);else if(!d0(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return No(e)}function No(e){if(e.hostname!==""){const n=new TypeError('File URL host must be "localhost" or empty on darwin');throw n.code="ERR_INVALID_FILE_URL_HOST",n}const t=e.pathname;let r=-1;for(;++r4&&r.slice(0,4)==="data"&&Wo.test(t)){if(t.charAt(4)==="-"){const a=t.slice(5).replace(Bi,Yo);n="data"+a.charAt(0).toUpperCase()+a.slice(1)}else{const a=t.slice(4);if(!Bi.test(a)){let l=a.replace(Go,Xo);l.charAt(0)!=="-"&&(l="-"+l),t="data"+l}}i=_0}return new i(n,t)}function Xo(e){return"-"+e.toLowerCase()}function Yo(e){return e.charAt(1).toUpperCase()}const kl=pl([dl,Uo,yl,bl,xl],"html"),pn=pl([dl,Vo,yl,bl,xl],"svg");function Fi(e){const t=String(e||"").trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function Ko(e){return e.join(" ").trim()}var Kt={},On,Ri;function Zo(){if(Ri)return On;Ri=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,r=/^\s*/,n=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,i=/^:\s*/,a=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,l=/^[;\s]*/,s=/^\s+|\s+$/g,o=` +`,u="/",h="*",m="",d="comment",p="declaration";function y(C,A){if(typeof C!="string")throw new TypeError("First argument must be a string");if(!C)return[];A=A||{};var z=1,I=1;function q(Y){var H=Y.match(t);H&&(z+=H.length);var ae=Y.lastIndexOf(o);I=~ae?Y.length-ae:I+Y.length}function O(){var Y={line:z,column:I};return function(H){return H.position=new M(Y),U(),H}}function M(Y){this.start=Y,this.end={line:z,column:I},this.source=A.source}M.prototype.content=C;function G(Y){var H=new Error(A.source+":"+z+":"+I+": "+Y);if(H.reason=Y,H.filename=A.source,H.line=z,H.column=I,H.source=C,!A.silent)throw H}function X(Y){var H=Y.exec(C);if(H){var ae=H[0];return q(ae),C=C.slice(ae.length),H}}function U(){X(r)}function E(Y){var H;for(Y=Y||[];H=V();)H!==!1&&Y.push(H);return Y}function V(){var Y=O();if(!(u!=C.charAt(0)||h!=C.charAt(1))){for(var H=2;m!=C.charAt(H)&&(h!=C.charAt(H)||u!=C.charAt(H+1));)++H;if(H+=2,m===C.charAt(H-1))return G("End of comment missing");var ae=C.slice(2,H-2);return I+=2,q(ae),C=C.slice(H),I+=2,Y({type:d,comment:ae})}}function $(){var Y=O(),H=X(n);if(H){if(V(),!X(i))return G("property missing ':'");var ae=X(a),pe=Y({type:p,property:w(H[0].replace(e,m)),value:ae?w(ae[0].replace(e,m)):m});return X(l),pe}}function se(){var Y=[];E(Y);for(var H;H=$();)H!==!1&&(Y.push(H),E(Y));return Y}return U(),se()}function w(C){return C?C.replace(s,m):m}return On=y,On}var Li;function Qo(){if(Li)return Kt;Li=1;var e=Kt&&Kt.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(Kt,"__esModule",{value:!0}),Kt.default=r;const t=e(Zo());function r(n,i){let a=null;if(!n||typeof n!="string")return a;const l=(0,t.default)(n),s=typeof i=="function";return l.forEach(o=>{if(o.type!=="declaration")return;const{property:u,value:h}=o;s?i(u,h,o):h&&(a=a||{},a[u]=h)}),a}return Kt}var pr={},Ni;function Jo(){if(Ni)return pr;Ni=1,Object.defineProperty(pr,"__esModule",{value:!0}),pr.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,t=/-([a-z])/g,r=/^[^-]+$/,n=/^-(webkit|moz|ms|o|khtml)-/,i=/^-(ms)-/,a=function(u){return!u||r.test(u)||e.test(u)},l=function(u,h){return h.toUpperCase()},s=function(u,h){return"".concat(h,"-")},o=function(u,h){return h===void 0&&(h={}),a(u)?u:(u=u.toLowerCase(),h.reactCompat?u=u.replace(i,s):u=u.replace(n,s),u.replace(t,l))};return pr.camelCase=o,pr}var dr,Pi;function eu(){if(Pi)return dr;Pi=1;var e=dr&&dr.__importDefault||function(i){return i&&i.__esModule?i:{default:i}},t=e(Qo()),r=Jo();function n(i,a){var l={};return!i||typeof i!="string"||(0,t.default)(i,function(s,o){s&&o&&(l[(0,r.camelCase)(s,a)]=o)}),l}return n.default=n,dr=n,dr}var tu=eu();const ru=ml(tu),nu=/[ \t\n\f\r]/g;function iu(e){return typeof e=="object"?e.type==="text"?Oi(e.value):!1:Oi(e)}function Oi(e){return e.replace(nu,"")===""}const Sl=Al("end"),G0=Al("start");function Al(e){return t;function t(r){const n=r&&r.position&&r.position[e]||{};if(typeof n.line=="number"&&n.line>0&&typeof n.column=="number"&&n.column>0)return{line:n.line,column:n.column,offset:typeof n.offset=="number"&&n.offset>-1?n.offset:void 0}}}function au(e){const t=G0(e),r=Sl(e);if(t&&r)return{start:t,end:r}}function qi(e,t){const r=String(e);if(typeof t!="string")throw new TypeError("Expected character");let n=0,i=r.indexOf(t);for(;i!==-1;)n++,i=r.indexOf(t,i+t.length);return n}const Hi=document.createElement("i");function W0(e){const t="&"+e+";";Hi.innerHTML=t;const r=Hi.textContent;return r.charCodeAt(r.length-1)===59&&e!=="semi"||r===t?!1:r}const Ne=Dt(/[A-Za-z]/),Ie=Dt(/[\dA-Za-z]/),lu=Dt(/[#-'*+\--9=?A-Z^-~]/);function rn(e){return e!==null&&(e<32||e===127)}const y0=Dt(/\d/),su=Dt(/[\dA-Fa-f]/),ou=Dt(/[!-/:-@[-`{-~]/);function K(e){return e!==null&&e<-2}function me(e){return e!==null&&(e<0||e===32)}function le(e){return e===-2||e===-1||e===32}const dn=Dt(new RegExp("\\p{P}|\\p{S}","u")),Ut=Dt(/\s/);function Dt(e){return t;function t(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function ie(e,t,r,n){const i=n?n-1:Number.POSITIVE_INFINITY;let a=0;return l;function l(o){return le(o)?(e.enter(r),s(o)):t(o)}function s(o){return le(o)&&a++i?0:i+t:t=t>i?i:t,r=r>0?r:0,n.length<1e4)l=Array.from(n),l.unshift(t,r),e.splice(...l);else for(r&&e.splice(t,r);a0?(Ge(e,e.length,0,t),e):t}function er(e){if(e===null||me(e)||Ut(e))return 1;if(dn(e))return 2}function gn(e,t,r){const n=[];let i=-1;for(;++i1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;const m={...e[n][1].end},d={...e[r][1].start};ji(m,-o),ji(d,o),l={type:o>1?"strongSequence":"emphasisSequence",start:m,end:{...e[n][1].end}},s={type:o>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:d},a={type:o>1?"strongText":"emphasisText",start:{...e[n][1].end},end:{...e[r][1].start}},i={type:o>1?"strong":"emphasis",start:{...l.start},end:{...s.end}},e[n][1].end={...l.start},e[r][1].start={...s.end},u=[],e[n][1].end.offset-e[n][1].start.offset&&(u=Qe(u,[["enter",e[n][1],t],["exit",e[n][1],t]])),u=Qe(u,[["enter",i,t],["enter",l,t],["exit",l,t],["enter",a,t]]),u=Qe(u,gn(t.parser.constructs.insideSpan.null,e.slice(n+1,r),t)),u=Qe(u,[["exit",a,t],["enter",s,t],["exit",s,t],["exit",i,t]]),e[r][1].end.offset-e[r][1].start.offset?(h=2,u=Qe(u,[["enter",e[r][1],t],["exit",e[r][1],t]])):h=0,Ge(e,n-1,r-n+3,u),r=n+u.length-h-2;break}}for(r=-1;++r0&&le(M)?ie(e,z,"linePrefix",a+1)(M):z(M)}function z(M){return M===null||K(M)?e.check($i,w,q)(M):(e.enter("codeFlowValue"),I(M))}function I(M){return M===null||K(M)?(e.exit("codeFlowValue"),z(M)):(e.consume(M),I)}function q(M){return e.exit("codeFenced"),t(M)}function O(M,G,X){let U=0;return E;function E(H){return M.enter("lineEnding"),M.consume(H),M.exit("lineEnding"),V}function V(H){return M.enter("codeFencedFence"),le(H)?ie(M,$,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(H):$(H)}function $(H){return H===s?(M.enter("codeFencedFenceSequence"),se(H)):X(H)}function se(H){return H===s?(U++,M.consume(H),se):U>=l?(M.exit("codeFencedFenceSequence"),le(H)?ie(M,Y,"whitespace")(H):Y(H)):X(H)}function Y(H){return H===null||K(H)?(M.exit("codeFencedFence"),G(H)):X(H)}}}function xu(e,t,r){const n=this;return i;function i(l){return l===null?r(l):(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),a)}function a(l){return n.parser.lazy[n.now().line]?r(l):t(l)}}const qn={name:"codeIndented",tokenize:ku},wu={partial:!0,tokenize:Su};function ku(e,t,r){const n=this;return i;function i(u){return e.enter("codeIndented"),ie(e,a,"linePrefix",5)(u)}function a(u){const h=n.events[n.events.length-1];return h&&h[1].type==="linePrefix"&&h[2].sliceSerialize(h[1],!0).length>=4?l(u):r(u)}function l(u){return u===null?o(u):K(u)?e.attempt(wu,l,o)(u):(e.enter("codeFlowValue"),s(u))}function s(u){return u===null||K(u)?(e.exit("codeFlowValue"),l(u)):(e.consume(u),s)}function o(u){return e.exit("codeIndented"),t(u)}}function Su(e,t,r){const n=this;return i;function i(l){return n.parser.lazy[n.now().line]?r(l):K(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),i):ie(e,a,"linePrefix",5)(l)}function a(l){const s=n.events[n.events.length-1];return s&&s[1].type==="linePrefix"&&s[2].sliceSerialize(s[1],!0).length>=4?t(l):K(l)?i(l):r(l)}}const Au={name:"codeText",previous:Cu,resolve:Tu,tokenize:zu};function Tu(e){let t=e.length-4,r=3,n,i;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(n=r;++n=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(t,r,n){const i=r||0;this.setCursor(Math.trunc(t));const a=this.right.splice(this.right.length-i,Number.POSITIVE_INFINITY);return n&&gr(this.left,n),a.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),gr(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),gr(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(l):e.interrupt(n.parser.constructs.flow,r,t)(l)}}function El(e,t,r,n,i,a,l,s,o){const u=o||Number.POSITIVE_INFINITY;let h=0;return m;function m(A){return A===60?(e.enter(n),e.enter(i),e.enter(a),e.consume(A),e.exit(a),d):A===null||A===32||A===41||rn(A)?r(A):(e.enter(n),e.enter(l),e.enter(s),e.enter("chunkString",{contentType:"string"}),w(A))}function d(A){return A===62?(e.enter(a),e.consume(A),e.exit(a),e.exit(i),e.exit(n),t):(e.enter(s),e.enter("chunkString",{contentType:"string"}),p(A))}function p(A){return A===62?(e.exit("chunkString"),e.exit(s),d(A)):A===null||A===60||K(A)?r(A):(e.consume(A),A===92?y:p)}function y(A){return A===60||A===62||A===92?(e.consume(A),p):p(A)}function w(A){return!h&&(A===null||A===41||me(A))?(e.exit("chunkString"),e.exit(s),e.exit(l),e.exit(n),t(A)):h999||p===null||p===91||p===93&&!o||p===94&&!s&&"_hiddenFootnoteSupport"in l.parser.constructs?r(p):p===93?(e.exit(a),e.enter(i),e.consume(p),e.exit(i),e.exit(n),t):K(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),h):(e.enter("chunkString",{contentType:"string"}),m(p))}function m(p){return p===null||p===91||p===93||K(p)||s++>999?(e.exit("chunkString"),h(p)):(e.consume(p),o||(o=!le(p)),p===92?d:m)}function d(p){return p===91||p===92||p===93?(e.consume(p),s++,m):m(p)}}function Dl(e,t,r,n,i,a){let l;return s;function s(d){return d===34||d===39||d===40?(e.enter(n),e.enter(i),e.consume(d),e.exit(i),l=d===40?41:d,o):r(d)}function o(d){return d===l?(e.enter(i),e.consume(d),e.exit(i),e.exit(n),t):(e.enter(a),u(d))}function u(d){return d===l?(e.exit(a),o(l)):d===null?r(d):K(d)?(e.enter("lineEnding"),e.consume(d),e.exit("lineEnding"),ie(e,u,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),h(d))}function h(d){return d===l||d===null||K(d)?(e.exit("chunkString"),u(d)):(e.consume(d),d===92?m:h)}function m(d){return d===l||d===92?(e.consume(d),h):h(d)}}function xr(e,t){let r;return n;function n(i){return K(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),r=!0,n):le(i)?ie(e,n,r?"linePrefix":"lineSuffix")(i):t(i)}}function nt(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Lu={name:"definition",tokenize:Pu},Nu={partial:!0,tokenize:Ou};function Pu(e,t,r){const n=this;let i;return a;function a(p){return e.enter("definition"),l(p)}function l(p){return Il.call(n,e,s,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function s(p){return i=nt(n.sliceSerialize(n.events[n.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),o):r(p)}function o(p){return me(p)?xr(e,u)(p):u(p)}function u(p){return El(e,h,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function h(p){return e.attempt(Nu,m,m)(p)}function m(p){return le(p)?ie(e,d,"whitespace")(p):d(p)}function d(p){return p===null||K(p)?(e.exit("definition"),n.parser.defined.push(i),t(p)):r(p)}}function Ou(e,t,r){return n;function n(s){return me(s)?xr(e,i)(s):r(s)}function i(s){return Dl(e,a,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(s)}function a(s){return le(s)?ie(e,l,"whitespace")(s):l(s)}function l(s){return s===null||K(s)?t(s):r(s)}}const qu={name:"hardBreakEscape",tokenize:Hu};function Hu(e,t,r){return n;function n(a){return e.enter("hardBreakEscape"),e.consume(a),i}function i(a){return K(a)?(e.exit("hardBreakEscape"),t(a)):r(a)}}const ju={name:"headingAtx",resolve:$u,tokenize:Uu};function $u(e,t){let r=e.length-2,n=3,i,a;return e[n][1].type==="whitespace"&&(n+=2),r-2>n&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(n===r-1||r-4>n&&e[r-2][1].type==="whitespace")&&(r-=n+1===r?2:4),r>n&&(i={type:"atxHeadingText",start:e[n][1].start,end:e[r][1].end},a={type:"chunkText",start:e[n][1].start,end:e[r][1].end,contentType:"text"},Ge(e,n,r-n+1,[["enter",i,t],["enter",a,t],["exit",a,t],["exit",i,t]])),e}function Uu(e,t,r){let n=0;return i;function i(h){return e.enter("atxHeading"),a(h)}function a(h){return e.enter("atxHeadingSequence"),l(h)}function l(h){return h===35&&n++<6?(e.consume(h),l):h===null||me(h)?(e.exit("atxHeadingSequence"),s(h)):r(h)}function s(h){return h===35?(e.enter("atxHeadingSequence"),o(h)):h===null||K(h)?(e.exit("atxHeading"),t(h)):le(h)?ie(e,s,"whitespace")(h):(e.enter("atxHeadingText"),u(h))}function o(h){return h===35?(e.consume(h),o):(e.exit("atxHeadingSequence"),s(h))}function u(h){return h===null||h===35||me(h)?(e.exit("atxHeadingText"),s(h)):(e.consume(h),u)}}const Vu=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],Vi=["pre","script","style","textarea"],_u={concrete:!0,name:"htmlFlow",resolveTo:Xu,tokenize:Yu},Gu={partial:!0,tokenize:Zu},Wu={partial:!0,tokenize:Ku};function Xu(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function Yu(e,t,r){const n=this;let i,a,l,s,o;return u;function u(S){return h(S)}function h(S){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(S),m}function m(S){return S===33?(e.consume(S),d):S===47?(e.consume(S),a=!0,w):S===63?(e.consume(S),i=3,n.interrupt?t:k):Ne(S)?(e.consume(S),l=String.fromCharCode(S),C):r(S)}function d(S){return S===45?(e.consume(S),i=2,p):S===91?(e.consume(S),i=5,s=0,y):Ne(S)?(e.consume(S),i=4,n.interrupt?t:k):r(S)}function p(S){return S===45?(e.consume(S),n.interrupt?t:k):r(S)}function y(S){const Ee="CDATA[";return S===Ee.charCodeAt(s++)?(e.consume(S),s===Ee.length?n.interrupt?t:$:y):r(S)}function w(S){return Ne(S)?(e.consume(S),l=String.fromCharCode(S),C):r(S)}function C(S){if(S===null||S===47||S===62||me(S)){const Ee=S===47,it=l.toLowerCase();return!Ee&&!a&&Vi.includes(it)?(i=1,n.interrupt?t(S):$(S)):Vu.includes(l.toLowerCase())?(i=6,Ee?(e.consume(S),A):n.interrupt?t(S):$(S)):(i=7,n.interrupt&&!n.parser.lazy[n.now().line]?r(S):a?z(S):I(S))}return S===45||Ie(S)?(e.consume(S),l+=String.fromCharCode(S),C):r(S)}function A(S){return S===62?(e.consume(S),n.interrupt?t:$):r(S)}function z(S){return le(S)?(e.consume(S),z):E(S)}function I(S){return S===47?(e.consume(S),E):S===58||S===95||Ne(S)?(e.consume(S),q):le(S)?(e.consume(S),I):E(S)}function q(S){return S===45||S===46||S===58||S===95||Ie(S)?(e.consume(S),q):O(S)}function O(S){return S===61?(e.consume(S),M):le(S)?(e.consume(S),O):I(S)}function M(S){return S===null||S===60||S===61||S===62||S===96?r(S):S===34||S===39?(e.consume(S),o=S,G):le(S)?(e.consume(S),M):X(S)}function G(S){return S===o?(e.consume(S),o=null,U):S===null||K(S)?r(S):(e.consume(S),G)}function X(S){return S===null||S===34||S===39||S===47||S===60||S===61||S===62||S===96||me(S)?O(S):(e.consume(S),X)}function U(S){return S===47||S===62||le(S)?I(S):r(S)}function E(S){return S===62?(e.consume(S),V):r(S)}function V(S){return S===null||K(S)?$(S):le(S)?(e.consume(S),V):r(S)}function $(S){return S===45&&i===2?(e.consume(S),ae):S===60&&i===1?(e.consume(S),pe):S===62&&i===4?(e.consume(S),xe):S===63&&i===3?(e.consume(S),k):S===93&&i===5?(e.consume(S),$e):K(S)&&(i===6||i===7)?(e.exit("htmlFlowData"),e.check(Gu,Fe,se)(S)):S===null||K(S)?(e.exit("htmlFlowData"),se(S)):(e.consume(S),$)}function se(S){return e.check(Wu,Y,Fe)(S)}function Y(S){return e.enter("lineEnding"),e.consume(S),e.exit("lineEnding"),H}function H(S){return S===null||K(S)?se(S):(e.enter("htmlFlowData"),$(S))}function ae(S){return S===45?(e.consume(S),k):$(S)}function pe(S){return S===47?(e.consume(S),l="",Me):$(S)}function Me(S){if(S===62){const Ee=l.toLowerCase();return Vi.includes(Ee)?(e.consume(S),xe):$(S)}return Ne(S)&&l.length<8?(e.consume(S),l+=String.fromCharCode(S),Me):$(S)}function $e(S){return S===93?(e.consume(S),k):$(S)}function k(S){return S===62?(e.consume(S),xe):S===45&&i===2?(e.consume(S),k):$(S)}function xe(S){return S===null||K(S)?(e.exit("htmlFlowData"),Fe(S)):(e.consume(S),xe)}function Fe(S){return e.exit("htmlFlow"),t(S)}}function Ku(e,t,r){const n=this;return i;function i(l){return K(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),a):r(l)}function a(l){return n.parser.lazy[n.now().line]?r(l):t(l)}}function Zu(e,t,r){return n;function n(i){return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),e.attempt(Ir,t,r)}}const Qu={name:"htmlText",tokenize:Ju};function Ju(e,t,r){const n=this;let i,a,l;return s;function s(k){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(k),o}function o(k){return k===33?(e.consume(k),u):k===47?(e.consume(k),O):k===63?(e.consume(k),I):Ne(k)?(e.consume(k),X):r(k)}function u(k){return k===45?(e.consume(k),h):k===91?(e.consume(k),a=0,y):Ne(k)?(e.consume(k),z):r(k)}function h(k){return k===45?(e.consume(k),p):r(k)}function m(k){return k===null?r(k):k===45?(e.consume(k),d):K(k)?(l=m,pe(k)):(e.consume(k),m)}function d(k){return k===45?(e.consume(k),p):m(k)}function p(k){return k===62?ae(k):k===45?d(k):m(k)}function y(k){const xe="CDATA[";return k===xe.charCodeAt(a++)?(e.consume(k),a===xe.length?w:y):r(k)}function w(k){return k===null?r(k):k===93?(e.consume(k),C):K(k)?(l=w,pe(k)):(e.consume(k),w)}function C(k){return k===93?(e.consume(k),A):w(k)}function A(k){return k===62?ae(k):k===93?(e.consume(k),A):w(k)}function z(k){return k===null||k===62?ae(k):K(k)?(l=z,pe(k)):(e.consume(k),z)}function I(k){return k===null?r(k):k===63?(e.consume(k),q):K(k)?(l=I,pe(k)):(e.consume(k),I)}function q(k){return k===62?ae(k):I(k)}function O(k){return Ne(k)?(e.consume(k),M):r(k)}function M(k){return k===45||Ie(k)?(e.consume(k),M):G(k)}function G(k){return K(k)?(l=G,pe(k)):le(k)?(e.consume(k),G):ae(k)}function X(k){return k===45||Ie(k)?(e.consume(k),X):k===47||k===62||me(k)?U(k):r(k)}function U(k){return k===47?(e.consume(k),ae):k===58||k===95||Ne(k)?(e.consume(k),E):K(k)?(l=U,pe(k)):le(k)?(e.consume(k),U):ae(k)}function E(k){return k===45||k===46||k===58||k===95||Ie(k)?(e.consume(k),E):V(k)}function V(k){return k===61?(e.consume(k),$):K(k)?(l=V,pe(k)):le(k)?(e.consume(k),V):U(k)}function $(k){return k===null||k===60||k===61||k===62||k===96?r(k):k===34||k===39?(e.consume(k),i=k,se):K(k)?(l=$,pe(k)):le(k)?(e.consume(k),$):(e.consume(k),Y)}function se(k){return k===i?(e.consume(k),i=void 0,H):k===null?r(k):K(k)?(l=se,pe(k)):(e.consume(k),se)}function Y(k){return k===null||k===34||k===39||k===60||k===61||k===96?r(k):k===47||k===62||me(k)?U(k):(e.consume(k),Y)}function H(k){return k===47||k===62||me(k)?U(k):r(k)}function ae(k){return k===62?(e.consume(k),e.exit("htmlTextData"),e.exit("htmlText"),t):r(k)}function pe(k){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(k),e.exit("lineEnding"),Me}function Me(k){return le(k)?ie(e,$e,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(k):$e(k)}function $e(k){return e.enter("htmlTextData"),l(k)}}const X0={name:"labelEnd",resolveAll:n1,resolveTo:i1,tokenize:a1},e1={tokenize:l1},t1={tokenize:s1},r1={tokenize:o1};function n1(e){let t=-1;const r=[];for(;++t=3&&(u===null||K(u))?(e.exit("thematicBreak"),t(u)):r(u)}function o(u){return u===i?(e.consume(u),n++,o):(e.exit("thematicBreakSequence"),le(u)?ie(e,s,"whitespace")(u):s(u))}}const qe={continuation:{tokenize:y1},exit:x1,name:"list",tokenize:v1},d1={partial:!0,tokenize:w1},g1={partial:!0,tokenize:b1};function v1(e,t,r){const n=this,i=n.events[n.events.length-1];let a=i&&i[1].type==="linePrefix"?i[2].sliceSerialize(i[1],!0).length:0,l=0;return s;function s(p){const y=n.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(y==="listUnordered"?!n.containerState.marker||p===n.containerState.marker:y0(p)){if(n.containerState.type||(n.containerState.type=y,e.enter(y,{_container:!0})),y==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(Jr,r,u)(p):u(p);if(!n.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),o(p)}return r(p)}function o(p){return y0(p)&&++l<10?(e.consume(p),o):(!n.interrupt||l<2)&&(n.containerState.marker?p===n.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),u(p)):r(p)}function u(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),n.containerState.marker=n.containerState.marker||p,e.check(Ir,n.interrupt?r:h,e.attempt(d1,d,m))}function h(p){return n.containerState.initialBlankLine=!0,a++,d(p)}function m(p){return le(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),d):r(p)}function d(p){return n.containerState.size=a+n.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(p)}}function y1(e,t,r){const n=this;return n.containerState._closeFlow=void 0,e.check(Ir,i,a);function i(s){return n.containerState.furtherBlankLines=n.containerState.furtherBlankLines||n.containerState.initialBlankLine,ie(e,t,"listItemIndent",n.containerState.size+1)(s)}function a(s){return n.containerState.furtherBlankLines||!le(s)?(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,l(s)):(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,e.attempt(g1,t,l)(s))}function l(s){return n.containerState._closeFlow=!0,n.interrupt=void 0,ie(e,e.attempt(qe,t,r),"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(s)}}function b1(e,t,r){const n=this;return ie(e,i,"listItemIndent",n.containerState.size+1);function i(a){const l=n.events[n.events.length-1];return l&&l[1].type==="listItemIndent"&&l[2].sliceSerialize(l[1],!0).length===n.containerState.size?t(a):r(a)}}function x1(e){e.exit(this.containerState.type)}function w1(e,t,r){const n=this;return ie(e,i,"listItemPrefixWhitespace",n.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function i(a){const l=n.events[n.events.length-1];return!le(a)&&l&&l[1].type==="listItemPrefixWhitespace"?t(a):r(a)}}const _i={name:"setextUnderline",resolveTo:k1,tokenize:S1};function k1(e,t){let r=e.length,n,i,a;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){n=r;break}e[r][1].type==="paragraph"&&(i=r)}else e[r][1].type==="content"&&e.splice(r,1),!a&&e[r][1].type==="definition"&&(a=r);const l={type:"setextHeading",start:{...e[n][1].start},end:{...e[e.length-1][1].end}};return e[i][1].type="setextHeadingText",a?(e.splice(i,0,["enter",l,t]),e.splice(a+1,0,["exit",e[n][1],t]),e[n][1].end={...e[a][1].end}):e[n][1]=l,e.push(["exit",l,t]),e}function S1(e,t,r){const n=this;let i;return a;function a(u){let h=n.events.length,m;for(;h--;)if(n.events[h][1].type!=="lineEnding"&&n.events[h][1].type!=="linePrefix"&&n.events[h][1].type!=="content"){m=n.events[h][1].type==="paragraph";break}return!n.parser.lazy[n.now().line]&&(n.interrupt||m)?(e.enter("setextHeadingLine"),i=u,l(u)):r(u)}function l(u){return e.enter("setextHeadingLineSequence"),s(u)}function s(u){return u===i?(e.consume(u),s):(e.exit("setextHeadingLineSequence"),le(u)?ie(e,o,"lineSuffix")(u):o(u))}function o(u){return u===null||K(u)?(e.exit("setextHeadingLine"),t(u)):r(u)}}const Gi={}.hasOwnProperty;function Bl(e){const t={};let r=-1;for(;++r13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCodePoint(r)}function ar(e){const t=[];let r=-1,n=0,i=0;for(;++r55295&&a<57344){const s=e.charCodeAt(r+1);a<56320&&s>56319&&s<57344?(l=String.fromCharCode(a,s),i=1):l="�"}else l=String.fromCharCode(a);l&&(t.push(e.slice(n,r),encodeURIComponent(l)),n=r+i+1,l=""),i&&(r+=i,i=0)}return t.join("")+e.slice(n)}const M1={tokenize:E1};function E1(e){const t=e.attempt(this.parser.constructs.contentInitial,n,i);let r;return t;function n(s){if(s===null){e.consume(s);return}return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),ie(e,t,"linePrefix")}function i(s){return e.enter("paragraph"),a(s)}function a(s){const o=e.enter("chunkText",{contentType:"text",previous:r});return r&&(r.next=o),r=o,l(s)}function l(s){if(s===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(s);return}return K(s)?(e.consume(s),e.exit("chunkText"),a):(e.consume(s),l)}}const I1={tokenize:D1},Xi={tokenize:B1};function D1(e){const t=this,r=[];let n=0,i,a,l;return s;function s(I){if(nl))return;const G=t.events.length;let X=G,U,E;for(;X--;)if(t.events[X][0]==="exit"&&t.events[X][1].type==="chunkFlow"){if(U){E=t.events[X][1].end;break}U=!0}for(A(n),M=G;MI;){const O=r[q];t.containerState=O[1],O[0].exit.call(t,e)}r.length=I}function z(){i.write([null]),a=void 0,i=void 0,t.containerState._closeFlow=void 0}}function B1(e,t,r){return ie(e,e.attempt(this.parser.constructs.document,t,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}const F1={tokenize:R1};function R1(e){const t=this,r=e.attempt(Ir,n,e.attempt(this.parser.constructs.flowInitial,i,ie(e,e.attempt(this.parser.constructs.flow,i,e.attempt(Iu,i)),"linePrefix")));return r;function n(a){if(a===null){e.consume(a);return}return e.enter("lineEndingBlank"),e.consume(a),e.exit("lineEndingBlank"),t.currentConstruct=void 0,r}function i(a){if(a===null){e.consume(a);return}return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),t.currentConstruct=void 0,r}}const L1={resolveAll:Nl()},N1=Ll("string"),P1=Ll("text");function Ll(e){return{resolveAll:Nl(e==="text"?O1:void 0),tokenize:t};function t(r){const n=this,i=this.parser.constructs[e],a=r.attempt(i,l,s);return l;function l(h){return u(h)?a(h):s(h)}function s(h){if(h===null){r.consume(h);return}return r.enter("data"),r.consume(h),o}function o(h){return u(h)?(r.exit("data"),a(h)):(r.consume(h),o)}function u(h){if(h===null)return!0;const m=i[h];let d=-1;if(m)for(;++d-1){const s=l[0];typeof s=="string"?l[0]=s.slice(n):l.shift()}a>0&&l.push(e[i].slice(0,a))}return l}function Z1(e,t){let r=-1;const n=[];let i;for(;++r0){const rt=Q.tokenStack[Q.tokenStack.length-1];(rt[1]||Ki).call(Q,void 0,rt[0])}for(j.position={start:St(D.length>0?D[0][1].start:{line:1,column:1,offset:0}),end:St(D.length>0?D[D.length-2][1].end:{line:1,column:1,offset:0})},ce=-1;++ce0&&(n.className=["language-"+i[0]]);let a={type:"element",tagName:"code",properties:n,children:[{type:"text",value:r}]};return t.meta&&(a.data={meta:t.meta}),e.patch(t,a),a=e.applyData(t,a),a={type:"element",tagName:"pre",properties:{},children:[a]},e.patch(t,a),a}function hc(e,t){const r={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function mc(e,t){const r={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function fc(e,t){const r=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=String(t.identifier).toUpperCase(),i=ar(n.toLowerCase()),a=e.footnoteOrder.indexOf(n);let l,s=e.footnoteCounts.get(n);s===void 0?(s=0,e.footnoteOrder.push(n),l=e.footnoteOrder.length):l=a+1,s+=1,e.footnoteCounts.set(n,s);const o={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+i,id:r+"fnref-"+i+(s>1?"-"+s:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(l)}]};e.patch(t,o);const u={type:"element",tagName:"sup",properties:{},children:[o]};return e.patch(t,u),e.applyData(t,u)}function pc(e,t){const r={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function dc(e,t){if(e.options.allowDangerousHtml){const r={type:"raw",value:t.value};return e.patch(t,r),e.applyData(t,r)}}function ql(e,t){const r=t.referenceType;let n="]";if(r==="collapsed"?n+="[]":r==="full"&&(n+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+n}];const i=e.all(t),a=i[0];a&&a.type==="text"?a.value="["+a.value:i.unshift({type:"text",value:"["});const l=i[i.length-1];return l&&l.type==="text"?l.value+=n:i.push({type:"text",value:n}),i}function gc(e,t){const r=String(t.identifier).toUpperCase(),n=e.definitionById.get(r);if(!n)return ql(e,t);const i={src:ar(n.url||""),alt:t.alt};n.title!==null&&n.title!==void 0&&(i.title=n.title);const a={type:"element",tagName:"img",properties:i,children:[]};return e.patch(t,a),e.applyData(t,a)}function vc(e,t){const r={src:ar(t.url)};t.alt!==null&&t.alt!==void 0&&(r.alt=t.alt),t.title!==null&&t.title!==void 0&&(r.title=t.title);const n={type:"element",tagName:"img",properties:r,children:[]};return e.patch(t,n),e.applyData(t,n)}function yc(e,t){const r={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,r);const n={type:"element",tagName:"code",properties:{},children:[r]};return e.patch(t,n),e.applyData(t,n)}function bc(e,t){const r=String(t.identifier).toUpperCase(),n=e.definitionById.get(r);if(!n)return ql(e,t);const i={href:ar(n.url||"")};n.title!==null&&n.title!==void 0&&(i.title=n.title);const a={type:"element",tagName:"a",properties:i,children:e.all(t)};return e.patch(t,a),e.applyData(t,a)}function xc(e,t){const r={href:ar(t.url)};t.title!==null&&t.title!==void 0&&(r.title=t.title);const n={type:"element",tagName:"a",properties:r,children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function wc(e,t,r){const n=e.all(t),i=r?kc(r):Hl(t),a={},l=[];if(typeof t.checked=="boolean"){const h=n[0];let m;h&&h.type==="element"&&h.tagName==="p"?m=h:(m={type:"element",tagName:"p",properties:{},children:[]},n.unshift(m)),m.children.length>0&&m.children.unshift({type:"text",value:" "}),m.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),a.className=["task-list-item"]}let s=-1;for(;++s1}function Sc(e,t){const r={},n=e.all(t);let i=-1;for(typeof t.start=="number"&&t.start!==1&&(r.start=t.start);++i0){const l={type:"element",tagName:"tbody",properties:{},children:e.wrap(r,!0)},s=G0(t.children[1]),o=Sl(t.children[t.children.length-1]);s&&o&&(l.position={start:s,end:o}),i.push(l)}const a={type:"element",tagName:"table",properties:{},children:e.wrap(i,!0)};return e.patch(t,a),e.applyData(t,a)}function Mc(e,t,r){const n=r?r.children:void 0,a=(n?n.indexOf(t):1)===0?"th":"td",l=r&&r.type==="table"?r.align:void 0,s=l?l.length:t.children.length;let o=-1;const u=[];for(;++o0,!0),n[0]),i=n.index+n[0].length,n=r.exec(t);return a.push(Ji(t.slice(i),i>0,!1)),a.join("")}function Ji(e,t,r){let n=0,i=e.length;if(t){let a=e.codePointAt(n);for(;a===Zi||a===Qi;)n++,a=e.codePointAt(n)}if(r){let a=e.codePointAt(i-1);for(;a===Zi||a===Qi;)i--,a=e.codePointAt(i-1)}return i>n?e.slice(n,i):""}function Dc(e,t){const r={type:"text",value:Ic(String(t.value))};return e.patch(t,r),e.applyData(t,r)}function Bc(e,t){const r={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,r),e.applyData(t,r)}const Fc={blockquote:oc,break:uc,code:cc,delete:hc,emphasis:mc,footnoteReference:fc,heading:pc,html:dc,imageReference:gc,image:vc,inlineCode:yc,linkReference:bc,link:xc,listItem:wc,list:Sc,paragraph:Ac,root:Tc,strong:Cc,table:zc,tableCell:Ec,tableRow:Mc,text:Dc,thematicBreak:Bc,toml:jr,yaml:jr,definition:jr,footnoteDefinition:jr};function jr(){}const jl=-1,vn=0,wr=1,nn=2,K0=3,Z0=4,Q0=5,J0=6,$l=7,Ul=8,Vl=typeof self=="object"?self:globalThis,ea=(e,t)=>{switch(e){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+e)}return new Vl[e](t)},Rc=(e,t)=>{const r=(i,a)=>(e.set(a,i),i),n=i=>{if(e.has(i))return e.get(i);const[a,l]=t[i];switch(a){case vn:case jl:return r(l,i);case wr:{const s=r([],i);for(const o of l)s.push(n(o));return s}case nn:{const s=r({},i);for(const[o,u]of l)s[n(o)]=n(u);return s}case K0:return r(new Date(l),i);case Z0:{const{source:s,flags:o}=l;return r(new RegExp(s,o),i)}case Q0:{const s=r(new Map,i);for(const[o,u]of l)s.set(n(o),n(u));return s}case J0:{const s=r(new Set,i);for(const o of l)s.add(n(o));return s}case $l:{const{name:s,message:o}=l;return r(typeof Vl[s]=="function"?ea(s,o):new Error(o),i)}case Ul:return r(BigInt(l),i);case"BigInt":return r(Object(BigInt(l)),i);case"ArrayBuffer":return r(new Uint8Array(l).buffer,l);case"DataView":{const{buffer:s}=new Uint8Array(l);return r(new DataView(s),l)}}return r(ea(a,l),i)};return n},ta=e=>Rc(new Map,e)(0),qt="",{toString:Lc}={},{keys:Nc}=Object,vr=e=>{const t=typeof e;if(t!=="object"||!e)return[vn,t];const r=Lc.call(e).slice(8,-1);switch(r){case"Array":return[wr,qt];case"Object":return[nn,qt];case"Date":return[K0,qt];case"RegExp":return[Z0,qt];case"Map":return[Q0,qt];case"Set":return[J0,qt];case"DataView":return[wr,r]}return r.includes("Array")?[wr,r]:e instanceof Error?[$l,e.name||"Error"]:[nn,r]},$r=([e,t])=>e===vn&&(t==="function"||t==="symbol"),Pc=(e,t,r,n)=>{const i=(l,s)=>{const o=n.push(l)-1;return r.set(s,o),o},a=l=>{if(r.has(l))return r.get(l);let[s,o]=vr(l);switch(s){case vn:{let h=l;switch(o){case"bigint":s=Ul,h=l.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+o);h=null;break;case"undefined":return i([jl],l)}return i([s,h],l)}case wr:{if(o){let d=l;return o==="DataView"?d=new Uint8Array(l.buffer):o==="ArrayBuffer"&&(d=new Uint8Array(l)),i([o,[...d]],l)}const h=[],m=i([s,h],l);for(const d of l)h.push(a(d));return m}case nn:{if(o)switch(o){case"BigInt":return i([o,l.toString()],l);case"Boolean":case"Number":case"String":return i([o,l.valueOf()],l)}if(t&&"toJSON"in l)return a(l.toJSON());const h=[],m=i([s,h],l);for(const d of Nc(l))(e||!$r(vr(l[d])))&&h.push([a(d),a(l[d])]);return m}case K0:return i([s,isNaN(l.getTime())?qt:l.toISOString()],l);case Z0:{const{source:h,flags:m}=l;return i([s,{source:h,flags:m}],l)}case Q0:{const h=[],m=i([s,h],l);for(const[d,p]of l)(e||!($r(vr(d))||$r(vr(p))))&&h.push([a(d),a(p)]);return m}case J0:{const h=[],m=i([s,h],l);for(const d of l)(e||!$r(vr(d)))&&h.push(a(d));return m}}const{message:u}=l;return i([s,{name:o,message:u}],l)};return a},ra=(e,{json:t,lossy:r}={})=>{const n=[];return Pc(!(t||r),!!t,new Map,n)(e),n},an=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?ta(ra(e,t)):structuredClone(e):(e,t)=>ta(ra(e,t));function Oc(e,t){const r=[{type:"text",value:"↩"}];return t>1&&r.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),r}function qc(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function Hc(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=e.options.footnoteBackContent||Oc,n=e.options.footnoteBackLabel||qc,i=e.options.footnoteLabel||"Footnotes",a=e.options.footnoteLabelTagName||"h2",l=e.options.footnoteLabelProperties||{className:["sr-only"]},s=[];let o=-1;for(;++o0&&y.push({type:"text",value:" "});let z=typeof r=="string"?r:r(o,p);typeof z=="string"&&(z={type:"text",value:z}),y.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+d+(p>1?"-"+p:""),dataFootnoteBackref:"",ariaLabel:typeof n=="string"?n:n(o,p),className:["data-footnote-backref"]},children:Array.isArray(z)?z:[z]})}const C=h[h.length-1];if(C&&C.type==="element"&&C.tagName==="p"){const z=C.children[C.children.length-1];z&&z.type==="text"?z.value+=" ":C.children.push({type:"text",value:" "}),C.children.push(...y)}else h.push(...y);const A={type:"element",tagName:"li",properties:{id:t+"fn-"+d},children:e.wrap(h,!0)};e.patch(u,A),s.push(A)}if(s.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:a,properties:{...an(l),id:"footnote-label"},children:[{type:"text",value:i}]},{type:"text",value:` +`},{type:"element",tagName:"ol",properties:{},children:e.wrap(s,!0)},{type:"text",value:` +`}]}}const Dr=(function(e){if(e==null)return Vc;if(typeof e=="function")return yn(e);if(typeof e=="object")return Array.isArray(e)?jc(e):$c(e);if(typeof e=="string")return Uc(e);throw new Error("Expected function, string, or object as test")});function jc(e){const t=[];let r=-1;for(;++r":""))+")"})}return d;function d(){let p=_l,y,w,C;if((!t||a(o,u,h[h.length-1]||void 0))&&(p=Wc(r(o,h)),p[0]===x0))return p;if("children"in o&&o.children){const A=o;if(A.children&&p[0]!==Gl)for(w=(n?A.children.length:-1)+l,C=h.concat(A);w>-1&&w0&&r.push({type:"text",value:` +`}),r}function na(e){let t=0,r=e.charCodeAt(t);for(;r===9||r===32;)t++,r=e.charCodeAt(t);return e.slice(t)}function ia(e,t){const r=Yc(e,t),n=r.one(e,void 0),i=Hc(r),a=Array.isArray(n)?{type:"root",children:n}:n||{type:"root",children:[]};return i&&a.children.push({type:"text",value:` +`},i),a}function eh(e,t){return e&&"run"in e?async function(r,n){const i=ia(r,{file:n,...t});await e.run(i,n)}:function(r,n){return ia(r,{file:n,...e||t})}}function aa(e){if(e)throw e}var jn,la;function th(){if(la)return jn;la=1;var e=Object.prototype.hasOwnProperty,t=Object.prototype.toString,r=Object.defineProperty,n=Object.getOwnPropertyDescriptor,i=function(u){return typeof Array.isArray=="function"?Array.isArray(u):t.call(u)==="[object Array]"},a=function(u){if(!u||t.call(u)!=="[object Object]")return!1;var h=e.call(u,"constructor"),m=u.constructor&&u.constructor.prototype&&e.call(u.constructor.prototype,"isPrototypeOf");if(u.constructor&&!h&&!m)return!1;var d;for(d in u);return typeof d>"u"||e.call(u,d)},l=function(u,h){r&&h.name==="__proto__"?r(u,h.name,{enumerable:!0,configurable:!0,value:h.newValue,writable:!0}):u[h.name]=h.newValue},s=function(u,h){if(h==="__proto__")if(e.call(u,h)){if(n)return n(u,h).value}else return;return u[h]};return jn=function o(){var u,h,m,d,p,y,w=arguments[0],C=1,A=arguments.length,z=!1;for(typeof w=="boolean"&&(z=w,w=arguments[1]||{},C=2),(w==null||typeof w!="object"&&typeof w!="function")&&(w={});Cl.length;let o;s&&l.push(i);try{o=e.apply(this,l)}catch(u){const h=u;if(s&&r)throw h;return i(h)}s||(o&&o.then&&typeof o.then=="function"?o.then(a,i):o instanceof Error?i(o):a(o))}function i(l,...s){r||(r=!0,t(l,...s))}function a(l){i(null,l)}}const ah=(function(e){const n=this.constructor.prototype,i=n[e],a=function(){return i.apply(a,arguments)};return Object.setPrototypeOf(a,n),a}),lh={}.hasOwnProperty;class ri extends ah{constructor(){super("copy"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=nh()}copy(){const t=new ri;let r=-1;for(;++r0){let[p,...y]=h;const w=n[d][1];k0(w)&&k0(p)&&(p=$n(!0,w,p)),n[d]=[u,p,...y]}}}}const sh=new ri().freeze();function Un(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function Vn(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function _n(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function sa(e){if(!k0(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function oa(e,t,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function Ur(e){return oh(e)?e:new fl(e)}function oh(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function uh(e){return typeof e=="string"||ch(e)}function ch(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}function hh(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function mh(e,t,r){const i=Dr((r||{}).ignore||[]),a=fh(t);let l=-1;for(;++l0?{type:"text",value:M}:void 0),M===!1?d.lastIndex=q+1:(y!==q&&z.push({type:"text",value:u.value.slice(y,q)}),Array.isArray(M)?z.push(...M):M&&z.push(M),y=q+I[0].length,A=!0),!d.global)break;I=d.exec(u.value)}return A?(y?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let r=t[0],n=r.indexOf(")");const i=qi(e,"(");let a=qi(e,")");for(;n!==-1&&i>a;)e+=r.slice(0,n+1),r=r.slice(n+1),n=r.indexOf(")"),a++;return[e,r]}function Wl(e,t){const r=e.input.charCodeAt(e.index-1);return(e.index===0||Ut(r)||dn(r))&&(!t||r!==47)}Xl.peek=Nh;function Mh(){this.buffer()}function Eh(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function Ih(){this.buffer()}function Dh(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function Bh(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=nt(this.sliceSerialize(e)).toLowerCase(),r.label=t}function Fh(e){this.exit(e)}function Rh(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=nt(this.sliceSerialize(e)).toLowerCase(),r.label=t}function Lh(e){this.exit(e)}function Nh(){return"["}function Xl(e,t,r,n){const i=r.createTracker(n);let a=i.move("[^");const l=r.enter("footnoteReference"),s=r.enter("reference");return a+=i.move(r.safe(r.associationId(e),{after:"]",before:a})),s(),l(),a+=i.move("]"),a}function Ph(){return{enter:{gfmFootnoteCallString:Mh,gfmFootnoteCall:Eh,gfmFootnoteDefinitionLabelString:Ih,gfmFootnoteDefinition:Dh},exit:{gfmFootnoteCallString:Bh,gfmFootnoteCall:Fh,gfmFootnoteDefinitionLabelString:Rh,gfmFootnoteDefinition:Lh}}}function Oh(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:r,footnoteReference:Xl},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function r(n,i,a,l){const s=a.createTracker(l);let o=s.move("[^");const u=a.enter("footnoteDefinition"),h=a.enter("label");return o+=s.move(a.safe(a.associationId(n),{before:o,after:"]"})),h(),o+=s.move("]:"),n.children&&n.children.length>0&&(s.shift(4),o+=s.move((t?` +`:" ")+a.indentLines(a.containerFlow(n,s.current()),t?Yl:qh))),u(),o}}function qh(e,t,r){return t===0?e:Yl(e,t,r)}function Yl(e,t,r){return(r?"":" ")+e}const Hh=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Kl.peek=_h;function jh(){return{canContainEols:["delete"],enter:{strikethrough:Uh},exit:{strikethrough:Vh}}}function $h(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:Hh}],handlers:{delete:Kl}}}function Uh(e){this.enter({type:"delete",children:[]},e)}function Vh(e){this.exit(e)}function Kl(e,t,r,n){const i=r.createTracker(n),a=r.enter("strikethrough");let l=i.move("~~");return l+=r.containerPhrasing(e,{...i.current(),before:l,after:"~"}),l+=i.move("~~"),a(),l}function _h(){return"~"}function Gh(e){return e.length}function Wh(e,t){const r=t||{},n=(r.align||[]).concat(),i=r.stringLength||Gh,a=[],l=[],s=[],o=[];let u=0,h=-1;for(;++hu&&(u=e[h].length);++Ao[A])&&(o[A]=I)}w.push(z)}l[h]=w,s[h]=C}let m=-1;if(typeof n=="object"&&"length"in n)for(;++mo[m]&&(o[m]=z),p[m]=z),d[m]=I}l.splice(1,0,d),s.splice(1,0,p),h=-1;const y=[];for(;++h "),a.shift(2);const l=r.indentLines(r.containerFlow(e,a.current()),Kh);return i(),l}function Kh(e,t,r){return">"+(r?"":" ")+e}function Zh(e,t){return ca(e,t.inConstruct,!0)&&!ca(e,t.notInConstruct,!1)}function ca(e,t,r){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return r;let n=-1;for(;++nl&&(l=a):a=1,i=n+t.length,n=r.indexOf(t,i);return l}function Qh(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function Jh(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function e4(e,t,r,n){const i=Jh(r),a=e.value||"",l=i==="`"?"GraveAccent":"Tilde";if(Qh(e,r)){const m=r.enter("codeIndented"),d=r.indentLines(a,t4);return m(),d}const s=r.createTracker(n),o=i.repeat(Math.max(Zl(a,i)+1,3)),u=r.enter("codeFenced");let h=s.move(o);if(e.lang){const m=r.enter(`codeFencedLang${l}`);h+=s.move(r.safe(e.lang,{before:h,after:" ",encode:["`"],...s.current()})),m()}if(e.lang&&e.meta){const m=r.enter(`codeFencedMeta${l}`);h+=s.move(" "),h+=s.move(r.safe(e.meta,{before:h,after:` +`,encode:["`"],...s.current()})),m()}return h+=s.move(` +`),a&&(h+=s.move(a+` +`)),h+=s.move(o),u(),h}function t4(e,t,r){return(r?"":" ")+e}function ni(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function r4(e,t,r,n){const i=ni(r),a=i==='"'?"Quote":"Apostrophe",l=r.enter("definition");let s=r.enter("label");const o=r.createTracker(n);let u=o.move("[");return u+=o.move(r.safe(r.associationId(e),{before:u,after:"]",...o.current()})),u+=o.move("]: "),s(),!e.url||/[\0- \u007F]/.test(e.url)?(s=r.enter("destinationLiteral"),u+=o.move("<"),u+=o.move(r.safe(e.url,{before:u,after:">",...o.current()})),u+=o.move(">")):(s=r.enter("destinationRaw"),u+=o.move(r.safe(e.url,{before:u,after:e.title?" ":` +`,...o.current()}))),s(),e.title&&(s=r.enter(`title${a}`),u+=o.move(" "+i),u+=o.move(r.safe(e.title,{before:u,after:i,...o.current()})),u+=o.move(i),s()),l(),u}function n4(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function Ar(e){return"&#x"+e.toString(16).toUpperCase()+";"}function ln(e,t,r){const n=er(e),i=er(t);return n===void 0?i===void 0?r==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:n===1?i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}Ql.peek=i4;function Ql(e,t,r,n){const i=n4(r),a=r.enter("emphasis"),l=r.createTracker(n),s=l.move(i);let o=l.move(r.containerPhrasing(e,{after:i,before:s,...l.current()}));const u=o.charCodeAt(0),h=ln(n.before.charCodeAt(n.before.length-1),u,i);h.inside&&(o=Ar(u)+o.slice(1));const m=o.charCodeAt(o.length-1),d=ln(n.after.charCodeAt(0),m,i);d.inside&&(o=o.slice(0,-1)+Ar(m));const p=l.move(i);return a(),r.attentionEncodeSurroundingInfo={after:d.outside,before:h.outside},s+o+p}function i4(e,t,r){return r.options.emphasis||"*"}function a4(e,t){let r=!1;return ti(e,function(n){if("value"in n&&/\r?\n|\r/.test(n.value)||n.type==="break")return r=!0,x0}),!!((!e.depth||e.depth<3)&&Y0(e)&&(t.options.setext||r))}function l4(e,t,r,n){const i=Math.max(Math.min(6,e.depth||1),1),a=r.createTracker(n);if(a4(e,r)){const h=r.enter("headingSetext"),m=r.enter("phrasing"),d=r.containerPhrasing(e,{...a.current(),before:` +`,after:` +`});return m(),h(),d+` +`+(i===1?"=":"-").repeat(d.length-(Math.max(d.lastIndexOf("\r"),d.lastIndexOf(` +`))+1))}const l="#".repeat(i),s=r.enter("headingAtx"),o=r.enter("phrasing");a.move(l+" ");let u=r.containerPhrasing(e,{before:"# ",after:` +`,...a.current()});return/^[\t ]/.test(u)&&(u=Ar(u.charCodeAt(0))+u.slice(1)),u=u?l+" "+u:l,r.options.closeAtx&&(u+=" "+l),o(),s(),u}Jl.peek=s4;function Jl(e){return e.value||""}function s4(){return"<"}es.peek=o4;function es(e,t,r,n){const i=ni(r),a=i==='"'?"Quote":"Apostrophe",l=r.enter("image");let s=r.enter("label");const o=r.createTracker(n);let u=o.move("![");return u+=o.move(r.safe(e.alt,{before:u,after:"]",...o.current()})),u+=o.move("]("),s(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(s=r.enter("destinationLiteral"),u+=o.move("<"),u+=o.move(r.safe(e.url,{before:u,after:">",...o.current()})),u+=o.move(">")):(s=r.enter("destinationRaw"),u+=o.move(r.safe(e.url,{before:u,after:e.title?" ":")",...o.current()}))),s(),e.title&&(s=r.enter(`title${a}`),u+=o.move(" "+i),u+=o.move(r.safe(e.title,{before:u,after:i,...o.current()})),u+=o.move(i),s()),u+=o.move(")"),l(),u}function o4(){return"!"}ts.peek=u4;function ts(e,t,r,n){const i=e.referenceType,a=r.enter("imageReference");let l=r.enter("label");const s=r.createTracker(n);let o=s.move("![");const u=r.safe(e.alt,{before:o,after:"]",...s.current()});o+=s.move(u+"]["),l();const h=r.stack;r.stack=[],l=r.enter("reference");const m=r.safe(r.associationId(e),{before:o,after:"]",...s.current()});return l(),r.stack=h,a(),i==="full"||!u||u!==m?o+=s.move(m+"]"):i==="shortcut"?o=o.slice(0,-1):o+=s.move("]"),o}function u4(){return"!"}rs.peek=c4;function rs(e,t,r){let n=e.value||"",i="`",a=-1;for(;new RegExp("(^|[^`])"+i+"([^`]|$)").test(n);)i+="`";for(/[^ \r\n]/.test(n)&&(/^[ \r\n]/.test(n)&&/[ \r\n]$/.test(n)||/^`|`$/.test(n))&&(n=" "+n+" ");++a\u007F]/.test(e.url))}is.peek=h4;function is(e,t,r,n){const i=ni(r),a=i==='"'?"Quote":"Apostrophe",l=r.createTracker(n);let s,o;if(ns(e,r)){const h=r.stack;r.stack=[],s=r.enter("autolink");let m=l.move("<");return m+=l.move(r.containerPhrasing(e,{before:m,after:">",...l.current()})),m+=l.move(">"),s(),r.stack=h,m}s=r.enter("link"),o=r.enter("label");let u=l.move("[");return u+=l.move(r.containerPhrasing(e,{before:u,after:"](",...l.current()})),u+=l.move("]("),o(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(o=r.enter("destinationLiteral"),u+=l.move("<"),u+=l.move(r.safe(e.url,{before:u,after:">",...l.current()})),u+=l.move(">")):(o=r.enter("destinationRaw"),u+=l.move(r.safe(e.url,{before:u,after:e.title?" ":")",...l.current()}))),o(),e.title&&(o=r.enter(`title${a}`),u+=l.move(" "+i),u+=l.move(r.safe(e.title,{before:u,after:i,...l.current()})),u+=l.move(i),o()),u+=l.move(")"),s(),u}function h4(e,t,r){return ns(e,r)?"<":"["}as.peek=m4;function as(e,t,r,n){const i=e.referenceType,a=r.enter("linkReference");let l=r.enter("label");const s=r.createTracker(n);let o=s.move("[");const u=r.containerPhrasing(e,{before:o,after:"]",...s.current()});o+=s.move(u+"]["),l();const h=r.stack;r.stack=[],l=r.enter("reference");const m=r.safe(r.associationId(e),{before:o,after:"]",...s.current()});return l(),r.stack=h,a(),i==="full"||!u||u!==m?o+=s.move(m+"]"):i==="shortcut"?o=o.slice(0,-1):o+=s.move("]"),o}function m4(){return"["}function ii(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function f4(e){const t=ii(e),r=e.options.bulletOther;if(!r)return t==="*"?"-":"*";if(r!=="*"&&r!=="+"&&r!=="-")throw new Error("Cannot serialize items with `"+r+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(r===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+r+"`) to be different");return r}function p4(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function ls(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function d4(e,t,r,n){const i=r.enter("list"),a=r.bulletCurrent;let l=e.ordered?p4(r):ii(r);const s=e.ordered?l==="."?")":".":f4(r);let o=t&&r.bulletLastUsed?l===r.bulletLastUsed:!1;if(!e.ordered){const h=e.children?e.children[0]:void 0;if((l==="*"||l==="-")&&h&&(!h.children||!h.children[0])&&r.stack[r.stack.length-1]==="list"&&r.stack[r.stack.length-2]==="listItem"&&r.stack[r.stack.length-3]==="list"&&r.stack[r.stack.length-4]==="listItem"&&r.indexStack[r.indexStack.length-1]===0&&r.indexStack[r.indexStack.length-2]===0&&r.indexStack[r.indexStack.length-3]===0&&(o=!0),ls(r)===l&&h){let m=-1;for(;++m-1?t.start:1)+(r.options.incrementListMarker===!1?0:t.children.indexOf(e))+a);let l=a.length+1;(i==="tab"||i==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(l=Math.ceil(l/4)*4);const s=r.createTracker(n);s.move(a+" ".repeat(l-a.length)),s.shift(l);const o=r.enter("listItem"),u=r.indentLines(r.containerFlow(e,s.current()),h);return o(),u;function h(m,d,p){return d?(p?"":" ".repeat(l))+m:(p?a:a+" ".repeat(l-a.length))+m}}function y4(e,t,r,n){const i=r.enter("paragraph"),a=r.enter("phrasing"),l=r.containerPhrasing(e,n);return a(),i(),l}const b4=Dr(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function x4(e,t,r,n){return(e.children.some(function(l){return b4(l)})?r.containerPhrasing:r.containerFlow).call(r,e,n)}function w4(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}ss.peek=k4;function ss(e,t,r,n){const i=w4(r),a=r.enter("strong"),l=r.createTracker(n),s=l.move(i+i);let o=l.move(r.containerPhrasing(e,{after:i,before:s,...l.current()}));const u=o.charCodeAt(0),h=ln(n.before.charCodeAt(n.before.length-1),u,i);h.inside&&(o=Ar(u)+o.slice(1));const m=o.charCodeAt(o.length-1),d=ln(n.after.charCodeAt(0),m,i);d.inside&&(o=o.slice(0,-1)+Ar(m));const p=l.move(i+i);return a(),r.attentionEncodeSurroundingInfo={after:d.outside,before:h.outside},s+o+p}function k4(e,t,r){return r.options.strong||"*"}function S4(e,t,r,n){return r.safe(e.value,n)}function A4(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function T4(e,t,r){const n=(ls(r)+(r.options.ruleSpaces?" ":"")).repeat(A4(r));return r.options.ruleSpaces?n.slice(0,-1):n}const os={blockquote:Yh,break:ha,code:e4,definition:r4,emphasis:Ql,hardBreak:ha,heading:l4,html:Jl,image:es,imageReference:ts,inlineCode:rs,link:is,linkReference:as,list:d4,listItem:v4,paragraph:y4,root:x4,strong:ss,text:S4,thematicBreak:T4};function C4(){return{enter:{table:z4,tableData:ma,tableHeader:ma,tableRow:E4},exit:{codeText:I4,table:M4,tableData:Yn,tableHeader:Yn,tableRow:Yn}}}function z4(e){const t=e._align;this.enter({type:"table",align:t.map(function(r){return r==="none"?null:r}),children:[]},e),this.data.inTable=!0}function M4(e){this.exit(e),this.data.inTable=void 0}function E4(e){this.enter({type:"tableRow",children:[]},e)}function Yn(e){this.exit(e)}function ma(e){this.enter({type:"tableCell",children:[]},e)}function I4(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,D4));const r=this.stack[this.stack.length-1];r.type,r.value=t,this.exit(e)}function D4(e,t){return t==="|"?t:e}function B4(e){const t=e||{},r=t.tableCellPadding,n=t.tablePipeAlign,i=t.stringLength,a=r?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` +`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:d,table:l,tableCell:o,tableRow:s}};function l(p,y,w,C){return u(h(p,w,C),p.align)}function s(p,y,w,C){const A=m(p,w,C),z=u([A]);return z.slice(0,z.indexOf(` +`))}function o(p,y,w,C){const A=w.enter("tableCell"),z=w.enter("phrasing"),I=w.containerPhrasing(p,{...C,before:a,after:a});return z(),A(),I}function u(p,y){return Wh(p,{align:y,alignDelimiters:n,padding:r,stringLength:i})}function h(p,y,w){const C=p.children;let A=-1;const z=[],I=y.enter("table");for(;++A0&&!r&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),r}const K4={tokenize:im,partial:!0};function Z4(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:tm,continuation:{tokenize:rm},exit:nm}},text:{91:{name:"gfmFootnoteCall",tokenize:em},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:Q4,resolveTo:J4}}}}function Q4(e,t,r){const n=this;let i=n.events.length;const a=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let l;for(;i--;){const o=n.events[i][1];if(o.type==="labelImage"){l=o;break}if(o.type==="gfmFootnoteCall"||o.type==="labelLink"||o.type==="label"||o.type==="image"||o.type==="link")break}return s;function s(o){if(!l||!l._balanced)return r(o);const u=nt(n.sliceSerialize({start:l.end,end:n.now()}));return u.codePointAt(0)!==94||!a.includes(u.slice(1))?r(o):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(o),e.exit("gfmFootnoteCallLabelMarker"),t(o))}}function J4(e,t){let r=e.length;for(;r--;)if(e[r][1].type==="labelImage"&&e[r][0]==="enter"){e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";const n={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;const a={type:"gfmFootnoteCallString",start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},l={type:"chunkString",contentType:"string",start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[r+1],e[r+2],["enter",n,t],e[r+3],e[r+4],["enter",i,t],["exit",i,t],["enter",a,t],["enter",l,t],["exit",l,t],["exit",a,t],e[e.length-2],e[e.length-1],["exit",n,t]];return e.splice(r,e.length-r+1,...s),e}function em(e,t,r){const n=this,i=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let a=0,l;return s;function s(m){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(m),e.exit("gfmFootnoteCallLabelMarker"),o}function o(m){return m!==94?r(m):(e.enter("gfmFootnoteCallMarker"),e.consume(m),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",u)}function u(m){if(a>999||m===93&&!l||m===null||m===91||me(m))return r(m);if(m===93){e.exit("chunkString");const d=e.exit("gfmFootnoteCallString");return i.includes(nt(n.sliceSerialize(d)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(m),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):r(m)}return me(m)||(l=!0),a++,e.consume(m),m===92?h:u}function h(m){return m===91||m===92||m===93?(e.consume(m),a++,u):u(m)}}function tm(e,t,r){const n=this,i=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]);let a,l=0,s;return o;function o(y){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(y),e.exit("gfmFootnoteDefinitionLabelMarker"),u}function u(y){return y===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(y),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",h):r(y)}function h(y){if(l>999||y===93&&!s||y===null||y===91||me(y))return r(y);if(y===93){e.exit("chunkString");const w=e.exit("gfmFootnoteDefinitionLabelString");return a=nt(n.sliceSerialize(w)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(y),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),d}return me(y)||(s=!0),l++,e.consume(y),y===92?m:h}function m(y){return y===91||y===92||y===93?(e.consume(y),l++,h):h(y)}function d(y){return y===58?(e.enter("definitionMarker"),e.consume(y),e.exit("definitionMarker"),i.includes(a)||i.push(a),ie(e,p,"gfmFootnoteDefinitionWhitespace")):r(y)}function p(y){return t(y)}}function rm(e,t,r){return e.check(Ir,t,e.attempt(K4,t,r))}function nm(e){e.exit("gfmFootnoteDefinition")}function im(e,t,r){const n=this;return ie(e,i,"gfmFootnoteDefinitionIndent",5);function i(a){const l=n.events[n.events.length-1];return l&&l[1].type==="gfmFootnoteDefinitionIndent"&&l[2].sliceSerialize(l[1],!0).length===4?t(a):r(a)}}function am(e){let r=(e||{}).singleTilde;const n={name:"strikethrough",tokenize:a,resolveAll:i};return r==null&&(r=!0),{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function i(l,s){let o=-1;for(;++o1?o(y):(l.consume(y),m++,p);if(m<2&&!r)return o(y);const C=l.exit("strikethroughSequenceTemporary"),A=er(y);return C._open=!A||A===2&&!!w,C._close=!w||w===2&&!!A,s(y)}}}class lm{constructor(){this.map=[]}add(t,r,n){sm(this,t,r,n)}consume(t){if(this.map.sort(function(a,l){return a[0]-l[0]}),this.map.length===0)return;let r=this.map.length;const n=[];for(;r>0;)r-=1,n.push(t.slice(this.map[r][0]+this.map[r][1]),this.map[r][2]),t.length=this.map[r][0];n.push(t.slice()),t.length=0;let i=n.pop();for(;i;){for(const a of i)t.push(a);i=n.pop()}this.map.length=0}}function sm(e,t,r,n){let i=0;if(!(r===0&&n.length===0)){for(;i-1;){const Y=n.events[V][1].type;if(Y==="lineEnding"||Y==="linePrefix")V--;else break}const $=V>-1?n.events[V][1].type:null,se=$==="tableHead"||$==="tableRow"?M:o;return se===M&&n.parser.lazy[n.now().line]?r(E):se(E)}function o(E){return e.enter("tableHead"),e.enter("tableRow"),u(E)}function u(E){return E===124||(l=!0,a+=1),h(E)}function h(E){return E===null?r(E):K(E)?a>1?(a=0,n.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(E),e.exit("lineEnding"),p):r(E):le(E)?ie(e,h,"whitespace")(E):(a+=1,l&&(l=!1,i+=1),E===124?(e.enter("tableCellDivider"),e.consume(E),e.exit("tableCellDivider"),l=!0,h):(e.enter("data"),m(E)))}function m(E){return E===null||E===124||me(E)?(e.exit("data"),h(E)):(e.consume(E),E===92?d:m)}function d(E){return E===92||E===124?(e.consume(E),m):m(E)}function p(E){return n.interrupt=!1,n.parser.lazy[n.now().line]?r(E):(e.enter("tableDelimiterRow"),l=!1,le(E)?ie(e,y,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(E):y(E))}function y(E){return E===45||E===58?C(E):E===124?(l=!0,e.enter("tableCellDivider"),e.consume(E),e.exit("tableCellDivider"),w):O(E)}function w(E){return le(E)?ie(e,C,"whitespace")(E):C(E)}function C(E){return E===58?(a+=1,l=!0,e.enter("tableDelimiterMarker"),e.consume(E),e.exit("tableDelimiterMarker"),A):E===45?(a+=1,A(E)):E===null||K(E)?q(E):O(E)}function A(E){return E===45?(e.enter("tableDelimiterFiller"),z(E)):O(E)}function z(E){return E===45?(e.consume(E),z):E===58?(l=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(E),e.exit("tableDelimiterMarker"),I):(e.exit("tableDelimiterFiller"),I(E))}function I(E){return le(E)?ie(e,q,"whitespace")(E):q(E)}function q(E){return E===124?y(E):E===null||K(E)?!l||i!==a?O(E):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(E)):O(E)}function O(E){return r(E)}function M(E){return e.enter("tableRow"),G(E)}function G(E){return E===124?(e.enter("tableCellDivider"),e.consume(E),e.exit("tableCellDivider"),G):E===null||K(E)?(e.exit("tableRow"),t(E)):le(E)?ie(e,G,"whitespace")(E):(e.enter("data"),X(E))}function X(E){return E===null||E===124||me(E)?(e.exit("data"),G(E)):(e.consume(E),E===92?U:X)}function U(E){return E===92||E===124?(e.consume(E),X):X(E)}}function hm(e,t){let r=-1,n=!0,i=0,a=[0,0,0,0],l=[0,0,0,0],s=!1,o=0,u,h,m;const d=new lm;for(;++rr[2]+1){const y=r[2]+1,w=r[3]-r[2]-1;e.add(y,w,[])}}e.add(r[3]+1,0,[["exit",m,t]])}return i!==void 0&&(a.end=Object.assign({},Qt(t.events,i)),e.add(i,0,[["exit",a,t]]),a=void 0),a}function pa(e,t,r,n,i){const a=[],l=Qt(t.events,r);i&&(i.end=Object.assign({},l),a.push(["exit",i,t])),n.end=Object.assign({},l),a.push(["exit",n,t]),e.add(r+1,0,a)}function Qt(e,t){const r=e[t],n=r[0]==="enter"?"start":"end";return r[1][n]}const mm={name:"tasklistCheck",tokenize:pm};function fm(){return{text:{91:mm}}}function pm(e,t,r){const n=this;return i;function i(o){return n.previous!==null||!n._gfmTasklistFirstContentOfListItem?r(o):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(o),e.exit("taskListCheckMarker"),a)}function a(o){return me(o)?(e.enter("taskListCheckValueUnchecked"),e.consume(o),e.exit("taskListCheckValueUnchecked"),l):o===88||o===120?(e.enter("taskListCheckValueChecked"),e.consume(o),e.exit("taskListCheckValueChecked"),l):r(o)}function l(o){return o===93?(e.enter("taskListCheckMarker"),e.consume(o),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),s):r(o)}function s(o){return K(o)?t(o):le(o)?e.check({tokenize:dm},t,r)(o):r(o)}}function dm(e,t,r){return ie(e,n,"whitespace");function n(i){return i===null?r(i):t(i)}}function gm(e){return Bl([j4(),Z4(),am(e),um(),fm()])}const vm={};function U5(e){const t=this,r=e||vm,n=t.data(),i=n.micromarkExtensions||(n.micromarkExtensions=[]),a=n.fromMarkdownExtensions||(n.fromMarkdownExtensions=[]),l=n.toMarkdownExtensions||(n.toMarkdownExtensions=[]);i.push(gm(r)),a.push(P4()),l.push(O4(r))}const li={}.hasOwnProperty,ym=new Map,bm=/[A-Z]/g,xm=new Set(["table","tbody","thead","tfoot","tr"]),wm=new Set(["td","th"]),vs="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function km(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=t.filePath||void 0;let n;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");n=Im(r,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");n=Em(r,t.jsx,t.jsxs)}const i={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:n,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?pn:kl,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},a=ys(i,e,void 0);return a&&typeof a!="string"?a:i.create(e,i.Fragment,{children:a||void 0},void 0)}function ys(e,t,r){if(t.type==="element")return Sm(e,t,r);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return Am(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return Cm(e,t,r);if(t.type==="mdxjsEsm")return Tm(e,t);if(t.type==="root")return zm(e,t,r);if(t.type==="text")return Mm(e,t)}function Sm(e,t,r){const n=e.schema;let i=n;t.tagName.toLowerCase()==="svg"&&n.space==="html"&&(i=pn,e.schema=i),e.ancestors.push(t);const a=xs(e,t.tagName,!1),l=Dm(e,t);let s=oi(e,t);return xm.has(t.tagName)&&(s=s.filter(function(o){return typeof o=="string"?!iu(o):!0})),bs(e,l,a,t),si(l,s),e.ancestors.pop(),e.schema=n,e.create(t,a,l,r)}function Am(e,t){if(t.data&&t.data.estree&&e.evaluater){const n=t.data.estree.body[0];return n.type,e.evaluater.evaluateExpression(n.expression)}Tr(e,t.position)}function Tm(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);Tr(e,t.position)}function Cm(e,t,r){const n=e.schema;let i=n;t.name==="svg"&&n.space==="html"&&(i=pn,e.schema=i),e.ancestors.push(t);const a=t.name===null?e.Fragment:xs(e,t.name,!0),l=Bm(e,t),s=oi(e,t);return bs(e,l,a,t),si(l,s),e.ancestors.pop(),e.schema=n,e.create(t,a,l,r)}function zm(e,t,r){const n={};return si(n,oi(e,t)),e.create(t,e.Fragment,n,r)}function Mm(e,t){return t.value}function bs(e,t,r,n){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(t.node=n)}function si(e,t){if(t.length>0){const r=t.length>1?t:t[0];r&&(e.children=r)}}function Em(e,t,r){return n;function n(i,a,l,s){const u=Array.isArray(l.children)?r:t;return s?u(a,l,s):u(a,l)}}function Im(e,t){return r;function r(n,i,a,l){const s=Array.isArray(a.children),o=G0(n);return t(i,a,l,s,{columnNumber:o?o.column-1:void 0,fileName:e,lineNumber:o?o.line:void 0},void 0)}}function Dm(e,t){const r={};let n,i;for(i in t.properties)if(i!=="children"&&li.call(t.properties,i)){const a=Fm(e,i,t.properties[i]);if(a){const[l,s]=a;e.tableCellAlignToStyle&&l==="align"&&typeof s=="string"&&wm.has(t.tagName)?n=s:r[l]=s}}if(n){const a=r.style||(r.style={});a[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=n}return r}function Bm(e,t){const r={};for(const n of t.attributes)if(n.type==="mdxJsxExpressionAttribute")if(n.data&&n.data.estree&&e.evaluater){const a=n.data.estree.body[0];a.type;const l=a.expression;l.type;const s=l.properties[0];s.type,Object.assign(r,e.evaluater.evaluateExpression(s.argument))}else Tr(e,t.position);else{const i=n.name;let a;if(n.value&&typeof n.value=="object")if(n.value.data&&n.value.data.estree&&e.evaluater){const s=n.value.data.estree.body[0];s.type,a=e.evaluater.evaluateExpression(s.expression)}else Tr(e,t.position);else a=n.value===null?!0:n.value;r[i]=a}return r}function oi(e,t){const r=[];let n=-1;const i=e.passKeys?new Map:ym;for(;++ni||r!==-1&&t>r||n!==-1&&t>n||qm.test(e.slice(0,t))?e:""}function _m(){return{enter:{mathFlow:e,mathFlowFenceMeta:t,mathText:a},exit:{mathFlow:i,mathFlowFence:n,mathFlowFenceMeta:r,mathFlowValue:s,mathText:l,mathTextData:s}};function e(o){const u={type:"element",tagName:"code",properties:{className:["language-math","math-display"]},children:[]};this.enter({type:"math",meta:null,value:"",data:{hName:"pre",hChildren:[u]}},o)}function t(){this.buffer()}function r(){const o=this.resume(),u=this.stack[this.stack.length-1];u.type,u.meta=o}function n(){this.data.mathFlowInside||(this.buffer(),this.data.mathFlowInside=!0)}function i(o){const u=this.resume().replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),h=this.stack[this.stack.length-1];h.type,this.exit(o),h.value=u;const m=h.data.hChildren[0];m.type,m.tagName,m.children.push({type:"text",value:u}),this.data.mathFlowInside=void 0}function a(o){this.enter({type:"inlineMath",value:"",data:{hName:"code",hProperties:{className:["language-math","math-inline"]},hChildren:[]}},o),this.buffer()}function l(o){const u=this.resume(),h=this.stack[this.stack.length-1];h.type,this.exit(o),h.value=u,h.data.hChildren.push({type:"text",value:u})}function s(o){this.config.enter.data.call(this,o),this.config.exit.data.call(this,o)}}function Gm(e){let t=(e||{}).singleDollarTextMath;return t==null&&(t=!0),n.peek=i,{unsafe:[{character:"\r",inConstruct:"mathFlowMeta"},{character:` +`,inConstruct:"mathFlowMeta"},{character:"$",after:t?void 0:"\\$",inConstruct:"phrasing"},{character:"$",inConstruct:"mathFlowMeta"},{atBreak:!0,character:"$",after:"\\$"}],handlers:{math:r,inlineMath:n}};function r(a,l,s,o){const u=a.value||"",h=s.createTracker(o),m="$".repeat(Math.max(Zl(u,"$")+1,2)),d=s.enter("mathFlow");let p=h.move(m);if(a.meta){const y=s.enter("mathFlowMeta");p+=h.move(s.safe(a.meta,{after:` +`,before:p,encode:["$"],...h.current()})),y()}return p+=h.move(` +`),u&&(p+=h.move(u+` +`)),p+=h.move(m),d(),p}function n(a,l,s){let o=a.value||"",u=1;for(t||u++;new RegExp("(^|[^$])"+"\\$".repeat(u)+"([^$]|$)").test(o);)u++;const h="$".repeat(u);/[^ \r\n]/.test(o)&&(/^[ \r\n]/.test(o)&&/[ \r\n]$/.test(o)||/^\$|\$$/.test(o))&&(o=" "+o+" ");let m=-1;for(;++mu&&(u=h):h&&(u!==void 0&&u>-1&&o.push(` +`.repeat(u)||" "),u=-1,o.push(h))}return o.join("")}function Ts(e,t,r){return e.type==="element"?Tf(e,t,r):e.type==="text"?r.whitespace==="normal"?Cs(e,r):Cf(e):[]}function Tf(e,t,r){const n=zs(e,r),i=e.children||[];let a=-1,l=[];if(Sf(e))return l;let s,o;for(T0(e)||Ta(e)&&wa(t,e,Ta)?o=` +`:kf(e)?(s=2,o=2):As(e)&&(s=1,o=1);++a15?u="…"+s.slice(i-15,i):u=s.slice(0,i);var h;a+15e.replace(Df,"-$1").toLowerCase(),Ff={"&":"&",">":">","<":"<",'"':""","'":"'"},Rf=/[&><"']/g,De=e=>String(e).replace(Rf,t=>Ff[t]),en=e=>e.type==="ordgroup"||e.type==="color"?e.body.length===1?en(e.body[0]):e:e.type==="font"?en(e.body):e,Lf=new Set(["mathord","textord","atom"]),xt=e=>Lf.has(en(e).type),Nf=e=>{var t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?t[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():"_relative"},C0={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand ",cliProcessor:e=>e==="Infinity"?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function Pf(e){if(typeof e!="string")return e.enum[0];switch(e){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{};default:throw new Error("Unexpected schema type; settings must declare an explicit default.")}}function Of(e){if(e.default!==void 0)return e.default;var t=Array.isArray(e.type)?e.type[0]:e.type;return Pf(t)}function qf(e,t,r,n){var i=r[t];e[t]=i!==void 0?n.processor?n.processor(i):i:Of(n)}class ci{constructor(t){t===void 0&&(t={}),this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,t=t||{};for(var r of Object.keys(C0)){var n=C0[r];n&&qf(this,r,t,n)}}reportNonstrict(t,r,n){var i=this.strict;if(typeof i=="function"&&(i=i(t,r,n)),!(!i||i==="ignore")){if(i===!0||i==="error")throw new L("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+t+"]"),n);i==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+t+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+t+"]"))}}useStrictBehavior(t,r,n){var i=this.strict;if(typeof i=="function")try{i=i(t,r,n)}catch{i="error"}return!i||i==="ignore"?!1:i===!0||i==="error"?!0:i==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+t+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+t+"]")),!1)}isTrusted(t){if("url"in t&&t.url&&!t.protocol){var r=Nf(t.url);if(r==null)return!1;t.protocol=r}var n=typeof this.trust=="function"?this.trust(t):this.trust;return!!n}}class At{constructor(t,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=t,this.size=r,this.cramped=n}sup(){return lt[Hf[this.id]]}sub(){return lt[jf[this.id]]}fracNum(){return lt[$f[this.id]]}fracDen(){return lt[Uf[this.id]]}cramp(){return lt[Vf[this.id]]}text(){return lt[_f[this.id]]}isTight(){return this.size>=2}}var hi=0,sn=1,Jt=2,vt=3,Cr=4,Je=5,tr=6,Pe=7,lt=[new At(hi,0,!1),new At(sn,0,!0),new At(Jt,1,!1),new At(vt,1,!0),new At(Cr,2,!1),new At(Je,2,!0),new At(tr,3,!1),new At(Pe,3,!0)],Hf=[Cr,Je,Cr,Je,tr,Pe,tr,Pe],jf=[Je,Je,Je,Je,Pe,Pe,Pe,Pe],$f=[Jt,vt,Cr,Je,tr,Pe,tr,Pe],Uf=[vt,vt,Je,Je,Pe,Pe,Pe,Pe],Vf=[sn,sn,vt,vt,Je,Je,Pe,Pe],_f=[hi,sn,Jt,vt,Jt,vt,Jt,vt],te={DISPLAY:lt[hi],TEXT:lt[Jt],SCRIPT:lt[Cr],SCRIPTSCRIPT:lt[tr]},z0=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function Gf(e){for(var t=0;t=i[0]&&e<=i[1])return r.name}return null}var tn=[];z0.forEach(e=>e.blocks.forEach(t=>tn.push(...t)));function Ms(e){for(var t=0;t=tn[t]&&e<=tn[t+1])return!0;return!1}var Ce=e=>e+" "+e,Zt=80,Wf=function(t,r){return"M95,"+(622+t+r)+` +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 +c69,-144,104.5,-217.7,106.5,-221 +l`+t/2.075+" -"+t+` +c5.3,-9.3,12,-14,20,-14 +H400000v`+(40+t)+`H845.2724 +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z +M`+(834+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},Xf=function(t,r){return"M263,"+(601+t+r)+`c0.7,0,18,39.7,52,119 +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 +c340,-704.7,510.7,-1060.3,512,-1067 +l`+t/2.084+" -"+t+` +c4.7,-7.3,11,-11,19,-11 +H40000v`+(40+t)+`H1012.3 +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z +M`+(1001+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},Yf=function(t,r){return"M983 "+(10+t+r)+` +l`+t/3.13+" -"+t+` +c4,-6.7,10,-10,18,-10 H400000v`+(40+t)+` +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 +c53.7,-170.3,84.5,-266.8,92.5,-289.5z +M`+(1001+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},Kf=function(t,r){return"M424,"+(2398+t+r)+` +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 +l`+t/4.223+" -"+t+`c4,-6.7,10,-10,18,-10 H400000 +v`+(40+t)+`H1014.6 +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 +c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2z M`+(1001+t)+" "+r+` +h400000v`+(40+t)+"h-400000z"},Zf=function(t,r){return"M473,"+(2713+t+r)+` +c339.3,-1799.3,509.3,-2700,510,-2702 l`+t/5.298+" -"+t+` +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+t)+`H1017.7 +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, +606zM`+(1001+t)+" "+r+"h400000v"+(40+t)+"H1017.7z"},Qf=function(t){var r=t/2;return"M400000 "+t+" H0 L"+r+" 0 l65 45 L145 "+(t-80)+" H400000z"},Jf=function(t,r,n){var i=n-54-r-t;return"M702 "+(t+r)+"H400000"+(40+t)+` +H742v`+i+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 +219 661 l218 661zM702 `+r+"H400000v"+(40+t)+"H742z"},e2=function(t,r,n){r=1e3*r;var i="";switch(t){case"sqrtMain":i=Wf(r,Zt);break;case"sqrtSize1":i=Xf(r,Zt);break;case"sqrtSize2":i=Yf(r,Zt);break;case"sqrtSize3":i=Kf(r,Zt);break;case"sqrtSize4":i=Zf(r,Zt);break;case"sqrtTall":i=Jf(r,Zt,n)}return i},t2=function(t,r){switch(t){case"⎜":return Ce("M291 0 H417 V"+r+" H291z");case"∣":return Ce("M145 0 H188 V"+r+" H145z");case"∥":return Ce("M145 0 H188 V"+r+" H145z")+Ce("M367 0 H410 V"+r+" H367z");case"⎟":return Ce("M457 0 H583 V"+r+" H457z");case"⎢":return Ce("M319 0 H403 V"+r+" H319z");case"⎥":return Ce("M263 0 H347 V"+r+" H263z");case"⎪":return Ce("M384 0 H504 V"+r+" H384z");case"⏐":return Ce("M312 0 H355 V"+r+" H312z");case"‖":return Ce("M257 0 H300 V"+r+" H257z")+Ce("M478 0 H521 V"+r+" H478z");default:return""}},Ca={doubleleftarrow:`M262 157 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 + 435 0h399565z`,leftgroupunder:`M400000 262 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:Ce("M40 281 V428 H0 V94 H40 V241 H400000 v40z"),leftbracketunder:Ce("M0 0 h120 V290 H399995 v120 H0z"),leftbracketover:Ce("M0 440 h120 V150 H399995 v-120 H0z"),leftmapsto:Ce("M40 281 V448H0V74H40V241H400000v40z"),leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:Ce("M0 50 h400000 v40H0z m0 194h40000v40H0z"),midbrace:`M200428 334 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:Ce("M399960 241 V94 h40 V428 h-40 V281 H0 v-40z"),rightbracketunder:Ce("M399995 0 h-120 V290 H0 v120 H400000z"),rightbracketover:Ce("M399995 440 h-120 V150 H0 v-120 H399995z"),rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 +-68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 + -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},r2=function(t,r){switch(t){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 v84 h347 v-84 +H403z M403 1759 V0 H319 V1759 v`+r+" v1759 v84 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z +M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z +M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z +M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z +M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, +-36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 +l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+` +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 +l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}};function n2(e){return"toText"in e}class lr{constructor(t){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=t,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(t){return this.classes.includes(t)}toNode(){for(var t=document.createDocumentFragment(),r=0;r{if(n2(t))return t.toText();throw new Error("Expected MathDomNode with toText, got "+t.constructor.name)}).join("")}}var M0={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},i2={ex:!0,em:!0,mu:!0},Es=function(t){return typeof t!="string"&&(t=t.unit),t in M0||t in i2||t==="ex"},ye=function(t,r){var n;if(t.unit in M0)n=M0[t.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(t.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var i;if(r.style.isTight()?i=r.havingStyle(r.style.text()):i=r,t.unit==="ex")n=i.fontMetrics().xHeight;else if(t.unit==="em")n=i.fontMetrics().quad;else throw new L("Invalid unit: '"+t.unit+"'");i!==r&&(n*=i.sizeMultiplier/r.sizeMultiplier)}return Math.min(t.number*n,r.maxSize)},P=function(t){return+t.toFixed(4)+"em"},zt=function(t){return t.filter(r=>r).join(" ")},mi=function(t){var r="";for(var n of Object.keys(t)){var i=t[n];i!==void 0&&(r+=Bf(n)+":"+i+";")}return r},Is=function(t,r,n){if(this.classes=t||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var i=r.getColor();i&&(this.style.color=i)}},Ds=function(t){var r=document.createElement(t);r.className=zt(this.classes),Object.assign(r.style,this.style);for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);for(var i=0;i/=\x00-\x1f]/,Bs=function(t){var r="<"+t;this.classes.length&&(r+=' class="'+De(zt(this.classes))+'"');var n=mi(this.style);n&&(r+=' style="'+De(n)+'"');for(var i of Object.keys(this.attributes)){if(a2.test(i))throw new L("Invalid attribute name '"+i+"'");r+=" "+i+'="'+De(this.attributes[i])+'"'}r+=">";for(var a=0;a",r};class sr{constructor(t,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,this.italic=void 0,Is.call(this,t,n,i),this.children=r||[]}setAttribute(t,r){this.attributes[t]=r}hasClass(t){return this.classes.includes(t)}toNode(){return Ds.call(this,"span")}toMarkup(){return Bs.call(this,"span")}}class bn{constructor(t,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Is.call(this,r,i),this.children=n||[],this.setAttribute("href",t)}setAttribute(t,r){this.attributes[t]=r}hasClass(t){return this.classes.includes(t)}toNode(){return Ds.call(this,"a")}toMarkup(){return Bs.call(this,"a")}}class l2{constructor(t,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=t,this.classes=["mord"],this.height=0,this.depth=0,this.maxFontSize=0,this.style=n}hasClass(t){return this.classes.includes(t)}toNode(){var t=document.createElement("img");return t.src=this.src,t.alt=this.alt,t.className="mord",Object.assign(t.style,this.style),t}toMarkup(){var t=''+De(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=P(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=zt(this.classes)),Object.keys(this.style).length>0&&(r=r||document.createElement("span"),Object.assign(r.style,this.style)),r?(r.appendChild(t),r):t}toMarkup(){var t=!1,r="0&&(n+="margin-right:"+P(this.italic)+";"),n+=mi(this.style),n&&(t=!0,r+=' style="'+De(n)+'"');var i=De(this.text);return t?(r+=">",r+=i,r+="",r):i}}class yt{constructor(t,r){this.children=void 0,this.attributes=void 0,this.children=t||[],this.attributes=r||{}}toNode(){var t="http://www.w3.org/2000/svg",r=document.createElementNS(t,"svg");for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);for(var i=0;i':''}}class E0{constructor(t){this.attributes=void 0,this.attributes=t||{}}toNode(){var t="http://www.w3.org/2000/svg",r=document.createElementNS(t,"line");for(var n of Object.keys(this.attributes))r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var t=" but got "+String(e)+".")}var c2=e=>e instanceof sr||e instanceof bn||e instanceof lr,st={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},_r={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},za={Å:"A",Ð:"D",Þ:"o",å:"a",ð:"d",þ:"o",А:"A",Б:"B",В:"B",Г:"F",Д:"A",Е:"E",Ж:"K",З:"3",И:"N",Й:"N",К:"K",Л:"N",М:"M",Н:"H",О:"O",П:"N",Р:"P",С:"C",Т:"T",У:"y",Ф:"O",Х:"X",Ц:"U",Ч:"h",Ш:"W",Щ:"W",Ъ:"B",Ы:"X",Ь:"B",Э:"3",Ю:"X",Я:"R",а:"a",б:"b",в:"a",г:"r",д:"y",е:"e",ж:"m",з:"e",и:"n",й:"n",к:"n",л:"n",м:"m",н:"n",о:"o",п:"n",р:"p",с:"c",т:"o",у:"y",ф:"b",х:"x",ц:"n",ч:"n",ш:"w",щ:"w",ъ:"a",ы:"m",ь:"a",э:"e",ю:"m",я:"r"};function h2(e,t){st[e]=t}function fi(e,t,r){if(!st[t])throw new Error("Font metrics not found for font: "+t+".");var n=e.charCodeAt(0),i=st[t][n];if(!i&&e[0]in za&&(n=za[e[0]].charCodeAt(0),i=st[t][n]),!i&&r==="text"&&Ms(n)&&(i=st[t][77]),i)return{depth:i[0],height:i[1],italic:i[2],skew:i[3],width:i[4]}}var Qn={};function m2(e){var t;if(e>=5?t=0:e>=3?t=1:t=2,!Qn[t]){var r=Qn[t]={cssEmPerMu:_r.quad[t]/18};for(var n in _r)_r.hasOwnProperty(n)&&(r[n]=_r[n][t])}return Qn[t]}var de={math:{},text:{}};function c(e,t,r,n,i,a){de[e][i]={font:t,group:r,replace:n},a&&n&&(de[e][n]=de[e][i])}var f="math",B="text",g="main",b="ams",ge="accent-token",W="bin",Oe="close",or="inner",Z="mathord",Ae="op-token",Ye="open",Br="punct",x="rel",wt="spacing",T="textord";c(f,g,x,"≡","\\equiv",!0);c(f,g,x,"≺","\\prec",!0);c(f,g,x,"≻","\\succ",!0);c(f,g,x,"∼","\\sim",!0);c(f,g,x,"⊥","\\perp");c(f,g,x,"⪯","\\preceq",!0);c(f,g,x,"⪰","\\succeq",!0);c(f,g,x,"≃","\\simeq",!0);c(f,g,x,"∣","\\mid",!0);c(f,g,x,"≪","\\ll",!0);c(f,g,x,"≫","\\gg",!0);c(f,g,x,"≍","\\asymp",!0);c(f,g,x,"∥","\\parallel");c(f,g,x,"⋈","\\bowtie",!0);c(f,g,x,"⌣","\\smile",!0);c(f,g,x,"⊑","\\sqsubseteq",!0);c(f,g,x,"⊒","\\sqsupseteq",!0);c(f,g,x,"≐","\\doteq",!0);c(f,g,x,"⌢","\\frown",!0);c(f,g,x,"∋","\\ni",!0);c(f,g,x,"∝","\\propto",!0);c(f,g,x,"⊢","\\vdash",!0);c(f,g,x,"⊣","\\dashv",!0);c(f,g,x,"∋","\\owns");c(f,g,Br,".","\\ldotp");c(f,g,Br,"⋅","\\cdotp");c(f,g,Br,"⋅","·");c(B,g,T,"⋅","·");c(f,g,T,"#","\\#");c(B,g,T,"#","\\#");c(f,g,T,"&","\\&");c(B,g,T,"&","\\&");c(f,g,T,"ℵ","\\aleph",!0);c(f,g,T,"∀","\\forall",!0);c(f,g,T,"ℏ","\\hbar",!0);c(f,g,T,"∃","\\exists",!0);c(f,g,T,"∇","\\nabla",!0);c(f,g,T,"♭","\\flat",!0);c(f,g,T,"ℓ","\\ell",!0);c(f,g,T,"♮","\\natural",!0);c(f,g,T,"♣","\\clubsuit",!0);c(f,g,T,"℘","\\wp",!0);c(f,g,T,"♯","\\sharp",!0);c(f,g,T,"♢","\\diamondsuit",!0);c(f,g,T,"ℜ","\\Re",!0);c(f,g,T,"♡","\\heartsuit",!0);c(f,g,T,"ℑ","\\Im",!0);c(f,g,T,"♠","\\spadesuit",!0);c(f,g,T,"§","\\S",!0);c(B,g,T,"§","\\S");c(f,g,T,"¶","\\P",!0);c(B,g,T,"¶","\\P");c(f,g,T,"†","\\dag");c(B,g,T,"†","\\dag");c(B,g,T,"†","\\textdagger");c(f,g,T,"‡","\\ddag");c(B,g,T,"‡","\\ddag");c(B,g,T,"‡","\\textdaggerdbl");c(f,g,Oe,"⎱","\\rmoustache",!0);c(f,g,Ye,"⎰","\\lmoustache",!0);c(f,g,Oe,"⟯","\\rgroup",!0);c(f,g,Ye,"⟮","\\lgroup",!0);c(f,g,W,"∓","\\mp",!0);c(f,g,W,"⊖","\\ominus",!0);c(f,g,W,"⊎","\\uplus",!0);c(f,g,W,"⊓","\\sqcap",!0);c(f,g,W,"∗","\\ast");c(f,g,W,"⊔","\\sqcup",!0);c(f,g,W,"◯","\\bigcirc",!0);c(f,g,W,"∙","\\bullet",!0);c(f,g,W,"‡","\\ddagger");c(f,g,W,"≀","\\wr",!0);c(f,g,W,"⨿","\\amalg");c(f,g,W,"&","\\And");c(f,g,x,"⟵","\\longleftarrow",!0);c(f,g,x,"⇐","\\Leftarrow",!0);c(f,g,x,"⟸","\\Longleftarrow",!0);c(f,g,x,"⟶","\\longrightarrow",!0);c(f,g,x,"⇒","\\Rightarrow",!0);c(f,g,x,"⟹","\\Longrightarrow",!0);c(f,g,x,"↔","\\leftrightarrow",!0);c(f,g,x,"⟷","\\longleftrightarrow",!0);c(f,g,x,"⇔","\\Leftrightarrow",!0);c(f,g,x,"⟺","\\Longleftrightarrow",!0);c(f,g,x,"↦","\\mapsto",!0);c(f,g,x,"⟼","\\longmapsto",!0);c(f,g,x,"↗","\\nearrow",!0);c(f,g,x,"↩","\\hookleftarrow",!0);c(f,g,x,"↪","\\hookrightarrow",!0);c(f,g,x,"↘","\\searrow",!0);c(f,g,x,"↼","\\leftharpoonup",!0);c(f,g,x,"⇀","\\rightharpoonup",!0);c(f,g,x,"↙","\\swarrow",!0);c(f,g,x,"↽","\\leftharpoondown",!0);c(f,g,x,"⇁","\\rightharpoondown",!0);c(f,g,x,"↖","\\nwarrow",!0);c(f,g,x,"⇌","\\rightleftharpoons",!0);c(f,b,x,"≮","\\nless",!0);c(f,b,x,"","\\@nleqslant");c(f,b,x,"","\\@nleqq");c(f,b,x,"⪇","\\lneq",!0);c(f,b,x,"≨","\\lneqq",!0);c(f,b,x,"","\\@lvertneqq");c(f,b,x,"⋦","\\lnsim",!0);c(f,b,x,"⪉","\\lnapprox",!0);c(f,b,x,"⊀","\\nprec",!0);c(f,b,x,"⋠","\\npreceq",!0);c(f,b,x,"⋨","\\precnsim",!0);c(f,b,x,"⪹","\\precnapprox",!0);c(f,b,x,"≁","\\nsim",!0);c(f,b,x,"","\\@nshortmid");c(f,b,x,"∤","\\nmid",!0);c(f,b,x,"⊬","\\nvdash",!0);c(f,b,x,"⊭","\\nvDash",!0);c(f,b,x,"⋪","\\ntriangleleft");c(f,b,x,"⋬","\\ntrianglelefteq",!0);c(f,b,x,"⊊","\\subsetneq",!0);c(f,b,x,"","\\@varsubsetneq");c(f,b,x,"⫋","\\subsetneqq",!0);c(f,b,x,"","\\@varsubsetneqq");c(f,b,x,"≯","\\ngtr",!0);c(f,b,x,"","\\@ngeqslant");c(f,b,x,"","\\@ngeqq");c(f,b,x,"⪈","\\gneq",!0);c(f,b,x,"≩","\\gneqq",!0);c(f,b,x,"","\\@gvertneqq");c(f,b,x,"⋧","\\gnsim",!0);c(f,b,x,"⪊","\\gnapprox",!0);c(f,b,x,"⊁","\\nsucc",!0);c(f,b,x,"⋡","\\nsucceq",!0);c(f,b,x,"⋩","\\succnsim",!0);c(f,b,x,"⪺","\\succnapprox",!0);c(f,b,x,"≆","\\ncong",!0);c(f,b,x,"","\\@nshortparallel");c(f,b,x,"∦","\\nparallel",!0);c(f,b,x,"⊯","\\nVDash",!0);c(f,b,x,"⋫","\\ntriangleright");c(f,b,x,"⋭","\\ntrianglerighteq",!0);c(f,b,x,"","\\@nsupseteqq");c(f,b,x,"⊋","\\supsetneq",!0);c(f,b,x,"","\\@varsupsetneq");c(f,b,x,"⫌","\\supsetneqq",!0);c(f,b,x,"","\\@varsupsetneqq");c(f,b,x,"⊮","\\nVdash",!0);c(f,b,x,"⪵","\\precneqq",!0);c(f,b,x,"⪶","\\succneqq",!0);c(f,b,x,"","\\@nsubseteqq");c(f,b,W,"⊴","\\unlhd");c(f,b,W,"⊵","\\unrhd");c(f,b,x,"↚","\\nleftarrow",!0);c(f,b,x,"↛","\\nrightarrow",!0);c(f,b,x,"⇍","\\nLeftarrow",!0);c(f,b,x,"⇏","\\nRightarrow",!0);c(f,b,x,"↮","\\nleftrightarrow",!0);c(f,b,x,"⇎","\\nLeftrightarrow",!0);c(f,b,x,"△","\\vartriangle");c(f,b,T,"ℏ","\\hslash");c(f,b,T,"▽","\\triangledown");c(f,b,T,"◊","\\lozenge");c(f,b,T,"Ⓢ","\\circledS");c(f,b,T,"®","\\circledR");c(B,b,T,"®","\\circledR");c(f,b,T,"∡","\\measuredangle",!0);c(f,b,T,"∄","\\nexists");c(f,b,T,"℧","\\mho");c(f,b,T,"Ⅎ","\\Finv",!0);c(f,b,T,"⅁","\\Game",!0);c(f,b,T,"‵","\\backprime");c(f,b,T,"▲","\\blacktriangle");c(f,b,T,"▼","\\blacktriangledown");c(f,b,T,"■","\\blacksquare");c(f,b,T,"⧫","\\blacklozenge");c(f,b,T,"★","\\bigstar");c(f,b,T,"∢","\\sphericalangle",!0);c(f,b,T,"∁","\\complement",!0);c(f,b,T,"ð","\\eth",!0);c(B,g,T,"ð","ð");c(f,b,T,"╱","\\diagup");c(f,b,T,"╲","\\diagdown");c(f,b,T,"□","\\square");c(f,b,T,"□","\\Box");c(f,b,T,"◊","\\Diamond");c(f,b,T,"¥","\\yen",!0);c(B,b,T,"¥","\\yen",!0);c(f,b,T,"✓","\\checkmark",!0);c(B,b,T,"✓","\\checkmark");c(f,b,T,"ℶ","\\beth",!0);c(f,b,T,"ℸ","\\daleth",!0);c(f,b,T,"ℷ","\\gimel",!0);c(f,b,T,"ϝ","\\digamma",!0);c(f,b,T,"ϰ","\\varkappa");c(f,b,Ye,"┌","\\@ulcorner",!0);c(f,b,Oe,"┐","\\@urcorner",!0);c(f,b,Ye,"└","\\@llcorner",!0);c(f,b,Oe,"┘","\\@lrcorner",!0);c(f,b,x,"≦","\\leqq",!0);c(f,b,x,"⩽","\\leqslant",!0);c(f,b,x,"⪕","\\eqslantless",!0);c(f,b,x,"≲","\\lesssim",!0);c(f,b,x,"⪅","\\lessapprox",!0);c(f,b,x,"≊","\\approxeq",!0);c(f,b,W,"⋖","\\lessdot");c(f,b,x,"⋘","\\lll",!0);c(f,b,x,"≶","\\lessgtr",!0);c(f,b,x,"⋚","\\lesseqgtr",!0);c(f,b,x,"⪋","\\lesseqqgtr",!0);c(f,b,x,"≑","\\doteqdot");c(f,b,x,"≓","\\risingdotseq",!0);c(f,b,x,"≒","\\fallingdotseq",!0);c(f,b,x,"∽","\\backsim",!0);c(f,b,x,"⋍","\\backsimeq",!0);c(f,b,x,"⫅","\\subseteqq",!0);c(f,b,x,"⋐","\\Subset",!0);c(f,b,x,"⊏","\\sqsubset",!0);c(f,b,x,"≼","\\preccurlyeq",!0);c(f,b,x,"⋞","\\curlyeqprec",!0);c(f,b,x,"≾","\\precsim",!0);c(f,b,x,"⪷","\\precapprox",!0);c(f,b,x,"⊲","\\vartriangleleft");c(f,b,x,"⊴","\\trianglelefteq");c(f,b,x,"⊨","\\vDash",!0);c(f,b,x,"⊪","\\Vvdash",!0);c(f,b,x,"⌣","\\smallsmile");c(f,b,x,"⌢","\\smallfrown");c(f,b,x,"≏","\\bumpeq",!0);c(f,b,x,"≎","\\Bumpeq",!0);c(f,b,x,"≧","\\geqq",!0);c(f,b,x,"⩾","\\geqslant",!0);c(f,b,x,"⪖","\\eqslantgtr",!0);c(f,b,x,"≳","\\gtrsim",!0);c(f,b,x,"⪆","\\gtrapprox",!0);c(f,b,W,"⋗","\\gtrdot");c(f,b,x,"⋙","\\ggg",!0);c(f,b,x,"≷","\\gtrless",!0);c(f,b,x,"⋛","\\gtreqless",!0);c(f,b,x,"⪌","\\gtreqqless",!0);c(f,b,x,"≖","\\eqcirc",!0);c(f,b,x,"≗","\\circeq",!0);c(f,b,x,"≜","\\triangleq",!0);c(f,b,x,"∼","\\thicksim");c(f,b,x,"≈","\\thickapprox");c(f,b,x,"⫆","\\supseteqq",!0);c(f,b,x,"⋑","\\Supset",!0);c(f,b,x,"⊐","\\sqsupset",!0);c(f,b,x,"≽","\\succcurlyeq",!0);c(f,b,x,"⋟","\\curlyeqsucc",!0);c(f,b,x,"≿","\\succsim",!0);c(f,b,x,"⪸","\\succapprox",!0);c(f,b,x,"⊳","\\vartriangleright");c(f,b,x,"⊵","\\trianglerighteq");c(f,b,x,"⊩","\\Vdash",!0);c(f,b,x,"∣","\\shortmid");c(f,b,x,"∥","\\shortparallel");c(f,b,x,"≬","\\between",!0);c(f,b,x,"⋔","\\pitchfork",!0);c(f,b,x,"∝","\\varpropto");c(f,b,x,"◀","\\blacktriangleleft");c(f,b,x,"∴","\\therefore",!0);c(f,b,x,"∍","\\backepsilon");c(f,b,x,"▶","\\blacktriangleright");c(f,b,x,"∵","\\because",!0);c(f,b,x,"⋘","\\llless");c(f,b,x,"⋙","\\gggtr");c(f,b,W,"⊲","\\lhd");c(f,b,W,"⊳","\\rhd");c(f,b,x,"≂","\\eqsim",!0);c(f,g,x,"⋈","\\Join");c(f,b,x,"≑","\\Doteq",!0);c(f,b,W,"∔","\\dotplus",!0);c(f,b,W,"∖","\\smallsetminus");c(f,b,W,"⋒","\\Cap",!0);c(f,b,W,"⋓","\\Cup",!0);c(f,b,W,"⩞","\\doublebarwedge",!0);c(f,b,W,"⊟","\\boxminus",!0);c(f,b,W,"⊞","\\boxplus",!0);c(f,b,W,"⋇","\\divideontimes",!0);c(f,b,W,"⋉","\\ltimes",!0);c(f,b,W,"⋊","\\rtimes",!0);c(f,b,W,"⋋","\\leftthreetimes",!0);c(f,b,W,"⋌","\\rightthreetimes",!0);c(f,b,W,"⋏","\\curlywedge",!0);c(f,b,W,"⋎","\\curlyvee",!0);c(f,b,W,"⊝","\\circleddash",!0);c(f,b,W,"⊛","\\circledast",!0);c(f,b,W,"⋅","\\centerdot");c(f,b,W,"⊺","\\intercal",!0);c(f,b,W,"⋒","\\doublecap");c(f,b,W,"⋓","\\doublecup");c(f,b,W,"⊠","\\boxtimes",!0);c(f,b,x,"⇢","\\dashrightarrow",!0);c(f,b,x,"⇠","\\dashleftarrow",!0);c(f,b,x,"⇇","\\leftleftarrows",!0);c(f,b,x,"⇆","\\leftrightarrows",!0);c(f,b,x,"⇚","\\Lleftarrow",!0);c(f,b,x,"↞","\\twoheadleftarrow",!0);c(f,b,x,"↢","\\leftarrowtail",!0);c(f,b,x,"↫","\\looparrowleft",!0);c(f,b,x,"⇋","\\leftrightharpoons",!0);c(f,b,x,"↶","\\curvearrowleft",!0);c(f,b,x,"↺","\\circlearrowleft",!0);c(f,b,x,"↰","\\Lsh",!0);c(f,b,x,"⇈","\\upuparrows",!0);c(f,b,x,"↿","\\upharpoonleft",!0);c(f,b,x,"⇃","\\downharpoonleft",!0);c(f,g,x,"⊶","\\origof",!0);c(f,g,x,"⊷","\\imageof",!0);c(f,b,x,"⊸","\\multimap",!0);c(f,b,x,"↭","\\leftrightsquigarrow",!0);c(f,b,x,"⇉","\\rightrightarrows",!0);c(f,b,x,"⇄","\\rightleftarrows",!0);c(f,b,x,"↠","\\twoheadrightarrow",!0);c(f,b,x,"↣","\\rightarrowtail",!0);c(f,b,x,"↬","\\looparrowright",!0);c(f,b,x,"↷","\\curvearrowright",!0);c(f,b,x,"↻","\\circlearrowright",!0);c(f,b,x,"↱","\\Rsh",!0);c(f,b,x,"⇊","\\downdownarrows",!0);c(f,b,x,"↾","\\upharpoonright",!0);c(f,b,x,"⇂","\\downharpoonright",!0);c(f,b,x,"⇝","\\rightsquigarrow",!0);c(f,b,x,"⇝","\\leadsto");c(f,b,x,"⇛","\\Rrightarrow",!0);c(f,b,x,"↾","\\restriction");c(f,g,T,"‘","`");c(f,g,T,"$","\\$");c(B,g,T,"$","\\$");c(B,g,T,"$","\\textdollar");c(f,g,T,"%","\\%");c(B,g,T,"%","\\%");c(f,g,T,"_","\\_");c(B,g,T,"_","\\_");c(B,g,T,"_","\\textunderscore");c(f,g,T,"∠","\\angle",!0);c(f,g,T,"∞","\\infty",!0);c(f,g,T,"′","\\prime");c(f,g,T,"△","\\triangle");c(f,g,T,"Γ","\\Gamma",!0);c(f,g,T,"Δ","\\Delta",!0);c(f,g,T,"Θ","\\Theta",!0);c(f,g,T,"Λ","\\Lambda",!0);c(f,g,T,"Ξ","\\Xi",!0);c(f,g,T,"Π","\\Pi",!0);c(f,g,T,"Σ","\\Sigma",!0);c(f,g,T,"Υ","\\Upsilon",!0);c(f,g,T,"Φ","\\Phi",!0);c(f,g,T,"Ψ","\\Psi",!0);c(f,g,T,"Ω","\\Omega",!0);c(f,g,T,"A","Α");c(f,g,T,"B","Β");c(f,g,T,"E","Ε");c(f,g,T,"Z","Ζ");c(f,g,T,"H","Η");c(f,g,T,"I","Ι");c(f,g,T,"K","Κ");c(f,g,T,"M","Μ");c(f,g,T,"N","Ν");c(f,g,T,"O","Ο");c(f,g,T,"P","Ρ");c(f,g,T,"T","Τ");c(f,g,T,"X","Χ");c(f,g,T,"¬","\\neg",!0);c(f,g,T,"¬","\\lnot");c(f,g,T,"⊤","\\top");c(f,g,T,"⊥","\\bot");c(f,g,T,"∅","\\emptyset");c(f,b,T,"∅","\\varnothing");c(f,g,Z,"α","\\alpha",!0);c(f,g,Z,"β","\\beta",!0);c(f,g,Z,"γ","\\gamma",!0);c(f,g,Z,"δ","\\delta",!0);c(f,g,Z,"ϵ","\\epsilon",!0);c(f,g,Z,"ζ","\\zeta",!0);c(f,g,Z,"η","\\eta",!0);c(f,g,Z,"θ","\\theta",!0);c(f,g,Z,"ι","\\iota",!0);c(f,g,Z,"κ","\\kappa",!0);c(f,g,Z,"λ","\\lambda",!0);c(f,g,Z,"μ","\\mu",!0);c(f,g,Z,"ν","\\nu",!0);c(f,g,Z,"ξ","\\xi",!0);c(f,g,Z,"ο","\\omicron",!0);c(f,g,Z,"π","\\pi",!0);c(f,g,Z,"ρ","\\rho",!0);c(f,g,Z,"σ","\\sigma",!0);c(f,g,Z,"τ","\\tau",!0);c(f,g,Z,"υ","\\upsilon",!0);c(f,g,Z,"ϕ","\\phi",!0);c(f,g,Z,"χ","\\chi",!0);c(f,g,Z,"ψ","\\psi",!0);c(f,g,Z,"ω","\\omega",!0);c(f,g,Z,"ε","\\varepsilon",!0);c(f,g,Z,"ϑ","\\vartheta",!0);c(f,g,Z,"ϖ","\\varpi",!0);c(f,g,Z,"ϱ","\\varrho",!0);c(f,g,Z,"ς","\\varsigma",!0);c(f,g,Z,"φ","\\varphi",!0);c(f,g,W,"∗","*",!0);c(f,g,W,"+","+");c(f,g,W,"−","-",!0);c(f,g,W,"⋅","\\cdot",!0);c(f,g,W,"∘","\\circ",!0);c(f,g,W,"÷","\\div",!0);c(f,g,W,"±","\\pm",!0);c(f,g,W,"×","\\times",!0);c(f,g,W,"∩","\\cap",!0);c(f,g,W,"∪","\\cup",!0);c(f,g,W,"∖","\\setminus",!0);c(f,g,W,"∧","\\land");c(f,g,W,"∨","\\lor");c(f,g,W,"∧","\\wedge",!0);c(f,g,W,"∨","\\vee",!0);c(f,g,T,"√","\\surd");c(f,g,Ye,"⟨","\\langle",!0);c(f,g,Ye,"∣","\\lvert");c(f,g,Ye,"∥","\\lVert");c(f,g,Oe,"?","?");c(f,g,Oe,"!","!");c(f,g,Oe,"⟩","\\rangle",!0);c(f,g,Oe,"∣","\\rvert");c(f,g,Oe,"∥","\\rVert");c(f,g,x,"=","=");c(f,g,x,":",":");c(f,g,x,"≈","\\approx",!0);c(f,g,x,"≅","\\cong",!0);c(f,g,x,"≥","\\ge");c(f,g,x,"≥","\\geq",!0);c(f,g,x,"←","\\gets");c(f,g,x,">","\\gt",!0);c(f,g,x,"∈","\\in",!0);c(f,g,x,"","\\@not");c(f,g,x,"⊂","\\subset",!0);c(f,g,x,"⊃","\\supset",!0);c(f,g,x,"⊆","\\subseteq",!0);c(f,g,x,"⊇","\\supseteq",!0);c(f,b,x,"⊈","\\nsubseteq",!0);c(f,b,x,"⊉","\\nsupseteq",!0);c(f,g,x,"⊨","\\models");c(f,g,x,"←","\\leftarrow",!0);c(f,g,x,"≤","\\le");c(f,g,x,"≤","\\leq",!0);c(f,g,x,"<","\\lt",!0);c(f,g,x,"→","\\rightarrow",!0);c(f,g,x,"→","\\to");c(f,b,x,"≱","\\ngeq",!0);c(f,b,x,"≰","\\nleq",!0);c(f,g,wt," ","\\ ");c(f,g,wt," ","\\space");c(f,g,wt," ","\\nobreakspace");c(B,g,wt," ","\\ ");c(B,g,wt," "," ");c(B,g,wt," ","\\space");c(B,g,wt," ","\\nobreakspace");c(f,g,wt,"","\\nobreak");c(f,g,wt,"","\\allowbreak");c(f,g,Br,",",",");c(f,g,Br,";",";");c(f,b,W,"⊼","\\barwedge",!0);c(f,b,W,"⊻","\\veebar",!0);c(f,g,W,"⊙","\\odot",!0);c(f,g,W,"⊕","\\oplus",!0);c(f,g,W,"⊗","\\otimes",!0);c(f,g,T,"∂","\\partial",!0);c(f,g,W,"⊘","\\oslash",!0);c(f,b,W,"⊚","\\circledcirc",!0);c(f,b,W,"⊡","\\boxdot",!0);c(f,g,W,"△","\\bigtriangleup");c(f,g,W,"▽","\\bigtriangledown");c(f,g,W,"†","\\dagger");c(f,g,W,"⋄","\\diamond");c(f,g,W,"⋆","\\star");c(f,g,W,"◃","\\triangleleft");c(f,g,W,"▹","\\triangleright");c(f,g,Ye,"{","\\{");c(B,g,T,"{","\\{");c(B,g,T,"{","\\textbraceleft");c(f,g,Oe,"}","\\}");c(B,g,T,"}","\\}");c(B,g,T,"}","\\textbraceright");c(f,g,Ye,"{","\\lbrace");c(f,g,Oe,"}","\\rbrace");c(f,g,Ye,"[","\\lbrack",!0);c(B,g,T,"[","\\lbrack",!0);c(f,g,Oe,"]","\\rbrack",!0);c(B,g,T,"]","\\rbrack",!0);c(f,g,Ye,"(","\\lparen",!0);c(f,g,Oe,")","\\rparen",!0);c(B,g,T,"<","\\textless",!0);c(B,g,T,">","\\textgreater",!0);c(f,g,Ye,"⌊","\\lfloor",!0);c(f,g,Oe,"⌋","\\rfloor",!0);c(f,g,Ye,"⌈","\\lceil",!0);c(f,g,Oe,"⌉","\\rceil",!0);c(f,g,T,"\\","\\backslash");c(f,g,T,"∣","|");c(f,g,T,"∣","\\vert");c(B,g,T,"|","\\textbar",!0);c(f,g,T,"∥","\\|");c(f,g,T,"∥","\\Vert");c(B,g,T,"∥","\\textbardbl");c(B,g,T,"~","\\textasciitilde");c(B,g,T,"\\","\\textbackslash");c(B,g,T,"^","\\textasciicircum");c(f,g,x,"↑","\\uparrow",!0);c(f,g,x,"⇑","\\Uparrow",!0);c(f,g,x,"↓","\\downarrow",!0);c(f,g,x,"⇓","\\Downarrow",!0);c(f,g,x,"↕","\\updownarrow",!0);c(f,g,x,"⇕","\\Updownarrow",!0);c(f,g,Ae,"∐","\\coprod");c(f,g,Ae,"⋁","\\bigvee");c(f,g,Ae,"⋀","\\bigwedge");c(f,g,Ae,"⨄","\\biguplus");c(f,g,Ae,"⋂","\\bigcap");c(f,g,Ae,"⋃","\\bigcup");c(f,g,Ae,"∫","\\int");c(f,g,Ae,"∫","\\intop");c(f,g,Ae,"∬","\\iint");c(f,g,Ae,"∭","\\iiint");c(f,g,Ae,"∏","\\prod");c(f,g,Ae,"∑","\\sum");c(f,g,Ae,"⨂","\\bigotimes");c(f,g,Ae,"⨁","\\bigoplus");c(f,g,Ae,"⨀","\\bigodot");c(f,g,Ae,"∮","\\oint");c(f,g,Ae,"∯","\\oiint");c(f,g,Ae,"∰","\\oiiint");c(f,g,Ae,"⨆","\\bigsqcup");c(f,g,Ae,"∫","\\smallint");c(B,g,or,"…","\\textellipsis");c(f,g,or,"…","\\mathellipsis");c(B,g,or,"…","\\ldots",!0);c(f,g,or,"…","\\ldots",!0);c(f,g,or,"⋯","\\@cdots",!0);c(f,g,or,"⋱","\\ddots",!0);c(f,g,T,"⋮","\\varvdots");c(B,g,T,"⋮","\\varvdots");c(f,g,ge,"ˊ","\\acute");c(f,g,ge,"ˋ","\\grave");c(f,g,ge,"¨","\\ddot");c(f,g,ge,"~","\\tilde");c(f,g,ge,"ˉ","\\bar");c(f,g,ge,"˘","\\breve");c(f,g,ge,"ˇ","\\check");c(f,g,ge,"^","\\hat");c(f,g,ge,"⃗","\\vec");c(f,g,ge,"˙","\\dot");c(f,g,ge,"˚","\\mathring");c(f,g,Z,"","\\@imath");c(f,g,Z,"","\\@jmath");c(f,g,T,"ı","ı");c(f,g,T,"ȷ","ȷ");c(B,g,T,"ı","\\i",!0);c(B,g,T,"ȷ","\\j",!0);c(B,g,T,"ß","\\ss",!0);c(B,g,T,"æ","\\ae",!0);c(B,g,T,"œ","\\oe",!0);c(B,g,T,"ø","\\o",!0);c(B,g,T,"Æ","\\AE",!0);c(B,g,T,"Œ","\\OE",!0);c(B,g,T,"Ø","\\O",!0);c(B,g,ge,"ˊ","\\'");c(B,g,ge,"ˋ","\\`");c(B,g,ge,"ˆ","\\^");c(B,g,ge,"˜","\\~");c(B,g,ge,"ˉ","\\=");c(B,g,ge,"˘","\\u");c(B,g,ge,"˙","\\.");c(B,g,ge,"¸","\\c");c(B,g,ge,"˚","\\r");c(B,g,ge,"ˇ","\\v");c(B,g,ge,"¨",'\\"');c(B,g,ge,"˝","\\H");c(B,g,ge,"◯","\\textcircled");var Fs={"--":!0,"---":!0,"``":!0,"''":!0};c(B,g,T,"–","--",!0);c(B,g,T,"–","\\textendash");c(B,g,T,"—","---",!0);c(B,g,T,"—","\\textemdash");c(B,g,T,"‘","`",!0);c(B,g,T,"‘","\\textquoteleft");c(B,g,T,"’","'",!0);c(B,g,T,"’","\\textquoteright");c(B,g,T,"“","``",!0);c(B,g,T,"“","\\textquotedblleft");c(B,g,T,"”","''",!0);c(B,g,T,"”","\\textquotedblright");c(f,g,T,"°","\\degree",!0);c(B,g,T,"°","\\degree");c(B,g,T,"°","\\textdegree",!0);c(f,g,T,"£","\\pounds");c(f,g,T,"£","\\mathsterling",!0);c(B,g,T,"£","\\pounds");c(B,g,T,"£","\\textsterling",!0);c(f,b,T,"✠","\\maltese");c(B,b,T,"✠","\\maltese");var Ma='0123456789/@."';for(var Jn=0;Jn{var t=e.charCodeAt(0),r=e.charCodeAt(1),n=(t-55296)*1024+(r-56320)+65536;if(119808<=n&&n<120484){var i=Math.floor((n-119808)/26);return Oa[i]}else if(120782<=n&&n<=120831){var a=Math.floor((n-120782)/10);return p2[a]}else{if(n===120485||n===120486)return Oa[0];if(120486{if(zt(e.classes)!==zt(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize||e.italic!==0&&e.hasClass("mathnormal"))return!1;if(e.classes.length===1){var r=e.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n of Object.keys(e.style))if(e.style[n]!==t.style[n])return!1;for(var i of Object.keys(t.style))if(e.style[i]!==t.style[i])return!1;return!0},Rs=e=>{for(var t=0;tr&&(r=l.height),l.depth>n&&(n=l.depth),l.maxFontSize>i&&(i=l.maxFontSize)}t.height=r,t.depth=n,t.maxFontSize=i},F=function(t,r,n,i){var a=new sr(t,r,n,i);return di(a),a},Et=(e,t,r,n)=>new sr(e,t,r,n),rr=function(t,r,n){var i=F([t],[],r);return i.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),i.style.borderBottomWidth=P(i.height),i.maxFontSize=1,i},y2=function(t,r,n,i){var a=new bn(t,r,n,i);return di(a),a},kt=function(t){var r=new lr(t);return di(r),r},nr=function(t,r){return t instanceof lr?F([],[t],r):t},b2=function(t){if(t.positionType==="individualShift"){for(var r=t.children,n=[r[0]],i=-r[0].shift-r[0].elem.depth,a=i,l=1;l{var r=F(["mspace"],[],t),n=ye(e,t);return r.style.marginRight=P(n),r},Xr=(e,t,r)=>{var n,i;switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return t==="textbf"&&r==="textit"?i="BoldItalic":t==="textbf"?i="Bold":r==="textit"?i="Italic":i="Regular",n+"-"+i},L0={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Ns={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ps=function(t,r){var[n,i,a]=Ns[t],l=new Mt(n),s=new yt([l],{width:P(i),height:P(a),style:"width:"+P(i),viewBox:"0 0 "+1e3*i+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),o=Et(["overlay"],[s],r);return o.height=a,o.style.height=P(a),o.style.width=P(i),o},ve={number:3,unit:"mu"},Ot={number:4,unit:"mu"},dt={number:5,unit:"mu"},x2={mord:{mop:ve,mbin:Ot,mrel:dt,minner:ve},mop:{mord:ve,mop:ve,mrel:dt,minner:ve},mbin:{mord:Ot,mop:Ot,mopen:Ot,minner:Ot},mrel:{mord:dt,mop:dt,mopen:dt,minner:dt},mopen:{},mclose:{mop:ve,mbin:Ot,mrel:dt,minner:ve},mpunct:{mord:ve,mop:ve,mrel:dt,mopen:ve,mclose:ve,mpunct:ve,minner:ve},minner:{mord:ve,mop:ve,mbin:Ot,mrel:dt,mopen:ve,mpunct:ve,minner:ve}},w2={mord:{mop:ve},mop:{mord:ve,mop:ve},mbin:{},mrel:{},mopen:{},mclose:{mop:ve},mpunct:{},minner:{mop:ve}},Os={},un={},cn={};function _(e){for(var{type:t,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:l}=e,s={type:t,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:i},o=0;o{var C=w.classes[0],A=y.classes[0];C==="mbin"&&S2.has(A)?w.classes[0]="mord":A==="mbin"&&k2.has(C)&&(y.classes[0]="mord")},{node:m},d,p),N0(a,(y,w)=>{var C,A,z=O0(w),I=O0(y),q=z&&I?y.hasClass("mtight")?(C=w2[z])==null?void 0:C[I]:(A=x2[z])==null?void 0:A[I]:null;if(q)return Ls(q,u)},{node:m},d,p),a},N0=function(t,r,n,i,a){i&&t.push(i);for(var l=0;ld=>{t.splice(m+1,0,d),l++})(l)}i&&t.pop()},qs=function(t){return t instanceof lr||t instanceof bn||t instanceof sr&&t.hasClass("enclosing")?t:null},P0=function(t,r){var n=qs(t);if(n){var i=n.children;if(i.length){if(r==="right")return P0(i[i.length-1],"right");if(r==="left")return P0(i[0],"left")}}return t},O0=function(t,r){if(!t)return null;r&&(t=P0(t,r));var n=t.classes[0];return T2[n]||null},zr=function(t,r){var n=["nulldelimiter"].concat(t.baseSizingClasses());return F(r.concat(n))},ue=function(t,r,n){if(!t)return F();if(un[t.type]){var i=un[t.type](t,r);if(n&&r.size!==n.size){i=F(r.sizingClasses(n),[i],r);var a=r.sizeMultiplier/n.sizeMultiplier;i.height*=a,i.depth*=a}return i}else throw new L("Got group of unknown type: '"+t.type+"'")};function Yr(e,t){var r=F(["base"],e,t),n=F(["strut"]);return n.style.height=P(r.height+r.depth),r.depth&&(n.style.verticalAlign=P(-r.depth)),r.children.unshift(n),r}function q0(e,t){var r=null;e.length===1&&e[0].type==="tag"&&(r=e[0].tag,e=e[0].body);var n=ze(e,t,"root"),i;n.length===2&&n[1].hasClass("tag")&&(i=n.pop());for(var a=[],l=[],s=0;s0&&(a.push(Yr(l,t)),l=[]),a.push(n[s]));l.length>0&&a.push(Yr(l,t));var u;r?(u=Yr(ze(r,t,!0),t),u.classes=["tag"],a.push(u)):i&&a.push(i);var h=F(["katex-html"],a);if(h.setAttribute("aria-hidden","true"),u){var m=u.children[0];m.style.height=P(h.height+h.depth),h.depth&&(m.style.verticalAlign=P(-h.depth))}return h}function Hs(e){return new lr(e)}class N{constructor(t,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=t,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(t,r){this.attributes[t]=r}getAttribute(t){return this.attributes[t]}toNode(){var t=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&t.setAttribute(r,this.attributes[r]);this.classes.length>0&&(t.className=zt(this.classes));for(var n=0;n0&&(t+=' class ="'+De(zt(this.classes))+'"'),t+=">";for(var n=0;n",t}toText(){return this.children.map(t=>t.toText()).join("")}}class Se{constructor(t){this.text=void 0,this.text=t}toNode(){return document.createTextNode(this.text)}toMarkup(){return De(this.toText())}toText(){return this.text}}class js{constructor(t){this.width=void 0,this.character=void 0,this.width=t,t>=.05555&&t<=.05556?this.character=" ":t>=.1666&&t<=.1667?this.character=" ":t>=.2222&&t<=.2223?this.character=" ":t>=.2777&&t<=.2778?this.character="  ":t>=-.05556&&t<=-.05555?this.character=" ⁣":t>=-.1667&&t<=-.1666?this.character=" ⁣":t>=-.2223&&t<=-.2222?this.character=" ⁣":t>=-.2778&&t<=-.2777?this.character=" ⁣":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var t=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return t.setAttribute("width",P(this.width)),t}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}}var C2=new Set(["\\imath","\\jmath"]),z2=new Set(["mrow","mtable"]),et=function(t,r,n){return de[r][t]&&de[r][t].replace&&t.charCodeAt(0)!==55349&&!(Fs.hasOwnProperty(t)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(t=de[r][t].replace),new Se(t)},gi=function(t){return t.length===1?t[0]:new N("mrow",t)},M2={mathit:"italic",boldsymbol:e=>e.type==="textord"?"bold":"bold-italic",mathbf:"bold",mathbb:"double-struck",mathsfit:"sans-serif-italic",mathfrak:"fraktur",mathscr:"script",mathcal:"script",mathsf:"sans-serif",mathtt:"monospace"},vi=(e,t)=>{if(e.mode==="text"){if(t.fontFamily==="texttt")return"monospace";if(t.fontFamily==="textsf")return t.fontShape==="textit"&&t.fontWeight==="textbf"?"sans-serif-bold-italic":t.fontShape==="textit"?"sans-serif-italic":t.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(t.fontShape==="textit"&&t.fontWeight==="textbf")return"bold-italic";if(t.fontShape==="textit")return"italic";if(t.fontWeight==="textbf")return"bold"}var r=t.font;if(!r||r==="mathnormal")return null;var n=e.mode,i=M2[r];if(i)return typeof i=="function"?i(e):i;var a=e.text;if(C2.has(a))return null;if(de[n][a]){var l=de[n][a].replace;l&&(a=l)}var s=L0[r].fontName;return fi(a,s,n)?L0[r].variant:null};function n0(e){if(!e)return!1;if(e.type==="mi"&&e.children.length===1){var t=e.children[0];return t instanceof Se&&t.text==="."}else if(e.type==="mo"&&e.children.length===1&&e.getAttribute("separator")==="true"&&e.getAttribute("lspace")==="0em"&&e.getAttribute("rspace")==="0em"){var r=e.children[0];return r instanceof Se&&r.text===","}else return!1}var Ke=function(t,r,n){if(t.length===1){var i=fe(t[0],r);return n&&i instanceof N&&i.type==="mo"&&(i.setAttribute("lspace","0em"),i.setAttribute("rspace","0em")),[i]}for(var a=[],l,s=0;s=1&&(l.type==="mn"||n0(l))){var u=o.children[0];u instanceof N&&u.type==="mn"&&(u.children=[...l.children,...u.children],a.pop())}else if(l.type==="mi"&&l.children.length===1){var h=l.children[0];if(h instanceof Se&&h.text==="̸"&&(o.type==="mo"||o.type==="mi"||o.type==="mn")){var m=o.children[0];m instanceof Se&&m.text.length>0&&(m.text=m.text.slice(0,1)+"̸"+m.text.slice(1),a.pop())}}}a.push(o),l=o}return a},It=function(t,r,n){return gi(Ke(t,r,n))},fe=function(t,r){if(!t)return new N("mrow");if(cn[t.type])return cn[t.type](t,r);throw new L("Got group of unknown type: '"+t.type+"'")};function qa(e,t,r,n,i){var a=Ke(e,r),l;a.length===1&&a[0]instanceof N&&z2.has(a[0].type)?l=a[0]:l=new N("mrow",a);var s=new N("annotation",[new Se(t)]);s.setAttribute("encoding","application/x-tex");var o=new N("semantics",[l,s]),u=new N("math",[o]);u.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&u.setAttribute("display","block");var h=i?"katex":"katex-mathml";return F([h],[u])}var E2=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],Ha=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],ja=function(t,r){return r.size<2?t:E2[t-1][r.size-1]};class gt{constructor(t){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=t.style,this.color=t.color,this.size=t.size||gt.BASESIZE,this.textSize=t.textSize||this.size,this.phantom=!!t.phantom,this.font=t.font||"",this.fontFamily=t.fontFamily||"",this.fontWeight=t.fontWeight||"",this.fontShape=t.fontShape||"",this.sizeMultiplier=Ha[this.size-1],this.maxSize=t.maxSize,this.minRuleThickness=t.minRuleThickness,this._fontMetrics=void 0}extend(t){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};return Object.assign(r,t),new gt(r)}havingStyle(t){return this.style===t?this:this.extend({style:t,size:ja(this.textSize,t)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(t){return this.size===t&&this.textSize===t?this:this.extend({style:this.style.text(),size:t,textSize:t,sizeMultiplier:Ha[t-1]})}havingBaseStyle(t){t=t||this.style.text();var r=ja(gt.BASESIZE,t);return this.size===r&&this.textSize===gt.BASESIZE&&this.style===t?this:this.extend({style:t,size:r})}havingBaseSizing(){var t;switch(this.style.id){case 4:case 5:t=3;break;case 6:case 7:t=1;break;default:t=6}return this.extend({style:this.style.text(),size:t})}withColor(t){return this.extend({color:t})}withPhantom(){return this.extend({phantom:!0})}withFont(t){return this.extend({font:t})}withTextFontFamily(t){return this.extend({fontFamily:t,font:""})}withTextFontWeight(t){return this.extend({fontWeight:t,font:""})}withTextFontShape(t){return this.extend({fontShape:t,font:""})}sizingClasses(t){return t.size!==this.size?["sizing","reset-size"+t.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==gt.BASESIZE?["sizing","reset-size"+this.size,"size"+gt.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=m2(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}gt.BASESIZE=6;var $s=function(t){return new gt({style:t.displayMode?te.DISPLAY:te.TEXT,maxSize:t.maxSize,minRuleThickness:t.minRuleThickness})},Us=function(t,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),t=F(n,[t])}return t},I2=function(t,r,n){var i=$s(n),a;if(n.output==="mathml")return qa(t,r,i,n.displayMode,!0);if(n.output==="html"){var l=q0(t,i);a=F(["katex"],[l])}else{var s=qa(t,r,i,n.displayMode,!1),o=q0(t,i);a=F(["katex"],[s,o])}return Us(a,n)},D2=function(t,r,n){var i=$s(n),a=q0(t,i),l=F(["katex"],[a]);return Us(l,n)},B2={widehat:"^",widecheck:"ˇ",widetilde:"~",utilde:"~",overleftarrow:"←",underleftarrow:"←",xleftarrow:"←",overrightarrow:"→",underrightarrow:"→",xrightarrow:"→",underbrace:"⏟",overbrace:"⏞",underbracket:"⎵",overbracket:"⎴",overgroup:"⏠",undergroup:"⏡",overleftrightarrow:"↔",underleftrightarrow:"↔",xleftrightarrow:"↔",Overrightarrow:"⇒",xRightarrow:"⇒",overleftharpoon:"↼",xleftharpoonup:"↼",overrightharpoon:"⇀",xrightharpoonup:"⇀",xLeftarrow:"⇐",xLeftrightarrow:"⇔",xhookleftarrow:"↩",xhookrightarrow:"↪",xmapsto:"↦",xrightharpoondown:"⇁",xleftharpoondown:"↽",xrightleftharpoons:"⇌",xleftrightharpoons:"⇋",xtwoheadleftarrow:"↞",xtwoheadrightarrow:"↠",xlongequal:"=",xtofrom:"⇄",xrightleftarrows:"⇄",xrightequilibrium:"⇌",xleftequilibrium:"⇋","\\cdrightarrow":"→","\\cdleftarrow":"←","\\cdlongequal":"="},kn=function(t){var r=new N("mo",[new Se(B2[t.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},F2={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overbracket:[["leftbracketover","rightbracketover"],1.6,440],underbracket:[["leftbracketunder","rightbracketunder"],1.6,410],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},R2=new Set(["widehat","widecheck","widetilde","utilde"]),Sn=function(t,r){function n(){var s=4e5,o=t.label.slice(1);if(R2.has(o)&&"base"in t){var u=t.base.type==="ordgroup"?t.base.body.length:1,h,m,d;if(u>5)o==="widehat"||o==="widecheck"?(h=420,s=2364,d=.42,m=o+"4"):(h=312,s=2340,d=.34,m="tilde4");else{var p=[1,1,2,2,3,3][u];o==="widehat"||o==="widecheck"?(s=[0,1062,2364,2364,2364][p],h=[0,239,300,360,420][p],d=[0,.24,.3,.3,.36,.42][p],m=o+p):(s=[0,600,1033,2339,2340][p],h=[0,260,286,306,312][p],d=[0,.26,.286,.3,.306,.34][p],m="tilde"+p)}var y=new Mt(m),w=new yt([y],{width:"100%",height:P(d),viewBox:"0 0 "+s+" "+h,preserveAspectRatio:"none"});return{span:Et([],[w],r),minWidth:0,height:d}}else{var C=[],A=F2[o];if(!A)throw new Error('No SVG data for "'+o+'".');var[z,I,q]=A,O=q/1e3,M=z.length,G,X;if(M===1){if(A.length!==4)throw new Error('Expected 4-tuple for single-path SVG data "'+o+'".');G=["hide-tail"],X=[A[3]]}else if(M===2)G=["halfarrow-left","halfarrow-right"],X=["xMinYMin","xMaxYMin"];else if(M===3)G=["brace-left","brace-center","brace-right"],X=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support + `+M+" children.");for(var U=0;U0&&(i.style.minWidth=P(a)),i},L2=function(t,r,n,i,a){var l,s=t.height+t.depth+n+i;if(/fbox|color|angl/.test(r)){if(l=F(["stretchy",r],[],a),r==="fbox"){var o=a.color&&a.getColor();o&&(l.style.borderColor=o)}}else{var u=[];/^[bx]cancel$/.test(r)&&u.push(new E0({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&u.push(new E0({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new yt(u,{width:"100%",height:P(s)});l=Et([],[h],a)}return l.height=s,l.style.height=P(s),l},N2={bin:1,close:1,inner:1,open:1,punct:1,rel:1},P2={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1};function O2(e){return e in N2}function re(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function An(e){var t=Tn(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Tn(e){return e&&(e.type==="atom"||P2.hasOwnProperty(e.type))?e:null}var Vs=e=>{if(e instanceof Xe)return e;if(c2(e)&&e.children.length===1)return Vs(e.children[0])},yi=(e,t)=>{var r,n,i;e&&e.type==="supsub"?(n=re(e.base,"accent"),r=n.base,e.base=r,i=u2(ue(e,t)),e.base=n):(n=re(e,"accent"),r=n.base);var a=ue(r,t.havingCrampedStyle()),l=n.isShifty&&xt(r),s=0;if(l){var o,u;s=(o=(u=Vs(a))==null?void 0:u.skew)!=null?o:0}var h=n.label==="\\c",m=h?a.height+a.depth:Math.min(a.height,t.fontMetrics().xHeight),d;if(n.isStretchy)d=Sn(n,t),d=oe({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:d,wrapperClasses:["svg-align"],wrapperStyle:s>0?{width:"calc(100% - "+P(2*s)+")",marginLeft:P(2*s)}:void 0}]});else{var p,y;n.label==="\\vec"?(p=Ps("vec",t),y=Ns.vec[1]):(p=wn({mode:n.mode,text:n.label},t,"textord"),p=o2(p),p.italic=0,y=p.width,h&&(m+=p.depth)),d=F(["accent-body"],[p]);var w=n.label==="\\textcircled";w&&(d.classes.push("accent-full"),m=a.height);var C=s;w||(C-=y/2),d.style.left=P(C),n.label==="\\textcircled"&&(d.style.top=".2em"),d=oe({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-m},{type:"elem",elem:d}]})}var A=F(["mord","accent"],[d],t);return i?(i.children[0]=A,i.height=Math.max(A.height,i.height),i.classes[0]="mord",i):A},_s=(e,t)=>{var r=e.isStretchy?kn(e.label):new N("mo",[et(e.label,e.mode)]),n=new N("mover",[fe(e.base,t),r]);return n.setAttribute("accent","true"),n},q2=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(e=>"\\"+e).join("|"));_({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{var r=hn(t[0]),n=!q2.test(e.funcName),i=!n||e.funcName==="\\widehat"||e.funcName==="\\widetilde"||e.funcName==="\\widecheck";return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:i,base:r}},htmlBuilder:yi,mathmlBuilder:_s});_({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{var r=t[0],n=e.parser.mode;return n==="math"&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:yi,mathmlBuilder:_s});_({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:n}=e,i=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:i}},htmlBuilder:(e,t)=>{var r=ue(e.base,t),n=Sn(e,t),i=e.label==="\\utilde"?.12:0,a=oe({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:i},{type:"elem",elem:r}]});return F(["mord","accentunder"],[a],t)},mathmlBuilder:(e,t)=>{var r=kn(e.label),n=new N("munder",[fe(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var Kr=e=>{var t=new N("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};_({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:n,funcName:i}=e;return{type:"xArrow",mode:n.mode,label:i,body:t[0],below:r[0]}},htmlBuilder(e,t){var r=t.style,n=t.havingStyle(r.sup()),i=nr(ue(e.body,n,t),t),a=e.label.slice(0,2)==="\\x"?"x":"cd";i.classes.push(a+"-arrow-pad");var l;e.below&&(n=t.havingStyle(r.sub()),l=nr(ue(e.below,n,t),t),l.classes.push(a+"-arrow-pad"));var s=Sn(e,t),o=-t.fontMetrics().axisHeight+.5*s.height,u=-t.fontMetrics().axisHeight-.5*s.height-.111;(i.depth>.25||e.label==="\\xleftequilibrium")&&(u-=i.depth);var h;if(l){var m=-t.fontMetrics().axisHeight+l.height+.5*s.height+.111;h=oe({positionType:"individualShift",children:[{type:"elem",elem:i,shift:u},{type:"elem",elem:s,shift:o,wrapperClasses:["svg-align"]},{type:"elem",elem:l,shift:m}]})}else h=oe({positionType:"individualShift",children:[{type:"elem",elem:i,shift:u},{type:"elem",elem:s,shift:o,wrapperClasses:["svg-align"]}]});return F(["mrel","x-arrow"],[h],t)},mathmlBuilder(e,t){var r=kn(e.label);r.setAttribute("minsize",e.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(e.body){var i=Kr(fe(e.body,t));if(e.below){var a=Kr(fe(e.below,t));n=new N("munderover",[r,a,i])}else n=new N("mover",[r,i])}else if(e.below){var l=Kr(fe(e.below,t));n=new N("munder",[r,l])}else n=Kr(),n=new N("mover",[r,n]);return n}});function Gs(e,t){var r=ze(e.body,t,!0);return F([e.mclass],r,t)}function Ws(e,t){var r,n=Ke(e.body,t);return e.mclass==="minner"?r=new N("mpadded",n):e.mclass==="mord"?e.isCharacterBox?(r=n[0],r.type="mi"):r=new N("mi",n):(e.isCharacterBox?(r=n[0],r.type="mo"):r=new N("mo",n),e.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):e.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):e.mclass==="mopen"||e.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):e.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}_({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(e,t){var{parser:r,funcName:n}=e,i=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:ke(i),isCharacterBox:xt(i)}},htmlBuilder:Gs,mathmlBuilder:Ws});var Cn=e=>{var t=e.type==="ordgroup"&&e.body.length?e.body[0]:e;return t.type==="atom"&&(t.family==="bin"||t.family==="rel")?"m"+t.family:"mord"};_({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(e,t){var{parser:r}=e;return{type:"mclass",mode:r.mode,mclass:Cn(t[0]),body:ke(t[1]),isCharacterBox:xt(t[1])}}});_({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(e,t){var{parser:r,funcName:n}=e,i=t[1],a=t[0],l;n!=="\\stackrel"?l=Cn(i):l="mrel";var s={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:ke(i)},o={type:"supsub",mode:a.mode,base:s,sup:n==="\\underset"?null:a,sub:n==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:l,body:[o],isCharacterBox:xt(o)}},htmlBuilder:Gs,mathmlBuilder:Ws});_({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"pmb",mode:r.mode,mclass:Cn(t[0]),body:ke(t[0])}},htmlBuilder(e,t){var r=ze(e.body,t,!0),n=F([e.mclass],r,t);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(e,t){var r=Ke(e.body,t),n=new N("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});var H2={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},$a=()=>({type:"styling",body:[],mode:"math",style:"display",resetFont:!0}),Ua=e=>e.type==="textord"&&e.text==="@",j2=(e,t)=>(e.type==="mathord"||e.type==="atom")&&e.text===t;function $2(e,t,r){var n=H2[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":{var i=r.callFunction("\\\\cdleft",[t[0]],[]),a={type:"atom",text:n,mode:"math",family:"rel"},l=r.callFunction("\\Big",[a],[]),s=r.callFunction("\\\\cdright",[t[1]],[]),o={type:"ordgroup",mode:"math",body:[i,l,s]};return r.callFunction("\\\\cdparent",[o],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var u={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[u],[])}default:return{type:"textord",text:" ",mode:"math"}}}function U2(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if(r==="&"||r==="\\\\")e.consume();else if(r==="\\end"){t[t.length-1].length===0&&t.pop();break}else throw new L("Expected \\\\ or \\cr or \\end",e.nextToken)}for(var n=[],i=[n],a=0;aAV".includes(u))for(var m=0;m<2;m++){for(var d=!0,p=o+1;pAV=|." after @',l[o]);var y=$2(u,h,e),w={type:"styling",body:[y],mode:"math",style:"display",resetFont:!0};n.push(w),s=$a()}a%2===0?n.push(s):n.shift(),n=[],i.push(n)}e.gullet.endGroup(),e.gullet.endGroup();var C=new Array(i[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:i,arraystretch:1,addJot:!0,rowGaps:[null],cols:C,colSeparationType:"CD",hLinesBeforeRow:new Array(i.length+1).fill([])}}_({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder(e,t){var r=t.havingStyle(t.style.sup()),n=nr(ue(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=P(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(e,t){var r=new N("mrow",[fe(e.label,t)]);return r=new N("mpadded",[r]),r.setAttribute("width","0"),e.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new N("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});_({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(e,t){var{parser:r}=e;return{type:"cdlabelparent",mode:r.mode,fragment:t[0]}},htmlBuilder(e,t){var r=nr(ue(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(e,t){return new N("mrow",[fe(e.fragment,t)])}});_({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(e,t){for(var{parser:r}=e,n=re(t[0],"ordgroup"),i=n.body,a="",l=0;l=1114111)throw new L("\\@char with invalid code point "+a);return o<=65535?u=String.fromCharCode(o):(o-=65536,u=String.fromCharCode((o>>10)+55296,(o&1023)+56320)),{type:"textord",mode:r.mode,text:u}}});var Xs=(e,t)=>{var r=ze(e.body,t.withColor(e.color),!1);return kt(r)},Ys=(e,t)=>{var r=Ke(e.body,t.withColor(e.color)),n=new N("mstyle",r);return n.setAttribute("mathcolor",e.color),n};_({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(e,t){var{parser:r}=e,n=re(t[0],"color-token").color,i=t[1];return{type:"color",mode:r.mode,color:n,body:ke(i)}},htmlBuilder:Xs,mathmlBuilder:Ys});_({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(e,t){var{parser:r,breakOnTokenText:n}=e,i=re(t[0],"color-token").color;r.gullet.macros.set("\\current@color",i);var a=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:i,body:a}},htmlBuilder:Xs,mathmlBuilder:Ys});_({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(e,t,r){var{parser:n}=e,i=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,a=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:a,size:i&&re(i,"size").value}},htmlBuilder(e,t){var r=F(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=P(ye(e.size,t)))),r},mathmlBuilder(e,t){var r=new N("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",P(ye(e.size,t)))),r}});var H0={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Ks=e=>{var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new L("Expected a control sequence",e);return t},V2=e=>{var t=e.gullet.popToken();return t.text==="="&&(t=e.gullet.popToken(),t.text===" "&&(t=e.gullet.popToken())),t},Zs=(e,t,r,n)=>{var i=e.gullet.macros.get(r.text);i==null&&(r.noexpand=!0,i={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,i,n)};_({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(e){var{parser:t,funcName:r}=e;t.consumeSpaces();var n=t.fetch();if(H0[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=H0[n.text]),re(t.parseFunction(),"internal");throw new L("Invalid token after macro prefix",n)}});_({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=t.gullet.popToken(),i=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new L("Expected a control sequence",n);for(var a=0,l,s=[[]];t.gullet.future().text!=="{";)if(n=t.gullet.popToken(),n.text==="#"){if(t.gullet.future().text==="{"){l=t.gullet.future(),s[a].push("{");break}if(n=t.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new L('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==a+1)throw new L('Argument number "'+n.text+'" out of order');a++,s.push([])}else{if(n.text==="EOF")throw new L("Expected a macro definition");s[a].push(n.text)}var{tokens:o}=t.gullet.consumeArg();return l&&o.unshift(l),(r==="\\edef"||r==="\\xdef")&&(o=t.gullet.expandTokens(o),o.reverse()),t.gullet.macros.set(i,{tokens:o,numArgs:a,delimiters:s},r===H0[r]),{type:"internal",mode:t.mode}}});_({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=Ks(t.gullet.popToken());t.gullet.consumeSpaces();var i=V2(t);return Zs(t,n,i,r==="\\\\globallet"),{type:"internal",mode:t.mode}}});_({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,n=Ks(t.gullet.popToken()),i=t.gullet.popToken(),a=t.gullet.popToken();return Zs(t,n,a,r==="\\\\globalfuture"),t.gullet.pushToken(a),t.gullet.pushToken(i),{type:"internal",mode:t.mode}}});var yr=function(t,r,n){var i=de.math[t]&&de.math[t].replace,a=fi(i||t,r,n);if(!a)throw new Error("Unsupported symbol "+t+" and font size "+r+".");return a},bi=function(t,r,n,i){var a=n.havingBaseStyle(r),l=F(i.concat(a.sizingClasses(n)),[t],n),s=a.sizeMultiplier/n.sizeMultiplier;return l.height*=s,l.depth*=s,l.maxFontSize=a.sizeMultiplier,l},Qs=function(t,r,n){var i=r.havingBaseStyle(n),a=(1-r.sizeMultiplier/i.sizeMultiplier)*r.fontMetrics().axisHeight;t.classes.push("delimcenter"),t.style.top=P(a),t.height-=a,t.depth+=a},_2=function(t,r,n,i,a,l){var s=Le(t,"Main-Regular",a,i),o=bi(s,r,i,l);return Qs(o,i,r),o},G2=function(t,r,n,i){return Le(t,"Size"+r+"-Regular",n,i)},Js=function(t,r,n,i,a,l){var s=G2(t,r,a,i),o=bi(F(["delimsizing","size"+r],[s],i),te.TEXT,i,l);return n&&Qs(o,i,te.TEXT),o},i0=function(t,r,n){var i;r==="Size1-Regular"?i="delim-size1":i="delim-size4";var a=F(["delimsizinginner",i],[F([],[Le(t,r,n)])]);return{type:"elem",elem:a}},a0=function(t,r,n){var i=st["Size4-Regular"][t.charCodeAt(0)]?st["Size4-Regular"][t.charCodeAt(0)][4]:st["Size1-Regular"][t.charCodeAt(0)][4],a=new Mt("inner",t2(t,Math.round(1e3*r))),l=new yt([a],{width:P(i),height:P(r),style:"width:"+P(i),viewBox:"0 0 "+1e3*i+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),s=Et([],[l],n);return s.height=r,s.style.height=P(r),s.style.width=P(i),{type:"elem",elem:s}},j0=.008,Zr={type:"kern",size:-1*j0},W2=new Set(["|","\\lvert","\\rvert","\\vert"]),X2=new Set(["\\|","\\lVert","\\rVert","\\Vert"]),eo=function(t,r,n,i,a,l){var s,o,u,h,m="",d=0;s=u=h=t,o=null;var p="Size1-Regular";t==="\\uparrow"?u=h="⏐":t==="\\Uparrow"?u=h="‖":t==="\\downarrow"?s=u="⏐":t==="\\Downarrow"?s=u="‖":t==="\\updownarrow"?(s="\\uparrow",u="⏐",h="\\downarrow"):t==="\\Updownarrow"?(s="\\Uparrow",u="‖",h="\\Downarrow"):W2.has(t)?(u="∣",m="vert",d=333):X2.has(t)?(u="∥",m="doublevert",d=556):t==="["||t==="\\lbrack"?(s="⎡",u="⎢",h="⎣",p="Size4-Regular",m="lbrack",d=667):t==="]"||t==="\\rbrack"?(s="⎤",u="⎥",h="⎦",p="Size4-Regular",m="rbrack",d=667):t==="\\lfloor"||t==="⌊"?(u=s="⎢",h="⎣",p="Size4-Regular",m="lfloor",d=667):t==="\\lceil"||t==="⌈"?(s="⎡",u=h="⎢",p="Size4-Regular",m="lceil",d=667):t==="\\rfloor"||t==="⌋"?(u=s="⎥",h="⎦",p="Size4-Regular",m="rfloor",d=667):t==="\\rceil"||t==="⌉"?(s="⎤",u=h="⎥",p="Size4-Regular",m="rceil",d=667):t==="("||t==="\\lparen"?(s="⎛",u="⎜",h="⎝",p="Size4-Regular",m="lparen",d=875):t===")"||t==="\\rparen"?(s="⎞",u="⎟",h="⎠",p="Size4-Regular",m="rparen",d=875):t==="\\{"||t==="\\lbrace"?(s="⎧",o="⎨",h="⎩",u="⎪",p="Size4-Regular"):t==="\\}"||t==="\\rbrace"?(s="⎫",o="⎬",h="⎭",u="⎪",p="Size4-Regular"):t==="\\lgroup"||t==="⟮"?(s="⎧",h="⎩",u="⎪",p="Size4-Regular"):t==="\\rgroup"||t==="⟯"?(s="⎫",h="⎭",u="⎪",p="Size4-Regular"):t==="\\lmoustache"||t==="⎰"?(s="⎧",h="⎭",u="⎪",p="Size4-Regular"):(t==="\\rmoustache"||t==="⎱")&&(s="⎫",h="⎩",u="⎪",p="Size4-Regular");var y=yr(s,p,a),w=y.height+y.depth,C=yr(u,p,a),A=C.height+C.depth,z=yr(h,p,a),I=z.height+z.depth,q=0,O=1;if(o!==null){var M=yr(o,p,a);q=M.height+M.depth,O=2}var G=w+I+q,X=Math.max(0,Math.ceil((r-G)/(O*A))),U=G+X*O*A,E=i.fontMetrics().axisHeight;n&&(E*=i.sizeMultiplier);var V=U/2-E,$=[];if(m.length>0){var se=U-w-I,Y=Math.round(U*1e3),H=r2(m,Math.round(se*1e3)),ae=new Mt(m,H),pe=P(d/1e3),Me=P(Y/1e3),$e=new yt([ae],{width:pe,height:Me,viewBox:"0 0 "+d+" "+Y}),k=Et([],[$e],i);k.height=Y/1e3,k.style.width=pe,k.style.height=Me,$.push({type:"elem",elem:k})}else{if($.push(i0(h,p,a)),$.push(Zr),o===null){var xe=U-w-I+2*j0;$.push(a0(u,xe,i))}else{var Fe=(U-w-I-q)/2+2*j0;$.push(a0(u,Fe,i)),$.push(Zr),$.push(i0(o,p,a)),$.push(Zr),$.push(a0(u,Fe,i))}$.push(Zr),$.push(i0(s,p,a))}var S=i.havingBaseStyle(te.TEXT),Ee=oe({positionType:"bottom",positionData:V,children:$});return bi(F(["delimsizing","mult"],[Ee],S),te.TEXT,i,l)},l0=80,s0=.08,o0=function(t,r,n,i,a){var l=e2(t,i,n),s=new Mt(t,l),o=new yt([s],{width:"400em",height:P(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return Et(["hide-tail"],[o],a)},Y2=function(t,r){var n=r.havingBaseSizing(),i=ao("\\surd",t*n.sizeMultiplier,io,n),a=n.sizeMultiplier,l=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),s,o,u,h,m;return i.type==="small"?(h=1e3+1e3*l+l0,t<1?a=1:t<1.4&&(a=.7),o=(1+l+s0)/a,u=(1+l)/a,s=o0("sqrtMain",o,h,l,r),s.style.minWidth="0.853em",m=.833/a):i.type==="large"?(h=(1e3+l0)*kr[i.size],u=(kr[i.size]+l)/a,o=(kr[i.size]+l+s0)/a,s=o0("sqrtSize"+i.size,o,h,l,r),s.style.minWidth="1.02em",m=1/a):(o=t+l+s0,u=t+l,h=Math.floor(1e3*t+l)+l0,s=o0("sqrtTall",o,h,l,r),s.style.minWidth="0.742em",m=1.056),s.height=u,s.style.height=P(o),{span:s,advanceWidth:m,ruleWidth:(r.fontMetrics().sqrtRuleThickness+l)*a}},to=new Set(["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","\\surd"]),K2=new Set(["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱"]),ro=new Set(["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"]),kr=[0,1.2,1.8,2.4,3],no=function(t,r,n,i,a){if(t==="<"||t==="\\lt"||t==="⟨"?t="\\langle":(t===">"||t==="\\gt"||t==="⟩")&&(t="\\rangle"),to.has(t)||ro.has(t))return Js(t,r,!1,n,i,a);if(K2.has(t))return eo(t,kr[r],!1,n,i,a);throw new L("Illegal delimiter: '"+t+"'")},Z2=[{type:"small",style:te.SCRIPTSCRIPT},{type:"small",style:te.SCRIPT},{type:"small",style:te.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],Q2=[{type:"small",style:te.SCRIPTSCRIPT},{type:"small",style:te.SCRIPT},{type:"small",style:te.TEXT},{type:"stack"}],io=[{type:"small",style:te.SCRIPTSCRIPT},{type:"small",style:te.SCRIPT},{type:"small",style:te.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],J2=function(t){if(t.type==="small")return"Main-Regular";if(t.type==="large")return"Size"+t.size+"-Regular";if(t.type==="stack")return"Size4-Regular";var r=t.type;throw new Error("Add support for delim type '"+r+"' here.")},ao=function(t,r,n,i){for(var a=Math.min(2,3-i.style.size),l=a;lr)return s}return n[n.length-1]},$0=function(t,r,n,i,a,l){t==="<"||t==="\\lt"||t==="⟨"?t="\\langle":(t===">"||t==="\\gt"||t==="⟩")&&(t="\\rangle");var s;ro.has(t)?s=Z2:to.has(t)?s=io:s=Q2;var o=ao(t,r,s,i);return o.type==="small"?_2(t,o.style,n,i,a,l):o.type==="large"?Js(t,o.size,n,i,a,l):eo(t,r,n,i,a,l)},u0=function(t,r,n,i,a,l){var s=i.fontMetrics().axisHeight*i.sizeMultiplier,o=901,u=5/i.fontMetrics().ptPerEm,h=Math.max(r-s,n+s),m=Math.max(h/500*o,2*h-u);return $0(t,m,!0,i,a,l)},Va={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},e5=new Set(["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."]);function _a(e){return"isMiddle"in e}function zn(e,t){var r=Tn(e);if(r&&e5.has(r.text))return r;throw r?new L("Invalid delimiter '"+r.text+"' after '"+t.funcName+"'",e):new L("Invalid delimiter type '"+e.type+"'",e)}_({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{var r=zn(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Va[e.funcName].size,mclass:Va[e.funcName].mclass,delim:r.text}},htmlBuilder:(e,t)=>e.delim==="."?F([e.mclass]):no(e.delim,e.size,t,e.mode,[e.mclass]),mathmlBuilder:e=>{var t=[];e.delim!=="."&&t.push(et(e.delim,e.mode));var r=new N("mo",t);e.mclass==="mopen"||e.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=P(kr[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}});function Ga(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}_({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=e.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new L("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:zn(t[0],e).text,color:r}}});_({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=zn(t[0],e),n=e.parser;++n.leftrightDepth;var i=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var a=re(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:i,left:r.text,right:a.delim,rightColor:a.color}},htmlBuilder:(e,t)=>{Ga(e);for(var r=ze(e.body,t,!0,["mopen","mclose"]),n=0,i=0,a=!1,l=0;l{Ga(e);var r=Ke(e.body,t);if(e.left!=="."){var n=new N("mo",[et(e.left,e.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(e.right!=="."){var i=new N("mo",[et(e.right,e.mode)]);i.setAttribute("fence","true"),e.rightColor&&i.setAttribute("mathcolor",e.rightColor),r.push(i)}return gi(r)}});_({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=zn(t[0],e);if(!e.parser.leftrightDepth)throw new L("\\middle without preceding \\left",r);return{type:"middle",mode:e.parser.mode,delim:r.text}},htmlBuilder:(e,t)=>{var r;return e.delim==="."?r=zr(t,[]):(r=no(e.delim,1,t,e.mode,[]),r.isMiddle={delim:e.delim,options:t}),r},mathmlBuilder:(e,t)=>{var r=e.delim==="\\vert"||e.delim==="|"?et("|","text"):et(e.delim,e.mode),n=new N("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n}});var Mn=(e,t)=>{var r=nr(ue(e.body,t),t),n=e.label.slice(1),i=t.sizeMultiplier,a,l,s=xt(e.body);if(n==="sout")a=F(["stretchy","sout"]),a.height=t.fontMetrics().defaultRuleThickness/i,l=-.5*t.fontMetrics().xHeight;else if(n==="phase"){var o=ye({number:.6,unit:"pt"},t),u=ye({number:.35,unit:"ex"},t),h=t.havingBaseSizing();i=i/h.sizeMultiplier;var m=r.height+r.depth+o+u;r.style.paddingLeft=P(m/2+o);var d=Math.floor(1e3*m*i),p=Qf(d),y=new yt([new Mt("phase",p)],{width:"400em",height:P(d/1e3),viewBox:"0 0 400000 "+d,preserveAspectRatio:"xMinYMin slice"});a=Et(["hide-tail"],[y],t),a.style.height=P(m),l=r.depth+o+u}else{/cancel/.test(n)?s||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var w,C,A=0;/box/.test(n)?(A=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),w=t.fontMetrics().fboxsep+(n==="colorbox"?0:A),C=w):n==="angl"?(A=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness),w=4*A,C=Math.max(0,.25-r.depth)):(w=s?.2:0,C=w),a=L2(r,n,w,C,t),/fbox|boxed|fcolorbox/.test(n)?(a.style.borderStyle="solid",a.style.borderWidth=P(A)):n==="angl"&&A!==.049&&(a.style.borderTopWidth=P(A),a.style.borderRightWidth=P(A)),l=r.depth+C,e.backgroundColor&&(a.style.backgroundColor=e.backgroundColor,e.borderColor&&(a.style.borderColor=e.borderColor))}var z;if(e.backgroundColor)z=oe({positionType:"individualShift",children:[{type:"elem",elem:a,shift:l},{type:"elem",elem:r,shift:0}]});else{var I=/cancel|phase/.test(n)?["svg-align"]:[];z=oe({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:l,wrapperClasses:I}]})}return/cancel/.test(n)&&(z.height=r.height,z.depth=r.depth),/cancel/.test(n)&&!s?F(["mord","cancel-lap"],[z],t):F(["mord"],[z],t)},En=(e,t)=>{var r,n=new N(e.label.includes("colorbox")?"mpadded":"menclose",[fe(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),e.label==="\\fcolorbox"){var i=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+P(i)+" solid "+e.borderColor)}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};_({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","hbox"]},handler(e,t,r){var{parser:n,funcName:i}=e,a=re(t[0],"color-token").color,l=t[1];return{type:"enclose",mode:n.mode,label:i,backgroundColor:a,body:l}},htmlBuilder:Mn,mathmlBuilder:En});_({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","hbox"]},handler(e,t,r){var{parser:n,funcName:i}=e,a=re(t[0],"color-token").color,l=re(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:i,backgroundColor:l,borderColor:a,body:s}},htmlBuilder:Mn,mathmlBuilder:En});_({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}});_({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\phase"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e,i=t[0];return{type:"enclose",mode:r.mode,label:n,body:i}},htmlBuilder:Mn,mathmlBuilder:En});_({type:"enclose",names:["\\sout"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e;r.mode==="math"&&r.settings.reportNonstrict("mathVsSout","LaTeX's \\sout works only in text mode");var i=t[0];return{type:"enclose",mode:r.mode,label:n,body:i}},htmlBuilder:Mn,mathmlBuilder:En});_({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\angl",body:t[0]}}});var lo={};function ut(e){for(var{type:t,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:l}=e,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:i},o=0;o{var t=e.parser.settings;if(!t.displayMode)throw new L("{"+e.envName+"} can be used only in display mode.")},t5=new Set(["gather","gather*"]);function xi(e){if(!e.includes("ed"))return!e.includes("*")}function Bt(e,t,r){var{hskipBeforeAndAfter:n,addJot:i,cols:a,arraystretch:l,colSeparationType:s,autoTag:o,singleRow:u,emptySingleRow:h,maxNumCols:m,leqno:d}=t;if(e.gullet.beginGroup(),u||e.gullet.macros.set("\\cr","\\\\\\relax"),!l){var p=e.gullet.expandMacroAsText("\\arraystretch");if(p==null)l=1;else if(l=parseFloat(p),!l||l<0)throw new L("Invalid \\arraystretch: "+p)}e.gullet.beginGroup();var y=[],w=[y],C=[],A=[],z=o!=null?[]:void 0;function I(){o&&e.gullet.macros.set("\\@eqnsw","1",!0)}function q(){z&&(e.gullet.macros.get("\\df@tag")?(z.push(e.subparse([new We("\\df@tag")])),e.gullet.macros.set("\\df@tag",void 0,!0)):z.push(!!o&&e.gullet.macros.get("\\@eqnsw")==="1"))}for(I(),A.push(Wa(e));;){var O=e.parseExpression(!1,u?"\\end":"\\\\");e.gullet.endGroup(),e.gullet.beginGroup();var M={type:"ordgroup",mode:e.mode,body:O};r&&(M={type:"styling",mode:e.mode,style:r,resetFont:!0,body:[M]}),y.push(M);var G=e.fetch().text;if(G==="&"){if(m&&y.length===m){if(u||s)throw new L("Too many tab characters: &",e.nextToken);e.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}e.consume()}else if(G==="\\end"){q(),y.length===1&&M.type==="styling"&&M.body.length===1&&M.body[0].type==="ordgroup"&&M.body[0].body.length===0&&(w.length>1||!h)&&w.pop(),A.length0&&(I+=.25),u.push({pos:I,isDashed:Q[ne]})}for(q(l[0]),n=0;n0&&(V+=z,GQ))for(n=0;n=s)){var Ue=void 0;if(i>0||t.hskipBeforeAndAfter){var mt,Ft;Ue=(mt=(Ft=S)==null?void 0:Ft.pregap)!=null?mt:d,Ue!==0&&(H=F(["arraycolsep"],[]),H.style.width=P(Ue),Y.push(H))}var Rr=[];for(n=0;n0){for(var Bn=rr("hline",r,h),Fn=rr("hdashline",r,h),hr=[{type:"elem",elem:Rt,shift:0}];u.length>0;){var qr=u.pop(),Hr=qr.pos-$;qr.isDashed?hr.push({type:"elem",elem:Fn,shift:Hr}):hr.push({type:"elem",elem:Bn,shift:Hr})}Rt=oe({positionType:"individualShift",children:hr})}if(pe.length===0)return F(["mord"],[Rt],r);var D=oe({positionType:"individualShift",children:pe}),j=F(["tag"],[D],r);return kt([Rt,j])},r5={c:"center ",l:"left ",r:"right "},ht=function(t,r){for(var n=[],i=new N("mtd",[],["mtr-glue"]),a=new N("mtd",[],["mml-eqn-num"]),l=0;l0){var y=t.cols,w="",C=!1,A=0,z=y.length;y[0].type==="separator"&&(d+="top ",A=1),y[y.length-1].type==="separator"&&(d+="bottom ",z-=1);for(var I=A;I0?"left ":"",d+=U[U.length-1].length>0?"right ":"";for(var E=1;E0&&p&&(C=1),n[y]={type:"align",align:w,pregap:C,postgap:0}}return l.colSeparationType=p?"align":"alignat",l};ut({type:"array",names:["array","darray"],props:{numArgs:1},handler(e,t){var r=Tn(t[0]),n=r?[t[0]]:re(t[0],"ordgroup").body,i=n.map(function(l){var s=An(l),o=s.text;if("lcr".includes(o))return{type:"align",align:o};if(o==="|")return{type:"separator",separator:"|"};if(o===":")return{type:"separator",separator:":"};throw new L("Unknown column alignment: "+o,l)}),a={cols:i,hskipBeforeAndAfter:!0,maxNumCols:i.length};return Bt(e.parser,a,wi(e.envName))},htmlBuilder:ct,mathmlBuilder:ht});ut({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(e.envName.charAt(e.envName.length-1)==="*"){var i=e.parser;if(i.consumeSpaces(),i.fetch().text==="["){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,!"lcr".includes(r))throw new L("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),n.cols=[{type:"align",align:r}]}}var a=Bt(e.parser,n,wi(e.envName)),l=Math.max(0,...a.body.map(s=>s.length));return a.cols=new Array(l).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[a],left:t[0],right:t[1],rightColor:void 0}:a},htmlBuilder:ct,mathmlBuilder:ht});ut({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){var t={arraystretch:.5},r=Bt(e.parser,t,"script");return r.colSeparationType="small",r},htmlBuilder:ct,mathmlBuilder:ht});ut({type:"array",names:["subarray"],props:{numArgs:1},handler(e,t){var r=Tn(t[0]),n=r?[t[0]]:re(t[0],"ordgroup").body,i=n.map(function(s){var o=An(s),u=o.text;if("lc".includes(u))return{type:"align",align:u};throw new L("Unknown column alignment: "+u,s)});if(i.length>1)throw new L("{subarray} can contain only one column");var a={cols:i,hskipBeforeAndAfter:!1,arraystretch:.5},l=Bt(e.parser,a,"script");if(l.body.length>0&&l.body[0].length>1)throw new L("{subarray} can contain only one column");return l},htmlBuilder:ct,mathmlBuilder:ht});ut({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){var t={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=Bt(e.parser,t,wi(e.envName));return{type:"leftright",mode:e.mode,body:[r],left:e.envName.includes("r")?".":"\\{",right:e.envName.includes("r")?"\\}":".",rightColor:void 0}},htmlBuilder:ct,mathmlBuilder:ht});ut({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:oo,htmlBuilder:ct,mathmlBuilder:ht});ut({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){t5.has(e.envName)&&In(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:xi(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Bt(e.parser,t,"display")},htmlBuilder:ct,mathmlBuilder:ht});ut({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:oo,htmlBuilder:ct,mathmlBuilder:ht});ut({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){In(e);var t={autoTag:xi(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Bt(e.parser,t,"display")},htmlBuilder:ct,mathmlBuilder:ht});ut({type:"array",names:["CD"],props:{numArgs:0},handler(e){return In(e),U2(e.parser)},htmlBuilder:ct,mathmlBuilder:ht});v("\\nonumber","\\gdef\\@eqnsw{0}");v("\\notag","\\nonumber");_({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(e,t){throw new L(e.funcName+" valid only within array environment")}});var Xa=lo;_({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(e,t){var{parser:r,funcName:n}=e,i=t[0];if(i.type!=="ordgroup")throw new L("Invalid environment name",i);for(var a="",l=0;l{var r=e.font,n=t.withFont(r);return ue(e.body,n)},co=(e,t)=>{var r=e.font,n=t.withFont(r);return fe(e.body,n)},Ya={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak"};_({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,i=hn(t[0]),a=n;return a in Ya&&(a=Ya[a]),{type:"font",mode:r.mode,font:a.slice(1),body:i}},htmlBuilder:uo,mathmlBuilder:co});_({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"mclass",mode:r.mode,mclass:Cn(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:xt(n)}}});_({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:n,breakOnTokenText:i}=e,{mode:a}=r,l=r.parseExpression(!0,i);return{type:"font",mode:a,font:"math"+n.slice(1),body:{type:"ordgroup",mode:r.mode,body:l}}},htmlBuilder:uo,mathmlBuilder:co});var n5=(e,t)=>{var r=t.style,n=r.fracNum(),i=r.fracDen(),a;a=t.havingStyle(n);var l=ue(e.numer,a,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,o=3.5/t.fontMetrics().ptPerEm;l.height=l.height0?y=3*d:y=7*d,w=t.fontMetrics().denom1):(m>0?(p=t.fontMetrics().num2,y=d):(p=t.fontMetrics().num3,y=3*d),w=t.fontMetrics().denom2);var C;if(h){var z=t.fontMetrics().axisHeight;p-l.depth-(z+.5*m){var r=new N("mfrac",[fe(e.numer,t),fe(e.denom,t)]);if(!e.hasBarLine)r.setAttribute("linethickness","0px");else if(e.barSize){var n=ye(e.barSize,t);r.setAttribute("linethickness",P(n))}if(e.leftDelim!=null||e.rightDelim!=null){var i=[];if(e.leftDelim!=null){var a=new N("mo",[new Se(e.leftDelim.replace("\\",""))]);a.setAttribute("fence","true"),i.push(a)}if(i.push(r),e.rightDelim!=null){var l=new N("mo",[new Se(e.rightDelim.replace("\\",""))]);l.setAttribute("fence","true"),i.push(l)}return gi(i)}return r},ho=(e,t)=>{if(!t)return e;var r={type:"styling",mode:e.mode,style:t,body:[e]};return r};_({type:"genfrac",names:["\\cfrac","\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,i=t[0],a=t[1],l,s=null,o=null;switch(n){case"\\cfrac":case"\\dfrac":case"\\frac":case"\\tfrac":l=!0;break;case"\\\\atopfrac":l=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":l=!1,s="(",o=")";break;case"\\\\bracefrac":l=!1,s="\\{",o="\\}";break;case"\\\\brackfrac":l=!1,s="[",o="]";break;default:throw new Error("Unrecognized genfrac command")}var u=n==="\\cfrac",h=null;return u||n.startsWith("\\d")?h="display":n.startsWith("\\t")&&(h="text"),ho({type:"genfrac",mode:r.mode,numer:i,denom:a,continued:u,hasBarLine:l,leftDelim:s,rightDelim:o,barSize:null},h)},htmlBuilder:n5,mathmlBuilder:i5});_({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(e){var{parser:t,funcName:r,token:n}=e,i;switch(r){case"\\over":i="\\frac";break;case"\\choose":i="\\binom";break;case"\\atop":i="\\\\atopfrac";break;case"\\brace":i="\\\\bracefrac";break;case"\\brack":i="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:t.mode,replaceWith:i,token:n}}});var Ka=["display","text","script","scriptscript"],Za=function(t){var r=null;return t.length>0&&(r=t,r=r==="."?null:r),r};_({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(e,t){var{parser:r}=e,n=t[4],i=t[5],a=hn(t[0]),l=a.type==="atom"&&a.family==="open"?Za(a.text):null,s=hn(t[1]),o=s.type==="atom"&&s.family==="close"?Za(s.text):null,u=re(t[2],"size"),h,m=null;u.isBlank?h=!0:(m=u.value,h=m.number>0);var d=null,p=t[3];if(p.type==="ordgroup"){if(p.body.length>0){var y=re(p.body[0],"textord");d=Ka[Number(y.text)]}}else p=re(p,"textord"),d=Ka[Number(p.text)];return ho({type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:h,barSize:m,leftDelim:l,rightDelim:o},d)}});_({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(e,t){var{parser:r,funcName:n,token:i}=e;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:re(t[0],"size").value,token:i}}});_({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(e,t)=>{var{parser:r,funcName:n}=e,i=t[0],a=re(t[1],"infix").size;if(!a)throw new Error("\\\\abovefrac expected size, but got "+String(a));var l=t[2],s=a.number>0;return{type:"genfrac",mode:r.mode,numer:i,denom:l,continued:!1,hasBarLine:s,barSize:a,leftDelim:null,rightDelim:null}}});var mo=(e,t)=>{var r=t.style,n,i;e.type==="supsub"?(n=e.sup?ue(e.sup,t.havingStyle(r.sup()),t):ue(e.sub,t.havingStyle(r.sub()),t),i=re(e.base,"horizBrace")):i=re(e,"horizBrace");var a=ue(i.base,t.havingBaseStyle(te.DISPLAY)),l=Sn(i,t),s;if(i.isOver?s=oe({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:l,wrapperClasses:["svg-align"]}]}):s=oe({positionType:"bottom",positionData:a.depth+.1+l.height,children:[{type:"elem",elem:l,wrapperClasses:["svg-align"]},{type:"kern",size:.1},{type:"elem",elem:a}]}),n){var o=F(["minner",i.isOver?"mover":"munder"],[s],t);i.isOver?s=oe({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:.2},{type:"elem",elem:n}]}):s=oe({positionType:"bottom",positionData:o.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:o}]})}return F(["minner",i.isOver?"mover":"munder"],[s],t)},a5=(e,t)=>{var r=kn(e.label);return new N(e.isOver?"mover":"munder",[fe(e.base,t),r])};_({type:"horizBrace",names:["\\overbrace","\\underbrace","\\overbracket","\\underbracket"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:n}=e;return{type:"horizBrace",mode:r.mode,label:n,isOver:n.includes("\\over"),base:t[0]}},htmlBuilder:mo,mathmlBuilder:a5});_({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[1],i=re(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:i})?{type:"href",mode:r.mode,href:i,body:ke(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:(e,t)=>{var r=ze(e.body,t,!1);return y2(e.href,[],r,t)},mathmlBuilder:(e,t)=>{var r=It(e.body,t);return r instanceof N||(r=new N("mrow",[r])),r.setAttribute("href",e.href),r}});_({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=re(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var i=[],a=0;a{var{parser:r,funcName:n,token:i}=e,a=re(t[0],"raw").string,l=t[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var s,o={};switch(n){case"\\htmlClass":o.class=a,s={command:"\\htmlClass",class:a};break;case"\\htmlId":o.id=a,s={command:"\\htmlId",id:a};break;case"\\htmlStyle":o.style=a,s={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var u=a.split(","),h=0;h{var r=ze(e.body,t,!1),n=["enclosing"];e.attributes.class&&n.push(...e.attributes.class.trim().split(/\s+/));var i=F(n,r,t);for(var a in e.attributes)a!=="class"&&e.attributes.hasOwnProperty(a)&&i.setAttribute(a,e.attributes[a]);return i},mathmlBuilder:(e,t)=>It(e.body,t)});_({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInArgument:!0,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"htmlmathml",mode:r.mode,html:ke(t[0]),mathml:ke(t[1])}},htmlBuilder:(e,t)=>{var r=ze(e.html,t,!1);return kt(r)},mathmlBuilder:(e,t)=>It(e.mathml,t)});var c0=function(t){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(t))return{number:+t,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t);if(!r)throw new L("Invalid size: '"+t+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!Es(n))throw new L("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n};_({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(e,t,r)=>{var{parser:n}=e,i={number:0,unit:"em"},a={number:.9,unit:"em"},l={number:0,unit:"em"},s="";if(r[0])for(var o=re(r[0],"raw").string,u=o.split(","),h=0;h{var r=ye(e.height,t),n=0;e.totalheight.number>0&&(n=ye(e.totalheight,t)-r);var i=0;e.width.number>0&&(i=ye(e.width,t));var a={height:P(r+n)};i>0&&(a.width=P(i)),n>0&&(a.verticalAlign=P(-n));var l=new l2(e.src,e.alt,a);return l.height=r,l.depth=n,l},mathmlBuilder:(e,t)=>{var r=new N("mglyph",[]);r.setAttribute("alt",e.alt);var n=ye(e.height,t),i=0;if(e.totalheight.number>0&&(i=ye(e.totalheight,t)-n,r.setAttribute("valign",P(-i))),r.setAttribute("height",P(n+i)),e.width.number>0){var a=ye(e.width,t);r.setAttribute("width",P(a))}return r.setAttribute("src",e.src),r}});_({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e,i=re(t[0],"size");if(r.settings.strict){var a=n[1]==="m",l=i.value.unit==="mu";a?(l||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+i.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):l&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:i.value}},htmlBuilder(e,t){return Ls(e.dimension,t)},mathmlBuilder(e,t){var r=ye(e.dimension,t);return new js(r)}});_({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:n}=e,i=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:i}},htmlBuilder:(e,t)=>{var r;e.alignment==="clap"?(r=F([],[ue(e.body,t)]),r=F(["inner"],[r],t)):r=F(["inner"],[ue(e.body,t)]);var n=F(["fix"],[]),i=F([e.alignment],[r,n],t),a=F(["strut"]);return a.style.height=P(i.height+i.depth),i.depth&&(a.style.verticalAlign=P(-i.depth)),i.children.unshift(a),i=F(["thinbox"],[i],t),F(["mord","vbox"],[i],t)},mathmlBuilder:(e,t)=>{var r=new N("mpadded",[fe(e.body,t)]);if(e.alignment!=="rlap"){var n=e.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}});_({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){var{funcName:r,parser:n}=e,i=n.mode;n.switchMode("math");var a=r==="\\("?"\\)":"$",l=n.parseExpression(!1,a);return n.expect(a),n.switchMode(i),{type:"styling",mode:n.mode,style:"text",resetFont:!0,body:l}}});_({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){throw new L("Mismatched "+e.funcName)}});var Qa=(e,t)=>{switch(t.style.size){case te.DISPLAY.size:return e.display;case te.TEXT.size:return e.text;case te.SCRIPT.size:return e.script;case te.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};_({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"mathchoice",mode:r.mode,display:ke(t[0]),text:ke(t[1]),script:ke(t[2]),scriptscript:ke(t[3])}},htmlBuilder:(e,t)=>{var r=Qa(e,t),n=ze(r,t,!1);return kt(n)},mathmlBuilder:(e,t)=>{var r=Qa(e,t);return It(r,t)}});var fo=(e,t,r,n,i,a,l)=>{e=F([],[e]);var s=r&&xt(r),o,u;if(t){var h=ue(t,n.havingStyle(i.sup()),n);u={elem:h,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-h.depth)}}if(r){var m=ue(r,n.havingStyle(i.sub()),n);o={elem:m,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-m.height)}}var d;if(u&&o){var p=n.fontMetrics().bigOpSpacing5+o.elem.height+o.elem.depth+o.kern+e.depth+l;d=oe({positionType:"bottom",positionData:p,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:o.elem,marginLeft:P(-a)},{type:"kern",size:o.kern},{type:"elem",elem:e},{type:"kern",size:u.kern},{type:"elem",elem:u.elem,marginLeft:P(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]})}else if(o){var y=e.height-l;d=oe({positionType:"top",positionData:y,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:o.elem,marginLeft:P(-a)},{type:"kern",size:o.kern},{type:"elem",elem:e}]})}else if(u){var w=e.depth+l;d=oe({positionType:"bottom",positionData:w,children:[{type:"elem",elem:e},{type:"kern",size:u.kern},{type:"elem",elem:u.elem,marginLeft:P(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]})}else return e;var C=[d];if(o&&a!==0&&!s){var A=F(["mspace"],[],n);A.style.marginRight=P(a),C.unshift(A)}return F(["mop","op-limits"],C,n)},po=new Set(["\\smallint"]),ur=(e,t)=>{var r,n,i=!1,a;e.type==="supsub"?(r=e.sup,n=e.sub,a=re(e.base,"op"),i=!0):a=re(e,"op");var l=t.style,s=!1;l.size===te.DISPLAY.size&&a.symbol&&!po.has(a.name)&&(s=!0);var o,u;if(a.symbol){var h=s?"Size2-Regular":"Size1-Regular",m="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(m=a.name.slice(1),a.name=m==="oiint"?"\\iint":"\\iiint"),o=Le(a.name,h,"math",t,["mop","op-symbol",s?"large-op":"small-op"]),u=o.italic,m.length>0){var d=Ps(m+"Size"+(s?"2":"1"),t);o=oe({positionType:"individualShift",children:[{type:"elem",elem:o,shift:0},{type:"elem",elem:d,shift:s?.08:0}]}),a.name="\\"+m,o.classes.unshift("mop"),o.italic=u}}else if(a.body){var p=ze(a.body,t,!0);p.length===1&&p[0]instanceof Xe?(o=p[0],o.classes[0]="mop"):o=F(["mop"],p,t)}else{for(var y=[],w=1;w{var r;if(e.symbol)r=new N("mo",[et(e.name,e.mode)]),po.has(e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new N("mo",Ke(e.body,t));else{r=new N("mi",[new Se(e.name.slice(1))]);var n=new N("mo",[et("⁡","text")]);e.parentIsSupSub?r=new N("mrow",[r,n]):r=Hs([r,n])}return r},l5={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨆":"\\bigsqcup"};_({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨄","⨆"],props:{numArgs:0},handler:(e,t)=>{var{parser:r,funcName:n}=e,i=n;return i.length===1&&(i=l5[i]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:i}},htmlBuilder:ur,mathmlBuilder:Fr});_({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:ke(n)}},htmlBuilder:ur,mathmlBuilder:Fr});var s5={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint"};_({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:ur,mathmlBuilder:Fr});_({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:ur,mathmlBuilder:Fr});_({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","∫","∬","∭","∮","∯","∰"],props:{numArgs:0,allowedInArgument:!0},handler(e){var{parser:t,funcName:r}=e,n=r;return n.length===1&&(n=s5[n]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:ur,mathmlBuilder:Fr});var go=(e,t)=>{var r,n,i=!1,a;e.type==="supsub"?(r=e.sup,n=e.sub,a=re(e.base,"operatorname"),i=!0):a=re(e,"operatorname");var l;if(a.body.length>0){for(var s=a.body.map(m=>{var d="text"in m?m.text:void 0;return typeof d=="string"?{type:"textord",mode:m.mode,text:d}:m}),o=ze(s,t.withFont("mathrm"),!0),u=0;u{for(var r=Ke(e.body,t.withFont("mathrm")),n=!0,i=0;ih.toText()).join("");r=[new Se(s)]}var o=new N("mi",r);o.setAttribute("mathvariant","normal");var u=new N("mo",[et("⁡","text")]);return e.parentIsSupSub?new N("mrow",[o,u]):Hs([o,u])};_({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:n}=e,i=t[0];return{type:"operatorname",mode:r.mode,body:ke(i),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},htmlBuilder:go,mathmlBuilder:o5});v("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");Gt({type:"ordgroup",htmlBuilder(e,t){return e.semisimple?kt(ze(e.body,t,!1)):F(["mord"],ze(e.body,t,!0),t)},mathmlBuilder(e,t){return It(e.body,t,!0)}});_({type:"overline",names:["\\overline"],props:{numArgs:1},handler(e,t){var{parser:r}=e,n=t[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(e,t){var r=ue(e.body,t.havingCrampedStyle()),n=rr("overline-line",t),i=t.fontMetrics().defaultRuleThickness,a=oe({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*i},{type:"elem",elem:n},{type:"kern",size:i}]});return F(["mord","overline"],[a],t)},mathmlBuilder(e,t){var r=new N("mo",[new Se("‾")]);r.setAttribute("stretchy","true");var n=new N("mover",[fe(e.body,t),r]);return n.setAttribute("accent","true"),n}});_({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"phantom",mode:r.mode,body:ke(n)}},htmlBuilder:(e,t)=>{var r=ze(e.body,t.withPhantom(),!1);return kt(r)},mathmlBuilder:(e,t)=>{var r=Ke(e.body,t);return new N("mphantom",r)}});v("\\hphantom","\\smash{\\phantom{#1}}");_({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,n=t[0];return{type:"vphantom",mode:r.mode,body:n}},htmlBuilder:(e,t)=>{var r=F(["inner"],[ue(e.body,t.withPhantom())]),n=F(["fix"],[]);return F(["mord","rlap"],[r,n],t)},mathmlBuilder:(e,t)=>{var r=Ke(ke(e.body),t),n=new N("mphantom",r),i=new N("mpadded",[n]);return i.setAttribute("width","0px"),i}});_({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e,n=re(t[0],"size").value,i=t[1];return{type:"raisebox",mode:r.mode,dy:n,body:i}},htmlBuilder(e,t){var r=ue(e.body,t),n=ye(e.dy,t);return oe({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]})},mathmlBuilder(e,t){var r=new N("mpadded",[fe(e.body,t)]),n=e.dy.number+e.dy.unit;return r.setAttribute("voffset",n),r}});_({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(e){var{parser:t}=e;return{type:"internal",mode:t.mode}}});_({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(e,t,r){var{parser:n}=e,i=r[0],a=re(t[0],"size"),l=re(t[1],"size");return{type:"rule",mode:n.mode,shift:i&&re(i,"size").value,width:a.value,height:l.value}},htmlBuilder(e,t){var r=F(["mord","rule"],[],t),n=ye(e.width,t),i=ye(e.height,t),a=e.shift?ye(e.shift,t):0;return r.style.borderRightWidth=P(n),r.style.borderTopWidth=P(i),r.style.bottom=P(a),r.width=n,r.height=i+a,r.depth=-a,r.maxFontSize=i*1.125*t.sizeMultiplier,r},mathmlBuilder(e,t){var r=ye(e.width,t),n=ye(e.height,t),i=e.shift?ye(e.shift,t):0,a=t.color&&t.getColor()||"black",l=new N("mspace");l.setAttribute("mathbackground",a),l.setAttribute("width",P(r)),l.setAttribute("height",P(n));var s=new N("mpadded",[l]);return i>=0?s.setAttribute("height",P(i)):(s.setAttribute("height",P(i)),s.setAttribute("depth",P(-i))),s.setAttribute("voffset",P(i)),s}});function vo(e,t,r){for(var n=ze(e,t,!1),i=t.sizeMultiplier/r.sizeMultiplier,a=0;a{var r=t.havingSize(e.size);return vo(e.body,r,t)};_({type:"sizing",names:Ja,props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{breakOnTokenText:r,funcName:n,parser:i}=e,a=i.parseExpression(!1,r);return{type:"sizing",mode:i.mode,size:Ja.indexOf(n)+1,body:a}},htmlBuilder:u5,mathmlBuilder:(e,t)=>{var r=t.havingSize(e.size),n=Ke(e.body,r),i=new N("mstyle",n);return i.setAttribute("mathsize",P(r.sizeMultiplier)),i}});_({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(e,t,r)=>{var{parser:n}=e,i=!1,a=!1,l=r[0]&&re(r[0],"ordgroup");if(l)for(var s,o=0;o{var r=F([],[ue(e.body,t)]);if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height=0),e.smashDepth&&(r.depth=0),e.smashHeight&&e.smashDepth)return F(["mord","smash"],[r],t);if(r.children)for(var n=0;n{var r=new N("mpadded",[fe(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}});_({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:n}=e,i=r[0],a=t[0];return{type:"sqrt",mode:n.mode,body:a,index:i}},htmlBuilder(e,t){var r=ue(e.body,t.havingCrampedStyle());r.height===0&&(r.height=t.fontMetrics().xHeight),r=nr(r,t);var n=t.fontMetrics(),i=n.defaultRuleThickness,a=i;t.style.idr.height+r.depth+l&&(l=(l+m-r.height-r.depth)/2);var d=o.height-r.height-l-u;r.style.paddingLeft=P(h);var p=oe({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+d)},{type:"elem",elem:o},{type:"kern",size:u}]});if(e.index){var y=t.havingStyle(te.SCRIPTSCRIPT),w=ue(e.index,y,t),C=.6*(p.height-p.depth),A=oe({positionType:"shift",positionData:-C,children:[{type:"elem",elem:w}]}),z=F(["root"],[A]);return F(["mord","sqrt"],[z,p],t)}else return F(["mord","sqrt"],[p],t)},mathmlBuilder(e,t){var{body:r,index:n}=e;return n?new N("mroot",[fe(r,t),fe(n,t)]):new N("msqrt",[fe(r,t)])}});var U0={display:te.DISPLAY,text:te.TEXT,script:te.SCRIPT,scriptscript:te.SCRIPTSCRIPT};function c5(e){return e in U0}_({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e,t){var{breakOnTokenText:r,funcName:n,parser:i}=e,a=i.parseExpression(!0,r),l=n.slice(1,n.length-5);if(!c5(l))throw new Error("Unknown style: "+l);return{type:"styling",mode:i.mode,style:l,body:a}},htmlBuilder(e,t){var r=U0[e.style],n=t.havingStyle(r);return e.resetFont&&(n=n.withFont("")),vo(e.body,n,t)},mathmlBuilder(e,t){var r=U0[e.style],n=t.havingStyle(r);e.resetFont&&(n=n.withFont(""));var i=Ke(e.body,n),a=new N("mstyle",i),l={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},s=l[e.style];return a.setAttribute("scriptlevel",s[0]),a.setAttribute("displaystyle",s[1]),a}});var h5=function(t,r){var n=t.base;if(n)if(n.type==="op"){var i=n.limits&&(r.style.size===te.DISPLAY.size||n.alwaysHandleSupSub);return i?ur:null}else if(n.type==="operatorname"){var a=n.alwaysHandleSupSub&&(r.style.size===te.DISPLAY.size||n.limits);return a?go:null}else{if(n.type==="accent")return xt(n.base)?yi:null;if(n.type==="horizBrace"){var l=!t.sub;return l===n.isOver?mo:null}else return null}else return null};Gt({type:"supsub",htmlBuilder(e,t){var r=h5(e,t);if(r)return r(e,t);var{base:n,sup:i,sub:a}=e,l=ue(n,t),s,o,u=t.fontMetrics(),h=0,m=0,d=n&&xt(n);if(i){var p=t.havingStyle(t.style.sup());s=ue(i,p,t),d||(h=l.height-p.fontMetrics().supDrop*p.sizeMultiplier/t.sizeMultiplier)}if(a){var y=t.havingStyle(t.style.sub());o=ue(a,y,t),d||(m=l.depth+y.fontMetrics().subDrop*y.sizeMultiplier/t.sizeMultiplier)}var w;t.style===te.DISPLAY?w=u.sup1:t.style.cramped?w=u.sup3:w=u.sup2;var C=t.sizeMultiplier,A=P(.5/u.ptPerEm/C),z=null;if(o){var I=e.base&&e.base.type==="op"&&e.base.name&&(e.base.name==="\\oiint"||e.base.name==="\\oiiint");if(l instanceof Xe||I){var q;z=P(-((q=l.italic)!=null?q:0))}}var O;if(s&&o){h=Math.max(h,w,s.depth+.25*u.xHeight),m=Math.max(m,u.sub2);var M=u.defaultRuleThickness,G=4*M;if(h-s.depth-(o.height-m)0&&(h+=X,m-=X)}var U=[{type:"elem",elem:o,shift:m,marginRight:A,marginLeft:z},{type:"elem",elem:s,shift:-h,marginRight:A}];O=oe({positionType:"individualShift",children:U})}else if(o){m=Math.max(m,u.sub1,o.height-.8*u.xHeight);var E=[{type:"elem",elem:o,marginLeft:z,marginRight:A}];O=oe({positionType:"shift",positionData:m,children:E})}else if(s)h=Math.max(h,w,s.depth+.25*u.xHeight),O=oe({positionType:"shift",positionData:-h,children:[{type:"elem",elem:s,marginRight:A}]});else throw new Error("supsub must have either sup or sub.");var V=O0(l,"right")||"mord";return F([V],[l,F(["msupsub"],[O])],t)},mathmlBuilder(e,t){var r=!1,n,i;e.base&&e.base.type==="horizBrace"&&(i=!!e.sup,i===e.base.isOver&&(r=!0,n=e.base.isOver)),e.base&&(e.base.type==="op"||e.base.type==="operatorname")&&(e.base.parentIsSupSub=!0);var a=[fe(e.base,t)];e.sub&&a.push(fe(e.sub,t)),e.sup&&a.push(fe(e.sup,t));var l;if(r)l=n?"mover":"munder";else if(e.sub)if(e.sup){var u=e.base;u&&u.type==="op"&&u.limits&&t.style===te.DISPLAY||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(t.style===te.DISPLAY||u.limits)?l="munderover":l="msubsup"}else{var o=e.base;o&&o.type==="op"&&o.limits&&(t.style===te.DISPLAY||o.alwaysHandleSupSub)||o&&o.type==="operatorname"&&o.alwaysHandleSupSub&&(o.limits||t.style===te.DISPLAY)?l="munder":l="msub"}else{var s=e.base;s&&s.type==="op"&&s.limits&&(t.style===te.DISPLAY||s.alwaysHandleSupSub)||s&&s.type==="operatorname"&&s.alwaysHandleSupSub&&(s.limits||t.style===te.DISPLAY)?l="mover":l="msup"}return new N(l,a)}});Gt({type:"atom",htmlBuilder(e,t){return pi(e.text,e.mode,t,["m"+e.family])},mathmlBuilder(e,t){var r=new N("mo",[et(e.text,e.mode)]);if(e.family==="bin"){var n=vi(e,t);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else e.family==="punct"?r.setAttribute("separator","true"):(e.family==="open"||e.family==="close")&&r.setAttribute("stretchy","false");return r}});var yo={mi:"italic",mn:"normal",mtext:"normal"};Gt({type:"mathord",htmlBuilder(e,t){return wn(e,t,"mathord")},mathmlBuilder(e,t){var r=new N("mi",[et(e.text,e.mode,t)]),n=vi(e,t)||"italic";return n!==yo[r.type]&&r.setAttribute("mathvariant",n),r}});Gt({type:"textord",htmlBuilder(e,t){return wn(e,t,"textord")},mathmlBuilder(e,t){var r=et(e.text,e.mode,t),n=vi(e,t)||"normal",i;return e.mode==="text"?i=new N("mtext",[r]):/[0-9]/.test(e.text)?i=new N("mn",[r]):e.text==="\\prime"?i=new N("mo",[r]):i=new N("mi",[r]),n!==yo[i.type]&&i.setAttribute("mathvariant",n),i}});var h0={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},m0={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};Gt({type:"spacing",htmlBuilder(e,t){if(m0.hasOwnProperty(e.text)){var r=m0[e.text].className||"";if(e.mode==="text"){var n=wn(e,t,"textord");return n.classes.push(r),n}else return F(["mspace",r],[pi(e.text,e.mode,t)],t)}else{if(h0.hasOwnProperty(e.text))return F(["mspace",h0[e.text]],[],t);throw new L('Unknown type of space "'+e.text+'"')}},mathmlBuilder(e,t){var r;if(m0.hasOwnProperty(e.text))r=new N("mtext",[new Se(" ")]);else{if(h0.hasOwnProperty(e.text))return new N("mspace");throw new L('Unknown type of space "'+e.text+'"')}return r}});var el=()=>{var e=new N("mtd",[]);return e.setAttribute("width","50%"),e};Gt({type:"tag",mathmlBuilder(e,t){var r=new N("mtable",[new N("mtr",[el(),new N("mtd",[It(e.body,t)]),el(),new N("mtd",[It(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var tl={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},rl={"\\textbf":"textbf","\\textmd":"textmd"},m5={"\\textit":"textit","\\textup":"textup"},nl=(e,t)=>{var r=e.font;if(r){if(tl[r])return t.withTextFontFamily(tl[r]);if(rl[r])return t.withTextFontWeight(rl[r]);if(r==="\\emph")return t.fontShape==="textit"?t.withTextFontShape("textup"):t.withTextFontShape("textit")}else return t;return t.withTextFontShape(m5[r])};_({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:n}=e,i=t[0];return{type:"text",mode:r.mode,body:ke(i),font:n}},htmlBuilder(e,t){var r=nl(e,t),n=ze(e.body,r,!0);return F(["mord","text"],n,r)},mathmlBuilder(e,t){var r=nl(e,t);return It(e.body,r)}});_({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=ue(e.body,t),n=rr("underline-line",t),i=t.fontMetrics().defaultRuleThickness,a=oe({positionType:"top",positionData:r.height,children:[{type:"kern",size:i},{type:"elem",elem:n},{type:"kern",size:3*i},{type:"elem",elem:r}]});return F(["mord","underline"],[a],t)},mathmlBuilder(e,t){var r=new N("mo",[new Se("‾")]);r.setAttribute("stretchy","true");var n=new N("munder",[fe(e.body,t),r]);return n.setAttribute("accentunder","true"),n}});_({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"vcenter",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=ue(e.body,t),n=t.fontMetrics().axisHeight,i=.5*(r.height-n-(r.depth+n));return oe({positionType:"shift",positionData:i,children:[{type:"elem",elem:r}]})},mathmlBuilder(e,t){var r=new N("mpadded",[fe(e.body,t)],["vcenter"]);return new N("mrow",[r])}});_({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(e,t,r){throw new L("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(e,t){for(var r=il(e),n=[],i=t.havingStyle(t.style.text()),a=0;ae.body.replace(/ /g,e.star?"␣":" "),Ct=Os,bo=`[ \r + ]`,f5="\\\\[a-zA-Z@]+",p5="\\\\[^\uD800-\uDFFF]",d5="("+f5+")"+bo+"*",g5=`\\\\( +|[ \r ]+ +?)[ \r ]*`,V0="[̀-ͯ]",v5=new RegExp(V0+"+$"),y5="("+bo+"+)|"+(g5+"|")+"([!-\\[\\]-‧‪-퟿豈-￿]"+(V0+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(V0+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+d5)+("|"+p5+")");class al{constructor(t,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=t,this.settings=r,this.tokenRegex=new RegExp(y5,"g"),this.catcodes={"%":14,"~":13}}setCatcode(t,r){this.catcodes[t]=r}lex(){var t=this.input,r=this.tokenRegex.lastIndex;if(r===t.length)return new We("EOF",new He(this,r,r));var n=this.tokenRegex.exec(t);if(n===null||n.index!==r)throw new L("Unexpected character: '"+t[r]+"'",new We(t[r],new He(this,r,r+1)));var i=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[i]===14){var a=t.indexOf(` +`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=t.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new We(i,new He(this,r,this.tokenRegex.lastIndex))}}class b5{constructor(t,r){t===void 0&&(t={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=t,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new L("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var t=this.undefStack.pop();for(var r in t)t.hasOwnProperty(r)&&(t[r]==null?delete this.current[r]:this.current[r]=t[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(t){return this.current.hasOwnProperty(t)||this.builtins.hasOwnProperty(t)}get(t){return this.current.hasOwnProperty(t)?this.current[t]:this.builtins[t]}set(t,r,n){if(n===void 0&&(n=!1),n){for(var i=0;i0&&(this.undefStack[this.undefStack.length-1][t]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(t)&&(a[t]=this.current[t])}r==null?delete this.current[t]:this.current[t]=r}}var x5=so;v("\\noexpand",function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}});v("\\expandafter",function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}});v("\\@firstoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[0],numArgs:0}});v("\\@secondoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[1],numArgs:0}});v("\\@ifnextchar",function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return t[0].length===1&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}});v("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");v("\\TextOrMath",function(e){var t=e.consumeArgs(2);return e.mode==="text"?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}});var ll={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};v("\\char",function(e){var t=e.popToken(),r,n=0;if(t.text==="'")r=8,t=e.popToken();else if(t.text==='"')r=16,t=e.popToken();else if(t.text==="`")if(t=e.popToken(),t.text[0]==="\\")n=t.text.charCodeAt(1);else{if(t.text==="EOF")throw new L("\\char` missing argument");n=t.text.charCodeAt(0)}else r=10;if(r){if(n=ll[t.text],n==null||n>=r)throw new L("Invalid base-"+r+" digit "+t.text);for(var i;(i=ll[e.future().text])!=null&&i{var i=e.consumeArg().tokens;if(i.length!==1)throw new L("\\newcommand's first argument must be a macro name");var a=i[0].text,l=e.isDefined(a);if(l&&!t)throw new L("\\newcommand{"+a+"} attempting to redefine "+(a+"; use \\renewcommand"));if(!l&&!r)throw new L("\\renewcommand{"+a+"} when command "+a+" does not yet exist; use \\newcommand");var s=0;if(i=e.consumeArg().tokens,i.length===1&&i[0].text==="["){for(var o="",u=e.expandNextToken();u.text!=="]"&&u.text!=="EOF";)o+=u.text,u=e.expandNextToken();if(!o.match(/^\s*[0-9]+\s*$/))throw new L("Invalid number of arguments: "+o);s=parseInt(o),i=e.consumeArg().tokens}return l&&n||e.macros.set(a,{tokens:i,numArgs:s}),""};v("\\newcommand",e=>ki(e,!1,!0,!1));v("\\renewcommand",e=>ki(e,!0,!1,!1));v("\\providecommand",e=>ki(e,!0,!0,!0));v("\\message",e=>{var t=e.consumeArgs(1)[0];return console.log(t.reverse().map(r=>r.text).join("")),""});v("\\errmessage",e=>{var t=e.consumeArgs(1)[0];return console.error(t.reverse().map(r=>r.text).join("")),""});v("\\show",e=>{var t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),Ct[r],de.math[r],de.text[r]),""});v("\\bgroup","{");v("\\egroup","}");v("~","\\nobreakspace");v("\\lq","`");v("\\rq","'");v("\\aa","\\r a");v("\\AA","\\r A");v("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`©}");v("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");v("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}");v("ℬ","\\mathscr{B}");v("ℰ","\\mathscr{E}");v("ℱ","\\mathscr{F}");v("ℋ","\\mathscr{H}");v("ℐ","\\mathscr{I}");v("ℒ","\\mathscr{L}");v("ℳ","\\mathscr{M}");v("ℛ","\\mathscr{R}");v("ℭ","\\mathfrak{C}");v("ℌ","\\mathfrak{H}");v("ℨ","\\mathfrak{Z}");v("\\Bbbk","\\Bbb{k}");v("\\llap","\\mathllap{\\textrm{#1}}");v("\\rlap","\\mathrlap{\\textrm{#1}}");v("\\clap","\\mathclap{\\textrm{#1}}");v("\\mathstrut","\\vphantom{(}");v("\\underbar","\\underline{\\text{#1}}");v("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}\\nobreak}{\\char"338}');v("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}");v("\\ne","\\neq");v("≠","\\neq");v("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}");v("∉","\\notin");v("≘","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}");v("≙","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}");v("≚","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}");v("≛","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}");v("≝","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}");v("≞","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}");v("≟","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}");v("⟂","\\perp");v("‼","\\mathclose{!\\mkern-0.8mu!}");v("∌","\\notni");v("⌜","\\ulcorner");v("⌝","\\urcorner");v("⌞","\\llcorner");v("⌟","\\lrcorner");v("©","\\copyright");v("®","\\textregistered");v("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');v("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');v("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');v("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');v("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");v("⋮","\\vdots");v("\\varGamma","\\mathit{\\Gamma}");v("\\varDelta","\\mathit{\\Delta}");v("\\varTheta","\\mathit{\\Theta}");v("\\varLambda","\\mathit{\\Lambda}");v("\\varXi","\\mathit{\\Xi}");v("\\varPi","\\mathit{\\Pi}");v("\\varSigma","\\mathit{\\Sigma}");v("\\varUpsilon","\\mathit{\\Upsilon}");v("\\varPhi","\\mathit{\\Phi}");v("\\varPsi","\\mathit{\\Psi}");v("\\varOmega","\\mathit{\\Omega}");v("\\substack","\\begin{subarray}{c}#1\\end{subarray}");v("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");v("\\boxed","\\fbox{$\\displaystyle{#1}$}");v("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");v("\\implies","\\DOTSB\\;\\Longrightarrow\\;");v("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");v("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");v("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");var sl={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"},w5=new Set(["bin","rel"]);v("\\dots",function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in sl?t=sl[r]:(r.slice(0,4)==="\\not"||r in de.math&&w5.has(de.math[r].group))&&(t="\\dotsb"),t});var Si={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};v("\\dotso",function(e){var t=e.future().text;return t in Si?"\\ldots\\,":"\\ldots"});v("\\dotsc",function(e){var t=e.future().text;return t in Si&&t!==","?"\\ldots\\,":"\\ldots"});v("\\cdots",function(e){var t=e.future().text;return t in Si?"\\@cdots\\,":"\\@cdots"});v("\\dotsb","\\cdots");v("\\dotsm","\\cdots");v("\\dotsi","\\!\\cdots");v("\\dotsx","\\ldots\\,");v("\\DOTSI","\\relax");v("\\DOTSB","\\relax");v("\\DOTSX","\\relax");v("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");v("\\,","\\tmspace+{3mu}{.1667em}");v("\\thinspace","\\,");v("\\>","\\mskip{4mu}");v("\\:","\\tmspace+{4mu}{.2222em}");v("\\medspace","\\:");v("\\;","\\tmspace+{5mu}{.2777em}");v("\\thickspace","\\;");v("\\!","\\tmspace-{3mu}{.1667em}");v("\\negthinspace","\\!");v("\\negmedspace","\\tmspace-{4mu}{.2222em}");v("\\negthickspace","\\tmspace-{5mu}{.277em}");v("\\enspace","\\kern.5em ");v("\\enskip","\\hskip.5em\\relax");v("\\quad","\\hskip1em\\relax");v("\\qquad","\\hskip2em\\relax");v("\\tag","\\@ifstar\\tag@literal\\tag@paren");v("\\tag@paren","\\tag@literal{({#1})}");v("\\tag@literal",e=>{if(e.macros.get("\\df@tag"))throw new L("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});v("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");v("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");v("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");v("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");v("\\newline","\\\\\\relax");v("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var xo=P(st["Main-Regular"][84][1]-.7*st["Main-Regular"][65][1]);v("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+xo+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");v("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+xo+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");v("\\hspace","\\@ifstar\\@hspacer\\@hspace");v("\\@hspace","\\hskip #1\\relax");v("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");v("\\ordinarycolon",":");v("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");v("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');v("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');v("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');v("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');v("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');v("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');v("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');v("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');v("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');v("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');v("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');v("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');v("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');v("∷","\\dblcolon");v("∹","\\eqcolon");v("≔","\\coloneqq");v("≕","\\eqqcolon");v("⩴","\\Coloneqq");v("\\ratio","\\vcentcolon");v("\\coloncolon","\\dblcolon");v("\\colonequals","\\coloneqq");v("\\coloncolonequals","\\Coloneqq");v("\\equalscolon","\\eqqcolon");v("\\equalscoloncolon","\\Eqqcolon");v("\\colonminus","\\coloneq");v("\\coloncolonminus","\\Coloneq");v("\\minuscolon","\\eqcolon");v("\\minuscoloncolon","\\Eqcolon");v("\\coloncolonapprox","\\Colonapprox");v("\\coloncolonsim","\\Colonsim");v("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");v("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");v("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");v("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");v("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}");v("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");v("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");v("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");v("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");v("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");v("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");v("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");v("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");v("\\gvertneqq","\\html@mathml{\\@gvertneqq}{≩}");v("\\lvertneqq","\\html@mathml{\\@lvertneqq}{≨}");v("\\ngeqq","\\html@mathml{\\@ngeqq}{≱}");v("\\ngeqslant","\\html@mathml{\\@ngeqslant}{≱}");v("\\nleqq","\\html@mathml{\\@nleqq}{≰}");v("\\nleqslant","\\html@mathml{\\@nleqslant}{≰}");v("\\nshortmid","\\html@mathml{\\@nshortmid}{∤}");v("\\nshortparallel","\\html@mathml{\\@nshortparallel}{∦}");v("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{⊈}");v("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{⊉}");v("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{⊊}");v("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{⫋}");v("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{⊋}");v("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{⫌}");v("\\imath","\\html@mathml{\\@imath}{ı}");v("\\jmath","\\html@mathml{\\@jmath}{ȷ}");v("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}");v("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}");v("⟦","\\llbracket");v("⟧","\\rrbracket");v("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}");v("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}");v("⦃","\\lBrace");v("⦄","\\rBrace");v("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}");v("⦵","\\minuso");v("\\darr","\\downarrow");v("\\dArr","\\Downarrow");v("\\Darr","\\Downarrow");v("\\lang","\\langle");v("\\rang","\\rangle");v("\\uarr","\\uparrow");v("\\uArr","\\Uparrow");v("\\Uarr","\\Uparrow");v("\\N","\\mathbb{N}");v("\\R","\\mathbb{R}");v("\\Z","\\mathbb{Z}");v("\\alef","\\aleph");v("\\alefsym","\\aleph");v("\\Alpha","\\mathrm{A}");v("\\Beta","\\mathrm{B}");v("\\bull","\\bullet");v("\\Chi","\\mathrm{X}");v("\\clubs","\\clubsuit");v("\\cnums","\\mathbb{C}");v("\\Complex","\\mathbb{C}");v("\\Dagger","\\ddagger");v("\\diamonds","\\diamondsuit");v("\\empty","\\emptyset");v("\\Epsilon","\\mathrm{E}");v("\\Eta","\\mathrm{H}");v("\\exist","\\exists");v("\\harr","\\leftrightarrow");v("\\hArr","\\Leftrightarrow");v("\\Harr","\\Leftrightarrow");v("\\hearts","\\heartsuit");v("\\image","\\Im");v("\\infin","\\infty");v("\\Iota","\\mathrm{I}");v("\\isin","\\in");v("\\Kappa","\\mathrm{K}");v("\\larr","\\leftarrow");v("\\lArr","\\Leftarrow");v("\\Larr","\\Leftarrow");v("\\lrarr","\\leftrightarrow");v("\\lrArr","\\Leftrightarrow");v("\\Lrarr","\\Leftrightarrow");v("\\Mu","\\mathrm{M}");v("\\natnums","\\mathbb{N}");v("\\Nu","\\mathrm{N}");v("\\Omicron","\\mathrm{O}");v("\\plusmn","\\pm");v("\\rarr","\\rightarrow");v("\\rArr","\\Rightarrow");v("\\Rarr","\\Rightarrow");v("\\real","\\Re");v("\\reals","\\mathbb{R}");v("\\Reals","\\mathbb{R}");v("\\Rho","\\mathrm{P}");v("\\sdot","\\cdot");v("\\sect","\\S");v("\\spades","\\spadesuit");v("\\sub","\\subset");v("\\sube","\\subseteq");v("\\supe","\\supseteq");v("\\Tau","\\mathrm{T}");v("\\thetasym","\\vartheta");v("\\weierp","\\wp");v("\\Zeta","\\mathrm{Z}");v("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");v("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");v("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");v("\\bra","\\mathinner{\\langle{#1}|}");v("\\ket","\\mathinner{|{#1}\\rangle}");v("\\braket","\\mathinner{\\langle{#1}\\rangle}");v("\\Bra","\\left\\langle#1\\right|");v("\\Ket","\\left|#1\\right\\rangle");var wo=e=>t=>{var r=t.consumeArg().tokens,n=t.consumeArg().tokens,i=t.consumeArg().tokens,a=t.consumeArg().tokens,l=t.macros.get("|"),s=t.macros.get("\\|");t.macros.beginGroup();var o=m=>d=>{e&&(d.macros.set("|",l),i.length&&d.macros.set("\\|",s));var p=m;if(!m&&i.length){var y=d.future();y.text==="|"&&(d.popToken(),p=!0)}return{tokens:p?i:n,numArgs:0}};t.macros.set("|",o(!1)),i.length&&t.macros.set("\\|",o(!0));var u=t.consumeArg().tokens,h=t.expandTokens([...a,...u,...r]);return t.macros.endGroup(),{tokens:h.reverse(),numArgs:0}};v("\\bra@ket",wo(!1));v("\\bra@set",wo(!0));v("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");v("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");v("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");v("\\angln","{\\angl n}");v("\\blue","\\textcolor{##6495ed}{#1}");v("\\orange","\\textcolor{##ffa500}{#1}");v("\\pink","\\textcolor{##ff00af}{#1}");v("\\red","\\textcolor{##df0030}{#1}");v("\\green","\\textcolor{##28ae7b}{#1}");v("\\gray","\\textcolor{gray}{#1}");v("\\purple","\\textcolor{##9d38bd}{#1}");v("\\blueA","\\textcolor{##ccfaff}{#1}");v("\\blueB","\\textcolor{##80f6ff}{#1}");v("\\blueC","\\textcolor{##63d9ea}{#1}");v("\\blueD","\\textcolor{##11accd}{#1}");v("\\blueE","\\textcolor{##0c7f99}{#1}");v("\\tealA","\\textcolor{##94fff5}{#1}");v("\\tealB","\\textcolor{##26edd5}{#1}");v("\\tealC","\\textcolor{##01d1c1}{#1}");v("\\tealD","\\textcolor{##01a995}{#1}");v("\\tealE","\\textcolor{##208170}{#1}");v("\\greenA","\\textcolor{##b6ffb0}{#1}");v("\\greenB","\\textcolor{##8af281}{#1}");v("\\greenC","\\textcolor{##74cf70}{#1}");v("\\greenD","\\textcolor{##1fab54}{#1}");v("\\greenE","\\textcolor{##0d923f}{#1}");v("\\goldA","\\textcolor{##ffd0a9}{#1}");v("\\goldB","\\textcolor{##ffbb71}{#1}");v("\\goldC","\\textcolor{##ff9c39}{#1}");v("\\goldD","\\textcolor{##e07d10}{#1}");v("\\goldE","\\textcolor{##a75a05}{#1}");v("\\redA","\\textcolor{##fca9a9}{#1}");v("\\redB","\\textcolor{##ff8482}{#1}");v("\\redC","\\textcolor{##f9685d}{#1}");v("\\redD","\\textcolor{##e84d39}{#1}");v("\\redE","\\textcolor{##bc2612}{#1}");v("\\maroonA","\\textcolor{##ffbde0}{#1}");v("\\maroonB","\\textcolor{##ff92c6}{#1}");v("\\maroonC","\\textcolor{##ed5fa6}{#1}");v("\\maroonD","\\textcolor{##ca337c}{#1}");v("\\maroonE","\\textcolor{##9e034e}{#1}");v("\\purpleA","\\textcolor{##ddd7ff}{#1}");v("\\purpleB","\\textcolor{##c6b9fc}{#1}");v("\\purpleC","\\textcolor{##aa87ff}{#1}");v("\\purpleD","\\textcolor{##7854ab}{#1}");v("\\purpleE","\\textcolor{##543b78}{#1}");v("\\mintA","\\textcolor{##f5f9e8}{#1}");v("\\mintB","\\textcolor{##edf2df}{#1}");v("\\mintC","\\textcolor{##e0e5cc}{#1}");v("\\grayA","\\textcolor{##f6f7f7}{#1}");v("\\grayB","\\textcolor{##f0f1f2}{#1}");v("\\grayC","\\textcolor{##e3e5e6}{#1}");v("\\grayD","\\textcolor{##d6d8da}{#1}");v("\\grayE","\\textcolor{##babec2}{#1}");v("\\grayF","\\textcolor{##888d93}{#1}");v("\\grayG","\\textcolor{##626569}{#1}");v("\\grayH","\\textcolor{##3b3e40}{#1}");v("\\grayI","\\textcolor{##21242c}{#1}");v("\\kaBlue","\\textcolor{##314453}{#1}");v("\\kaGreen","\\textcolor{##71B307}{#1}");var ko={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class k5{constructor(t,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(t),this.macros=new b5(x5,r.macros),this.mode=n,this.stack=[]}feed(t){this.lexer=new al(t,this.settings)}switchMode(t){this.mode=t}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(t){this.stack.push(t)}pushTokens(t){this.stack.push(...t)}scanArgument(t){var r,n,i;if(t){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:i,end:n}=this.consumeArg(["]"])}else({tokens:i,start:r,end:n}=this.consumeArg());return this.pushToken(new We("EOF",n.loc)),this.pushTokens(i),new We("",He.range(r,n))}consumeSpaces(){for(;;){var t=this.future();if(t.text===" ")this.stack.pop();else break}}consumeArg(t){var r=[],n=t&&t.length>0;n||this.consumeSpaces();var i=this.future(),a,l=0,s=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++l;else if(a.text==="}"){if(--l,l===-1)throw new L("Extra }",a)}else if(a.text==="EOF")throw new L("Unexpected end of input in a macro argument, expected '"+(t&&n?t[s]:"}")+"'",a);if(t&&n)if((l===0||l===1&&t[s]==="{")&&a.text===t[s]){if(++s,s===t.length){r.splice(-s,s);break}}else s=0}while(l!==0||n);return i.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:i,end:a}}consumeArgs(t,r){if(r){if(r.length!==t+1)throw new L("The length of delimiters doesn't match the number of args!");for(var n=r[0],i=0;ithis.settings.maxExpand)throw new L("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(t){var r=this.popToken(),n=r.text,i=r.noexpand?null:this._getExpansion(n);if(i==null||t&&i.unexpandable){if(t&&i==null&&n[0]==="\\"&&!this.isDefined(n))throw new L("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var a=i.tokens,l=this.consumeArgs(i.numArgs,i.delimiters);if(i.numArgs){a=a.slice();for(var s=a.length-1;s>=0;--s){var o=a[s];if(o.text==="#"){if(s===0)throw new L("Incomplete placeholder at end of macro body",o);if(o=a[--s],o.text==="#")a.splice(s+1,1);else if(/^[1-9]$/.test(o.text))a.splice(s,2,...l[+o.text-1]);else throw new L("Not a valid argument number",o)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var t=this.stack.pop();return t.treatAsRelax&&(t.text="\\relax"),t}}expandMacro(t){return this.macros.has(t)?this.expandTokens([new We(t)]):void 0}expandTokens(t){var r=[],n=this.stack.length;for(this.pushTokens(t);this.stack.length>n;)if(this.expandOnce(!0)===!1){var i=this.stack.pop();i.treatAsRelax&&(i.noexpand=!1,i.treatAsRelax=!1),r.push(i)}return this.countExpansion(r.length),r}expandMacroAsText(t){var r=this.expandMacro(t);return r&&r.map(n=>n.text).join("")}_getExpansion(t){var r=this.macros.get(t);if(r==null)return r;if(t.length===1){var n=this.lexer.catcodes[t];if(n!=null&&n!==13)return}var i=typeof r=="function"?r(this):r;if(typeof i=="string"){var a=0;if(i.includes("#"))for(var l=i.replace(/##/g,"");l.includes("#"+(a+1));)++a;for(var s=new al(i,this.settings),o=[],u=s.lex();u.text!=="EOF";)o.push(u),u=s.lex();o.reverse();var h={tokens:o,numArgs:a};return h}return i}isDefined(t){return this.macros.has(t)||Ct.hasOwnProperty(t)||de.math.hasOwnProperty(t)||de.text.hasOwnProperty(t)||ko.hasOwnProperty(t)}isExpandable(t){var r=this.macros.get(t);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:Ct.hasOwnProperty(t)&&!Ct[t].primitive}}var ol=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,Qr=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g",ʰ:"h","ⁱ":"i",ʲ:"j","ᵏ":"k",ˡ:"l","ᵐ":"m",ⁿ:"n","ᵒ":"o","ᵖ":"p",ʳ:"r",ˢ:"s","ᵗ":"t","ᵘ":"u","ᵛ":"v",ʷ:"w",ˣ:"x",ʸ:"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),f0={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},ul={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",ḉ:"ḉ",č:"č",ĉ:"ĉ",ċ:"ċ",ç:"ç",ď:"ď",ḋ:"ḋ",ḑ:"ḑ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ḝ:"ḝ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ȩ:"ȩ",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ģ:"ģ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",ḩ:"ḩ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ķ:"ķ",ĺ:"ĺ",ľ:"ľ",ļ:"ļ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ņ:"ņ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ŗ:"ŗ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ş:"ş",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ţ:"ţ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Ḉ:"Ḉ",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ç:"Ç",Ď:"Ď",Ḋ:"Ḋ",Ḑ:"Ḑ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ḝ:"Ḝ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ȩ:"Ȩ",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ģ:"Ģ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Ḩ:"Ḩ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ķ:"Ķ",Ĺ:"Ĺ",Ľ:"Ľ",Ļ:"Ļ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ņ:"Ņ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ŗ:"Ŗ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ş:"Ş",Ť:"Ť",Ṫ:"Ṫ",Ţ:"Ţ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"};class Dn{constructor(t,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new k5(t,r,this.mode),this.settings=r,this.leftrightDepth=0,this.nextToken=null}expect(t,r){if(r===void 0&&(r=!0),this.fetch().text!==t)throw new L("Expected '"+t+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(t){this.mode=t,this.gullet.switchMode(t)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var t=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),t}finally{this.gullet.endGroups()}}subparse(t){var r=this.nextToken;this.consume(),this.gullet.pushToken(new We("}")),this.gullet.pushTokens(t);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(t,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var i=this.fetch();if(Dn.endOfExpression.has(i.text)||r&&i.text===r||t&&Ct[i.text]&&Ct[i.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;n.push(a)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(t){for(var r=-1,n,i=0;i=128)this.settings.strict&&(Ms(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',t):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),t)),l={type:"textord",mode:"text",loc:He.range(t),text:r};else return null;if(this.consume(),a)for(var h=0;h=o&&p[1]===u&&p[3].trim()===""){m=d;break}}if(m!==-1)r.push([h,m]),n=m+1;else{const p=l[3].trim().split(/\s+/,1)[0]||"",y=fn(p)!==null,w=n+1C.trim()!=="");if(y&&w){r.push([h,t.length-1]);break}n++}}function i(l){return r.some(([s,o])=>l>=s&&l<=o)}return t.map((l,s)=>{if(i(s))return l;let o=l.replace(/`{3,}/g,"");return o=o.replace(/``\s*``/g,""),o=o.replace(/``(?=[.,;:!?\s]|$)/g,""),o}).join(` +`)}function P5(e){const t=e.split(` +`),r=[];let n=0;for(;n=o&&d[1]===a&&d[3].trim()===""){h=m;break}}if(h!==-1){const m=t.slice(n+1,h);if(!m.some(C=>C.trim()!=="")){n=h+1;continue}const p=u.split(/\s+/,1)[0]||"";if(p.toLowerCase()==="math"){r.push(`${a}\`\`\`math`);for(const C of m)r.push(C);r.push(`${a}\`\`\``),n=h+1;continue}if(u&&hl(u)){for(const C of m)r.push(C);n=h+1;continue}const y=u?fn(p):null,w=y||"";r.push(`${a}\`\`\`${w}`);for(const C of m)r.push(C);r.push(`${a}\`\`\``),n=h+1}else{const m=t.slice(n+1);if(!m.some(w=>w.trim()!=="")){n++;continue}const p=u.split(/\s+/,1)[0]||"",y=fn(p);if(y||p.toLowerCase()==="math"){const w=p.toLowerCase()==="math"?"math":y;r.push(`${a}\`\`\`${w}`);for(const C of m)r.push(C)}else if(u&&hl(u))for(const w of m)r.push(w);else{r.push(`${a}\`\`\``);for(const w of m)r.push(w)}break}}return r.join(` +`)}function O5(e){return e.replace(/(^|\n)[ \t]*(?:`{3,}|~{3,})[^\n]*\n[ \t]*\n?[ \t]*(?:`{3,}|~{3,})[ \t]*(?=\n|$)/g,"$1")}function q5(e){return e.replace(B5,"$1\\$")}function H5(e){let t=e;return t=t.replace(R5,(r,n)=>`$$${n}$$`),t=t.replace(F5,(r,n)=>`$${n}$`),t}function X5(e){const t=N5(e),r=P5(t);return O5(r).split(I5).map((i,a)=>a%2===1||!i.trim()?i:i.split(D5).map((l,s)=>s%2===1?l:H5(q5(l))).join("")).join("")}export{V5 as M,W5 as S,U5 as a,_5 as b,X5 as p,G5 as r}; diff --git a/frontends/desktop/dist/assets/markdown-preprocess-Cp579UoJ.css b/frontends/desktop/dist/assets/markdown-preprocess-Cp579UoJ.css new file mode 100644 index 000000000..08c8a35d0 --- /dev/null +++ b/frontends/desktop/dist/assets/markdown-preprocess-Cp579UoJ.css @@ -0,0 +1 @@ +@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2) format("woff2"),url(/assets/KaTeX_AMS-Regular-DMm9YOAa.woff) format("woff"),url(/assets/KaTeX_AMS-Regular-DRggAlZN.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2) format("woff2"),url(/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff) format("woff"),url(/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2) format("woff2"),url(/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff) format("woff"),url(/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2) format("woff2"),url(/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff) format("woff"),url(/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2) format("woff2"),url(/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff) format("woff"),url(/assets/KaTeX_Fraktur-Regular-CB_wures.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Main-Bold-Cx986IdX.woff2) format("woff2"),url(/assets/KaTeX_Main-Bold-Jm3AIy58.woff) format("woff"),url(/assets/KaTeX_Main-Bold-waoOVXN0.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2) format("woff2"),url(/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff) format("woff"),url(/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2) format("woff2"),url(/assets/KaTeX_Main-Italic-BMLOBm91.woff) format("woff"),url(/assets/KaTeX_Main-Italic-3WenGoN9.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Main-Regular-B22Nviop.woff2) format("woff2"),url(/assets/KaTeX_Main-Regular-Dr94JaBh.woff) format("woff"),url(/assets/KaTeX_Main-Regular-ypZvNtVU.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2) format("woff2"),url(/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff) format("woff"),url(/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Math-Italic-t53AETM-.woff2) format("woff2"),url(/assets/KaTeX_Math-Italic-DA0__PXp.woff) format("woff"),url(/assets/KaTeX_Math-Italic-flOr_0UB.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff) format("woff"),url(/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff) format("woff"),url(/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff) format("woff"),url(/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Script-Regular-D3wIWfF6.woff2) format("woff2"),url(/assets/KaTeX_Script-Regular-D5yQViql.woff) format("woff"),url(/assets/KaTeX_Script-Regular-C5JkGWo-.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2) format("woff2"),url(/assets/KaTeX_Size1-Regular-C195tn64.woff) format("woff"),url(/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2) format("woff2"),url(/assets/KaTeX_Size2-Regular-oD1tc_U0.woff) format("woff"),url(/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/KaTeX_Size3-Regular-CTq5MqoE.woff) format("woff"),url(/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2) format("woff2"),url(/assets/KaTeX_Size4-Regular-BF-4gkZK.woff) format("woff"),url(/assets/KaTeX_Size4-Regular-DWFBv043.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2) format("woff2"),url(/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff) format("woff"),url(/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf) format("truetype")}.katex{font: 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;position:relative;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.17.0"}.katex .katex-mathml{border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .smash{display:inline;line-height:0}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} diff --git a/frontends/desktop/dist/assets/setup-BtYdaXRD.js b/frontends/desktop/dist/assets/setup-BtYdaXRD.js new file mode 100644 index 000000000..e5be292c3 --- /dev/null +++ b/frontends/desktop/dist/assets/setup-BtYdaXRD.js @@ -0,0 +1,2 @@ +import{c as te,b as c,an as G,ao as oe,aj as r,T as f,ap as I,av as re,at as ne,aq as ae,as as ie,ar as ce}from"./tauri-compat-tfiFK9EG.js";import{B as F}from"./index-DpGuh58E.js";import{B as L}from"./index-Bpi3BHKj.js";import{I as se}from"./IconFile-CgfQSwGI.js";function le(t){return c.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},t),c.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2 5a3 3 0 0 1 3-3h3.3a2 2 0 0 1 1.25.44l1.13.9a3 3 0 0 0 1.87.66H18c2 0 3 2 3 4H7.53A2 2 0 0 0 5.6 9.48L2.57 20.76C2.21 20.26 2 19.66 2 19V5Zm20.17 5H9.5a2 2 0 0 0-1.92 1.44l-2.7 9.28A1 1 0 0 0 5.82 22H18.5a2 2 0 0 0 1.92-1.44l2.7-9.28a1 1 0 0 0-.95-1.28Z",fill:"currentColor"}))}const pe=te(le,"folder_open");function C(){return window.__TAURI__}function de(t,e){return Number.isFinite(e.seq)?e.seq>t:!0}function O(t,e,n,i="prepare_failed"){const u=e==null?"":oe(e);return{seq:n,mode:"cold_start",phase:"failed",stage:null,progress:0,failure:{code:u?i:"unknown",detail:u},diagnostics:{buildId:"",platform:navigator.platform||"",projectDir:t[1]||"",pythonPath:t[0]||"",portState:"unknown",bridgeIdentity:null,recentLogs:[]}}}async function ue(t,e=0){const n=await t("get_config").catch(()=>["",""]);try{return{config:n,mode:"snapshot",snapshot:await t("get_bootstrap_snapshot")}}catch(i){if(!G(i,"get_bootstrap_snapshot"))throw i;const u=await t("get_prepare_error").catch(()=>null);return{config:n,mode:"legacy",snapshot:O(n,u,e)}}}async function he(t,e,n){if(n==="snapshot")try{return await t("retry_bootstrap",e),{mode:"snapshot"}}catch(i){if(!G(i,"retry_bootstrap"))return{mode:"snapshot",error:i}}try{return await t("start_bridge_with_config",e),{mode:"legacy"}}catch(i){return{mode:"legacy",error:i}}}async function ye(t,e,n){const i=await t("pick_directory",{title:n});if(!i)return null;const u=await t("discover_python_for_project",{projectDir:i,currentPython:e||null}).catch(()=>e);return{projectDir:i,pythonPath:u||""}}async function ge(t,e){return t("pick_python_interpreter",{title:e})}const H={config_unresolved:{zh:{title:"未找到应用文件",description:"请选择应用文件夹后继续。"},en:{title:"Application files not found",description:"Choose the application folder to continue."}},prepare_failed:{zh:{title:"运行环境尚未准备完成",description:"请检查所选应用文件夹和 Python 环境,然后继续启动。"},en:{title:"Environment setup is incomplete",description:"Check the application folder and Python environment, then continue startup."}},spawn_failed:{zh:{title:"本地连接未能启动",description:"请选择可用的应用文件夹和 Python 环境后继续。"},en:{title:"Local connection could not start",description:"Choose a usable application folder and Python environment to continue."}},bridge_shutdown_refused:{zh:{title:"本地连接暂时无法安全重启",description:"请等待当前操作完成后重试。"},en:{title:"Local connection cannot restart safely",description:"Wait for the current operation to finish, then retry."}},port_conflict:{zh:{title:"本地连接被占用",description:"另一个应用正在使用本地连接。关闭相关应用后继续启动。"},en:{title:"Local connection is in use",description:"Another app is using the local connection. Close it, then continue startup."}},service_timeout:{zh:{title:"本地连接启动时间过长",description:"请检查所选位置;诊断信息中包含最近的启动记录。"},en:{title:"Local connection is taking too long",description:"Check the selected locations. Diagnostics contain the latest startup records."}},service_exited:{zh:{title:"本地连接意外停止",description:"诊断信息中包含停止状态和最近的启动记录。"},en:{title:"Local connection stopped unexpectedly",description:"Diagnostics contain the stop status and latest startup records."}},ui_navigation_failed:{zh:{title:"主界面未能打开",description:"本地连接已经就绪,但界面加载失败。诊断信息中包含详细原因。"},en:{title:"Main window could not open",description:"The local connection is ready, but the interface failed to load. Diagnostics contain details."}},unknown:{zh:{title:"启动尚未完成",description:"请检查所选位置;需要协助时可复制诊断信息。"},en:{title:"Startup is not complete",description:"Check the selected locations. Copy diagnostics if you need support."}}},fe={zh:{pageTitle:"完成启动设置",intro:"选择应用运行所需的位置。你的记忆、会话和设置不会受到影响。",projectLabel:"应用文件夹",projectHint:"选择此前用于运行桌面版的应用文件夹。",projectPickerTitle:"选择应用文件夹",chooseProject:"选择文件夹",changeProject:"重新选择",projectEmpty:"尚未选择应用文件夹",pythonLabel:"Python 环境",pythonHint:"应用会自动选择可用环境;如有需要,可以重新选择。",pythonPickerTitle:"选择 Python 环境",choosePython:"选择环境",changePython:"重新选择",pythonEmpty:"选择应用文件夹后自动识别",pickerError:"无法打开或读取所选位置,请查看诊断信息。",retry:"继续启动",retrying:"正在启动…",diagnostics:"诊断信息",copy:"复制诊断信息",copied:"已复制,可发送给技术支持。",selectCopy:"请手动复制已选中的诊断信息。",privacy:"诊断信息包含本机路径和错误日志,不包含 API Key、会话或记忆内容。",helpFeedback:"帮助与反馈",contact:"如果仍无法完成启动,可添加微信联系:"},en:{pageTitle:"Complete startup setup",intro:"Choose the locations the app needs to run. Your memory, sessions, and settings will not be affected.",projectLabel:"Application folder",projectHint:"Choose the application folder previously used to run the desktop app.",projectPickerTitle:"Choose the application folder",chooseProject:"Choose folder",changeProject:"Choose again",projectEmpty:"No application folder selected",pythonLabel:"Python environment",pythonHint:"The app selects an available environment automatically. You can choose another if needed.",pythonPickerTitle:"Choose a Python environment",choosePython:"Choose environment",changePython:"Choose again",pythonEmpty:"Detected after you choose the application folder",pickerError:"The selected location could not be opened or read. Check diagnostics for details.",retry:"Continue startup",retrying:"Starting…",diagnostics:"Diagnostic details",copy:"Copy diagnostics",copied:"Copied. You can send it to technical support.",selectCopy:"Copy the selected diagnostics manually.",privacy:"Diagnostics contain local paths and error logs. They do not contain API keys, sessions, or memory content.",helpFeedback:"Help & Feedback",contact:"If you still cannot complete startup, contact us on WeChat:"}};function V(){return(navigator.language||"").toLowerCase().startsWith("zh")?"zh":"en"}function me(t){return fe[t]}function je(t,e){const n=t&&t in H?t:"unknown";return H[n][e]}function be(t){var u,l;const e=t==null?void 0:t.diagnostics,n=Array.isArray(e==null?void 0:e.recentLogs)?e.recentLogs:[];let i="";try{i=sessionStorage.getItem("ga-setup-fallback-reason")||""}catch{i=""}return["GenericAgent Desktop startup diagnostics",`time: ${new Date().toISOString()}`,`setup_guard_reason: ${i}`,`build_id: ${(e==null?void 0:e.buildId)||""}`,`platform: ${(e==null?void 0:e.platform)||""}`,`mode: ${(t==null?void 0:t.mode)||""}`,`phase: ${(t==null?void 0:t.phase)||""}`,`failure_code: ${((u=t==null?void 0:t.failure)==null?void 0:u.code)||""}`,`project_dir: ${(e==null?void 0:e.projectDir)||""}`,`python_path: ${(e==null?void 0:e.pythonPath)||""}`,`port_state: ${(e==null?void 0:e.portState)||"unknown"}`,`bridge_identity: ${(e==null?void 0:e.bridgeIdentity)||""}`,`error: ${((l=t==null?void 0:t.failure)==null?void 0:l.detail)||""}`,"recent_logs:",...n].join(` +`)}const B={projectDir:"",pythonPath:""};function q({label:t,hint:e,value:n,emptyText:i,buttonText:u,buttonLabel:l,loading:k,disabled:m,icon:j,onChoose:P}){return r.jsxs("section",{className:"ga-setup-location","aria-label":t,children:[r.jsxs("div",{className:"ga-setup-location-header",children:[r.jsx(f.Text,{strong:!0,children:t}),r.jsx(L,{size:"small",type:"tertiary",theme:"light",icon:j,loading:k,disabled:m,"aria-label":l,onClick:P,children:u})]}),r.jsx("div",{className:`ga-setup-path${n?"":" ga-setup-path--empty"}`,role:"textbox","aria-readonly":"true","aria-label":t,tabIndex:0,children:n?r.jsx("code",{children:n}):r.jsx("span",{children:i})}),r.jsx(f.Paragraph,{type:"tertiary",size:"small",className:"ga-setup-location-hint",children:e})]})}function S(t,e){return{seq:e,mode:"cold_start",phase:"failed",stage:null,progress:0,failure:{code:"unknown",detail:String(t)},diagnostics:{buildId:"",platform:navigator.platform||"",projectDir:"",pythonPath:"",portState:"unknown",bridgeIdentity:null,recentLogs:[]}}}function Pe(){var M;const t=V(),e=me(t),n=c.useRef(B),[i,u]=c.useState(B),[l,k]=c.useState(null),[m,j]=c.useState(!1),[P,N]=c.useState(!1),[T,z]=c.useState(!1),[R,b]=c.useState(""),[W,E]=c.useState(""),g=c.useRef(-1),w=c.useRef(null),D=c.useRef("snapshot"),h=c.useCallback(o=>{n.current=o,u(o)},[]),y=c.useCallback(o=>{var d,s,_,v;const a=w.current;if(!de(g.current,o))return;g.current=Number.isFinite(o.seq)?o.seq:g.current+1,w.current=o,k(o),o.phase==="failed"&&j(!1);const p={};(d=o.diagnostics)!=null&&d.projectDir&&(!n.current.projectDir||((s=a==null?void 0:a.diagnostics)==null?void 0:s.projectDir)===n.current.projectDir)&&(p.projectDir=o.diagnostics.projectDir),(_=o.diagnostics)!=null&&_.pythonPath&&(!n.current.pythonPath||((v=a==null?void 0:a.diagnostics)==null?void 0:v.pythonPath)===n.current.pythonPath)&&(p.pythonPath=o.diagnostics.pythonPath),Object.keys(p).length&&h({...n.current,...p})},[h]);c.useEffect(()=>{var o;(o=window.__GA_SETUP_MARK_READY__)==null||o.call(window)},[]),c.useEffect(()=>{const o=C();if(!(o!=null&&o.core.invoke)){y(S("Tauri bootstrap API is unavailable",0));return}let a=!0,p;return(async()=>{var v;if((v=o.event)!=null&&v.listen)try{const x=await o.event.listen("bootstrap",ee=>{a&&y(ee.payload)});if(!a){x();return}p=x}catch(x){console.warn("[setup] bootstrap events unavailable; using command compatibility mode",x)}const d=await ue(o.core.invoke,g.current+1);if(!a)return;D.current=d.mode;const s=d.config,_={pythonPath:(s==null?void 0:s[0])||"",projectDir:(s==null?void 0:s[1])||""};h({pythonPath:n.current.pythonPath||_.pythonPath,projectDir:n.current.projectDir||_.projectDir}),y(d.snapshot)})().catch(d=>{a&&y(S(d,g.current+1))}),()=>{a=!1,p==null||p()}},[h,y]);const $=c.useMemo(()=>{var o;return je((o=l==null?void 0:l.failure)==null?void 0:o.code,t)},[t,(M=l==null?void 0:l.failure)==null?void 0:M.code]),A=c.useMemo(()=>be(l),[l]),Z=c.useCallback(async()=>{const o=C();if(!(o!=null&&o.core.invoke)){b(e.pickerError);return}N(!0),b("");try{const a=await ye(o.core.invoke,n.current.pythonPath,e.projectPickerTitle);a&&h(a)}catch(a){console.error("[setup] application folder selection failed",a),b(e.pickerError)}finally{N(!1)}},[h,e]),J=c.useCallback(async()=>{const o=C();if(!(o!=null&&o.core.invoke)){b(e.pickerError);return}z(!0),b("");try{const a=await ge(o.core.invoke,e.pythonPickerTitle);a&&h({...n.current,pythonPath:a})}catch(a){console.error("[setup] Python environment selection failed",a),b(e.pickerError)}finally{z(!1)}},[h,e]),Q=c.useCallback(async()=>{const o=n.current.projectDir.trim(),a=n.current.pythonPath.trim();if(h({projectDir:o,pythonPath:a}),E(""),!o){const s=w.current??S("",g.current+1);y({...s,seq:g.current+1,phase:"failed",failure:{code:"config_unresolved",detail:""}});return}j(!0);const p=C();if(!(p!=null&&p.core.invoke)){y(S("Tauri bootstrap API is unavailable",g.current+1)),j(!1);return}const d=await he(p.core.invoke,{pythonPath:a,projectDir:o},D.current);if(D.current=d.mode,d.error){if(d.mode==="legacy")y(O([a,o],d.error,g.current+1,"spawn_failed"));else{const s=await p.core.invoke("get_bootstrap_snapshot").catch(()=>w.current);s&&y(s)}j(!1)}},[h,y]),X=c.useCallback(async()=>{var o;try{if(!((o=navigator.clipboard)!=null&&o.writeText))throw new Error("clipboard unavailable");await navigator.clipboard.writeText(A),E(e.copied)}catch{const p=document.getElementById("diagnostics");if(p){const d=document.createRange();d.selectNodeContents(p);const s=window.getSelection();s==null||s.removeAllRanges(),s==null||s.addRange(d),p.focus()}E(e.selectCopy)}},[e,A]);return r.jsx("main",{className:"ga-setup-page",children:r.jsxs("section",{className:"ga-setup-panel","aria-labelledby":"ga-setup-title",children:[r.jsxs("header",{className:"ga-setup-header",children:[r.jsx(f.Title,{id:"ga-setup-title",heading:3,children:e.pageTitle}),r.jsx(f.Paragraph,{type:"tertiary",children:e.intro})]}),(l==null?void 0:l.failure)&&r.jsx(F,{className:"ga-setup-banner",type:"danger",fullMode:!1,bordered:!0,title:$.title,description:$.description,closeIcon:null}),l&&!l.failure&&m&&r.jsx(F,{className:"ga-setup-banner",type:"info",fullMode:!1,bordered:!0,title:e.retrying,description:l.stage||l.phase,closeIcon:null}),r.jsxs("div",{className:"ga-setup-form",children:[r.jsx(q,{label:e.projectLabel,hint:e.projectHint,value:i.projectDir,emptyText:e.projectEmpty,buttonText:i.projectDir?e.changeProject:e.chooseProject,buttonLabel:e.projectPickerTitle,loading:P,disabled:m||T,icon:r.jsx(pe,{}),onChoose:()=>void Z()}),r.jsx(q,{label:e.pythonLabel,hint:e.pythonHint,value:i.pythonPath,emptyText:e.pythonEmpty,buttonText:i.pythonPath?e.changePython:e.choosePython,buttonLabel:e.pythonPickerTitle,loading:T,disabled:m||P,icon:r.jsx(se,{}),onChoose:()=>void J()}),R&&r.jsx(f.Text,{className:"ga-setup-picker-status",type:"danger",size:"small",role:"status",children:R}),r.jsx(L,{type:"primary",theme:"solid",block:!0,loading:m,disabled:P||T,className:"ga-setup-retry",onClick:()=>void Q(),children:m?e.retrying:e.retry})]}),r.jsxs(I,{className:"ga-setup-diagnostics",accordion:!0,children:[r.jsxs(I.Panel,{itemKey:"diagnostics",header:e.diagnostics,children:[r.jsxs("div",{className:"ga-setup-diagnostics-actions",children:[r.jsx(L,{size:"small",theme:"light",icon:r.jsx(re,{}),onClick:()=>void X(),children:e.copy}),r.jsx(f.Text,{type:"tertiary",size:"small","aria-live":"polite",children:W})]}),r.jsx("pre",{id:"diagnostics",tabIndex:0,children:A}),r.jsx(f.Paragraph,{type:"tertiary",size:"small",className:"ga-setup-privacy",children:e.privacy})]}),r.jsxs(I.Panel,{itemKey:"help-feedback",header:e.helpFeedback,children:[r.jsx(f.Paragraph,{type:"tertiary",size:"small",className:"ga-setup-contact-copy",children:e.contact}),r.jsxs("div",{className:"ga-setup-contact-ids",children:[r.jsx("code",{children:"RoundSquisheen"}),r.jsx("code",{children:"_Ashes_in_the_Snow_"})]})]})]})]})})}function U(t){t.matches?(document.documentElement.dataset.appearance="dark",document.body.setAttribute("theme-mode","dark")):(document.documentElement.dataset.appearance="light",document.body.removeAttribute("theme-mode"))}var Y,K;try{const t=window.matchMedia("(prefers-color-scheme: dark)");U(t),(Y=t.addEventListener)==null||Y.call(t,"change",()=>U(t));const e=document.getElementById("setup-root");if(!e)throw new Error("Setup root is missing");ne.createRoot(e).render(r.jsx(c.StrictMode,{children:r.jsx(ae,{locale:V()==="zh"?ie:ce,children:r.jsx(Pe,{})})}))}catch(t){console.error("[setup] failed to mount recovery UI",t),(K=window.__GA_SETUP_FALLBACK__)==null||K.call(window,"setup_mount_failed")} diff --git a/frontends/desktop/dist/assets/setup-D74O8rBf.css b/frontends/desktop/dist/assets/setup-D74O8rBf.css new file mode 100644 index 000000000..094c906e5 --- /dev/null +++ b/frontends/desktop/dist/assets/setup-D74O8rBf.css @@ -0,0 +1 @@ +:root{font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,Microsoft YaHei UI,Helvetica Neue,sans-serif;background:var(--semi-color-bg-0);color:var(--semi-color-text-0)}*{box-sizing:border-box}html,body,#setup-root{width:100%;min-height:100%;margin:0}body{background:var(--semi-color-bg-0)}.ga-setup-page{min-height:100vh;display:flex;justify-content:center;padding:34px 40px 28px;background:radial-gradient(circle at 50% 0,color-mix(in srgb,var(--semi-color-primary) 7%,transparent),transparent 34%),var(--semi-color-bg-0)}.ga-setup-panel{width:min(100%,500px)}.ga-setup-header .semi-typography{margin:0}.ga-setup-header .semi-typography-paragraph{margin-top:8px;line-height:1.6}.ga-setup-banner{margin:20px 0;border-radius:var(--semi-border-radius-medium)}.ga-setup-form{margin-top:20px}.ga-setup-location{margin-bottom:18px}.ga-setup-location-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:7px}.ga-setup-path{width:100%;min-height:42px;padding:10px 12px;border:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-medium);outline:none;background:var(--semi-color-fill-0);color:var(--semi-color-text-0);white-space:normal;overflow-wrap:anywhere;word-break:break-word;-webkit-user-select:text;user-select:text}.ga-setup-path:focus-visible{border-color:var(--semi-color-primary);box-shadow:0 0 0 2px var(--semi-color-primary-light-default)}.ga-setup-path code{font:13px/1.55 ui-monospace,SFMono-Regular,Consolas,monospace}.ga-setup-path--empty{color:var(--semi-color-text-2);font-size:13px}.ga-setup-location-hint.semi-typography{margin:6px 0 0;line-height:1.45}.ga-setup-picker-status{display:block;margin:-4px 0 12px}.ga-setup-retry{margin-top:2px}.ga-setup-diagnostics{margin-top:20px;border-top:1px solid var(--semi-color-border)}.ga-setup-diagnostics .semi-collapse-header{padding-inline:4px;color:var(--semi-color-text-2)}.ga-setup-diagnostics-actions{display:flex;align-items:center;gap:10px;margin-bottom:10px}.ga-setup-diagnostics pre{max-height:200px;margin:0;padding:12px;overflow:auto;border:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-medium);outline:none;background:var(--semi-color-fill-0);color:var(--semi-color-text-1);font:11px/1.55 ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere;-webkit-user-select:text;user-select:text}.ga-setup-diagnostics pre:focus-visible{border-color:var(--semi-color-primary);box-shadow:0 0 0 2px var(--semi-color-primary-light-default)}.ga-setup-privacy.semi-typography{margin:9px 0 0;line-height:1.45}.ga-setup-contact-copy.semi-typography{margin:0 0 10px;line-height:1.5}.ga-setup-contact-ids{display:flex;flex-wrap:wrap;gap:8px}.ga-setup-contact-ids code{padding:6px 9px;border-radius:var(--semi-border-radius-medium);background:var(--semi-color-fill-0);color:var(--semi-color-text-0);font:12px/1.4 ui-monospace,SFMono-Regular,Consolas,monospace;overflow-wrap:anywhere;-webkit-user-select:text;user-select:text} diff --git a/frontends/desktop/dist/assets/tauri-compat-BTcpEvqB.css b/frontends/desktop/dist/assets/tauri-compat-BTcpEvqB.css new file mode 100644 index 000000000..9329dbdf2 --- /dev/null +++ b/frontends/desktop/dist/assets/tauri-compat-BTcpEvqB.css @@ -0,0 +1 @@ +.semi-portal-inner{position:absolute;background-color:#0000;min-width:max-content}.semi-ai-chat-dialogue{display:flex;flex-direction:column;height:100%}.semi-ai-chat-dialogue-list{flex:1 1;position:relative;overflow-y:scroll}.semi-ai-chat-dialogue-list-scroll-hidden::-webkit-scrollbar{display:none}.semi-ai-chat-dialogue-wrapper{box-sizing:border-box;display:flex;flex-direction:row;align-items:center;width:100%;flex-wrap:nowrap;padding:8px 16px;margin-top:2px;column-gap:16px}.semi-ai-chat-dialogue-wrapper-selected{background-color:var(--semi-color-fill-0);border-radius:16px}.semi-ai-chat-dialogue-wrapper .semi-ai-chat-dialogue-container{flex:1 1 auto;display:flex;flex-direction:row;column-gap:12px}.semi-ai-chat-dialogue-wrapper .semi-ai-chat-dialogue-container-right{flex-direction:row-reverse}.semi-ai-chat-dialogue-wrapper .semi-ai-chat-dialogue-container-right .semi-ai-chat-dialogue-inner{align-items:flex-end}.semi-ai-chat-dialogue-wrapper .semi-ai-chat-dialogue-container-right .semi-ai-chat-dialogue-content-no-bubble,.semi-ai-chat-dialogue-wrapper .semi-ai-chat-dialogue-container-right .semi-ai-chat-dialogue-content-user,.semi-ai-chat-dialogue-wrapper .semi-ai-chat-dialogue-container-right .semi-ai-chat-dialogue-content-custom-renderer{margin-left:auto}.semi-ai-chat-dialogue-wrapper .semi-ai-chat-dialogue-container-right .semi-ai-chat-dialogue-content-inner{text-align:right}.semi-ai-chat-dialogue-wrapper .semi-ai-chat-dialogue-container-right .semi-ai-chat-dialogue-content-inner .semi-markdownRender{text-align:left}.semi-ai-chat-dialogue-wrapper:hover .semi-ai-chat-dialogue-action:not(.semi-ai-chat-dialogue-action-hidden){visibility:visible}.semi-ai-chat-dialogue-backBottom{position:relative;z-index:1}.semi-ai-chat-dialogue-backBottom-button{width:42px;height:42px;border-radius:50%}.semi-ai-chat-dialogue-backBottom .semi-button{position:absolute;bottom:10px;left:50%;transform:translate(-50%);display:flex;justify-content:center;align-items:center}.semi-ai-chat-dialogue-title{line-height:20px;font-size:16px;font-weight:400}.semi-ai-chat-dialogue-inner{width:100%;display:flex;flex-direction:column}.semi-ai-chat-dialogue-avatar{flex-shrink:0;width:24px;height:24px}.semi-ai-chat-dialogue-avatar-hidden{visibility:hidden}.semi-ai-chat-dialogue-content{max-width:100%;font-size:14px}.semi-ai-chat-dialogue-content pre{background-color:#0000}.semi-ai-chat-dialogue-content-editing{width:100%}.semi-ai-chat-dialogue-content-wrapper{display:flex;align-items:end}.semi-ai-chat-dialogue-content-inner{margin-left:auto;width:100%}.semi-ai-chat-dialogue-content-failed{color:var(--semi-color-danger);margin-right:8px}.semi-ai-chat-dialogue-content-user{display:flex}.semi-ai-chat-dialogue-content-user:hover .semi-ai-chat-dialogue-content-icon-reference{padding:0 8px;cursor:pointer;display:flex;justify-content:center;align-items:center}.semi-ai-chat-dialogue-content-bubble,.semi-ai-chat-dialogue-content-userBubble{margin-top:8px;padding:12px 16px;border-radius:var(--semi-border-radius-large);background-color:var(--semi-color-fill-0);max-width:100%;box-sizing:border-box;width:fit-content}.semi-ai-chat-dialogue-content-no-bubble{margin-top:8px;width:fit-content}.semi-ai-chat-dialogue-content-loading{display:flex;align-items:center;margin-top:8px}.semi-ai-chat-dialogue-content-loading>span:nth-child(1){animation-delay:-.2s;background-color:#5338ff}.semi-ai-chat-dialogue-content-loading>span:nth-child(2){animation-delay:-.1s;background-color:#b030f0}.semi-ai-chat-dialogue-content-loading>span:nth-child(3){animation-delay:0ms;background-color:#e72dff}.semi-ai-chat-dialogue-content-loading-item{border-radius:var(--semi-border-radius-circle);height:3px;width:3px;margin:1px;overflow:visible;position:relative;animation:semi-ai-chat-dialogue-loading-bounce 1s infinite ease}.semi-ai-chat-dialogue-content-loading-text{margin-left:8px;color:var(--semi-color-text-3);font-size:14px}.semi-ai-chat-dialogue-content-icon-reference{display:none}.semi-ai-chat-dialogue-content-img{margin-top:8px;border-radius:var(--semi-border-radius-medium)}.semi-ai-chat-dialogue-content-img img{width:256px;height:256px;object-fit:cover}.semi-ai-chat-dialogue-content-img-list{display:inline-flex;flex-direction:column;margin-right:4px}.semi-ai-chat-dialogue-content-img-list img{width:128px;height:128px;object-fit:cover}.semi-ai-chat-dialogue-content-img-last{margin-right:0}.semi-ai-chat-dialogue-content-file{display:inline-flex;flex-direction:row;align-items:center;height:36px;width:224px;column-gap:8px;padding:8px;margin-top:8px;margin-right:8px;border-radius:var(--semi-border-radius-medium);background:var(--semi-color-fill-0);text-decoration:none;vertical-align:top}.semi-ai-chat-dialogue-content-file:hover .semi-ai-chat-dialogue-content-icon-reference{flex-shrink:0;padding:0 8px;cursor:pointer;display:flex;justify-content:center;align-items:center;margin-left:auto;color:var(--semi-color-text-0)}.semi-ai-chat-dialogue-content-file:hover .semi-ai-chat-dialogue-content-file-title-ellipsis{max-width:140px}.semi-ai-chat-dialogue-content-file-last{margin-right:0}.semi-ai-chat-dialogue-content-file-icon{color:var(--semi-color-white)}.semi-ai-chat-dialogue-content-file-icon-wrapper{width:36px;height:36px;border-radius:var(--semi-border-radius-extra-small);flex-shrink:0;display:flex;justify-content:center;align-items:center}.semi-ai-chat-dialogue-content-file-icon-code{background-color:rgba(var(--semi-teal-4),1)}.semi-ai-chat-dialogue-content-file-icon-word{background-color:rgba(var(--semi-blue-4),1)}.semi-ai-chat-dialogue-content-file-icon-pdf{background-color:rgba(var(--semi-red-4),1)}.semi-ai-chat-dialogue-content-file-icon-excel{background-color:rgba(var(--semi-green-4),1)}.semi-ai-chat-dialogue-content-file-icon-video{background-color:rgba(var(--semi-purple-4),1)}.semi-ai-chat-dialogue-content-file-icon-image .semi-ai-chat-dialogue-content-file-icon{background-size:cover;background-position:center;width:36px;height:36px}.semi-ai-chat-dialogue-content-file-icon-default{background-color:rgba(var(--semi-grey-4),1)}.semi-ai-chat-dialogue-content-file-info{display:flex;flex-direction:column;text-align:left;flex-shrink:1}.semi-ai-chat-dialogue-content-file-title{font-size:16px;color:var(--semi-color-text-0);max-width:180px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.semi-ai-chat-dialogue-content-file-metadata{font-size:14px;color:var(--semi-color-text-2)}.semi-ai-chat-dialogue-content-file-type{text-transform:uppercase}.semi-ai-chat-dialogue-content-tool-call{display:flex;color:var(--semi-color-text-2);padding:6px 8px;background-color:var(--semi-color-fill-0);border-radius:var(--semi-border-radius-medium);width:fit-content;align-items:center;justify-content:center;column-gap:4px;margin-top:8px}.semi-ai-chat-dialogue-content-custom-renderer{margin-top:8px;width:fit-content}.semi-ai-chat-dialogue-action{margin-top:8px;visibility:hidden}.semi-ai-chat-dialogue-action-btn{width:24px;height:24px}.semi-ai-chat-dialogue-action-icon-flip{transform:scaleY(-1)}.semi-ai-chat-dialogue-action-show{visibility:visible}.semi-ai-chat-dialogue-action.semi-ai-chat-dialogue-action-hidden,.semi-ai-chat-dialogue-action:hover.semi-ai-chat-dialogue-action-hidden{visibility:hidden}.semi-ai-chat-dialogue-action-dropdown li{color:var(--semi-color-danger)}.semi-ai-chat-dialogue-action-dropdown .semi-icon{font-size:16px}.semi-ai-chat-dialogue-reasoning{width:100%}.semi-ai-chat-dialogue-reasoning-wrapper{width:100%;margin-top:8px;cursor:pointer;border:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-large)}.semi-ai-chat-dialogue-reasoning-header{box-sizing:border-box;display:flex;flex-direction:row;align-items:center;justify-content:center;padding:16px}.semi-ai-chat-dialogue-reasoning-header-prefix,.semi-ai-chat-dialogue-reasoning-header-suffix{width:20px;height:20px;display:flex;justify-content:center;align-items:center}.semi-ai-chat-dialogue-reasoning-header-title{flex:1 1 auto;line-height:22px;font-weight:600}.semi-ai-chat-dialogue-reasoning-content{padding:12px 16px;border-top:1px solid var(--semi-color-border)}.semi-ai-chat-dialogue-step{display:inline-flex;flex-direction:row;align-items:center;line-height:20px;padding:6px 12px;border:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-medium);margin-top:12px;font-size:14px}.semi-ai-chat-dialogue-step .semi-ai-chat-dialogue-content-loading{margin-top:0}.semi-ai-chat-dialogue-step-completed{color:var(--semi-color-success)}.semi-ai-chat-dialogue-step-summary{display:inline-block;width:fit-content;cursor:pointer}.semi-ai-chat-dialogue-step-prefix{width:20px;height:20px;color:var(--semi-color-text-1);display:flex;justify-content:center;align-items:center;margin-right:6px}.semi-ai-chat-dialogue-step-suffix{width:20px;height:20px;display:flex;justify-content:center;align-items:center;color:var(--semi-color-text-1);margin-left:8px}.semi-ai-chat-dialogue-step-panel{display:flex;gap:12px}.semi-ai-chat-dialogue-step-line{width:1px;background-color:var(--semi-color-border);margin-left:20px}.semi-ai-chat-dialogue-step-action{line-height:20px;margin-top:12px;font-size:14px}.semi-ai-chat-dialogue-step-action-summary{margin-bottom:4px}.semi-ai-chat-dialogue-step-action-desc{display:inline-flex;color:var(--semi-color-text-2);padding:6px 8px;background-color:var(--semi-color-fill-0);border-radius:var(--semi-border-radius-medium);width:fit-content;align-items:center;justify-content:center;column-gap:4px}.semi-ai-chat-dialogue-step-wrapper>.semi-ai-chat-dialogue-step:first-child{margin-top:4px}.semi-ai-chat-dialogue-annotation{width:100%}.semi-ai-chat-dialogue-annotation-wrapper{width:fit-content;margin-top:8px;flex:1 1 auto;border:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-medium);padding:8px 12px}.semi-ai-chat-dialogue-annotation-wrapper:hover{background-color:var(--semi-color-fill-0)}.semi-ai-chat-dialogue-annotation-content{display:flex;flex-direction:row;align-items:center;justify-content:center;column-gap:8px;font-size:14px;color:var(--semi-color-text-2);cursor:pointer}.semi-ai-chat-dialogue-annotation-content .semi-avatar-group{display:flex}.semi-ai-chat-dialogue-annotation-content-logo{width:16px;height:16px;display:flex}.semi-ai-chat-dialogue-annotation-content-logo-renderMore{width:16px;height:16px}.semi-ai-chat-dialogue-annotation-content-icon{display:flex;justify-content:center;align-items:center}.semi-ai-chat-dialogue-references{display:flex;flex-wrap:wrap;font-size:12px;line-height:16px;color:var(--semi-color-text-2);margin-top:8px;column-gap:4px;row-gap:4px}.semi-ai-chat-dialogue-references .semi-ai-chat-dialogue-reference{display:flex;padding:8px 12px;box-sizing:border-box;width:fit-content;max-width:200px;flex-shrink:1;align-items:center;column-gap:8px;background-color:var(--semi-color-fill-0);border-radius:var(--semi-border-radius-medium);margin-left:auto}.semi-ai-chat-dialogue-references .semi-ai-chat-dialogue-reference-content{display:flex;align-items:center;flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.semi-ai-chat-dialogue-references .semi-ai-chat-dialogue-reference-icon{display:flex;justify-content:center;align-items:center;margin-right:4px;color:var(--semi-color-white);width:16px;height:16px;border-radius:2px}.semi-ai-chat-dialogue-references .semi-ai-chat-dialogue-reference-icon-word{background-color:rgba(var(--semi-blue-4),1)}.semi-ai-chat-dialogue-references .semi-ai-chat-dialogue-reference-icon-pdf{background-color:rgba(var(--semi-red-4),1)}.semi-ai-chat-dialogue-references .semi-ai-chat-dialogue-reference-icon-excel{background-color:rgba(var(--semi-green-4),1)}.semi-ai-chat-dialogue-references .semi-ai-chat-dialogue-reference-icon-video{background-color:rgba(var(--semi-purple-4),1)}.semi-ai-chat-dialogue-references .semi-ai-chat-dialogue-reference-icon-code{background-color:rgba(var(--semi-teal-4),1)}.semi-ai-chat-dialogue-references .semi-ai-chat-dialogue-reference-img{margin-right:4px}.semi-ai-chat-dialogue-references .semi-ai-chat-dialogue-reference-name{display:inline-block;text-overflow:ellipsis;overflow:hidden;word-break:break-all;max-width:130px}.semi-ai-chat-dialogue-code{border-radius:var(--semi-border-radius-large);overflow:hidden;border:1px solid var(--semi-color-border);line-height:32px}.semi-ai-chat-dialogue-code .semi-codeHighlight pre{word-break:break-all;white-space:pre-wrap}.semi-ai-chat-dialogue-code-topSlot{display:flex;justify-content:space-between;background-color:var(--semi-color-fill-0);align-items:center;padding:8px 16px;color:var(--semi-color-text-0);font-size:14px}.semi-ai-chat-dialogue-code-topSlot-copy{display:flex;justify-content:flex-end;align-items:center;width:24px}.semi-ai-chat-dialogue-code-topSlot-copy-wrapper{display:flex;align-items:center;justify-content:center;cursor:pointer;background:#0000;border:none}.semi-ai-chat-dialogue-code .semi-codeHighlight-defaultTheme pre[class*=language-]{margin:0;background:var(--semi-color-bg-0)}.semi-ai-chat-dialogue-hints{display:flex;flex-direction:column;row-gap:8px;margin-top:4px;margin-bottom:12px;margin-left:52px}.semi-ai-chat-dialogue-hints-selecting{margin-left:68px}.semi-ai-chat-dialogue-hint-item{cursor:pointer;display:flex;flex-direction:row;width:fit-content;background:var(--semi-color-bg-0);align-items:center;border:1px solid var(--semi-color-border);padding:8px 16px;border-radius:var(--semi-border-radius-medium)}.semi-ai-chat-dialogue-hint-item:hover{background-color:var(--semi-color-fill-0)}.semi-ai-chat-dialogue-hint-content{font-size:14px;color:var(--semi-color-text-0)}@keyframes semi-ai-chat-dialogue-loading-bounce{0%{transform:translateY(0) scale(1)}18%{transform:translateY(-4px) scale(.96)}36%{transform:translateY(0) scale(1.06)}44%{transform:translateY(-.5px) scale(.98)}52%{transform:translateY(0) scale(1)}to{transform:translateY(0) scale(1)}}.semi-rtl .semi-ai-chat-dialogue-wrapper,.semi-portal-rtl .semi-ai-chat-dialogue-wrapper{direction:rtl}.semi-rtl .semi-ai-chat-dialogue-wrapper-action-icon-redo,.semi-portal-rtl .semi-ai-chat-dialogue-wrapper-action-icon-redo{transform:scaleX(-1)}.semi-aiChatInput{display:flex;flex-direction:column;padding:20px;border-radius:12px;border:1px solid var(--semi-color-border);box-sizing:border-box}.semi-aiChatInput-skill{padding:4px 0;border-radius:8px;overflow:scroll}.semi-aiChatInput-skill-item{display:flex;align-items:center;column-gap:8px;padding:8px 20px;cursor:pointer}.semi-aiChatInput-skill-item-active{background-color:var(--semi-color-fill-0)}.semi-aiChatInput-popover-suggestion{box-shadow:none}.semi-aiChatInput-suggestion{overflow:scroll}.semi-aiChatInput-suggestion-item{border-radius:6px;padding:8px 20px;color:var(--semi-color-text-0);font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-aiChatInput-suggestion-item-active{background-color:var(--semi-color-fill-0)}.semi-aiChatInput-reference-icon{width:16px;height:16px;border-radius:2px;margin-right:4px}.semi-aiChatInput-ref-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--semi-color-white);flex-shrink:0}.semi-aiChatInput-ref-icon-word{background-color:rgba(var(--semi-blue-4),1)}.semi-aiChatInput-ref-icon-pdf{background-color:rgba(var(--semi-red-4),1)}.semi-aiChatInput-ref-icon-code{background-color:rgba(var(--semi-teal-5),1)}.semi-aiChatInput-ref-icon-excel{background-color:rgba(var(--semi-green-5),1)}.semi-aiChatInput-ref-icon-video,.semi-aiChatInput-ref-icon-audio{background-color:rgba(var(--semi-purple-4),1)}.semi-aiChatInput-ref-icon-unknown{background-color:rgba(var(--semi-grey-5),1)}.semi-aiChatInput-references{display:flex;flex-wrap:wrap;margin-bottom:8px;font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2);column-gap:4px;row-gap:4px}.semi-aiChatInput-references>.semi-aiChatInput-reference:only-child{width:100%}.semi-aiChatInput-references>.semi-aiChatInput-reference:nth-last-child(2):first-child,.semi-aiChatInput-references>.semi-aiChatInput-reference:nth-child(2):nth-last-child(1){flex-basis:calc(50% - 4px);max-width:calc(50% - 4px)}.semi-aiChatInput-references>.semi-aiChatInput-reference:nth-last-child(n+3):nth-child(1),.semi-aiChatInput-references>.semi-aiChatInput-reference:nth-last-child(n+3):nth-child(1)~.semi-aiChatInput-reference{width:calc(33.333% - 4px)}.semi-aiChatInput-reference{padding:8px 12px;box-sizing:border-box;border-radius:6px;background:var(--semi-color-fill-0);flex-shrink:1;display:flex;align-items:center;column-gap:8px}.semi-aiChatInput-reference-content{display:flex;align-items:center;flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-aiChatInput-reference-img{width:16px;height:16px;margin-right:4px}.semi-aiChatInput-reference-name{display:inline-block;text-overflow:ellipsis;overflow:hidden;word-break:break-all}.semi-aiChatInput-reference-delete{cursor:pointer;padding:2px;border-radius:50%}.semi-aiChatInput-reference-delete:hover{background:var(--semi-color-fill-1)}.semi-aiChatInput-footer{display:flex;justify-content:space-between;margin-top:20px;align-items:center;user-select:none;-webkit-user-select:none}.semi-aiChatInput-footer-round .semi-aiChatInput-footer-configure-select,.semi-aiChatInput-footer-round .semi-aiChatInput-footer-configure-button,.semi-aiChatInput-footer-round .semi-aiChatInput-footer-configure-radio-button,.semi-aiChatInput-footer-round .semi-aiChatInput-footer-configure-mcp-trigger,.semi-aiChatInput-footer-round .semi-aiChatInput-footer-action-button,.semi-aiChatInput-footer-round .semi-aiChatInput-footer-action-upload,.semi-aiChatInput-footer-round .semi-radio-addon-buttonRadio{border-radius:9999px}.semi-aiChatInput-footer-action{display:flex;align-items:center;column-gap:8px}.semi-aiChatInput-footer-action button{padding:0;border:0px;display:flex;align-items:center;justify-content:center}.semi-aiChatInput-footer-action-button{width:32px;height:32px;cursor:pointer;border-radius:8px}.semi-aiChatInput-footer-action-send{background-color:var(--semi-color-primary);color:rgba(var(--semi-white),1)}.semi-aiChatInput-footer-action-send:hover:not(.semi-aiChatInput-footer-action-send-disabled){background-color:var(--semi-color-primary-hover)}.semi-aiChatInput-footer-action-send:active:not(.semi-aiChatInput-footer-action-send-disabled){background-color:var(--semi-color-primary-active)}.semi-aiChatInput-footer-action-send-disabled{background-color:var(--semi-color-fill-2)}.semi-aiChatInput-footer-action-stop{background-color:var(--semi-color-primary);color:rgba(var(--semi-white),1)}.semi-aiChatInput-footer-action-stop:hover:not(.semi-aiChatInput-footer-action-send-disabled){background-color:var(--semi-color-primary-hover)}.semi-aiChatInput-footer-action-stop:active:not(.semi-aiChatInput-footer-action-send-disabled){background-color:var(--semi-color-primary-active)}.semi-aiChatInput-footer-action-stop-disabled{background-color:var(--semi-color-fill-2)}.semi-aiChatInput-footer-action-upload{background:#0000;color:var(--semi-color-text-1)}.semi-aiChatInput-footer-action-upload:hover{background-color:var(--semi-color-fill-0)}.semi-aiChatInput-footer-action-upload:active{background-color:var(--semi-color-fill-1)}.semi-aiChatInput-footer-configure{display:flex;flex-direction:row;column-gap:8px}.semi-aiChatInput-footer-configure-button{border:1px solid var(--semi-color-primary)}.semi-aiChatInput-footer-configure-button-active.semi-button-tertiary.semi-button-outline{border:1px solid var(--semi-color-primary);color:var(--semi-color-primary);background-color:var(--semi-color-primary-light-default)}.semi-aiChatInput-footer-configure-select{border:1px solid var(--semi-color-border);background:#0000}.semi-aiChatInput-footer-configure-select.semi-select-focus,.semi-aiChatInput-footer-configure-select .semi-select-selection-text{font-weight:600;color:var(--semi-color-text-1)}.semi-aiChatInput-footer-configure-select.semi-select:hover{border-color:var(--semi-color-border)}.semi-aiChatInput-footer-configure-select.semi-select:focus{border:1px solid var(--semi-color-border);background:#0000}.semi-aiChatInput-footer-configure-radio-button .semi-radio-addon-buttonRadio{height:16px;padding:4px;font-size:14px}.semi-aiChatInput-footer-configure-radio-button .semi-radio-addon-buttonRadio-checked{color:var(--semi-color-text-1);background:var(--semi-color-bg-2)}.semi-aiChatInput-footer-configure-mcp-header{padding:8px 16px 0;font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;height:16px;align-items:center;display:flex;justify-content:space-between;column-gap:4px}.semi-aiChatInput-footer-configure-mcp-header-title{color:var(--semi-color-text-2)}.semi-aiChatInput-footer-configure-mcp-header-config.semi-button{padding:0;border:0px;height:fit-content;font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-aiChatInput-attachment{position:relative;display:flex;align-items:center;column-gap:8px;border-radius:6px;background:var(--semi-color-fill-0);padding:8px;width:224px;height:36px;overflow:hidden;letter-spacing:0;flex-shrink:0}.semi-aiChatInput-attachment-icon,.semi-aiChatInput-attachment-img{display:flex;flex-shrink:0;align-items:center;justify-content:center;border-radius:3px;width:36px;height:36px}.semi-aiChatInput-attachment-img{object-fit:cover}.semi-aiChatInput-attachment-content{display:flex;flex-direction:column;flex-shrink:0;align-items:flex-start;width:180px}.semi-aiChatInput-attachment-content-name{flex-shrink:0;width:180px;height:20px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--semi-color-text-0);font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600}.semi-aiChatInput-attachment-content-size{display:flex;flex-shrink:0;align-items:flex-start;column-gap:4px;color:var(--semi-color-text-2);font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;text-transform:uppercase}.semi-aiChatInput-attachment-delete{display:none}.semi-aiChatInput-attachment:hover>.semi-aiChatInput-attachment-delete{cursor:pointer;position:absolute;top:0;right:0;background:rgba(var(--semi-grey-7),1);color:var(--semi-color-white);border-radius:50%;width:16px;height:16px;font-size:12px;display:flex;align-items:center;justify-content:center}.semi-aiChatInput-attachment-progress.semi-progress-circle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.semi-aiChatInput-scroll-wrapper{position:relative;width:100%;display:flex;align-items:center;margin-bottom:8px}.semi-aiChatInput-scroll-container{display:flex;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none;column-gap:8px}.semi-aiChatInput-scroll-container::-webkit-scrollbar{display:none}.semi-aiChatInput-scroll-button{padding:0;border:0px;position:absolute;top:50%;transform:translateY(-50%);z-index:10;width:16px;height:16px;border-radius:50%;background:var(--semi-color-white);box-shadow:var(--semi-shadow-elevated);cursor:pointer;display:flex;justify-content:center;align-items:center;transition:background-color .2s,box-shadow .2s}.semi-aiChatInput-scroll-button .semi-icon{font-size:12px;color:var(--semi-color-text-2)}.semi-aiChatInput-scroll-button:active{transform:translateY(-50%) scale(.95)}.semi-aiChatInput-scroll-button-left-icon{transform:rotate(180deg)}.semi-aiChatInput-scroll-button.semi-aiChatInput-scroll-button-left{left:10px}.semi-aiChatInput-scroll-button.semi-aiChatInput-scroll-button-right{right:10px}.semi-aiChatInput-editor-content{flex:1 1 0%;min-height:0;margin-top:-4px;padding-top:4px;overflow:auto}.semi-aiChatInput-editor-content .tiptap{font-size:14px;line-height:24px}.semi-aiChatInput-editor-content .tiptap p.is-editor-empty:first-child:before{color:var(--semi-color-text-2);content:attr(data-placeholder);float:left;height:0;pointer-events:none}.semi-aiChatInput-editor-content .tiptap p.has-skill-slot.is-editor-empty:first-child:before{content:none}.semi-aiChatInput-editor-content .tiptap p.has-skill-slot.is-editor-empty:first-child:after{color:var(--semi-color-text-2);content:attr(data-placeholder);display:inline;height:0;margin-left:8px;pointer-events:none}.semi-aiChatInput-editor-content .tiptap p{margin:0;white-space:pre-wrap}.semi-aiChatInput-editor-content .tiptap:focus{outline:none}.semi-aiChatInput-editor-content .tiptap .node-inputSlot{display:inline-block;font-size:14px;line-height:20px}.semi-aiChatInput-editor-content .tiptap .input-slot{display:inline-block;box-sizing:content-box;background-color:var(--semi-color-primary-light-default);border-radius:4px;padding:2px 4px;position:relative;margin:2px;font-weight:600;min-width:2px}.semi-aiChatInput-editor-content .tiptap .input-slot .content{color:var(--semi-color-primary)}.semi-aiChatInput-editor-content .tiptap .input-slot .input-slot-placeholder{-webkit-user-select:none;user-select:none;position:absolute;top:2px;left:4px;pointer-events:none;white-space:pre;z-index:1;color:var(--semi-color-primary-disabled)}.semi-aiChatInput-editor-content .tiptap .node-selectSlot{display:inline-flex}.semi-aiChatInput-editor-content .tiptap .select-slot{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;height:24px;padding:2px 4px;border-radius:4px;background-color:var(--semi-color-primary-light-default)}.semi-aiChatInput-editor-content .tiptap .select-slot:first-child{margin-left:0}.semi-aiChatInput-editor-content .tiptap .select-slot-wrapper{display:inline-flex;margin:2px 4px}.semi-aiChatInput-editor-content .tiptap .select-slot .semi-select-selection{color:var(--semi-color-primary);font-weight:700;margin-left:0}.semi-aiChatInput-editor-content .tiptap .select-slot .semi-select-arrow{color:var(--semi-color-text-2);width:16px}.semi-aiChatInput-editor-content .tiptap .select-slot.semi-select-open,.semi-aiChatInput-editor-content .tiptap .select-slot.semi-select-focus{border-color:#0000}.semi-aiChatInput-editor-content .tiptap .select-slot.semi-select:focus{border-color:#0000}.semi-aiChatInput-editor-content .tiptap .node-skillSlot{display:inline-flex}.semi-aiChatInput-editor-content .tiptap .skill-slot{color:var(--semi-color-primary);font-weight:600;outline:none}.semi-aiChatInput-editor-content .tiptap .skill-slot-wrapper{display:inline-flex;position:relative;padding:0 4px;margin:2px;border-radius:4px}.semi-aiChatInput-editor-content .tiptap .skill-slot-wrapper:hover{background-color:var(--semi-color-primary-light-default)}.semi-aiChatInput-editor-content .tiptap .skill-slot-wrapper:hover .skill-slot-delete{cursor:pointer;position:absolute;top:0;right:0;background:rgba(var(--semi-grey-7),1);color:var(--semi-color-white);transform:translate(50%,-50%);border-radius:50%;width:12px;height:12px;font-size:8px;display:flex;align-items:center;justify-content:center}.semi-aiChatInput-editor-content .tiptap .skill-slot-delete{display:none}.semi-anchor{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;overflow-y:auto;overflow-x:hidden;position:relative}.semi-anchor-size-small{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-anchor-slide{position:absolute;left:0;top:0;height:100%}.semi-anchor-slide-muted{display:none}.semi-anchor-slide-bar{display:none;position:absolute;top:0;width:2px;border-radius:1px}.semi-anchor-slide-bar-active{display:inline-block}.semi-anchor-slide-bar-default{height:28px}.semi-anchor-slide-bar-small{height:24px}.semi-anchor-slide-bar-primary{background-color:var(--semi-color-primary)}.semi-anchor-slide-bar-tertiary{background-color:var(--semi-color-tertiary)}.semi-anchor-slide:before{position:absolute;display:block;width:2px;height:100%;background-color:var(--semi-color-border);border-radius:1px;content:" "}.semi-anchor-link-title{cursor:pointer;color:var(--semi-color-text-2);padding-top:4px;padding-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:3px;transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none));background:#0000}.semi-anchor-link-title:hover{color:var(--semi-color-tertiary-hover)}.semi-anchor-link-title-active{color:var(--semi-color-text-0);background:#0000}.semi-anchor-link-title-active:hover{color:var(--semi-color-tertiary-hover)}.semi-anchor-link-title:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-anchor-link-title-disabled{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-anchor-link-title-disabled:hover{color:var(--semi-color-disabled-text)}.semi-anchor-link-tooltip{cursor:pointer;color:var(--semi-color-text-2)!important}.semi-anchor-link-tooltip-small{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-anchor-link-tooltip:hover{color:var(--semi-color-tertiary-hover)!important}.semi-anchor-link-tooltip-active{color:var(--semi-color-text-0)!important}.semi-anchor-link-tooltip-disabled{color:var(--semi-color-disabled-text)!important;cursor:not-allowed}.semi-anchor-link-tooltip-disabled:hover{color:var(--semi-color-disabled-text)!important}.semi-rtl .semi-anchor,.semi-portal-rtl .semi-anchor{direction:rtl}.semi-rtl .semi-anchor-slide,.semi-portal-rtl .semi-anchor-slide{right:0;left:auto}.semi-rtl .semi-anchor-link,.semi-portal-rtl .semi-anchor-link{padding-left:auto}.semi-audio-player{display:flex;align-items:center;justify-content:center;gap:24px;max-width:1440px;height:78px;background:rgba(var(--semi-grey-9),.8)}.semi-audio-player-control{display:flex;align-items:center;gap:16px}.semi-audio-player-control-button-icon{color:var(--semi-color-bg-0)}.semi-audio-player-control-button-play{background:var(--semi-color-bg-0)!important;color:var(--semi-color-text-0)!important}.semi-audio-player-control-button-play-disabled{background:rgba(var(--semi-grey-0),.35)!important;color:var(--semi-color-grey-7)!important}.semi-audio-player-slider-container{width:323px;height:100%}.semi-audio-player-info-container{display:flex;align-items:center;gap:16px}.semi-audio-player-info{display:flex;flex-direction:column;gap:4px}.semi-audio-player-info-title{font-size:14px;color:var(--semi-color-bg-0);font-weight:600;display:flex;align-items:center}.semi-audio-player-info-time{width:100%;height:22px;font-size:14px;color:var(--semi-color-bg-0);display:flex;align-items:center;justify-content:space-between;gap:4px;-webkit-user-select:none;user-select:none}.semi-audio-player-control-speed{width:40px;height:24px;display:flex;align-items:center;justify-content:center;gap:4px;background:rgba(var(--semi-grey-8),1);border-radius:3px;font-size:12px;line-height:16px;color:var(--semi-color-default);font-weight:600;-webkit-user-select:none;user-select:none}.semi-audio-player-control-speed-menu{background:rgba(var(--semi-grey-8),1);width:65px}.semi-audio-player-control-speed-menu-item{color:var(--semi-color-default)}.semi-audio-player-control-speed-menu-item:hover{background:var(--semi-color-tertiary-active)!important}.semi-audio-player-control-volume{width:43px;height:164px;background:rgba(var(--semi-grey-8),1);border-radius:4px;padding:4px 0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:8px}.semi-audio-player-control-volume-title{font-size:12px;line-height:16px;color:var(--semi-color-default);font-weight:600;-webkit-user-select:none;user-select:none}.semi-audio-player-error{display:flex;align-items:center;gap:4px;margin-left:4px;color:var(--semi-color-danger)}.semi-audio-player-light{background:var(--semi-color-bg-0);border:1px solid var(--semi-color-border)}.semi-audio-player-light .semi-audio-player-control-button-icon{color:rgba(var(--semi-grey-9),1)}.semi-audio-player-light .semi-audio-player-control-button-play{background:rgba(var(--semi-grey-9),1)!important;color:var(--semi-color-bg-0)!important}.semi-audio-player-light .semi-audio-player-control-button-play-disabled{background:var(--semi-color-disabled-text)!important;color:rgba(var(--semi-white),1)!important}.semi-audio-player-light .semi-audio-player-info-title,.semi-audio-player-light .semi-audio-player-info-time,.semi-audio-player-light .semi-audio-player-control-speed-menu-item,.semi-audio-player-light .semi-audio-player-control-volume-title{color:rgba(var(--semi-grey-9),1)}.semi-audio-player-light .semi-audio-player-control-speed-menu-item:hover{background:rgba(var(--semi-grey-1),1)!important}.semi-audio-player-slider{background:rgba(var(--semi-grey-5),1);border-radius:9999px;position:relative}.semi-audio-player-slider-light{background:rgba(var(--semi-grey-2),1)}.semi-audio-player-slider-wrapper{position:relative;cursor:pointer;display:flex;align-items:center;justify-content:center}.semi-audio-player-slider-wrapper-vertical{width:100%}.semi-audio-player-slider-wrapper-horizontal{height:100%}.semi-audio-player-slider-vertical{width:4px;height:100%}.semi-audio-player-slider-horizontal{width:100%;height:4px}.semi-audio-player-slider-progress{position:absolute;background:rgba(var(--semi-blue-4),1);border-radius:9999px}.semi-audio-player-slider-progress-vertical{bottom:0}.semi-audio-player-slider-progress-horizontal{left:0}.semi-audio-player-slider-dot{position:absolute;width:16px;height:16px;background:rgba(var(--semi-white),1);border:1px solid var(--semi-color-primary);box-shadow:0 0 4px 0 var(--semi-color-shadow);border-radius:50%;transition:opacity .2s}.semi-autocomplete-option{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;word-break:break-all;padding:8px 12px;color:var(--semi-color-text-0);border-radius:0;position:relative;display:flex;flex-wrap:nowrap;align-items:center;cursor:pointer;box-sizing:border-box;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-autocomplete-option-icon{width:12px;color:#0000;visibility:hidden;margin-right:8px;display:flex;justify-content:center;align-content:center}.semi-autocomplete-option-text{display:flex;flex-wrap:wrap;white-space:pre}.semi-autocomplete-option-keyword{color:var(--semi-color-primary);background-color:inherit;font-weight:600}.semi-autocomplete-option:active{background-color:var(--semi-color-fill-1)}.semi-autocomplete-option-empty{cursor:not-allowed;color:var(--semi-color-disabled-text);justify-content:center}.semi-autocomplete-option-empty:hover,.semi-autocomplete-option-empty:active{background-color:inherit}.semi-autocomplete-option-disabled{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-autocomplete-option-disabled:hover{background-color:var(--semi-color-fill-0)}.semi-autocomplete-option-selected{font-weight:600}.semi-autocomplete-option-selected .semi-autocomplete-option-icon{visibility:visible;color:var(--semi-color-text-2)}.semi-autocomplete-option-focused{background-color:var(--semi-color-fill-0)}.semi-autocomplete-option:first-of-type{margin-top:4px}.semi-autocomplete-option:last-of-type{margin-bottom:4px}.semi-autocomplete{cursor:text;display:inline-flex;vertical-align:middle;box-sizing:border-box}.semi-autocomplete-option-list{overflow-x:hidden;overflow-y:auto}.semi-autocomplete-option-list-chosen .semi-autocomplete-option-icon{display:flex}.semi-autocomplete-loading-wrapper{padding-top:8px;padding-bottom:8px;cursor:not-allowed;height:20px}.semi-autocomplete-loading-wrapper .semi-spin{width:100%}.semi-rtl .semi-autocomplete,.semi-portal-rtl .semi-autocomplete{direction:rtl}.semi-avatar{position:relative;display:inline-flex;overflow:hidden;align-items:center;justify-content:center;white-space:nowrap;text-align:center;vertical-align:middle}.semi-avatar:focus-visible{outline:2px solid var(--semi-color-primary-light-active)}.semi-avatar-focus{outline:2px solid var(--semi-color-primary-light-active)}.semi-avatar-no-focus-visible:focus-visible{outline:none}.semi-avatar .semi-avatar-label{display:flex;align-items:center;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600}.semi-avatar-content{-webkit-user-select:none;user-select:none}.semi-avatar-extra-extra-small{width:20px;height:20px;border-radius:3px}.semi-avatar-extra-extra-small .semi-avatar-content{transform-origin:center;transform:scale(.8)}.semi-avatar-extra-extra-small .semi-avatar-label{font-size:10px;line-height:15px}.semi-avatar-extra-small{width:24px;height:24px;border-radius:3px}.semi-avatar-extra-small .semi-avatar-content{transform-origin:center;transform:scale(.8)}.semi-avatar-extra-small .semi-avatar-label{font-size:10px;line-height:15px}.semi-avatar-small{width:32px;height:32px;border-radius:3px}.semi-avatar-small .semi-avatar-label{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-avatar-default{width:40px;height:40px;border-radius:3px}.semi-avatar-default .semi-avatar-label{font-size:18px;line-height:24px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-avatar-medium{width:48px;height:48px;border-radius:3px}.semi-avatar-medium .semi-avatar-label{font-size:20px;line-height:28px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-avatar-large{width:72px;height:72px;border-radius:6px}.semi-avatar-large .semi-avatar-label{font-size:32px;line-height:44px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-avatar-extra-large{width:128px;height:128px;border-radius:12px}.semi-avatar-extra-large .semi-avatar-label{font-size:64px;line-height:77px}.semi-avatar-circle{border-radius:var(--semi-border-radius-circle)}.semi-avatar-image{background-color:#0000}.semi-avatar>img{display:block;width:100%;height:100%;object-fit:cover}.semi-avatar-hover{position:absolute;left:0;top:0;width:100%;height:100%}.semi-avatar:hover{cursor:pointer}.semi-avatar-wrapper{position:relative;display:inline-flex;flex-direction:column;align-items:center;width:fit-content}.semi-avatar-wrapper .semi-avatar-top_slot-bg{position:absolute;display:flex;justify-content:center;border-radius:50%;overflow:hidden}.semi-avatar-wrapper .semi-avatar-top_slot-bg-small{width:32px;height:32px}.semi-avatar-wrapper .semi-avatar-top_slot-bg-default{width:40px;height:40px}.semi-avatar-wrapper .semi-avatar-top_slot-bg-medium{width:48px;height:48px}.semi-avatar-wrapper .semi-avatar-top_slot-bg-large{width:72px;height:72px}.semi-avatar-wrapper .semi-avatar-top_slot-bg-extra-large{width:128px;height:128px}.semi-avatar-wrapper .semi-avatar-top_slot-bg-svg{position:absolute}.semi-avatar-wrapper .semi-avatar-top_slot-bg-svg-small{top:-28px;scale:.4}.semi-avatar-wrapper .semi-avatar-top_slot-bg-svg-default{top:-32px;scale:.7}.semi-avatar-wrapper .semi-avatar-top_slot-bg-svg-medium{top:-30px;scale:.8}.semi-avatar-wrapper .semi-avatar-top_slot-bg-svg-large{top:-30px;scale:1.1}.semi-avatar-wrapper .semi-avatar-top_slot-bg-svg-extra-large{top:-32px;scale:1.4}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper{position:absolute;display:flex;justify-content:center}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper .semi-avatar-top_slot{color:var(--semi-color-bg-0);font-weight:600}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper .semi-avatar-top_slot-content{-webkit-user-select:none;user-select:none;position:relative;line-height:normal}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper .semi-avatar-top_slot-content-small{font-size:5px;margin-top:0}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper .semi-avatar-top_slot-content-default{font-size:6px;margin-top:-2px}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper .semi-avatar-top_slot-content-medium{font-size:8px;margin-top:0}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper .semi-avatar-top_slot-content-large{font-size:14px;margin-top:0}.semi-avatar-wrapper .semi-avatar-top_slot-wrapper .semi-avatar-top_slot-content-extra-large{font-size:16px;margin-top:0}.semi-avatar-wrapper .semi-avatar-bottom_slot{color:var(--semi-color-bg-0);position:absolute;cursor:pointer;bottom:3.5px;transform:translateY(50%);-webkit-user-select:none;user-select:none}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_circle{display:flex;justify-content:center;align-items:center;background:var(--semi-color-primary);border-radius:var(--semi-border-radius-circle);line-height:normal}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_circle-extra-small,.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_circle-small{width:12px;height:12px;font-size:5px}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_circle-default{width:16px;height:16px;font-size:12px}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_circle-medium{width:18px;height:18px;font-size:12px}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_circle-large{width:28px;height:28px;font-size:12px}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_circle-extra-large{width:28px;height:28px;font-size:14px}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_square{display:flex;justify-content:center;align-items:center;background:var(--semi-color-primary);border-radius:4px;padding:1px 4px;font-weight:600;border-style:solid;border-color:var(--semi-color-bg-0)}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_square-extra_small,.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_square-small{font-size:5px;border-width:2px}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_square-default,.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_square-medium,.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_square-large{font-size:12px;border-width:2px}.semi-avatar-wrapper .semi-avatar-bottom_slot-shape_square-extra-large{font-size:14px;border-width:2px}.semi-avatar-group{display:inline-block}.semi-avatar-group .semi-avatar{box-sizing:border-box}.semi-avatar-group .semi-avatar:first-child{margin-left:0}.semi-avatar-group .semi-avatar-extra-large{border:3px var(--semi-color-bg-1) solid;margin-left:-32px}.semi-avatar-group .semi-avatar-large{border:3px var(--semi-color-bg-1) solid;margin-left:-18px}.semi-avatar-group .semi-avatar-medium,.semi-avatar-group .semi-avatar-default,.semi-avatar-group .semi-avatar-small{border:2px var(--semi-color-bg-1) solid;margin-left:-12px}.semi-avatar-group .semi-avatar-extra-small{border:1px var(--semi-color-bg-1) solid;margin-left:-10px}.semi-avatar-group .semi-avatar-extra-extra-small{border:1px var(--semi-color-bg-1) solid;margin-left:-4px}.semi-avatar-group .semi-avatar-item-start-0{z-index:100}.semi-avatar-group .semi-avatar-item-end-0{z-index:80}.semi-avatar-group .semi-avatar-item-start-1{z-index:99}.semi-avatar-group .semi-avatar-item-end-1{z-index:81}.semi-avatar-group .semi-avatar-item-start-2{z-index:98}.semi-avatar-group .semi-avatar-item-end-2{z-index:82}.semi-avatar-group .semi-avatar-item-start-3{z-index:97}.semi-avatar-group .semi-avatar-item-end-3{z-index:83}.semi-avatar-group .semi-avatar-item-start-4{z-index:96}.semi-avatar-group .semi-avatar-item-end-4{z-index:84}.semi-avatar-group .semi-avatar-item-start-5{z-index:95}.semi-avatar-group .semi-avatar-item-end-5{z-index:85}.semi-avatar-group .semi-avatar-item-start-6{z-index:94}.semi-avatar-group .semi-avatar-item-end-6{z-index:86}.semi-avatar-group .semi-avatar-item-start-7{z-index:93}.semi-avatar-group .semi-avatar-item-end-7{z-index:87}.semi-avatar-group .semi-avatar-item-start-8{z-index:92}.semi-avatar-group .semi-avatar-item-end-8{z-index:88}.semi-avatar-group .semi-avatar-item-start-9{z-index:91}.semi-avatar-group .semi-avatar-item-end-9{z-index:89}.semi-avatar-group .semi-avatar-item-start-10,.semi-avatar-group .semi-avatar-item-end-10{z-index:90}.semi-avatar-group .semi-avatar-item-start-11{z-index:89}.semi-avatar-group .semi-avatar-item-end-11{z-index:91}.semi-avatar-group .semi-avatar-item-start-12{z-index:88}.semi-avatar-group .semi-avatar-item-end-12{z-index:92}.semi-avatar-group .semi-avatar-item-start-13{z-index:87}.semi-avatar-group .semi-avatar-item-end-13{z-index:93}.semi-avatar-group .semi-avatar-item-start-14{z-index:86}.semi-avatar-group .semi-avatar-item-end-14{z-index:94}.semi-avatar-group .semi-avatar-item-start-15{z-index:85}.semi-avatar-group .semi-avatar-item-end-15{z-index:95}.semi-avatar-group .semi-avatar-item-start-16{z-index:84}.semi-avatar-group .semi-avatar-item-end-16{z-index:96}.semi-avatar-group .semi-avatar-item-start-17{z-index:83}.semi-avatar-group .semi-avatar-item-end-17{z-index:97}.semi-avatar-group .semi-avatar-item-start-18{z-index:82}.semi-avatar-group .semi-avatar-item-end-18{z-index:98}.semi-avatar-group .semi-avatar-item-start-19{z-index:81}.semi-avatar-group .semi-avatar-item-end-19{z-index:99}.semi-avatar-group .semi-avatar-item-start-20{z-index:80}.semi-avatar-group .semi-avatar-item-end-20{z-index:100}.semi-avatar-group .semi-avatar-item-more{background-color:rgba(var(--semi-grey-5),1)}.semi-avatar-amber{background-color:rgba(var(--semi-amber-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-blue{background-color:rgba(var(--semi-blue-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-cyan{background-color:rgba(var(--semi-cyan-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-green{background-color:rgba(var(--semi-green-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-grey{background-color:rgba(var(--semi-grey-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-indigo{background-color:rgba(var(--semi-indigo-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-light-blue{background-color:rgba(var(--semi-light-blue-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-light-green{background-color:rgba(var(--semi-light-green-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-lime{background-color:rgba(var(--semi-lime-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-orange{background-color:rgba(var(--semi-orange-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-pink{background-color:rgba(var(--semi-pink-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-purple{background-color:rgba(var(--semi-purple-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-red{background-color:rgba(var(--semi-red-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-teal{background-color:rgba(var(--semi-teal-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-violet{background-color:rgba(var(--semi-violet-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-yellow{background-color:rgba(var(--semi-yellow-3),1);color:rgba(var(--semi-white),1)}.semi-avatar-additionalBorder{border-style:solid;border-color:var(--semi-color-primary);display:inline-block;box-sizing:border-box;position:absolute;border-width:1.5px;top:-3.5px;left:-3.5px}.semi-avatar-additionalBorder-extra-extra-small{width:27px;height:27px}.semi-avatar-additionalBorder-extra-small{width:31px;height:31px}.semi-avatar-additionalBorder-small{width:39px;height:39px}.semi-avatar-additionalBorder-default{width:47px;height:47px}.semi-avatar-additionalBorder-medium{width:55px;height:55px}.semi-avatar-additionalBorder-large{width:79px;height:79px}.semi-avatar-additionalBorder-extra-large{width:135px;height:135px}.semi-avatar-square.semi-avatar-additionalBorder-extra_extra_small,.semi-avatar-square.semi-avatar-additionalBorder-extra_small,.semi-avatar-square.semi-avatar-additionalBorder-small,.semi-avatar-square.semi-avatar-additionalBorder-default,.semi-avatar-square.semi-avatar-additionalBorder-medium{border-radius:3px}.semi-avatar-square.semi-avatar-additionalBorder-large{border-radius:6px}.semi-avatar-additionalBorder-circle{border-radius:var(--semi-border-radius-circle)}.semi-avatar-additionalBorder-animated{animation:.8s linear infinite semi-avatar-additionalBorder}.semi-avatar-animated{animation:1s linear infinite semi-avatar-content}@keyframes semi-avatar-additionalBorder{0%{opacity:1;transform:scale(1)}to{border-width:0;opacity:0;transform:scale(1.15)}}@keyframes semi-avatar-content{0%{transform:scale(1)}50%{transform:scale(.9)}to{transform:scale(1)}}.semi-rtl .semi-avatar,.semi-portal-rtl .semi-avatar{direction:rtl}.semi-rtl .semi-avatar-extra-extra-small .semi-avatar-content,.semi-portal-rtl .semi-avatar-extra-extra-small .semi-avatar-content,.semi-rtl .semi-avatar-extra-small .semi-avatar-content,.semi-portal-rtl .semi-avatar-extra-small .semi-avatar-content{transform:scale(.8)}.semi-rtl .semi-avatar-hover,.semi-portal-rtl .semi-avatar-hover{left:auto;right:0}.semi-rtl .semi-avatar-group,.semi-portal-rtl .semi-avatar-group{direction:rtl}.semi-rtl .semi-avatar-group .semi-avatar:first-child,.semi-portal-rtl .semi-avatar-group .semi-avatar:first-child{margin-left:auto;margin-right:0}.semi-rtl .semi-avatar-group .semi-avatar-extra-large,.semi-portal-rtl .semi-avatar-group .semi-avatar-extra-large{margin-left:auto;margin-right:-32px}.semi-rtl .semi-avatar-group .semi-avatar-large,.semi-portal-rtl .semi-avatar-group .semi-avatar-large{margin-left:auto;margin-right:-18px}.semi-rtl .semi-avatar-group .semi-avatar-medium,.semi-rtl .semi-avatar-group .semi-avatar-small,.semi-portal-rtl .semi-avatar-group .semi-avatar-medium,.semi-portal-rtl .semi-avatar-group .semi-avatar-small{margin-left:auto;margin-right:-12px}.semi-rtl .semi-avatar-group .semi-avatar-extra-small,.semi-portal-rtl .semi-avatar-group .semi-avatar-extra-small{margin-left:auto;margin-right:-10px}.semi-rtl .semi-avatar-group .semi-avatar-extra-extra-small,.semi-portal-rtl .semi-avatar-group .semi-avatar-extra-extra-small{margin-left:auto;margin-right:-4px}.semi-backtop{position:fixed;box-sizing:border-box;right:100px;bottom:50px;z-index:10;cursor:pointer;text-align:center;overflow:hidden}.semi-rtl .semi-backtop,.semi-portal-rtl .semi-backtop{direction:rtl;right:auto;left:100px}.semi-badge{position:relative;display:inline-block}.semi-badge-dot{box-sizing:border-box;width:8px;height:8px;border-radius:var(--semi-border-radius-circle);background-color:var(--semi-color-bg-1);border:1px var(--semi-color-bg-1) solid;z-index:1}.semi-badge-count{box-sizing:border-box;height:18px;min-width:18px;border-radius:9px;padding:0 4px;background-color:var(--semi-color-bg-1);border:1px var(--semi-color-bg-1) solid;z-index:1;text-align:center;font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;color:var(--semi-color-bg-2)}.semi-badge-rightTop{position:absolute;top:0;right:0;transform:translate(50%,-50%);transform-origin:100% 0%}.semi-badge-rightBottom{position:absolute;right:0;bottom:0;transform:translate(50%,50%);transform-origin:100% 0%}.semi-badge-leftTop{position:absolute;top:0;left:0;transform:translate(-50%,-50%);transform-origin:100% 0%}.semi-badge-leftBottom{position:absolute;bottom:0;left:0;transform:translate(-50%,50%);transform-origin:100% 0%}.semi-badge-custom{display:flex}.semi-badge-block{position:static;display:inline-block}.semi-badge-primary.semi-badge-solid{background-color:var(--semi-color-primary)}.semi-badge-primary.semi-badge-light{background-color:var(--semi-color-primary-light-default);color:var(--semi-color-primary)}.semi-badge-primary.semi-badge-inverted{color:var(--semi-color-primary)}.semi-badge-secondary.semi-badge-solid{background-color:var(--semi-color-secondary)}.semi-badge-secondary.semi-badge-light{background-color:var(--semi-color-secondary-light-default);color:var(--semi-color-secondary)}.semi-badge-secondary.semi-badge-inverted{color:var(--semi-color-secondary)}.semi-badge-tertiary.semi-badge-solid{background-color:var(--semi-color-tertiary)}.semi-badge-tertiary.semi-badge-light{background-color:var(--semi-color-tertiary-light-default);color:var(--semi-color-tertiary)}.semi-badge-tertiary.semi-badge-inverted{color:var(--semi-color-tertiary)}.semi-badge-danger.semi-badge-solid{background-color:var(--semi-color-danger)}.semi-badge-danger.semi-badge-light{background-color:var(--semi-color-danger-light-default);color:var(--semi-color-danger)}.semi-badge-danger.semi-badge-inverted{color:var(--semi-color-danger)}.semi-badge-warning.semi-badge-solid{background-color:var(--semi-color-warning)}.semi-badge-warning.semi-badge-light{background-color:var(--semi-color-warning-light-default);color:var(--semi-color-warning)}.semi-badge-warning.semi-badge-inverted{color:var(--semi-color-warning)}.semi-badge-success.semi-badge-solid{background-color:var(--semi-color-success)}.semi-badge-success.semi-badge-light{background-color:var(--semi-color-success-light-default);color:var(--semi-color-success)}.semi-badge-success.semi-badge-inverted{color:var(--semi-color-success)}.semi-rtl .semi-badge,.semi-portal-rtl .semi-badge{direction:rtl}.semi-banner{padding:12px}.semi-banner-content-wrapper{display:flex;flex-direction:row}.semi-banner-description{margin:0}.semi-banner .semi-banner-content-wrapper .semi-banner-content{display:flex;flex:1}.semi-banner-in-container{border-radius:var(--semi-border-radius-small)}.semi-banner-in-container .semi-banner-content-wrapper .semi-banner-content-body{flex:1}.semi-banner-in-container .semi-banner-content-wrapper .semi-banner-content-body .semi-banner-title+.semi-banner-description{margin-top:2px}.semi-banner-full .semi-banner-content-wrapper .semi-banner-content{justify-content:center}.semi-banner-full .semi-banner-content-wrapper .semi-banner-icon,.semi-banner-full .semi-banner-content-wrapper .semi-banner-content-body{display:flex;align-items:center}.semi-banner-close{margin-left:12px;height:24px;width:24px}.semi-banner-extra{margin-top:8px}.semi-banner-icon{display:flex;margin-right:12px}.semi-banner-info{background-color:var(--semi-color-info-light-default);color:var(--semi-color-info)}.semi-banner-info.semi-banner-bordered{border:1px solid var(--semi-color-info)}.semi-banner-warning{background-color:var(--semi-color-warning-light-default);color:var(--semi-color-warning)}.semi-banner-warning.semi-banner-bordered{border:1px solid var(--semi-color-warning)}.semi-banner-success{background-color:var(--semi-color-success-light-default);color:var(--semi-color-success)}.semi-banner-success.semi-banner-bordered{border:1px solid var(--semi-color-success)}.semi-banner-danger{background-color:var(--semi-color-danger-light-default);color:var(--semi-color-danger)}.semi-banner-danger.semi-banner-bordered{border:1px solid var(--semi-color-danger)}.semi-rtl .semi-banner,.semi-portal-rtl .semi-banner{direction:rtl}.semi-rtl .semi-banner-close,.semi-portal-rtl .semi-banner-close{margin-left:0;margin-right:12px;height:24px;width:24px}.semi-rtl .semi-banner-icon,.semi-portal-rtl .semi-banner-icon{margin-right:0;margin-left:12px}.semi-light-scrollbar::-webkit-scrollbar-thumb,.semi-light-scrollbar *::-webkit-scrollbar-thumb{border-radius:6px;background:#0000;transition:all 1s}.semi-breadcrumb{overflow:hidden}.semi-breadcrumb-wrapper{display:flex;flex-wrap:wrap}.semi-breadcrumb-wrapper-loose{line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px}.semi-breadcrumb-wrapper-compact{line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px}.semi-breadcrumb-item-wrap{display:inline-flex;align-items:center;margin:4px 4px 4px 0}.semi-breadcrumb-item{display:inline-flex;align-items:center;column-gap:4px;margin-right:4px;color:var(--semi-color-text-2);font-weight:400}.semi-breadcrumb-item .semi-typography{color:inherit}.semi-breadcrumb-item-title-inline{display:inline-flex}.semi-breadcrumb-item-active{color:var(--semi-color-text-0);font-weight:600}.semi-breadcrumb-item-active:hover,.semi-breadcrumb-item-active:active{border:none;margin-bottom:0;color:var(--semi-color-text-0);cursor:default}.semi-breadcrumb-item-active .semi-typography{font-weight:600}.semi-breadcrumb-item-icon{margin-bottom:-1px}.semi-breadcrumb-item-more svg{vertical-align:middle}.semi-breadcrumb-item-link{text-decoration:inherit;transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-breadcrumb-item-link:hover{color:var(--semi-color-link);cursor:pointer}.semi-breadcrumb-item-link:active{color:var(--semi-color-link-hover);cursor:pointer}.semi-breadcrumb-collapse{display:inline-flex;flex-shrink:0}.semi-breadcrumb-separator{display:flex;color:var(--semi-color-text-2)}.semi-breadcrumb-restItem{color:var(--semi-color-text-2);margin-right:8px}.semi-rtl .semi-breadcrumb-wrapper,.semi-portal-rtl .semi-breadcrumb-wrapper{direction:rtl}.semi-rtl .semi-breadcrumb-item-wrap,.semi-portal-rtl .semi-breadcrumb-item-wrap,.semi-rtl .semi-breadcrumb-item,.semi-portal-rtl .semi-breadcrumb-item{margin-right:0;margin-left:4px}.semi-rtl .semi-breadcrumb-restItem,.semi-portal-rtl .semi-breadcrumb-restItem{margin-right:0;margin-left:8px}.semi-rtl .semi-breadcrumb-item-icon+.semi-breadcrumb-item-title,.semi-portal-rtl .semi-breadcrumb-item-icon+.semi-breadcrumb-item-title{margin-left:0;margin-right:4px;display:inline-block}.semi-button-split{display:inline-block}.semi-button-split .semi-button{border-radius:0;margin-right:1px}.semi-button-split .semi-button-first{border-top-left-radius:var(--semi-border-radius-small);border-bottom-left-radius:var(--semi-border-radius-small)}.semi-button-split .semi-button-last{border-top-right-radius:var(--semi-border-radius-small);border-bottom-right-radius:var(--semi-border-radius-small);margin-right:unset}.semi-button-split:hover .semi-button-borderless:active{background-color:var(--semi-color-fill-1)}.semi-button{--semi-button-colorful-multiple-fill-0: rgba(var(--semi-ai-general-5-3));--semi-button-colorful-multiple-fill-1: rgba(var(--semi-ai-general-5-2));--semi-button-colorful-multiple-fill-2: rgba(var(--semi-ai-general-5-1));--semi-button-colorful-multiple-fill-3: rgba(var(--semi-ai-general-5-0));--semi-button-colorful-disabled-fill: var(--semi-color-disabled-text);--semi-button-colorful-fill-primary: var(--semi-color-ai-purple);--semi-button-colorful-fill-secondary: var(--semi-color-text-0)}.semi-button{box-shadow:none;height:32px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;-webkit-user-select:none;user-select:none;border:0 rgba(0,0,0,0) solid;border-radius:var(--semi-border-radius-small);padding:6px 12px;font-size:14px;line-height:20px;font-weight:600;outline:none;vertical-align:middle;white-space:nowrap}.semi-button.semi-button-primary:focus-visible,.semi-button.semi-button-secondary:focus-visible,.semi-button.semi-button-tertiary:focus-visible,.semi-button.semi-button-warning:focus-visible,.semi-button.semi-button-danger:focus-visible{outline:2px solid var(--semi-color-primary-light-active)}.semi-button-content{display:flex;align-items:center}.semi-button-danger{background-color:var(--semi-color-danger);color:rgba(var(--semi-white),1);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-button-danger-disabled{background-color:var(--semi-color-disabled-bg)}.semi-button-danger-disabled.semi-button-outline{background-color:#0000;border:1px solid var(--semi-color-border)}.semi-button-danger-disabled.semi-button-light{background-color:var(--semi-color-fill-0)}.semi-button-danger:hover{background-color:var(--semi-color-danger-hover)}.semi-button-danger:active{background-color:var(--semi-color-danger-active)}.semi-button-danger.semi-button-outline{background-color:#0000;border:1px solid var(--semi-color-danger)}.semi-button-danger.semi-button-light,.semi-button-danger.semi-button-outline,.semi-button-danger.semi-button-borderless{color:var(--semi-color-danger)}.semi-button-danger:not(.semi-button-borderless):not(.semi-button-light):focus-visible{outline:2px solid var(--semi-color-danger-light-active)}.semi-button-warning{background-color:var(--semi-color-warning);color:rgba(var(--semi-white),1);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-button-warning-disabled{background-color:var(--semi-color-disabled-bg)}.semi-button-warning-disabled.semi-button-outline{background-color:#0000;border:1px solid var(--semi-color-border)}.semi-button-warning-disabled.semi-button-light{background-color:var(--semi-color-fill-0)}.semi-button-warning:hover{background-color:var(--semi-color-warning-hover)}.semi-button-warning:active{background-color:var(--semi-color-warning-active)}.semi-button-warning.semi-button-outline{background-color:#0000;border:1px solid var(--semi-color-warning)}.semi-button-warning.semi-button-light,.semi-button-warning.semi-button-outline,.semi-button-warning.semi-button-borderless{color:var(--semi-color-warning)}.semi-button-warning:not(.semi-button-borderless):not(.semi-button-light):focus-visible{outline:2px solid var(--semi-color-warning-light-active)}.semi-button-tertiary{background-color:var(--semi-color-tertiary);color:rgba(var(--semi-white),1);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-button-tertiary.semi-button-colorful.semi-button-solid{background:var(--semi-ai-general-0)}.semi-button-tertiary.semi-button-colorful.semi-button-solid:hover{background:var(--semi-ai-general-1)}.semi-button-tertiary.semi-button-colorful.semi-button-solid:active{background:var(--semi-ai-general-2)}.semi-button-tertiary.semi-button-colorful.semi-button-solid .semi-button-content-right,.semi-button-tertiary.semi-button-colorful.semi-button-solid .semi-button-content:not(:has(>.semi-button-content-right)){background:var(--semi-color-ai-general);-webkit-background-clip:text;background-clip:text;color:#0000}.semi-button-tertiary-disabled{background-color:var(--semi-color-disabled-bg)}.semi-button-tertiary-disabled.semi-button-outline{background-color:#0000;border:1px solid var(--semi-color-border)}.semi-button-tertiary-disabled.semi-button-light{background-color:var(--semi-color-fill-0)}.semi-button-tertiary:hover{background-color:var(--semi-color-tertiary-hover)}.semi-button-tertiary:active{background-color:var(--semi-color-tertiary-active)}.semi-button-tertiary.semi-button-outline{background-color:#0000;border:1px solid var(--semi-color-border)}.semi-button-tertiary.semi-button-light,.semi-button-tertiary.semi-button-outline,.semi-button-tertiary.semi-button-borderless{color:var(--semi-color-text-1)}.semi-button-primary{background-color:var(--semi-color-primary);color:rgba(var(--semi-white),1);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-button-primary.semi-button-colorful.semi-button-solid{background:var(--semi-color-ai-general)}.semi-button-primary.semi-button-colorful.semi-button-solid:not(.semi-button-borderless):not(.semi-button-light):not(.semi-button-outline):hover{background:var(--semi-color-ai-general-hover)}.semi-button-primary.semi-button-colorful.semi-button-solid:not(.semi-button-borderless):not(.semi-button-light):not(.semi-button-outline):active{background:var(--semi-color-ai-general-active)}.semi-button-primary.semi-button-colorful.semi-button-light .semi-button-content-right,.semi-button-primary.semi-button-colorful.semi-button-light .semi-button-content:not(:has(>.semi-button-content-right)){background:var(--semi-color-ai-general);-webkit-background-clip:text;background-clip:text;color:#0000}.semi-button-primary.semi-button-colorful.semi-button-outline{color:var(--semi-color-ai-purple);border-color:var(--semi-color-ai-purple)}.semi-button-primary.semi-button-colorful.semi-button-borderless .semi-button-content-right,.semi-button-primary.semi-button-colorful.semi-button-borderless .semi-button-content:not(:has(>.semi-button-content-right)){background:var(--semi-color-ai-general);-webkit-background-clip:text;background-clip:text;color:#0000}.semi-button-primary-disabled{background-color:var(--semi-color-disabled-bg)}.semi-button-primary-disabled.semi-button-light{background:var(--semi-color-fill-0)}.semi-button-primary-disabled.semi-button-outline{background-color:#0000;border:1px solid var(--semi-color-border)}.semi-button-primary:not(.semi-button-borderless):not(.semi-button-light):not(.semi-button-outline):hover{background-color:var(--semi-color-primary-hover)}.semi-button-primary.semi-button-outline{background-color:#0000;border:1px solid var(--semi-color-border)}.semi-button-primary:not(.semi-button-borderless):not(.semi-button-light):not(.semi-button-outline):active{background-color:var(--semi-color-primary-active)}.semi-button-primary.semi-button-light,.semi-button-primary.semi-button-outline,.semi-button-primary.semi-button-borderless{color:var(--semi-color-primary)}.semi-button-secondary{background-color:var(--semi-color-secondary);outline-color:var(--semi-color-secondary);color:rgba(var(--semi-white),1);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-button-secondary-disabled{background-color:var(--semi-color-disabled-bg)}.semi-button-secondary-disabled.semi-button-outline{background-color:#0000;border:1px solid var(--semi-color-border)}.semi-button-secondary-disabled.semi-button-light{background-color:var(--semi-color-fill-0)}.semi-button-secondary.semi-button-outline{background-color:#0000;border:1px solid var(--semi-color-border)}.semi-button-secondary:hover{background-color:var(--semi-color-secondary-hover)}.semi-button-secondary:active{background-color:var(--semi-color-secondary-active)}.semi-button-secondary.semi-button-light,.semi-button-secondary.semi-button-outline,.semi-button-secondary.semi-button-borderless{color:var(--semi-color-secondary)}.semi-button-disabled{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-button-disabled:not(.semi-button-borderless):not(.semi-button-light):not(.semi-button-outline):hover{color:var(--semi-color-disabled-text)}.semi-button-disabled.semi-button-light,.semi-button-disabled.semi-button-borderless,.semi-button-disabled.semi-button-outline{color:var(--semi-color-disabled-text)}.semi-button-borderless{background-color:#0000;border:0 rgba(0,0,0,0) solid;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-button-borderless:not(.semi-button-disabled):hover{background-color:var(--semi-color-fill-0);border:0 rgba(0,0,0,0) solid}.semi-button-borderless:not(.semi-button-disabled):active{background-color:var(--semi-color-fill-1);border:0 rgba(0,0,0,0) solid}.semi-button-outline{background-color:#0000}.semi-button-outline:not(.semi-button-disabled):hover{background-color:var(--semi-color-fill-0)}.semi-button-outline:not(.semi-button-disabled):active{background-color:var(--semi-color-fill-1)}.semi-button-light{background-color:var(--semi-color-fill-0);border:0 rgba(0,0,0,0) solid;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-button-light:not(.semi-button-disabled):hover{background-color:var(--semi-color-fill-1);border:0 rgba(0,0,0,0) solid}.semi-button-light:not(.semi-button-disabled):active{background-color:var(--semi-color-fill-2);border:0 rgba(0,0,0,0) solid}.semi-button-size-small{height:24px;padding:2px 12px;font-size:14px;line-height:20px;font-weight:600}.semi-button-size-large{height:40px;padding:10px 16px;font-size:14px;line-height:20px;font-weight:600}.semi-button-block{width:100%}.semi-button-group{display:flex;flex-wrap:wrap}.semi-button-group>.semi-button{margin:0;padding-left:0;padding-right:0;border-radius:0}.semi-button-group>.semi-button .semi-button-content{padding-left:12px;padding-right:12px}.semi-button-group>.semi-button-size-large .semi-button-content{padding-left:16px;padding-right:16px}.semi-button-group>.semi-button-size-small .semi-button-content{padding-left:12px;padding-right:12px}.semi-button-group>.semi-button.semi-button-with-icon-only{padding-left:0;padding-right:0}.semi-button-group>.semi-button.semi-button-with-icon-only .semi-button-content{padding-left:8px;padding-right:8px}.semi-button-group>.semi-button.semi-button-with-icon-only.semi-button-size-small .semi-button-content{padding-left:4px;padding-right:4px}.semi-button-group>.semi-button.semi-button-with-icon-only.semi-button-size-large .semi-button-content{padding-left:12px;padding-right:12px}.semi-button-group>.semi-button:first-child{border-top-left-radius:var(--semi-border-radius-small);border-bottom-left-radius:var(--semi-border-radius-small)}.semi-button-group>.semi-button:last-child{border-top-right-radius:var(--semi-border-radius-small);border-bottom-right-radius:var(--semi-border-radius-small)}.semi-button-group>.semi-button-outline:not(:last-child){border-right-color:#0000;margin-right:-1px}.semi-button-group-line{display:inline-flex;align-items:center;background-color:var(--semi-color-border)}.semi-button-group-line-primary{background-color:var(--semi-color-primary)}.semi-button-group-line-secondary{background-color:var(--semi-color-secondary)}.semi-button-group-line-tertiary{background-color:var(--semi-color-tertiary)}.semi-button-group-line-warning{background-color:var(--semi-color-warning)}.semi-button-group-line-danger{background-color:var(--semi-color-danger)}.semi-button-group-line-disabled{background-color:var(--semi-color-disabled-bg)}.semi-button-group-line-light{background-color:var(--semi-color-fill-0)}.semi-button-group-line-borderless{background-color:#0000}.semi-button-group-line:before{display:block;content:"";width:1px;height:20px;background-color:var(--semi-color-border)}.semi-calendar-day ul,.semi-calendar-day li,.semi-calendar-week ul,.semi-calendar-week li,.semi-calendar-month ul,.semi-calendar-month li{padding:0;margin:0;list-style:none}.semi-calendar-day-sticky-top,.semi-calendar-week-sticky-top,.semi-calendar-month-sticky-top{position:sticky;position:-webkit-sticky;top:0;left:0;right:0;background-color:var(--semi-color-bg-2);z-index:20}.semi-calendar-day .semi-calendar-weekend,.semi-calendar-week .semi-calendar-weekend,.semi-calendar-month .semi-calendar-weekend{background-color:var(--semi-color-fill-0)}.semi-calendar-day .semi-calendar-event-items,.semi-calendar-week .semi-calendar-event-items,.semi-calendar-month .semi-calendar-event-items{pointer-events:none}.semi-calendar-day .semi-calendar-event-items>*,.semi-calendar-week .semi-calendar-event-items>*,.semi-calendar-month .semi-calendar-event-items>*{pointer-events:auto}.semi-calendar-day .semi-calendar-event-items .semi-calendar-event-day,.semi-calendar-week .semi-calendar-event-items .semi-calendar-event-day,.semi-calendar-month .semi-calendar-event-items .semi-calendar-event-day{position:absolute;left:0;right:0;z-index:5;overflow:hidden}.semi-calendar-day .semi-calendar-custom-container,.semi-calendar-week .semi-calendar-custom-container,.semi-calendar-month .semi-calendar-custom-container{position:absolute;top:0;right:0;bottom:0;left:0}.semi-calendar-day,.semi-calendar-week{overflow:auto}.semi-calendar-day-sticky-left,.semi-calendar-week-sticky-left{position:sticky;position:-webkit-sticky;left:0;background-color:var(--semi-color-bg-2);z-index:10}.semi-calendar-day .semi-calendar-tag,.semi-calendar-week .semi-calendar-tag{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;min-width:70px;color:var(--semi-color-text-2)}.semi-calendar-day-scroll,.semi-calendar-week-scroll{display:flex;flex:1 1 auto;position:relative}.semi-calendar-day .semi-calendar-grid,.semi-calendar-week .semi-calendar-grid{display:flex;align-items:flex-start;flex:1 1 auto;position:relative}.semi-calendar-day .semi-calendar-grid-skeleton,.semi-calendar-week .semi-calendar-grid-skeleton{position:relative;box-sizing:border-box}.semi-calendar-day .semi-calendar-grid-skeleton li,.semi-calendar-week .semi-calendar-grid-skeleton li{height:30px}.semi-calendar-day .semi-calendar-grid-skeleton li:last-child,.semi-calendar-day .semi-calendar-grid-skeleton li:nth-last-child(2),.semi-calendar-week .semi-calendar-grid-skeleton li:last-child,.semi-calendar-week .semi-calendar-grid-skeleton li:nth-last-child(2){height:0}.semi-calendar-day .semi-calendar-grid-skeleton-row-line:after,.semi-calendar-week .semi-calendar-grid-skeleton-row-line:after{content:"";border-bottom:1px solid var(--semi-color-border);position:absolute;left:0;right:0;z-index:3;pointer-events:none}.semi-calendar-day .semi-calendar-grid-skeleton-row-line:first-child:after,.semi-calendar-week .semi-calendar-grid-skeleton-row-line:first-child:after{border:0}.semi-calendar-day .semi-calendar-grid-content,.semi-calendar-week .semi-calendar-grid-content{flex:1 0 auto;min-width:130px;height:100%}.semi-calendar-day .semi-calendar-grid-curr-circle,.semi-calendar-week .semi-calendar-grid-curr-circle{background:var(--semi-color-danger);border-radius:var(--semi-border-radius-circle);content:"";position:absolute;height:8px;width:8px;margin-top:-4px;z-index:8}.semi-calendar-day .semi-calendar-grid-curr-line,.semi-calendar-week .semi-calendar-grid-curr-line{position:absolute;left:0;right:0;z-index:8;border-top:1px solid var(--semi-color-danger);pointer-events:none}.semi-calendar-day .semi-calendar-all-day,.semi-calendar-week .semi-calendar-all-day{display:flex;flex:1 1 auto;border-bottom:1px solid var(--semi-color-border)}.semi-calendar-day .semi-calendar-all-day .semi-calendar-tag,.semi-calendar-week .semi-calendar-all-day .semi-calendar-tag{text-align:right;padding-right:8px}.semi-calendar-day .semi-calendar-all-day .semi-calendar-tag span,.semi-calendar-week .semi-calendar-all-day .semi-calendar-tag span{line-height:26px}.semi-calendar-day .semi-calendar-all-day-content,.semi-calendar-week .semi-calendar-all-day-content{display:flex;flex:1 0 auto;height:100%;min-height:26px;min-width:130px}.semi-calendar-day .semi-calendar-all-day .semi-calendar-event-items,.semi-calendar-week .semi-calendar-all-day .semi-calendar-event-items{width:100%}.semi-calendar-day .semi-calendar-time,.semi-calendar-week .semi-calendar-time{height:auto;display:flex;flex:none;align-items:flex-start;padding-right:8px}.semi-calendar-day .semi-calendar-time-item,.semi-calendar-week .semi-calendar-time-item{position:relative;height:60px;text-align:right}.semi-calendar-day .semi-calendar-time-item span,.semi-calendar-week .semi-calendar-time-item span{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;display:block;position:relative;top:-10px;color:var(--semi-color-text-2)}.semi-calendar-day .semi-calendar-time .semi-calendar-time-items,.semi-calendar-week .semi-calendar-time .semi-calendar-time-items{position:relative;min-width:70px;background-color:var(--semi-color-bg-2);box-sizing:border-box;margin-left:auto}.semi-calendar-week .semi-calendar-today .semi-calendar-today-date,.semi-calendar-month .semi-calendar-today .semi-calendar-today-date{width:24px;height:24px;line-height:24px;text-align:center;border-radius:var(--semi-border-radius-circle);background-color:var(--semi-color-primary);color:var(--semi-color-bg-1)}.semi-calendar-day-scroll-wrapper{height:calc(100% - 28px)}.semi-calendar-week{position:relative;display:grid}.semi-calendar-week-scroll-wrapper{height:calc(100% - 55px)}.semi-calendar-week .semi-calendar-grid-skeleton-row-line:after{left:0}.semi-calendar-week .semi-calendar-grid-skeleton li{border-right:1px solid var(--semi-color-border)}.semi-calendar-week .semi-calendar-grid:last-child .semi-calendar-grid-content li{border-right:0}.semi-calendar-week-header,.semi-calendar-week-grid-row{display:flex;align-items:flex-start;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2)}.semi-calendar-week-header{flex:1 1 auto;border-bottom:1px solid var(--semi-color-border)}.semi-calendar-week-grid,.semi-calendar-week-grid-row{display:flex;flex:1 0 auto}.semi-calendar-week-grid-row li{display:flex;flex:1 1 0;border-right:1px solid rgba(0,0,0,0);height:auto;box-sizing:border-box;justify-content:center;align-items:center}.semi-calendar-week-grid-row li>span{display:flex;align-items:center;justify-content:center;line-height:26px}.semi-calendar-week-grid-row li>span:last-child{padding:0 4px}.semi-calendar-week .semi-calendar-all-day{font-size:26px}.semi-calendar-week .semi-calendar-all-day-content{padding-left:0;position:relative}.semi-calendar-week .semi-calendar-all-day-content .semi-calendar-all-day-skeleton{display:flex;flex:1 1 auto}.semi-calendar-week .semi-calendar-all-day-content .semi-calendar-all-day-skeleton li{flex:1 1 auto;min-width:130px;box-sizing:border-box;border-right:1px solid var(--semi-color-border)}.semi-calendar-week .semi-calendar-all-day-content .semi-calendar-all-day-skeleton li:last-child{border-right:1px solid rgba(0,0,0,0)}.semi-calendar-week .semi-calendar-all-day .semi-calendar-event-items,.semi-calendar-week .semi-calendar-all-day .semi-calendar-event-items .semi-calendar-event-allday{position:absolute}.semi-calendar-week .semi-calendar-all-day .semi-calendar-event-items .semi-calendar-event-allday>*{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-calendar-week .semi-calendar-week-tag{text-align:right;line-height:26px}.semi-calendar-week .semi-calendar-week-tag:first-child{padding-right:8px}.semi-calendar-month{display:flex;flex-direction:column;height:100%;overflow:hidden;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-calendar-month-grid-wrapper{height:calc(100% - 27px)}.semi-calendar-month-week,.semi-calendar-month-skeleton{height:100%}.semi-calendar-month-header{display:flex;flex:1 1 auto;align-items:flex-start;color:var(--semi-color-text-2)}.semi-calendar-month-grid{flex:1 1 auto;box-sizing:border-box}.semi-calendar-month-grid li{line-height:26px}.semi-calendar-month-grid-row,.semi-calendar-month-skeleton{display:flex;box-sizing:border-box}.semi-calendar-month-grid-row li,.semi-calendar-month-skeleton li{flex:1;white-space:nowrap;text-align:right;padding-right:8px;box-sizing:border-box;border-bottom:1px solid var(--semi-color-border);color:var(--semi-color-text-2)}.semi-calendar-month-grid-row li span,.semi-calendar-month-skeleton li span{display:inline-block;text-align:right}.semi-calendar-month-skeleton{position:absolute;overflow:hidden;left:0;right:0}.semi-calendar-month-skeleton li{position:relative;overflow:hidden;border-right:1px solid var(--semi-color-border);height:100%;padding-top:4px}.semi-calendar-month-skeleton li span{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-calendar-month-skeleton li:last-child{border-right:none}.semi-calendar-month-skeleton .semi-calendar-month-same{color:var(--semi-color-text-0)}.semi-calendar-month-skeleton .semi-calendar-month-event-card-wrapper{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;display:block;position:absolute;right:8px;padding-top:2px;-webkit-user-select:none;user-select:none}.semi-calendar-month-skeleton .semi-calendar-month-event-card-wrapper:hover{cursor:pointer}.semi-calendar-month .semi-calendar-event-items{position:absolute;top:31px;right:0;bottom:20px;left:0;overflow:hidden}.semi-calendar-month-grid-col{display:flex;flex-direction:column;flex:1;height:100%}.semi-calendar-month-weekrow{flex:1 1 auto;position:relative}.semi-calendar-month-weekrow .semi-calendar-event-items .semi-calendar-event-month{position:absolute;font-size:24px;height:1em;overflow:hidden}.semi-calendar-month-weekrow .semi-calendar-event-items .semi-calendar-event-month>*{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-calendar-month-date{position:absolute;right:4px;z-index:3}.semi-calendar-month-event-card{width:220px}.semi-calendar-month-event-card ul,.semi-calendar-month-event-card li{padding:0;margin:0;list-style:none}.semi-calendar-month-event-card-close{margin-right:-4px}.semi-calendar-month-event-card-content{padding:12px 0}.semi-calendar-month-event-card-header{display:flex;flex-direction:row;margin:12px 20px}.semi-calendar-month-event-card-header-info{display:flex;flex:1;flex-direction:column;align-items:center}.semi-calendar-month-event-card-header-info-weekday{color:var(--semi-color-text-2)}.semi-calendar-month-event-card-header-info-date{font-size:20px;line-height:28px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;margin-top:4px}.semi-calendar-month-event-card-body{padding:0 16px}.semi-calendar-month-event-card-body li{height:24px}.semi-rtl .semi-calendar-day,.semi-rtl .semi-calendar-week,.semi-rtl .semi-calendar-month,.semi-portal-rtl .semi-calendar-day,.semi-portal-rtl .semi-calendar-week,.semi-portal-rtl .semi-calendar-month{direction:rtl}.semi-rtl .semi-calendar-day-sticky-left,.semi-rtl .semi-calendar-week-sticky-left,.semi-portal-rtl .semi-calendar-day-sticky-left,.semi-portal-rtl .semi-calendar-week-sticky-left{left:auto;right:0}.semi-rtl .semi-calendar-day .semi-calendar-all-day .semi-calendar-tag,.semi-rtl .semi-calendar-week .semi-calendar-all-day .semi-calendar-tag,.semi-portal-rtl .semi-calendar-day .semi-calendar-all-day .semi-calendar-tag,.semi-portal-rtl .semi-calendar-week .semi-calendar-all-day .semi-calendar-tag{text-align:left;padding-right:0;padding-left:8px}.semi-rtl .semi-calendar-day .semi-calendar-time,.semi-rtl .semi-calendar-week .semi-calendar-time,.semi-portal-rtl .semi-calendar-day .semi-calendar-time,.semi-portal-rtl .semi-calendar-week .semi-calendar-time{padding-right:0;padding-left:8px}.semi-rtl .semi-calendar-day .semi-calendar-time-item,.semi-rtl .semi-calendar-week .semi-calendar-time-item,.semi-portal-rtl .semi-calendar-day .semi-calendar-time-item,.semi-portal-rtl .semi-calendar-week .semi-calendar-time-item{text-align:left}.semi-rtl .semi-calendar-day .semi-calendar-time .semi-calendar-time-items,.semi-rtl .semi-calendar-week .semi-calendar-time .semi-calendar-time-items,.semi-portal-rtl .semi-calendar-day .semi-calendar-time .semi-calendar-time-items,.semi-portal-rtl .semi-calendar-week .semi-calendar-time .semi-calendar-time-items{margin-left:0;margin-right:auto}.semi-rtl .semi-calendar-week .semi-calendar-grid-skeleton-row-line:after,.semi-portal-rtl .semi-calendar-week .semi-calendar-grid-skeleton-row-line:after{left:0;right:0}.semi-rtl .semi-calendar-week .semi-calendar-grid-skeleton li,.semi-portal-rtl .semi-calendar-week .semi-calendar-grid-skeleton li{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-rtl .semi-calendar-week .semi-calendar-grid:last-child .semi-calendar-grid-content li,.semi-portal-rtl .semi-calendar-week .semi-calendar-grid:last-child .semi-calendar-grid-content li{border-left:0}.semi-rtl .semi-calendar-week .semi-calendar-all-day-content,.semi-portal-rtl .semi-calendar-week .semi-calendar-all-day-content{padding-left:auto;padding-right:0}.semi-rtl .semi-calendar-week .semi-calendar-all-day-content .semi-calendar-all-day-skeleton li,.semi-portal-rtl .semi-calendar-week .semi-calendar-all-day-content .semi-calendar-all-day-skeleton li{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-rtl .semi-calendar-week .semi-calendar-all-day-content .semi-calendar-all-day-skeleton li:last-child,.semi-portal-rtl .semi-calendar-week .semi-calendar-all-day-content .semi-calendar-all-day-skeleton li:last-child{border-left:1px solid rgba(0,0,0,0)}.semi-rtl .semi-calendar-week .semi-rtl .semi-calendar-week-tag,.semi-rtl .semi-calendar-week .semi-portal-rtl .semi-calendar-week-tag,.semi-portal-rtl .semi-calendar-week .semi-rtl .semi-calendar-week-tag,.semi-portal-rtl .semi-calendar-week .semi-portal-rtl .semi-calendar-week-tag{text-align:left}.semi-rtl .semi-calendar-week .semi-rtl .semi-calendar-week-tag:first-child,.semi-rtl .semi-calendar-week .semi-portal-rtl .semi-calendar-week-tag:first-child,.semi-portal-rtl .semi-calendar-week .semi-rtl .semi-calendar-week-tag:first-child,.semi-portal-rtl .semi-calendar-week .semi-portal-rtl .semi-calendar-week-tag:first-child{padding-right:auto;padding-left:8px}.semi-rtl .semi-calendar-month-grid-row li,.semi-rtl .semi-calendar-month-skeleton li,.semi-portal-rtl .semi-calendar-month-grid-row li,.semi-portal-rtl .semi-calendar-month-skeleton li{text-align:left;padding-right:auto;padding-left:8px}.semi-rtl .semi-calendar-month-grid-row li span,.semi-rtl .semi-calendar-month-skeleton li span,.semi-portal-rtl .semi-calendar-month-grid-row li span,.semi-portal-rtl .semi-calendar-month-skeleton li span{text-align:left}.semi-rtl .semi-calendar-month-skeleton li,.semi-portal-rtl .semi-calendar-month-skeleton li{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-rtl .semi-calendar-month-skeleton li:last-child,.semi-portal-rtl .semi-calendar-month-skeleton li:last-child{border-left:none}.semi-rtl .semi-calendar-month-skeleton .semi-calendar-month-event-card-wrapper,.semi-portal-rtl .semi-calendar-month-skeleton .semi-calendar-month-event-card-wrapper{right:auto;left:8px}.semi-rtl .semi-calendar-month-date,.semi-portal-rtl .semi-calendar-month-date{right:auto;left:4px}.semi-rtl .semi-calendar-month-event-card-close,.semi-portal-rtl .semi-calendar-month-event-card-close{margin-right:0;margin-left:-4px}.semi-card{box-sizing:border-box;margin:0;padding:0;border-radius:var(--semi-border-radius-medium);overflow:hidden;background-color:var(--semi-color-bg-0);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:0em}.semi-card-shadows{cursor:pointer;transition:box-shadow .3s}.semi-card-shadows-hover:hover{box-shadow:var(--semi-shadow-elevated);z-index:1}.semi-card-shadows-always{box-shadow:var(--semi-shadow-elevated)}.semi-card-bordered{border:1px solid var(--semi-color-border)}.semi-card-header{padding:20px}.semi-card-header-bordered{border-bottom:1px solid var(--semi-color-border)}.semi-card-header-wrapper{display:flex;align-items:flex-start;flex-direction:row-reverse;justify-content:space-between}.semi-card-header-wrapper-spacing{margin-right:20px}.semi-card-header-wrapper-title{width:100%;overflow:hidden}.semi-card-header-wrapper-extra{flex-shrink:0;font-size:16px;font-style:normal;font-weight:700;letter-spacing:0em;color:var(--semi-color-text-0)}.semi-card-cover>*{display:block;width:100%}.semi-card-body{padding:20px;font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:0em;color:var(--semi-color-text-1)}.semi-card-body-actions{margin-top:20px;padding-top:20px;border-top:1px solid var(--semi-color-border)}.semi-card-footer{padding:20px}.semi-card-footer-bordered{border-top:1px solid var(--semi-color-border)}.semi-card-meta{display:flex;align-items:center;justify-content:flex-start}.semi-card-meta-avatar{margin-right:12px}.semi-card-meta-wrapper-title{font-size:16px;font-style:normal;font-weight:700;line-height:22px;letter-spacing:0em;color:var(--semi-color-text-0)}.semi-card-meta-wrapper-description{font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:0em;color:var(--semi-color-text-2)}.semi-card-group-grid .semi-card{border-radius:0}.semi-card-group-grid .semi-card{margin-left:-1px;margin-top:-1px}.semi-rtl .semi-card,.semi-portal-rtl .semi-card{direction:rtl}.semi-rtl .semi-card-header-wrapper,.semi-portal-rtl .semi-card-header-wrapper{align-items:flex-end}.semi-rtl .semi-card-header-wrapper-title,.semi-portal-rtl .semi-card-header-wrapper-title{display:flex;align-items:flex-end}.semi-rtl .semi-card-header-wrapper-spacing,.semi-portal-rtl .semi-card-header-wrapper-spacing{margin-left:20px;margin-right:0}.semi-rtl .semi-card-meta-avatar,.semi-portal-rtl .semi-card-meta-avatar{margin-left:12px;margin-right:0}.semi-rtl .semi-card-group,.semi-portal-rtl .semi-card-group{direction:rtl}.semi-rtl .semi-card-group-grid .semi-card,.semi-portal-rtl .semi-card-group-grid .semi-card{margin:0 -1px -1px 0}.semi-carousel{position:relative;overflow:hidden}.semi-carousel-content{width:100%;height:100%;overflow:hidden;position:relative}.semi-carousel-content-item{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden}.semi-carousel-content-item-current{z-index:1}.semi-carousel-content-fade>*{opacity:0}.semi-carousel-content-fade .semi-carousel-content-item-current{opacity:1}.semi-carousel-content-slide>*:not(.semi-carousel-content-item-current){visibility:hidden}.semi-carousel-content-slide .semi-carousel-content-item-slide-out{display:block;animation:semi-carousel-content-item-keyframe-slide-out;animation-fill-mode:forwards}.semi-carousel-content-slide .semi-carousel-content-item-slide-in{display:block;animation:semi-carousel-content-item-keyframe-slide-in;animation-fill-mode:forwards}.semi-carousel-content-reverse .semi-carousel-content-item-slide-out{animation:semi-carousel-content-item-keyframe-slide-out-reverse;animation-fill-mode:forwards}.semi-carousel-content-reverse .semi-carousel-content-item-slide-in{animation:semi-carousel-content-item-keyframe-slide-in-reverse;animation-fill-mode:forwards}.semi-carousel-indicator{display:flex;align-items:flex-end;z-index:2}.semi-carousel-indicator-left{position:absolute;left:32px;bottom:32px}.semi-carousel-indicator-center{position:absolute;left:50%;bottom:32px;transform:translate(-50%)}.semi-carousel-indicator-right{position:absolute;right:32px;bottom:32px}.semi-carousel-indicator-dot .semi-carousel-indicator-item{border-radius:50%;cursor:pointer}.semi-carousel-indicator-dot .semi-carousel-indicator-item:not(:last-child){margin-right:8px}.semi-carousel-indicator-dot .semi-carousel-indicator-item-small{width:8px;height:8px}.semi-carousel-indicator-dot .semi-carousel-indicator-item-medium{width:12px;height:12px}.semi-carousel-indicator-dot .semi-carousel-indicator-item-primary{background-color:rgba(var(--semi-blue-6),.4);transition:background-color var(--semi-transition_delay-none) var(--semi-transition_function-easeOut) var(--semi-transition_delay-none)}.semi-carousel-indicator-dot .semi-carousel-indicator-item-primary.semi-carousel-indicator-item-active{background:rgba(var(--semi-blue-6),1)}.semi-carousel-indicator-dot .semi-carousel-indicator-item-primary:hover{background-color:rgba(var(--semi-blue-6),.7)}.semi-carousel-indicator-dot .semi-carousel-indicator-item-primary:active{background:rgba(var(--semi-blue-6),1)}.semi-carousel-indicator-dot .semi-carousel-indicator-item-light{background-color:rgba(var(--semi-white),.4);transition:background-color var(--semi-transition_delay-none) var(--semi-transition_function-easeOut) var(--semi-transition_delay-none)}.semi-carousel-indicator-dot .semi-carousel-indicator-item-light.semi-carousel-indicator-item-active{background:rgba(var(--semi-white),1)}.semi-carousel-indicator-dot .semi-carousel-indicator-item-light:hover{background-color:rgba(var(--semi-white),.7)}.semi-carousel-indicator-dot .semi-carousel-indicator-item-light:active{background:rgba(var(--semi-white),1)}.semi-carousel-indicator-dot .semi-carousel-indicator-item-dark{background-color:rgba(var(--semi-black),.5);transition:background-color var(--semi-transition_delay-none) var(--semi-transition_function-easeOut) var(--semi-transition_delay-none)}.semi-carousel-indicator-dot .semi-carousel-indicator-item-dark.semi-carousel-indicator-item-active{background-color:rgba(var(--semi-black),1)}.semi-carousel-indicator-dot .semi-carousel-indicator-item-dark:hover{background-color:rgba(var(--semi-black),.7)}.semi-carousel-indicator-dot .semi-carousel-indicator-item-dark:active{background:rgba(var(--semi-black),1)}.semi-carousel-indicator-line{width:240px}.semi-carousel-indicator-line .semi-carousel-indicator-item{flex:1;cursor:pointer}.semi-carousel-indicator-line .semi-carousel-indicator-item:not(:last-child){margin-right:4px}.semi-carousel-indicator-line .semi-carousel-indicator-item-small{height:4px}.semi-carousel-indicator-line .semi-carousel-indicator-item-medium{height:6px}.semi-carousel-indicator-line .semi-carousel-indicator-item-primary{background-color:rgba(var(--semi-blue-6),.4)}.semi-carousel-indicator-line .semi-carousel-indicator-item-primary.semi-carousel-indicator-item-active{background:rgba(var(--semi-blue-6),1)}.semi-carousel-indicator-line .semi-carousel-indicator-item-primary:hover{background-color:rgba(var(--semi-blue-6),.7)}.semi-carousel-indicator-line .semi-carousel-indicator-item-primary:active{background:rgba(var(--semi-blue-6),1)}.semi-carousel-indicator-line .semi-carousel-indicator-item-light{background-color:rgba(var(--semi-white),.4)}.semi-carousel-indicator-line .semi-carousel-indicator-item-light.semi-carousel-indicator-item-active{background:rgba(var(--semi-white),1)}.semi-carousel-indicator-line .semi-carousel-indicator-item-light:hover{background-color:rgba(var(--semi-white),.7)}.semi-carousel-indicator-line .semi-carousel-indicator-item-light:active{background:rgba(var(--semi-white),1)}.semi-carousel-indicator-line .semi-carousel-indicator-item-dark{background-color:rgba(var(--semi-black),.5)}.semi-carousel-indicator-line .semi-carousel-indicator-item-dark.semi-carousel-indicator-item-active{background:rgba(var(--semi-black),1)}.semi-carousel-indicator-line .semi-carousel-indicator-item-dark:hover{background-color:rgba(var(--semi-black),.7)}.semi-carousel-indicator-line .semi-carousel-indicator-item-dark:active{background:rgba(var(--semi-black),1)}.semi-carousel-indicator-columnar .semi-carousel-indicator-item{cursor:pointer}.semi-carousel-indicator-columnar .semi-carousel-indicator-item:not(:last-child){margin-right:4px}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-small{width:4px;height:12px}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-small.semi-carousel-indicator-item-active{height:20px}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-medium{width:6px;height:20px}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-medium.semi-carousel-indicator-item-active{height:28px}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-primary{background-color:rgba(var(--semi-blue-6),.4)}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-primary.semi-carousel-indicator-item-active{background:rgba(var(--semi-blue-6),1)}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-primary:hover{background-color:rgba(var(--semi-blue-6),.7)}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-primary:active{background:rgba(var(--semi-blue-6),1)}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-light{background-color:rgba(var(--semi-white),.4)}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-light.semi-carousel-indicator-item-active{background:rgba(var(--semi-white),1)}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-light:hover{background-color:rgba(var(--semi-white),.7)}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-light:active{background:rgba(var(--semi-white),1)}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-dark{background-color:rgba(var(--semi-black),.5)}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-dark.semi-carousel-indicator-item-active{background:rgba(var(--semi-black),1)}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-dark:hover{background-color:rgba(var(--semi-black),.7)}.semi-carousel-indicator-columnar .semi-carousel-indicator-item-dark:active{background:rgba(var(--semi-black),1)}.semi-carousel-arrow{display:flex;font-size:32px;cursor:pointer}.semi-carousel-arrow-prev{position:absolute;top:50%;left:20px;transform:translateY(-50%);z-index:2}.semi-carousel-arrow-next{position:absolute;top:50%;right:20px;transform:translateY(-50%);z-index:2}.semi-carousel-arrow-light{color:rgba(var(--semi-white),.4);transition:color var(--semi-transition_delay-none) var(--semi-transition_function-easeOut) var(--semi-transition_delay-none)}.semi-carousel-arrow-light:hover{color:rgba(var(--semi-white),1)}.semi-carousel-arrow-primary{color:rgba(var(--semi-blue-6),.4);transition:color var(--semi-transition_delay-none) var(--semi-transition_function-easeOut) var(--semi-transition_delay-none)}.semi-carousel-arrow-primary:hover{color:rgba(var(--semi-blue-6),1)}.semi-carousel-arrow-dark{color:rgba(var(--semi-black),.5);transition:color var(--semi-transition_delay-none) var(--semi-transition_function-easeOut) var(--semi-transition_delay-none)}.semi-carousel-arrow-dark:hover{color:rgba(var(--semi-black),1)}.semi-carousel-arrow-hover div{z-index:2;opacity:0}.semi-carousel:hover .semi-carousel-arrow-hover div{opacity:1}@keyframes semi-carousel-content-item-keyframe-slide-in{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes semi-carousel-content-item-keyframe-slide-out{0%{transform:translate(0)}to{transform:translate(-100%)}}@keyframes semi-carousel-content-item-keyframe-slide-in-reverse{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes semi-carousel-content-item-keyframe-slide-out-reverse{0%{transform:translate(0)}to{transform:translate(100%)}}.semi-rtl .semi-carousel,.semi-portal-rtl .semi-carousel{direction:rtl}.semi-rtl .semi-carousel-indicator,.semi-portal-rtl .semi-carousel-indicator{display:flex}.semi-rtl .semi-carousel-indicator-dot .semi-carousel-indicator-item:not(:last-child),.semi-portal-rtl .semi-carousel-indicator-dot .semi-carousel-indicator-item:not(:last-child){margin-right:0;margin-left:8px}.semi-rtl .semi-carousel-indicator-columnar .semi-carousel-indicator-item:not(:last-child),.semi-portal-rtl .semi-carousel-indicator-columnar .semi-carousel-indicator-item:not(:last-child){margin-right:0;margin-left:4px}.semi-rtl .semi-carousel-arrow,.semi-portal-rtl .semi-carousel-arrow{flex-direction:row-reverse}.semi-rtl .semi-carousel-arrow-prev,.semi-portal-rtl .semi-carousel-arrow-prev{left:auto;right:20px;transform:scaleX(-1) translateY(-50%);z-index:2}.semi-rtl .semi-carousel-arrow-next,.semi-portal-rtl .semi-carousel-arrow-next{left:20px;transform:scaleX(-1) translateY(-50%);right:auto;z-index:2}.semi-cascader{box-sizing:border-box;border-radius:var(--semi-border-radius-small);border:1px solid rgba(0,0,0,0);min-width:80px;min-height:32px;height:auto;line-height:32px;font-weight:400;background-color:var(--semi-color-fill-0);display:inline-flex;align-items:center;vertical-align:middle;position:relative;cursor:pointer}.semi-cascader:hover{background-color:var(--semi-color-fill-1);border:1px rgba(0,0,0,0) solid}.semi-cascader:focus:not(.semi-cascader-disabled){border:1px solid var(--semi-color-focus-border);background-color:var(--semi-color-fill-0);outline:0}.semi-cascader:active{background-color:var(--semi-color-fill-2)}.semi-cascader-small{min-height:24px;line-height:24px}.semi-cascader-small .semi-cascader-selection{padding-left:12px;padding-right:12px}.semi-cascader-small .semi-cascader-selection-multiple{padding-left:4px;padding-right:4px}.semi-cascader-large{min-height:40px;line-height:40px}.semi-cascader-large .semi-cascader-selection{font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-cascader-large .semi-cascader-selection{padding-left:12px;padding-right:12px}.semi-cascader-large .semi-cascader-selection-multiple{padding-left:4px;padding-right:4px}.semi-cascader-focus{border:1px solid var(--semi-color-focus-border);outline:0}.semi-cascader-focus:hover{background-color:var(--semi-color-fill-0);border:1px solid var(--semi-color-focus-border)}.semi-cascader-focus:active{background-color:var(--semi-color-fill-2)}.semi-cascader-warning{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning-light-default)}.semi-cascader-warning:hover{background-color:var(--semi-color-warning-light-hover);border-color:var(--semi-color-warning-light-hover)}.semi-cascader-warning.semi-cascader-focus{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning)}.semi-cascader-warning:active{background-color:var(--semi-color-warning-light-active);border-color:var(--semi-color-warning-light-active)}.semi-cascader-error{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger-light-default)}.semi-cascader-error:hover{background-color:var(--semi-color-danger-light-hover);border-color:var(--semi-color-danger-light-hover)}.semi-cascader-error.semi-cascader-focus{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger)}.semi-cascader-error:active{background-color:var(--semi-color-danger-light-active);border-color:var(--semi-color-danger-light-active)}.semi-cascader-selection{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;height:100%;display:inline-flex;align-items:center;flex-wrap:wrap;flex-grow:1;overflow:hidden;padding-left:12px;padding-right:12px;cursor:pointer;color:var(--semi-color-text-0)}.semi-cascader-selection-multiple{padding-left:4px;padding-right:4px}.semi-cascader-selection-placeholder{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--semi-color-text-2)}.semi-cascader-selection-tag{margin:1px 2px 1px 0}.semi-cascader-selection-tag:first-child{margin-left:0}.semi-cascader-selection-tag-disabled.semi-tag{color:var(--semi-color-disabled-text);background-color:#0000;cursor:not-allowed}.semi-cascader-selection-tag-disabled.semi-tag .semi-tag-close{color:var(--semi-color-disabled-text);cursor:not-allowed;pointer-events:none}.semi-cascader-selection-n{cursor:pointer;font-size:12px;margin-right:4px;color:var(--semi-color-text-0);padding-left:8px;padding-right:8px}.semi-cascader-selection-n-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text)}.semi-cascader-selection span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.semi-cascader-selection .semi-cascader-tagInput-wrapper{border:hidden;background:#0000;margin-left:-4px}.semi-cascader-selection .semi-tagInput{min-height:30px}.semi-cascader-selection .semi-tagInput-small{min-height:22px}.semi-cascader-selection .semi-tagInput-large{min-height:38px}.semi-cascader-selection .semi-tagInput .semi-input-wrapper{margin-left:4px}.semi-cascader-selection .semi-tagInput .semi-input-wrapper .semi-input{padding-left:0}.semi-cascader-selection .semi-tagInput .semi-input-wrapper-default,.semi-cascader-selection .semi-tagInput .semi-input-wrapper-large{margin-top:1px;margin-bottom:1px}.semi-cascader-selection-text-inactive{color:var(--semi-color-text-2)}.semi-cascader-selection-text-hide{display:none}.semi-cascader-arrow,.semi-cascader-clearbtn{display:inline-flex;align-items:center;height:100%;justify-content:center;width:32px;color:var(--semi-color-text-2)}.semi-cascader-clearbtn:hover{color:var(--semi-color-primary-hover)}.semi-cascader-clearbtn:active{color:var(--semi-color-primary-active)}.semi-cascader-prefix,.semi-cascader-suffix{display:inline;display:flex;justify-content:center;align-items:center}.semi-cascader-prefix-text,.semi-cascader-suffix-text{margin:0 12px;font-weight:600;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2)}.semi-cascader-prefix-icon,.semi-cascader-suffix-icon{color:var(--semi-color-text-2);margin:0 8px}.semi-cascader-inset-label{display:inline;margin:0 12px;font-weight:600;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2);flex-shrink:0;white-space:nowrap}.semi-cascader.semi-cascader-with-prefix{display:inline-flex;align-items:center}.semi-cascader.semi-cascader-with-prefix .semi-cascader-selection{padding-left:0}.semi-cascader.semi-cascader-with-suffix .semi-cascader-selection{padding-right:0}.semi-cascader-disabled{cursor:not-allowed;-webkit-user-select:none;user-select:none;background-color:var(--semi-color-disabled-fill)}.semi-cascader-disabled .semi-cascader-selection{cursor:not-allowed}.semi-cascader-disabled:hover{background-color:var(--semi-color-disabled-fill)}.semi-cascader-disabled .semi-cascader-selection,.semi-cascader-disabled .semi-cascader-selection-placeholder,.semi-cascader-disabled .semi-cascader-prefix,.semi-cascader-disabled .semi-cascader-suffix{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-cascader-disabled .semi-cascader-arrow{color:var(--semi-color-disabled-text)}.semi-cascader-popover .semi-cascader-search-wrapper{padding:8px 12px;border-bottom:1px solid var(--semi-color-fill-0)}.semi-cascader-popover .semi-cascader-option-lists .semi-cascader-option-empty{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;border-radius:var(--semi-border-radius-medium);color:var(--semi-color-disabled-text);margin:0;padding:8px 12px;-webkit-user-select:none;user-select:none;text-align:center;cursor:not-allowed}.semi-cascader-popover .semi-cascader-option-lists .semi-cascader-option-empty:hover{background-color:#0000}.semi-cascader-single.semi-cascader-filterable{display:inline-flex}.semi-cascader-single.semi-cascader-filterable .semi-cascader-selection .semi-cascader-search-wrapper{width:100%;height:30px;display:flex;align-items:center;position:relative}.semi-cascader-single.semi-cascader-filterable .semi-cascader-selection .semi-cascader-search-wrapper-small{height:22px}.semi-cascader-single.semi-cascader-filterable .semi-cascader-selection .semi-cascader-search-wrapper-large{height:38px}.semi-cascader-single.semi-cascader-filterable .semi-cascader-selection .semi-cascader-search-wrapper .semi-input-wrapper{position:absolute;top:0;left:0;height:100%;width:100%;border:none;background-color:#0000}.semi-cascader-single.semi-cascader-filterable .semi-cascader-selection .semi-cascader-search-wrapper .semi-input-wrapper-focus{border:none}.semi-cascader-single.semi-cascader-filterable .semi-cascader-selection .semi-cascader-search-wrapper .semi-input{padding-left:0;padding-right:0}.semi-cascader-option-lists{display:flex;overflow:hidden;padding:0;margin:0;height:180px}.semi-cascader-option-lists-empty{height:auto;justify-content:center;cursor:not-allowed}.semi-cascader-option-lists ul,.semi-cascader-option-lists li{list-style-type:none;padding:0;margin:0}.semi-cascader-option-lists ul>li{padding:8px 16px 8px 12px}.semi-cascader-option-lists .semi-cascader-option-list{box-sizing:border-box;display:inline-block;min-width:150px;height:100%;margin:0;padding:4px 0;overflow:auto;list-style:none;border-left:1px solid var(--semi-color-fill-0)}.semi-cascader-option-lists .semi-cascader-option-list:first-child{border-left:none}.semi-cascader-option-lists .semi-cascader-option{display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;min-width:min-content;word-break:break-all;color:var(--semi-color-text-0);position:relative}.semi-cascader-option-lists .semi-cascader-option:hover{background-color:var(--semi-color-fill-0)}.semi-cascader-option-lists .semi-cascader-option:active{background-color:var(--semi-color-fill-1)}.semi-cascader-option-lists .semi-cascader-option-icon{display:inline-flex;flex-shrink:0;width:16px;color:var(--semi-color-text-2)}.semi-cascader-option-lists .semi-cascader-option-icon-active,.semi-cascader-option-lists .semi-cascader-option-icon-empty{margin-right:8px}.semi-cascader-option-lists .semi-cascader-option-icon-left{margin-left:8px}.semi-cascader-option-lists .semi-cascader-option-spin-icon{width:16px;height:16px;line-height:0}.semi-cascader-option-lists .semi-cascader-option-spin-icon svg{width:16px;height:16px}.semi-cascader-option-lists .semi-cascader-option-label{display:flex;align-items:center;white-space:pre}.semi-cascader-option-lists .semi-cascader-option-label-checkbox{margin-right:8px}.semi-cascader-option-lists .semi-cascader-option-hidden{display:none}.semi-cascader-option-lists .semi-cascader-option-active,.semi-cascader-option-lists .semi-cascader-option-active:hover{background-color:var(--semi-color-primary-light-default)}.semi-cascader-option-lists .semi-cascader-option-select,.semi-cascader-option-lists .semi-cascader-option-label-highlight{font-weight:600;color:var(--semi-color-primary)}.semi-cascader-option-lists .semi-cascader-option-disabled{cursor:not-allowed}.semi-cascader-option-lists .semi-cascader-option-disabled:hover,.semi-cascader-option-lists .semi-cascader-option-disabled:active{background-color:#0000}.semi-cascader-option-lists .semi-cascader-option-disabled .semi-cascader-option-label{color:var(--semi-color-disabled-text)}.semi-cascader-option-lists .semi-cascader-option-flatten{padding-right:64px}.semi-cascader-borderless:not(:focus-within):not(:hover){background-color:#0000;border-color:#0000}.semi-cascader-borderless:not(:focus-within):not(:hover) .semi-cascader-arrow{opacity:0}.semi-cascader-borderless:focus-within:not(:active){background-color:#0000}.semi-cascader-borderless.semi-cascader-error:not(:focus-within){border-color:var(--semi-color-danger)}.semi-cascader-borderless.semi-cascader-warning:not(:focus-within){border-color:var(--semi-color-warning)}.semi-cascader-borderless.semi-cascader-error:focus-within{border-color:var(--semi-color-danger)}.semi-cascader-borderless.semi-cascader-warning:focus-within{border-color:var(--semi-color-warning)}.semi-rtl .semi-cascader,.semi-portal-rtl .semi-cascader{direction:rtl}.semi-rtl .semi-cascader.semi-cascader-with-prefix .semi-cascader-selection,.semi-portal-rtl .semi-cascader.semi-cascader-with-prefix .semi-cascader-selection{padding-left:auto;padding-right:0}.semi-rtl .semi-cascader.semi-cascader-with-suffix .semi-cascader-selection,.semi-portal-rtl .semi-cascader.semi-cascader-with-suffix .semi-cascader-selection{padding-right:auto;padding-left:0}.semi-rtl .semi-cascader-selection-multiple,.semi-portal-rtl .semi-cascader-selection-multiple{padding-right:4px;padding-left:4px}.semi-rtl .semi-cascader-selection-tag:first-child,.semi-portal-rtl .semi-cascader-selection-tag:first-child{margin-right:0}.semi-rtl .semi-cascader-selection-n,.semi-portal-rtl .semi-cascader-selection-n{margin-right:0;margin-left:4px}.semi-rtl .semi-cascader-selection .semi-cascader-tagInput-wrapper,.semi-portal-rtl .semi-cascader-selection .semi-cascader-tagInput-wrapper{margin-left:0;margin-right:-4px}.semi-rtl .semi-cascader-selection .semi-tagInput .semi-input-wrapper,.semi-portal-rtl .semi-cascader-selection .semi-tagInput .semi-input-wrapper{margin-left:0;margin-right:4px}.semi-rtl .semi-cascader-selection .semi-tagInput .semi-input-wrapper .semi-input,.semi-portal-rtl .semi-cascader-selection .semi-tagInput .semi-input-wrapper .semi-input{padding-right:0}.semi-cascader-option-label-checkbox{margin-right:0;margin-left:8px}.semi-cascader-option-lists-rtl{direction:rtl}.semi-cascader-option-lists.semi-cascader-option-lists-rtl ul>li{padding-right:12px;padding-left:auto}.semi-cascader-option-lists.semi-cascader-option-lists-rtl .semi-cascader-option-list{border-left:0;border-right:1px solid var(--semi-color-fill-0)}.semi-cascader-option-lists.semi-cascader-option-lists-rtl .semi-cascader-option-list:first-child{border-right:none}.semi-cascader-option-lists.semi-cascader-option-lists-rtl .semi-cascader-option-icon-active,.semi-cascader-option-lists.semi-cascader-option-lists-rtl .semi-cascader-option-icon-empty{margin-right:0;margin-left:8px}.semi-cascader-option-lists.semi-cascader-option-lists-rtl .semi-cascader-option-flatten{padding-right:0;padding-left:64px}.semi-cascader-option-lists.semi-cascader-option-lists-rtl .semi-cascader-option .semi-icon-chevron_right{margin-left:0;margin-right:8px;transform:scaleX(-1)}.semi-chat{padding-top:12px;padding-bottom:12px;display:flex;flex-direction:column;height:100%;max-width:800px;position:relative;overflow:hidden}.semi-chat-inner{display:flex;flex-direction:column;height:100%}.semi-chat-dropArea{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(var(--semi-grey-2),.9);z-index:10;border:5px dotted var(--semi-color-border);display:flex;align-items:center;justify-content:center;border-radius:16px}.semi-chat-dropArea-text{font-size:48px}.semi-chat-content{overflow:hidden;flex:1 1;position:relative}.semi-chat-toast{position:absolute;top:0;left:50%;transform:translate(-50%)}.semi-chat-container{padding-left:16px;padding-right:16px;height:100%;overflow:scroll}.semi-chat-container-scroll-hidden::-webkit-scrollbar{display:none}.semi-chat-action{position:relative;z-index:1}.semi-chat-action-content.semi-button{position:absolute;bottom:0;left:50%;transform:translate(-50%);display:flex;justify-content:center;align-items:center;background:var(--semi-color-bg-0);border:1px solid var(--semi-color-border)}.semi-chat-action-content.semi-button-light:not(.semi-button-disabled):hover{background:var(--semi-color-tertiary-light-hover);border:1px solid var(--semi-color-border)}.semi-chat-action-backBottom.semi-button{width:42px;height:42px;border-radius:50%}.semi-chat-action-stop.semi-button{-webkit-user-select:none;user-select:none;height:42px;border-radius:21px}.semi-chat-divider{color:var(--semi-color-text-2);font-size:12px;margin-top:12px;margin-bottom:12px;font-weight:400}.semi-chat-chatBox{display:flex;flex-direction:row;margin-top:8px;margin-bottom:8px;column-gap:12px}.semi-chat-chatBox:hover .semi-chat-chatBox-action:not(.semi-chat-chatBox-action-hidden){visibility:visible}.semi-chat-chatBox-right{flex-direction:row-reverse}.semi-chat-chatBox-right .semi-chat-chatBox-wrap{align-items:flex-end}.semi-chat-chatBox-avatar{flex-shrink:0;width:24px;height:24px}.semi-chat-chatBox-avatar-hidden{visibility:hidden}.semi-chat-chatBox-title{line-height:20px;font-size:16px;color:var(--semi-color-text-0);font-weight:400;text-overflow:ellipsis}.semi-chat-chatBox-action{visibility:hidden;display:flex;align-items:center;position:relative;column-gap:10px;margin-left:10px;margin-right:10px}.semi-chat-chatBox-action-btn.semi-button{height:fit-content;width:fit-content}.semi-chat-chatBox-action-btn.semi-button.semi-button-with-icon-only{padding:0}.semi-chat-chatBox-action-icon-flip{transform:scaleY(-1)}.semi-chat-chatBox-action-show{visibility:visible}.semi-chat-chatBox-action-delete-wrap{display:inline-flex}.semi-chat-chatBox-action.semi-chat-chatBox-action-hidden,.semi-chat-chatBox-action:hover.semi-chat-chatBox-action-hidden{visibility:hidden}.semi-chat-chatBox-action .semi-button-borderless:not(.semi-button-disabled):hover{background-color:#0000}.semi-chat-chatBox-action .semi-button-tertiary.semi-button-borderless{color:var(--semi-color-text-2)}.semi-chat-chatBox-action .semi-button-tertiary.semi-button-borderless:hover{color:var(--semi-color-text-0)}.semi-chat-chatBox-wrap{display:flex;flex-direction:column;align-items:flex-start;position:relative;row-gap:8px;max-width:calc(100% - 36px)}.semi-chat-chatBox-content-bubble,.semi-chat-chatBox-content-userBubble{padding:8px 12px;border-radius:var(--semi-border-radius-large);background-color:var(--semi-color-fill-0);max-width:100%;box-sizing:border-box}.semi-chat-chatBox-content code{white-space:pre-wrap}.semi-chat-chatBox-content .semi-typography{color:var(--semi-color-text-0)}.semi-chat-chatBox-content .semi-chat-attachment-file{background:var(--semi-color-fill-2)}.semi-chat-chatBox-content .semi-chat-attachment-file,.semi-chat-chatBox-content .semi-chat-attachment-img{margin-top:4px;margin-bottom:4px;margin-right:4px}.semi-chat-chatBox-content-user{background:var(--semi-color-primary);color:var(--semi-color-white)}.semi-chat-chatBox-content-user .semi-chat-attachment-file{background:var(--semi-color-bg-0)}.semi-chat-chatBox-content-user .semi-typography,.semi-chat-chatBox-content-user .semi-typography code,.semi-chat-chatBox-content-user .semi-markdownRender ul,.semi-chat-chatBox-content-user .semi-markdownRender li,.semi-chat-chatBox-content-user .semi-typography a,.semi-chat-chatBox-content-user .semi-typography a:visited,.semi-chat-chatBox-content-user .semi-typography a:hover{color:var(--semi-color-white)}.semi-chat-chatBox-content-error{background:var(--semi-color-danger-hover)}.semi-chat-chatBox-content-error .semi-typography{color:var(--semi-color-white)}.semi-chat-chatBox-content-loading{display:flex;align-items:baseline}.semi-chat-chatBox-content-loading-item{border-radius:50%;height:8px;width:8px;background-color:var(--semi-color-text-0);margin:6px 18px;overflow:visible;position:relative;animation:semi-chat-loading-flashing .8s infinite alternate;animation-delay:-.2s;animation-timing-function:ease}.semi-chat-chatBox-content-loading-item:before{content:"";border-radius:50%;height:8px;width:8px;background-color:var(--semi-color-text-0);position:absolute;top:0;left:-15px;animation:semi-chat-loading-flashing .8s infinite alternate;animation-timing-function:ease;animation-delay:-.4s}.semi-chat-chatBox-content-loading-item:after{content:"";border-radius:50%;height:8px;width:8px;background-color:var(--semi-color-text-0);position:absolute;top:0;left:15px;animation:semi-chat-loading-flashing .8s infinite alternate;animation-delay:0s;animation-timing-function:ease}.semi-chat-chatBox-content pre{background-color:#0000}.semi-chat-chatBox-content-code{border-radius:var(--semi-border-radius-large);overflow:hidden}.semi-chat-chatBox-content-code .semi-codeHighlight pre{word-break:break-all;white-space:pre-wrap}.semi-chat-chatBox-content-code-topSlot{display:flex;justify-content:space-between;background-color:rgba(var(--semi-grey-4),1);align-items:center;padding:5px 8px;color:rgba(var(--semi-white),1);font-size:12px}.semi-chat-chatBox-content-code-topSlot-copy{min-width:150px;display:flex;justify-content:flex-end}.semi-chat-chatBox-content-code-topSlot-copy-wrapper{display:flex;align-items:center;column-gap:5px;cursor:pointer;background:#0000;border:none;color:rgba(var(--semi-white),1);line-height:16px;padding:5px;border-radius:var(--semi-border-radius-large)}.semi-chat-chatBox-content-code-topSlot-toCopy:hover{background:rgba(var(--semi-grey-5),1)}.semi-chat-chatBox-content-code .semi-codeHighlight-defaultTheme pre[class*=language-]{margin:0;background:var(--semi-color-bg-0)}.semi-chat-inputBox{padding:8px 16px}.semi-chat-inputBox-clearButton.semi-button{border-radius:50%;width:48px;height:48px;margin-top:4px;margin-bottom:4px}.semi-chat-inputBox-clearButton.semi-button .semi-icon{font-size:30px}.semi-chat-inputBox-clearButton.semi-button.semi-button-primary.semi-button-borderless{color:var(--semi-color-text-2)}.semi-chat-inputBox-upload .semi-upload-file-list{display:none}.semi-chat-inputBox-uploadButton.semi-button{width:32px;height:32px}.semi-chat-inputBox-uploadButton.semi-button.semi-button-primary.semi-button-borderless{color:var(--semi-color-text-0)}.semi-chat-inputBox-sendButton.semi-button{width:32px;height:32px}.semi-chat-inputBox-sendButton.semi-button-icon{transform:rotate(45deg)}.semi-chat-inputBox-sendButton.semi-button.semi-button-disabled.semi-button-borderless{color:var(--semi-color-primary-disabled)}.semi-chat-inputBox-inner{display:flex;flex-direction:row;align-items:flex-end;column-gap:4px}.semi-chat-inputBox-container{display:flex;flex-direction:row;flex-grow:1;border-radius:16px;padding:11px;border:1px solid var(--semi-color-border);align-items:flex-end}.semi-chat-inputBox-inputArea{flex-grow:1;display:flex;flex-direction:column}.semi-chat-inputBox-textarea{flex-grow:1}.semi-chat-inputBox-textarea.semi-input-textarea-wrapper,.semi-chat-inputBox-textarea.semi-input-textarea-wrapper:hover,.semi-chat-inputBox-textarea.semi-input-textarea-wrapper:active{border:none;background-color:#0000}.semi-chat-attachment{display:flex;flex-direction:row;flex-wrap:wrap;column-gap:10px;row-gap:5px;margin-left:12px;margin-right:12px}.semi-chat-attachment-item{position:relative}.semi-chat-attachment-item:hover .semi-chat-inputBox-attachment-clear{visibility:visible}.semi-chat-attachment-img{border-radius:var(--semi-border-radius-medium);vertical-align:top}.semi-chat-attachment-img img{object-fit:cover}.semi-chat-attachment a{text-decoration:none;color:inherit}.semi-chat-attachment-clear{position:absolute;top:-8px;right:-8px;color:var(--semi-color-text-2)}.semi-chat-attachment-process.semi-progress-circle,.semi-chat-attachment-fail{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.semi-chat-attachment-fail{color:var(--semi-color-danger)}.semi-chat-attachment-file{display:inline-flex;flex-direction:row;align-items:center;height:50px;column-gap:5px;padding:5px;border-radius:var(--semi-border-radius-medium);background:var(--semi-color-fill-0);text-decoration:none}.semi-chat-attachment-file-icon{color:var(--semi-color-text-2)}.semi-chat-attachment-file-info{display:flex;flex-direction:column}.semi-chat-attachment-file-title{font-size:16px;color:var(--semi-color-text-0);max-width:90px;text-overflow:ellipsis;overflow:hidden}.semi-chat-attachment-file-metadata{font-size:14px;color:var(--semi-color-text-2)}.semi-chat-attachment-file-type{text-transform:uppercase}.semi-chat .semi-typography a.semi-chat-attachment-file{display:flex}.semi-chat .semi-typography a.semi-chat-attachment-file .semi-chat-attachment-file-title{color:var(--semi-color-text-0)}.semi-chat-hints{display:flex;flex-direction:column;row-gap:10px;margin-top:12px;margin-bottom:12px;margin-left:34px}.semi-chat-hint-item{cursor:pointer;display:flex;flex-direction:row;column-gap:20px;width:fit-content;background:#0000;align-items:center;border:1px solid var(--semi-color-border);padding:8px 12px;border-radius:var(--semi-border-radius-large)}.semi-chat-hint-item:hover{background-color:var(--semi-color-fill-0)}.semi-chat-hint-content{font-size:14px;color:var(--semi-color-text-1)}.semi-chat-hint-icon{color:var(--semi-color-text-2)}@keyframes semi-chat-loading-flashing{0%{opacity:1}50%{opacity:.1}to{opacity:1}}.semi-rtl .semi-chat,.semi-portal-rtl .semi-chat{direction:rtl}.semi-rtl .semi-chat-hint-icon,.semi-portal-rtl .semi-chat-hint-icon{transform:scaleX(-1)}.semi-rtl .semi-chat-inputBox-sendButton-icon,.semi-portal-rtl .semi-chat-inputBox-sendButton-icon{transform:rotate(225deg)}.semi-rtl .semi-chat-chatBox-action-icon-redo,.semi-portal-rtl .semi-chat-chatBox-action-icon-redo{transform:scaleX(-1)}.semi-checkbox{box-sizing:border-box;position:relative;display:flex;align-items:flex-start;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none));column-gap:8px}.semi-checkbox input[type=checkbox]{position:absolute;left:0;top:0;width:100%;height:100%;margin:0;opacity:0}.semi-checkbox-content{flex:1;display:flex;flex-direction:column;row-gap:4px}.semi-checkbox-addon{display:flex;flex:1;align-items:center;color:var(--semi-color-text-0);line-height:20px;-webkit-user-select:none;user-select:none}.semi-checkbox:hover .semi-checkbox-inner-display{background:var(--semi-color-fill-0);box-shadow:inset 0 0 0 1px var(--semi-color-focus-border)}.semi-checkbox:hover .semi-checkbox-inner-checked .semi-checkbox-inner-display{background:var(--semi-color-primary-hover);box-shadow:none}.semi-checkbox:active .semi-checkbox-inner-checked .semi-checkbox-inner-display{background:var(--semi-color-primary-active);box-shadow:none}.semi-checkbox.semi-checkbox-disabled:hover .semi-checkbox-inner-display,.semi-checkbox.semi-checkbox-disabled:active .semi-checkbox-inner-display{background:var(--semi-color-disabled-fill);box-shadow:inset 0 0 0 1px var(--semi-color-border)}.semi-checkbox.semi-checkbox-disabled:hover .semi-checkbox-inner-checked .semi-checkbox-inner-display,.semi-checkbox.semi-checkbox-disabled:active .semi-checkbox-inner-checked .semi-checkbox-inner-display{color:var(--semi-color-white);background:var(--semi-color-primary-disabled);box-shadow:none}.semi-checkbox-inner{position:relative;display:flex;align-items:center;width:16px;height:20px;-webkit-user-select:none;user-select:none;cursor:pointer}.semi-checkbox-inner-display{box-sizing:border-box;position:relative;width:16px;height:16px;margin:0;background:#0000;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);box-shadow:inset 0 0 0 1px var(--semi-color-text-3);border-radius:var(--semi-border-radius-extra-small)}.semi-checkbox-inner-display .semi-icon{font-size:16px}.semi-checkbox-inner-checked .semi-checkbox-inner-display{background:var(--semi-color-primary);color:var(--semi-color-white);box-shadow:inset 0 0 0 1px var(--semi-color-primary);border-radius:var(--semi-border-radius-extra-small)}.semi-checkbox-inner-checked>.semi-checkbox-addon{color:var(--semi-color-text-0)}.semi-checkbox:hover .semi-checkbox-inner-display{background:var(--semi-color-fill-0)}.semi-checkbox:hover.semi-checkbox-indeterminate .semi-checkbox-inner-display{background:var(--semi-color-primary-hover);box-shadow:none;color:var(--semi-color-white)}.semi-checkbox:hover .semi-checkbox-inner-checked .semi-checkbox-inner-display{background:var(--semi-color-primary-hover);border-color:var(--semi-color-primary-hover);color:var(--semi-color-white)}.semi-checkbox:hover.semi-checkbox-cardType.semi-checkbox-unChecked.semi-checkbox-cardType_enable .semi-checkbox-inner-display{background:var(--semi-color-white)}.semi-checkbox:active .semi-checkbox-inner-display{background:var(--semi-color-fill-1)}.semi-checkbox:active.semi-checkbox-indeterminate .semi-checkbox-inner-display{background:var(--semi-color-primary-active);border-color:var(--semi-color-primary-active);color:var(--semi-color-white);box-shadow:none}.semi-checkbox:active .semi-checkbox-inner-checked .semi-checkbox-inner-display{background:var(--semi-color-primary-active);border-color:var(--semi-color-primary-active);color:var(--semi-color-white)}.semi-checkbox:active.semi-checkbox-cardType.semi-checkbox-unChecked.semi-checkbox-cardType_enable .semi-checkbox-inner-display{background:var(--semi-color-white)}.semi-checkbox-cardType{flex-wrap:nowrap;align-items:flex-start;border-radius:3px;padding:12px 16px;background:#0000;border:1px solid rgba(0,0,0,0)}.semi-checkbox-cardType .semi-checkbox-inner{position:relative;flex-shrink:0}.semi-checkbox-cardType .semi-checkbox-inner-display{background:var(--semi-color-white)}.semi-checkbox-cardType .semi-checkbox-inner-pureCardType{opacity:0;width:0}.semi-checkbox-cardType .semi-checkbox-addon{font-weight:600;font-size:14px;line-height:20px;color:var(--semi-color-text-0)}.semi-checkbox-cardType .semi-checkbox-extra{font-weight:400;font-size:14px;line-height:20px;color:var(--semi-color-text-2)}.semi-checkbox-cardType .semi-checkbox-extra.semi-checkbox-cardType_extra_noChildren{margin-top:0}.semi-checkbox-cardType:hover{background:var(--semi-color-fill-0)}.semi-checkbox-cardType:active{background:var(--semi-color-fill-1)}.semi-checkbox-cardType_checked{background:var(--semi-color-primary-light-default);border:1px solid var(--semi-color-primary)}.semi-checkbox-cardType_checked:hover{background:var(--semi-color-primary-light-default);border-color:var(--semi-color-primary-hover)}.semi-checkbox-cardType_checked:hover .semi-checkbox-inner-checked .semi-checkbox-inner-display{box-shadow:none}.semi-checkbox-cardType_checked:active{background:var(--semi-color-primary-light-default);border-color:var(--semi-color-primary-active)}.semi-checkbox-cardType_disabled:active,.semi-checkbox-cardType_disabled:hover{background:#0000}.semi-checkbox-cardType_checked_disabled.semi-checkbox-cardType{background:var(--semi-color-primary-light-default);border:1px solid var(--semi-color-primary-disabled)}.semi-checkbox-cardType_checked_disabled.semi-checkbox-cardType:hover .semi-checkbox-inner-checked .semi-checkbox-inner-display{box-shadow:none}.semi-checkbox-indeterminate .semi-checkbox-inner-display,.semi-checkbox-checked .semi-checkbox-inner-display{background:var(--semi-color-primary);color:var(--semi-color-white);box-shadow:inset 0 0 0 1px var(--semi-color-primary);border-radius:var(--semi-border-radius-extra-small)}.semi-checkbox-indeterminate .semi-checkbox-inner-display:hover,.semi-checkbox-checked .semi-checkbox-inner-display:hover{background:var(--semi-color-primary-hover);border-color:var(--semi-color-primary-hover);color:var(--semi-color-white)}.semi-checkbox-indeterminate .semi-checkbox-inner-display:active,.semi-checkbox-checked .semi-checkbox-inner-display:active{background:var(--semi-color-primary-active);border-color:var(--semi-color-primary-active);color:var(--semi-color-white)}.semi-checkbox-indeterminate .semi-checkbox-inner-addon,.semi-checkbox-checked .semi-checkbox-inner-addon{color:var(--semi-color-text-0)}.semi-checkbox-disabled,.semi-checkbox-disabled .semi-checkbox-inner{cursor:not-allowed}.semi-checkbox-disabled .semi-checkbox-inner-display{color:var(--semi-color-white);background:var(--semi-color-disabled-fill);box-shadow:inset 0 0 0 1px var(--semi-color-border)}.semi-checkbox-disabled .semi-checkbox-inner-display:hover{color:var(--semi-color-white);background:#0000}.semi-checkbox-disabled .semi-checkbox-inner-checked{color:var(--semi-color-white)}.semi-checkbox-disabled .semi-checkbox-inner-checked .semi-checkbox-inner-display{opacity:.75;background:var(--semi-color-primary-disabled);box-shadow:inset 0 0 0 1px var(--semi-color-primary-disabled)}.semi-checkbox-disabled .semi-checkbox-inner-checked .semi-checkbox-inner-display:hover{color:var(--semi-color-white);background:var(--semi-color-primary-disabled)}.semi-checkbox-disabled .semi-checkbox-addon,.semi-checkbox-disabled .semi-checkbox-extra{color:var(--semi-color-disabled-text)}.semi-checkbox.semi-checkbox-disabled.semi-checkbox-indeterminate .semi-checkbox-inner-display{opacity:.75;background:var(--semi-color-primary-disabled);box-shadow:inset 0 0 0 1px var(--semi-color-primary-disabled);color:var(--semi-color-white)}.semi-checkbox-extra{flex-shrink:0;flex-grow:1;flex-basis:100%;box-sizing:border-box;color:var(--semi-color-text-2)}.semi-checkbox-focus{outline:2px solid var(--semi-color-primary-light-active)}.semi-checkbox-focus-border{box-shadow:inset 0 0 0 1px var(--semi-color-focus-border)}.semi-checkboxGroup{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:14px}.semi-checkboxGroup .semi-checkbox.semi-checkbox-vertical{margin-bottom:16px}.semi-checkboxGroup-horizontal{display:flex;flex-wrap:wrap;gap:16px}.semi-checkboxGroup-horizontal .semi-checkbox{display:inline-flex}.semi-checkboxGroup-vertical{display:flex;flex-direction:column;row-gap:12px}.semi-checkboxGroup-vertical-cardType{row-gap:16px}.semi-checkboxGroup-vertical-pureCardType .semi-checkbox{column-gap:0}.semi-rtl .semi-checkbox,.semi-portal-rtl .semi-checkbox{direction:rtl}.semi-rtl .semi-checkbox input[type=checkbox],.semi-portal-rtl .semi-checkbox input[type=checkbox]{left:auto;right:0}.semi-rtl .semi-checkboxGroup,.semi-portal-rtl .semi-checkboxGroup{direction:rtl}.semi-codeHighlight-defaultTheme pre[class*=language-],.semi-codeHighlight-defaultTheme code[class*=language-]{color:var(--semi-color-text-0);font-size:13px;text-shadow:none;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Monaco,Consolas,Liberation Mono,DejaVu Sans Mono,Courier New,monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-moz-hyphens:none;-webkit-hyphens:none;hyphens:none}.semi-codeHighlight-defaultTheme pre[class*=language-]::selection,.semi-codeHighlight-defaultTheme code[class*=language-]::selection,.semi-codeHighlight-defaultTheme pre[class*=language-]::-moz-selection,.semi-codeHighlight-defaultTheme code[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}.semi-codeHighlight-defaultTheme pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;background:var(--semi-color-tertiary-light-default)}.semi-codeHighlight-defaultTheme :not(pre)>code[class*=language-]{display:block;border-radius:.3em;color:#895fe2;background:#f9f7f9}.semi-codeHighlight-defaultTheme pre .namespace{opacity:.7}.semi-codeHighlight-defaultTheme pre .token.comment,.semi-codeHighlight-defaultTheme pre .token.prolog,.semi-codeHighlight-defaultTheme pre .token.doctype,.semi-codeHighlight-defaultTheme pre .token.cdata{color:#6b7075}.semi-codeHighlight-defaultTheme pre .token.punctuation{color:rgba(var(--semi-grey-8),1)}.semi-codeHighlight-defaultTheme pre .token.property,.semi-codeHighlight-defaultTheme pre .token.tag,.semi-codeHighlight-defaultTheme pre .token.boolean,.semi-codeHighlight-defaultTheme pre .token.number,.semi-codeHighlight-defaultTheme pre .token.constant,.semi-codeHighlight-defaultTheme pre .token.symbol,.semi-codeHighlight-defaultTheme pre .token.deleted{color:rgba(var(--semi-purple-6),1)}.semi-codeHighlight-defaultTheme pre .token.selector,.semi-codeHighlight-defaultTheme pre .token.attr-name,.semi-codeHighlight-defaultTheme pre .token.string,.semi-codeHighlight-defaultTheme pre .token.char,.semi-codeHighlight-defaultTheme pre .token.builtin,.semi-codeHighlight-defaultTheme pre .token.inserted{color:rgba(var(--semi-green-6),1)}.semi-codeHighlight-defaultTheme pre .token.operator,.semi-codeHighlight-defaultTheme pre .token.entity,.semi-codeHighlight-defaultTheme pre .token.url,.semi-codeHighlight-defaultTheme pre .language-css .token.string,.semi-codeHighlight-defaultTheme pre .style .token.string{color:rgba(var(--semi-grey-8),1)}.semi-codeHighlight-defaultTheme pre .token.atrule,.semi-codeHighlight-defaultTheme pre .token.attr-value,.semi-codeHighlight-defaultTheme pre .token.keyword{color:rgba(var(--semi-purple-6),1)}.semi-codeHighlight-defaultTheme pre .token.function{color:rgba(var(--semi-violet-6),1)}.semi-codeHighlight-defaultTheme pre .token.regex,.semi-codeHighlight-defaultTheme pre .token.important,.semi-codeHighlight-defaultTheme pre .token.variable{color:#d0955f}.semi-codeHighlight-defaultTheme pre .token.important,.semi-codeHighlight-defaultTheme pre .token.bold{font-weight:700}.semi-codeHighlight-defaultTheme pre .token.italic{font-style:italic}.semi-codeHighlight-defaultTheme pre .token.entity{cursor:help}.semi-codeHighlight-defaultTheme pre[data-line]{position:relative}.semi-codeHighlight-defaultTheme pre[class*=language-]>code[class*=language-]{position:relative;z-index:1}.semi-codeHighlight-defaultTheme .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:#ebf4ff;box-shadow:inset 5px 0 #0064d2;z-index:0;pointer-events:none;line-height:inherit;white-space:pre}.semi-codeHighlight pre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.semi-codeHighlight pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.semi-codeHighlight .line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.semi-codeHighlight .line-numbers-rows>span{display:block;counter-increment:linenumber}.semi-codeHighlight .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.semi-collapse-header-disabled:hover{background-color:#0000}.semi-colorPicker-colorChooseArea{box-shadow:inset 0 0 0 1px #0000000d;position:relative;flex-grow:1;border-color:#0000;border-radius:8px 8px 0 0;background-image:linear-gradient(to top,#000,#0000),linear-gradient(to right,#fff,#fff0)}.semi-colorPicker-handle{border-radius:var(--semi-border-radius-full);border:2px solid var(--semi-color-white);position:absolute;box-sizing:border-box;cursor:grab}.semi-colorPicker-alphaSlider{position:relative;cursor:pointer;margin-top:6px;border-radius:var(--semi-border-radius-full);background:url('data:image/svg+xml,')}.semi-colorPicker-alphaSlider .semi-colorPicker-alphaSliderInner{width:100%;height:100%;border-radius:4px}.semi-colorPicker-alphaSlider .semi-colorPicker-alphaHandle{background:url('data:image/svg+xml,');border-radius:var(--semi-border-radius-full);border:2px solid var(--semi-color-white);position:absolute;box-sizing:border-box;cursor:grab}.semi-colorPicker-colorSlider{position:relative;cursor:pointer;margin-top:6px;border-radius:var(--semi-border-radius-full);background:linear-gradient(to right,red,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red)}.semi-colorPicker-dataPart{margin-top:8px;display:flex;align-items:center}.semi-colorPicker-dataPart .semi-colorPicker-colorDemoBlock{border-radius:4px}.semi-colorPicker-dataPart .semi-colorPicker-inputGroup{margin-left:4px;width:100%;flex:1;flex-wrap:nowrap}.semi-colorPicker-dataPart .semi-colorPicker-inputGroup .semi-colorPicker-colorPickerInput{flex:1}.semi-colorPicker-dataPart .semi-colorPicker-inputGroup .semi-colorPicker-colorPickerInputNumber{width:58px}.semi-colorPicker-dataPart .semi-colorPicker-inputGroup .semi-colorPicker-colorPickerInputNumber .semi-colorPicker-inputNumberSuffix{font-size:14px;padding:4px}.semi-colorPicker-dataPart .semi-colorPicker-formatSelect{width:80px}.semi-colorPicker-popover{padding:8px}.semi-colorPicker-popover-defaultChildren{width:24px;height:24px;border-radius:4px;cursor:pointer}.semi-cropper{position:relative}.semi-cropper img{max-width:none}.semi-cropper-img{position:absolute;-webkit-user-select:none;user-select:none}.semi-cropper-img-wrapper{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden}.semi-cropper-mask{position:absolute;top:0;left:0;width:100%;height:100%;background:var(--semi-color-overlay-bg);cursor:move}.semi-cropper-box{position:absolute;outline:1px solid var(--semi-color-primary)}.semi-cropper-box-corner{position:absolute;background:var(--semi-color-primary);width:10px;height:10px;z-index:1}.semi-cropper-box-corner-tl{top:-5px;left:-5px;cursor:nwse-resize}.semi-cropper-box-corner-tr{top:-5px;right:-5px;cursor:nesw-resize}.semi-cropper-box-corner-tm{top:-5px;left:50%;margin-left:-5px;cursor:ns-resize}.semi-cropper-box-corner-ml{top:50%;left:-5px;margin-top:-5px;cursor:ew-resize}.semi-cropper-box-corner-mr{top:50%;right:-5px;margin-top:-5px;cursor:ew-resize}.semi-cropper-box-corner-bl{bottom:-5px;left:-5px;cursor:nesw-resize}.semi-cropper-box-corner-bm{bottom:-5px;left:50%;margin-left:-5px;cursor:ns-resize}.semi-cropper-box-corner-br{bottom:-5px;right:-5px;cursor:nwse-resize}.semi-cropper-view-box{position:absolute;overflow:hidden;cursor:move;top:0;left:0;right:0;bottom:0}.semi-cropper-view-box-round{border-radius:50%}.semi-cropper-view-img{-webkit-user-select:none;user-select:none}.semi-datepicker{box-sizing:border-box;display:inline-block}.semi-datepicker-container{display:flex}.semi-datepicker .semi-scrolllist-body .semi-scrolllist-item{-ms-overflow-style:none;scrollbar-width:none}.semi-datepicker .semi-scrolllist-body .semi-scrolllist-item::-webkit-scrollbar{display:none;width:0;height:0}.semi-datepicker .semi-scrolllist-body .semi-scrolllist-list-outer{-ms-overflow-style:none;scrollbar-width:none}.semi-datepicker .semi-scrolllist-body .semi-scrolllist-list-outer::-webkit-scrollbar{display:none;width:0;height:0}.semi-datepicker-month-grid{-webkit-user-select:none;user-select:none;display:flex}.semi-datepicker-month-grid-left,.semi-datepicker-month-grid-right{position:relative;padding:0;display:inline-flex;flex-direction:column;justify-content:flex-start}.semi-datepicker-month-grid[x-type=date] .semi-datepicker-yam,.semi-datepicker-month-grid[x-type=dateRange] .semi-datepicker-yam{height:100%}.semi-datepicker-month-grid[x-type=dateTime] .semi-datepicker-yam,.semi-datepicker-month-grid[x-type=dateTimeRange] .semi-datepicker-yam{height:calc(100% - 54px)}.semi-datepicker-month-grid .semi-datepicker-yam-showing{min-height:378px;min-width:284px}.semi-datepicker-month-grid[x-type=date] .semi-datepicker-yam-showing{min-height:325px}.semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-left[x-open-type=year],.semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-right[x-open-type=year],.semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-left[x-open-type=time],.semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-right[x-open-type=time]{min-height:317px}.semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-navigation{padding-top:8px;padding-bottom:8px}.semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-tpk{min-height:100%}.semi-datepicker-month-grid[x-insetinput=true][x-type=dateTime] .semi-datepicker-yam,.semi-datepicker-month-grid[x-insetinput=true][x-type=dateTimeRange] .semi-datepicker-yam{height:100%}.semi-datepicker-month-grid[x-preset-position=left][x-insetinput=false] .semi-datepicker-month,.semi-datepicker-month-grid[x-preset-position=right][x-insetinput=false] .semi-datepicker-month{height:253px}.semi-datepicker-month-grid .semi-datepicker-yearmonth-header{background:var(--semi-color-bg-3);padding:12px 16px;border-bottom:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-medium) var(--semi-border-radius-medium) 0 0;display:flex;align-items:center}.semi-datepicker-month-grid .semi-scrolllist{background:var(--semi-color-bg-3);position:relative;box-shadow:none;height:auto;width:100%;height:100%;overflow:hidden;flex:1}.semi-datepicker-month-grid .semi-scrolllist-header,.semi-datepicker-month-grid .semi-scrolllist-body{box-sizing:border-box;width:100%}.semi-datepicker-month-grid .semi-scrolllist-header{border-bottom:1px solid var(--semi-color-border);padding:16px}.semi-datepicker-month-grid .semi-scrolllist-body{height:100%;overflow:hidden;padding:0;flex:1}.semi-datepicker-month-grid .semi-scrolllist-line{display:none}.semi-datepicker-month-grid .semi-scrolllist-header-title{padding:0;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;min-height:24px;line-height:24px}.semi-datepicker-month-grid[x-panel-yearandmonth-open-type=left] .semi-datepicker-weeks,.semi-datepicker-month-grid[x-panel-yearandmonth-open-type=right] .semi-datepicker-weeks{min-height:216px}.semi-datepicker-panel-yam{max-width:484px}.semi-datepicker-panel-yam[x-type=monthRange]{max-width:584px}.semi-datepicker-panel-yam .semi-datepicker-yearmonth-body{display:flex}.semi-datepicker-panel-yam .semi-datepicker-yearmonth-body .semi-scrolllist:nth-child(2){border-left:1px solid var(--semi-color-border)}.semi-datepicker-panel-yam .semi-scrolllist{box-shadow:none;height:266px}.semi-datepicker-panel-yam .semi-scrolllist-list-outer>ul>li{min-width:64px}.semi-datepicker-panel-yam .semi-scrolllist-item>ul>li{min-width:82px}.semi-datepicker-panel-yam .semi-scrolllist-body{padding:0;overflow:hidden}.semi-datepicker-panel-yam .semi-scrolllist-body .semi-scrolllist-item-wheel:not(#neverExistElement){border:none}.semi-datepicker-footer{padding-top:10px;padding-right:8px;padding-bottom:10px;text-align:right;background-color:var(--semi-color-fill-0)}.semi-datepicker-footer .semi-button:first-of-type{margin-right:12px}.semi-datepicker-footer .semi-button:nth-of-type(2){margin-right:8px}.semi-datepicker-yam{position:absolute;top:0;width:100%;display:flex;flex-direction:column;box-sizing:border-box}.semi-datepicker-tpk{position:absolute;top:0;height:calc(100% - 54px);width:100%;display:flex;flex-direction:column}.semi-datepicker-tpk .semi-datepicker-time{height:100%}.semi-datepicker-navigation{display:flex;align-items:center;box-sizing:content-box;height:32px;padding:12px 16px}.semi-datepicker-navigation-left,.semi-datepicker-navigation-right{width:32px;height:32px;display:flex;justify-content:center;align-items:center}.semi-datepicker-navigation .semi-button{color:var(--semi-color-text-2);min-width:32px}.semi-datepicker-navigation-month{font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;flex-grow:1;text-align:center;font-weight:600;color:var(--semi-color-text-0)}.semi-datepicker-navigation-month .semi-button{color:var(--semi-color-text-0)}.semi-datepicker-month{width:252px;box-sizing:content-box;padding:0 16px 16px}.semi-datepicker-weekday{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;color:var(--semi-color-text-2);border-bottom:1px solid var(--semi-color-border)}.semi-datepicker-weekday-item{width:36px;height:36px;line-height:36px;text-align:center;display:inline-block}.semi-datepicker-weeks{color:var(--semi-color-text-0)}.semi-datepicker-week{display:flex;align-items:center}.semi-datepicker-day{box-sizing:border-box;display:inline-block;width:36px;height:36px;display:flex;justify-content:center;align-items:center;cursor:pointer}.semi-datepicker-day-main{display:flex;justify-content:center;align-items:center;width:32px;height:32px;margin:0 auto;box-sizing:border-box;border-radius:var(--semi-border-radius-small)}.semi-datepicker-day-main:hover{background-color:var(--semi-color-fill-0)}.semi-datepicker-day-main:active{background-color:var(--semi-color-fill-1)}.semi-datepicker-day-today .semi-datepicker-day-main{color:var(--semi-color-primary);background-color:var(--semi-color-fill-0);font-weight:600}.semi-datepicker-day-today.semi-datepicker-day-disabled .semi-datepicker-day-main{color:var(--semi-color-primary-disabled)}.semi-datepicker-day-inrange .semi-datepicker-day-main,.semi-datepicker-day-inhover .semi-datepicker-day-main,.semi-datepicker-day-inoffsetrange .semi-datepicker-day-main,.semi-datepicker-day-hoverday .semi-datepicker-day-main,.semi-datepicker-day-selectedrange-hover .semi-datepicker-day-main,.semi-datepicker-day-hoverday-around-singleselected .semi-datepicker-day-main{border-radius:0;margin-left:0;margin-right:0;width:36px}.semi-datepicker-day-selected .semi-datepicker-day-main,.semi-datepicker-day-selected-start.semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-datepicker-day-offsetrange-start.semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{border-radius:var(--semi-border-radius-small)}.semi-datepicker-day-offsetrange-start .semi-datepicker-day-main{border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-datepicker-day-hoverday-beforerange .semi-datepicker-day-main{border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-datepicker-day-hoverday-afterrange .semi-datepicker-day-main{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-datepicker-day-selected-start .semi-datepicker-day-main,.semi-datepicker-day-offsetrange-start .semi-datepicker-day-main{width:34px;margin-left:2px;margin-right:0;border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{width:34px;margin-right:2px;margin-left:0;border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-datepicker-day-hoverday-inrange .semi-datepicker-day-main{border-radius:0}.semi-datepicker-day-inoffsetrange .semi-datepicker-day-main,.semi-datepicker-day-offsetrange-start .semi-datepicker-day-main,.semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{background-color:var(--semi-color-fill-0)}.semi-datepicker-day-hoverday .semi-datepicker-day-main,.semi-datepicker-day-hoverday-offset .semi-datepicker-day-main{background-color:var(--semi-color-fill-1)}.semi-datepicker-day-inrange .semi-datepicker-day-main,.semi-datepicker-day-inhover .semi-datepicker-day-main{background-color:var(--semi-color-primary-light-default)}.semi-datepicker-day-hoverday-inrange .semi-datepicker-day-main,.semi-datepicker-day-hoverday-beforerange .semi-datepicker-day-main,.semi-datepicker-day-hoverday-afterrange .semi-datepicker-day-main,.semi-datepicker-day-hoverday-around-singleselected .semi-datepicker-day-main{background-color:var(--semi-color-primary-light-active)}.semi-datepicker-day-selected .semi-datepicker-day-main,.semi-datepicker-day-selected-start .semi-datepicker-day-main,.semi-datepicker-day-selected-end .semi-datepicker-day-main{background-color:var(--semi-color-primary);color:var(--semi-color-white)}.semi-datepicker-day-selected .semi-datepicker-day-main:hover,.semi-datepicker-day-selected-start .semi-datepicker-day-main:hover,.semi-datepicker-day-selected-end .semi-datepicker-day-main:hover{background-color:var(--semi-color-primary)}.semi-datepicker-day-selectedrange-hover .semi-datepicker-day-main{background-color:var(--semi-color-primary-light-hover)}.semi-datepicker-day-selected-start-afterhover .semi-datepicker-day-main,.semi-datepicker-day-selected-end-beforehover .semi-datepicker-day-main{border:1px solid var(--semi-color-primary-active)}.semi-datepicker-day-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text)}.semi-datepicker-day-disabled .semi-datepicker-day-main:hover,.semi-datepicker-day-disabled .semi-datepicker-day-main:active{background-color:#0000}.semi-datepicker-day-disabled.semi-datepicker-day-selected .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-selected-start .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-inhover .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-inrange .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-inoffsetrange .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-hoverday .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-hoverday-offset .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-offsetrange-start .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-offsetrange-end .semi-datepicker-day-main,.semi-datepicker-day-disabled.semi-datepicker-day-selectedrange-hover .semi-datepicker-day-main{background-color:var(--semi-color-disabled-fill);color:var(--semi-color-disabled-text)}.semi-datepicker-switch{text-align:center;display:flex;border-top:1px solid var(--semi-color-border);margin-top:auto}.semi-datepicker-switch-date,.semi-datepicker-switch-time{width:50%;cursor:pointer;padding-top:16px;padding-bottom:16px;display:flex;justify-content:center;align-items:center;color:var(--semi-color-text-2)}.semi-datepicker-switch-date:not(.semi-datepicker-switch-time-disabled):hover,.semi-datepicker-switch-time:not(.semi-datepicker-switch-time-disabled):hover{background-color:var(--semi-color-fill-0)}.semi-datepicker-switch-date-active,.semi-datepicker-switch-time-active{color:var(--semi-color-text-0);font-weight:600;cursor:auto}.semi-datepicker-switch-date-active:hover,.semi-datepicker-switch-time-active:hover{background-color:inherit}.semi-datepicker-switch-date-disabled,.semi-datepicker-switch-time-disabled{cursor:not-allowed}.semi-datepicker-switch-text{padding-left:8px}.semi-datepicker-time .semi-jumperlist{box-shadow:none;border-radius:0}.semi-datepicker-quick-control{box-sizing:border-box;background-color:#0000}.semi-datepicker-quick-control-header{padding:18px 12px 0;font-weight:600}.semi-datepicker-quick-control-left{border-right:1px solid var(--semi-color-border)}.semi-datepicker-quick-control-right{border-left:1px solid var(--semi-color-border)}.semi-datepicker-quick-control-top{border-bottom:1px solid var(--semi-color-border)}.semi-datepicker-quick-control-bottom{border-top:1px solid var(--semi-color-border)}.semi-datepicker-quick-control-left-content-wrapper,.semi-datepicker-quick-control-right-content-wrapper{max-width:200px;margin-top:14px;overflow-y:auto}.semi-datepicker-quick-control-top-content-wrapper,.semi-datepicker-quick-control-bottom-content-wrapper{overflow-y:auto;max-height:100px}.semi-datepicker-quick-control-left-content,.semi-datepicker-quick-control-right-content{box-sizing:border-box;display:grid;align-content:flex-start;grid-gap:8px;grid-template-columns:repeat(2,minmax(76.5px,84px));padding:0 12px 12px}.semi-datepicker-quick-control-left-content-item,.semi-datepicker-quick-control-right-content-item{max-width:84px}.semi-datepicker-quick-control-left-content-item-ellipsis,.semi-datepicker-quick-control-right-content-item-ellipsis{width:68px;color:var(--semi-color-primary)}.semi-datepicker-quick-control-top-content,.semi-datepicker-quick-control-bottom-content{display:grid;grid-gap:8px;grid-template-columns:repeat(3,minmax(70.924px,75.924px));align-content:flex-start;padding:8px 20px}.semi-datepicker-quick-control-top-content-item,.semi-datepicker-quick-control-bottom-content-item{max-width:75.924px}.semi-datepicker-quick-control-top-content-item-ellipsis,.semi-datepicker-quick-control-bottom-content-item-ellipsis{width:59.924px;color:var(--semi-color-primary)}.semi-datepicker-quick-control-top-range-content,.semi-datepicker-quick-control-bottom-range-content{box-sizing:border-box;display:grid;align-content:flex-start;grid-template-columns:repeat(5,minmax(96.2px,99.2px));grid-gap:8px;padding:8px 20px}.semi-datepicker-quick-control-top-range-content-item,.semi-datepicker-quick-control-bottom-range-content-item{max-width:99.2px}.semi-datepicker-quick-control-top-range-content-item-ellipsis,.semi-datepicker-quick-control-bottom-range-content-item-ellipsis{width:83.2px;color:var(--semi-color-primary)}.semi-datepicker-quick-control-top-month-content,.semi-datepicker-quick-control-bottom-month-content{box-sizing:border-box;display:grid;grid-template-columns:repeat(2,minmax(51px,58.5px));grid-gap:8px;align-content:flex-start;padding:8px 20px}.semi-datepicker-quick-control-top-month-content-item,.semi-datepicker-quick-control-bottom-month-content-item{max-width:58.5px}.semi-datepicker-quick-control-top-month-content-item-ellipsis,.semi-datepicker-quick-control-bottom-month-content-item-ellipsis{max-width:42.5px;color:var(--semi-color-primary)}.semi-datepicker-quick-control-month{max-width:284px}.semi-datepicker-quick-control-month[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-month[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:258px}.semi-datepicker-quick-control-month .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-month .semi-datepicker-quick-control-left-content-wrapper{max-height:214px}.semi-datepicker-quick-control-date{max-width:284px}.semi-datepicker-quick-control-date[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-date[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:309px}.semi-datepicker-quick-control-date .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-date .semi-datepicker-quick-control-left-content-wrapper{max-height:273px}.semi-datepicker-quick-control-dateTime{max-width:284px}.semi-datepicker-quick-control-dateTime[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-dateTime[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:309px}.semi-datepicker-quick-control-dateTime .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-dateTime .semi-datepicker-quick-control-left-content-wrapper{max-height:326px}.semi-datepicker-quick-control-dateRange{max-width:568px}.semi-datepicker-quick-control-dateRange[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-dateRange[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:309px}.semi-datepicker-quick-control-dateRange .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-dateRange .semi-datepicker-quick-control-left-content-wrapper{max-height:273px}.semi-datepicker-quick-control-dateTimeRange{max-width:568px}.semi-datepicker-quick-control-dateTimeRange[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-dateTimeRange[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:309px}.semi-datepicker-quick-control-dateTimeRange .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-quick-control-dateTimeRange .semi-datepicker-quick-control-left-content-wrapper{max-height:326px}.semi-datepicker-topSlot{border-bottom:1px solid var(--semi-color-border)}.semi-datepicker-leftSlot{border-right:1px solid var(--semi-color-border)}.semi-datepicker-rightSlot{border-left:1px solid var(--semi-color-border)}.semi-datepicker-bottomSlot{border-top:1px solid var(--semi-color-border)}.semi-datepicker .semi-popover-trigger{width:100%}.semi-datepicker .semi-popover-trigger .semi-input-wrapper{font-size:13px}.semi-datepicker .semi-popover-trigger .semi-input-suffix{color:var(--semi-color-primary)}.semi-datepicker .semi-datepicker-input-readonly{cursor:pointer}.semi-datepicker-inset-input-wrapper{display:flex;flex-wrap:nowrap;justify-content:space-between;box-sizing:border-box;column-gap:8px;padding:12px 16px 0;width:284px}.semi-datepicker-inset-input-wrapper[x-type=dateRange],.semi-datepicker-inset-input-wrapper[x-type=dateTimeRange]{width:568px}.semi-datepicker-inset-input-wrapper[x-type=month]{width:165px}.semi-datepicker-inset-input-wrapper[x-type=monthRange]{width:331px}.semi-datepicker-inset-input-wrapper .semi-input-wrapper{flex:1;flex-shrink:0}.semi-datepicker-inset-input-separator{flex-grow:0;flex-shrink:0;height:32px;line-height:32px;padding:0 4px;color:var(--semi-color-text-3)}.semi-datepicker-range-input{display:flex;align-items:center;box-sizing:border-box;border-radius:var(--semi-border-radius-small);height:32px;color:var(--semi-color-text-2);background-color:var(--semi-color-fill-0);border:0px solid rgba(0,0,0,0)}.semi-datepicker-range-input:hover,.semi-datepicker-range-input:active{border-color:#0000}.semi-datepicker-range-input:focus-within{border-color:#0000}.semi-datepicker-range-input .semi-datepicker-monthRange-input{background-color:#0000}.semi-datepicker-range-input-wrapper{box-sizing:border-box;background-color:#0000;padding:0 8px;height:100%;width:100%;border:1px solid rgba(0,0,0,0);border-radius:var(--semi-border-radius-small);display:flex;align-items:center}.semi-datepicker-range-input-wrapper .semi-input-wrapper{background-color:#0000;height:fit-content;border:none}.semi-datepicker-range-input-wrapper .semi-input-wrapper:active:not(#neverExistElement){background-color:#0000}.semi-datepicker-range-input-wrapper .semi-input-wrapper:hover:not(#neverExistElement){background-color:#0000}.semi-datepicker-range-input-wrapper-focus{border-color:#0000;background-color:var(--semi-color-fill-1);border-radius:var(--semi-border-radius-small);transition:background-color .16s ease-in-out}.semi-datepicker-range-input-wrapper-focus~.semi-datepicker-range-input-clearbtn{display:flex}.semi-datepicker-range-input-wrapper-focus~.semi-datepicker-range-input-clearbtn~.semi-datepicker-range-input-suffix{display:none}.semi-datepicker-range-input-wrapper .semi-input{padding:2px 4px}.semi-datepicker-range-input-wrapper-icon{flex-shrink:0}.semi-datepicker-range-input-wrapper:hover{background-color:var(--semi-color-fill-1)}.semi-datepicker-range-input-wrapper-start{border-top-right-radius:0;border-bottom-right-radius:0}.semi-datepicker-range-input-wrapper-start-with-prefix,.semi-datepicker-range-input-wrapper-end{border-radius:0}.semi-datepicker-range-input-wrapper-active{border-color:var(--semi-color-focus-border);background-color:var(--semi-color-fill-1)}.semi-datepicker-range-input-separator{display:flex;align-items:center}.semi-datepicker-range-input-separator-active{color:var(--semi-color-text-0)}.semi-datepicker-range-input-small{height:24px}.semi-datepicker-range-input-large{height:40px}.semi-datepicker-range-input-large .semi-input-default{font-size:16px}.semi-datepicker-range-input:hover .semi-datepicker-range-input-clearbtn{display:flex;cursor:pointer}.semi-datepicker-range-input:hover .semi-datepicker-range-input-clearbtn~.semi-datepicker-range-input-suffix{display:none}.semi-datepicker-range-input:hover .semi-datepicker-range-input-clearbtn:hover{color:var(--semi-color-primary-hover)}.semi-datepicker-range-input-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text);background-color:var(--semi-color-disabled-fill)}.semi-datepicker-range-input-disabled .semi-datepicker-range-input-wrapper:hover{background-color:#0000}.semi-datepicker-range-input-disabled:hover{background-color:var(--semi-color-disabled-fill)}.semi-datepicker-range-input-disabled .semi-datepicker-range-input-prefix,.semi-datepicker-range-input-disabled .semi-datepicker-range-input-suffix,.semi-datepicker-range-input-disabled .semi-datepicker-range-input-clearbtn{color:var(--semi-color-disabled-text)}.semi-datepicker-range-input-warning{background-color:var(--semi-color-warning-light-default)}.semi-datepicker-range-input-warning .semi-datepicker-range-input-wrapper:hover{background-color:var(--semi-color-warning-light-hover)}.semi-datepicker-range-input-warning .semi-datepicker-range-input-wrapper-active{border-color:var(--semi-color-warning);background-color:var(--semi-color-warning-light-hover)}.semi-datepicker-range-input-error{background-color:var(--semi-color-danger-light-default)}.semi-datepicker-range-input-error .semi-datepicker-range-input-wrapper:hover{background-color:var(--semi-color-danger-light-hover)}.semi-datepicker-range-input-error .semi-datepicker-range-input-wrapper-active{border-color:var(--semi-color-danger);background-color:var(--semi-color-danger-light-hover)}.semi-datepicker-range-input .semi-datepicker-range-input-clearbtn{display:none}.semi-datepicker-range-input-prefix,.semi-datepicker-range-input-suffix,.semi-datepicker-range-input-clearbtn{display:flex;align-items:center;justify-content:center;font-weight:600;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;white-space:nowrap;color:var(--semi-color-text-2)}.semi-datepicker-range-input-prefix{padding-left:12px;padding-right:8px}.semi-datepicker-range-input-suffix{padding-left:8px;padding-right:12px}.semi-datepicker-range-input-suffix-hidden{display:none}.semi-datepicker-range-input-clearbtn{padding-left:8px;padding-right:12px}.semi-datepicker-compact{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:20px;display:inline-block;max-width:calc(100vw - 32px)}.semi-datepicker-compact:not(.semi-datepicker-compact-insetInput){width:max-content}.semi-datepicker-compact .semi-datepicker-container,.semi-datepicker-compact .semi-datepicker-month-grid{width:max-content}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-month-grid-left,.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-month-grid-right{min-width:216px;max-width:calc(100vw - 32px)}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-month{margin-left:auto;margin-right:auto}.semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateTime] .semi-datepicker-yam,.semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateTimeRange] .semi-datepicker-yam{height:calc(100% - 32px)}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-yam{position:relative;width:100%;max-width:100%;max-height:256px;overflow-x:auto;overflow-y:hidden}.semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateRange] .semi-datepicker-month-grid-left,.semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateTimeRange] .semi-datepicker-month-grid-left{border-right:1px solid var(--semi-color-border)}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-yam-showing{min-height:288px;min-width:216px}.semi-datepicker-compact .semi-datepicker-month-grid[x-type=date] .semi-datepicker-yam-showing{min-height:256px}.semi-datepicker-compact .semi-datepicker-month-grid[x-preset-position=left][x-insetinput=false] .semi-datepicker-month,.semi-datepicker-compact .semi-datepicker-month-grid[x-preset-position=right][x-insetinput=false] .semi-datepicker-month{height:220px}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-yearmonth-header{box-sizing:border-box;height:48px;padding:12px;width:100%;max-width:100%}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-yearmonth-header button,.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-yearmonth-header .semi-button{width:100%;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-yearmonth-body{display:flex}.semi-datepicker-compact .semi-datepicker-month-grid .semi-datepicker-yearmonth-body .semi-scrolllist:nth-child(2){border:1px solid var(--semi-color-border)}.semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:20px}.semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-header{display:none}.semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-list-outer>ul>li{height:32px}.semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-item-wheel{border-right:0}.semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-item-wheel .semi-scrolllist-selector{height:32px}.semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-item-wheel .semi-scrolllist-shade-pre{margin-top:-17px}.semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-item-wheel .semi-scrolllist-shade-post{margin-top:17px}.semi-datepicker-compact .semi-datepicker-month-grid[x-panel-yearandmonth-open-type=left] .semi-datepicker-weeks,.semi-datepicker-compact .semi-datepicker-month-grid[x-panel-yearandmonth-open-type=right] .semi-datepicker-weeks{min-height:168px}.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-left[x-open-type=year],.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-right[x-open-type=year],.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-left[x-open-type=time],.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-month-grid-right[x-open-type=time],.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-yam-showing{min-height:256px}.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true] .semi-datepicker-tpk{min-height:100%}.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true][x-type=dateTime] .semi-datepicker-yam,.semi-datepicker-compact .semi-datepicker-month-grid[x-insetinput=true][x-type=dateTimeRange] .semi-datepicker-yam{height:100%}.semi-datepicker-compact.semi-datepicker-panel-yam .semi-scrolllist{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:20px}.semi-datepicker-compact .semi-datepicker-tpk{height:calc(100% - 32px)}.semi-datepicker-compact .semi-datepicker-navigation{box-sizing:border-box;height:24px;padding:12px 12px 0;width:100%;max-width:100%}.semi-datepicker-compact .semi-datepicker-navigation-left,.semi-datepicker-compact .semi-datepicker-navigation-right{width:24px;height:24px}.semi-datepicker-compact .semi-datepicker-navigation .semi-button{min-width:24px;min-height:24px}.semi-datepicker-compact .semi-datepicker-navigation-month{min-width:0;overflow:hidden}.semi-datepicker-compact .semi-datepicker-navigation-month .semi-button{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:20px;max-width:100%}.semi-datepicker-compact .semi-datepicker-navigation-month .semi-button>span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-datepicker-compact .semi-datepicker-month{width:216px;padding:0}.semi-datepicker-compact .semi-datepicker-weeks{padding:6px 10px 10px}.semi-datepicker-compact .semi-datepicker-weekday{box-sizing:border-box;height:36px;padding-left:10px;padding-right:10px;padding-bottom:8px;border-bottom:1px solid var(--semi-color-border)}.semi-datepicker-compact .semi-datepicker-weekday-item{width:28px;height:28px;line-height:28px}.semi-datepicker-compact .semi-datepicker-day{width:28px;height:28px}.semi-datepicker-compact .semi-datepicker-day-main{width:24px;height:24px}.semi-datepicker-compact .semi-datepicker-day-inrange .semi-datepicker-day-main,.semi-datepicker-compact .semi-datepicker-day-inhover .semi-datepicker-day-main,.semi-datepicker-compact .semi-datepicker-day-inoffsetrange .semi-datepicker-day-main,.semi-datepicker-compact .semi-datepicker-day-hoverday .semi-datepicker-day-main,.semi-datepicker-compact .semi-datepicker-day-selectedrange-hover .semi-datepicker-day-main{width:28px}.semi-datepicker-compact .semi-datepicker-day-selected-start.semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-datepicker-compact .semi-datepicker-day-offsetrange-start.semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{border-radius:4px}.semi-datepicker-compact .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main{border-radius:4px 0 0 4px}.semi-datepicker-compact .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{border-radius:0 4px 4px 0}.semi-datepicker-compact .semi-datepicker-day-hoverday-beforerange .semi-datepicker-day-main{border-radius:4px 0 0 4px}.semi-datepicker-compact .semi-datepicker-day-hoverday-afterrange .semi-datepicker-day-main{border-radius:0 4px 4px 0}.semi-datepicker-compact .semi-datepicker-day-selected-start .semi-datepicker-day-main,.semi-datepicker-compact .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main{width:34px;margin-left:2px;margin-right:0;border-radius:4px 0 0 4px}.semi-datepicker-compact .semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-datepicker-compact .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{width:34px;margin-right:2px;margin-left:0;border-radius:0 4px 4px 0}.semi-datepicker-compact .semi-datepicker-switch{box-sizing:border-box;height:32px}.semi-datepicker-compact .semi-datepicker-switch-date,.semi-datepicker-compact .semi-datepicker-switch-time{padding-top:6px;padding-bottom:6px}.semi-datepicker-compact .semi-datepicker-switch-date{border-right:1px solid var(--semi-color-border)}.semi-datepicker-compact .semi-datepicker-switch-text{padding-left:0}.semi-datepicker-compact .semi-datepicker-quick-control-header{padding:16px 12px 0;font-weight:600}.semi-datepicker-compact .semi-datepicker-quick-control-left-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-right-content-wrapper{margin-top:12px}.semi-datepicker-compact .semi-datepicker-quick-control-left-content,.semi-datepicker-compact .semi-datepicker-quick-control-right-content{box-sizing:border-box;display:grid;align-content:flex-start;grid-gap:8px;grid-template-columns:repeat(2,minmax(76.5px,84px));padding:0 12px 12px}.semi-datepicker-compact .semi-datepicker-quick-control-left-content-item,.semi-datepicker-compact .semi-datepicker-quick-control-right-content-item{max-width:84px}.semi-datepicker-compact .semi-datepicker-quick-control-left-content-item-ellipsis,.semi-datepicker-compact .semi-datepicker-quick-control-right-content-item-ellipsis{width:68px;font-size:12px;color:var(--semi-color-primary)}.semi-datepicker-compact .semi-datepicker-quick-control-top-content,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-content{box-sizing:border-box;display:grid;grid-gap:8px;grid-template-columns:repeat(3,minmax(54.94px,59.94px));align-content:flex-start;padding:8px 10px}.semi-datepicker-compact .semi-datepicker-quick-control-top-content-item,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-content-item{max-width:59.94px}.semi-datepicker-compact .semi-datepicker-quick-control-top-content-item-ellipsis,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-content-item-ellipsis{width:43.94px;font-size:12px;color:var(--semi-color-primary)}.semi-datepicker-compact .semi-datepicker-quick-control-top-range-content,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-range-content{display:grid;grid-template-columns:repeat(5,minmax(73px,76px));grid-gap:8px;align-content:flex-start;padding:8px 10px}.semi-datepicker-compact .semi-datepicker-quick-control-top-range-content-item,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-range-content-item{max-width:76px}.semi-datepicker-compact .semi-datepicker-quick-control-top-range-content-item-ellipsis,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-range-content-item-ellipsis{width:60px;font-size:12px;color:var(--semi-color-primary)}.semi-datepicker-compact .semi-datepicker-quick-control-top-month-content,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-month-content{display:grid;grid-template-columns:repeat(2,minmax(61px,68.5px));grid-gap:8px;align-content:flex-start;padding:8px 10px}.semi-datepicker-compact .semi-datepicker-quick-control-top-month-content-item,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-month-content-item{max-width:68.5px}.semi-datepicker-compact .semi-datepicker-quick-control-top-month-content-item-ellipsis,.semi-datepicker-compact .semi-datepicker-quick-control-bottom-month-content-item-ellipsis{max-width:52.5px;font-size:12px;color:var(--semi-color-primary)}.semi-datepicker-compact .semi-datepicker-quick-control-month{min-width:216px;width:max-content;max-width:calc(100vw - 32px)}.semi-datepicker-compact .semi-datepicker-quick-control-month[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-month[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:254px}.semi-datepicker-compact .semi-datepicker-quick-control-month .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-month .semi-datepicker-quick-control-left-content-wrapper{max-height:218px}.semi-datepicker-compact .semi-datepicker-quick-control-date{min-width:216px;width:max-content;max-width:calc(100vw - 32px)}.semi-datepicker-compact .semi-datepicker-quick-control-date[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-date[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:248px}.semi-datepicker-compact .semi-datepicker-quick-control-date .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-date .semi-datepicker-quick-control-left-content-wrapper{max-height:208px}.semi-datepicker-compact .semi-datepicker-quick-control-dateTime{min-width:216px;width:max-content;max-width:calc(100vw - 32px)}.semi-datepicker-compact .semi-datepicker-quick-control-dateTime[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-dateTime[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:248px}.semi-datepicker-compact .semi-datepicker-quick-control-dateTime .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-dateTime .semi-datepicker-quick-control-left-content-wrapper{max-height:240px}.semi-datepicker-compact .semi-datepicker-quick-control-dateRange{min-width:min(432px,calc(100vw - 32px));width:max-content;max-width:calc(100vw - 32px)}.semi-datepicker-compact .semi-datepicker-quick-control-dateRange[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-dateRange[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:248px}.semi-datepicker-compact .semi-datepicker-quick-control-dateRange .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-dateRange .semi-datepicker-quick-control-left-content-wrapper{max-height:208px}.semi-datepicker-compact .semi-datepicker-quick-control-dateTimeRange{min-width:min(432px,calc(100vw - 32px));width:max-content;max-width:calc(100vw - 32px)}.semi-datepicker-compact .semi-datepicker-quick-control-dateTimeRange[x-insetinput=true] .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-dateTimeRange[x-insetinput=true] .semi-datepicker-quick-control-left-content-wrapper{max-height:248px}.semi-datepicker-compact .semi-datepicker-quick-control-dateTimeRange .semi-datepicker-quick-control-right-content-wrapper,.semi-datepicker-compact .semi-datepicker-quick-control-dateTimeRange .semi-datepicker-quick-control-left-content-wrapper{max-height:240px}.semi-datepicker-compact .semi-datepicker-footer{padding-top:10px;padding-right:8px;padding-bottom:10px}.semi-datepicker-compact .semi-datepicker-inset-input-wrapper{column-gap:4px;padding:8px 8px 0;width:216px}.semi-datepicker-compact .semi-datepicker-inset-input-wrapper[x-type=dateRange],.semi-datepicker-compact .semi-datepicker-inset-input-wrapper[x-type=dateTimeRange]{width:432px;padding-top:0}.semi-datepicker-compact .semi-datepicker-inset-input-wrapper[x-type=dateRange] .semi-input-wrapper,.semi-datepicker-compact .semi-datepicker-inset-input-wrapper[x-type=dateTimeRange] .semi-input-wrapper{margin-top:8px}.semi-datepicker-compact .semi-datepicker-inset-input-wrapper[x-type=month]{width:195px}.semi-datepicker-compact .semi-datepicker-inset-input-wrapper .semi-input-wrapper{height:28px;box-sizing:border-box}.semi-datepicker-compact .semi-datepicker-inset-input-wrapper .semi-input-wrapper .semi-input{font-size:12px;line-height:26px;height:26px;vertical-align:top}.semi-datepicker-compact .semi-datepicker-inset-input-separator{border-left:1px solid var(--semi-color-border);transform:translate(50%);height:auto}.semi-popover-wrapper[x-placement^=top] .semi-datepicker .semi-datepicker-weeks,.semi-popover-wrapper[x-placement=leftTop] .semi-datepicker .semi-datepicker-weeks,.semi-popover-wrapper[x-placement=rightTop] .semi-datepicker .semi-datepicker-weeks,.semi-popover-wrapper[x-placement*=BottomOver] .semi-datepicker .semi-datepicker-weeks{min-height:216px}.semi-popover-wrapper[x-placement^=top] .semi-datepicker-compact .semi-datepicker-weeks,.semi-popover-wrapper[x-placement=leftTop] .semi-datepicker-compact .semi-datepicker-weeks,.semi-popover-wrapper[x-placement=rightTop] .semi-datepicker-compact .semi-datepicker-weeks,.semi-popover-wrapper[x-placement*=BottomOver] .semi-datepicker-compact .semi-datepicker-weeks{min-height:168px}.semi-datepicker-borderless:not(:focus-within):not(:hover){background-color:#0000;border-color:#0000}.semi-datepicker-borderless:not(:focus-within):not(:hover) .semi-input-suffix,.semi-datepicker-borderless:not(:focus-within):not(:hover) .semi-datepicker-range-input-suffix{opacity:0}.semi-datepicker-borderless:focus-within:not(:active){background-color:#0000}.semi-datepicker-borderless.semi-datepicker-range-input-error .semi-datepicker-range-input-wrapper-active{border-color:#0000}.semi-datepicker-borderless.semi-datepicker-range-input-error:hover{background-color:var(--semi-color-danger-light-default)}.semi-datepicker-borderless.semi-datepicker-range-input-error:focus-within{background-color:var(--semi-color-danger-light-default)}.semi-datepicker-borderless.semi-datepicker-range-input-error:not(:focus-within){border-width:1px;border-color:var(--semi-color-danger)}.semi-datepicker-borderless.semi-datepicker-range-input-error:focus-within{border-width:1px;border-color:var(--semi-color-danger)}.semi-datepicker-borderless.semi-datepicker-range-input-warning .semi-datepicker-range-input-wrapper-active{border-color:#0000}.semi-datepicker-borderless.semi-datepicker-range-input-warning:hover{background-color:var(--semi-color-warning-light-default)}.semi-datepicker-borderless.semi-datepicker-range-input-warning:focus-within{background-color:var(--semi-color-warning-light-default)}.semi-datepicker-borderless.semi-datepicker-range-input-warning:not(:focus-within){border-width:1px;border-color:var(--semi-color-warning)}.semi-datepicker-borderless.semi-datepicker-range-input-warning:focus-within{border-width:1px;border-color:var(--semi-color-warning)}.semi-rtl .semi-datepicker,.semi-portal-rtl .semi-datepicker{direction:rtl}.semi-rtl .semi-datepicker-footer,.semi-portal-rtl .semi-datepicker-footer{padding-right:0;padding-left:8px;text-align:left}.semi-rtl .semi-datepicker-footer .semi-button:first-of-type,.semi-portal-rtl .semi-datepicker-footer .semi-button:first-of-type{margin-left:0;margin-right:0}.semi-rtl .semi-datepicker-footer .semi-button:nth-of-type(2),.semi-portal-rtl .semi-datepicker-footer .semi-button:nth-of-type(2){margin-right:12px;margin-left:0}.semi-rtl .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-rtl .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-rtl .semi-datepicker-day-selected-start .semi-datepicker-day-main,.semi-rtl .semi-datepicker-day-hoverday-before-selectedrange .semi-datepicker-day-main,.semi-rtl .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-selected-start .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-hoverday-before-selectedrange .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main{margin-right:2px;margin-left:auto;border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-rtl .semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-rtl .semi-datepicker-day-hoverday-after-selectedrange .semi-datepicker-day-main,.semi-rtl .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-hoverday-after-selectedrange .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{margin-left:2px;margin-right:auto;border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-rtl .semi-datepicker-switch-text,.semi-portal-rtl .semi-datepicker-switch-text{padding-left:0;padding-right:8px}.semi-rtl .semi-datepicker-navigation .semi-icon-chevron_left,.semi-rtl .semi-datepicker-navigation .semi-icon-chevron_right,.semi-rtl .semi-datepicker-navigation .semi-icon-double_chevron_left,.semi-rtl .semi-datepicker-navigation .semi-icon-double_chevron_right,.semi-rtl .semi-datepicker-yam .semi-icon-chevron_left,.semi-rtl .semi-datepicker-yam .semi-icon-chevron_right,.semi-rtl .semi-datepicker-yam .semi-icon-double_chevron_left,.semi-rtl .semi-datepicker-yam .semi-icon-double_chevron_right,.semi-portal-rtl .semi-datepicker-navigation .semi-icon-chevron_left,.semi-portal-rtl .semi-datepicker-navigation .semi-icon-chevron_right,.semi-portal-rtl .semi-datepicker-navigation .semi-icon-double_chevron_left,.semi-portal-rtl .semi-datepicker-navigation .semi-icon-double_chevron_right,.semi-portal-rtl .semi-datepicker-yam .semi-icon-chevron_left,.semi-portal-rtl .semi-datepicker-yam .semi-icon-chevron_right,.semi-portal-rtl .semi-datepicker-yam .semi-icon-double_chevron_left,.semi-portal-rtl .semi-datepicker-yam .semi-icon-double_chevron_right{transform:scaleX(-1)}.semi-rtl .semi-datepicker-range-input-prefix,.semi-portal-rtl .semi-datepicker-range-input-prefix{padding-left:8px;padding-right:12px}.semi-rtl .semi-datepicker-range-input-suffix,.semi-portal-rtl .semi-datepicker-range-input-suffix{padding-left:12px;padding-right:8px}.semi-rtl .semi-datepicker-range-input-suffix-hidden,.semi-portal-rtl .semi-datepicker-range-input-suffix-hidden{display:none}.semi-rtl .semi-datepicker-range-input-clearbtn,.semi-portal-rtl .semi-datepicker-range-input-clearbtn{padding-left:12px;padding-right:8px}.semi-rtl .semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateRange] .semi-datepicker-month-grid-left,.semi-rtl .semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateTimeRange] .semi-datepicker-month-grid-left,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateRange] .semi-datepicker-month-grid-left,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-month-grid[x-type=dateTimeRange] .semi-datepicker-month-grid-left{border-left:1px solid var(--semi-color-border);border-right:0}.semi-rtl .semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-item-wheel,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-month-grid .semi-scrolllist-item-wheel{border-left:0;border-right:0}.semi-rtl .semi-datepicker-compact .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-day-offsetrange-start .semi-datepicker-day-main{border-radius:0 4px 4px 0}.semi-rtl .semi-datepicker-compact .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-day-offsetrange-end .semi-datepicker-day-main{border-radius:4px 0 0 4px}.semi-rtl .semi-datepicker-compact .semi-datepicker-day-selected-start .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-day-selected-start .semi-datepicker-day-main{margin-left:0;margin-right:2px;border-radius:0 4px 4px 0}.semi-rtl .semi-datepicker-compact .semi-datepicker-day-selected-end .semi-datepicker-day-main,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-day-selected-end .semi-datepicker-day-main{margin-right:0;margin-left:2px;border-radius:4px 0 0 4px}.semi-rtl .semi-datepicker-compact .semi-datepicker-switch-date,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-switch-date{border-left:1px solid var(--semi-color-border);border-right:0}.semi-rtl .semi-datepicker-compact .semi-datepicker-switch-text,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-switch-text{padding-left:auto;padding-right:0}.semi-rtl .semi-datepicker-compact .semi-datepicker-footer,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-footer{padding-left:8px;padding-right:auto}.semi-rtl .semi-datepicker-compact .semi-datepicker-inset-input-separator,.semi-portal-rtl .semi-datepicker-compact .semi-datepicker-inset-input-separator{border-right:1px solid var(--semi-color-border);border-left:0;transform:translate(-50%)}.semi-descriptions{line-height:20px}.semi-descriptions table,.semi-descriptions tr,.semi-descriptions th,.semi-descriptions td{margin:0;padding:0;border:0}.semi-descriptions th{padding-right:24px}.semi-descriptions .semi-descriptions-item{margin:0;padding-bottom:12px;text-align:left;vertical-align:top}.semi-descriptions-key{font-weight:400;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;min-height:14px;white-space:nowrap;color:var(--semi-color-text-2)}.semi-descriptions-value{font-weight:400;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-0)}.semi-descriptions-center .semi-descriptions-item-th{text-align:right}.semi-descriptions-center .semi-descriptions-item-td,.semi-descriptions-left .semi-descriptions-item-th,.semi-descriptions-left .semi-descriptions-item-td,.semi-descriptions-justify .semi-descriptions-item-th{text-align:left}.semi-descriptions-justify .semi-descriptions-item-td{text-align:right}.semi-descriptions-plain .semi-descriptions-key,.semi-descriptions-plain .semi-descriptions-value{display:inline-block}.semi-descriptions-plain .semi-descriptions-value{padding-left:8px}.semi-descriptions-plain .semi-descriptions-value .semi-tag{vertical-align:middle}.semi-descriptions-double tbody{display:flex;flex-wrap:wrap}.semi-descriptions-double tr{display:inline-flex;flex-direction:column}.semi-descriptions-double .semi-descriptions-item{padding:0;flex:1}.semi-descriptions-double .semi-descriptions-value{font-weight:600}.semi-descriptions-double-small .semi-descriptions-item{padding-right:48px}.semi-descriptions-double-small .semi-descriptions-key{line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;padding-bottom:0;font-size:12px}.semi-descriptions-double-small .semi-descriptions-value{line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:16px}.semi-descriptions-double-medium .semi-descriptions-item{padding-right:60px}.semi-descriptions-double-medium .semi-descriptions-key{padding-bottom:4px;font-size:14px}.semi-descriptions-double-medium .semi-descriptions-value{line-height:28px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:20px}.semi-descriptions-double-large .semi-descriptions-item{padding-right:80px}.semi-descriptions-double-large .semi-descriptions-key{padding-bottom:4px;font-size:14px}.semi-descriptions-double-large .semi-descriptions-value{line-height:40px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:28px}.semi-descriptions-horizontal table{table-layout:fixed}.semi-descriptions-horizontal table,.semi-descriptions-horizontal tbody{width:100%}.semi-descriptions-horizontal .semi-descriptions-item{flex:0}.semi-rtl .semi-descriptions,.semi-portal-rtl .semi-descriptions{direction:rtl}.semi-rtl .semi-descriptions th,.semi-portal-rtl .semi-descriptions th{direction:rtl;padding-right:0;padding-left:24px}.semi-rtl .semi-descriptions .semi-descriptions-item,.semi-portal-rtl .semi-descriptions .semi-descriptions-item{text-align:right}.semi-rtl .semi-descriptions-center .semi-descriptions-item-th,.semi-portal-rtl .semi-descriptions-center .semi-descriptions-item-th{text-align:left}.semi-rtl .semi-descriptions-center .semi-descriptions-item-td,.semi-portal-rtl .semi-descriptions-center .semi-descriptions-item-td{text-align:right}.semi-rtl .semi-descriptions-left .semi-descriptions-item-th,.semi-rtl .semi-descriptions-left .semi-descriptions-item-td,.semi-portal-rtl .semi-descriptions-left .semi-descriptions-item-th,.semi-portal-rtl .semi-descriptions-left .semi-descriptions-item-td{text-align:left}.semi-rtl .semi-descriptions-justify .semi-descriptions-item-th,.semi-portal-rtl .semi-descriptions-justify .semi-descriptions-item-th{text-align:right}.semi-rtl .semi-descriptions-justify .semi-descriptions-item-td,.semi-portal-rtl .semi-descriptions-justify .semi-descriptions-item-td{text-align:left}.semi-rtl .semi-descriptions-plain .semi-descriptions-key,.semi-rtl .semi-descriptions-plain .semi-descriptions-value,.semi-portal-rtl .semi-descriptions-plain .semi-descriptions-key,.semi-portal-rtl .semi-descriptions-plain .semi-descriptions-value{display:inline-block}.semi-rtl .semi-descriptions-plain .semi-descriptions-value,.semi-portal-rtl .semi-descriptions-plain .semi-descriptions-value{padding-left:0;padding-right:8px}.semi-rtl .semi-descriptions-plain .semi-descriptions-value .semi-tag,.semi-portal-rtl .semi-descriptions-plain .semi-descriptions-value .semi-tag{vertical-align:middle}.semi-rtl .semi-descriptions-double,.semi-portal-rtl .semi-descriptions-double{direction:rtl}.semi-rtl .semi-descriptions-double .semi-descriptions-item,.semi-portal-rtl .semi-descriptions-double .semi-descriptions-item{text-align:right}.semi-rtl .semi-descriptions-double-small .semi-descriptions-item,.semi-portal-rtl .semi-descriptions-double-small .semi-descriptions-item{padding-right:0;padding-left:48px}.semi-rtl .semi-descriptions-double-medium .semi-descriptions-item,.semi-portal-rtl .semi-descriptions-double-medium .semi-descriptions-item{padding-right:0;padding-left:60px}.semi-rtl .semi-descriptions-double-large .semi-descriptions-item,.semi-portal-rtl .semi-descriptions-double-large .semi-descriptions-item{padding-right:0;padding-left:80px}.semi-divider{margin:1px 0;border-bottom:1px solid var(--semi-color-border);color:var(--semi-color-text-0);box-sizing:border-box}.semi-divider-dashed{border-bottom-style:dashed}.semi-divider-horizontal{width:100%;display:flex}.semi-divider-vertical{border-bottom:0;display:inline-block;margin:0 1px;border-left:1px solid var(--semi-color-border);height:20px;vertical-align:middle}.semi-divider-with-text{display:flex;border-bottom:0;white-space:nowrap;align-items:center}.semi-divider-with-text .semi-divider_inner-text{font-weight:600;padding:0 8px;display:inline-block}.semi-divider-with-text:before,.semi-divider-with-text:after{content:"";width:50%;border-bottom:1px solid var(--semi-color-border)}.semi-divider-with-text-left:before{width:40px}.semi-divider-with-text-left:after{flex:1}.semi-divider-with-text-right:before{flex:1}.semi-divider-with-text-right:after{width:40px}.semi-divider-dashed:before,.semi-divider-dashed:after{border-bottom:1px dashed var(--semi-color-border)}.semi-divider-vertical.semi-divider-dashed{border-left:1px dashed var(--semi-color-border)}.semi-dropdown{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-dropdown-wrapper{overflow-y:auto;box-shadow:var(--semi-shadow-elevated);position:relative;z-index:1050;border-radius:var(--semi-border-radius-medium);background:var(--semi-color-bg-3);-webkit-backdrop-filter:none;backdrop-filter:none;opacity:0}.semi-dropdown-wrapper-show{opacity:1}.semi-dropdown-trigger{display:inline-block}.semi-dropdown-menu{list-style:none;padding:4px 0;margin:0}.semi-dropdown-title{color:var(--semi-color-text-2);padding:8px 16px 4px;font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:default}.semi-dropdown-title-withTick{padding-left:31px}.semi-dropdown-item{padding:8px 16px;color:var(--semi-color-text-0);max-width:280px;display:flex;align-items:center;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeOut) 0ms;border-radius:0}.semi-dropdown-item-hover{background-color:var(--semi-color-fill-0)}.semi-dropdown-item:not(.semi-dropdown-item-active):hover{background-color:var(--semi-color-fill-0);cursor:pointer}.semi-dropdown-item:not(.semi-dropdown-item-active):active{background-color:var(--semi-color-fill-1)}.semi-dropdown-item:focus-visible{background-color:var(--semi-color-fill-0);outline:0}.semi-dropdown-item-icon{display:inline-flex;align-items:center;margin-right:8px}.semi-dropdown-item-danger{color:var(--semi-color-danger)}.semi-dropdown-item-secondary{color:var(--semi-color-secondary)}.semi-dropdown-item-warning{color:var(--semi-color-warning)}.semi-dropdown-item-tertiary{color:var(--semi-color-tertiary)}.semi-dropdown-item-primary{color:var(--semi-color-primary)}.semi-dropdown-item-withTick{padding-left:12px}.semi-dropdown-item>.semi-icon{flex-shrink:0;margin-right:9px;font-size:12px}.semi-dropdown-item-active{font-weight:600}.semi-dropdown-item.semi-dropdown-item-disabled{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-dropdown-item.semi-dropdown-item-disabled:hover,.semi-dropdown-item.semi-dropdown-item-disabled:active{cursor:not-allowed;background-color:#0000}.semi-dropdown-divider{display:block;height:1px;width:100%;min-width:100%;clear:both;background:var(--semi-color-border);margin:4px 0}.semi-rtl .semi-dropdown-wrapper,.semi-portal-rtl .semi-dropdown-wrapper{direction:rtl}.semi-rtl .semi-dropdown-title-withTick,.semi-portal-rtl .semi-dropdown-title-withTick{padding-left:0;padding-right:31px}.semi-rtl .semi-dropdown-item-withTick,.semi-portal-rtl .semi-dropdown-item-withTick{padding-left:auto;padding-right:12px}.semi-rtl .semi-dropdown-item>.semi-icon,.semi-portal-rtl .semi-dropdown-item>.semi-icon{margin-right:0;margin-left:9px}.semi-empty{display:flex}.semi-empty-image{display:flex;justify-content:center;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;pointer-events:none}.semi-empty-vertical{align-items:center;flex-direction:column}.semi-empty-vertical .semi-empty-content{margin-top:24px}.semi-empty-vertical .semi-empty-title,.semi-empty-vertical .semi-empty-description{text-align:center}.semi-empty-horizontal .semi-empty-content{margin-left:32px}.semi-empty-title.semi-typography{display:block;font-weight:600}.semi-empty-title+.semi-empty-description{margin-top:16px}.semi-empty-description{color:var(--semi-color-text-1)}.semi-empty-footer{margin-top:24px}.semi-rtl .semi-empty,.semi-portal-rtl .semi-empty{direction:rtl}.semi-rtl .semi-empty-horizontal .semi-empty-content,.semi-portal-rtl .semi-empty-horizontal .semi-empty-content{margin-left:auto;margin-right:32px}.semi-feedback-emoji-container{display:flex;justify-content:center;align-items:center;column-gap:24px;align-self:stretch;margin-top:24px;margin-bottom:24px}.semi-feedback-emoji-item{-webkit-user-select:none;user-select:none;cursor:pointer;font-family:Inter;font-size:36px;line-height:36px;height:36px;font-style:normal;filter:grayscale(100%)}.semi-feedback-emoji-item:hover,.semi-feedback-emoji-item-selected{filter:none}.semi-feedback-thank-text{color:var(--semi-color-text-2);text-align:center;font-size:14px;font-weight:400;line-height:20px;margin-bottom:0;margin-top:24px}.semi-feedback .semi-checkboxGroup-vertical{row-gap:16px}.semi-feedback-footer{display:flex;justify-content:flex-end;column-gap:12px}.semi-feedback .semi-modal,.semi-feedback.semi-feedback-text .semi-modal{width:400px}.semi-feedback .semi-sidesheet-inner{border-radius:12px}.semi-feedback.semi-sidesheet.semi-sidesheet-size-small{width:400px}.semi-feedback.semi-sidesheet.semi-feedback-text{width:600px}.semi-feedback.semi-sidesheet-bottom{right:20px;left:auto}.semi-feedback.semi-sidesheet-bottom .semi-sidesheet-inner-wrap{bottom:50px}@keyframes semi-sidesheet-slideShow_bottom{0%{transform:translateY(calc(100% + 50px))}to{transform:translateY(0)}}@keyframes semi-sidesheet-slideHide_bottom{0%{transform:translateY(0)}to{transform:translateY(calc(100% + 50px))}}.semi-feedback.semi-sidesheet .semi-sidesheet-fixed.semi-feedback-bottom{top:auto}.semi-feedback.semi-sidesheet .semi-sidesheet-fixed.semi-feedback-bottom .semi-sidesheet-inner{bottom:50px}.semi-floatButton{position:fixed;bottom:24px;right:24px;z-index:1000;cursor:pointer}.semi-floatButton-body{background-color:var(--semi-color-fill-0);box-shadow:var(--semi-shadow-elevated);color:var(--semi-color-primary);display:flex;align-items:center;justify-content:center}.semi-floatButton-body:hover{background-color:var(--semi-color-fill-1)}.semi-floatButton-body:active{background-color:var(--semi-color-fill-2)}.semi-floatButton-disabled{background:var(--semi-color-disabled-bg);color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-floatButton-disabled:hover{background-color:var(--semi-color-disabled-bg)}.semi-floatButton-colorful{background:var(--semi-color-ai-general);color:var(--semi-color-white)}.semi-floatButton-colorful:hover{background:var(--semi-color-ai-general-hover)}.semi-floatButton-colorful:active{background:var(--semi-color-ai-general-active)}.semi-floatButton.semi-floatButton-square .semi-badge-dot,.semi-floatButton.semi-floatButton-square .semi-badge-count{top:2.32px;inset-inline-end:2.32px}.semi-floatButton-default{width:32px;height:32px}.semi-floatButton-default.semi-floatButton-round .semi-badge-dot,.semi-floatButton-default.semi-floatButton-round .semi-badge-count{top:4.64px;inset-inline-end:4.64px}.semi-floatButton-small{width:24px;height:24px}.semi-floatButton-small.semi-floatButton-round .semi-badge-dot,.semi-floatButton-small.semi-floatButton-round .semi-badge-count{top:3.48px;inset-inline-end:3.48px}.semi-floatButton-large{width:40px;height:40px}.semi-floatButton-large.semi-floatButton-round .semi-badge-dot,.semi-floatButton-large.semi-floatButton-round .semi-badge-count{top:5.8px;inset-inline-end:5.8px}.semi-floatButton-square{border-radius:8px}.semi-floatButton-round{border-radius:var(--semi-border-radius-full)}.semi-floatButtonGroup{position:fixed;border-radius:8px;bottom:24px;right:24px;z-index:1000;background:var(--semi-color-bg-0);box-shadow:var(--semi-shadow-elevated);display:inline-flex;padding:6px;gap:4px}.semi-floatButtonGroup-item{cursor:pointer;display:flex;padding:6px 12px;align-items:center;column-gap:8px;border-radius:4px;color:var(--semi-color-text-0);font-size:14px;font-style:normal;font-weight:400;line-height:20px}.semi-floatButtonGroup-item:hover{background:var(--semi-color-fill-1)}.semi-floatButtonGroup-item:active{background:var(--semi-color-fill-2)}.semi-form .semi-form-field{box-sizing:border-box}.semi-form-horizontal{display:flex;flex-wrap:wrap}.semi-form-horizontal .semi-form-field{margin-left:0;padding-right:16px}.semi-form-horizontal .semi-form-field:last-child{margin-right:16px}.semi-form-horizontal .semi-form-field-group{padding-right:16px}.semi-form-horizontal .semi-row{display:block}.semi-form-vertical .semi-form-field{margin:0;padding-top:12px;padding-bottom:12px;overflow:hidden}.semi-form-vertical .semi-form-field .semi-form-col-right{display:flex;justify-content:flex-end}.semi-form-vertical .semi-form-field .semi-form-col-left{display:flex;justify-content:flex-start}.semi-form-vertical .semi-form-field-group .semi-form-col-right{display:flex;justify-content:flex-end}.semi-form-vertical .semi-form-field-group .semi-form-col-left{display:flex;justify-content:flex-start}.semi-form-field-label{box-sizing:border-box;font-weight:600;color:var(--semi-color-text-0);margin-bottom:4px;margin-top:0;padding-right:16px;display:inline-block;vertical-align:middle;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;flex-shrink:0}.semi-form-field-label-disabled{color:var(--semi-color-disabled-text)}.semi-form-field-label-with-extra .semi-form-field-label-text{display:inline-block}.semi-form-field-label-with-extra .semi-form-field-label-extra{display:flex;align-items:center;margin-left:4px}.semi-form-field-label-required .semi-form-field-label-text:after{content:"*";margin-left:4px;color:var(--semi-color-danger);font-weight:600}.semi-form-field-label-required-disabled{color:var(--semi-color-danger)}.semi-form-field-label-optional-text{color:var(--semi-color-tertiary)}.semi-form-field-label-left{text-align:left}.semi-form-field-label-right{text-align:right}.semi-form-field-error-message,.semi-form-field-help-text{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;display:flex;align-items:center;margin-top:4px}.semi-form-field-error-message .semi-icon-alert_triangle,.semi-form-field-help-text .semi-icon-alert_triangle{color:var(--semi-color-warning)}.semi-form-field-error-message{color:var(--semi-color-danger)}.semi-form-field[x-label-pos=top] .semi-form-field-label{display:block}.semi-form-field[x-label-pos=top] .semi-checkboxGroup,.semi-form-field[x-label-pos=top] .semi-radioGroup{padding-top:4px;padding-bottom:4px}.semi-form-field[x-label-pos=top] .semi-radioGroup-buttonRadio,.semi-form-field[x-label-pos=top] .semi-radioGroup-horizontal-card,.semi-form-field[x-label-pos=top] .semi-radioGroup-vertical-card{padding-top:0;padding-bottom:0}.semi-form-field[x-label-pos=top] .semi-form-field-label-with-extra{display:flex;align-items:center}.semi-form-field[x-label-pos=left]{display:flex}.semi-form-field[x-label-pos=left] .semi-form-field-label{margin-bottom:0;margin-right:0;padding-top:6px;padding-bottom:6px}.semi-form-field[x-label-pos=left] .semi-form-field-label-with-extra{display:flex;align-items:center}.semi-form-field[x-label-pos=left] .semi-form-field-label-with-extra.semi-form-field-label-right{justify-content:flex-end}.semi-form-field[x-label-pos=left] .semi-checkboxGroup,.semi-form-field[x-label-pos=left] .semi-radioGroup{padding-top:6px;padding-bottom:6px}.semi-form-field[x-label-pos=left] .semi-radioGroup-buttonRadio,.semi-form-field[x-label-pos=left] .semi-radioGroup-horizontal-card,.semi-form-field[x-label-pos=left] .semi-radioGroup-vertical-card{padding-top:0;padding-bottom:0}.semi-form-field[x-label-pos=left] .semi-switch,.semi-form-field[x-label-pos=left] .semi-rating{vertical-align:middle;margin-top:4px;margin-bottom:4px}.semi-form-field[x-extra-pos=middle] .semi-form-field-extra{margin-top:4px;margin-bottom:4px}.semi-form-field[x-extra-pos=bottom] .semi-form-field-extra{margin-top:4px}.semi-form-field-main{width:100%}.semi-form-field-validate-status-icon{margin-right:4px;flex-shrink:0;align-self:flex-start;position:relative;top:2px}.semi-form-field-extra{color:var(--semi-color-tertiary)}.semi-form-field-extra-string{color:var(--semi-color-tertiary);font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-form-vertical .semi-form-field-group{margin-top:0;margin-bottom:0;padding-top:12px;padding-bottom:12px;overflow:hidden}.semi-form-vertical .semi-form-field-group .semi-form-field{margin-top:0;margin-bottom:0}.semi-form-field-group[x-label-pos=left]{display:flex}.semi-form-field-group[x-label-pos=left] .semi-form-field-label{margin-bottom:0;margin-right:0;padding-top:6px;padding-bottom:6px}.semi-form-section{width:100%;margin-top:28px}.semi-form-section-text{margin-block-start:0;margin-block-end:0;font-size:18px;line-height:24px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;width:100%;padding-bottom:8px;padding-top:0;border-bottom:1px solid var(--semi-color-border);margin-bottom:4px;margin-top:0;color:var(--semi-color-text-0)}.semi-form-section:nth-of-type(1){margin-top:0}.semi-rtl .semi-form,.semi-portal-rtl .semi-form{direction:rtl}.semi-rtl .semi-form-horizontal .semi-form-field,.semi-portal-rtl .semi-form-horizontal .semi-form-field{margin-left:0;margin-right:0;padding-right:0;padding-left:16px}.semi-rtl .semi-form-horizontal .semi-form-field:last-child,.semi-portal-rtl .semi-form-horizontal .semi-form-field:last-child{margin-left:16px}.semi-rtl .semi-form-horizontal .semi-form-field-group,.semi-portal-rtl .semi-form-horizontal .semi-form-field-group,.semi-rtl .semi-form-field-label,.semi-portal-rtl .semi-form-field-label{padding-right:0;padding-left:16px}.semi-rtl .semi-form-field-label-with-extra .semi-form-field-label-extra,.semi-portal-rtl .semi-form-field-label-with-extra .semi-form-field-label-extra{margin-left:0;margin-right:4px}.semi-rtl .semi-form-field-label-required .semi-form-field-label-text:after,.semi-portal-rtl .semi-form-field-label-required .semi-form-field-label-text:after{content:"*";margin-left:0;margin-right:4px}.semi-rtl .semi-form-field-label-left,.semi-portal-rtl .semi-form-field-label-left{text-align:right}.semi-rtl .semi-form-field-label-right,.semi-portal-rtl .semi-form-field-label-right{text-align:left}.semi-rtl .semi-form-field,.semi-portal-rtl .semi-form-field{direction:rtl}.semi-rtl .semi-form-field[x-label-pos=left] .semi-form-field-label,.semi-portal-rtl .semi-form-field[x-label-pos=left] .semi-form-field-label{margin-right:0;margin-left:0}.semi-rtl .semi-form-field-validate-status-icon,.semi-portal-rtl .semi-form-field-validate-status-icon{margin-right:0;margin-left:4px}.semi-rtl .semi-form-section,.semi-portal-rtl .semi-form-section{direction:rtl}.semi-row{display:block;box-sizing:border-box;position:relative;height:auto;margin-right:0;margin-left:0;zoom:1}.semi-row:before,.semi-row:after{display:table;content:""}.semi-row:after{clear:both}.semi-row-flex{display:flex;flex-flow:row wrap}.semi-row-flex:before,.semi-row-flex:after{display:flex}.semi-col-0,.semi-col-xs-0,.semi-col-sm-0,.semi-col-md-0,.semi-col-lg-0,.semi-col-xl-0,.semi-col-xxl-0{display:none}.semi-row-flex-start{justify-content:flex-start}.semi-row-flex-center{justify-content:center}.semi-row-flex-end{justify-content:flex-end}.semi-row-flex-space-between{justify-content:space-between}.semi-row-flex-space-around{justify-content:space-around}.semi-row-flex-top{align-items:flex-start}.semi-row-flex-middle{align-items:center}.semi-row-flex-bottom{align-items:flex-end}.semi-col{position:relative}.semi-col-1,.semi-col-xs-1,.semi-col-sm-1,.semi-col-md-1,.semi-col-lg-1,.semi-col-2,.semi-col-xs-2,.semi-col-sm-2,.semi-col-md-2,.semi-col-lg-2,.semi-col-3,.semi-col-xs-3,.semi-col-sm-3,.semi-col-md-3,.semi-col-lg-3,.semi-col-4,.semi-col-xs-4,.semi-col-sm-4,.semi-col-md-4,.semi-col-lg-4,.semi-col-5,.semi-col-xs-5,.semi-col-sm-5,.semi-col-md-5,.semi-col-lg-5,.semi-col-6,.semi-col-xs-6,.semi-col-sm-6,.semi-col-md-6,.semi-col-lg-6,.semi-col-7,.semi-col-xs-7,.semi-col-sm-7,.semi-col-md-7,.semi-col-lg-7,.semi-col-8,.semi-col-xs-8,.semi-col-sm-8,.semi-col-md-8,.semi-col-lg-8,.semi-col-9,.semi-col-xs-9,.semi-col-sm-9,.semi-col-md-9,.semi-col-lg-9,.semi-col-10,.semi-col-xs-10,.semi-col-sm-10,.semi-col-md-10,.semi-col-lg-10,.semi-col-11,.semi-col-xs-11,.semi-col-sm-11,.semi-col-md-11,.semi-col-lg-11,.semi-col-12,.semi-col-xs-12,.semi-col-sm-12,.semi-col-md-12,.semi-col-lg-12,.semi-col-13,.semi-col-xs-13,.semi-col-sm-13,.semi-col-md-13,.semi-col-lg-13,.semi-col-14,.semi-col-xs-14,.semi-col-sm-14,.semi-col-md-14,.semi-col-lg-14,.semi-col-15,.semi-col-xs-15,.semi-col-sm-15,.semi-col-md-15,.semi-col-lg-15,.semi-col-16,.semi-col-xs-16,.semi-col-sm-16,.semi-col-md-16,.semi-col-lg-16,.semi-col-17,.semi-col-xs-17,.semi-col-sm-17,.semi-col-md-17,.semi-col-lg-17,.semi-col-18,.semi-col-xs-18,.semi-col-sm-18,.semi-col-md-18,.semi-col-lg-18,.semi-col-19,.semi-col-xs-19,.semi-col-sm-19,.semi-col-md-19,.semi-col-lg-19,.semi-col-20,.semi-col-xs-20,.semi-col-sm-20,.semi-col-md-20,.semi-col-lg-20,.semi-col-21,.semi-col-xs-21,.semi-col-sm-21,.semi-col-md-21,.semi-col-lg-21,.semi-col-22,.semi-col-xs-22,.semi-col-sm-22,.semi-col-md-22,.semi-col-lg-22,.semi-col-23,.semi-col-xs-23,.semi-col-sm-23,.semi-col-md-23,.semi-col-lg-23,.semi-col-24,.semi-col-xs-24,.semi-col-sm-24,.semi-col-md-24,.semi-col-lg-24{position:relative;min-height:1px;padding-right:0;padding-left:0}.semi-col-1,.semi-col-2,.semi-col-3,.semi-col-4,.semi-col-5,.semi-col-6,.semi-col-7,.semi-col-8,.semi-col-9,.semi-col-10,.semi-col-11,.semi-col-12,.semi-col-13,.semi-col-14,.semi-col-15,.semi-col-16,.semi-col-17,.semi-col-18,.semi-col-19,.semi-col-20,.semi-col-21,.semi-col-22,.semi-col-23,.semi-col-24{flex:0 0 auto;float:left}.semi-col-1{display:block;box-sizing:border-box;width:4.1666666667%}.semi-col-push-1{left:4.1666666667%}.semi-col-pull-1{right:4.1666666667%}.semi-col-offset-1{margin-left:4.1666666667%}.semi-col-order-1{order:1}.semi-col-2{display:block;box-sizing:border-box;width:8.3333333333%}.semi-col-push-2{left:8.3333333333%}.semi-col-pull-2{right:8.3333333333%}.semi-col-offset-2{margin-left:8.3333333333%}.semi-col-order-2{order:2}.semi-col-3{display:block;box-sizing:border-box;width:12.5%}.semi-col-push-3{left:12.5%}.semi-col-pull-3{right:12.5%}.semi-col-offset-3{margin-left:12.5%}.semi-col-order-3{order:3}.semi-col-4{display:block;box-sizing:border-box;width:16.6666666667%}.semi-col-push-4{left:16.6666666667%}.semi-col-pull-4{right:16.6666666667%}.semi-col-offset-4{margin-left:16.6666666667%}.semi-col-order-4{order:4}.semi-col-5{display:block;box-sizing:border-box;width:20.8333333333%}.semi-col-push-5{left:20.8333333333%}.semi-col-pull-5{right:20.8333333333%}.semi-col-offset-5{margin-left:20.8333333333%}.semi-col-order-5{order:5}.semi-col-6{display:block;box-sizing:border-box;width:25%}.semi-col-push-6{left:25%}.semi-col-pull-6{right:25%}.semi-col-offset-6{margin-left:25%}.semi-col-order-6{order:6}.semi-col-7{display:block;box-sizing:border-box;width:29.1666666667%}.semi-col-push-7{left:29.1666666667%}.semi-col-pull-7{right:29.1666666667%}.semi-col-offset-7{margin-left:29.1666666667%}.semi-col-order-7{order:7}.semi-col-8{display:block;box-sizing:border-box;width:33.3333333333%}.semi-col-push-8{left:33.3333333333%}.semi-col-pull-8{right:33.3333333333%}.semi-col-offset-8{margin-left:33.3333333333%}.semi-col-order-8{order:8}.semi-col-9{display:block;box-sizing:border-box;width:37.5%}.semi-col-push-9{left:37.5%}.semi-col-pull-9{right:37.5%}.semi-col-offset-9{margin-left:37.5%}.semi-col-order-9{order:9}.semi-col-10{display:block;box-sizing:border-box;width:41.6666666667%}.semi-col-push-10{left:41.6666666667%}.semi-col-pull-10{right:41.6666666667%}.semi-col-offset-10{margin-left:41.6666666667%}.semi-col-order-10{order:10}.semi-col-11{display:block;box-sizing:border-box;width:45.8333333333%}.semi-col-push-11{left:45.8333333333%}.semi-col-pull-11{right:45.8333333333%}.semi-col-offset-11{margin-left:45.8333333333%}.semi-col-order-11{order:11}.semi-col-12{display:block;box-sizing:border-box;width:50%}.semi-col-push-12{left:50%}.semi-col-pull-12{right:50%}.semi-col-offset-12{margin-left:50%}.semi-col-order-12{order:12}.semi-col-13{display:block;box-sizing:border-box;width:54.1666666667%}.semi-col-push-13{left:54.1666666667%}.semi-col-pull-13{right:54.1666666667%}.semi-col-offset-13{margin-left:54.1666666667%}.semi-col-order-13{order:13}.semi-col-14{display:block;box-sizing:border-box;width:58.3333333333%}.semi-col-push-14{left:58.3333333333%}.semi-col-pull-14{right:58.3333333333%}.semi-col-offset-14{margin-left:58.3333333333%}.semi-col-order-14{order:14}.semi-col-15{display:block;box-sizing:border-box;width:62.5%}.semi-col-push-15{left:62.5%}.semi-col-pull-15{right:62.5%}.semi-col-offset-15{margin-left:62.5%}.semi-col-order-15{order:15}.semi-col-16{display:block;box-sizing:border-box;width:66.6666666667%}.semi-col-push-16{left:66.6666666667%}.semi-col-pull-16{right:66.6666666667%}.semi-col-offset-16{margin-left:66.6666666667%}.semi-col-order-16{order:16}.semi-col-17{display:block;box-sizing:border-box;width:70.8333333333%}.semi-col-push-17{left:70.8333333333%}.semi-col-pull-17{right:70.8333333333%}.semi-col-offset-17{margin-left:70.8333333333%}.semi-col-order-17{order:17}.semi-col-18{display:block;box-sizing:border-box;width:75%}.semi-col-push-18{left:75%}.semi-col-pull-18{right:75%}.semi-col-offset-18{margin-left:75%}.semi-col-order-18{order:18}.semi-col-19{display:block;box-sizing:border-box;width:79.1666666667%}.semi-col-push-19{left:79.1666666667%}.semi-col-pull-19{right:79.1666666667%}.semi-col-offset-19{margin-left:79.1666666667%}.semi-col-order-19{order:19}.semi-col-20{display:block;box-sizing:border-box;width:83.3333333333%}.semi-col-push-20{left:83.3333333333%}.semi-col-pull-20{right:83.3333333333%}.semi-col-offset-20{margin-left:83.3333333333%}.semi-col-order-20{order:20}.semi-col-21{display:block;box-sizing:border-box;width:87.5%}.semi-col-push-21{left:87.5%}.semi-col-pull-21{right:87.5%}.semi-col-offset-21{margin-left:87.5%}.semi-col-order-21{order:21}.semi-col-22{display:block;box-sizing:border-box;width:91.6666666667%}.semi-col-push-22{left:91.6666666667%}.semi-col-pull-22{right:91.6666666667%}.semi-col-offset-22{margin-left:91.6666666667%}.semi-col-order-22{order:22}.semi-col-23{display:block;box-sizing:border-box;width:95.8333333333%}.semi-col-push-23{left:95.8333333333%}.semi-col-pull-23{right:95.8333333333%}.semi-col-offset-23{margin-left:95.8333333333%}.semi-col-order-23{order:23}.semi-col-24{display:block;box-sizing:border-box;width:100%}.semi-col-push-24{left:100%}.semi-col-pull-24{right:100%}.semi-col-offset-24{margin-left:100%}.semi-col-order-24{order:24}.semi-rtl .semi-col-1,.semi-rtl .semi-col-2,.semi-rtl .semi-col-3,.semi-rtl .semi-col-4,.semi-rtl .semi-col-5,.semi-rtl .semi-col-6,.semi-rtl .semi-col-7,.semi-rtl .semi-col-8,.semi-rtl .semi-col-9,.semi-rtl .semi-col-10,.semi-rtl .semi-col-11,.semi-rtl .semi-col-12,.semi-rtl .semi-col-13,.semi-rtl .semi-col-14,.semi-rtl .semi-col-15,.semi-rtl .semi-col-16,.semi-rtl .semi-col-17,.semi-rtl .semi-col-18,.semi-rtl .semi-col-19,.semi-rtl .semi-col-20,.semi-rtl .semi-col-21,.semi-rtl .semi-col-22,.semi-rtl .semi-col-23,.semi-rtl .semi-col-24{float:right}.semi-rtl .semi-col-offset-1{margin-left:auto;margin-right:4.1666666667%}.semi-rtl .semi-col-offset-2{margin-left:auto;margin-right:8.3333333333%}.semi-rtl .semi-col-offset-3{margin-left:auto;margin-right:12.5%}.semi-rtl .semi-col-offset-4{margin-left:auto;margin-right:16.6666666667%}.semi-rtl .semi-col-offset-5{margin-left:auto;margin-right:20.8333333333%}.semi-rtl .semi-col-offset-6{margin-left:auto;margin-right:25%}.semi-rtl .semi-col-offset-7{margin-left:auto;margin-right:29.1666666667%}.semi-rtl .semi-col-offset-8{margin-left:auto;margin-right:33.3333333333%}.semi-rtl .semi-col-offset-9{margin-left:auto;margin-right:37.5%}.semi-rtl .semi-col-offset-10{margin-left:auto;margin-right:41.6666666667%}.semi-rtl .semi-col-offset-11{margin-left:auto;margin-right:45.8333333333%}.semi-rtl .semi-col-offset-12{margin-left:auto;margin-right:50%}.semi-rtl .semi-col-offset-13{margin-left:auto;margin-right:54.1666666667%}.semi-rtl .semi-col-offset-14{margin-left:auto;margin-right:58.3333333333%}.semi-rtl .semi-col-offset-15{margin-left:auto;margin-right:62.5%}.semi-rtl .semi-col-offset-16{margin-left:auto;margin-right:66.6666666667%}.semi-rtl .semi-col-offset-17{margin-left:auto;margin-right:70.8333333333%}.semi-rtl .semi-col-offset-18{margin-left:auto;margin-right:75%}.semi-rtl .semi-col-offset-19{margin-left:auto;margin-right:79.1666666667%}.semi-rtl .semi-col-offset-20{margin-left:auto;margin-right:83.3333333333%}.semi-rtl .semi-col-offset-21{margin-left:auto;margin-right:87.5%}.semi-rtl .semi-col-offset-22{margin-left:auto;margin-right:91.6666666667%}.semi-rtl .semi-col-offset-23{margin-left:auto;margin-right:95.8333333333%}.semi-rtl .semi-col-offset-24{margin-left:auto;margin-right:100%}.semi-col-xs-1,.semi-col-xs-2,.semi-col-xs-3,.semi-col-xs-4,.semi-col-xs-5,.semi-col-xs-6,.semi-col-xs-7,.semi-col-xs-8,.semi-col-xs-9,.semi-col-xs-10,.semi-col-xs-11,.semi-col-xs-12,.semi-col-xs-13,.semi-col-xs-14,.semi-col-xs-15,.semi-col-xs-16,.semi-col-xs-17,.semi-col-xs-18,.semi-col-xs-19,.semi-col-xs-20,.semi-col-xs-21,.semi-col-xs-22,.semi-col-xs-23,.semi-col-xs-24{flex:0 0 auto;float:left}.semi-col-xs-1{display:block;box-sizing:border-box;width:4.1666666667%}.semi-col-xs-push-1{left:4.1666666667%}.semi-col-xs-pull-1{right:4.1666666667%}.semi-col-xs-offset-1{margin-left:4.1666666667%}.semi-col-xs-order-1{order:1}.semi-col-xs-2{display:block;box-sizing:border-box;width:8.3333333333%}.semi-col-xs-push-2{left:8.3333333333%}.semi-col-xs-pull-2{right:8.3333333333%}.semi-col-xs-offset-2{margin-left:8.3333333333%}.semi-col-xs-order-2{order:2}.semi-col-xs-3{display:block;box-sizing:border-box;width:12.5%}.semi-col-xs-push-3{left:12.5%}.semi-col-xs-pull-3{right:12.5%}.semi-col-xs-offset-3{margin-left:12.5%}.semi-col-xs-order-3{order:3}.semi-col-xs-4{display:block;box-sizing:border-box;width:16.6666666667%}.semi-col-xs-push-4{left:16.6666666667%}.semi-col-xs-pull-4{right:16.6666666667%}.semi-col-xs-offset-4{margin-left:16.6666666667%}.semi-col-xs-order-4{order:4}.semi-col-xs-5{display:block;box-sizing:border-box;width:20.8333333333%}.semi-col-xs-push-5{left:20.8333333333%}.semi-col-xs-pull-5{right:20.8333333333%}.semi-col-xs-offset-5{margin-left:20.8333333333%}.semi-col-xs-order-5{order:5}.semi-col-xs-6{display:block;box-sizing:border-box;width:25%}.semi-col-xs-push-6{left:25%}.semi-col-xs-pull-6{right:25%}.semi-col-xs-offset-6{margin-left:25%}.semi-col-xs-order-6{order:6}.semi-col-xs-7{display:block;box-sizing:border-box;width:29.1666666667%}.semi-col-xs-push-7{left:29.1666666667%}.semi-col-xs-pull-7{right:29.1666666667%}.semi-col-xs-offset-7{margin-left:29.1666666667%}.semi-col-xs-order-7{order:7}.semi-col-xs-8{display:block;box-sizing:border-box;width:33.3333333333%}.semi-col-xs-push-8{left:33.3333333333%}.semi-col-xs-pull-8{right:33.3333333333%}.semi-col-xs-offset-8{margin-left:33.3333333333%}.semi-col-xs-order-8{order:8}.semi-col-xs-9{display:block;box-sizing:border-box;width:37.5%}.semi-col-xs-push-9{left:37.5%}.semi-col-xs-pull-9{right:37.5%}.semi-col-xs-offset-9{margin-left:37.5%}.semi-col-xs-order-9{order:9}.semi-col-xs-10{display:block;box-sizing:border-box;width:41.6666666667%}.semi-col-xs-push-10{left:41.6666666667%}.semi-col-xs-pull-10{right:41.6666666667%}.semi-col-xs-offset-10{margin-left:41.6666666667%}.semi-col-xs-order-10{order:10}.semi-col-xs-11{display:block;box-sizing:border-box;width:45.8333333333%}.semi-col-xs-push-11{left:45.8333333333%}.semi-col-xs-pull-11{right:45.8333333333%}.semi-col-xs-offset-11{margin-left:45.8333333333%}.semi-col-xs-order-11{order:11}.semi-col-xs-12{display:block;box-sizing:border-box;width:50%}.semi-col-xs-push-12{left:50%}.semi-col-xs-pull-12{right:50%}.semi-col-xs-offset-12{margin-left:50%}.semi-col-xs-order-12{order:12}.semi-col-xs-13{display:block;box-sizing:border-box;width:54.1666666667%}.semi-col-xs-push-13{left:54.1666666667%}.semi-col-xs-pull-13{right:54.1666666667%}.semi-col-xs-offset-13{margin-left:54.1666666667%}.semi-col-xs-order-13{order:13}.semi-col-xs-14{display:block;box-sizing:border-box;width:58.3333333333%}.semi-col-xs-push-14{left:58.3333333333%}.semi-col-xs-pull-14{right:58.3333333333%}.semi-col-xs-offset-14{margin-left:58.3333333333%}.semi-col-xs-order-14{order:14}.semi-col-xs-15{display:block;box-sizing:border-box;width:62.5%}.semi-col-xs-push-15{left:62.5%}.semi-col-xs-pull-15{right:62.5%}.semi-col-xs-offset-15{margin-left:62.5%}.semi-col-xs-order-15{order:15}.semi-col-xs-16{display:block;box-sizing:border-box;width:66.6666666667%}.semi-col-xs-push-16{left:66.6666666667%}.semi-col-xs-pull-16{right:66.6666666667%}.semi-col-xs-offset-16{margin-left:66.6666666667%}.semi-col-xs-order-16{order:16}.semi-col-xs-17{display:block;box-sizing:border-box;width:70.8333333333%}.semi-col-xs-push-17{left:70.8333333333%}.semi-col-xs-pull-17{right:70.8333333333%}.semi-col-xs-offset-17{margin-left:70.8333333333%}.semi-col-xs-order-17{order:17}.semi-col-xs-18{display:block;box-sizing:border-box;width:75%}.semi-col-xs-push-18{left:75%}.semi-col-xs-pull-18{right:75%}.semi-col-xs-offset-18{margin-left:75%}.semi-col-xs-order-18{order:18}.semi-col-xs-19{display:block;box-sizing:border-box;width:79.1666666667%}.semi-col-xs-push-19{left:79.1666666667%}.semi-col-xs-pull-19{right:79.1666666667%}.semi-col-xs-offset-19{margin-left:79.1666666667%}.semi-col-xs-order-19{order:19}.semi-col-xs-20{display:block;box-sizing:border-box;width:83.3333333333%}.semi-col-xs-push-20{left:83.3333333333%}.semi-col-xs-pull-20{right:83.3333333333%}.semi-col-xs-offset-20{margin-left:83.3333333333%}.semi-col-xs-order-20{order:20}.semi-col-xs-21{display:block;box-sizing:border-box;width:87.5%}.semi-col-xs-push-21{left:87.5%}.semi-col-xs-pull-21{right:87.5%}.semi-col-xs-offset-21{margin-left:87.5%}.semi-col-xs-order-21{order:21}.semi-col-xs-22{display:block;box-sizing:border-box;width:91.6666666667%}.semi-col-xs-push-22{left:91.6666666667%}.semi-col-xs-pull-22{right:91.6666666667%}.semi-col-xs-offset-22{margin-left:91.6666666667%}.semi-col-xs-order-22{order:22}.semi-col-xs-23{display:block;box-sizing:border-box;width:95.8333333333%}.semi-col-xs-push-23{left:95.8333333333%}.semi-col-xs-pull-23{right:95.8333333333%}.semi-col-xs-offset-23{margin-left:95.8333333333%}.semi-col-xs-order-23{order:23}.semi-col-xs-24{display:block;box-sizing:border-box;width:100%}.semi-col-xs-push-24{left:100%}.semi-col-xs-pull-24{right:100%}.semi-col-xs-offset-24{margin-left:100%}.semi-col-xs-order-24{order:24}.semi-rtl .semi-col-xs-1,.semi-rtl .semi-col-xs-2,.semi-rtl .semi-col-xs-3,.semi-rtl .semi-col-xs-4,.semi-rtl .semi-col-xs-5,.semi-rtl .semi-col-xs-6,.semi-rtl .semi-col-xs-7,.semi-rtl .semi-col-xs-8,.semi-rtl .semi-col-xs-9,.semi-rtl .semi-col-xs-10,.semi-rtl .semi-col-xs-11,.semi-rtl .semi-col-xs-12,.semi-rtl .semi-col-xs-13,.semi-rtl .semi-col-xs-14,.semi-rtl .semi-col-xs-15,.semi-rtl .semi-col-xs-16,.semi-rtl .semi-col-xs-17,.semi-rtl .semi-col-xs-18,.semi-rtl .semi-col-xs-19,.semi-rtl .semi-col-xs-20,.semi-rtl .semi-col-xs-21,.semi-rtl .semi-col-xs-22,.semi-rtl .semi-col-xs-23,.semi-rtl .semi-col-xs-24{float:right}.semi-rtl .semi-col-xs-offset-1{margin-left:auto;margin-right:4.1666666667%}.semi-rtl .semi-col-xs-offset-2{margin-left:auto;margin-right:8.3333333333%}.semi-rtl .semi-col-xs-offset-3{margin-left:auto;margin-right:12.5%}.semi-rtl .semi-col-xs-offset-4{margin-left:auto;margin-right:16.6666666667%}.semi-rtl .semi-col-xs-offset-5{margin-left:auto;margin-right:20.8333333333%}.semi-rtl .semi-col-xs-offset-6{margin-left:auto;margin-right:25%}.semi-rtl .semi-col-xs-offset-7{margin-left:auto;margin-right:29.1666666667%}.semi-rtl .semi-col-xs-offset-8{margin-left:auto;margin-right:33.3333333333%}.semi-rtl .semi-col-xs-offset-9{margin-left:auto;margin-right:37.5%}.semi-rtl .semi-col-xs-offset-10{margin-left:auto;margin-right:41.6666666667%}.semi-rtl .semi-col-xs-offset-11{margin-left:auto;margin-right:45.8333333333%}.semi-rtl .semi-col-xs-offset-12{margin-left:auto;margin-right:50%}.semi-rtl .semi-col-xs-offset-13{margin-left:auto;margin-right:54.1666666667%}.semi-rtl .semi-col-xs-offset-14{margin-left:auto;margin-right:58.3333333333%}.semi-rtl .semi-col-xs-offset-15{margin-left:auto;margin-right:62.5%}.semi-rtl .semi-col-xs-offset-16{margin-left:auto;margin-right:66.6666666667%}.semi-rtl .semi-col-xs-offset-17{margin-left:auto;margin-right:70.8333333333%}.semi-rtl .semi-col-xs-offset-18{margin-left:auto;margin-right:75%}.semi-rtl .semi-col-xs-offset-19{margin-left:auto;margin-right:79.1666666667%}.semi-rtl .semi-col-xs-offset-20{margin-left:auto;margin-right:83.3333333333%}.semi-rtl .semi-col-xs-offset-21{margin-left:auto;margin-right:87.5%}.semi-rtl .semi-col-xs-offset-22{margin-left:auto;margin-right:91.6666666667%}.semi-rtl .semi-col-xs-offset-23{margin-left:auto;margin-right:95.8333333333%}.semi-rtl .semi-col-xs-offset-24{margin-left:auto;margin-right:100%}@media(min-width:576px){.semi-col-sm-1,.semi-col-sm-2,.semi-col-sm-3,.semi-col-sm-4,.semi-col-sm-5,.semi-col-sm-6,.semi-col-sm-7,.semi-col-sm-8,.semi-col-sm-9,.semi-col-sm-10,.semi-col-sm-11,.semi-col-sm-12,.semi-col-sm-13,.semi-col-sm-14,.semi-col-sm-15,.semi-col-sm-16,.semi-col-sm-17,.semi-col-sm-18,.semi-col-sm-19,.semi-col-sm-20,.semi-col-sm-21,.semi-col-sm-22,.semi-col-sm-23,.semi-col-sm-24{flex:0 0 auto;float:left}.semi-col-sm-1{display:block;box-sizing:border-box;width:4.1666666667%}.semi-col-sm-push-1{left:4.1666666667%}.semi-col-sm-pull-1{right:4.1666666667%}.semi-col-sm-offset-1{margin-left:4.1666666667%}.semi-col-sm-order-1{order:1}.semi-col-sm-2{display:block;box-sizing:border-box;width:8.3333333333%}.semi-col-sm-push-2{left:8.3333333333%}.semi-col-sm-pull-2{right:8.3333333333%}.semi-col-sm-offset-2{margin-left:8.3333333333%}.semi-col-sm-order-2{order:2}.semi-col-sm-3{display:block;box-sizing:border-box;width:12.5%}.semi-col-sm-push-3{left:12.5%}.semi-col-sm-pull-3{right:12.5%}.semi-col-sm-offset-3{margin-left:12.5%}.semi-col-sm-order-3{order:3}.semi-col-sm-4{display:block;box-sizing:border-box;width:16.6666666667%}.semi-col-sm-push-4{left:16.6666666667%}.semi-col-sm-pull-4{right:16.6666666667%}.semi-col-sm-offset-4{margin-left:16.6666666667%}.semi-col-sm-order-4{order:4}.semi-col-sm-5{display:block;box-sizing:border-box;width:20.8333333333%}.semi-col-sm-push-5{left:20.8333333333%}.semi-col-sm-pull-5{right:20.8333333333%}.semi-col-sm-offset-5{margin-left:20.8333333333%}.semi-col-sm-order-5{order:5}.semi-col-sm-6{display:block;box-sizing:border-box;width:25%}.semi-col-sm-push-6{left:25%}.semi-col-sm-pull-6{right:25%}.semi-col-sm-offset-6{margin-left:25%}.semi-col-sm-order-6{order:6}.semi-col-sm-7{display:block;box-sizing:border-box;width:29.1666666667%}.semi-col-sm-push-7{left:29.1666666667%}.semi-col-sm-pull-7{right:29.1666666667%}.semi-col-sm-offset-7{margin-left:29.1666666667%}.semi-col-sm-order-7{order:7}.semi-col-sm-8{display:block;box-sizing:border-box;width:33.3333333333%}.semi-col-sm-push-8{left:33.3333333333%}.semi-col-sm-pull-8{right:33.3333333333%}.semi-col-sm-offset-8{margin-left:33.3333333333%}.semi-col-sm-order-8{order:8}.semi-col-sm-9{display:block;box-sizing:border-box;width:37.5%}.semi-col-sm-push-9{left:37.5%}.semi-col-sm-pull-9{right:37.5%}.semi-col-sm-offset-9{margin-left:37.5%}.semi-col-sm-order-9{order:9}.semi-col-sm-10{display:block;box-sizing:border-box;width:41.6666666667%}.semi-col-sm-push-10{left:41.6666666667%}.semi-col-sm-pull-10{right:41.6666666667%}.semi-col-sm-offset-10{margin-left:41.6666666667%}.semi-col-sm-order-10{order:10}.semi-col-sm-11{display:block;box-sizing:border-box;width:45.8333333333%}.semi-col-sm-push-11{left:45.8333333333%}.semi-col-sm-pull-11{right:45.8333333333%}.semi-col-sm-offset-11{margin-left:45.8333333333%}.semi-col-sm-order-11{order:11}.semi-col-sm-12{display:block;box-sizing:border-box;width:50%}.semi-col-sm-push-12{left:50%}.semi-col-sm-pull-12{right:50%}.semi-col-sm-offset-12{margin-left:50%}.semi-col-sm-order-12{order:12}.semi-col-sm-13{display:block;box-sizing:border-box;width:54.1666666667%}.semi-col-sm-push-13{left:54.1666666667%}.semi-col-sm-pull-13{right:54.1666666667%}.semi-col-sm-offset-13{margin-left:54.1666666667%}.semi-col-sm-order-13{order:13}.semi-col-sm-14{display:block;box-sizing:border-box;width:58.3333333333%}.semi-col-sm-push-14{left:58.3333333333%}.semi-col-sm-pull-14{right:58.3333333333%}.semi-col-sm-offset-14{margin-left:58.3333333333%}.semi-col-sm-order-14{order:14}.semi-col-sm-15{display:block;box-sizing:border-box;width:62.5%}.semi-col-sm-push-15{left:62.5%}.semi-col-sm-pull-15{right:62.5%}.semi-col-sm-offset-15{margin-left:62.5%}.semi-col-sm-order-15{order:15}.semi-col-sm-16{display:block;box-sizing:border-box;width:66.6666666667%}.semi-col-sm-push-16{left:66.6666666667%}.semi-col-sm-pull-16{right:66.6666666667%}.semi-col-sm-offset-16{margin-left:66.6666666667%}.semi-col-sm-order-16{order:16}.semi-col-sm-17{display:block;box-sizing:border-box;width:70.8333333333%}.semi-col-sm-push-17{left:70.8333333333%}.semi-col-sm-pull-17{right:70.8333333333%}.semi-col-sm-offset-17{margin-left:70.8333333333%}.semi-col-sm-order-17{order:17}.semi-col-sm-18{display:block;box-sizing:border-box;width:75%}.semi-col-sm-push-18{left:75%}.semi-col-sm-pull-18{right:75%}.semi-col-sm-offset-18{margin-left:75%}.semi-col-sm-order-18{order:18}.semi-col-sm-19{display:block;box-sizing:border-box;width:79.1666666667%}.semi-col-sm-push-19{left:79.1666666667%}.semi-col-sm-pull-19{right:79.1666666667%}.semi-col-sm-offset-19{margin-left:79.1666666667%}.semi-col-sm-order-19{order:19}.semi-col-sm-20{display:block;box-sizing:border-box;width:83.3333333333%}.semi-col-sm-push-20{left:83.3333333333%}.semi-col-sm-pull-20{right:83.3333333333%}.semi-col-sm-offset-20{margin-left:83.3333333333%}.semi-col-sm-order-20{order:20}.semi-col-sm-21{display:block;box-sizing:border-box;width:87.5%}.semi-col-sm-push-21{left:87.5%}.semi-col-sm-pull-21{right:87.5%}.semi-col-sm-offset-21{margin-left:87.5%}.semi-col-sm-order-21{order:21}.semi-col-sm-22{display:block;box-sizing:border-box;width:91.6666666667%}.semi-col-sm-push-22{left:91.6666666667%}.semi-col-sm-pull-22{right:91.6666666667%}.semi-col-sm-offset-22{margin-left:91.6666666667%}.semi-col-sm-order-22{order:22}.semi-col-sm-23{display:block;box-sizing:border-box;width:95.8333333333%}.semi-col-sm-push-23{left:95.8333333333%}.semi-col-sm-pull-23{right:95.8333333333%}.semi-col-sm-offset-23{margin-left:95.8333333333%}.semi-col-sm-order-23{order:23}.semi-col-sm-24{display:block;box-sizing:border-box;width:100%}.semi-col-sm-push-24{left:100%}.semi-col-sm-pull-24{right:100%}.semi-col-sm-offset-24{margin-left:100%}.semi-col-sm-order-24{order:24}.semi-rtl .semi-col-sm-1,.semi-rtl .semi-col-sm-2,.semi-rtl .semi-col-sm-3,.semi-rtl .semi-col-sm-4,.semi-rtl .semi-col-sm-5,.semi-rtl .semi-col-sm-6,.semi-rtl .semi-col-sm-7,.semi-rtl .semi-col-sm-8,.semi-rtl .semi-col-sm-9,.semi-rtl .semi-col-sm-10,.semi-rtl .semi-col-sm-11,.semi-rtl .semi-col-sm-12,.semi-rtl .semi-col-sm-13,.semi-rtl .semi-col-sm-14,.semi-rtl .semi-col-sm-15,.semi-rtl .semi-col-sm-16,.semi-rtl .semi-col-sm-17,.semi-rtl .semi-col-sm-18,.semi-rtl .semi-col-sm-19,.semi-rtl .semi-col-sm-20,.semi-rtl .semi-col-sm-21,.semi-rtl .semi-col-sm-22,.semi-rtl .semi-col-sm-23,.semi-rtl .semi-col-sm-24{float:right}.semi-rtl .semi-col-sm-offset-1{margin-left:auto;margin-right:4.1666666667%}.semi-rtl .semi-col-sm-offset-2{margin-left:auto;margin-right:8.3333333333%}.semi-rtl .semi-col-sm-offset-3{margin-left:auto;margin-right:12.5%}.semi-rtl .semi-col-sm-offset-4{margin-left:auto;margin-right:16.6666666667%}.semi-rtl .semi-col-sm-offset-5{margin-left:auto;margin-right:20.8333333333%}.semi-rtl .semi-col-sm-offset-6{margin-left:auto;margin-right:25%}.semi-rtl .semi-col-sm-offset-7{margin-left:auto;margin-right:29.1666666667%}.semi-rtl .semi-col-sm-offset-8{margin-left:auto;margin-right:33.3333333333%}.semi-rtl .semi-col-sm-offset-9{margin-left:auto;margin-right:37.5%}.semi-rtl .semi-col-sm-offset-10{margin-left:auto;margin-right:41.6666666667%}.semi-rtl .semi-col-sm-offset-11{margin-left:auto;margin-right:45.8333333333%}.semi-rtl .semi-col-sm-offset-12{margin-left:auto;margin-right:50%}.semi-rtl .semi-col-sm-offset-13{margin-left:auto;margin-right:54.1666666667%}.semi-rtl .semi-col-sm-offset-14{margin-left:auto;margin-right:58.3333333333%}.semi-rtl .semi-col-sm-offset-15{margin-left:auto;margin-right:62.5%}.semi-rtl .semi-col-sm-offset-16{margin-left:auto;margin-right:66.6666666667%}.semi-rtl .semi-col-sm-offset-17{margin-left:auto;margin-right:70.8333333333%}.semi-rtl .semi-col-sm-offset-18{margin-left:auto;margin-right:75%}.semi-rtl .semi-col-sm-offset-19{margin-left:auto;margin-right:79.1666666667%}.semi-rtl .semi-col-sm-offset-20{margin-left:auto;margin-right:83.3333333333%}.semi-rtl .semi-col-sm-offset-21{margin-left:auto;margin-right:87.5%}.semi-rtl .semi-col-sm-offset-22{margin-left:auto;margin-right:91.6666666667%}.semi-rtl .semi-col-sm-offset-23{margin-left:auto;margin-right:95.8333333333%}.semi-rtl .semi-col-sm-offset-24{margin-left:auto;margin-right:100%}}@media(min-width:768px){.semi-col-md-1,.semi-col-md-2,.semi-col-md-3,.semi-col-md-4,.semi-col-md-5,.semi-col-md-6,.semi-col-md-7,.semi-col-md-8,.semi-col-md-9,.semi-col-md-10,.semi-col-md-11,.semi-col-md-12,.semi-col-md-13,.semi-col-md-14,.semi-col-md-15,.semi-col-md-16,.semi-col-md-17,.semi-col-md-18,.semi-col-md-19,.semi-col-md-20,.semi-col-md-21,.semi-col-md-22,.semi-col-md-23,.semi-col-md-24{flex:0 0 auto;float:left}.semi-col-md-1{display:block;box-sizing:border-box;width:4.1666666667%}.semi-col-md-push-1{left:4.1666666667%}.semi-col-md-pull-1{right:4.1666666667%}.semi-col-md-offset-1{margin-left:4.1666666667%}.semi-col-md-order-1{order:1}.semi-col-md-2{display:block;box-sizing:border-box;width:8.3333333333%}.semi-col-md-push-2{left:8.3333333333%}.semi-col-md-pull-2{right:8.3333333333%}.semi-col-md-offset-2{margin-left:8.3333333333%}.semi-col-md-order-2{order:2}.semi-col-md-3{display:block;box-sizing:border-box;width:12.5%}.semi-col-md-push-3{left:12.5%}.semi-col-md-pull-3{right:12.5%}.semi-col-md-offset-3{margin-left:12.5%}.semi-col-md-order-3{order:3}.semi-col-md-4{display:block;box-sizing:border-box;width:16.6666666667%}.semi-col-md-push-4{left:16.6666666667%}.semi-col-md-pull-4{right:16.6666666667%}.semi-col-md-offset-4{margin-left:16.6666666667%}.semi-col-md-order-4{order:4}.semi-col-md-5{display:block;box-sizing:border-box;width:20.8333333333%}.semi-col-md-push-5{left:20.8333333333%}.semi-col-md-pull-5{right:20.8333333333%}.semi-col-md-offset-5{margin-left:20.8333333333%}.semi-col-md-order-5{order:5}.semi-col-md-6{display:block;box-sizing:border-box;width:25%}.semi-col-md-push-6{left:25%}.semi-col-md-pull-6{right:25%}.semi-col-md-offset-6{margin-left:25%}.semi-col-md-order-6{order:6}.semi-col-md-7{display:block;box-sizing:border-box;width:29.1666666667%}.semi-col-md-push-7{left:29.1666666667%}.semi-col-md-pull-7{right:29.1666666667%}.semi-col-md-offset-7{margin-left:29.1666666667%}.semi-col-md-order-7{order:7}.semi-col-md-8{display:block;box-sizing:border-box;width:33.3333333333%}.semi-col-md-push-8{left:33.3333333333%}.semi-col-md-pull-8{right:33.3333333333%}.semi-col-md-offset-8{margin-left:33.3333333333%}.semi-col-md-order-8{order:8}.semi-col-md-9{display:block;box-sizing:border-box;width:37.5%}.semi-col-md-push-9{left:37.5%}.semi-col-md-pull-9{right:37.5%}.semi-col-md-offset-9{margin-left:37.5%}.semi-col-md-order-9{order:9}.semi-col-md-10{display:block;box-sizing:border-box;width:41.6666666667%}.semi-col-md-push-10{left:41.6666666667%}.semi-col-md-pull-10{right:41.6666666667%}.semi-col-md-offset-10{margin-left:41.6666666667%}.semi-col-md-order-10{order:10}.semi-col-md-11{display:block;box-sizing:border-box;width:45.8333333333%}.semi-col-md-push-11{left:45.8333333333%}.semi-col-md-pull-11{right:45.8333333333%}.semi-col-md-offset-11{margin-left:45.8333333333%}.semi-col-md-order-11{order:11}.semi-col-md-12{display:block;box-sizing:border-box;width:50%}.semi-col-md-push-12{left:50%}.semi-col-md-pull-12{right:50%}.semi-col-md-offset-12{margin-left:50%}.semi-col-md-order-12{order:12}.semi-col-md-13{display:block;box-sizing:border-box;width:54.1666666667%}.semi-col-md-push-13{left:54.1666666667%}.semi-col-md-pull-13{right:54.1666666667%}.semi-col-md-offset-13{margin-left:54.1666666667%}.semi-col-md-order-13{order:13}.semi-col-md-14{display:block;box-sizing:border-box;width:58.3333333333%}.semi-col-md-push-14{left:58.3333333333%}.semi-col-md-pull-14{right:58.3333333333%}.semi-col-md-offset-14{margin-left:58.3333333333%}.semi-col-md-order-14{order:14}.semi-col-md-15{display:block;box-sizing:border-box;width:62.5%}.semi-col-md-push-15{left:62.5%}.semi-col-md-pull-15{right:62.5%}.semi-col-md-offset-15{margin-left:62.5%}.semi-col-md-order-15{order:15}.semi-col-md-16{display:block;box-sizing:border-box;width:66.6666666667%}.semi-col-md-push-16{left:66.6666666667%}.semi-col-md-pull-16{right:66.6666666667%}.semi-col-md-offset-16{margin-left:66.6666666667%}.semi-col-md-order-16{order:16}.semi-col-md-17{display:block;box-sizing:border-box;width:70.8333333333%}.semi-col-md-push-17{left:70.8333333333%}.semi-col-md-pull-17{right:70.8333333333%}.semi-col-md-offset-17{margin-left:70.8333333333%}.semi-col-md-order-17{order:17}.semi-col-md-18{display:block;box-sizing:border-box;width:75%}.semi-col-md-push-18{left:75%}.semi-col-md-pull-18{right:75%}.semi-col-md-offset-18{margin-left:75%}.semi-col-md-order-18{order:18}.semi-col-md-19{display:block;box-sizing:border-box;width:79.1666666667%}.semi-col-md-push-19{left:79.1666666667%}.semi-col-md-pull-19{right:79.1666666667%}.semi-col-md-offset-19{margin-left:79.1666666667%}.semi-col-md-order-19{order:19}.semi-col-md-20{display:block;box-sizing:border-box;width:83.3333333333%}.semi-col-md-push-20{left:83.3333333333%}.semi-col-md-pull-20{right:83.3333333333%}.semi-col-md-offset-20{margin-left:83.3333333333%}.semi-col-md-order-20{order:20}.semi-col-md-21{display:block;box-sizing:border-box;width:87.5%}.semi-col-md-push-21{left:87.5%}.semi-col-md-pull-21{right:87.5%}.semi-col-md-offset-21{margin-left:87.5%}.semi-col-md-order-21{order:21}.semi-col-md-22{display:block;box-sizing:border-box;width:91.6666666667%}.semi-col-md-push-22{left:91.6666666667%}.semi-col-md-pull-22{right:91.6666666667%}.semi-col-md-offset-22{margin-left:91.6666666667%}.semi-col-md-order-22{order:22}.semi-col-md-23{display:block;box-sizing:border-box;width:95.8333333333%}.semi-col-md-push-23{left:95.8333333333%}.semi-col-md-pull-23{right:95.8333333333%}.semi-col-md-offset-23{margin-left:95.8333333333%}.semi-col-md-order-23{order:23}.semi-col-md-24{display:block;box-sizing:border-box;width:100%}.semi-col-md-push-24{left:100%}.semi-col-md-pull-24{right:100%}.semi-col-md-offset-24{margin-left:100%}.semi-col-md-order-24{order:24}.semi-rtl .semi-col-md-1,.semi-rtl .semi-col-md-2,.semi-rtl .semi-col-md-3,.semi-rtl .semi-col-md-4,.semi-rtl .semi-col-md-5,.semi-rtl .semi-col-md-6,.semi-rtl .semi-col-md-7,.semi-rtl .semi-col-md-8,.semi-rtl .semi-col-md-9,.semi-rtl .semi-col-md-10,.semi-rtl .semi-col-md-11,.semi-rtl .semi-col-md-12,.semi-rtl .semi-col-md-13,.semi-rtl .semi-col-md-14,.semi-rtl .semi-col-md-15,.semi-rtl .semi-col-md-16,.semi-rtl .semi-col-md-17,.semi-rtl .semi-col-md-18,.semi-rtl .semi-col-md-19,.semi-rtl .semi-col-md-20,.semi-rtl .semi-col-md-21,.semi-rtl .semi-col-md-22,.semi-rtl .semi-col-md-23,.semi-rtl .semi-col-md-24{float:right}.semi-rtl .semi-col-md-offset-1{margin-left:auto;margin-right:4.1666666667%}.semi-rtl .semi-col-md-offset-2{margin-left:auto;margin-right:8.3333333333%}.semi-rtl .semi-col-md-offset-3{margin-left:auto;margin-right:12.5%}.semi-rtl .semi-col-md-offset-4{margin-left:auto;margin-right:16.6666666667%}.semi-rtl .semi-col-md-offset-5{margin-left:auto;margin-right:20.8333333333%}.semi-rtl .semi-col-md-offset-6{margin-left:auto;margin-right:25%}.semi-rtl .semi-col-md-offset-7{margin-left:auto;margin-right:29.1666666667%}.semi-rtl .semi-col-md-offset-8{margin-left:auto;margin-right:33.3333333333%}.semi-rtl .semi-col-md-offset-9{margin-left:auto;margin-right:37.5%}.semi-rtl .semi-col-md-offset-10{margin-left:auto;margin-right:41.6666666667%}.semi-rtl .semi-col-md-offset-11{margin-left:auto;margin-right:45.8333333333%}.semi-rtl .semi-col-md-offset-12{margin-left:auto;margin-right:50%}.semi-rtl .semi-col-md-offset-13{margin-left:auto;margin-right:54.1666666667%}.semi-rtl .semi-col-md-offset-14{margin-left:auto;margin-right:58.3333333333%}.semi-rtl .semi-col-md-offset-15{margin-left:auto;margin-right:62.5%}.semi-rtl .semi-col-md-offset-16{margin-left:auto;margin-right:66.6666666667%}.semi-rtl .semi-col-md-offset-17{margin-left:auto;margin-right:70.8333333333%}.semi-rtl .semi-col-md-offset-18{margin-left:auto;margin-right:75%}.semi-rtl .semi-col-md-offset-19{margin-left:auto;margin-right:79.1666666667%}.semi-rtl .semi-col-md-offset-20{margin-left:auto;margin-right:83.3333333333%}.semi-rtl .semi-col-md-offset-21{margin-left:auto;margin-right:87.5%}.semi-rtl .semi-col-md-offset-22{margin-left:auto;margin-right:91.6666666667%}.semi-rtl .semi-col-md-offset-23{margin-left:auto;margin-right:95.8333333333%}.semi-rtl .semi-col-md-offset-24{margin-left:auto;margin-right:100%}}@media(min-width:992px){.semi-col-lg-1,.semi-col-lg-2,.semi-col-lg-3,.semi-col-lg-4,.semi-col-lg-5,.semi-col-lg-6,.semi-col-lg-7,.semi-col-lg-8,.semi-col-lg-9,.semi-col-lg-10,.semi-col-lg-11,.semi-col-lg-12,.semi-col-lg-13,.semi-col-lg-14,.semi-col-lg-15,.semi-col-lg-16,.semi-col-lg-17,.semi-col-lg-18,.semi-col-lg-19,.semi-col-lg-20,.semi-col-lg-21,.semi-col-lg-22,.semi-col-lg-23,.semi-col-lg-24{flex:0 0 auto;float:left}.semi-col-lg-1{display:block;box-sizing:border-box;width:4.1666666667%}.semi-col-lg-push-1{left:4.1666666667%}.semi-col-lg-pull-1{right:4.1666666667%}.semi-col-lg-offset-1{margin-left:4.1666666667%}.semi-col-lg-order-1{order:1}.semi-col-lg-2{display:block;box-sizing:border-box;width:8.3333333333%}.semi-col-lg-push-2{left:8.3333333333%}.semi-col-lg-pull-2{right:8.3333333333%}.semi-col-lg-offset-2{margin-left:8.3333333333%}.semi-col-lg-order-2{order:2}.semi-col-lg-3{display:block;box-sizing:border-box;width:12.5%}.semi-col-lg-push-3{left:12.5%}.semi-col-lg-pull-3{right:12.5%}.semi-col-lg-offset-3{margin-left:12.5%}.semi-col-lg-order-3{order:3}.semi-col-lg-4{display:block;box-sizing:border-box;width:16.6666666667%}.semi-col-lg-push-4{left:16.6666666667%}.semi-col-lg-pull-4{right:16.6666666667%}.semi-col-lg-offset-4{margin-left:16.6666666667%}.semi-col-lg-order-4{order:4}.semi-col-lg-5{display:block;box-sizing:border-box;width:20.8333333333%}.semi-col-lg-push-5{left:20.8333333333%}.semi-col-lg-pull-5{right:20.8333333333%}.semi-col-lg-offset-5{margin-left:20.8333333333%}.semi-col-lg-order-5{order:5}.semi-col-lg-6{display:block;box-sizing:border-box;width:25%}.semi-col-lg-push-6{left:25%}.semi-col-lg-pull-6{right:25%}.semi-col-lg-offset-6{margin-left:25%}.semi-col-lg-order-6{order:6}.semi-col-lg-7{display:block;box-sizing:border-box;width:29.1666666667%}.semi-col-lg-push-7{left:29.1666666667%}.semi-col-lg-pull-7{right:29.1666666667%}.semi-col-lg-offset-7{margin-left:29.1666666667%}.semi-col-lg-order-7{order:7}.semi-col-lg-8{display:block;box-sizing:border-box;width:33.3333333333%}.semi-col-lg-push-8{left:33.3333333333%}.semi-col-lg-pull-8{right:33.3333333333%}.semi-col-lg-offset-8{margin-left:33.3333333333%}.semi-col-lg-order-8{order:8}.semi-col-lg-9{display:block;box-sizing:border-box;width:37.5%}.semi-col-lg-push-9{left:37.5%}.semi-col-lg-pull-9{right:37.5%}.semi-col-lg-offset-9{margin-left:37.5%}.semi-col-lg-order-9{order:9}.semi-col-lg-10{display:block;box-sizing:border-box;width:41.6666666667%}.semi-col-lg-push-10{left:41.6666666667%}.semi-col-lg-pull-10{right:41.6666666667%}.semi-col-lg-offset-10{margin-left:41.6666666667%}.semi-col-lg-order-10{order:10}.semi-col-lg-11{display:block;box-sizing:border-box;width:45.8333333333%}.semi-col-lg-push-11{left:45.8333333333%}.semi-col-lg-pull-11{right:45.8333333333%}.semi-col-lg-offset-11{margin-left:45.8333333333%}.semi-col-lg-order-11{order:11}.semi-col-lg-12{display:block;box-sizing:border-box;width:50%}.semi-col-lg-push-12{left:50%}.semi-col-lg-pull-12{right:50%}.semi-col-lg-offset-12{margin-left:50%}.semi-col-lg-order-12{order:12}.semi-col-lg-13{display:block;box-sizing:border-box;width:54.1666666667%}.semi-col-lg-push-13{left:54.1666666667%}.semi-col-lg-pull-13{right:54.1666666667%}.semi-col-lg-offset-13{margin-left:54.1666666667%}.semi-col-lg-order-13{order:13}.semi-col-lg-14{display:block;box-sizing:border-box;width:58.3333333333%}.semi-col-lg-push-14{left:58.3333333333%}.semi-col-lg-pull-14{right:58.3333333333%}.semi-col-lg-offset-14{margin-left:58.3333333333%}.semi-col-lg-order-14{order:14}.semi-col-lg-15{display:block;box-sizing:border-box;width:62.5%}.semi-col-lg-push-15{left:62.5%}.semi-col-lg-pull-15{right:62.5%}.semi-col-lg-offset-15{margin-left:62.5%}.semi-col-lg-order-15{order:15}.semi-col-lg-16{display:block;box-sizing:border-box;width:66.6666666667%}.semi-col-lg-push-16{left:66.6666666667%}.semi-col-lg-pull-16{right:66.6666666667%}.semi-col-lg-offset-16{margin-left:66.6666666667%}.semi-col-lg-order-16{order:16}.semi-col-lg-17{display:block;box-sizing:border-box;width:70.8333333333%}.semi-col-lg-push-17{left:70.8333333333%}.semi-col-lg-pull-17{right:70.8333333333%}.semi-col-lg-offset-17{margin-left:70.8333333333%}.semi-col-lg-order-17{order:17}.semi-col-lg-18{display:block;box-sizing:border-box;width:75%}.semi-col-lg-push-18{left:75%}.semi-col-lg-pull-18{right:75%}.semi-col-lg-offset-18{margin-left:75%}.semi-col-lg-order-18{order:18}.semi-col-lg-19{display:block;box-sizing:border-box;width:79.1666666667%}.semi-col-lg-push-19{left:79.1666666667%}.semi-col-lg-pull-19{right:79.1666666667%}.semi-col-lg-offset-19{margin-left:79.1666666667%}.semi-col-lg-order-19{order:19}.semi-col-lg-20{display:block;box-sizing:border-box;width:83.3333333333%}.semi-col-lg-push-20{left:83.3333333333%}.semi-col-lg-pull-20{right:83.3333333333%}.semi-col-lg-offset-20{margin-left:83.3333333333%}.semi-col-lg-order-20{order:20}.semi-col-lg-21{display:block;box-sizing:border-box;width:87.5%}.semi-col-lg-push-21{left:87.5%}.semi-col-lg-pull-21{right:87.5%}.semi-col-lg-offset-21{margin-left:87.5%}.semi-col-lg-order-21{order:21}.semi-col-lg-22{display:block;box-sizing:border-box;width:91.6666666667%}.semi-col-lg-push-22{left:91.6666666667%}.semi-col-lg-pull-22{right:91.6666666667%}.semi-col-lg-offset-22{margin-left:91.6666666667%}.semi-col-lg-order-22{order:22}.semi-col-lg-23{display:block;box-sizing:border-box;width:95.8333333333%}.semi-col-lg-push-23{left:95.8333333333%}.semi-col-lg-pull-23{right:95.8333333333%}.semi-col-lg-offset-23{margin-left:95.8333333333%}.semi-col-lg-order-23{order:23}.semi-col-lg-24{display:block;box-sizing:border-box;width:100%}.semi-col-lg-push-24{left:100%}.semi-col-lg-pull-24{right:100%}.semi-col-lg-offset-24{margin-left:100%}.semi-col-lg-order-24{order:24}.semi-rtl .semi-col-lg-1,.semi-rtl .semi-col-lg-2,.semi-rtl .semi-col-lg-3,.semi-rtl .semi-col-lg-4,.semi-rtl .semi-col-lg-5,.semi-rtl .semi-col-lg-6,.semi-rtl .semi-col-lg-7,.semi-rtl .semi-col-lg-8,.semi-rtl .semi-col-lg-9,.semi-rtl .semi-col-lg-10,.semi-rtl .semi-col-lg-11,.semi-rtl .semi-col-lg-12,.semi-rtl .semi-col-lg-13,.semi-rtl .semi-col-lg-14,.semi-rtl .semi-col-lg-15,.semi-rtl .semi-col-lg-16,.semi-rtl .semi-col-lg-17,.semi-rtl .semi-col-lg-18,.semi-rtl .semi-col-lg-19,.semi-rtl .semi-col-lg-20,.semi-rtl .semi-col-lg-21,.semi-rtl .semi-col-lg-22,.semi-rtl .semi-col-lg-23,.semi-rtl .semi-col-lg-24{float:right}.semi-rtl .semi-col-lg-offset-1{margin-left:auto;margin-right:4.1666666667%}.semi-rtl .semi-col-lg-offset-2{margin-left:auto;margin-right:8.3333333333%}.semi-rtl .semi-col-lg-offset-3{margin-left:auto;margin-right:12.5%}.semi-rtl .semi-col-lg-offset-4{margin-left:auto;margin-right:16.6666666667%}.semi-rtl .semi-col-lg-offset-5{margin-left:auto;margin-right:20.8333333333%}.semi-rtl .semi-col-lg-offset-6{margin-left:auto;margin-right:25%}.semi-rtl .semi-col-lg-offset-7{margin-left:auto;margin-right:29.1666666667%}.semi-rtl .semi-col-lg-offset-8{margin-left:auto;margin-right:33.3333333333%}.semi-rtl .semi-col-lg-offset-9{margin-left:auto;margin-right:37.5%}.semi-rtl .semi-col-lg-offset-10{margin-left:auto;margin-right:41.6666666667%}.semi-rtl .semi-col-lg-offset-11{margin-left:auto;margin-right:45.8333333333%}.semi-rtl .semi-col-lg-offset-12{margin-left:auto;margin-right:50%}.semi-rtl .semi-col-lg-offset-13{margin-left:auto;margin-right:54.1666666667%}.semi-rtl .semi-col-lg-offset-14{margin-left:auto;margin-right:58.3333333333%}.semi-rtl .semi-col-lg-offset-15{margin-left:auto;margin-right:62.5%}.semi-rtl .semi-col-lg-offset-16{margin-left:auto;margin-right:66.6666666667%}.semi-rtl .semi-col-lg-offset-17{margin-left:auto;margin-right:70.8333333333%}.semi-rtl .semi-col-lg-offset-18{margin-left:auto;margin-right:75%}.semi-rtl .semi-col-lg-offset-19{margin-left:auto;margin-right:79.1666666667%}.semi-rtl .semi-col-lg-offset-20{margin-left:auto;margin-right:83.3333333333%}.semi-rtl .semi-col-lg-offset-21{margin-left:auto;margin-right:87.5%}.semi-rtl .semi-col-lg-offset-22{margin-left:auto;margin-right:91.6666666667%}.semi-rtl .semi-col-lg-offset-23{margin-left:auto;margin-right:95.8333333333%}.semi-rtl .semi-col-lg-offset-24{margin-left:auto;margin-right:100%}}@media(min-width:1200px){.semi-col-xl-1,.semi-col-xl-2,.semi-col-xl-3,.semi-col-xl-4,.semi-col-xl-5,.semi-col-xl-6,.semi-col-xl-7,.semi-col-xl-8,.semi-col-xl-9,.semi-col-xl-10,.semi-col-xl-11,.semi-col-xl-12,.semi-col-xl-13,.semi-col-xl-14,.semi-col-xl-15,.semi-col-xl-16,.semi-col-xl-17,.semi-col-xl-18,.semi-col-xl-19,.semi-col-xl-20,.semi-col-xl-21,.semi-col-xl-22,.semi-col-xl-23,.semi-col-xl-24{flex:0 0 auto;float:left}.semi-col-xl-1{display:block;box-sizing:border-box;width:4.1666666667%}.semi-col-xl-push-1{left:4.1666666667%}.semi-col-xl-pull-1{right:4.1666666667%}.semi-col-xl-offset-1{margin-left:4.1666666667%}.semi-col-xl-order-1{order:1}.semi-col-xl-2{display:block;box-sizing:border-box;width:8.3333333333%}.semi-col-xl-push-2{left:8.3333333333%}.semi-col-xl-pull-2{right:8.3333333333%}.semi-col-xl-offset-2{margin-left:8.3333333333%}.semi-col-xl-order-2{order:2}.semi-col-xl-3{display:block;box-sizing:border-box;width:12.5%}.semi-col-xl-push-3{left:12.5%}.semi-col-xl-pull-3{right:12.5%}.semi-col-xl-offset-3{margin-left:12.5%}.semi-col-xl-order-3{order:3}.semi-col-xl-4{display:block;box-sizing:border-box;width:16.6666666667%}.semi-col-xl-push-4{left:16.6666666667%}.semi-col-xl-pull-4{right:16.6666666667%}.semi-col-xl-offset-4{margin-left:16.6666666667%}.semi-col-xl-order-4{order:4}.semi-col-xl-5{display:block;box-sizing:border-box;width:20.8333333333%}.semi-col-xl-push-5{left:20.8333333333%}.semi-col-xl-pull-5{right:20.8333333333%}.semi-col-xl-offset-5{margin-left:20.8333333333%}.semi-col-xl-order-5{order:5}.semi-col-xl-6{display:block;box-sizing:border-box;width:25%}.semi-col-xl-push-6{left:25%}.semi-col-xl-pull-6{right:25%}.semi-col-xl-offset-6{margin-left:25%}.semi-col-xl-order-6{order:6}.semi-col-xl-7{display:block;box-sizing:border-box;width:29.1666666667%}.semi-col-xl-push-7{left:29.1666666667%}.semi-col-xl-pull-7{right:29.1666666667%}.semi-col-xl-offset-7{margin-left:29.1666666667%}.semi-col-xl-order-7{order:7}.semi-col-xl-8{display:block;box-sizing:border-box;width:33.3333333333%}.semi-col-xl-push-8{left:33.3333333333%}.semi-col-xl-pull-8{right:33.3333333333%}.semi-col-xl-offset-8{margin-left:33.3333333333%}.semi-col-xl-order-8{order:8}.semi-col-xl-9{display:block;box-sizing:border-box;width:37.5%}.semi-col-xl-push-9{left:37.5%}.semi-col-xl-pull-9{right:37.5%}.semi-col-xl-offset-9{margin-left:37.5%}.semi-col-xl-order-9{order:9}.semi-col-xl-10{display:block;box-sizing:border-box;width:41.6666666667%}.semi-col-xl-push-10{left:41.6666666667%}.semi-col-xl-pull-10{right:41.6666666667%}.semi-col-xl-offset-10{margin-left:41.6666666667%}.semi-col-xl-order-10{order:10}.semi-col-xl-11{display:block;box-sizing:border-box;width:45.8333333333%}.semi-col-xl-push-11{left:45.8333333333%}.semi-col-xl-pull-11{right:45.8333333333%}.semi-col-xl-offset-11{margin-left:45.8333333333%}.semi-col-xl-order-11{order:11}.semi-col-xl-12{display:block;box-sizing:border-box;width:50%}.semi-col-xl-push-12{left:50%}.semi-col-xl-pull-12{right:50%}.semi-col-xl-offset-12{margin-left:50%}.semi-col-xl-order-12{order:12}.semi-col-xl-13{display:block;box-sizing:border-box;width:54.1666666667%}.semi-col-xl-push-13{left:54.1666666667%}.semi-col-xl-pull-13{right:54.1666666667%}.semi-col-xl-offset-13{margin-left:54.1666666667%}.semi-col-xl-order-13{order:13}.semi-col-xl-14{display:block;box-sizing:border-box;width:58.3333333333%}.semi-col-xl-push-14{left:58.3333333333%}.semi-col-xl-pull-14{right:58.3333333333%}.semi-col-xl-offset-14{margin-left:58.3333333333%}.semi-col-xl-order-14{order:14}.semi-col-xl-15{display:block;box-sizing:border-box;width:62.5%}.semi-col-xl-push-15{left:62.5%}.semi-col-xl-pull-15{right:62.5%}.semi-col-xl-offset-15{margin-left:62.5%}.semi-col-xl-order-15{order:15}.semi-col-xl-16{display:block;box-sizing:border-box;width:66.6666666667%}.semi-col-xl-push-16{left:66.6666666667%}.semi-col-xl-pull-16{right:66.6666666667%}.semi-col-xl-offset-16{margin-left:66.6666666667%}.semi-col-xl-order-16{order:16}.semi-col-xl-17{display:block;box-sizing:border-box;width:70.8333333333%}.semi-col-xl-push-17{left:70.8333333333%}.semi-col-xl-pull-17{right:70.8333333333%}.semi-col-xl-offset-17{margin-left:70.8333333333%}.semi-col-xl-order-17{order:17}.semi-col-xl-18{display:block;box-sizing:border-box;width:75%}.semi-col-xl-push-18{left:75%}.semi-col-xl-pull-18{right:75%}.semi-col-xl-offset-18{margin-left:75%}.semi-col-xl-order-18{order:18}.semi-col-xl-19{display:block;box-sizing:border-box;width:79.1666666667%}.semi-col-xl-push-19{left:79.1666666667%}.semi-col-xl-pull-19{right:79.1666666667%}.semi-col-xl-offset-19{margin-left:79.1666666667%}.semi-col-xl-order-19{order:19}.semi-col-xl-20{display:block;box-sizing:border-box;width:83.3333333333%}.semi-col-xl-push-20{left:83.3333333333%}.semi-col-xl-pull-20{right:83.3333333333%}.semi-col-xl-offset-20{margin-left:83.3333333333%}.semi-col-xl-order-20{order:20}.semi-col-xl-21{display:block;box-sizing:border-box;width:87.5%}.semi-col-xl-push-21{left:87.5%}.semi-col-xl-pull-21{right:87.5%}.semi-col-xl-offset-21{margin-left:87.5%}.semi-col-xl-order-21{order:21}.semi-col-xl-22{display:block;box-sizing:border-box;width:91.6666666667%}.semi-col-xl-push-22{left:91.6666666667%}.semi-col-xl-pull-22{right:91.6666666667%}.semi-col-xl-offset-22{margin-left:91.6666666667%}.semi-col-xl-order-22{order:22}.semi-col-xl-23{display:block;box-sizing:border-box;width:95.8333333333%}.semi-col-xl-push-23{left:95.8333333333%}.semi-col-xl-pull-23{right:95.8333333333%}.semi-col-xl-offset-23{margin-left:95.8333333333%}.semi-col-xl-order-23{order:23}.semi-col-xl-24{display:block;box-sizing:border-box;width:100%}.semi-col-xl-push-24{left:100%}.semi-col-xl-pull-24{right:100%}.semi-col-xl-offset-24{margin-left:100%}.semi-col-xl-order-24{order:24}.semi-rtl .semi-col-xl-1,.semi-rtl .semi-col-xl-2,.semi-rtl .semi-col-xl-3,.semi-rtl .semi-col-xl-4,.semi-rtl .semi-col-xl-5,.semi-rtl .semi-col-xl-6,.semi-rtl .semi-col-xl-7,.semi-rtl .semi-col-xl-8,.semi-rtl .semi-col-xl-9,.semi-rtl .semi-col-xl-10,.semi-rtl .semi-col-xl-11,.semi-rtl .semi-col-xl-12,.semi-rtl .semi-col-xl-13,.semi-rtl .semi-col-xl-14,.semi-rtl .semi-col-xl-15,.semi-rtl .semi-col-xl-16,.semi-rtl .semi-col-xl-17,.semi-rtl .semi-col-xl-18,.semi-rtl .semi-col-xl-19,.semi-rtl .semi-col-xl-20,.semi-rtl .semi-col-xl-21,.semi-rtl .semi-col-xl-22,.semi-rtl .semi-col-xl-23,.semi-rtl .semi-col-xl-24{float:right}.semi-rtl .semi-col-xl-offset-1{margin-left:auto;margin-right:4.1666666667%}.semi-rtl .semi-col-xl-offset-2{margin-left:auto;margin-right:8.3333333333%}.semi-rtl .semi-col-xl-offset-3{margin-left:auto;margin-right:12.5%}.semi-rtl .semi-col-xl-offset-4{margin-left:auto;margin-right:16.6666666667%}.semi-rtl .semi-col-xl-offset-5{margin-left:auto;margin-right:20.8333333333%}.semi-rtl .semi-col-xl-offset-6{margin-left:auto;margin-right:25%}.semi-rtl .semi-col-xl-offset-7{margin-left:auto;margin-right:29.1666666667%}.semi-rtl .semi-col-xl-offset-8{margin-left:auto;margin-right:33.3333333333%}.semi-rtl .semi-col-xl-offset-9{margin-left:auto;margin-right:37.5%}.semi-rtl .semi-col-xl-offset-10{margin-left:auto;margin-right:41.6666666667%}.semi-rtl .semi-col-xl-offset-11{margin-left:auto;margin-right:45.8333333333%}.semi-rtl .semi-col-xl-offset-12{margin-left:auto;margin-right:50%}.semi-rtl .semi-col-xl-offset-13{margin-left:auto;margin-right:54.1666666667%}.semi-rtl .semi-col-xl-offset-14{margin-left:auto;margin-right:58.3333333333%}.semi-rtl .semi-col-xl-offset-15{margin-left:auto;margin-right:62.5%}.semi-rtl .semi-col-xl-offset-16{margin-left:auto;margin-right:66.6666666667%}.semi-rtl .semi-col-xl-offset-17{margin-left:auto;margin-right:70.8333333333%}.semi-rtl .semi-col-xl-offset-18{margin-left:auto;margin-right:75%}.semi-rtl .semi-col-xl-offset-19{margin-left:auto;margin-right:79.1666666667%}.semi-rtl .semi-col-xl-offset-20{margin-left:auto;margin-right:83.3333333333%}.semi-rtl .semi-col-xl-offset-21{margin-left:auto;margin-right:87.5%}.semi-rtl .semi-col-xl-offset-22{margin-left:auto;margin-right:91.6666666667%}.semi-rtl .semi-col-xl-offset-23{margin-left:auto;margin-right:95.8333333333%}.semi-rtl .semi-col-xl-offset-24{margin-left:auto;margin-right:100%}}@media(min-width:1600px){.semi-col-xxl-1,.semi-col-xxl-2,.semi-col-xxl-3,.semi-col-xxl-4,.semi-col-xxl-5,.semi-col-xxl-6,.semi-col-xxl-7,.semi-col-xxl-8,.semi-col-xxl-9,.semi-col-xxl-10,.semi-col-xxl-11,.semi-col-xxl-12,.semi-col-xxl-13,.semi-col-xxl-14,.semi-col-xxl-15,.semi-col-xxl-16,.semi-col-xxl-17,.semi-col-xxl-18,.semi-col-xxl-19,.semi-col-xxl-20,.semi-col-xxl-21,.semi-col-xxl-22,.semi-col-xxl-23,.semi-col-xxl-24{flex:0 0 auto;float:left}.semi-col-xxl-1{display:block;box-sizing:border-box;width:4.1666666667%}.semi-col-xxl-push-1{left:4.1666666667%}.semi-col-xxl-pull-1{right:4.1666666667%}.semi-col-xxl-offset-1{margin-left:4.1666666667%}.semi-col-xxl-order-1{order:1}.semi-col-xxl-2{display:block;box-sizing:border-box;width:8.3333333333%}.semi-col-xxl-push-2{left:8.3333333333%}.semi-col-xxl-pull-2{right:8.3333333333%}.semi-col-xxl-offset-2{margin-left:8.3333333333%}.semi-col-xxl-order-2{order:2}.semi-col-xxl-3{display:block;box-sizing:border-box;width:12.5%}.semi-col-xxl-push-3{left:12.5%}.semi-col-xxl-pull-3{right:12.5%}.semi-col-xxl-offset-3{margin-left:12.5%}.semi-col-xxl-order-3{order:3}.semi-col-xxl-4{display:block;box-sizing:border-box;width:16.6666666667%}.semi-col-xxl-push-4{left:16.6666666667%}.semi-col-xxl-pull-4{right:16.6666666667%}.semi-col-xxl-offset-4{margin-left:16.6666666667%}.semi-col-xxl-order-4{order:4}.semi-col-xxl-5{display:block;box-sizing:border-box;width:20.8333333333%}.semi-col-xxl-push-5{left:20.8333333333%}.semi-col-xxl-pull-5{right:20.8333333333%}.semi-col-xxl-offset-5{margin-left:20.8333333333%}.semi-col-xxl-order-5{order:5}.semi-col-xxl-6{display:block;box-sizing:border-box;width:25%}.semi-col-xxl-push-6{left:25%}.semi-col-xxl-pull-6{right:25%}.semi-col-xxl-offset-6{margin-left:25%}.semi-col-xxl-order-6{order:6}.semi-col-xxl-7{display:block;box-sizing:border-box;width:29.1666666667%}.semi-col-xxl-push-7{left:29.1666666667%}.semi-col-xxl-pull-7{right:29.1666666667%}.semi-col-xxl-offset-7{margin-left:29.1666666667%}.semi-col-xxl-order-7{order:7}.semi-col-xxl-8{display:block;box-sizing:border-box;width:33.3333333333%}.semi-col-xxl-push-8{left:33.3333333333%}.semi-col-xxl-pull-8{right:33.3333333333%}.semi-col-xxl-offset-8{margin-left:33.3333333333%}.semi-col-xxl-order-8{order:8}.semi-col-xxl-9{display:block;box-sizing:border-box;width:37.5%}.semi-col-xxl-push-9{left:37.5%}.semi-col-xxl-pull-9{right:37.5%}.semi-col-xxl-offset-9{margin-left:37.5%}.semi-col-xxl-order-9{order:9}.semi-col-xxl-10{display:block;box-sizing:border-box;width:41.6666666667%}.semi-col-xxl-push-10{left:41.6666666667%}.semi-col-xxl-pull-10{right:41.6666666667%}.semi-col-xxl-offset-10{margin-left:41.6666666667%}.semi-col-xxl-order-10{order:10}.semi-col-xxl-11{display:block;box-sizing:border-box;width:45.8333333333%}.semi-col-xxl-push-11{left:45.8333333333%}.semi-col-xxl-pull-11{right:45.8333333333%}.semi-col-xxl-offset-11{margin-left:45.8333333333%}.semi-col-xxl-order-11{order:11}.semi-col-xxl-12{display:block;box-sizing:border-box;width:50%}.semi-col-xxl-push-12{left:50%}.semi-col-xxl-pull-12{right:50%}.semi-col-xxl-offset-12{margin-left:50%}.semi-col-xxl-order-12{order:12}.semi-col-xxl-13{display:block;box-sizing:border-box;width:54.1666666667%}.semi-col-xxl-push-13{left:54.1666666667%}.semi-col-xxl-pull-13{right:54.1666666667%}.semi-col-xxl-offset-13{margin-left:54.1666666667%}.semi-col-xxl-order-13{order:13}.semi-col-xxl-14{display:block;box-sizing:border-box;width:58.3333333333%}.semi-col-xxl-push-14{left:58.3333333333%}.semi-col-xxl-pull-14{right:58.3333333333%}.semi-col-xxl-offset-14{margin-left:58.3333333333%}.semi-col-xxl-order-14{order:14}.semi-col-xxl-15{display:block;box-sizing:border-box;width:62.5%}.semi-col-xxl-push-15{left:62.5%}.semi-col-xxl-pull-15{right:62.5%}.semi-col-xxl-offset-15{margin-left:62.5%}.semi-col-xxl-order-15{order:15}.semi-col-xxl-16{display:block;box-sizing:border-box;width:66.6666666667%}.semi-col-xxl-push-16{left:66.6666666667%}.semi-col-xxl-pull-16{right:66.6666666667%}.semi-col-xxl-offset-16{margin-left:66.6666666667%}.semi-col-xxl-order-16{order:16}.semi-col-xxl-17{display:block;box-sizing:border-box;width:70.8333333333%}.semi-col-xxl-push-17{left:70.8333333333%}.semi-col-xxl-pull-17{right:70.8333333333%}.semi-col-xxl-offset-17{margin-left:70.8333333333%}.semi-col-xxl-order-17{order:17}.semi-col-xxl-18{display:block;box-sizing:border-box;width:75%}.semi-col-xxl-push-18{left:75%}.semi-col-xxl-pull-18{right:75%}.semi-col-xxl-offset-18{margin-left:75%}.semi-col-xxl-order-18{order:18}.semi-col-xxl-19{display:block;box-sizing:border-box;width:79.1666666667%}.semi-col-xxl-push-19{left:79.1666666667%}.semi-col-xxl-pull-19{right:79.1666666667%}.semi-col-xxl-offset-19{margin-left:79.1666666667%}.semi-col-xxl-order-19{order:19}.semi-col-xxl-20{display:block;box-sizing:border-box;width:83.3333333333%}.semi-col-xxl-push-20{left:83.3333333333%}.semi-col-xxl-pull-20{right:83.3333333333%}.semi-col-xxl-offset-20{margin-left:83.3333333333%}.semi-col-xxl-order-20{order:20}.semi-col-xxl-21{display:block;box-sizing:border-box;width:87.5%}.semi-col-xxl-push-21{left:87.5%}.semi-col-xxl-pull-21{right:87.5%}.semi-col-xxl-offset-21{margin-left:87.5%}.semi-col-xxl-order-21{order:21}.semi-col-xxl-22{display:block;box-sizing:border-box;width:91.6666666667%}.semi-col-xxl-push-22{left:91.6666666667%}.semi-col-xxl-pull-22{right:91.6666666667%}.semi-col-xxl-offset-22{margin-left:91.6666666667%}.semi-col-xxl-order-22{order:22}.semi-col-xxl-23{display:block;box-sizing:border-box;width:95.8333333333%}.semi-col-xxl-push-23{left:95.8333333333%}.semi-col-xxl-pull-23{right:95.8333333333%}.semi-col-xxl-offset-23{margin-left:95.8333333333%}.semi-col-xxl-order-23{order:23}.semi-col-xxl-24{display:block;box-sizing:border-box;width:100%}.semi-col-xxl-push-24{left:100%}.semi-col-xxl-pull-24{right:100%}.semi-col-xxl-offset-24{margin-left:100%}.semi-col-xxl-order-24{order:24}.semi-rtl .semi-col-xxl-1,.semi-rtl .semi-col-xxl-2,.semi-rtl .semi-col-xxl-3,.semi-rtl .semi-col-xxl-4,.semi-rtl .semi-col-xxl-5,.semi-rtl .semi-col-xxl-6,.semi-rtl .semi-col-xxl-7,.semi-rtl .semi-col-xxl-8,.semi-rtl .semi-col-xxl-9,.semi-rtl .semi-col-xxl-10,.semi-rtl .semi-col-xxl-11,.semi-rtl .semi-col-xxl-12,.semi-rtl .semi-col-xxl-13,.semi-rtl .semi-col-xxl-14,.semi-rtl .semi-col-xxl-15,.semi-rtl .semi-col-xxl-16,.semi-rtl .semi-col-xxl-17,.semi-rtl .semi-col-xxl-18,.semi-rtl .semi-col-xxl-19,.semi-rtl .semi-col-xxl-20,.semi-rtl .semi-col-xxl-21,.semi-rtl .semi-col-xxl-22,.semi-rtl .semi-col-xxl-23,.semi-rtl .semi-col-xxl-24{float:right}.semi-rtl .semi-col-xxl-offset-1{margin-left:auto;margin-right:4.1666666667%}.semi-rtl .semi-col-xxl-offset-2{margin-left:auto;margin-right:8.3333333333%}.semi-rtl .semi-col-xxl-offset-3{margin-left:auto;margin-right:12.5%}.semi-rtl .semi-col-xxl-offset-4{margin-left:auto;margin-right:16.6666666667%}.semi-rtl .semi-col-xxl-offset-5{margin-left:auto;margin-right:20.8333333333%}.semi-rtl .semi-col-xxl-offset-6{margin-left:auto;margin-right:25%}.semi-rtl .semi-col-xxl-offset-7{margin-left:auto;margin-right:29.1666666667%}.semi-rtl .semi-col-xxl-offset-8{margin-left:auto;margin-right:33.3333333333%}.semi-rtl .semi-col-xxl-offset-9{margin-left:auto;margin-right:37.5%}.semi-rtl .semi-col-xxl-offset-10{margin-left:auto;margin-right:41.6666666667%}.semi-rtl .semi-col-xxl-offset-11{margin-left:auto;margin-right:45.8333333333%}.semi-rtl .semi-col-xxl-offset-12{margin-left:auto;margin-right:50%}.semi-rtl .semi-col-xxl-offset-13{margin-left:auto;margin-right:54.1666666667%}.semi-rtl .semi-col-xxl-offset-14{margin-left:auto;margin-right:58.3333333333%}.semi-rtl .semi-col-xxl-offset-15{margin-left:auto;margin-right:62.5%}.semi-rtl .semi-col-xxl-offset-16{margin-left:auto;margin-right:66.6666666667%}.semi-rtl .semi-col-xxl-offset-17{margin-left:auto;margin-right:70.8333333333%}.semi-rtl .semi-col-xxl-offset-18{margin-left:auto;margin-right:75%}.semi-rtl .semi-col-xxl-offset-19{margin-left:auto;margin-right:79.1666666667%}.semi-rtl .semi-col-xxl-offset-20{margin-left:auto;margin-right:83.3333333333%}.semi-rtl .semi-col-xxl-offset-21{margin-left:auto;margin-right:87.5%}.semi-rtl .semi-col-xxl-offset-22{margin-left:auto;margin-right:91.6666666667%}.semi-rtl .semi-col-xxl-offset-23{margin-left:auto;margin-right:95.8333333333%}.semi-rtl .semi-col-xxl-offset-24{margin-left:auto;margin-right:100%}}.semi-rtl .semi-row,.semi-rtl .semi-row-flex,.semi-portal-rtl .semi-row,.semi-portal-rtl .semi-row-flex{direction:rtl}.semi-highlight-tag{color:var(--semi-color-highlight);background-color:var(--semi-color-highlight-bg);font-weight:600}.semi-hotKeys{box-sizing:border-box;position:relative;-webkit-user-select:none;user-select:none;white-space:nowrap;vertical-align:bottom;display:flex;justify-content:center;align-items:center;display:inline-flex}.semi-hotKeys-content{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;border-radius:2px;height:20px;padding:2px 8px;border:1px;background-color:var(--semi-color-fill-0);color:var(--semi-color-text-2)}.semi-hotKeys-split{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;margin:0 3px;color:var(--semi-color-text-0)}.semi-image{border-radius:var(--semi-border-radius-small);position:relative;display:inline-block;overflow:hidden}.semi-image img{max-width:none}.semi-image-tooltip-children-wrapper{display:inline-flex;width:fit-content;height:fit-content;vertical-align:middle}.semi-image-img{vertical-align:top;border-radius:inherit;-webkit-user-select:none;user-select:none}.semi-image-img-preview{cursor:zoom-in}.semi-image-img-error{opacity:0}.semi-image-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.semi-image-status{width:100%;height:100%;display:flex;justify-content:center;align-items:center;border-radius:var(--semi-border-radius-small);background-color:var(--semi-color-fill-0);color:var(--semi-color-disabled-text)}.semi-image-preview{position:fixed;top:0;left:0;width:100%;height:100%;z-index:1070;background-color:var(--semi-color-overlay-bg);transition:opacity .5s;overflow:hidden}.semi-image-preview-popup{position:absolute}.semi-image-preview .semi-image-preview-hide{opacity:0}.semi-image-preview-icon{display:flex;justify-content:center;align-items:center;width:40px;height:40px;border-radius:50%;position:absolute;top:50%;transform:translateY(-50%);background:#000000bf;cursor:pointer;color:var(--semi-color-white)}.semi-image-preview-prev{left:24px}.semi-image-preview-next{right:24px}.semi-image-preview-header{position:absolute;top:0;left:0;right:0;font-weight:400;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-white);height:60px;display:flex;justify-content:space-between;align-items:center;padding:0 24px;z-index:1;pointer-events:none}.semi-image-preview-header-title{flex:1}.semi-image-preview-header-close{display:flex;justify-content:center;align-items:center;cursor:pointer;width:30px;height:30px;border-radius:50%;pointer-events:auto}.semi-image-preview-header-close:hover{background-color:#000000bf}.semi-image-preview-footer{display:flex;align-items:center}.semi-image-preview-footer-content{padding:0 16px;background:#000000bf;border-radius:var(--semi-border-radius-medium);height:48px}.semi-image-preview-footer-wrapper{position:absolute;left:50%;bottom:16px;transform:translate(-50%)}.semi-image-preview-footer-page{-webkit-user-select:none;user-select:none;color:var(--semi-color-white);font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;margin:0 12px}.semi-image-preview-footer .semi-icon{color:var(--semi-color-white);cursor:pointer}.semi-image-preview-footer-gap{margin-left:16px}.semi-image-preview-footer .semi-slider{width:132px;padding:0 16px}.semi-image-preview-footer .semi-slider .semi-slider-rail{color:var(--semi-color-white);height:2px}.semi-image-preview-footer .semi-slider .semi-slider-track{height:2px}.semi-image-preview-footer .semi-slider .semi-slider-handle{width:16px;height:16px;margin-top:8px;box-sizing:border-box}.semi-image-preview-footer .semi-divider{background:#ffffff80;margin:0 16px}.semi-image-preview-footer .semi-image-preview-footer-disabled{color:#f9f9f959;cursor:default;pointer-events:none}.semi-image-preview-image{position:relative;height:100%;display:flex;justify-content:center;align-items:center}.semi-image-preview-image-img{position:absolute;transform:scaleZ(1) var(--semi-transform-rotate-none);z-index:0;-webkit-user-select:none;user-select:none}.semi-image-preview-image-spin{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.semi-image-preview-image-spin .semi-spin-wrapper{color:#ccc}@keyframes spinner{to{transform:var(--semi-transform_rotate-clockwise360deg)}}img[src=""],img:not([src]){opacity:0}.semi-rtl .semi-image-preview,.semi-portal-rtl .semi-image-preview,.semi-rtl .semi-image-preview-group,.semi-portal-rtl .semi-image-preview-group{direction:rtl}.semi-rtl .semi-image-preview-prev,.semi-portal-rtl .semi-image-preview-prev{right:24px;left:auto;transform:var(--semi-transform_rotate-clockwise180deg)}.semi-rtl .semi-image-preview-next,.semi-portal-rtl .semi-image-preview-next{left:24px;right:auto;transform:var(--semi-transform_rotate-clockwise180deg)}.semi-rtl .semi-image-preview-footer-page,.semi-portal-rtl .semi-image-preview-footer-page{display:flex;direction:rtl}.semi-rtl .semi-image-preview-footer-gap,.semi-portal-rtl .semi-image-preview-footer-gap{margin-right:16px;margin-left:0}.semi-rtl .semi-image-preview-footer .semi-icon-chevron_left,.semi-portal-rtl .semi-image-preview-footer .semi-icon-chevron_left,.semi-rtl .semi-image-preview-footer .semi-icon-chevron_right,.semi-portal-rtl .semi-image-preview-footer .semi-icon-chevron_right{transform:var(--semi-transform_rotate-clockwise180deg)}@keyframes semi-input-active{0%{transform:scale(1)}to{transform:scale(.97)}}@keyframes semi-input-inactive{0%{transform:scale(.97)}to{transform:scale(1)}}.semi-input{transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-input-wrapper{display:inline-block;position:relative;vertical-align:middle;box-shadow:none;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;background-color:var(--semi-color-fill-0);border:1px rgba(0,0,0,0) solid;border-radius:var(--semi-border-radius-small);width:100%;outline:none;cursor:text;box-sizing:border-box;color:var(--semi-color-text-0);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-input-wrapper-default{height:32px;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:30px}.semi-input-wrapper-small{height:24px;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:22px}.semi-input-wrapper-large{height:40px;font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:38px}.semi-input-wrapper:hover{background-color:var(--semi-color-fill-1);border-color:#0000}.semi-input-wrapper-focus{background-color:var(--semi-color-fill-0);border:var(--semi-color-focus-border) solid 1px}.semi-input-wrapper-focus:hover{background-color:var(--semi-color-fill-0);border-color:var(--semi-color-focus-border)}.semi-input-wrapper-focus:active{background-color:var(--semi-color-fill-2);border-color:var(--semi-color-focus-border)}.semi-input-wrapper.semi-input-readonly{cursor:default}.semi-input-wrapper-error{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger-light-default)}.semi-input-wrapper-error:hover{background-color:var(--semi-color-danger-light-hover);border-color:var(--semi-color-danger-light-hover)}.semi-input-wrapper-error.semi-input-wrapper-focus{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger)}.semi-input-wrapper-error:active{background-color:var(--semi-color-danger-light-active);border-color:var(--semi-color-danger)}.semi-input-wrapper-warning{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning-light-default)}.semi-input-wrapper-warning:hover{background-color:var(--semi-color-warning-light-hover);border-color:var(--semi-color-warning-light-hover)}.semi-input-wrapper-warning.semi-input-wrapper-focus{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning)}.semi-input-wrapper-warning:active{background-color:var(--semi-color-warning-light-active);border-color:var(--semi-color-warning)}.semi-input-wrapper__with-prefix{display:inline-flex;align-items:center}.semi-input-wrapper__with-prefix .semi-input{padding-left:0}.semi-input-wrapper__with-suffix{display:inline-flex;align-items:center}.semi-input-wrapper__with-suffix .semi-input{padding-right:0}.semi-input-wrapper-clearable,.semi-input-wrapper-modebtn{display:inline-flex;align-items:center}.semi-input-wrapper-hidden{border:none}.semi-input-wrapper .semi-icon{color:var(--semi-color-text-2)}.semi-input-wrapper .semi-input-clearbtn,.semi-input-wrapper .semi-input-modebtn{color:var(--semi-color-primary-hover)}.semi-input-wrapper .semi-input-clearbtn>svg,.semi-input-wrapper .semi-input-modebtn>svg{pointer-events:none}.semi-input-wrapper .semi-input-clearbtn:hover,.semi-input-wrapper .semi-input-modebtn:hover{cursor:pointer}.semi-input-wrapper .semi-input-clearbtn:hover .semi-icon,.semi-input-wrapper .semi-input-modebtn:hover .semi-icon{color:var(--semi-color-primary-hover)}.semi-input-wrapper .semi-input-clearbtn:focus-visible,.semi-input-wrapper .semi-input-modebtn:focus-visible{border-radius:var(--semi-border-radius-small);outline:2px solid var(--semi-color-primary-light-active);outline-offset:-1px}.semi-input-wrapper__with-suffix-icon.semi-input-wrapper-clearable:not(.semi-input-wrapper__with-suffix-hidden) .semi-input-clearbtn{min-width:24px;justify-content:flex-end}.semi-input-wrapper-modebtn.semi-input-wrapper-clearable .semi-input-clearbtn{min-width:16px;justify-content:center}.semi-input-wrapper.semi-input-wrapper__with-append-only .semi-input{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-input-wrapper.semi-input-wrapper__with-append-only .semi-input:not(:last-child){border-right-style:none;border-radius:0}.semi-input-wrapper.semi-input-wrapper__with-prepend-only .semi-input{border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-input-wrapper.semi-input-wrapper__with-prepend-only .semi-input:not(:last-child){border-right-style:none}.semi-input-wrapper.semi-input-wrapper__with-prepend,.semi-input-wrapper.semi-input-wrapper__with-append{display:inline-flex;align-items:center;background-color:#0000}.semi-input-wrapper.semi-input-wrapper__with-prepend:hover,.semi-input-wrapper.semi-input-wrapper__with-append:hover{background-color:#0000}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-focus,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-focus{border:1px rgba(0,0,0,0) solid;background-color:#0000}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input{background-color:var(--semi-color-fill-0);border:1px rgba(0,0,0,0) solid}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:hover,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:hover{background-color:var(--semi-color-fill-1)}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:hover+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:hover~.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:hover+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:hover~.semi-input-modebtn{background-color:var(--semi-color-fill-1)}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus{border:1px var(--semi-color-focus-border) solid;background-color:var(--semi-color-fill-0)}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus.semi-input-sibling-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus.semi-input-sibling-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus.semi-input-sibling-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus.semi-input-sibling-modebtn{border-right-style:none}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus.semi-input-sibling-modebtn+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus.semi-input-sibling-modebtn+.semi-input-clearbtn{border-right-style:none}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus~.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus~.semi-input-modebtn{box-sizing:border-box;background-color:var(--semi-color-fill-0)}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus+.semi-input-clearbtn{border:1px var(--semi-color-focus-border) solid;border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0;border-left-style:none}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus+.semi-input-clearbtn:not(:last-child),.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus+.semi-input-clearbtn:not(:last-child){border-radius:0}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus~.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus~.semi-input-modebtn{border:1px var(--semi-color-focus-border) solid;border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0;border-left-style:none}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus~.semi-input-modebtn:not(:last-child),.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus~.semi-input-modebtn:not(:last-child){border-radius:0}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:active,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:active{background-color:var(--semi-color-fill-2)}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:active+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:active~.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:active+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input:active~.semi-input-modebtn{background-color:var(--semi-color-fill-2)}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-clearbtn:hover,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-modebtn:hover,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-clearbtn:hover,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-modebtn:hover{background-color:var(--semi-color-fill-0)}.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-clearbtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-modebtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-clearbtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-modebtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-clearbtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-modebtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-clearbtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-append .semi-input-modebtn:hover:last-child{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error{border-color:#0000}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger-light-default)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:hover,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:hover{background-color:var(--semi-color-danger-light-hover);border-color:var(--semi-color-danger-light-hover)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:hover+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:hover+.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:hover+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:hover+.semi-input-modebtn{background-color:var(--semi-color-danger-light-hover)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:focus,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:focus{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:focus+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:focus+.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:focus+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:focus+.semi-input-modebtn{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:active,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:active{background-color:var(--semi-color-danger-light-active)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:active+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:active+.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:active+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:active+.semi-input-modebtn{background-color:var(--semi-color-danger-light-active);border-color:var(--semi-color-danger)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-clearbtn:hover,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-modebtn:hover,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-clearbtn:hover,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-modebtn:hover{background-color:var(--semi-color-danger-light-default)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-clearbtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-modebtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-clearbtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-modebtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-clearbtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-modebtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-clearbtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-modebtn:hover:last-child{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning{border-color:#0000}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning-light-default)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:hover,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:hover{background-color:var(--semi-color-warning-light-hover);border-color:var(--semi-color-warning-light-hover)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:hover+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:hover+.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:hover+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:hover+.semi-input-modebtn{background-color:var(--semi-color-warning-light-hover)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:focus,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:focus{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:focus+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:focus+.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:focus+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:focus+.semi-input-modebtn{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:active,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:active{background-color:var(--semi-color-warning-light-active)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:active+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:active+.semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:active+.semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:active+.semi-input-modebtn{background-color:var(--semi-color-warning-light-active);border-color:var(--semi-color-warning)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-clearbtn:hover,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-modebtn:hover,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-clearbtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-modebtn,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-clearbtn:hover,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-modebtn:hover{background-color:var(--semi-color-warning-light-default)}.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-clearbtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-modebtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-clearbtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-modebtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-clearbtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-modebtn:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-clearbtn:hover:last-child,.semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-modebtn:hover:last-child{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-input-wrapper-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text);background-color:var(--semi-color-disabled-fill);-webkit-text-fill-color:var(--semi-color-disabled-text)}.semi-input-wrapper-disabled:hover{background-color:var(--semi-color-disabled-fill)}.semi-input-wrapper-disabled .semi-input-append,.semi-input-wrapper-disabled .semi-input-prepend,.semi-input-wrapper-disabled .semi-input-suffix,.semi-input-wrapper-disabled .semi-input-prefix,.semi-input-wrapper-disabled .semi-icon{color:var(--semi-color-disabled-text)}.semi-input{border:none;outline:none;width:100%;color:inherit;padding-left:12px;padding-right:12px;background-color:#0000;box-sizing:border-box}.semi-input:placeholder-shown{text-overflow:ellipsis}.semi-input[type=password]::-ms-reveal,.semi-input[type=password]::-ms-clear{display:none}.semi-input[type=search]::-webkit-search-cancel-button{display:none}.semi-input::placeholder{color:var(--semi-color-text-2)}.semi-input-large{height:38px;font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:38px}.semi-input-small{height:22px;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:22px}.semi-input-default{height:30px;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:30px}.semi-input-disabled{cursor:not-allowed;color:inherit}.semi-input-inset-label{margin:0 12px;font-weight:600;color:var(--semi-color-text-2);flex-shrink:0;white-space:nowrap}.semi-input-prefix,.semi-input-suffix{display:flex;justify-content:center;align-items:center}.semi-input-prefix-text,.semi-input-suffix-text{margin:0 12px;color:var(--semi-color-text-2);font-weight:600;white-space:nowrap}.semi-input-prefix-icon,.semi-input-suffix-icon{color:var(--semi-color-text-2);margin:0 8px}.semi-input-suffix{display:flex;justify-content:center;align-items:center}.semi-input-clearbtn,.semi-input-modebtn{display:flex;align-items:center;height:100%;justify-content:center;min-width:32px}.semi-input-clearbtn+.semi-input-suffix+.semi-input-suffix-text{margin-left:0}.semi-input-clearbtn+.semi-input-suffix+.semi-input-suffix-icon{margin-left:0}.semi-input-suffix-hidden{display:none}.semi-input-prepend,.semi-input-append{height:100%;display:flex;align-items:center;background-color:var(--semi-color-fill-0);color:var(--semi-color-text-2);font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;flex-shrink:0}.semi-input-prepend-icon,.semi-input-prepend-text,.semi-input-append-icon,.semi-input-append-text{padding:0 12px}.semi-input-append{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0;border-left:1px rgba(0,0,0,0) solid}.semi-input-prepend{border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small);border-right:1px rgba(0,0,0,0) solid}.semi-input-disabled::placeholder{color:var(--semi-color-disabled-text)}.semi-input-group{display:inline-flex;align-items:center;align-content:center;flex-wrap:wrap}.semi-input-group .semi-select,.semi-input-group .semi-tagInput,.semi-input-group .semi-cascader,.semi-input-group .semi-tree-select,.semi-input-group>.semi-input-wrapper{border-radius:0}.semi-input-group .semi-select:first-child,.semi-input-group .semi-tagInput:first-child,.semi-input-group .semi-cascader:first-child,.semi-input-group .semi-tree-select:first-child,.semi-input-group>.semi-input-wrapper:first-child{border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-input-group .semi-select:last-child,.semi-input-group .semi-tagInput:last-child,.semi-input-group .semi-cascader:last-child,.semi-input-group .semi-tree-select:last-child,.semi-input-group>.semi-input-wrapper:last-child{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-input-group .semi-select:not(:last-child),.semi-input-group .semi-tagInput:not(:last-child),.semi-input-group .semi-cascader:not(:last-child),.semi-input-group .semi-tree-select:not(:last-child),.semi-input-group>.semi-input-wrapper:not(:last-child){position:relative}.semi-input-group .semi-select:not(:last-child):after,.semi-input-group .semi-tagInput:not(:last-child):after,.semi-input-group .semi-cascader:not(:last-child):after,.semi-input-group .semi-tree-select:not(:last-child):after,.semi-input-group>.semi-input-wrapper:not(:last-child):after{content:"";background-color:var(--semi-color-border);width:1px;position:absolute;right:-1px;top:1px;bottom:1px}.semi-input-group .semi-select{overflow-y:visible}.semi-input-group .semi-input-number .semi-input-wrapper,.semi-input-group .semi-input-number .semi-datepicker-range-input,.semi-input-group .semi-datepicker .semi-input-wrapper,.semi-input-group .semi-datepicker .semi-datepicker-range-input,.semi-input-group .semi-timepicker .semi-input-wrapper,.semi-input-group .semi-timepicker .semi-datepicker-range-input,.semi-input-group .semi-autocomplete .semi-input-wrapper,.semi-input-group .semi-autocomplete .semi-datepicker-range-input{border-radius:0}.semi-input-group .semi-input-number:first-child .semi-input-wrapper,.semi-input-group .semi-input-number:first-child .semi-datepicker-range-input,.semi-input-group .semi-datepicker:first-child .semi-input-wrapper,.semi-input-group .semi-datepicker:first-child .semi-datepicker-range-input,.semi-input-group .semi-timepicker:first-child .semi-input-wrapper,.semi-input-group .semi-timepicker:first-child .semi-datepicker-range-input,.semi-input-group .semi-autocomplete:first-child .semi-input-wrapper,.semi-input-group .semi-autocomplete:first-child .semi-datepicker-range-input{border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-input-group .semi-input-number:last-child .semi-input-wrapper,.semi-input-group .semi-input-number:last-child .semi-datepicker-range-input,.semi-input-group .semi-datepicker:last-child .semi-input-wrapper,.semi-input-group .semi-datepicker:last-child .semi-datepicker-range-input,.semi-input-group .semi-timepicker:last-child .semi-input-wrapper,.semi-input-group .semi-timepicker:last-child .semi-datepicker-range-input,.semi-input-group .semi-autocomplete:last-child .semi-input-wrapper,.semi-input-group .semi-autocomplete:last-child .semi-datepicker-range-input{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0}.semi-input-group .semi-input-number:not(:last-child),.semi-input-group .semi-datepicker:not(:last-child),.semi-input-group .semi-timepicker:not(:last-child),.semi-input-group .semi-autocomplete:not(:last-child){position:relative}.semi-input-group .semi-input-number:not(:last-child):after,.semi-input-group .semi-datepicker:not(:last-child):after,.semi-input-group .semi-timepicker:not(:last-child):after,.semi-input-group .semi-autocomplete:not(:last-child):after{content:"";background-color:var(--semi-color-border);width:1px;position:absolute;right:-1px;top:1px;bottom:1px}.semi-input-group-wrapper-with-top-label{margin-top:16px;margin-bottom:16px}.semi-input-group-wrapper-with-top-label .semi-input-group{display:flex}.semi-input-group-wrapper-with-top-label .semi-input-group .semi-form-field{margin-top:0;margin-bottom:0}.semi-input-only_border,.semi-input-only_border:hover{background:#0000;border-color:var(--semi-color-border)}.semi-input-only_border:focus-within{background:#0000}.semi-input-borderless:not(:focus-within):not(:hover){background-color:#0000;border-color:#0000}.semi-input-borderless:focus-within:not(:active){background-color:#0000}.semi-input-borderless.semi-input-wrapper-error:not(:focus-within){border-color:var(--semi-color-danger)}.semi-input-borderless.semi-input-wrapper-warning:not(:focus-within){border-color:var(--semi-color-warning)}.semi-input-number{display:inline-flex;align-items:center;box-sizing:border-box;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-input-number-suffix-btns{display:inline-flex;flex-direction:column;margin-left:4px;border:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-small);background-color:var(--semi-color-bg-2);box-sizing:border-box}.semi-input-number-suffix-btns>.semi-input-number-button{height:50%;width:14px;padding:0;margin:0;display:inline-flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:0;color:var(--semi-color-text-2)}.semi-input-number-suffix-btns>.semi-input-number-button-up:not(.semi-input-number-button-up-not-allowed):hover,.semi-input-number-suffix-btns>.semi-input-number-button-down:not(.semi-input-number-button-down-not-allowed):hover{cursor:pointer;background-color:var(--semi-color-fill-0)}.semi-input-number-suffix-btns>.semi-input-number-button-up:not(.semi-input-number-button-up-not-allowed):active,.semi-input-number-suffix-btns>.semi-input-number-button-down:not(.semi-input-number-button-down-not-allowed):active{cursor:pointer;background-color:var(--semi-color-fill-1)}.semi-input-number-suffix-btns>.semi-input-number-button-up.semi-input-number-button-up-disabled,.semi-input-number-suffix-btns>.semi-input-number-button-down.semi-input-number-button-down-disabled{background-color:var(--semi-color-disabled-fill);color:var(--semi-color-disabled-text)}.semi-input-number-suffix-btns>.semi-input-number-button-up.semi-input-number-button-up-not-allowed,.semi-input-number-suffix-btns>.semi-input-number-button-down.semi-input-number-button-down-not-allowed{cursor:not-allowed}.semi-input-number-suffix-btns-inner-hover{border-color:var(--semi-color-fill-2)}.semi-input-number-suffix-btns-inner{margin-left:8px;border-radius:var(--semi-border-radius-small);overflow:hidden}.semi-input-number .semi-input-clearbtn+.semi-input-suffix{margin-left:-4px}.semi-input-number .semi-input-clearbtn+.semi-input-suffix .semi-input-number-suffix-btns-inner{margin-left:0}.semi-input-number-size-default .semi-input-number-suffix-btns{height:32px}.semi-input-number-size-default .semi-input-number-suffix-btns-inner{height:30px}.semi-input-number-size-large .semi-input-number-suffix-btns{height:40px}.semi-input-number-size-large .semi-input-number-suffix-btns-inner{height:38px}.semi-input-number-size-small .semi-input-number-suffix-btns{height:24px}.semi-input-number-size-small .semi-input-number-suffix-btns-inner{height:22px}.semi-input-number:not(:focus-within):not(:hover) .semi-input-borderless+.semi-input-number-suffix-btns{opacity:0}.semi-rtl .semi-input-number,.semi-portal-rtl .semi-input-number{direction:rtl}.semi-rtl .semi-input-number-suffix-btns,.semi-portal-rtl .semi-input-number-suffix-btns{margin-left:auto;margin-right:4px}.semi-rtl .semi-input-number-suffix-btns-inner,.semi-portal-rtl .semi-input-number-suffix-btns-inner{margin-left:auto;margin-right:8px}.semi-rtl .semi-input-number .semi-input-clearbtn+.semi-input-suffix,.semi-portal-rtl .semi-input-number .semi-input-clearbtn+.semi-input-suffix{margin-left:auto;margin-right:-4px}.semi-rtl .semi-input-number .semi-input-clearbtn+.semi-input-suffix .semi-input-number-suffix-btns-inner,.semi-portal-rtl .semi-input-number .semi-input-clearbtn+.semi-input-suffix .semi-input-number-suffix-btns-inner{margin-left:auto;margin-right:0}.semi-json-viewer{box-sizing:border-box;padding:12px 0}.semi-json-viewer-background{background-color:var(--semi-color-default)}.semi-json-viewer-string-key{color:rgba(var(--semi-red-5),1)}.semi-json-viewer-string-value,.semi-json-viewer-keyword{color:rgba(var(--semi-blue-5),1)}.semi-json-viewer-number{color:rgba(var(--semi-green-5),1)}.semi-json-viewer-delimiter-comma{color:rgba(var(--semi-blue-6),1)}.semi-json-viewer-delimiter-bracket-0{color:rgba(var(--semi-blue-7),1)}.semi-json-viewer-delimiter-bracket-1{color:rgba(var(--semi-green-7),1)}.semi-json-viewer-delimiter-bracket-2{color:rgba(var(--semi-orange-7),1)}.semi-json-viewer-delimiter-array-0{color:rgba(var(--semi-blue-7),1)}.semi-json-viewer-delimiter-array-1{color:rgba(var(--semi-green-7),1)}.semi-json-viewer-delimiter-array-2{color:rgba(var(--semi-orange-7),1)}.semi-json-viewer-search-result{background-color:rgba(var(--semi-green-2),1)}.semi-json-viewer-current-search-result{background-color:rgba(var(--semi-yellow-4),1)!important}.semi-json-viewer-folding-icon{opacity:.7;transition:opacity .8s;color:rgba(var(--semi-blue-7),1)}.semi-json-viewer-view-line{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Monaco,Fira Code,Consolas,Liberation Mono,DejaVu Sans Mono,Courier New,monospace;font-weight:400;font-size:12px;font-feature-settings:"liga" 0,"calt" 0;font-variation-settings:normal;letter-spacing:0px;color:#237893;word-break:break-all!important;white-space:pre-wrap!important}.semi-json-viewer-line-number{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Monaco,Fira Code,Consolas,Liberation Mono,DejaVu Sans Mono,Courier New,monospace;font-weight:400;font-size:12px;font-feature-settings:"liga" 0,"calt" 0;font-variation-settings:normal;letter-spacing:0px;color:rgba(var(--semi-grey-5),1);text-align:center;width:50px;-webkit-user-select:none;user-select:none;word-wrap:normal!important;overflow-wrap:normal!important}.semi-json-viewer-content-container{scrollbar-width:none;-ms-overflow-style:none}.semi-json-viewer-content-container::-webkit-scrollbar{display:none}.semi-json-viewer-search-bar-container{width:458px;box-sizing:border-box;border:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-small);display:flex;flex-direction:column;padding:8px;gap:8px;background-color:var(--semi-color-bg-0)}.semi-json-viewer-search-bar{display:flex;align-items:flex-start;gap:8px}.semi-json-viewer-search-bar-input{width:200px!important;flex-shrink:0}.semi-json-viewer-search-bar .semi-button-group{flex-wrap:nowrap}.semi-json-viewer-search-bar .semi-button:nth-of-type(1){width:40px}.semi-json-viewer-search-bar .semi-button:nth-of-type(2){width:40px}.semi-json-viewer-replace-bar{display:flex;align-items:flex-start;gap:8px}.semi-json-viewer-replace-bar-input{width:261px}.semi-json-viewer-replace-bar .semi-button:nth-of-type(1){width:52px}.semi-json-viewer-replace-bar .semi-button:nth-of-type(2){width:80px}.semi-json-viewer-search-options{display:flex;align-items:center;justify-content:center;list-style:none;padding-inline-start:0;margin-block-start:0;margin-block-end:0;gap:8px}.semi-json-viewer-search-options-item{min-width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:var(--semi-border-radius-small);color:var(--semi-color-text-2)}.semi-json-viewer-search-options-item:hover{background-color:var(--semi-color-default)}.semi-json-viewer-search-options-item-active{color:var(--semi-color-primary);background-color:var(--semi-color-primary-light-default)}.semi-json-viewer-complete-suggestions-container{border-radius:var(--semi-border-radius-medium);background-color:var(--semi-color-bg-3);box-shadow:var(--semi-shadow-elevated);z-index:1000;min-width:200px;max-width:400px;list-style:none;padding:4px 0}.semi-json-viewer-complete-container{position:absolute;z-index:1000}.semi-json-viewer-complete-suggestions-item{padding:8px 16px;color:var(--semi-color-text-0);cursor:pointer}.semi-json-viewer-error{text-decoration:underline wavy var(--semi-color-danger);text-decoration-thickness:1px;text-underline-position:under}.semi-layout{display:flex;flex:auto;flex-direction:column;min-height:auto}.semi-layout,.semi-layout-header,.semi-layout-footer,.semi-layout-content,.semi-layout-sider,.semi-layout-sider-children{box-sizing:border-box}.semi-layout-header,.semi-layout-footer{flex:0 0 auto}.semi-layout-content{flex:auto;min-height:auto}.semi-layout-sider{position:relative;min-width:auto}.semi-layout-sider-children{height:100%;margin-top:-.1px;padding-top:.1px}.semi-layout-has-sider{flex-direction:row}.semi-layout-has-sider>.semi-layout,.semi-layout-has-sider>.semi-layout-content{overflow-x:hidden}.semi-rtl .semi-layout,.semi-portal-rtl .semi-layout{direction:rtl}.semi-list{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-list-items{margin:0;padding:0;list-style:none}.semi-list-header,.semi-list-footer{padding:12px 24px}.semi-list-empty{padding:12px 0;color:var(--semi-color-text-2);width:100%;text-align:center}.semi-list-item{display:flex;flex-wrap:wrap;align-items:center;box-sizing:border-box;padding:12px 24px;margin:0;list-style:none}.semi-list-item-body{flex:1;display:flex}.semi-list-item-body-header{margin-right:20px}.semi-list-item-body-flex-start{align-items:flex-start}.semi-list-item-body-flex-end{align-items:flex-end}.semi-list-item-body-center{align-items:center}.semi-list-item-body-stretch{align-items:stretch}.semi-list-item-body-baseline{align-items:baseline}.semi-list-item-extra{flex:0 0 auto;margin-left:40px}.semi-list-split .semi-list-item{border-bottom:1px solid var(--semi-color-border)}.semi-list-split .semi-list-item:last-child{border-bottom:none}.semi-list-split .semi-list-header{border-bottom:1px solid var(--semi-color-border)}.semi-list-split .semi-list-footer{border-top:1px solid var(--semi-color-border)}.semi-list-small .semi-list-item,.semi-list-small .semi-list-header,.semi-list-small .semi-list-footer{padding:8px 16px}.semi-list-large .semi-list-item,.semi-list-large .semi-list-header,.semi-list-large .semi-list-footer{padding:16px 24px}.semi-list.semi-list-grid .semi-list-item{padding:0}.semi-list.semi-list-bordered{border:1px solid var(--semi-color-border)}.semi-list.semi-list-flex .semi-list-items{display:flex}.semi-list.semi-list-flex.semi-list-split .semi-list-item{border-bottom:none;border-right:1px solid var(--semi-color-border)}.semi-list.semi-list-flex.semi-list-split .semi-list-item:last-child{border-right:none}.semi-rtl .semi-list,.semi-portal-rtl .semi-list,.semi-rtl .semi-list-item,.semi-portal-rtl .semi-list-item{direction:rtl}.semi-rtl .semi-list-item-body-header,.semi-portal-rtl .semi-list-item-body-header{margin-right:auto;margin-left:20px}.semi-rtl .semi-list-item-extra,.semi-portal-rtl .semi-list-item-extra{flex:0 0 auto;margin-left:0;margin-right:40px}.semi-rtl .semi-list.semi-list-flex.semi-list-split .semi-list-item,.semi-portal-rtl .semi-list.semi-list-flex.semi-list-split .semi-list-item{border-bottom:none;border-right:0;border-left:1px solid var(--semi-color-border)}.semi-rtl .semi-list.semi-list-flex.semi-list-split .semi-list-item:last-child,.semi-portal-rtl .semi-list.semi-list-flex.semi-list-split .semi-list-item:last-child{border-left:none}.semi-markdownRender-simple-code{background:var(--semi-color-fill-0);color:var(--semi-color-text-1)}.semi-markdownRender ul,.semi-markdownRender li{color:var(--semi-color-text-0)}.semi-markdownRender-component-image{margin:16px;max-width:50%;max-height:500px;display:flex;flex-direction:column;justify-content:center}.semi-markdownRender-component-image-alt{margin-top:8px;text-align:center;color:var(--semi-color-tertiary)}.semi-markdownRender-component-header.semi-typography.semi-typography-h1,.semi-markdownRender-component-header.semi-typography.semi-typography-h2,.semi-markdownRender-component-header.semi-typography.semi-typography-h3,.semi-markdownRender-component-header.semi-typography.semi-typography-h4,.semi-markdownRender-component-header.semi-typography.semi-typography-h5{margin-top:16px;margin-bottom:16px}.semi-markdownRender-component-p strong{font-weight:600}.semi-modal{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;position:relative;margin:80px auto;color:var(--semi-color-text-0)}.semi-modal-mask{position:fixed;top:0;right:0;left:0;bottom:0;background-color:var(--semi-color-overlay-bg);-webkit-backdrop-filter:none;backdrop-filter:none;height:100%;z-index:1000}.semi-modal-mask-hidden{display:none}.semi-modal-icon-wrapper{display:inline-flex;margin-right:12px;width:24px}.semi-modal-wrap{position:fixed;overflow:auto;top:0;right:0;bottom:0;left:0;z-index:1000;-webkit-overflow-scrolling:touch;outline:0}.semi-modal-wrap-center{display:flex;align-items:flex-start}.semi-modal-title{display:inline-flex;align-items:flex-start;justify-content:flex-start;width:100%;margin:0}.semi-modal-content{position:relative;display:flex;height:max-content;width:100%;box-sizing:border-box;flex-direction:column;background-color:var(--semi-color-bg-2);-webkit-backdrop-filter:none;backdrop-filter:none;border:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-large);padding:0 24px;background-clip:padding-box;overflow:hidden;box-shadow:var(--semi-shadow-elevated)}.semi-modal-footerfill{display:flex}.semi-modal-content-height-set{height:100%}.semi-modal-content-fullScreen{border-radius:0;border:none;height:100%;top:0}.semi-modal-header{display:flex;align-items:flex-start;margin:24px 0;padding:0;font-size:14px;font-weight:600;background-color:#0000;color:var(--semi-color-text-0);border-bottom:0 solid rgba(0,0,0,0)}.semi-modal-body-wrapper{display:flex;align-items:flex-start;margin:24px 0}.semi-modal-body{flex:1 1 auto;margin:0;padding:0}.semi-modal-withIcon{margin-left:36px}.semi-modal-footer{margin:24px 0;padding:0;text-align:right;border-radius:0 0 5px 5px;border-top:0 solid rgba(0,0,0,0);background-color:#0000}.semi-modal-footer .semi-button{margin-left:12px;margin-right:0}.semi-modal-confirm .semi-modal-header{margin-bottom:8px}.semi-modal-confirm-icon-wrapper{display:inline-flex;margin-right:12px;width:24px}.semi-modal-confirm-icon{display:inline-flex;color:var(--semi-color-primary)}.semi-modal-info-icon{color:var(--semi-color-info)}.semi-modal-success-icon{color:var(--semi-color-success)}.semi-modal-error-icon{color:var(--semi-color-danger)}.semi-modal-warning-icon{color:var(--semi-color-warning)}.semi-modal-small{width:448px}.semi-modal-medium{width:684px}.semi-modal-large{width:920px}.semi-modal-full-width{width:calc(100vw - 64px)}.semi-modal-centered{margin:auto}.semi-modal-popup .semi-modal-mask,.semi-modal-popup .semi-modal-wrap{position:absolute;overflow:hidden}.semi-modal-fixed .semi-modal-mask,.semi-modal-fixed .semi-modal-wrap{position:fixed;overflow:hidden}.semi-modal-displayNone{display:none}.semi-modal-content-animate-show{animation:.12s semi-modal-content-keyframe-show cubic-bezier(.215,.61,.355,1) 0ms forwards;animation-fill-mode:forwards}.semi-modal-content-animate-hide{animation:.12s semi-modal-content-keyframe-hide cubic-bezier(.215,.61,.355,1) 0ms forwards;animation-fill-mode:forwards}.semi-modal-mask-animate-show{animation:90ms semi-modal-mask-keyframe-show cubic-bezier(.215,.61,.355,1) 0ms forwards;animation-fill-mode:forwards}.semi-modal-mask-animate-hide{animation:90ms semi-modal-mask-keyframe-hide cubic-bezier(.215,.61,.355,1) 0ms forwards;animation-fill-mode:forwards}@keyframes semi-modal-content-keyframe-show{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}@keyframes semi-modal-content-keyframe-hide{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.7)}}@keyframes semi-modal-mask-keyframe-show{0%{opacity:0}to{opacity:1}}@keyframes semi-modal-mask-keyframe-hide{0%{opacity:1}to{opacity:0}}.semi-modal-rtl{direction:rtl}.semi-modal-rtl .semi-modal-icon-wrapper,.semi-modal-confirm-rtl .semi-modal-icon-wrapper{margin-right:0;margin-left:12px}.semi-modal-rtl .semi-modal-withIcon,.semi-modal-confirm-rtl .semi-modal-withIcon{margin-left:0;margin-right:36px}.semi-modal-rtl .semi-modal-footer,.semi-modal-confirm-rtl .semi-modal-footer{text-align:left}.semi-modal-rtl .semi-modal-footer .semi-button,.semi-modal-confirm-rtl .semi-modal-footer .semi-button{margin-left:0;margin-right:12px}.semi-modal-confirm-rtl{direction:rtl}.semi-modal-confirm .semi-modal-confirm-rtl .semi-button{margin-left:0;margin-right:12px}.semi-navigation{box-sizing:border-box;display:inline-flex;width:240px;outline:none;overflow:hidden;margin:0;padding-left:8px;padding-right:8px;-webkit-user-select:none;user-select:none;transition:padding-left .1s ease-out,width .2s cubic-bezier(.62,.05,.36,.95);border-right:1px solid var(--semi-color-border);background-color:var(--semi-color-nav-bg)}.semi-navigation-inner{width:100%;height:100%;display:flex;justify-content:space-between}.semi-navigation-list{margin:0;padding:0;list-style:none}.semi-navigation-list>.semi-navigation-item-normal{height:36px}.semi-navigation-list>.semi-navigation-item{font-weight:600}.semi-navigation-list>.semi-navigation-item>.semi-navigation-sub-title{font-weight:600}.semi-navigation-collapsed{width:60px;padding-left:8px;padding-right:8px;transition:padding-left .1s ease-out,width .2s cubic-bezier(.62,.05,.36,.95)}.semi-navigation-collapsed .semi-navigation-item-text{transition:opacity .2s cubic-bezier(.5,-.1,1,.4);opacity:0}.semi-navigation-collapsed .semi-navigation-item-icon:last-child{transition:opacity .2s cubic-bezier(.5,-.1,1,.4);opacity:0}.semi-navigation-collapsed-wrapper{display:flex;width:fit-content;height:fit-content}.semi-navigation-sub-wrap .semi-navigation-sub-title,.semi-navigation-item{cursor:pointer;display:flex;border-radius:var(--semi-border-radius-small);padding:8px 12px;box-sizing:border-box;margin-top:0;margin-bottom:8px;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;color:var(--semi-color-text-0);width:100%;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-navigation-sub-wrap .semi-navigation-sub-title-text,.semi-navigation-item-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;transition:opacity .2s cubic-bezier(.5,-.1,1,.4);opacity:1}.semi-navigation-sub-wrap .semi-navigation-sub-title-indent,.semi-navigation-item-indent{width:32px}.semi-navigation-sub-wrap .semi-navigation-sub-title:focus-visible,.semi-navigation-item:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-navigation-header-link,.semi-navigation-item-link{display:flex;width:100%;color:inherit;text-decoration:none;align-items:center;justify-content:flex-start}.semi-navigation-item-has-link{padding:0}.semi-navigation-item-has-link .semi-navigation-item-link{padding:8px 12px}.semi-navigation-item-sub{padding:0}.semi-navigation-sub-wrap>.semi-navigation-item-inner{width:100%}.semi-navigation-sub-wrap .semi-navigation-sub-title>.semi-navigation-item-inner{display:flex}.semi-navigation-item-inner{display:flex;align-items:center;width:100%;flex:0 0 auto}.semi-navigation-item-title{opacity:1;transition:opacity .1s 100s ease-out}.semi-navigation .semi-navigation-sub-title{margin-bottom:0}.semi-navigation-item-icon-info{display:inline-flex;color:var(--semi-color-text-2);margin-right:12px;min-width:20px;margin-left:0}.semi-navigation-item-icon-toggle-left{display:inline-flex;color:var(--semi-color-text-2);margin-right:12px;min-width:20px}.semi-navigation-item-icon-toggle-right{display:inline-flex;color:var(--semi-color-text-2);margin-left:auto;transition:opacity .2s cubic-bezier(.5,-.1,1,.4);opacity:1}.semi-navigation-item-selected{background-color:var(--semi-color-primary-light-default);color:var(--semi-color-text-0)}.semi-navigation-item-selected .semi-navigation-item-icon:first-child{color:var(--semi-color-primary)}.semi-navigation-item-selected.semi-navigation-item-disabled{background-color:#0000;color:var(--semi-color-primary-disabled);cursor:not-allowed}.semi-navigation-item-selected.semi-navigation-item-disabled .semi-navigation-item-icon:first-child{color:var(--semi-color-primary-disabled)}.semi-navigation-item-disabled{background-color:#0000;color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-navigation-item-disabled .semi-navigation-item-icon,.semi-navigation-item-disabled .semi-navigation-item-icon:first-child{color:var(--semi-color-disabled-text)}.semi-navigation-inner>.semi-navigation-item{color:var(--semi-color-text-0)}.semi-navigation-item-normal:hover:not(.semi-navigation-item-selected){background-color:var(--semi-color-fill-0);color:var(--semi-color-text-0)}.semi-navigation-item-normal:hover:not(.semi-navigation-item-selected) .semi-navigation-item-icon:first-child{color:var(--semi-color-text-2)}.semi-navigation-item-normal:hover.semi-navigation-item-selected{color:var(--semi-color-text-0);background-color:var(--semi-color-fill-0)}.semi-navigation-item-normal:hover.semi-navigation-item-selected .semi-navigation-item-icon:first-child{color:var(--semi-color-primary)}.semi-navigation-item-normal:hover.semi-navigation-item-disabled{background-color:#0000;color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-navigation-item-normal:hover.semi-navigation-item-disabled .semi-navigation-item-icon,.semi-navigation-item-normal:hover.semi-navigation-item-disabled .semi-navigation-item-icon:first-child{color:var(--semi-color-disabled-text)}.semi-navigation-item-normal:hover.semi-navigation-item-selected.semi-navigation-item-disabled{background-color:#0000;color:var(--semi-color-primary-disabled);cursor:not-allowed}.semi-navigation-item-normal:hover.semi-navigation-item-selected.semi-navigation-item-disabled .semi-navigation-item-icon:first-child{color:var(--semi-color-primary-disabled)}.semi-navigation-item-normal:active:not(.semi-navigation-item-selected),.semi-navigation-inner>.semi-navigation-item-normal:active:not(.semi-navigation-item-selected){background-color:var(--semi-color-fill-1);color:var(--semi-color-text-0)}.semi-navigation-item-normal:active:not(.semi-navigation-item-selected) .semi-navigation-item-icon:first-child,.semi-navigation-inner>.semi-navigation-item-normal:active:not(.semi-navigation-item-selected) .semi-navigation-item-icon:first-child{color:var(--semi-color-text-2)}.semi-navigation-item-normal:active.semi-navigation-item-selected,.semi-navigation-inner>.semi-navigation-item-normal:active.semi-navigation-item-selected{color:var(--semi-color-text-0);background-color:var(--semi-color-fill-1)}.semi-navigation-item-normal:active.semi-navigation-item-selected .semi-navigation-item-icon:first-child,.semi-navigation-inner>.semi-navigation-item-normal:active.semi-navigation-item-selected .semi-navigation-item-icon:first-child{color:var(--semi-color-primary)}.semi-navigation-item-normal:active.semi-navigation-item-disabled,.semi-navigation-inner>.semi-navigation-item-normal:active.semi-navigation-item-disabled{background-color:#0000;color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-navigation-item-normal:active.semi-navigation-item-disabled .semi-navigation-item-icon,.semi-navigation-item-normal:active.semi-navigation-item-disabled .semi-navigation-item-icon:first-child,.semi-navigation-inner>.semi-navigation-item-normal:active.semi-navigation-item-disabled .semi-navigation-item-icon,.semi-navigation-inner>.semi-navigation-item-normal:active.semi-navigation-item-disabled .semi-navigation-item-icon:first-child{color:var(--semi-color-disabled-text)}.semi-navigation-sub-wrap .semi-navigation-item-inner{display:block}.semi-navigation-sub-wrap{display:block;padding:0;margin-top:0;height:inherit}.semi-navigation-sub-wrap .semi-navigation-sub-title{display:flex;justify-content:flex-start;height:36px;align-items:center}.semi-navigation-sub{font-weight:400;font-size:14px;list-style:none;outline:none;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.semi-navigation-sub .semi-navigation-item{color:var(--semi-color-text-0);background-color:#0000;height:36px;font-weight:400;width:100%}.semi-navigation-sub .semi-navigation-item:first-child{margin-top:8px}.semi-navigation-sub .semi-navigation-item>.semi-navigation-sub .semi-navigation-item-text:first-child{margin-left:44px}.semi-navigation-sub .semi-navigation-item:hover:not(.semi-navigation-sub-wrap):not(.semi-navigation-item-selected):not(.semi-navigation-item-disabled){background-color:var(--semi-color-fill-0);color:var(--semi-color-text-0)}.semi-navigation-sub .semi-navigation-item:hover:not(.semi-navigation-sub-wrap):not(.semi-navigation-item-selected):not(.semi-navigation-item-disabled) .semi-navigation-item-icon:first-child{color:var(--semi-color-text-2)}.semi-navigation-sub .semi-navigation-item:hover.semi-navigation-item-disabled{background-color:#0000;color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-navigation-sub .semi-navigation-item:hover.semi-navigation-item-disabled .semi-navigation-item-icon,.semi-navigation-sub .semi-navigation-item:hover.semi-navigation-item-disabled .semi-navigation-item-icon:first-child{color:var(--semi-color-disabled-text)}.semi-navigation-sub .semi-navigation-item:hover.semi-navigation-item-selected{background-color:var(--semi-color-primary-light-default);color:var(--semi-color-text-0)}.semi-navigation-sub .semi-navigation-item:hover.semi-navigation-item-selected .semi-navigation-item-icon:first-child{color:var(--semi-color-primary)}.semi-navigation-sub .semi-navigation-item:active:not(.semi-navigation-sub-wrap):not(.semi-navigation-item-selected):not(.semi-navigation-item-disabled){background-color:var(--semi-color-fill-1);color:var(--semi-color-text-0)}.semi-navigation-sub .semi-navigation-item:active:not(.semi-navigation-sub-wrap):not(.semi-navigation-item-selected):not(.semi-navigation-item-disabled) .semi-navigation-item-icon:first-child{color:var(--semi-color-text-2)}.semi-navigation-sub .semi-navigation-item:active.semi-navigation-item-disabled{background-color:#0000;color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-navigation-sub .semi-navigation-item:active.semi-navigation-item-disabled .semi-navigation-item-icon,.semi-navigation-sub .semi-navigation-item:active.semi-navigation-item-disabled .semi-navigation-item-icon:first-child{color:var(--semi-color-disabled-text)}.semi-navigation-sub .semi-navigation-item:active.semi-navigation-item-selected{background-color:var(--semi-color-primary-light-default);color:var(--semi-color-text-0)}.semi-navigation-sub .semi-navigation-item:active.semi-navigation-item-selected .semi-navigation-item-icon:first-child{color:var(--semi-color-primary)}.semi-navigation-sub .semi-navigation-item-selected{background-color:var(--semi-color-primary-light-default);color:var(--semi-color-text-0)}.semi-navigation-sub .semi-navigation-item-selected .semi-navigation-item-icon:first-child{color:var(--semi-color-primary)}.semi-navigation-sub .semi-navigation-item-selected.semi-navigation-item-disabled{cursor:not-allowed;background-color:var(--semi-color-primary-light-default);color:var(--semi-color-disabled-text)}.semi-navigation-sub .semi-navigation-item-disabled{background-color:#0000;color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-navigation-sub .semi-navigation-item-disabled .semi-navigation-item-icon,.semi-navigation-sub .semi-navigation-item-disabled .semi-navigation-item-icon:first-child{color:var(--semi-color-disabled-text)}.semi-navigation-sub .semi-navigation-sub-wrap{height:inherit}.semi-navigation-icon-rotate-0{transition:transform .2s ease-in-out;transform:rotate(0)}.semi-navigation-icon-rotate-180{transition:transform .2s ease-in-out;transform:rotate(-180deg)}.semi-navigation-header{display:inline-flex;align-items:center;box-sizing:border-box}.semi-navigation-header-logo{margin-left:0;margin-right:8px;display:inline-flex}.semi-navigation-header-logo>.semi-icon,.semi-navigation-header-logo>img{width:36px;height:36px;object-fit:scale-down}.semi-navigation-header-text{font-size:18px;line-height:24px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;display:inline-flex;color:var(--semi-color-text-0);white-space:nowrap;text-overflow:ellipsis;transition:opacity .2s cubic-bezier(.5,-.1,1,.4);opacity:1}.semi-navigation-footer{box-sizing:border-box;padding:16px 24px;display:inline-flex;align-items:center}.semi-navigation-footer .semi-navigation-collapse-btn{text-overflow:ellipsis;white-space:nowrap}.semi-navigation-collapsed .semi-navigation-header{justify-content:center}.semi-navigation-collapsed .semi-navigation-header .semi-navigation-header-logo{margin-right:0;width:100%}.semi-navigation-collapsed .semi-navigation-header .semi-navigation-header-logo>.semi-icon,.semi-navigation-collapsed .semi-navigation-header .semi-navigation-header-logo>img{width:36px;max-width:100%;max-height:100%}.semi-navigation-collapsed .semi-navigation-header .semi-navigation-header-text{transition:opacity .2s cubic-bezier(.5,-.1,1,.4);opacity:0}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-item-selected:not(.semi-navigation-item-disabled).semi-navigation-item-normal:hover .semi-navigation-item-icon:first-child{color:var(--semi-color-primary)}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title{color:var(--semi-color-text-0);background-color:#0000}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title-selected{font-weight:600;background-color:var(--semi-color-primary-light-default);color:var(--semi-color-text-0)}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title-selected .semi-navigation-item-icon:first-child{color:var(--semi-color-primary)}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title-selected{background-color:#0000}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title-selected.semi-navigation-sub-title-disabled{background-color:#0000;color:var(--semi-color-primary-disabled);cursor:not-allowed}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title-selected.semi-navigation-sub-title-disabled .semi-navigation-item-icon:first-child{color:var(--semi-color-primary-disabled)}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title-disabled{font-weight:600;background-color:#0000;color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title-disabled .semi-navigation-item-icon,.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title-disabled .semi-navigation-item-icon:first-child{color:var(--semi-color-disabled-text)}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:hover:not(.semi-navigation-sub-title-selected){background-color:var(--semi-color-fill-0);color:var(--semi-color-text-0)}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:hover:not(.semi-navigation-sub-title-selected) .semi-navigation-item-icon:first-child{color:var(--semi-color-text-2)}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:hover.semi-navigation-sub-title-selected{color:var(--semi-color-text-0);background-color:var(--semi-color-fill-0)}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:hover.semi-navigation-sub-title-selected .semi-navigation-item-icon:first-child{color:var(--semi-color-primary)}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:active:not(.semi-navigation-sub-title-selected){background-color:var(--semi-color-fill-1);color:var(--semi-color-text-0)}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:active:not(.semi-navigation-sub-title-selected) .semi-navigation-item-icon:first-child{color:var(--semi-color-text-2)}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:active.semi-navigation-sub-title-selected{color:var(--semi-color-text-0);background-color:var(--semi-color-fill-1)}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:active.semi-navigation-sub-title-selected .semi-navigation-item-icon:first-child{color:var(--semi-color-primary)}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:hover.semi-navigation-sub-title-disabled:not(.semi-navigation-sub-title-selected),.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:active.semi-navigation-sub-title-disabled:not(.semi-navigation-sub-title-selected){background-color:#0000;color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:hover.semi-navigation-sub-title-disabled:not(.semi-navigation-sub-title-selected) .semi-navigation-item-icon,.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:hover.semi-navigation-sub-title-disabled:not(.semi-navigation-sub-title-selected) .semi-navigation-item-icon:first-child,.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:active.semi-navigation-sub-title-disabled:not(.semi-navigation-sub-title-selected) .semi-navigation-item-icon,.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:active.semi-navigation-sub-title-disabled:not(.semi-navigation-sub-title-selected) .semi-navigation-item-icon:first-child{color:var(--semi-color-disabled-text)}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:hover.semi-navigation-sub-title-disabled.semi-navigation-sub-title-selected,.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:active.semi-navigation-sub-title-disabled.semi-navigation-sub-title-selected{background-color:#0000;color:var(--semi-color-primary-disabled);cursor:not-allowed}.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:hover.semi-navigation-sub-title-disabled.semi-navigation-sub-title-selected .semi-navigation-item-icon:first-child,.semi-navigation-vertical .semi-navigation-list>.semi-navigation-sub-wrap>.semi-navigation-sub-title:active.semi-navigation-sub-title-disabled.semi-navigation-sub-title-selected .semi-navigation-item-icon:first-child{color:var(--semi-color-primary-disabled)}.semi-navigation-vertical .semi-navigation-list .semi-navigation-sub-wrap>.semi-navigation-sub-title-disabled{background-color:#0000;color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-navigation-vertical .semi-navigation-list .semi-navigation-sub-wrap>.semi-navigation-sub-title-disabled .semi-navigation-item-icon,.semi-navigation-vertical .semi-navigation-list .semi-navigation-sub-wrap>.semi-navigation-sub-title-disabled .semi-navigation-item-icon:first-child{color:var(--semi-color-disabled-text)}.semi-navigation-vertical .semi-navigation-list .semi-navigation-sub-wrap>.semi-navigation-sub-title:hover:not(.semi-navigation-sub-title-selected){background-color:var(--semi-color-fill-0);color:var(--semi-color-text-0)}.semi-navigation-vertical .semi-navigation-list .semi-navigation-sub-wrap>.semi-navigation-sub-title:hover:not(.semi-navigation-sub-title-selected) .semi-navigation-item-icon:first-child{color:var(--semi-color-text-2)}.semi-navigation-vertical .semi-navigation-list .semi-navigation-sub-wrap>.semi-navigation-sub-title:hover.semi-navigation-sub-title-selected{color:var(--semi-color-text-0);background-color:var(--semi-color-fill-0)}.semi-navigation-vertical .semi-navigation-list .semi-navigation-sub-wrap>.semi-navigation-sub-title:hover.semi-navigation-sub-title-selected .semi-navigation-item-icon:first-child{color:var(--semi-color-primary)}.semi-navigation-vertical .semi-navigation-list .semi-navigation-sub-wrap>.semi-navigation-sub-title:hover.semi-navigation-sub-title-disabled:not(.semi-navigation-sub-title-selected){background-color:#0000;color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-navigation-vertical .semi-navigation-list .semi-navigation-sub-wrap>.semi-navigation-sub-title:hover.semi-navigation-sub-title-disabled:not(.semi-navigation-sub-title-selected) .semi-navigation-item-icon,.semi-navigation-vertical .semi-navigation-list .semi-navigation-sub-wrap>.semi-navigation-sub-title:hover.semi-navigation-sub-title-disabled:not(.semi-navigation-sub-title-selected) .semi-navigation-item-icon:first-child{color:var(--semi-color-disabled-text)}.semi-navigation-vertical .semi-navigation-list .semi-navigation-sub-wrap>.semi-navigation-sub-title:hover.semi-navigation-sub-title-disabled.semi-navigation-sub-title-selected{background-color:#0000;color:var(--semi-color-primary-disabled);cursor:not-allowed}.semi-navigation-vertical .semi-navigation-list .semi-navigation-sub-wrap>.semi-navigation-sub-title:hover.semi-navigation-sub-title-disabled.semi-navigation-sub-title-selected .semi-navigation-item-icon:first-child{color:var(--semi-color-primary-disabled)}.semi-navigation-vertical .semi-navigation-item:last-of-type{margin-bottom:0}.semi-navigation-vertical .semi-navigation-inner{flex-direction:column}.semi-navigation-vertical .semi-navigation-header-list-outer{height:100%}.semi-navigation-vertical .semi-navigation-list-wrapper{padding-top:12px;overflow-y:auto;overflow-x:hidden}.semi-navigation-vertical .semi-navigation-header{padding:32px 8px 36px 3.5px;width:100%}.semi-navigation-vertical .semi-navigation-header-collapsed{padding-left:3.5px;padding-right:0;transition:padding-left .1s ease-out,width .2s cubic-bezier(.62,.05,.36,.95)}.semi-navigation-vertical .semi-navigation-footer{color:var(--semi-color-text-1);padding-left:8px;padding-right:8px}.semi-navigation-vertical .semi-navigation-footer .semi-navigation-collapse-btn .semi-button-content-right{margin-left:12px;opacity:1;transition:opacity .2s cubic-bezier(.5,-.1,1,.4)}.semi-navigation-vertical .semi-navigation-footer .semi-navigation-collapse-btn>.semi-button{padding-left:8px;padding-right:8px;color:var(--semi-color-text-1)}.semi-navigation-vertical .semi-navigation-footer-collapsed{justify-content:center}.semi-navigation-vertical .semi-navigation-footer-collapsed .semi-navigation-collapse-btn{width:100%}.semi-navigation-vertical .semi-navigation-footer-collapsed .semi-navigation-collapse-btn .semi-button-content-right{opacity:0;transition:opacity .2s cubic-bezier(.5,-.1,1,.4)}.semi-navigation-horizontal{width:100%;height:60px;border-right:none;border-bottom:1px solid var(--semi-color-border);padding-left:24px;padding-right:24px}.semi-navigation-horizontal .semi-navigation-inner{flex-direction:row}.semi-navigation-horizontal .semi-navigation-header-list-outer{display:inline-flex;align-items:center}.semi-navigation-horizontal .semi-navigation-header-list-outer-collapsed{align-items:baseline}.semi-navigation-horizontal .semi-navigation-header{width:inherit;margin-right:24px}.semi-navigation-horizontal .semi-navigation-list{display:inline-flex;align-items:center}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item{margin-bottom:0;color:var(--semi-color-text-2);background-color:#0000}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item .semi-navigation-item-icon:first-child{color:var(--semi-color-text-2)}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-selected{color:var(--semi-color-text-0);background-color:#0000}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-selected .semi-navigation-item-icon:first-child{color:var(--semi-color-text-0)}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-disabled{color:var(--semi-color-disabled-text);background-color:#0000;cursor:not-allowed}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-disabled .semi-navigation-item-icon,.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-disabled .semi-navigation-item-icon:first-child{color:var(--semi-color-disabled-text)}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-normal:hover:not(.semi-navigation-item-selected){color:var(--semi-color-text-1);background-color:#0000}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-normal:hover:not(.semi-navigation-item-selected) .semi-navigation-item-icon:first-child{color:var(--semi-color-text-1)}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-normal:hover:not(.semi-navigation-item-selected) .semi-navigation-item-text{color:var(--semi-color-text-1);background-color:#0000}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-normal:active:not(.semi-navigation-item-selected){color:var(--semi-color-text-0);background-color:#0000}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-normal:active:not(.semi-navigation-item-selected) .semi-navigation-item-icon:first-child{color:var(--semi-color-text-0)}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-normal:hover.semi-navigation-item-disabled,.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-normal:active.semi-navigation-item-disabled{color:var(--semi-color-disabled-text);background-color:#0000;cursor:not-allowed}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-normal:hover.semi-navigation-item-disabled .semi-navigation-item-icon,.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-normal:hover.semi-navigation-item-disabled .semi-navigation-item-icon:first-child,.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-normal:active.semi-navigation-item-disabled .semi-navigation-item-icon,.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-normal:active.semi-navigation-item-disabled .semi-navigation-item-icon:first-child{color:var(--semi-color-disabled-text)}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-normal:hover.semi-navigation-item-disabled .semi-navigation-item-text,.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item-normal:active.semi-navigation-item-disabled .semi-navigation-item-text{color:var(--semi-color-disabled-text);background-color:#0000}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-item:not(:last-of-type){margin-right:8px}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-sub-title .semi-navigation-item-text{color:var(--semi-color-text-2);background-color:#0000}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-sub-title-selected .semi-navigation-item-icon:first-child,.semi-navigation-horizontal .semi-navigation-list .semi-navigation-sub-title-selected .semi-navigation-item-text{color:var(--semi-color-text-0);background-color:#0000}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-sub-title-disabled{cursor:not-allowed}.semi-navigation-horizontal .semi-navigation-list .semi-navigation-sub-title-disabled .semi-navigation-item-icon:first-child,.semi-navigation-horizontal .semi-navigation-list .semi-navigation-sub-title-disabled .semi-navigation-item-text{color:var(--semi-color-disabled-text);background-color:#0000}.semi-navigation-horizontal .semi-navigation-item-inner{width:auto}.semi-navigation-horizontal .semi-navigation-item-icon:last-child{margin-left:8px}.semi-navigation-horizontal .semi-navigation-item-icon:first-child{margin-right:8px}.semi-navigation-horizontal .semi-navigation-item{width:auto}.semi-navigation-horizontal .semi-navigation-item-collapsed{word-wrap:none;text-overflow:ellipsis}.semi-navigation-horizontal .semi-navigation-footer{border-top:none;padding-right:0}.semi-navigation-horizontal .semi-navigation-footer-collapsed{justify-content:center;flex-direction:row;align-items:center}.semi-navigation-popover .semi-navigation-sub-title{width:100%}.semi-navigation-popover .semi-navigation-item-selected{font-weight:400}.semi-dropdown-item .semi-navigation-sub-title{box-sizing:border-box;padding:8px 12px;width:100%}.semi-dropdown-item.semi-navigation-item{margin-top:0;margin-bottom:0;min-width:150px}.semi-dropdown-menu .semi-navigation-item-sub{padding:0}.semi-rtl .semi-navigation,.semi-portal-rtl .semi-navigation{direction:rtl;border-right:0;border-left:1px solid var(--semi-color-border);transition:padding-right .1s ease-out,width .2s cubic-bezier(.62,.05,.36,.95)}.semi-rtl .semi-navigation-collapsed,.semi-portal-rtl .semi-navigation-collapsed{transition:padding-right .1s ease-out,width .2s cubic-bezier(.62,.05,.36,.95)}.semi-rtl .semi-navigation-item-icon:first-child,.semi-portal-rtl .semi-navigation-item-icon:first-child{margin-right:0;margin-left:12px}.semi-rtl .semi-navigation-item-icon:last-child,.semi-portal-rtl .semi-navigation-item-icon:last-child{margin-left:0;margin-right:auto}.semi-rtl .semi-navigation-sub .semi-navigation-item>.semi-rtl .semi-navigation-sub .semi-navigation-item-text:first-child,.semi-rtl .semi-navigation-sub .semi-navigation-item>.semi-portal-rtl .semi-navigation-sub .semi-navigation-item-text:first-child,.semi-portal-rtl .semi-navigation-sub .semi-navigation-item>.semi-rtl .semi-navigation-sub .semi-navigation-item-text:first-child,.semi-portal-rtl .semi-navigation-sub .semi-navigation-item>.semi-portal-rtl .semi-navigation-sub .semi-navigation-item-text:first-child{margin-left:auto;margin-right:44px}.semi-rtl .semi-navigation-sub .semi-navigation-item>.semi-navigation-item-icon:first-child,.semi-portal-rtl .semi-navigation-sub .semi-navigation-item>.semi-navigation-item-icon:first-child{margin-right:12px}.semi-rtl .semi-navigation-header,.semi-portal-rtl .semi-navigation-header{display:inline-flex;align-items:center;box-sizing:border-box}.semi-rtl .semi-navigation-header-logo,.semi-portal-rtl .semi-navigation-header-logo{margin-left:8px;margin-right:0;display:inline-flex}.semi-rtl .semi-navigation-collapsed,.semi-portal-rtl .semi-navigation-collapsed{direction:rtl}.semi-rtl .semi-navigation-collapsed .semi-navigation-header .semi-navigation-header-logo,.semi-portal-rtl .semi-navigation-collapsed .semi-navigation-header .semi-navigation-header-logo{margin-right:auto;margin-left:0}.semi-rtl .semi-navigation-vertical,.semi-portal-rtl .semi-navigation-vertical{direction:rtl}.semi-rtl .semi-navigation-vertical .semi-navigation-header,.semi-portal-rtl .semi-navigation-vertical .semi-navigation-header{padding-right:3.5px;padding-left:8px}.semi-rtl .semi-navigation-vertical .semi-navigation-header-collapsed,.semi-portal-rtl .semi-navigation-vertical .semi-navigation-header-collapsed{padding-right:3.5px;padding-left:0;transition:padding-right .1s ease-out,width .2s cubic-bezier(.62,.05,.36,.95)}.semi-rtl .semi-navigation-vertical .semi-navigation-footer .semi-navigation-collapse-btn .semi-button-content-right,.semi-portal-rtl .semi-navigation-vertical .semi-navigation-footer .semi-navigation-collapse-btn .semi-button-content-right{margin-left:auto;margin-right:12px;transition:opacity .2s cubic-bezier(.5,-.1,1,.4)}.semi-rtl .semi-navigation-horizontal,.semi-portal-rtl .semi-navigation-horizontal{direction:rtl;border-right:auto;border-left:none;padding-left:24px;padding-right:24px}.semi-rtl .semi-navigation-horizontal .semi-navigation-header,.semi-portal-rtl .semi-navigation-horizontal .semi-navigation-header{margin-right:auto;margin-left:24px}.semi-rtl .semi-navigation-horizontal .semi-navigation-list .semi-navigation-item:not(:last-of-type),.semi-portal-rtl .semi-navigation-horizontal .semi-navigation-list .semi-navigation-item:not(:last-of-type){margin-right:auto;margin-left:8px}.semi-rtl .semi-navigation-horizontal .semi-navigation-item-icon:last-child,.semi-portal-rtl .semi-navigation-horizontal .semi-navigation-item-icon:last-child{margin-left:auto;margin-right:8px}.semi-rtl .semi-navigation-horizontal .semi-navigation-item-icon:first-child,.semi-portal-rtl .semi-navigation-horizontal .semi-navigation-item-icon:first-child{margin-right:auto;margin-left:8px}.semi-rtl .semi-navigation-horizontal .semi-navigation-footer,.semi-portal-rtl .semi-navigation-horizontal .semi-navigation-footer{padding-right:auto;padding-left:0}.semi-notification-wrapper{position:fixed}.semi-notification-list{position:fixed;box-sizing:border-box;margin:0;padding:0;z-index:1010;pointer-events:none}.semi-notification-list[placement=topRight]{right:0;top:0}.semi-notification-list[placement=top]{top:0;left:50%;transform:translate(-50%)}.semi-notification-list[placement=topLeft]{left:0;top:0}.semi-notification-list[placement=bottom]{bottom:0;left:50%;transform:translate(-50%)}.semi-notification-list[placement=bottomRight]{bottom:0;right:0}.semi-notification-list[placement=bottomLeft]{bottom:0;left:0}.semi-notification-notice{box-shadow:var(--semi-shadow-elevated);border-radius:var(--semi-border-radius-medium);padding:16px 12px 16px 20px;margin:20px;width:auto;min-width:320px;background-color:var(--semi-color-bg-3);position:relative;display:flex;pointer-events:auto}.semi-notification-notice-icon{width:24px;font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;display:flex;align-items:flex-start;justify-content:flex-start;height:100%;margin-right:12px}.semi-notification-notice-info{color:var(--semi-color-info)}.semi-notification-notice-warning{color:var(--semi-color-warning)}.semi-notification-notice-error{color:var(--semi-color-danger)}.semi-notification-notice-success{color:var(--semi-color-success)}.semi-notification-notice-light.semi-notification-notice-warning{background-image:linear-gradient(0deg,var(--semi-color-warning-light-default),var(--semi-color-warning-light-default));background-color:var(--semi-color-bg-0);border:1px solid var(--semi-color-warning)}.semi-notification-notice-light.semi-notification-notice-success{background-image:linear-gradient(0deg,var(--semi-color-success-light-default),var(--semi-color-success-light-default));background-color:var(--semi-color-bg-0);border:1px solid var(--semi-color-success)}.semi-notification-notice-light.semi-notification-notice-info,.semi-notification-notice-light.semi-notification-notice-default{background-image:linear-gradient(0deg,var(--semi-color-info-light-default),var(--semi-color-info-light-default));background-color:var(--semi-color-bg-0);border:1px solid var(--semi-color-info)}.semi-notification-notice-light.semi-notification-notice-error{background-image:linear-gradient(0deg,var(--semi-color-danger-light-default),var(--semi-color-danger-light-default));background-color:var(--semi-color-bg-0);border:1px solid var(--semi-color-danger)}.semi-notification-notice-title{font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;color:var(--semi-color-text-0);margin-bottom:4px;word-wrap:break-word;overflow-wrap:break-word}.semi-notification-notice-inner{display:flex;width:100%;min-width:0}.semi-notification-notice-content-wrapper{flex:1 1 auto;margin-right:8px;min-width:0}.semi-notification-notice-content{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;color:var(--semi-color-text-1);word-wrap:break-word;overflow-wrap:break-word}.semi-notification-notice-icon-close{height:24px}.semi-notification-notice-icon-close .semi-icon-close{color:var(--semi-color-text-2)}.semi-notification-notice-controls{display:flex;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer}.semi-notification-notice-detail,.semi-notification-notice-later{text-align:center;flex-grow:1}@keyframes semi-notification-slideShow_top{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}@keyframes semi-notification-slideHide_top{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-100%)}}@keyframes semi-notification-slideShow_topLeft{0%{opacity:0;transform:translate(-100%)}to{opacity:1;transform:translate(0)}}@keyframes semi-notification-slideHide_topLeft{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-100%)}}@keyframes semi-notification-slideShow_topRight{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@keyframes semi-notification-slideHide_topRight{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}@keyframes semi-notification-slideShow_bottom{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes semi-notification-slideHide_bottom{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(100%)}}@keyframes semi-notification-slideShow_bottomLeft{0%{opacity:0;transform:translate(-100%)}to{opacity:1;transform:translate(0)}}@keyframes semi-notification-slideHide_bottomLeft{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-100%)}}@keyframes semi-notification-slideShow_bottomRight{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@keyframes semi-notification-slideHide_bottomRight{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}.semi-notification-notice-animation-show_top{animation:semi-notification-slideShow_top .3s cubic-bezier(.62,.63,0,1.13) 0ms;animation-fill-mode:forwards}.semi-notification-notice-animation-hide_top{animation:semi-notification-slideHide_top .3s cubic-bezier(.62,.63,0,1.13) 0ms;animation-fill-mode:forwards}.semi-notification-notice-animation-show_topLeft{animation:semi-notification-slideShow_topLeft .3s cubic-bezier(.62,.63,0,1.13) 0ms;animation-fill-mode:forwards}.semi-notification-notice-animation-hide_topLeft{animation:semi-notification-slideHide_topLeft .3s cubic-bezier(.62,.63,0,1.13) 0ms;animation-fill-mode:forwards}.semi-notification-notice-animation-show_topRight{animation:semi-notification-slideShow_topRight .3s cubic-bezier(.62,.63,0,1.13) 0ms;animation-fill-mode:forwards}.semi-notification-notice-animation-hide_topRight{animation:semi-notification-slideHide_topRight .3s cubic-bezier(.62,.63,0,1.13) 0ms;animation-fill-mode:forwards}.semi-notification-notice-animation-show_bottom{animation:semi-notification-slideShow_bottom .3s cubic-bezier(.62,.63,0,1.13) 0ms;animation-fill-mode:forwards}.semi-notification-notice-animation-hide_bottom{animation:semi-notification-slideHide_bottom .3s cubic-bezier(.62,.63,0,1.13) 0ms;animation-fill-mode:forwards}.semi-notification-notice-animation-show_bottomLeft{animation:semi-notification-slideShow_bottomLeft .3s cubic-bezier(.62,.63,0,1.13) 0ms;animation-fill-mode:forwards}.semi-notification-notice-animation-hide_bottomLeft{animation:semi-notification-slideHide_bottomLeft .3s cubic-bezier(.62,.63,0,1.13) 0ms;animation-fill-mode:forwards}.semi-notification-notice-animation-show_bottomRight{animation:semi-notification-slideShow_bottomRight .3s cubic-bezier(.62,.63,0,1.13) 0ms;animation-fill-mode:forwards}.semi-notification-notice-animation-hide_bottomRight{animation:semi-notification-slideHide_bottomRight .3s cubic-bezier(.62,.63,0,1.13) 0ms;animation-fill-mode:forwards}.semi-notification-notice.semi-notification-notice-rtl{padding-right:20px;padding-left:12px}.semi-notification-notice-rtl{direction:rtl}.semi-notification-notice-rtl .semi-notification-notice-icon{margin-right:12px}.semi-notification-notice-rtl .semi-notification-notice-content-wrapper{margin-right:8px}.semi-overflow-list{display:flex;flex-wrap:nowrap;min-width:0}.semi-overflow-list-spacer{flex-shrink:1;width:1px}.semi-overflow-list-scroll-wrapper{display:flex;flex:1;flex-wrap:nowrap;overflow-x:scroll}.semi-rtl .semi-overflow-list,.semi-portal-rtl .semi-overflow-list{direction:rtl}.semi-page{display:flex;list-style:none;padding:0;align-items:center;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;margin-block-start:0;margin-block-end:0}.semi-page-small{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;color:var(--semi-color-text-2);padding:0}.semi-page-disabled{cursor:not-allowed}.semi-page-disabled .semi-page-total{color:var(--semi-color-disabled-text)}.semi-page-item{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;min-width:32px;border:0px solid rgba(0,0,0,0);cursor:pointer;-webkit-user-select:none;user-select:none;height:32px;margin-left:4px;margin-right:4px;font-weight:400;color:var(--semi-color-text-0);border-radius:var(--semi-border-radius-small);text-align:center;line-height:32px;display:flex;align-items:center;justify-content:center;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-page-item:hover{border-color:#0000;background-color:var(--semi-color-fill-0);color:var(--semi-color-text-0)}.semi-page-item-rest-opening{background-color:var(--semi-color-fill-0);color:var(--semi-color-text-0)}.semi-page-item:active{border-color:#0000;background-color:var(--semi-color-fill-1);color:var(--semi-color-text-0)}.semi-page-item-active{border-color:#0000;color:var(--semi-color-primary);font-weight:600;background-color:var(--semi-color-primary-light-default)}.semi-page-item-active:hover{border-color:#0000;color:var(--semi-color-primary);background-color:var(--semi-color-primary-light-default)}.semi-page-item-disabled{border-color:#0000;color:var(--semi-color-disabled-text);background-color:#0000;cursor:not-allowed}.semi-page-item-disabled:hover{background-color:#0000}.semi-page-item-small{min-width:44px;margin:0}.semi-page-item-all-disabled{border-color:#0000;color:var(--semi-color-disabled-text);background-color:#0000;cursor:not-allowed}.semi-page-item-all-disabled:hover{background-color:#0000;color:var(--semi-color-disabled-text)}.semi-page-item-all-disabled-active{background-color:var(--semi-color-disabled-fill);font-weight:600}.semi-page-item-all-disabled-active:hover{background-color:var(--semi-color-disabled-fill)}.semi-page-total{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2)}.semi-page-prev,.semi-page-next{color:var(--semi-color-tertiary);cursor:pointer}.semi-page-prev.semi-page-item-disabled,.semi-page-next.semi-page-item-disabled{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-page-quickjump{margin-left:24px;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;display:flex;justify-content:center;align-items:center;flex-shrink:0;color:var(--semi-color-text-0)}.semi-page-quickjump-input-number{max-width:50px;margin-left:4px;margin-right:4px}.semi-page-quickjump-disabled{color:var(--semi-color-disabled-text)}.semi-page .semi-select,.semi-select-dropdown{-webkit-user-select:none;user-select:none}.semi-page-rest-list{padding-top:4px;padding-bottom:4px}.semi-page-rest-list>div{position:relative}.semi-page-rest-item{height:32px;line-height:32px;display:flex;justify-content:center;box-sizing:border-box;cursor:pointer}.semi-page-rest-item:hover{background-color:var(--semi-color-fill-0)}.semi-page-rest-item:active{background-color:var(--semi-color-fill-1)}.semi-rtl .semi-page,.semi-portal-rtl .semi-page{direction:rtl}.semi-rtl .semi-page-item,.semi-portal-rtl .semi-page-item{margin-right:4px;margin-left:4px}.semi-rtl .semi-page-prev,.semi-rtl .semi-page-next,.semi-portal-rtl .semi-page-prev,.semi-portal-rtl .semi-page-next{transform:scaleX(-1)}.semi-pincode-wrapper{display:flex}.semi-pincode-wrapper .semi-input-wrapper-small{width:24px;margin-right:6px}.semi-pincode-wrapper .semi-input-wrapper-small:last-child{margin-right:0}.semi-pincode-wrapper .semi-input-wrapper-default{width:32px;margin-right:8px}.semi-pincode-wrapper .semi-input-wrapper-default:last-child{margin-right:0}.semi-pincode-wrapper .semi-input-wrapper-large{width:42px;margin-right:12px}.semi-pincode-wrapper .semi-input-wrapper-large:last-child{margin-right:0}.semi-pincode-wrapper .semi-input-wrapper input{padding:0;text-align:center}.semi-popconfirm{box-sizing:border-box;max-width:400px}.semi-popconfirm-inner{display:flex;flex-direction:column;padding:24px 24px 24px 20px;position:relative}.semi-popconfirm-header{display:flex;justify-content:flex-start}.semi-popconfirm-header-title{font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;margin-bottom:8px;color:var(--semi-color-text-0)}.semi-popconfirm-header-icon{width:24px;height:24px;margin-right:12px}.semi-popconfirm-header .semi-icon-alert_triangle{color:var(--semi-color-warning)}.semi-popconfirm-header-body{display:inline-flex;flex-grow:1;flex-direction:column}.semi-popconfirm-body{color:var(--semi-color-text-2)}.semi-popconfirm-body-withIcon{margin-left:36px}.semi-popconfirm-body>p{margin:0;padding:0}.semi-popconfirm-footer{margin-top:25px;display:flex;justify-content:flex-end}.semi-popconfirm-footer>.semi-button:first-child:not(:last-child){margin-right:8px}.semi-popconfirm-popover{border-radius:var(--semi-border-radius-medium)}.semi-popover-with-arrow .semi-popconfirm-inner{padding:12px 12px 12px 8px}.semi-popconfirm-rtl{direction:rtl}.semi-popconfirm-rtl .semi-popconfirm-inner{padding:24px 20px 24px 24px}.semi-popconfirm-rtl .semi-popconfirm-header{margin-right:0}.semi-popconfirm-rtl .semi-popconfirm-header-icon{margin-right:0;margin-left:12px}.semi-popconfirm-rtl .semi-popconfirm-footer{justify-content:flex-end}.semi-popconfirm-rtl .semi-popconfirm-footer>.semi-button:first-child:not(:last-child){margin-right:0;margin-left:8px}.semi-popover-with-arrow.semi-popconfirm-rtl{direction:rtl}.semi-popover-with-arrow.semi-popconfirm-rtl .semi-popconfirm-inner{padding:12px 8px 12px 12px}.semi-progress{display:flex;align-items:center}.semi-progress-track{background-color:var(--semi-color-fill-0);border-radius:var(--semi-border-radius-small)}.semi-progress-horizontal{height:4px;margin-top:4px;margin-bottom:4px}.semi-progress-horizontal.semi-progress-large{height:6px}.semi-progress-horizontal .semi-progress-track{height:100%;width:100%}.semi-progress-horizontal .semi-progress-track-inner{height:100%;background-color:var(--semi-color-success);border-radius:var(--semi-border-radius-small);transition:width .3s;transition-timing-function:cubic-bezier(.62,.05,.36,.95)}.semi-progress-horizontal .semi-progress-line-text{min-width:45px;font-weight:600;margin-left:16px;color:var(--semi-color-text-0)}.semi-progress-vertical{width:4px;display:inline-flex;height:100%;margin-left:4px;margin-right:4px;flex-direction:column}.semi-progress-vertical.semi-progress-large{width:6px}.semi-progress-vertical .semi-progress-track{height:100%;width:100%}.semi-progress-vertical .semi-progress-track-inner{background-color:var(--semi-color-success);border-radius:var(--semi-border-radius-small);width:100%;transition:height .3s;transition-timing-function:cubic-bezier(.62,.05,.36,.95)}.semi-progress-vertical .semi-progress-line-text{font-weight:600;margin-top:8px}.semi-progress-circle{position:relative;display:inline-block}.semi-progress-circle-ring{display:block}.semi-progress-circle-ring-track{stroke:var(--semi-color-fill-0)}.semi-progress-circle-ring-inner{transition:stroke-dashoffset .3s;transition-timing-function:cubic-bezier(.62,.05,.36,.95);transform:rotate(-90deg);transform-origin:50% 50%;stroke:var(--semi-color-success)}.semi-progress-circle-text{position:absolute;top:50%;left:50%;width:100%;text-align:center;transform:translate(-50%,-50%);-webkit-user-select:none;user-select:none;color:var(--semi-color-mode-minor-text)}.semi-rtl .semi-progress,.semi-portal-rtl .semi-progress{direction:rtl}.semi-rtl .semi-progress-horizontal .semi-progress-line-text,.semi-portal-rtl .semi-progress-horizontal .semi-progress-line-text{margin-left:0;margin-right:16px}.semi-rtl .semi-progress-circle-ring-inner,.semi-portal-rtl .semi-progress-circle-ring-inner{transform:rotate(-90deg);transform-origin:50% 50%}.semi-rtl .semi-progress-circle-text,.semi-portal-rtl .semi-progress-circle-text{left:auto;right:50%;transform:translate(50%,-50%)}.semi-radio{box-sizing:border-box;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;position:relative;display:inline-flex;column-gap:8px;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);min-height:20px;min-width:16px;cursor:pointer;vertical-align:bottom;text-align:left}.semi-radio.semi-radio-vertical{display:block}.semi-radio input[type=checkbox],.semi-radio input[type=radio]{position:absolute;left:0;top:0;opacity:0;width:100%;height:100%;margin:0;cursor:pointer}.semi-radio:hover .semi-radio-inner-display{background:var(--semi-color-fill-0);border:solid 1px var(--semi-color-focus-border)}.semi-radio:hover.semi-radio-cardRadioGroup .semi-radio-inner-display{background:var(--semi-color-white)}.semi-radio:hover .semi-radio-inner-checked .semi-radio-inner-display{background:var(--semi-color-primary-hover);border-color:var(--semi-color-primary-hover)}.semi-radio:active.semi-radio-cardRadioGroup .semi-radio-inner-display{background:var(--semi-color-white)}.semi-radio:active .semi-radio-inner-checked .semi-radio-inner-display{background:var(--semi-color-primary-active);border-color:var(--semi-color-primary-active)}.semi-radio-buttonRadioComponent{padding:4px;background:var(--semi-color-fill-0);border-radius:var(--semi-border-radius-small)}.semi-radio-buttonRadioGroup{position:relative;padding:4px;border-radius:var(--semi-border-radius-small);line-height:16px}.semi-radio-buttonRadioGroup:not(:last-child){padding-right:0}.semi-radio-buttonRadioGroup-small{padding:2px 4px;line-height:16px}.semi-radio-buttonRadioGroup-large{padding:4px;line-height:20px}.semi-radio-cardRadioGroup{flex-wrap:nowrap;border-radius:var(--semi-border-radius-small);padding:12px 16px;background:#0000;border:1px solid rgba(0,0,0,0);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-radio-cardRadioGroup .semi-radio-inner{flex-shrink:0}.semi-radio-cardRadioGroup .semi-radio-inner-display{background:var(--semi-color-white)}.semi-radio-cardRadioGroup .semi-radio-addon{font-weight:600;font-size:14px;line-height:20px;color:var(--semi-color-text-0)}.semi-radio-cardRadioGroup .semi-radio-extra{font-weight:400;font-size:14px;line-height:20px;color:var(--semi-color-text-2);padding-left:0}.semi-radio-cardRadioGroup:active{background:var(--semi-color-fill-1)}.semi-radio-cardRadioGroup_checked{background:var(--semi-color-primary-light-default);border:1px solid var(--semi-color-primary)}.semi-radio-cardRadioGroup_checked:hover{border:1px solid var(--semi-color-primary-hover)}.semi-radio-cardRadioGroup_checked:hover .semi-radio-inner-checked .semi-radio-inner-display{border-color:var(--semi-color-primary-hover)}.semi-radio-cardRadioGroup_checked:active{background:var(--semi-color-primary-light-default);border:1px solid var(--semi-color-primary-active)}.semi-radio-cardRadioGroup_checked:active .semi-radio-inner-checked .semi-radio-inner-display{border-color:var(--semi-color-primary-active)}.semi-radio-cardRadioGroup_checked:active .semi-radio-inner-checked:hover .semi-radio-inner-display{background:var(--semi-color-primary-active)}.semi-radio-cardRadioGroup_hover{background:var(--semi-color-fill-0)}.semi-radio-cardRadioGroup_disabled:active{background:#0000}.semi-radio-cardRadioGroup_checked_disabled.semi-radio-cardRadioGroup{background:var(--semi-color-primary-light-default);border:1px solid var(--semi-color-primary-disabled)}.semi-radio-cardRadioGroup_checked_disabled.semi-radio-cardRadioGroup .semi-radio-inner-checked .semi-radio-inner-display,.semi-radio-cardRadioGroup_checked_disabled.semi-radio-cardRadioGroup:hover .semi-radio-inner-checked .semi-radio-inner-display{border-color:var(--semi-color-primary-disabled)}.semi-radio.semi-radio-disabled:hover .semi-radio-inner-display,.semi-radio.semi-radio-disabled:active .semi-radio-inner-display{background:var(--semi-color-disabled-fill);border:solid 1px var(--semi-color-border)}.semi-radio.semi-radio-disabled:hover .semi-radio-inner-checked .semi-radio-inner-display,.semi-radio.semi-radio-disabled:active .semi-radio-inner-checked .semi-radio-inner-display{color:rgba(var(--semi-white),1);background:var(--semi-color-primary-disabled);border-color:var(--semi-color-primary-disabled)}.semi-radio-inner{display:inline-flex;margin-top:2px;position:relative;width:16px;height:16px;vertical-align:sub;-webkit-user-select:none;user-select:none}.semi-radio-inner-display{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:16px;height:16px;border:solid 1px var(--semi-color-text-3);border-radius:16px;background:#0000;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-radio-inner-display .semi-icon{width:100%;height:100%;font-size:14px}.semi-radio-content{display:flex;flex-direction:column;row-gap:4px}.semi-radio:hover .semi-radio-inner-display{background:var(--semi-color-fill-0)}.semi-radio:active .semi-radio-inner-display{background:var(--semi-color-fill-1)}.semi-radio-addon{-webkit-user-select:none;user-select:none;color:var(--semi-color-text-0);display:inline-flex;align-items:center}.semi-radio-addon-buttonRadio{text-align:center;border-radius:var(--semi-border-radius-small);font-weight:600;color:var(--semi-color-text-1);font-size:12px;padding:4px 16px;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-radio-addon-buttonRadio-hover{font-weight:600;background:var(--semi-color-fill-1)}.semi-radio-addon-buttonRadio-checked{font-weight:600;background:var(--semi-color-bg-3);color:var(--semi-color-primary)}.semi-radio-addon-buttonRadio-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text)}.semi-radio-addon-buttonRadio-small{font-size:12px;padding:2px 16px}.semi-radio-addon-buttonRadio-large{font-size:14px;padding:6px 24px}.semi-radio .semi-radio-inner-checked:hover .semi-radio-inner-display{background:var(--semi-color-primary-hover)}.semi-radio .semi-radio-inner-checked:active .semi-radio-inner-display{background:var(--semi-color-primary-active)}.semi-radio .semi-radio-inner-checked .semi-radio-inner-display{border:solid 1px var(--semi-color-primary);background:var(--semi-color-primary);color:rgba(var(--semi-white),1);border-radius:16px}.semi-radio .semi-radio-inner-checked>.semi-radio-addon{color:var(--semi-color-text-0)}.semi-radio .semi-radio-inner-buttonRadio,.semi-radio .semi-radio-inner-pureCardRadio{position:absolute;top:0;left:0;width:100%;height:100%;margin-top:0;z-index:-1;opacity:0}.semi-radio-disabled,.semi-radio-disabled:hover,.semi-radio-disabled .semi-radio-inner{cursor:not-allowed}.semi-radio-disabled .semi-radio-inner-display{opacity:.75;background:var(--semi-color-disabled-fill);border-color:var(--semi-color-border)}.semi-radio-disabled .semi-radio-inner-display:hover{background:#0000}.semi-radio-disabled .semi-radio-inner-checked .semi-radio-inner-display,.semi-radio-disabled .semi-radio-inner-checked .semi-radio-inner-display:hover{color:rgba(var(--semi-white),1);background:var(--semi-color-primary-disabled);border-color:var(--semi-color-primary-disabled)}.semi-radio-disabled .semi-radio-addon,.semi-radio-disabled .semi-radio-extra{color:var(--semi-color-disabled-text)}.semi-radio-extra{color:var(--semi-color-text-2);box-sizing:border-box}.semi-radio-focus{outline:2px solid var(--semi-color-primary-light-active)}.semi-radio-focus-border{border:solid 1px var(--semi-color-focus-border)}.semi-radioGroup{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-radioGroup-vertical{display:flex;flex-direction:column;row-gap:12px}.semi-radioGroup-vertical-default .semi-radio,.semi-radioGroup-vertical-card .semi-radio{display:flex}.semi-radioGroup-horizontal{display:inline-flex;flex-wrap:wrap;vertical-align:bottom;gap:16px}.semi-radioGroup-buttonRadio{display:inline-block;background:var(--semi-color-fill-0);border-radius:var(--semi-border-radius-small);vertical-align:middle}.semi-rtl .semi-radio,.semi-portal-rtl .semi-radio{direction:rtl}.semi-rtl .semi-radio input[type=checkbox],.semi-rtl .semi-radio input[type=radio],.semi-portal-rtl .semi-radio input[type=checkbox],.semi-portal-rtl .semi-radio input[type=radio]{left:auto;right:0}.semi-rtl .semi-radio-buttonRadioGroup:not(:last-child),.semi-portal-rtl .semi-radio-buttonRadioGroup:not(:last-child){padding-left:0}.semi-rtl .semi-radioGroup,.semi-portal-rtl .semi-radioGroup{direction:rtl}.semi-rating{display:inline-block;margin:0;padding:0;color:rgba(var(--semi-yellow-5),1);list-style:none;outline:none;border-radius:3px}.semi-rating-focus{outline:2px solid var(--semi-color-primary-light-active)}.semi-rating-no-focus{outline:none}.semi-rating-disabled .semi-rating-star{cursor:default}.semi-rating-disabled .semi-rating-star:hover{transform:scale(1)}.semi-rating-star{position:relative;display:inline-block;margin:0;padding:0;color:inherit;cursor:pointer;transition:all .5s;transform:scale(var(--semi-transform_scale-none))}.semi-rating-star:not(:last-child){margin-right:6px}.semi-rating-star>div:hover,.semi-rating-star>div:focus{transform:scale(1.1)}.semi-rating-star>div.semi-rating-star-disabled{transform:none}.semi-rating-star-small{width:16px;height:16px;font-size:16px}.semi-rating-star-default{width:24px;height:24px;font-size:24px}.semi-rating-star-outer{display:inline-flex;width:fit-content;height:fit-content}.semi-rating-star-wrapper{position:relative;overflow:hidden;border-radius:3px;width:100%;height:100%}.semi-rating-star-first,.semi-rating-star-second{transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);color:var(--semi-color-fill-0);-webkit-user-select:none;user-select:none}.semi-rating-star-first{position:absolute;top:0;left:0;width:50%;height:100%;overflow:hidden;opacity:0}.semi-rating-star-half .semi-rating-star-first,.semi-rating-star-half .semi-rating-star-second{opacity:1}.semi-rating-star-half .semi-rating-star-first,.semi-rating-star-full .semi-rating-star-second{color:inherit}.semi-rtl .semi-rating,.semi-portal-rtl .semi-rating{direction:rtl}.semi-rtl .semi-rating-star:not(:last-child),.semi-portal-rtl .semi-rating-star:not(:last-child){margin-right:0;margin-left:6px}.semi-rtl .semi-rating-star-first,.semi-portal-rtl .semi-rating-star-first{left:auto;right:0}.semi-resizable-resizable{position:relative;box-sizing:border-box;flex-shrink:0}.semi-resizable-resizableHandler{position:absolute;-webkit-user-select:none;user-select:none;z-index:10}.semi-resizable-resizableHandler-top{width:100%;height:10px;left:0;cursor:row-resize;top:-5px}.semi-resizable-resizableHandler-right{width:10px;height:100%;top:0;cursor:col-resize;left:auto;right:-5px}.semi-resizable-resizableHandler-bottom{width:100%;height:10px;left:0;cursor:row-resize;top:auto;bottom:-5px}.semi-resizable-resizableHandler-left{width:10px;height:100%;top:0;cursor:col-resize;left:-5px}.semi-resizable-resizableHandler-topRight{width:20px;height:20px;position:absolute;right:-10px;top:-10px;cursor:ne-resize}.semi-resizable-resizableHandler-bottomRight{width:20px;height:20px;position:absolute;right:-10px;bottom:-10px;cursor:se-resize}.semi-resizable-resizableHandler-bottomLeft{width:20px;height:20px;position:absolute;left:-10px;bottom:-10px;cursor:sw-resize}.semi-resizable-resizableHandler-topLeft{width:20px;height:20px;position:absolute;left:-10px;top:-10px;cursor:nw-resize}.semi-resizable-group{display:flex;position:relative;box-sizing:border-box;height:100%;width:100%}.semi-resizable-item{position:relative;box-sizing:border-box;flex-shrink:0}.semi-resizable-handler{-webkit-user-select:none;user-select:none;z-index:10;display:flex;align-items:center;justify-content:center;background-color:var(--semi-color-fill-0);opacity:1}.semi-resizable-handler-vertical{width:100%;height:10px;flex-shrink:0;cursor:row-resize}.semi-resizable-handler-horizontal{height:100%;width:10px;flex-shrink:0;cursor:col-resize}.semi-resizable-background{height:100%;width:100%;top:0;right:0;bottom:0;left:0;z-index:20;opacity:0;position:fixed}.semi-scrolllist{width:100%;height:100%;background:var(--semi-color-bg-3);box-shadow:0 0 1px #0000004d,0 4px 14px #0000001a;border-radius:var(--semi-border-radius-medium);overflow:hidden;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;-webkit-user-select:none;user-select:none;display:flex;flex-direction:column}.semi-scrolllist-header{text-align:center;padding:0 16px;background:#0000}.semi-scrolllist-header-title{padding:16px 0;font-weight:600;color:var(--semi-color-text-0);font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-scrolllist-body{display:flex;height:300px;padding:0 16px;overflow:hidden}.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer-nocycle>ul:before,.semi-scrolllist-body .semi-scrolllist-item>ul:before{content:"";display:block;width:100%;height:132px}.semi-scrolllist-body .semi-scrolllist-item{position:relative;flex:1;overflow-x:hidden;overflow-y:auto}.semi-scrolllist-body .semi-scrolllist-item:not(:last-child){border-right:1px solid var(--semi-color-border)}.semi-scrolllist-body .semi-scrolllist-item>ul,.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul{box-sizing:border-box;width:100%;margin:0;padding:0 0 132px;list-style:none}.semi-scrolllist-body .semi-scrolllist-item>ul>li,.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li{list-style:none;height:36px;box-sizing:border-box;color:var(--semi-color-text-0);text-align:center;display:flex;align-items:center;justify-content:center;cursor:pointer;background-color:#0000;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeOut) 0ms}.semi-scrolllist-body .semi-scrolllist-item>ul>li.semi-scrolllist-item-sel,.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li.semi-scrolllist-item-sel{background:var(--semi-color-primary-light-default);color:var(--semi-color-text-0)}.semi-scrolllist-body .semi-scrolllist-item>ul>li.semi-scrolllist-item-sel>svg,.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li.semi-scrolllist-item-sel>svg{color:var(--semi-color-text-2);width:16px;height:16px;margin-right:12px}.semi-scrolllist-body .semi-scrolllist-item>ul>li:not(.disabled):not(.semi-scrolllist-item-disabled):not(.semi-scrolllist-item-sel):not(.semi-scrolllist-item-selected),.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li:not(.disabled):not(.semi-scrolllist-item-disabled):not(.semi-scrolllist-item-sel):not(.semi-scrolllist-item-selected){cursor:pointer}.semi-scrolllist-body .semi-scrolllist-item>ul>li:not(.disabled):not(.semi-scrolllist-item-disabled):not(.semi-scrolllist-item-sel):not(.semi-scrolllist-item-selected):hover,.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li:not(.disabled):not(.semi-scrolllist-item-disabled):not(.semi-scrolllist-item-sel):not(.semi-scrolllist-item-selected):hover{background-color:var(--semi-color-fill-1)}.semi-scrolllist-body .semi-scrolllist-item>ul>li:not(.disabled):not(.semi-scrolllist-item-disabled):not(.semi-scrolllist-item-sel):not(.semi-scrolllist-item-selected):active,.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li:not(.disabled):not(.semi-scrolllist-item-disabled):not(.semi-scrolllist-item-sel):not(.semi-scrolllist-item-selected):active{background-color:var(--semi-color-fill-2)}.semi-scrolllist-body .semi-scrolllist-item>ul>li.semi-scrolllist-item-disabled,.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li.semi-scrolllist-item-disabled{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-scrolllist-body .semi-scrolllist-item-wheel{position:relative;flex:1;overflow:hidden}.semi-scrolllist-body .semi-scrolllist-item-wheel:not(:last-child){border-right:1px solid var(--semi-color-border)}.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-item-selected{font-weight:600;color:var(--semi-color-primary)!important}.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer{overflow-x:hidden;overflow-y:auto;height:100%;width:100%;padding-right:18px}.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-shade{width:100%;height:50%;pointer-events:none;position:absolute}.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-shade-pre{top:0;margin-top:-19px;background:var(--semi-color-bg-3);opacity:.5}.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-shade-post{top:50%;margin-top:19px;background:var(--semi-color-bg-3);opacity:.5}.semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-selector{pointer-events:none;position:absolute;top:50%;border-top:1px solid var(--semi-color-border);border-bottom:1px solid var(--semi-color-border);height:36px;width:100%;transform:translateY(-50%)}.semi-scrolllist .semi-scrolllist-footer{border-top:1px solid var(--semi-color-border);padding:10px}.semi-scrolllist .semi-scrolllist-line{background:var(--semi-color-border);height:1px}.semi-rtl .semi-scrolllist,.semi-portal-rtl .semi-scrolllist{direction:rtl}.semi-rtl .semi-scrolllist-body .semi-scrolllist-item:not(:last-child),.semi-portal-rtl .semi-scrolllist-body .semi-scrolllist-item:not(:last-child){border-right:0;border-left:1px solid var(--semi-color-border)}.semi-rtl .semi-scrolllist-body .semi-scrolllist-item>ul>li.semi-scrolllist-item-sel>svg,.semi-rtl .semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li.semi-scrolllist-item-sel>svg,.semi-portal-rtl .semi-scrolllist-body .semi-scrolllist-item>ul>li.semi-scrolllist-item-sel>svg,.semi-portal-rtl .semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul>li.semi-scrolllist-item-sel>svg{margin-right:0;margin-left:12px}.semi-rtl .semi-scrolllist-body .semi-scrolllist-item-wheel:not(:last-child),.semi-portal-rtl .semi-scrolllist-body .semi-scrolllist-item-wheel:not(:last-child){border-right:0;border-left:1px solid var(--semi-color-border)}.semi-rtl .semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer,.semi-portal-rtl .semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer{padding-right:0;padding-left:18px}.semi-select-option{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;word-break:break-all;padding:8px 12px;color:var(--semi-color-text-0);border-radius:0;position:relative;display:flex;flex-wrap:nowrap;align-items:center;cursor:pointer;box-sizing:border-box;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-select-option-icon{width:12px;color:#0000;margin-right:8px;display:flex;justify-content:center;align-content:center}.semi-select-option-text{display:flex;flex-wrap:wrap;white-space:pre}.semi-select-option-keyword{color:var(--semi-color-primary);background-color:inherit;font-weight:600}.semi-select-option:active{background-color:var(--semi-color-fill-1)}.semi-select-option-empty{cursor:not-allowed;color:var(--semi-color-disabled-text);justify-content:center}.semi-select-option-empty:hover,.semi-select-option-empty:active{background-color:inherit}.semi-select-option-disabled{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-select-option-disabled:hover{background-color:var(--semi-color-fill-0)}.semi-select-option-selected{font-weight:600;background:#0000}.semi-select-option-selected .semi-select-option-icon{color:var(--semi-color-text-2)}.semi-select-option-focused{background-color:var(--semi-color-fill-0)}.semi-select{box-sizing:border-box;border-radius:var(--semi-border-radius-small);border:1px solid rgba(0,0,0,0);height:32px;font-weight:400;background-color:var(--semi-color-fill-0);display:inline-flex;vertical-align:middle;position:relative;outline:none;cursor:pointer;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none));max-height:300px;overflow-y:auto}.semi-select:hover{background-color:var(--semi-color-fill-1);border:1px solid rgba(0,0,0,0)}.semi-select:focus{border:1px solid var(--semi-color-focus-border);background-color:var(--semi-color-fill-0);outline:0}.semi-select:active{background-color:var(--semi-color-fill-2)}.semi-select-small{height:24px;line-height:24px}.semi-select-large{min-height:40px;line-height:40px}.semi-select-large .semi-select-selection{font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-select-open,.semi-select-focus{border:1px solid var(--semi-color-focus-border);outline:0}.semi-select-open:hover,.semi-select-focus:hover{background-color:var(--semi-color-fill-0);border:1px solid var(--semi-color-focus-border)}.semi-select-open:active,.semi-select-focus:active{background-color:var(--semi-color-fill-2);border:1px solid var(--semi-color-focus-border)}.semi-select-warning{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning-light-default)}.semi-select-warning:hover{background-color:var(--semi-color-warning-light-hover);border-color:var(--semi-color-warning-light-hover)}.semi-select-warning:focus{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning)}.semi-select-warning:active{background-color:var(--semi-color-warning-light-active);border-color:var(--semi-color-warning-light-active)}.semi-select-error{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger-light-default)}.semi-select-error:hover{background-color:var(--semi-color-danger-light-hover);border-color:var(--semi-color-danger-light-hover)}.semi-select-error:focus{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger)}.semi-select-error:active{background-color:var(--semi-color-danger-light-active);border-color:var(--semi-color-danger-light-active)}.semi-select-disabled{cursor:not-allowed;background-color:var(--semi-color-disabled-fill)}.semi-select-disabled:hover{background-color:var(--semi-color-disabled-fill)}.semi-select-disabled:focus{border:1px solid rgba(0,0,0,0);background-color:var(--semi-color-disabled-fill)}.semi-select-disabled .semi-select-selection,.semi-select-disabled .semi-select-selection-placeholder{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-select-disabled .semi-select-arrow,.semi-select-disabled .semi-select-prefix,.semi-select-disabled .semi-select-suffix{color:var(--semi-color-disabled-text)}.semi-select-disabled .semi-tag{color:var(--semi-color-disabled-text);background-color:#0000}.semi-select-selection{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;height:100%;display:flex;align-items:center;flex-grow:1;overflow:hidden;margin-left:12px;cursor:pointer;color:var(--semi-color-text-0)}.semi-select-selection-text{width:100%;overflow:hidden;text-overflow:ellipsis}.semi-select-selection-text-inactive{display:flex;opacity:.4}.semi-select-selection-text-hide{display:none}.semi-select-selection-placeholder{color:var(--semi-color-text-2)}.semi-select-selection .semi-tag{margin-top:1px;margin-right:4px;margin-bottom:1px}.semi-select-selection .semi-tag:nth-of-type(1){margin-left:0}.semi-select-selection .semi-tag-group{height:inherit}.semi-select-selection .semi-tag-group .semi-tag{margin-top:1px;margin-right:4px;margin-bottom:1px}.semi-select-content-wrapper{white-space:nowrap;overflow:hidden;display:flex;align-items:center;height:100%}.semi-select-content-wrapper-collapse{display:inline-flex;flex-shrink:0;width:100%}.semi-select-content-wrapper-collapse .semi-overflow-list-overflow{max-width:100%;min-width:50px}.semi-select-content-wrapper-collapse>.semi-select-content-wrapper-collapse-tag{background-color:#0000}.semi-select-content-wrapper-collapse>.semi-select-content-wrapper-collapse-N{background-color:#0000;padding:4px;color:var(--semi-color-text-0);font-size:12px}.semi-select-multiple{height:auto}.semi-select-multiple .semi-select-selection{margin-left:4px}.semi-select-multiple .semi-select-content-wrapper{width:100%;min-height:30px;flex-wrap:wrap}.semi-select-multiple .semi-select-content-wrapper-empty{margin-left:8px}.semi-select-multiple .semi-select-content-wrapper .semi-tag-group{display:flex;align-items:center}.semi-select-multiple .semi-select-content-wrapper-one-line{flex-wrap:nowrap}.semi-select-multiple .semi-select-content-wrapper-one-line .semi-tag-group{flex-wrap:nowrap;justify-content:flex-start;overflow:hidden;flex-shrink:0}.semi-select-multiple .semi-select-inline-label-wrapper{flex-shrink:0}.semi-select-multiple.semi-select-large .semi-select-content-wrapper{min-height:38px}.semi-select-multiple.semi-select-small .semi-select-content-wrapper{min-height:22px}.semi-select-arrow{display:flex;align-items:center;justify-content:center;width:32px;color:var(--semi-color-text-2);flex-shrink:0;transform:rotate(var(--semi-transform-rotate-none))}.semi-select-arrow-empty{display:flex;width:12px}.semi-select-prefix,.semi-select-suffix{display:flex;justify-content:center;align-items:center}.semi-select-prefix-text,.semi-select-suffix-text{margin:0 12px;color:var(--semi-color-text-2);font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600}.semi-select-prefix-icon,.semi-select-suffix-icon{color:var(--semi-color-text-2);margin:0 8px}.semi-select-suffix{display:flex;justify-content:center;align-items:center}.semi-select-clear{display:flex;justify-content:center;align-items:center;width:32px;color:var(--semi-color-text-2);flex-shrink:0}.semi-select-clear:hover{color:var(--semi-color-primary)}.semi-select-inset-label-wrapper{display:inline}.semi-select-inset-label{margin:0 12px;font-weight:600;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2);flex-shrink:0;white-space:nowrap}.semi-select-create-tips{color:var(--semi-color-text-2);margin-right:4px}.semi-select-with-prefix .semi-select-selection{margin-left:0}.semi-select-single.semi-select-filterable .semi-select-content-wrapper{flex-grow:1;height:100%;overflow:hidden;position:relative}.semi-select-single.semi-select-filterable .semi-input-wrapper{position:absolute;top:0;left:0;height:100%;width:100%;border:none;background-color:#0000}.semi-select-single.semi-select-filterable .semi-input-wrapper-focus{border:none}.semi-select-single.semi-select-filterable .semi-input{padding-left:0;padding-right:0;height:100%}.semi-select-multiple.semi-select-filterable .semi-select-content-wrapper{flex-grow:1;height:100%;overflow:hidden;position:relative}.semi-select-multiple.semi-select-filterable .semi-select-content-wrapper:not(.semi-select-content-wrapper-empty) .semi-input-wrapper{height:24px;line-height:24px}.semi-select-multiple.semi-select-filterable .semi-select-content-wrapper:not(.semi-select-content-wrapper-empty) .semi-input-wrapper .semi-input-default{height:24px}.semi-select-multiple.semi-select-filterable .semi-select-content-wrapper-empty .semi-input-wrapper{position:absolute;top:0;left:0;height:100%}.semi-select-multiple.semi-select-filterable .semi-select-content-wrapper-empty .semi-input-wrapper .semi-input-default{height:100%}.semi-select-multiple.semi-select-filterable .semi-input-wrapper{height:100%;width:100%;border:none;background-color:#0000}.semi-select-multiple.semi-select-filterable .semi-input-wrapper-focus{border:none}.semi-select-multiple.semi-select-filterable .semi-input{padding-left:0;padding-right:0}.semi-select-multiple.semi-select-filterable.semi-select-large .semi-select-content-wrapper:not(.semi-select-content-wrapper-empty) .semi-input-wrapper-large{height:24px;line-height:24px}.semi-select-multiple.semi-select-filterable.semi-select-large .semi-select-content-wrapper:not(.semi-select-content-wrapper-empty) .semi-input-wrapper-large .semi-input-large{height:24px}.semi-select-multiple.semi-select-filterable.semi-select-small .semi-select-content-wrapper:not(.semi-select-content-wrapper-empty) .semi-input-wrapper{height:20px;line-height:20px}.semi-select-multiple.semi-select-filterable.semi-select-small .semi-select-content-wrapper:not(.semi-select-content-wrapper-empty) .semi-input-wrapper .semi-input-small{height:20px}.semi-select-option-list-wrapper{padding:4px 0}.semi-select-option-list{overflow-x:hidden;overflow-y:auto}.semi-select-option-list-chosen .semi-select-option-icon{display:flex}.semi-select-group{color:var(--semi-color-text-2);margin-top:4px;padding:12px 16px 4px 32px;font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:default}.semi-select-group:not(:nth-of-type(1)){border-top:1px solid var(--semi-color-border)}.semi-select-loading-wrapper{padding:8px 16px;cursor:not-allowed;height:20px;box-sizing:content-box}.semi-select-borderless:not(:focus-within):not(:hover){background-color:#0000;border-color:#0000}.semi-select-borderless:not(:focus-within):not(:hover) .semi-select-arrow{opacity:0}.semi-select-borderless:focus-within:not(:active){background-color:#0000}.semi-select-borderless.semi-select-error:not(:focus-within){border-color:var(--semi-color-danger)}.semi-select-borderless.semi-select-warning:not(:focus-within){border-color:var(--semi-color-warning)}.semi-select-borderless.semi-select-error:focus-within{border-color:var(--semi-color-danger)}.semi-select-borderless.semi-select-warning:focus-within{border-color:var(--semi-color-warning)}.semi-select-dropdown-search-wrapper{padding:8px 12px;border-bottom:1px solid rgba(0,0,0,0)}.semi-rtl .semi-select,.semi-portal-rtl .semi-select{direction:rtl}.semi-rtl .semi-select-selection,.semi-portal-rtl .semi-select-selection{margin-left:0;margin-right:12px}.semi-rtl .semi-select-selection .semi-tag:nth-of-type(1),.semi-portal-rtl .semi-select-selection .semi-tag:nth-of-type(1){margin-right:0}.semi-rtl .semi-select-selection .semi-tag-group .semi-tag,.semi-portal-rtl .semi-select-selection .semi-tag-group .semi-tag{margin-left:4px;margin-right:0}.semi-rtl .semi-select-multiple .semi-select-selection,.semi-portal-rtl .semi-select-multiple .semi-select-selection{margin-left:0;margin-right:4px}.semi-rtl .semi-select-multiple .semi-select-content-wrapper-empty,.semi-portal-rtl .semi-select-multiple .semi-select-content-wrapper-empty{margin-left:0;margin-right:8px}.semi-rtl .semi-select-create-tips,.semi-portal-rtl .semi-select-create-tips{margin-right:0;margin-left:4px}.semi-rtl .semi-select-with-prefix .semi-select-selection,.semi-portal-rtl .semi-select-with-prefix .semi-select-selection{margin-left:auto;margin-right:0}.semi-rtl .semi-select-single.semi-select-filterable .semi-input-wrapper,.semi-portal-rtl .semi-select-single.semi-select-filterable .semi-input-wrapper,.semi-rtl .semi-select-multiple.semi-select-filterable .semi-select-content-wrapper-empty .semi-input-wrapper,.semi-portal-rtl .semi-select-multiple.semi-select-filterable .semi-select-content-wrapper-empty .semi-input-wrapper{left:auto;right:0}.semi-rtl .semi-select-group,.semi-portal-rtl .semi-select-group{padding-left:32px;padding-right:16px}.semi-rtl .semi-select-option-icon,.semi-portal-rtl .semi-select-option-icon{margin-right:0;margin-left:8px}.semi-sidesheet{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;position:fixed;margin:0;top:0;left:0;height:100%}.semi-sidesheet-inner:focus,.semi-sidesheet-content:focus{outline:none}.semi-sidesheet-inner-wrap{position:absolute}.semi-sidesheet-left,.semi-sidesheet-right{top:0;width:0%;height:100%}.semi-sidesheet-left .semi-sidesheet-inner-wrap,.semi-sidesheet-right .semi-sidesheet-inner-wrap{height:100%}.semi-sidesheet-left.semi-sidesheet,.semi-sidesheet-right.semi-sidesheet{width:100%}.semi-sidesheet-right,.semi-sidesheet-right .semi-sidesheet-inner-wrap{right:0}.semi-sidesheet-top,.semi-sidesheet-bottom{left:0;width:100%;height:0%}.semi-sidesheet-top .semi-sidesheet-inner-wrap,.semi-sidesheet-bottom .semi-sidesheet-inner-wrap{width:100%}.semi-sidesheet-top.semi-sidesheet,.semi-sidesheet-bottom.semi-sidesheet{height:100%}.semi-sidesheet-top{top:0}.semi-sidesheet-bottom,.semi-sidesheet-bottom .semi-sidesheet-inner-wrap{bottom:0}.semi-sidesheet-title{flex:1 0 auto;margin:0;line-height:24px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;font-size:18px;color:var(--semi-color-text-0);text-align:left}.semi-sidesheet-inner{z-index:1;overflow:auto;background-color:var(--semi-color-bg-2);-webkit-backdrop-filter:none;backdrop-filter:none;border:0}.semi-sidesheet-header{display:flex;align-items:flex-start;padding:24px 24px 20px;border-bottom:0px solid var(--semi-color-border)}.semi-sidesheet-body{padding:0 24px;flex:1;overflow:auto}.semi-sidesheet-size-small{width:448px}.semi-sidesheet-size-medium{width:684px}.semi-sidesheet-size-large{width:920px}.semi-sidesheet-size-small.semi-sidesheet{width:448px}.semi-sidesheet-size-medium.semi-sidesheet{width:684px}.semi-sidesheet-size-large.semi-sidesheet{width:920px}.semi-sidesheet-content{height:100%;display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.semi-sidesheet-mask{position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--semi-color-overlay-bg);-webkit-backdrop-filter:none;backdrop-filter:none;opacity:1}.semi-sidesheet-mask-hidden{opacity:0;display:none}.semi-sidesheet-footer{padding:24px}@keyframes semi-sidesheet-slideShow_top{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes semi-sidesheet-slideHide_top{0%{transform:translateY(0)}to{transform:translateY(-100%)}}@keyframes semi-sidesheet-slideShow_bottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes semi-sidesheet-slideHide_bottom{0%{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes semi-sidesheet-slideShow_left{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes semi-sidesheet-slideHide_left{0%{transform:translate(0)}to{transform:translate(-100%)}}@keyframes semi-sidesheet-slideShow_right{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes semi-sidesheet-slideHide_right{0%{transform:translate(0)}to{transform:translate(100%)}}@keyframes semi-sidesheet-opacityShow{0%{opacity:0}to{opacity:1}}@keyframes semi-sidesheet-opacityHide{0%{opacity:1}to{opacity:0}}.semi-sidesheet-animation-content_show_top{animation:semi-sidesheet-slideShow_top .18s cubic-bezier(.25,.46,.45,.94) 0ms;animation-fill-mode:forwards}.semi-sidesheet-animation-content_hide_top{animation:semi-sidesheet-slideHide_top .18s cubic-bezier(.25,.46,.45,.94) 0ms;animation-fill-mode:forwards}.semi-sidesheet-animation-content_show_bottom{animation:semi-sidesheet-slideShow_bottom .18s cubic-bezier(.25,.46,.45,.94) 0ms;animation-fill-mode:forwards}.semi-sidesheet-animation-content_hide_bottom{animation:semi-sidesheet-slideHide_bottom .18s cubic-bezier(.25,.46,.45,.94) 0ms;animation-fill-mode:forwards}.semi-sidesheet-animation-content_show_left{animation:semi-sidesheet-slideShow_left .18s cubic-bezier(.25,.46,.45,.94) 0ms;animation-fill-mode:forwards}.semi-sidesheet-animation-content_hide_left{animation:semi-sidesheet-slideHide_left .18s cubic-bezier(.25,.46,.45,.94) 0ms;animation-fill-mode:forwards}.semi-sidesheet-animation-content_show_right{animation:semi-sidesheet-slideShow_right .18s cubic-bezier(.25,.46,.45,.94) 0ms;animation-fill-mode:forwards}.semi-sidesheet-animation-content_hide_right{animation:semi-sidesheet-slideHide_right .18s cubic-bezier(.25,.46,.45,.94) 0ms;animation-fill-mode:forwards}.semi-sidesheet-animation-mask_show{animation:semi-sidesheet-opacityShow .18s cubic-bezier(.25,.46,.45,.94) 0ms;animation-fill-mode:forwards}.semi-sidesheet-animation-mask_hide{animation:semi-sidesheet-opacityHide .18s cubic-bezier(.25,.46,.45,.94) 0ms;animation-fill-mode:forwards}.semi-sidesheet-fixed .semi-sidesheet-inner{box-shadow:var(--semi-shadow-elevated)}.semi-sidesheet-fixed.semi-sidesheet-left,.semi-sidesheet-fixed.semi-sidesheet-left .semi-sidesheet-inner{left:0}.semi-sidesheet-fixed.semi-sidesheet-right{left:auto}.semi-sidesheet-fixed.semi-sidesheet-right .semi-sidesheet-inner{right:0}.semi-sidesheet-fixed.semi-sidesheet-top,.semi-sidesheet-fixed.semi-sidesheet-bottom{height:auto}.semi-sidesheet-fixed.semi-sidesheet-bottom{top:auto}.semi-sidesheet-fixed.semi-sidesheet-bottom .semi-sidesheet-inner{bottom:0}.semi-sidesheet.semi-sidesheet-popup{position:absolute}.semi-sidesheet-hidden{display:none}.semi-sidesheet-rtl .semi-sidesheet-inner{direction:rtl}.semi-sidesheet-rtl .semi-sidesheet-title{text-align:right}.semi-sidebar-main .semi-sidebar-container-content{overflow:hidden}.semi-sidebar-main-content-wrapper{display:flex;flex-direction:column;height:100%}.semi-sidebar-main-content{padding:12px;height:100%;box-sizing:border-box;overflow:auto}.semi-sidebar-container{height:100%;border-left:1px solid var(--semi-color-border);box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden;position:relative}.semi-sidebar-container-header{display:flex;align-items:center;padding:12px 12px 12px 20px;border-bottom:1px solid var(--semi-color-border)}.semi-sidebar-container-header-title{flex:1;font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600}.semi-sidebar-container-header-closeBtn{flex-shrink:0}.semi-sidebar-container-content{flex:1 1;overflow:hidden}.semi-sidebar-container .semi-toast-wrapper{position:absolute}@keyframes semi-sidebar-slideShow_right{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes semi-sidebar-slideHide_right{0%{transform:translate(0)}to{transform:translate(100%)}}.semi-sidebar-animation-content_show{animation:semi-sidebar-slideShow_right .18s cubic-bezier(.25,.46,.45,.94) 0ms;animation-fill-mode:forwards}.semi-sidebar-animation-content_hide{animation:semi-sidebar-slideHide_right .18s cubic-bezier(.25,.46,.45,.94) 0ms;animation-fill-mode:forwards}.semi-sidebar-mcp-configure-content{padding:20px 16px;display:flex;flex-direction:column;height:100%;box-sizing:border-box}.semi-sidebar-mcp-configure-content-header{display:flex;align-items:center;justify-content:space-between}.semi-sidebar-mcp-configure-content-header-count{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;vertical-align:middle;color:var(--semi-color-text-2)}.semi-sidebar-mcp-configure-content-search{margin:16px 0}.semi-sidebar-mcp-configure-content-search-container{display:flex;column-gap:8px}.semi-sidebar-mcp-configure-content-item-container{overflow-y:auto}.semi-sidebar-mcp-configure-content-item{padding:8px 16px;display:flex;align-items:center;border-bottom:1px solid var(--semi-color-border)}.semi-sidebar-mcp-configure-content-item-sign{width:32px;height:32px;margin-right:12px;flex-shrink:0}.semi-sidebar-mcp-configure-content-item-sign .semi-icon{font-size:32px}.semi-sidebar-mcp-configure-content-item-content{justify-content:center;flex:1;min-width:0;margin-right:24px}.semi-sidebar-mcp-configure-content-item-content-label{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;color:var(--semi-color-text-0)}.semi-sidebar-mcp-configure-content-item-content-desc{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.semi-sidebar-mcp-configure-content-item-button{flex-shrink:0}.semi-sidebar-mcp-configure-content-item-button-configure{margin-right:12px}.semi-sidebar-mcp-configure-content-item-button.semi-button.semi-button-with-icon-only{width:24px;height:24px}.semi-sidebar-mcp-configure-content-custom-empty{margin-top:64px}.semi-sidebar-annotation .semi-sidebar-container-content{padding:12px;overflow:auto}.semi-sidebar-annotation-content{display:flex;flex-direction:row;flex-wrap:wrap;gap:8px;width:100%}.semi-sidebar-annotation-item{cursor:pointer}.semi-sidebar-annotation-item-title{overflow:hidden;text-overflow:ellipsis;white-space:normal;max-width:100%;display:-webkit-box;line-clamp:2;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-0);font-weight:600}.semi-sidebar-annotation-item-footer{display:flex;column-gap:4px;align-items:center}.semi-sidebar-annotation-item-footer-logo{font-size:14px;width:14px;height:14px}.semi-sidebar-annotation-item-footer-text{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1}.semi-sidebar-annotation-item-footer-order{box-sizing:border-box;min-width:16px;padding:0 2px;height:16px;border-radius:8px;background-color:var(--semi-color-fill-1);display:flex;align-items:center;justify-content:center;font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2)}.semi-sidebar-annotation-item-text{padding:3px 12px;width:100%;row-gap:8px;display:flex;flex-direction:column}.semi-sidebar-annotation-item-text-detail{overflow:hidden;text-overflow:ellipsis;white-space:normal;max-width:100%;display:-webkit-box;line-clamp:4;-webkit-line-clamp:4;-webkit-box-orient:vertical;font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2)}.semi-sidebar-annotation-item-video{border-radius:6px;border:1px solid var(--semi-color-border);overflow:hidden;width:calc((100% - 8px)/2);box-sizing:border-box}.semi-sidebar-annotation-item-video-content{padding:8px 8px 12px;display:flex;flex-direction:column;row-gap:8px}.semi-sidebar-annotation-item-video .semi-sidebar-annotation-item-title{height:40px}.semi-sidebar-annotation-item-video-img{width:100%;height:100%;object-fit:cover}.semi-sidebar-annotation-item-video-img-wrapper{position:relative;width:100%;height:107px}.semi-sidebar-annotation-item-video-play{position:absolute;top:6px;right:6px;border:1px solid var(--semi-color-bg-0);background:var(--semi-color-text-2);color:var(--semi-color-bg-0);border-radius:50%;width:20px;height:20px}.semi-sidebar-annotation-item-video-play.semi-icon{display:inline-flex;align-items:center;justify-content:center;font-size:12px}.semi-sidebar-annotation-item-video-duration{padding:2px 4px;position:absolute;bottom:6px;right:6px;background-color:rgba(var(--semi-grey-7),.7);border-radius:4px;font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-bg-0)}.semi-sidebar-annotation-item-video-title{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-0)}.semi-sidebar-code-content{height:100%}.semi-sidebar-code-content .semi-codeHighlight-defaultTheme pre[class*=language-],.semi-sidebar-main-content .semi-codeHighlight-defaultTheme pre[class*=language-]{margin:0;padding-top:0;padding-bottom:0;background-color:#0000;overflow-y:hidden;overflow-x:auto}.semi-sidebar-code-content .semi-codeHighlight .line-numbers .line-numbers-rows,.semi-sidebar-main-content .semi-codeHighlight .line-numbers .line-numbers-rows{border-right:none}.semi-sidebar-code-content .semi-json-viewer,.semi-sidebar-main-content .semi-json-viewer{padding-top:0;padding-bottom:0;background-color:#0000}.semi-sidebar-collapse .semi-collapse-item{border:1px solid var(--semi-color-border);border-radius:8px}.semi-sidebar-collapse .semi-collapse-item:not(:last-child){margin-bottom:8px}.semi-sidebar-collapse .semi-collapse-header{padding:8px 16px;margin:0;font-weight:400}.semi-sidebar-collapse-header-content{display:flex;align-items:center;gap:8px;width:100%;padding-right:8px}.semi-sidebar-collapse-header-content .semi-icon{color:var(--semi-color-text-1)}.semi-sidebar-collapse-header-text{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-sidebar-collapse-header-expand-btn{flex-shrink:0}.semi-sidebar-collapse-header-expand-btn.semi-button.semi-button-with-icon-only{padding:4px;width:24px;height:24px}.semi-sidebar-collapse .semi-collapse-item-active .semi-collapsible-wrapper{border-top:1px solid var(--semi-color-border)}.semi-sidebar-collapse-code .semi-collapse-content{padding:12px 0}.semi-sidebar-options{display:flex;flex-direction:row;flex-wrap:wrap;gap:8px;padding:8px 12px;border-bottom:1px solid var(--semi-color-border)}.semi-sidebar-options-button .semi-button-content-right{margin-left:4px}.semi-sidebar-options-normal.semi-button-primary.semi-button-light{color:var(--semi-color-text-2);font-weight:400}.semi-sidebar-file .tiptap{font-size:14px;line-height:24px}.semi-sidebar-file .tiptap ::selection{background:rgba(var(--semi-light-blue-1),1)}.semi-sidebar-file .tiptap ::-moz-selection{background:rgba(var(--semi-light-blue-1),1)}.semi-sidebar-file .tiptap p.is-editor-empty:first-child:before{color:var(--semi-color-text-2);content:attr(data-placeholder);float:left;height:0;pointer-events:none}.semi-sidebar-file .tiptap p{margin:0;white-space:pre-wrap;color:var(--semi-color-text-0)}.semi-sidebar-file .tiptap blockquote{border-left:3px solid var(--semi-color-border);margin:24px 0;padding-left:16px}.semi-sidebar-file .tiptap:focus{outline:none}.semi-sidebar-file .tiptap pre{background-color:var(--semi-color-fill-0);padding:2px 4px;border-radius:4px;overflow:auto;font-size:14px;line-height:24px;border:1px solid var(--semi-color-border)}.semi-sidebar-file .tiptap pre code{background-color:#0000}.semi-sidebar-file .tiptap code{background-color:var(--semi-color-border);padding:2px 4px}.semi-sidebar-file .tiptap hr{border:none;border-top:1px solid var(--semi-color-border)}.semi-sidebar-file .tiptap span.select{display:inline-block;background-color:rgba(var(--semi-light-blue-1),1);line-height:24px}.semi-sidebar-file .tiptap.ProseMirror img:not([data-type=emoji] img){outline:.125rem solid rgba(0,0,0,0);margin:12px 0}.semi-sidebar-file .tiptap.ProseMirror img:not([data-type=emoji] img).ProseMirror-selectednode{outline-color:var(--semi-color-text-0)}.semi-sidebar-file .tiptap .tiptap-image-slot .uploadFail .semi-upload-drag-area,.semi-sidebar-file .tiptap .tiptap-image-slot .validateFail .semi-upload-drag-area,.semi-sidebar-file .tiptap .tiptap-image-slot .uploading .semi-upload-drag-area,.semi-sidebar-file .tiptap .tiptap-image-slot .success .semi-upload-drag-area{display:none}.semi-sidebar-file-menu-bar{display:flex;flex-direction:row;align-items:center;justify-content:center;flex-wrap:wrap;gap:2px;border-top:1px solid var(--semi-color-border);border-bottom:1px solid var(--semi-color-border);padding:2px 12px}.semi-sidebar-file-menu-bar-dropdown-item-active{color:var(--semi-color-primary);background:var(--semi-color-fill-0)}.semi-sidebar-file-menu-bar .semi-divider-vertical{margin:0}.semi-sidebar-file-menu-bar-btn-active.semi-button-tertiary.semi-button-borderless{background:var(--semi-color-fill-0)}.semi-sidebar-file-menu-bar-btn-codeblock{font-size:12px;line-height:16px;padding:8px}.semi-sidebar-file-menu-bar-link-dropdown{padding:8px;display:flex;align-items:center;justify-content:center}.semi-sidebar-file-menu-bar-link-dropdown-btn-active.semi-button-tertiary.semi-button-borderless{color:var(--semi-color-primary)}.semi-sidebar-detail .semi-sidebar-file{height:100%;display:flex;flex-direction:column}.semi-sidebar-detail .semi-sidebar-file-content{height:100%}.semi-sidebar-detail .semi-sidebar-file-editor{overflow:auto;flex:1;padding:0 12px}.semi-sidebar-detail .semi-sidebar-code-content{overflow:auto}.semi-sidebar-main .semi-sidebar-code-content{height:200px;overflow:auto}.semi-sidebar-main .semi-sidebar-collapse-file .semi-collapse-content{max-height:400px;overflow:auto}.semi-sidebar-main .semi-sidebar-collapse-code .semi-collapse-content{max-height:200px;overflow:auto}.semi-sidebar-main .semi-codeHighlight{height:200px;overflow:auto}.semi-sidebar-detail-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;color:var(--semi-color-text-0);padding:12px}.semi-sidebar-detail-header-left{display:flex;flex-direction:row;column-gap:8px;align-items:center}.semi-sidebar-detail-header-title{font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600}.semi-sidebar-detail-header-right{display:flex;flex-direction:row;column-gap:4px;align-items:center}.semi-skeleton-avatar,.semi-skeleton-image,.semi-skeleton-title,.semi-skeleton-button{background:var(--semi-color-fill-0);border-radius:var(--semi-border-radius-small)}.semi-skeleton-avatar-circle{border-radius:50%}.semi-skeleton-avatar-extra-extra-small{width:20px;height:20px}.semi-skeleton-avatar-extra-small{width:24px;height:24px}.semi-skeleton-avatar-medium{width:48px;height:48px}.semi-skeleton-avatar-small{width:32px;height:32px}.semi-skeleton-avatar-large{width:72px;height:72px}.semi-skeleton-avatar-extra-large{width:128px;height:128px}.semi-skeleton-paragraph{margin:0;padding:0;list-style-type:none}.semi-skeleton-paragraph li{background:var(--semi-color-fill-0);border-radius:var(--semi-border-radius-small);width:100%;height:16px;margin-bottom:10px}.semi-skeleton-paragraph li:last-child{width:60%;margin-bottom:0}.semi-skeleton-paragraph li:first-child{width:100%}.semi-skeleton-title{width:100%;height:24px}.semi-skeleton-button{width:115px;height:32px}.semi-skeleton-image{width:100%;height:100%}.semi-skeleton-active .semi-skeleton-avatar,.semi-skeleton-active .semi-skeleton-image,.semi-skeleton-active .semi-skeleton-title,.semi-skeleton-active .semi-skeleton-button,.semi-skeleton-active .semi-skeleton-paragraph li{background:linear-gradient(90deg,var(--semi-color-fill-0) 25%,var(--semi-color-fill-1) 44%,var(--semi-color-fill-0) 88%);background-size:400% 100%;animation:1.4s skeleton-loading ease infinite;animation-fill-mode:forwards}@keyframes skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.semi-rtl .semi-skeleton,.semi-portal-rtl .semi-skeleton{direction:rtl}.semi-slider{padding:0 13px;margin:0}.semi-slider-wrapper{box-sizing:border-box;position:relative;height:32px;width:100%;display:inline-block;vertical-align:bottom}.semi-slider-rail{box-sizing:border-box;margin:0;padding:0;color:#000000a6;font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;font-feature-settings:"tnum";position:absolute;height:4px;cursor:pointer;touch-action:none;background-color:var(--semi-color-fill-0);width:100%;border-radius:var(--semi-border-radius-small);top:14px}.semi-slider-handle{box-shadow:0 4px 6px #0000001a,0 0 1px #0000004d;box-sizing:border-box;touch-action:none;position:absolute;width:24px;height:24px;margin-top:4px;background-color:var(--semi-color-white);border:none;border-radius:50%;cursor:pointer;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:var(--semi-transform_scale-small) translate(-50%) translateY(0);display:inline-flex;justify-content:center;align-items:center}.semi-slider-handle:focus-visible{outline:2px solid var(--semi-color-primary-light-active)}.semi-slider-handle-dot{background:var(--semi-color-primary);width:4px;height:4px;border-radius:var(--semi-border-radius-circle)}.semi-slider-handle:hover{background-color:var(--semi-color-white)}.semi-slider-handle-clicked{border:solid 1px var(--semi-color-focus-border);cursor:grabbing}.semi-slider-track{height:4px;background:var(--semi-color-primary);border-radius:var(--semi-border-radius-small);position:absolute;cursor:pointer;top:14px}.semi-slider-tooltip{position:absolute;top:-40px}.semi-slider-dots{width:100%;background:#0000}.semi-slider-dot{position:absolute;top:14px;width:4px;height:4px;background-color:var(--semi-color-white);border-radius:50%;cursor:pointer;transform:translate(0)}.semi-slider-dot-active{background-color:var(--semi-color-white)}.semi-slider-marks{position:absolute;top:23px;left:0;width:100%;font-size:14px}.semi-slider-mark{position:absolute;display:inline-block;color:var(--semi-color-text-2);text-align:center;cursor:pointer;transform:translate(-50%)}.semi-slider-marks-reverse{position:absolute;top:23px;left:0;width:100%;font-size:14px}.semi-slider-mark-reverse{position:absolute;display:inline-block;color:var(--semi-color-text-2);text-align:center;cursor:pointer;transform:translate(-50%) rotate(-180deg)}.semi-slider-boundary{position:relative;font-size:12px;color:var(--semi-color-text-0);visibility:hidden;top:30px}.semi-slider-boundary span{position:absolute;display:inline-block}.semi-slider-boundary-min{left:0}.semi-slider-boundary-max{right:0}.semi-slider-boundary-show{visibility:visible}.semi-slider-vertical-wrapper{width:4px;height:100%}.semi-slider-vertical-wrapper .semi-slider-track{width:4px}.semi-slider-vertical-wrapper .semi-slider-marks{height:100%;margin-top:-30px;margin-left:29px}.semi-slider-vertical-wrapper .semi-slider-marks-reverse{height:100%;margin-top:-30px;margin-left:-26px}.semi-slider-vertical-wrapper .semi-slider-rail{width:4px;height:100%;top:0}.semi-slider-vertical-wrapper .semi-slider-handle{margin-top:0;margin-left:-10px;transform:var(--semi-transform_scale-small) translateY(-50%) translate(0)}.semi-slider-vertical-wrapper .semi-slider-dot{transform:translateY(0)}.semi-slider-disabled{cursor:not-allowed}.semi-slider-disabled .semi-slider-handle{cursor:not-allowed;box-shadow:none;border:1px var(--semi-color-border) solid}.semi-slider-disabled .semi-slider-handle:hover{background-color:var(--semi-color-white)}.semi-slider-disabled .semi-slider-rail{cursor:not-allowed}.semi-slider-disabled .semi-slider-track{cursor:not-allowed;background-color:var(--semi-color-primary-disabled)}.semi-slider-disabled .semi-slider-dot{cursor:not-allowed;background-color:var(--semi-color-white);border-color:var(--semi-color-white);box-shadow:none}.semi-slider-handle-tooltip{text-align:center}.semi-slider-reverse{transform:rotate(180deg)}.semi-rtl .semi-slider,.semi-portal-rtl .semi-slider{direction:rtl}.semi-rtl .semi-slider-handle,.semi-portal-rtl .semi-slider-handle{transform:var(--semi-transform_scale-small) translate(50%) translateY(0)}.semi-rtl .semi-slider-mark,.semi-portal-rtl .semi-slider-mark{transform:translate(50%)}.semi-rtl .semi-slider-mark-reverse,.semi-portal-rtl .semi-slider-mark-reverse{transform:translate(50%) rotate(-180deg)}.semi-rtl .semi-slider-boundary-min,.semi-portal-rtl .semi-slider-boundary-min{left:auto;right:0}.semi-rtl .semi-slider-boundary-max,.semi-portal-rtl .semi-slider-boundary-max{right:auto;left:0}.semi-slider-rtl .semi-slider-handle{transform:var(--semi-transform_scale-small) translate(50%) translateY(0)}.semi-slider-rtl .semi-slider-mark{transform:translate(50%)}.semi-slider-rtl .semi-slider-mark-reverse{transform:translate(50%) rotate(-180deg)}.semi-slider-rtl .semi-slider-boundary-min{left:auto;right:0}.semi-slider-rtl .semi-slider-boundary-max{right:auto;left:0}.semi-space{display:inline-flex}.semi-space-vertical{flex-direction:column}.semi-space-horizontal{flex-direction:row}.semi-space-align-center{align-items:center}.semi-space-align-end{align-items:flex-end}.semi-space-align-start{align-items:flex-start}.semi-space-align-baseline{align-items:baseline}.semi-space-wrap{flex-wrap:wrap}.semi-space-tight-horizontal{column-gap:8px}.semi-space-tight-vertical{row-gap:8px}.semi-space-medium-horizontal{column-gap:16px}.semi-space-medium-vertical{row-gap:16px}.semi-space-loose-horizontal{column-gap:24px}.semi-space-loose-vertical{row-gap:24px}.semi-rtl .semi-space,.semi-portal-rtl .semi-space{direction:rtl}.semi-spin{position:relative;display:inline-block;width:20px;height:20px}.semi-spin-wrapper{text-align:center;position:absolute;width:100%;transform:translateY(-50%);top:50%;color:var(--semi-color-primary)}.semi-spin-wrapper>svg{display:inline;animation:.6s linear infinite semi-animation-rotate;animation-fill-mode:forwards;vertical-align:top;width:20px;height:20px}.semi-spin-animate{display:inline-flex;animation:1.6s linear infinite semi-animation-rotate;animation-fill-mode:forwards}.semi-spin-children{opacity:.5;-webkit-user-select:none;user-select:none}.semi-spin-block{display:block}.semi-spin-block:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:1}.semi-spin-block .semi-spin-wrapper{display:block}.semi-spin-block.semi-spin{height:auto;width:auto}.semi-spin-hidden:after{content:none}.semi-spin-hidden>.semi-spin-children{opacity:1;-webkit-user-select:auto;user-select:auto}.semi-spin-small{width:14px;height:14px}.semi-spin-small>.semi-spin-wrapper svg{width:14px;height:14px}.semi-spin-middle{width:20px;height:20px}.semi-spin-middle>.semi-spin-wrapper svg{width:20px;height:20px}.semi-spin-large{width:32px;height:32px}.semi-spin-large>.semi-spin-wrapper svg{width:32px;height:32px}.semi-spin-container{overflow:hidden}.semi-rtl .semi-spin,.semi-portal-rtl .semi-spin,.semi-rtl .semi-spin-container,.semi-portal-rtl .semi-spin-container{direction:rtl}.semi-steps .semi-col{flex:1}.semi-steps-vertical .semi-row-flex{flex-direction:column}.semi-steps .semi-steps-item{box-sizing:border-box;display:flex;height:72px;position:relative;overflow:hidden;margin-right:16px;border:1px solid rgba(0,0,0,0);border-radius:var(--semi-border-radius-medium);padding:12px 16px;transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-small));transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-steps .semi-steps-item .semi-steps-item-title{position:relative;font-size:18px;line-height:24px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--semi-color-text-0);transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-steps .semi-steps-item .semi-steps-item-description{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2);width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-steps .semi-steps-item-process{background-color:var(--semi-color-primary-light-default)}.semi-steps .semi-steps-item-process .semi-steps-item-left:not(.semi-steps-item-icon){background:var(--semi-color-primary)}.semi-steps .semi-steps-item-process .semi-steps-item-title,.semi-steps .semi-steps-item-process .semi-steps-item-icon{color:var(--semi-color-primary)}.semi-steps .semi-steps-item-wait .semi-steps-item-left:not(.semi-steps-item-icon){background:var(--semi-color-text-2)}.semi-steps .semi-steps-item-wait .semi-steps-item-icon{color:var(--semi-color-text-2)}.semi-steps .semi-steps-item-finish .semi-icon,.semi-steps .semi-steps-item-finish .semi-steps-item-title{color:var(--semi-color-success)}.semi-steps .semi-steps-item-finish-hover:hover{background-color:var(--semi-color-fill-0)}.semi-steps .semi-steps-item-finish-hover:hover .semi-icon,.semi-steps .semi-steps-item-finish-hover:hover .semi-steps-item-title{color:var(--semi-color-success-hover)}.semi-steps .semi-steps-item-finish-active:active{background-color:var(--semi-color-fill-1)}.semi-steps .semi-steps-item-finish-active:active .semi-icon,.semi-steps .semi-steps-item-finish-active:active .semi-steps-item-title{color:var(--semi-color-success-active)}.semi-steps .semi-steps-item-error .semi-icon,.semi-steps .semi-steps-item-error .semi-steps-item-title{color:var(--semi-color-danger)}.semi-steps .semi-steps-item-error-hover:hover{background:var(--semi-color-fill-0)}.semi-steps .semi-steps-item-error-hover:hover .semi-icon,.semi-steps .semi-steps-item-error-hover:hover .semi-steps-item-title{color:var(--semi-color-danger-hover)}.semi-steps .semi-steps-item-error-active:active{background-color:var(--semi-color-fill-1)}.semi-steps .semi-steps-item-error-active:active .semi-icon,.semi-steps .semi-steps-item-error-active:active .semi-steps-item-title{color:var(--semi-color-danger-active)}.semi-steps .semi-steps-item-warning .semi-steps-item-title,.semi-steps .semi-steps-item-warning .semi-icon{color:var(--semi-color-warning)}.semi-steps .semi-steps-item-warning-hover:hover{background:var(--semi-color-fill-0)}.semi-steps .semi-steps-item-warning-hover:hover .semi-steps-item-title,.semi-steps .semi-steps-item-warning-hover:hover .semi-icon{color:var(--semi-color-warning-hover)}.semi-steps .semi-steps-item-warning-active:active{background-color:var(--semi-color-fill-1)}.semi-steps .semi-steps-item-warning-active:active .semi-steps-item-title,.semi-steps .semi-steps-item-warning-active:active .semi-icon{color:var(--semi-color-warning-active)}.semi-steps .semi-steps-item-clickable{cursor:pointer}.semi-steps .semi-steps-item-left{width:24px;height:24px;line-height:32px;text-align:center;border-radius:32px;display:flex;align-items:center;justify-content:center;font-size:20px;line-height:28px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;flex-grow:0}.semi-steps .semi-steps-item-left.semi-steps-item-plain{color:rgba(var(--semi-white),1)}.semi-steps .semi-steps-item-left-process{background:var(--semi-color-primary-light-default)}.semi-steps .semi-steps-item-content{margin-left:16px;flex:1;overflow:hidden}.semi-steps-basic.semi-steps-horizontal{display:flex;flex-flow:row nowrap}.semi-steps-basic.semi-steps-horizontal.semi-steps-hasline .semi-steps-item-title:after{content:"";position:absolute;top:50%;left:100%;display:block;width:9999px;height:1px;background:var(--semi-color-fill-2)}.semi-steps-basic.semi-steps-horizontal .semi-steps-item{padding-left:16px}.semi-steps-basic.semi-steps-horizontal .semi-steps-item:first-child{padding-left:0}.semi-steps-basic.semi-steps-horizontal .semi-steps-item:last-child{flex:none}.semi-steps-basic.semi-steps-horizontal .semi-steps-item:last-child .semi-steps-item-title{max-width:100%;padding-right:0}.semi-steps-basic.semi-steps-horizontal .semi-steps-item:last-child .semi-steps-item-title:after{display:none}.semi-steps-basic.semi-steps-horizontal .semi-steps-item-done .semi-steps-item-container .semi-steps-item-title:after{background:var(--semi-color-primary)}.semi-steps-basic.semi-steps-horizontal .semi-steps-item .semi-steps-item-content{flex:1}.semi-steps-basic.semi-steps-horizontal .semi-steps-item .semi-steps-item-description{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2);width:100%;max-width:268px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-steps-basic.semi-steps-horizontal .semi-steps-item .semi-steps-item-title{max-width:80%;min-height:24px;display:inline-flex;align-items:center}.semi-steps-basic.semi-steps-horizontal .semi-steps-item .semi-steps-item-title .semi-steps-item-title-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-steps-basic.semi-steps-horizontal .semi-steps-item .semi-steps-item-title .semi-steps-item-title-text-empty{width:0}.semi-steps-basic.semi-steps-vertical{display:flex;flex-flow:column nowrap}.semi-steps-basic.semi-steps-vertical .semi-steps-item-icon{box-sizing:content-box}.semi-steps-basic.semi-steps-vertical.semi-steps-small .semi-steps-item .semi-steps-item-content{min-height:40px}.semi-steps-basic.semi-steps-vertical.semi-steps-hasline .semi-steps-item-icon:after{content:"";position:absolute;top:100%;left:50%;display:block;width:1px;height:9999px;background:var(--semi-color-fill-2)}.semi-steps-basic.semi-steps-vertical .semi-steps-item{padding-top:9px}.semi-steps-basic.semi-steps-vertical .semi-steps-item:first-child{padding-top:0}.semi-steps-basic.semi-steps-vertical .semi-steps-item:last-child .semi-steps-item-icon:after{display:none}.semi-steps-basic.semi-steps-vertical .semi-steps-item-done .semi-steps-item-icon:after{background:var(--semi-color-primary)}.semi-steps-basic.semi-steps-vertical .semi-steps-item .semi-steps-item-content{min-height:42px;padding-bottom:22px}.semi-steps-basic.semi-steps-vertical .semi-steps-item .semi-steps-item-icon{display:inline-flex;position:relative;padding-bottom:9px}.semi-steps-basic.semi-steps-vertical .semi-steps-item .semi-steps-item-description{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2);width:100%}.semi-steps-basic.semi-steps-vertical .semi-steps-item .semi-steps-item-title{max-width:100%}.semi-steps-basic.semi-steps-vertical .semi-steps-item .semi-steps-item-title .semi-steps-item-title-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-steps-basic .semi-steps-item{box-sizing:border-box;position:relative;display:inline-block;vertical-align:top;overflow:hidden;flex:1;transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-small))}.semi-steps-basic .semi-steps-item-clickable{cursor:pointer}.semi-steps-basic .semi-steps-item-hover:hover .semi-steps-item-title,.semi-steps-basic .semi-steps-item-hover:hover .semi-steps-item-description{color:var(--semi-color-focus-border)}.semi-steps-basic .semi-steps-item .semi-steps-item-container{display:flex;align-items:flex-start}.semi-steps-basic .semi-steps-item .semi-steps-item-left{display:flex;justify-content:center;align-items:center;margin-right:8px}.semi-steps-basic .semi-steps-item .semi-steps-item-left .semi-steps-item-icon{display:flex;height:24px;align-items:center}.semi-steps-basic .semi-steps-item .semi-steps-item-left .semi-steps-item-number-icon{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;background:var(--semi-color-primary);border-radius:var(--semi-border-radius-circle);color:var(--semi-color-white);transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-steps-basic .semi-steps-item .semi-steps-item-title{position:relative;display:inline-block;font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:24px;font-weight:600;color:var(--semi-color-text-0);vertical-align:top;padding-right:16px;margin-bottom:4px;transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-steps-basic .semi-steps-item-finish .semi-steps-item-left .semi-steps-item-icon{color:var(--semi-color-primary)}.semi-steps-basic .semi-steps-item-finish .semi-steps-item-left .semi-steps-item-icon .semi-steps-item-number-icon{color:var(--semi-color-white)}.semi-steps-basic .semi-steps-item-wait .semi-steps-item-title,.semi-steps-basic .semi-steps-item-wait .semi-steps-item-left .semi-steps-item-icon{color:var(--semi-color-text-2)}.semi-steps-basic .semi-steps-item-wait .semi-steps-item-left .semi-steps-item-icon .semi-steps-item-number-icon{background:var(--semi-color-fill-0);color:var(--semi-color-text-2)}.semi-steps-basic .semi-steps-item-wait-hover:hover .semi-steps-item-left .semi-steps-item-icon .semi-steps-item-number-icon{background:var(--semi-color-secondary-light-default);color:var(--semi-color-focus-border)}.semi-steps-basic .semi-steps-item-process .semi-steps-item-left .semi-steps-item-icon{color:var(--semi-color-primary)}.semi-steps-basic .semi-steps-item-process .semi-steps-item-left .semi-steps-item-icon .semi-steps-item-number-icon{color:var(--semi-color-white)}.semi-steps-basic .semi-steps-item-error .semi-steps-item-left .semi-steps-item-icon{color:var(--semi-color-danger)}.semi-steps-basic .semi-steps-item-error .semi-steps-item-left .semi-steps-item-icon .semi-steps-item-number-icon{color:var(--semi-color-primary)}.semi-steps-basic .semi-steps-item-warning .semi-steps-item-left .semi-steps-item-icon{color:var(--semi-color-warning)}.semi-steps-basic .semi-steps-item-warning .semi-steps-item-left .semi-steps-item-icon .semi-steps-item-number-icon{color:var(--semi-color-white)}.semi-steps-basic.semi-steps-small .semi-steps-item .semi-steps-item-title{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-steps-basic.semi-steps-small .semi-steps-item .semi-steps-item-left .semi-steps-item-icon{height:20px}.semi-steps-basic.semi-steps-small .semi-steps-item .semi-steps-item-left .semi-steps-item-icon .semi-steps-item-number-icon{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;width:20px;height:20px}.semi-steps-nav{display:inline-flex;flex-flow:row nowrap}.semi-steps-nav .semi-steps-item{box-sizing:border-box}.semi-steps-nav .semi-steps-item:last-child{flex:none}.semi-steps-nav .semi-steps-item:last-child .semi-steps-item-content{width:auto}.semi-steps-nav .semi-steps-item .semi-steps-item-container{display:flex;align-items:center;color:var(--semi-color-text-2)}.semi-steps-nav .semi-steps-item .semi-steps-item-container .semi-steps-item-icon{display:inline-flex;flex:1;justify-content:center;color:var(--semi-grey-3);min-width:60px}.semi-steps-nav .semi-steps-item .semi-steps-item-content{flex:1;display:inline-block}.semi-steps-nav .semi-steps-item .semi-steps-item-title{font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;max-width:17em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400}.semi-steps-nav .semi-steps-item-active .semi-steps-item-title{color:var(--semi-color-text-0);font-weight:600}.semi-steps-nav.semi-steps-small .semi-steps-item .semi-steps-item-title{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-rtl .semi-steps,.semi-portal-rtl .semi-steps{direction:rtl}.semi-rtl .semi-steps-item,.semi-portal-rtl .semi-steps-item{margin-right:auto;margin-left:16px}.semi-rtl .semi-steps-item-content,.semi-portal-rtl .semi-steps-item-content{margin-left:auto;margin-right:16px}.semi-rtl .semi-steps-basic,.semi-portal-rtl .semi-steps-basic{direction:rtl}.semi-rtl .semi-steps-basic.semi-steps-horizontal .semi-steps-item .semi-steps-item-title,.semi-portal-rtl .semi-steps-basic.semi-steps-horizontal .semi-steps-item .semi-steps-item-title{padding-left:16px}.semi-rtl .semi-steps-basic.semi-steps-horizontal .semi-steps-item .semi-steps-item-title:after,.semi-portal-rtl .semi-steps-basic.semi-steps-horizontal .semi-steps-item .semi-steps-item-title:after{right:100%}.semi-rtl .semi-steps-basic.semi-steps-vertical .semi-steps-item,.semi-portal-rtl .semi-steps-basic.semi-steps-vertical .semi-steps-item{margin:0}.semi-rtl .semi-steps-nav,.semi-portal-rtl .semi-steps-nav{direction:rtl}.semi-switch{box-sizing:border-box;display:inline-block;border-radius:12px;border:1px rgba(0,0,0,0) solid;position:relative;cursor:pointer;background-color:var(--semi-color-fill-0);transition:background-color .2s var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);width:40px;height:24px}.semi-switch:hover{background-color:var(--semi-color-fill-1)}.semi-switch:active{border:1px var(--semi-color-fill-2) solid}.semi-switch:active .semi-switch-knob{width:24px}.semi-switch-focus{outline:2px solid var(--semi-color-primary-light-active)}.semi-switch-checked{background-color:var(--semi-color-success)}.semi-switch-checked:hover{background-color:var(--semi-color-success-hover)}.semi-switch-checked .semi-switch-knob{transform:translate(18px);background-color:rgba(var(--semi-white),1)}.semi-switch-checked:active .semi-switch-knob{transform:translate(12px)}.semi-switch-active{background-color:var(--semi-color-success-active)}.semi-switch-disabled{cursor:not-allowed;background-color:#0000;border:1px var(--semi-color-border) solid}.semi-switch-disabled:hover,.semi-switch-disabled:active{background-color:#0000}.semi-switch-disabled:active .semi-switch-knob{width:18px}.semi-switch-disabled .semi-switch-knob{cursor:not-allowed;box-shadow:none;border:1px var(--semi-color-border) solid}.semi-switch-disabled .semi-switch-native-control{pointer-events:none;cursor:not-allowed}.semi-switch-disabled.semi-switch-checked{border-color:#0000;background-color:var(--semi-color-success-disabled)}.semi-switch-disabled.semi-switch-checked:active .semi-switch-knob{transform:translate(18px)}.semi-switch-disabled.semi-switch-checked .semi-switch-knob{box-shadow:none;border:none}.semi-switch-disabled.semi-switch-loading:not(.semi-switch-checked):hover{background-color:var(--semi-color-fill-1)}.semi-switch-knob{box-shadow:0 4px 6px #0000001a,0 0 1px #0000004d;cursor:pointer;border-radius:9px;background-color:rgba(var(--semi-white),1);box-sizing:border-box;position:absolute;left:0;right:auto;transition:transform .2s ease-in-out,width .2s ease-in-out;width:18px;height:18px;top:2px;transform:translate(2px)}.semi-switch-native-control{width:100%;height:100%;opacity:0;cursor:inherit;pointer-events:auto;margin:0;position:absolute;top:0;left:0}.semi-switch-native-control[type=checkbox]{width:inherit;height:inherit}.semi-switch-checked-text,.semi-switch-unchecked-text{position:absolute;font-size:12px;height:100%;width:20px;display:flex;justify-content:center;align-items:center}.semi-switch-checked-text{color:var(--semi-color-white)}.semi-switch-unchecked-text{color:var(--semi-color-text-2);right:0}.semi-switch-loading{display:inline-flex;align-items:center;background-color:var(--semi-color-fill-1)}.semi-switch-loading-spin .semi-spin-wrapper{display:inline-flex;align-items:center;color:var(--semi-color-white)}.semi-switch-loading .semi-switch-loading-spin{transform:translate(2px)}.semi-switch-loading .semi-switch-loading-spin>.semi-spin-wrapper>svg{width:18px;height:18px}.semi-switch-loading.semi-switch-checked{background-color:var(--semi-color-success-hover)}.semi-switch-loading.semi-switch-checked .semi-switch-loading-spin{transform:translate(16px)}.semi-switch-loading.semi-switch-small .semi-switch-loading-spin{transform:translate(2px)}.semi-switch-loading.semi-switch-small .semi-switch-loading-spin>.semi-spin-wrapper>svg{width:10px;height:10px}.semi-switch-loading.semi-switch-small.semi-switch-checked .semi-switch-loading-spin{transform:translate(10px)}.semi-switch-loading.semi-switch-large .semi-switch-loading-spin{transform:translate(2px)}.semi-switch-loading.semi-switch-large .semi-switch-loading-spin>.semi-spin-wrapper>svg{width:28px;height:28px}.semi-switch-loading.semi-switch-large.semi-switch-checked .semi-switch-loading-spin{transform:translate(22px)}.semi-switch-disabled.semi-switch-checked{background-color:var(--semi-color-success-disabled)}.semi-switch-large{width:54px;height:32px;border-radius:16px}.semi-switch-large .semi-switch-knob{width:24px;height:24px;top:3px;border-radius:12px;transform:translate(3px)}.semi-switch-large.semi-switch-checked .semi-switch-knob{transform:translate(26px)}.semi-switch-large.semi-switch-checked:active .semi-switch-knob{transform:translate(16px)}.semi-switch-large:active .semi-switch-knob{width:34px}.semi-switch-large .semi-switch-checked-text,.semi-switch-large .semi-switch-unchecked-text{width:26px;font-size:14px}.semi-switch-small{width:26px;height:16px;border-radius:8px}.semi-switch-small .semi-switch-knob{width:12px;height:12px;top:1px;border-radius:6px;transform:translate(1px)}.semi-switch-small.semi-switch-checked .semi-switch-knob{transform:translate(11px)}.semi-switch-small.semi-switch-checked:active .semi-switch-knob{transform:translate(9px)}.semi-switch-small:active .semi-switch-knob{width:14px}.semi-form .semi-switch-native-control{width:100%;height:100%}.semi-rtl .semi-switch,.semi-portal-rtl .semi-switch{direction:rtl}.semi-rtl .semi-switch-checked .semi-switch-knob,.semi-portal-rtl .semi-switch-checked .semi-switch-knob{transform:translate(-18px)}.semi-rtl .semi-switch-checked:active .semi-switch-knob,.semi-portal-rtl .semi-switch-checked:active .semi-switch-knob{transform:translate(-12px)}.semi-rtl .semi-switch-knob,.semi-portal-rtl .semi-switch-knob{right:0;left:auto;transform:translate(-2px)}.semi-rtl .semi-switch-native-control,.semi-portal-rtl .semi-switch-native-control{right:0}.semi-rtl .semi-switch-unchecked-text,.semi-portal-rtl .semi-switch-unchecked-text{left:0}.semi-rtl .semi-switch-loading .semi-switch-loading-spin,.semi-portal-rtl .semi-switch-loading .semi-switch-loading-spin{transform:translate(-2px)}.semi-rtl .semi-switch-loading.semi-switch-checked .semi-switch-loading-spin,.semi-portal-rtl .semi-switch-loading.semi-switch-checked .semi-switch-loading-spin{transform:translate(-16px)}.semi-rtl .semi-switch-loading.semi-switch-small .semi-switch-loading-spin,.semi-portal-rtl .semi-switch-loading.semi-switch-small .semi-switch-loading-spin{transform:translate(-2px)}.semi-rtl .semi-switch-loading.semi-switch-small.semi-switch-checked .semi-switch-loading-spin,.semi-portal-rtl .semi-switch-loading.semi-switch-small.semi-switch-checked .semi-switch-loading-spin{transform:translate(-10px)}.semi-rtl .semi-switch-loading.semi-switch-large .semi-switch-loading-spin,.semi-portal-rtl .semi-switch-loading.semi-switch-large .semi-switch-loading-spin{transform:translate(-2px)}.semi-rtl .semi-switch-loading.semi-switch-large.semi-switch-checked .semi-switch-loading-spin,.semi-portal-rtl .semi-switch-loading.semi-switch-large.semi-switch-checked .semi-switch-loading-spin{transform:translate(-22px)}.semi-rtl .semi-switch-large .semi-switch-knob,.semi-portal-rtl .semi-switch-large .semi-switch-knob{transform:translate(-3px)}.semi-rtl .semi-switch-large.semi-switch-checked .semi-switch-knob,.semi-portal-rtl .semi-switch-large.semi-switch-checked .semi-switch-knob{transform:translate(-26px)}.semi-rtl .semi-switch-large.semi-switch-checked:active .semi-switch-knob,.semi-portal-rtl .semi-switch-large.semi-switch-checked:active .semi-switch-knob{transform:translate(-16px)}.semi-rtl .semi-switch-small .semi-switch-knob,.semi-portal-rtl .semi-switch-small .semi-switch-knob{transform:translate(-1px)}.semi-rtl .semi-switch-small.semi-switch-checked .semi-switch-knob,.semi-portal-rtl .semi-switch-small.semi-switch-checked .semi-switch-knob{transform:translate(-11px)}.semi-rtl .semi-switch-small.semi-switch-checked:active .semi-switch-knob,.semi-portal-rtl .semi-switch-small.semi-switch-checked:active .semi-switch-knob{transform:translate(-9px)}.semi-table-panel-operation{background-color:var(--semi-color-primary);padding:8px 16px;display:flex;justify-content:space-between;color:var(--semi-color-text-2)}.semi-table-panel-operation-right,.semi-table-panel-operation-left{display:flex;justify-content:space-between}.semi-table-panel-operation-selected{color:var(--semi-color-primary-light-active)}.semi-table-pagination-info{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400}.semi-table-pagination-outer{display:flex;justify-content:space-between;align-items:center}.semi-table{width:100%;text-align:left;border-collapse:separate;border-spacing:0;font-size:inherit;display:table}.semi-table-wrapper{zoom:1;position:relative;clear:both;box-sizing:border-box;margin:0;padding:0;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-0);width:100%}.semi-table-wrapper[data-column-fixed=true]{z-index:1}.semi-table-wrapper-ltr,.semi-table-wrapper-ltr .semi-spin{direction:ltr}.semi-table-middle .semi-table-tbody>.semi-table-row>.semi-table-row-cell{padding-top:12px;padding-bottom:12px}.semi-table-small .semi-table-tbody>.semi-table-row>.semi-table-row-cell{padding-top:8px;padding-bottom:8px}.semi-table-title{position:relative;padding:16px 0}.semi-table-container{position:relative}.semi-table-header{overflow:hidden;scrollbar-base-color:rgba(0,0,0,0)}.semi-table-header::-webkit-scrollbar{background-color:#0000;border-bottom:2px solid var(--semi-color-border)}.semi-table-header-sticky{position:sticky;z-index:102}.semi-table-header-sticky .semi-table-thead>.semi-table-row>.semi-table-row-head{background-color:var(--semi-color-bg-1)}.semi-table-header-hidden{height:0}.semi-table-align-center .semi-table-operate-wrapper{justify-content:center}.semi-table-align-right .semi-table-operate-wrapper{justify-content:flex-end}.semi-table-operate-wrapper{display:flex;justify-content:flex-start}.semi-table-body{overflow:auto;width:100%;box-sizing:border-box}.semi-table-colgroup{display:table-column-group}.semi-table-colgroup .semi-table-col{display:table-column}.semi-table-colgroup .semi-table-column-expand,.semi-table-colgroup .semi-table-column-selection{width:48px}.semi-table-thead>.semi-table-row>.semi-table-row-head{background-color:var(--semi-color-bg-1);color:var(--semi-color-text-2);font-weight:600;text-align:left;border-bottom:2px solid var(--semi-color-border);padding:8px 16px;vertical-align:middle;overflow-wrap:break-word;position:relative;transition:background-color var(--semi-transition_duration-none) linear}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-row-head-clickSort{cursor:pointer}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-row-head-clickSort:hover{background-image:linear-gradient(0deg,var(--semi-color-fill-0),var(--semi-color-fill-0));background-color:var(--semi-color-bg-0)}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-left,.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right{z-index:101;position:sticky;background-color:var(--semi-color-bg-1)}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-left-last{border-right:1px solid var(--semi-color-border);box-shadow:3px 0 0 0 var(--semi-color-shadow)}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-left-last.resizing{border-right:2px solid var(--semi-color-primary)}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-left-last.resizing .react-resizable-handle:hover{background-color:unset}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right-first{border-left:1px solid var(--semi-color-border);box-shadow:-3px 0 0 0 var(--semi-color-shadow)}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right-first.resizing{border-right:2px solid var(--semi-color-primary)}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right-first.resizing .react-resizable-handle:hover{background-color:unset}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right-first[x-type=column-scrollbar]{box-shadow:none;border-left:rgba(0,0,0,0)}.semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-column-selection{text-align:center}.semi-table-thead>.semi-table-row>.semi-table-row-head[colspan]:not([colspan="1"]){text-align:center}.semi-table-thead>.semi-table-row>.semi-table-row-head .semi-table-header-column{display:inline-flex;align-items:center}.semi-table-thead>.semi-table-row>.semi-table-row-head-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-table-thead>.semi-table-row>.semi-table-row-head-ellipsis .semi-table-row-head-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-table-thead>.semi-table-row .react-resizable{position:relative;background-clip:padding-box}.semi-table-thead>.semi-table-row .resizing{border-right:2px solid var(--semi-color-primary)}.semi-table-thead>.semi-table-row .resizing .react-resizable-handle:hover{background-color:unset}.semi-table-thead>.semi-table-row .react-resizable-handle{position:absolute;width:9px;height:calc(100% - 8px);background-color:var(--semi-color-border);bottom:4px;right:-1px;cursor:col-resize;z-index:0}.semi-table-thead>.semi-table-row .react-resizable-handle:hover{background-color:var(--semi-color-primary)}.semi-table-tbody{display:table-row-group}.semi-table-tbody>.semi-table-row{display:table-row;background-color:var(--semi-color-bg-1)}.semi-table-tbody>.semi-table-row.semi-table-row-hovered>.semi-table-row-cell{background-image:linear-gradient(0deg,var(--semi-color-fill-0),var(--semi-color-fill-0));background-color:var(--semi-color-bg-0)}.semi-table-tbody>.semi-table-row.semi-table-row-hovered>.semi-table-row-cell.semi-table-cell-fixed-left,.semi-table-tbody>.semi-table-row.semi-table-row-hovered>.semi-table-row-cell.semi-table-cell-fixed-right{background-image:linear-gradient(0deg,var(--semi-color-fill-0),var(--semi-color-fill-0));background-color:var(--semi-color-bg-1)}.semi-table-tbody>.semi-table-row:hover>.semi-table-row-cell{background-image:linear-gradient(0deg,var(--semi-color-fill-0),var(--semi-color-fill-0));background-color:var(--semi-color-bg-0)}.semi-table-tbody>.semi-table-row:hover>.semi-table-row-cell.semi-table-cell-fixed-left,.semi-table-tbody>.semi-table-row:hover>.semi-table-row-cell.semi-table-cell-fixed-right{background-image:linear-gradient(0deg,var(--semi-color-fill-0),var(--semi-color-fill-0));background-color:var(--semi-color-bg-1)}.semi-table-tbody>.semi-table-row>.semi-table-row-cell{display:table-cell;overflow-wrap:break-word;border-left:none;border-right:none;border-bottom:1px solid var(--semi-color-border);padding:16px;box-sizing:border-box;position:relative;vertical-align:middle}.semi-table-tbody>.semi-table-row>.semi-table-row-cell.resizing{border-right:2px solid var(--semi-color-primary)}.semi-table-tbody>.semi-table-row>.semi-table-row-cell-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.semi-table-tbody>.semi-table-row.semi-table-row-expand>.semi-table-row-cell{background-color:var(--semi-color-fill-0)}.semi-table-tbody>.semi-table-row.semi-table-row-hidden{display:none}.semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-left,.semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-right{z-index:101;position:sticky;background-color:var(--semi-color-bg-1)}.semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-left-last{border-right:1px solid var(--semi-color-border);box-shadow:3px 0 0 0 var(--semi-color-shadow)}.semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-right-first{border-left:1px solid var(--semi-color-border);box-shadow:-3px 0 0 0 var(--semi-color-shadow)}.semi-table-tbody>.semi-table-row>.semi-table-cell-fixed>*{transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeOut) 0ms}.semi-table-tbody>.semi-table-row>*{transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeOut) 0ms}.semi-table-tbody>.semi-table-row-section{display:table-row}.semi-table-tbody>.semi-table-row-section>.semi-table-row-cell{background-color:rgba(var(--semi-grey-0),1);border-bottom:1px solid var(--semi-color-border)}.semi-table-tbody>.semi-table-row-section>.semi-table-row-cell:not(.semi-table-column-selection){padding:10px 16px}.semi-table-tbody>.semi-table-row-section .semi-table-section-inner{display:inline-flex;align-items:center}.semi-table-virtualized .semi-table-tbody{display:block}.semi-table-virtualized .semi-table-tbody>.semi-table-row{display:flex}.semi-table-virtualized .semi-table-tbody>.semi-table-row>.semi-table-row-cell{word-wrap:unset;word-break:unset;white-space:nowrap;display:inline-flex;align-items:center;overflow:hidden}.semi-table-virtualized .semi-table-tbody>.semi-table-row-section>.semi-table-row-cell{padding-top:16px;padding-bottom:16px;display:flex}.semi-table-virtualized .semi-table-tbody>.semi-table-row-expand>.semi-table-row-cell{padding:0;overflow:unset}.semi-table-footer{background-color:var(--semi-color-fill-0);padding:16px;margin:0;position:relative}.semi-table .semi-table-selection-wrap{display:inline-flex;vertical-align:bottom}.semi-table .semi-table-selection-disabled{cursor:not-allowed}.semi-table .semi-table-selection-disabled>.semi-checkbox{pointer-events:none}.semi-table .semi-table-column-hidden{display:none}.semi-table .semi-table-column-selection{text-align:center}.semi-table .semi-table-column-selection .semi-checkbox-inner-display .semi-icon{left:0;top:0}.semi-table .semi-table-column-expand .semi-table-expand-icon{transform:translateY(2px)}.semi-table .semi-table-column-expand .semi-table-expand-icon:last-child{margin-right:0}.semi-table .semi-table-column-sorter{display:inline-block;width:16px;height:16px;vertical-align:middle;text-align:center}.semi-table .semi-table-column-sorter-wrapper{display:flex;gap:4px;align-items:center;cursor:pointer;overflow:hidden}.semi-table .semi-table-column-sorter-up,.semi-table .semi-table-column-sorter-down{height:0;display:block;color:var(--semi-color-text-2)}.semi-table .semi-table-column-sorter-up:hover .anticon,.semi-table .semi-table-column-sorter-down:hover .anticon{color:var(--semi-color-text-2)}.semi-table .semi-table-column-sorter-up svg,.semi-table .semi-table-column-sorter-down svg{width:16px;height:16px}.semi-table .semi-table-column-sorter-up.on .semi-icon-caretup,.semi-table .semi-table-column-sorter-up.on .semi-icon-caretdown,.semi-table .semi-table-column-sorter-down.on .semi-icon-caretup,.semi-table .semi-table-column-sorter-down.on .semi-icon-caretdown{color:var(--semi-color-primary)}.semi-table .semi-table-column-filter{margin-left:4px;display:inline-flex;cursor:pointer;color:var(--semi-color-text-2);align-items:center}.semi-table .semi-table-column-filter svg{width:16px;height:16px}.semi-table .semi-table-column-filter.on{color:var(--semi-color-primary)}.semi-table-bordered>.semi-table-title{padding-left:16px;padding-right:16px;border-top:1px solid var(--semi-color-border);border-right:1px solid var(--semi-color-border);border-left:1px solid var(--semi-color-border)}.semi-table-bordered>.semi-table-container{border:1px solid var(--semi-color-border);border-right:0;border-bottom:0}:where(.semi-table-bordered)>.semi-table-container>.semi-table-header::-webkit-scrollbar{border-right:1px solid var(--semi-color-border)}:where(.semi-table-bordered)>.semi-table-container>.semi-table-footer{border-left:1px solid var(--semi-color-border);border-right:1px solid var(--semi-color-border);border-bottom:1px solid var(--semi-color-border)}.semi-table-bordered:not(.semi-table-scroll-position-right)>.semi-table-container:after{content:"";position:absolute;top:0;right:0;bottom:0;width:1px;background-color:var(--semi-color-border);display:block;z-index:103;pointer-events:none}.semi-table-bordered:not(.semi-table-scroll-position-right)>.semi-table-container>.semi-table-header{box-shadow:inset -1px 0 0 0 var(--semi-color-border)}:where(.semi-table-bordered>.semi-table-container)>.semi-table-body>.semi-table-placeholder{border-right:1px solid var(--semi-color-border)}:where(.semi-table-bordered>.semi-table-container>.semi-table-body)>.semi-table>.semi-table-thead>.semi-table-row>.semi-table-row-head .react-resizable-handle{background-color:#0000}:where(.semi-table-bordered>.semi-table-container>.semi-table-body)>.semi-table>.semi-table-thead>.semi-table-row>.semi-table-row-head,:where(.semi-table-bordered>.semi-table-container>.semi-table-body)>.semi-table>.semi-table-tbody>.semi-table-row>.semi-table-row-cell{border-right:1px solid var(--semi-color-border)}:where(.semi-table-bordered>.semi-table-container>.semi-table-header)>.semi-table>.semi-table-thead>.semi-table-row>.semi-table-row-head{border-right:1px solid var(--semi-color-border)}:where(.semi-table-bordered>.semi-table-container>.semi-table-header)>.semi-table>.semi-table-thead>.semi-table-row>.semi-table-row-head .react-resizable-handle{background-color:#0000}.semi-table-placeholder{position:sticky;left:0;z-index:1;box-sizing:border-box;padding:16px 12px;color:var(--semi-color-text-2);font-size:14px;text-align:center;background:#0000;border-bottom:1px solid var(--semi-color-border)}.semi-table-fixed{table-layout:fixed;min-width:100%}.semi-table-fixed>.semi-table-tbody>.semi-table-row-expand>.semi-table-row-cell>.semi-table-expand-inner,.semi-table-fixed>.semi-table-tbody>.semi-table-row-section>.semi-table-row-cell>.semi-table-section-inner{position:sticky;overflow:auto;left:0;margin-left:-16px;margin-right:-16px;padding-left:16px;padding-right:16px;height:100%;display:flex;align-items:center}.semi-table-fixed-header table{table-layout:fixed}.semi-table-scroll-position-left .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-left-last,.semi-table-scroll-position-left .semi-table-thead>.semi-table-row>.semi-table-cell-fixed-left-last{box-shadow:none}.semi-table-scroll-position-right .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-right-first,.semi-table-scroll-position-right .semi-table-thead>.semi-table-row>.semi-table-cell-fixed-right-first{box-shadow:none}.semi-table-pagination-outer{color:var(--semi-color-text-2);min-height:60px}.semi-table-expand-icon{color:var(--semi-color-text-2);cursor:pointer;display:inline-flex;align-items:center;-webkit-user-select:none;user-select:none;background:#0000;position:relative;margin-right:8px}.semi-table-expand-icon-cell{display:inline-flex;align-items:center;justify-content:center}.semi-table-expand-icon .semi-table-expandedIcon-show{transition:transform .15s cubic-bezier(.62,.05,.36,.95);transform:rotate(90deg)}.semi-table-expand-icon .semi-table-expandedIcon-hide{transition:transform .15s cubic-bezier(.62,.05,.36,.95);transform:rotate(0)}.semi-table-column-filter-dropdown .semi-dropdown-menu{max-height:290px;overflow-y:auto}.semi-table-wrapper-rtl .semi-table{direction:rtl;text-align:right}.semi-table-wrapper-rtl .semi-table-align-left .semi-table-operate-wrapper{justify-content:flex-end}.semi-table-wrapper-rtl .semi-table-align-right .semi-table-operate-wrapper{justify-content:flex-start}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row>.semi-table-row-head{text-align:right}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-left-last{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-left-last.resizing{border-left:2px solid var(--semi-color-primary)}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right-first{border-left:0;border-right:1px solid var(--semi-color-border)}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right-first.resizing{border-left:2px solid var(--semi-color-primary)}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row>.semi-table-row-head.semi-table-cell-fixed-right-first[x-type=column-scrollbar]{box-shadow:none;border-right:rgba(0,0,0,0)}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row .resizing{border-left:2px solid var(--semi-color-primary)}.semi-table-wrapper-rtl .semi-table-thead>.semi-table-row .react-resizable-handle{right:auto;left:-1px}.semi-table-wrapper-rtl .semi-table-tbody{display:table-row-group}.semi-table-wrapper-rtl .semi-table-tbody>.semi-table-row>.semi-table-row-cell.resizing{border-right:0;border-left:2px solid var(--semi-color-primary)}.semi-table-wrapper-rtl .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-left-last{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-table-wrapper-rtl .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-right-first{border-left:0;border-right:1px solid var(--semi-color-border)}.semi-table-wrapper-rtl .semi-table .semi-table-column-selection .semi-checkbox-inner-display .semi-icon{left:auto;right:0}.semi-table-wrapper-rtl .semi-table .semi-table-column-expand .semi-table-expand-icon{transform:scaleX(-1) translateY(2px)}.semi-table-wrapper-rtl .semi-table .semi-table-column-expand .semi-table-expand-icon:last-child{margin-right:auto;margin-left:0}.semi-table-wrapper-rtl .semi-table .semi-table-column-sorter,.semi-table-wrapper-rtl .semi-table .semi-table-column-filter{margin-left:0;margin-right:4px}.semi-table-wrapper-rtl .semi-table-bordered .semi-table-container{border-left:0;border-right:1px solid var(--semi-color-border)}.semi-table-wrapper-rtl .semi-table-bordered .semi-table-thead>.semi-table-row>.semi-table-row-head,.semi-table-wrapper-rtl .semi-table-bordered .semi-table-tbody>.semi-table-row>.semi-table-row-cell{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-table-wrapper-rtl .semi-table-bordered .semi-table-placeholder{border-left:1px solid var(--semi-color-border);border-right:0}.semi-table-wrapper-rtl .semi-table-bordered .semi-table-header::-webkit-scrollbar{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-table-wrapper-rtl .semi-table-bordered:not(.semi-table-scroll-position-left)>.semi-table-container:after{content:"";position:absolute;top:0;left:0;bottom:0;width:1px;background-color:var(--semi-color-border);display:block;z-index:103;pointer-events:none}.semi-table-wrapper-rtl .semi-table-fixed>.semi-table-tbody>.semi-table-row-expand>.semi-table-row-cell>.semi-table-expand-inner,.semi-table-wrapper-rtl .semi-table-fixed>.semi-table-tbody>.semi-table-row-section>.semi-table-row-cell>.semi-table-section-inner{left:auto;right:0;margin-right:-16px;margin-left:-16px;padding-right:16px;padding-left:16px}.semi-table-wrapper-rtl .semi-table-scroll-position-left .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-left-last,.semi-table-wrapper-rtl .semi-table-scroll-position-left .semi-table-thead>.semi-table-row>.semi-table-cell-fixed-left-last{box-shadow:3px 0 0 0 var(--semi-color-shadow)}.semi-table-wrapper-rtl .semi-table-scroll-position-left .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-right-first,.semi-table-wrapper-rtl .semi-table-scroll-position-left .semi-table-thead>.semi-table-row>.semi-table-cell-fixed-right-first{box-shadow:none}.semi-table-wrapper-rtl .semi-table-scroll-position-right .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-left-last,.semi-table-wrapper-rtl .semi-table-scroll-position-right .semi-table-thead>.semi-table-row>.semi-table-cell-fixed-left-last{box-shadow:none}.semi-table-wrapper-rtl .semi-table-scroll-position-right .semi-table-tbody>.semi-table-row>.semi-table-cell-fixed-right-first,.semi-table-wrapper-rtl .semi-table-scroll-position-right .semi-table-thead>.semi-table-row>.semi-table-cell-fixed-right-first{box-shadow:-3px 0 0 0 var(--semi-color-shadow)}.semi-table-wrapper-rtl .semi-table-expand-icon{margin-right:auto;margin-left:8px;transform:scaleX(-1) translateY(2px)}.semi-table-wrapper-rtl .semi-spin{direction:rtl}.semi-tabs{box-sizing:border-box;position:relative}.semi-tabs-left{display:flex;flex-direction:row}.semi-tabs-bar{position:relative;white-space:nowrap;outline:none}.semi-tabs-bar-left{display:flex;flex-direction:column}.semi-tabs-bar-extra{padding:0 5px}.semi-tabs-bar-more-trigger{display:inline-block;cursor:pointer;color:var(--semi-color-text-2)}.semi-tabs-bar-more-trigger-content{display:flex;align-content:center}.semi-tabs-bar-more-trigger-content-icon:not(:not(.semi-tabs-bar-more-trigger-content-icon)){margin:0 8px;flex-shrink:0;display:flex;align-items:center}.semi-tabs-bar-more-trigger-line{padding:16px 4px 14px}.semi-tabs-bar-more-trigger-card,.semi-tabs-bar-more-trigger-button{padding:8px 12px}.semi-tabs-bar .semi-tabs-tab{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer;box-sizing:border-box;position:relative;display:block;float:left;font-weight:400;color:var(--semi-color-text-2);-webkit-user-select:none;user-select:none}.semi-tabs-bar .semi-tabs-tab .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){position:relative;margin-right:8px;top:3px;color:var(--semi-color-text-2);transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-tabs-bar .semi-tabs-tab .semi-icon.semi-tabs-tab-icon-close{margin-right:0;font-size:14px;color:var(--semi-color-text-2);margin-left:10px;cursor:pointer}.semi-tabs-bar .semi-tabs-tab:hover{color:var(--semi-color-text-0)}.semi-tabs-bar .semi-tabs-tab:hover .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){color:var(--semi-color-text-0)}.semi-tabs-bar .semi-tabs-tab:active{color:var(--semi-color-text-0)}.semi-tabs-bar .semi-tabs-tab:active .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){color:var(--semi-color-text-0)}.semi-tabs-bar .semi-tabs-tab-active,.semi-tabs-bar .semi-tabs-tab-active:hover{cursor:default;font-weight:600;color:var(--semi-color-text-0)}.semi-tabs-bar .semi-tabs-tab-active .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate),.semi-tabs-bar .semi-tabs-tab-active:hover .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){color:var(--semi-color-primary)}.semi-tabs-bar .semi-tabs-tab-active .semi-icon.semi-tabs-tab-icon-close,.semi-tabs-bar .semi-tabs-tab-active:hover .semi-icon.semi-tabs-tab-icon-close{color:var(--semi-color-text-2)}.semi-tabs-bar .semi-tabs-tab-active .semi-icon.semi-tabs-tab-icon-close:hover{color:var(--semi-color-text-1)}.semi-tabs-bar .semi-tabs-tab-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text)}.semi-tabs-bar .semi-tabs-tab-disabled:hover{color:var(--semi-color-disabled-text);border-bottom:none}.semi-tabs-tab-single.semi-tabs-tab{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer;box-sizing:border-box;position:relative;display:inline-block;font-weight:400;color:var(--semi-color-text-2);-webkit-user-select:none;user-select:none}.semi-tabs-tab-single.semi-tabs-tab .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){position:relative;margin-right:8px;top:3px;color:var(--semi-color-text-2);transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-tabs-tab-single.semi-tabs-tab .semi-icon.semi-tabs-tab-icon-close{margin-right:0;font-size:14px;color:var(--semi-color-text-2);margin-left:10px;cursor:pointer}.semi-tabs-tab-single.semi-tabs-tab .semi-icon.semi-tabs-tab-icon-close.semi-icon-close:hover,.semi-tabs-tab-single.semi-tabs-tab:hover{color:var(--semi-color-text-0)}.semi-tabs-tab-single.semi-tabs-tab:hover .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){color:var(--semi-color-text-0)}.semi-tabs-tab-single.semi-tabs-tab:hover .semi-icon.semi-tabs-tab-icon-close{color:var(--semi-color-text-2)}.semi-tabs-tab-single.semi-tabs-tab:active{color:var(--semi-color-text-0)}.semi-tabs-tab-single.semi-tabs-tab:active .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){color:var(--semi-color-text-0)}.semi-tabs-tab-single.semi-tabs-tab:active .semi-icon.semi-tabs-tab-icon-close{color:var(--semi-color-text-2)}.semi-tabs-tab-single.semi-tabs-tab-active,.semi-tabs-tab-single.semi-tabs-tab-active:hover{cursor:default;font-weight:600;color:var(--semi-color-text-0)}.semi-tabs-tab-single.semi-tabs-tab-active .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate),.semi-tabs-tab-single.semi-tabs-tab-active:hover .semi-icon:not(.semi-icon-checkbox_tick,.semi-icon-radio,.semi-icon-checkbox_indeterminate){color:var(--semi-color-primary)}.semi-tabs-tab-single.semi-tabs-tab-active .semi-icon.semi-tabs-tab-icon-close,.semi-tabs-tab-single.semi-tabs-tab-active:hover .semi-icon.semi-tabs-tab-icon-close{color:var(--semi-color-text-2)}.semi-tabs-tab-single.semi-tabs-tab-active .semi-icon.semi-tabs-tab-icon-close:hover{color:var(--semi-color-text-1)}.semi-tabs-tab-single.semi-tabs-tab-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text)}.semi-tabs-tab-single.semi-tabs-tab-disabled:hover{color:var(--semi-color-disabled-text);border-bottom:none}.semi-tabs-bar-collapse,.semi-tabs-bar-collapse .semi-tabs-bar-overflow-list{display:flex;align-items:center}.semi-tabs-bar-collapse .semi-overflow-list{flex:1}.semi-tabs-bar-collapse .semi-overflow-list .semi-overflow-list-scroll-wrapper{-ms-overflow-style:none;scrollbar-width:none}.semi-tabs-bar-collapse .semi-overflow-list .semi-overflow-list-scroll-wrapper::-webkit-scrollbar{display:none;width:0;height:0}.semi-tabs-bar-collapse .semi-overflow-list .semi-overflow-list-scroll-wrapper:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-tabs-bar-collapse .semi-overflow-list>.semi-button-disabled{color:var(--semi-color-disabled-text);background-color:#0000}.semi-tabs-bar-collapse .semi-overflow-list>.semi-button-disabled:hover{color:var(--semi-color-disabled-text);background-color:#0000}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-start{margin-right:4px}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-start>.semi-button[aria-disabled=false]{color:var(--semi-color-primary);padding:8px;border:0px solid rgba(0,0,0,0);background-color:#0000}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-start>.semi-button[aria-disabled=false]:hover{background-color:var(--semi-color-fill-0);color:var(--semi-color-primary);border-color:#0000}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-start>.semi-button[aria-disabled=false]:active{background-color:var(--semi-color-fill-1);color:var(--semi-color-primary);border-color:#0000}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-end{margin-left:4px}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-end>.semi-button[aria-disabled=false]{color:var(--semi-color-primary);padding:8px;border:0px solid rgba(0,0,0,0);background-color:#0000}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-end>.semi-button[aria-disabled=false]:hover{background-color:var(--semi-color-fill-0);color:var(--semi-color-primary);border-color:#0000}.semi-tabs-bar-collapse .semi-tabs-bar-arrow-end>.semi-button[aria-disabled=false]:active{background-color:var(--semi-color-fill-1);color:var(--semi-color-primary);border-color:#0000}.semi-tabs-bar-dropdown{max-height:300px;overflow-y:auto}.semi-tabs-bar:after{content:"";height:0;display:block;clear:both}.semi-tabs-bar-line.semi-tabs-bar-top{border-bottom:1px solid var(--semi-color-border);transition:color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab{padding:16px 4px 14px;transition:border-bottom-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);border-bottom:2px solid rgba(0,0,0,0)}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:nth-of-type(1){padding-left:0}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:hover{border-bottom:2px solid var(--semi-color-fill-0)}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-1px}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:active{border-bottom:2px solid var(--semi-color-fill-1)}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type){margin-right:24px}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab-small{padding:8px 4px 6px}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab-medium{padding:12px 4px 10px}.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab-active,.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab-active:hover{border-bottom:2px solid var(--semi-color-primary)}.semi-tabs-bar-line.semi-tabs-bar-left{border-right:1px solid var(--semi-color-border)}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab{padding:12px;border-left:2px solid rgba(0,0,0,0);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:hover{border-left:2px solid var(--semi-color-fill-0);background-color:var(--semi-color-fill-0)}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:active{border-left:2px solid var(--semi-color-fill-1);background-color:var(--semi-color-fill-1)}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-small{padding:6px}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-medium{padding:10px}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-active{background-color:var(--semi-color-primary-light-default)}.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-active,.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-active:hover{border-left:2px solid var(--semi-color-primary);background-color:var(--semi-color-primary-light-default)}.semi-tabs-bar-line .semi-tabs-bar-extra{height:50px;line-height:50px}.semi-tabs-bar-line .semi-tabs-bar-line-extra-small{height:36px;line-height:36px}.semi-tabs-bar-card.semi-tabs-bar-top:before{position:absolute;right:0;left:0;bottom:0;border-bottom:1px solid var(--semi-color-border);content:""}.semi-tabs-bar-card.semi-tabs-bar-top .semi-tabs-tab{border:1px solid rgba(0,0,0,0);border-bottom:none;border-radius:var(--semi-border-radius-small) var(--semi-border-radius-small) 0 0}.semi-tabs-bar-card.semi-tabs-bar-top .semi-tabs-tab:hover{border-bottom:none}.semi-tabs-bar-card.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type){margin-right:8px}.semi-tabs-bar-card.semi-tabs-bar-top .semi-tabs-tab-active,.semi-tabs-bar-card.semi-tabs-bar-top .semi-tabs-tab-active:hover{padding:8px 12px 7px;border:1px solid var(--semi-color-border);border-bottom:1px solid var(--semi-color-bg-1);background:#0000}.semi-tabs-bar-card.semi-tabs-bar-left{border-right:1px solid var(--semi-color-border)}.semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab{border:1px solid rgba(0,0,0,0);border-right:none;border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab:hover{border-right:none}.semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab:not(:last-of-type){margin-bottom:8px}.semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab-active:after{content:" ";width:1px;position:absolute;right:-1px;top:0;bottom:0;background:var(--semi-color-bg-1)}.semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab-active,.semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab-active:hover{padding:8px 12px;border:1px solid var(--semi-color-border);border-right:none;background:#0000}.semi-tabs-bar-card .semi-tabs-tab{padding:8px 12px;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-tabs-bar-card .semi-tabs-tab:hover{background:var(--semi-color-fill-0)}.semi-tabs-bar-card .semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-tabs-bar-card .semi-tabs-tab:active{background:var(--semi-color-fill-1)}.semi-tabs-bar-button{border:none}.semi-tabs-bar-button.semi-tabs-bar-left .semi-tabs-tab:not(:last-of-type){margin-bottom:8px}.semi-tabs-bar-button.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type){margin-right:8px}.semi-tabs-bar-button .semi-tabs-tab{padding:8px 12px;border-radius:var(--semi-border-radius-small);color:var(--semi-color-text-2);border:none;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-tabs-bar-button .semi-tabs-tab:hover{border:none;background-color:var(--semi-color-fill-0)}.semi-tabs-bar-button .semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-tabs-bar-button .semi-tabs-tab:active{background-color:var(--semi-color-fill-1)}.semi-tabs-bar-button .semi-tabs-tab-active,.semi-tabs-bar-button .semi-tabs-tab-active:hover{color:var(--semi-color-primary);border:none;background-color:var(--semi-color-primary-light-default)}.semi-tabs-bar-slash .semi-tabs-tab{padding:12px 0}.semi-tabs-bar-slash .semi-tabs-tab:nth-of-type(1){padding-left:0}.semi-tabs-bar-slash .semi-tabs-tab:not(:last-of-type){margin-right:16px}.semi-tabs-bar-slash .semi-tabs-tab:not(:last-of-type):after{content:"";margin-left:16px;display:inline-block;height:14px;width:8px;margin-top:3px;margin-bottom:3px;vertical-align:bottom;background:linear-gradient(to bottom right,transparent 0%,transparent calc(50% - 1px),var(--semi-color-text-2) 50%,transparent calc(50% + 1px),transparent 100%)}.semi-tabs-content{width:100%;padding:5px 0}.semi-tabs-content-left{height:100%;padding:0 5px}.semi-tabs-pane{width:100%;overflow:hidden;color:var(--semi-color-text-0)}.semi-tabs-pane:focus-visible{outline:2px solid var(--semi-color-primary-light-active)}.semi-tabs-pane-inactive,.semi-tabs-content-no-animated .semi-tabs-pane-inactive{display:none}@keyframes semi-tabs-panel-keyframe-leftShow{0%{transform:translate(60px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes semi-tabs-panel-keyframe-rightShow{0%{transform:translate(-60px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes semi-tabs-panel-keyframe-topShow{0%{transform:translateY(60px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes semi-tabs-panel-keyframe-bottomShow{0%{transform:translateY(-60px);opacity:0}to{transform:translateY(0);opacity:1}}.semi-tabs-pane-animate-leftShow{animation:.2s semi-tabs-panel-keyframe-leftShow ease-in-out 0s;animation-fill-mode:forwards}.semi-tabs-pane-animate-rightShow{animation:.2s semi-tabs-panel-keyframe-rightShow ease-in-out 0s;animation-fill-mode:forwards}.semi-tabs-pane-animate-topShow{animation:.2s semi-tabs-panel-keyframe-topShow ease-in-out 0s;animation-fill-mode:forwards}.semi-tabs-pane-animate-bottomShow{animation:.2s semi-tabs-panel-keyframe-bottomShow ease-in-out 0s;animation-fill-mode:forwards}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab{font-size:14px;padding:16px 4px 14px;transition:border-bottom-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);border-bottom:2px solid rgba(0,0,0,0)}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab:nth-of-type(1){padding-left:0}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab:hover{border-bottom:2px solid var(--semi-color-fill-0)}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-1px}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab:active{border-bottom:2px solid var(--semi-color-fill-1)}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab-small{font-size:14px;padding:8px 4px 6px}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab-medium{font-size:14px;padding:12px 4px 10px}.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab-active,.semi-tabs-tab-line.semi-tabs-tab-top.semi-tabs-tab-active:hover{border-bottom:2px solid var(--semi-color-primary)}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab{padding:12px;border-left:2px solid rgba(0,0,0,0);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab:hover{border-left:2px solid var(--semi-color-fill-0);background-color:var(--semi-color-fill-0)}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab:active{border-left:2px solid var(--semi-color-fill-1);background-color:var(--semi-color-fill-1)}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab-small{padding:6px}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab-medium{padding:10px}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab-active{background-color:var(--semi-color-primary-light-default)}.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab-active,.semi-tabs-tab-line.semi-tabs-tab-left.semi-tabs-tab-active:hover{border-left:2px solid var(--semi-color-primary);background-color:var(--semi-color-primary-light-default)}.semi-tabs-tab-card.semi-tabs-tab-top.semi-tabs-tab{border:1px solid rgba(0,0,0,0);border-bottom:none;border-radius:var(--semi-border-radius-small) var(--semi-border-radius-small) 0 0}.semi-tabs-tab-card.semi-tabs-tab-top.semi-tabs-tab:hover{border-bottom:none}.semi-tabs-tab-card.semi-tabs-tab-top.semi-tabs-tab-active,.semi-tabs-tab-card.semi-tabs-tab-top.semi-tabs-tab-active:hover{padding:8px 12px 7px;border:1px solid var(--semi-color-border);border-bottom:1px solid var(--semi-color-bg-1);background:#0000}.semi-tabs-tab-card.semi-tabs-tab-left.semi-tabs-tab{border:1px solid rgba(0,0,0,0);border-right:none;border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small)}.semi-tabs-tab-card.semi-tabs-tab-left.semi-tabs-tab:hover{border-right:none}.semi-tabs-tab-card.semi-tabs-tab-left.semi-tabs-tab-active:after{content:" ";width:1px;position:absolute;right:-1px;top:0;bottom:0;background:var(--semi-color-bg-1)}.semi-tabs-tab-card.semi-tabs-tab-left.semi-tabs-tab-active,.semi-tabs-tab-card.semi-tabs-tab-left.semi-tabs-tab-active:hover{padding:8px 12px;border:1px solid var(--semi-color-border);border-right:none;background:#0000}.semi-tabs-tab-card.semi-tabs-tab{padding:8px 12px;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-tabs-tab-card.semi-tabs-tab:hover{background:var(--semi-color-fill-0)}.semi-tabs-tab-card.semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-tabs-tab-card.semi-tabs-tab:active{background:var(--semi-color-fill-1)}.semi-tabs-tab-button{border:none}.semi-tabs-tab-button.semi-tabs-tab{padding:8px 12px;border-radius:var(--semi-border-radius-small);color:var(--semi-color-text-2);border:none;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none))}.semi-tabs-tab-button.semi-tabs-tab:hover{border:none;background-color:var(--semi-color-fill-0)}.semi-tabs-tab-button.semi-tabs-tab:focus-visible{outline:2px solid var(--semi-color-primary-light-active);outline-offset:-2px}.semi-tabs-tab-button.semi-tabs-tab:active{background-color:var(--semi-color-fill-1)}.semi-tabs-tab-button.semi-tabs-tab-active,.semi-tabs-tab-button.semi-tabs-tab-active:hover{color:var(--semi-color-primary);border:none;background-color:var(--semi-color-primary-light-default)}.semi-rtl .semi-tabs,.semi-portal-rtl .semi-tabs{direction:rtl}.semi-rtl .semi-tabs-bar .semi-tabs-tab,.semi-portal-rtl .semi-tabs-bar .semi-tabs-tab{float:right}.semi-rtl .semi-tabs-bar .semi-tabs-tab .semi-icon,.semi-portal-rtl .semi-tabs-bar .semi-tabs-tab .semi-icon{margin-right:0;margin-left:8px}.semi-rtl .semi-tabs-bar-collapse .semi-tabs-bar-arrow-start,.semi-portal-rtl .semi-tabs-bar-collapse .semi-tabs-bar-arrow-start{margin-right:0;margin-left:4px}.semi-rtl .semi-tabs-bar-collapse .semi-tabs-bar-arrow-end,.semi-portal-rtl .semi-tabs-bar-collapse .semi-tabs-bar-arrow-end{margin-left:0;margin-right:4px}.semi-rtl .semi-tabs-bar-collapse .semi-icon-chevron_right,.semi-rtl .semi-tabs-bar-collapse .semi-icon-chevron_left,.semi-portal-rtl .semi-tabs-bar-collapse .semi-icon-chevron_right,.semi-portal-rtl .semi-tabs-bar-collapse .semi-icon-chevron_left{transform:scaleX(-1)}.semi-rtl .semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type),.semi-portal-rtl .semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type){margin-right:0;margin-left:24px}.semi-rtl .semi-tabs-bar-line.semi-tabs-bar-left,.semi-portal-rtl .semi-tabs-bar-line.semi-tabs-bar-left{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab,.semi-portal-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab{border-left:0;border-right:2px solid rgba(0,0,0,0)}.semi-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:hover,.semi-portal-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:hover{border-left:0;border-right:2px solid var(--semi-color-fill-0)}.semi-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:active,.semi-portal-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:active{border-left:0;border-right:2px solid var(--semi-color-fill-1)}.semi-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-active,.semi-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-active:hover,.semi-portal-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-active,.semi-portal-rtl .semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab-active:hover{border-left:0;border-right:2px solid var(--semi-color-primary)}.semi-rtl .semi-tabs-bar-card.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type),.semi-portal-rtl .semi-tabs-bar-card.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type){margin-left:0;margin-right:8px}.semi-rtl .semi-tabs-bar-card.semi-tabs-bar-left,.semi-portal-rtl .semi-tabs-bar-card.semi-tabs-bar-left{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-rtl .semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab,.semi-portal-rtl .semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab{border:1px solid rgba(0,0,0,0);border-left:none}.semi-rtl .semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab:hover,.semi-portal-rtl .semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab:hover{border-left:none}.semi-rtl .semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab-active:after,.semi-portal-rtl .semi-tabs-bar-card.semi-tabs-bar-left .semi-tabs-tab-active:after{right:auto;left:-1px}.semi-rtl .semi-tabs-bar-button.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type),.semi-portal-rtl .semi-tabs-bar-button.semi-tabs-bar-top .semi-tabs-tab:not(:last-of-type){margin-right:auto;margin-left:8px}.semi-tag{box-sizing:border-box;border-radius:var(--semi-border-radius-small);background-color:#0000;position:relative;-webkit-user-select:none;user-select:none;overflow:hidden;white-space:nowrap;vertical-align:bottom;display:flex;justify-content:center;align-items:center;display:inline-flex}.semi-tag-default,.semi-tag-small{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;height:20px;padding:2px 8px}.semi-tag-default:focus-visible,.semi-tag-small:focus-visible{outline:2px solid var(--semi-color-primary-light-active)}.semi-tag-square{border-radius:var(--semi-border-radius-small)}.semi-tag-circle{border-radius:var(--semi-border-radius-full)}.semi-tag-large{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;padding:4px 8px;height:24px}.semi-tag-large:focus-visible{outline:2px solid var(--semi-color-primary-light-active)}.semi-tag-invisible{display:none}.semi-tag-prefix-icon{display:flex;padding-right:4px}.semi-tag-suffix-icon{display:flex;padding-left:4px}.semi-tag-content{flex:1}.semi-tag-content-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.semi-tag-content-center{display:flex;justify-content:center;align-items:center;height:100%;min-width:0}.semi-tag-close{display:flex;justify-content:center;align-items:center;color:var(--semi-color-text-2);padding-left:4px;cursor:pointer}.semi-tag-close:hover{color:var(--semi-color-text-1)}.semi-tag-close:active{color:var(--semi-color-text-0)}.semi-tag-closable{padding:4px 4px 4px 8px}.semi-tag-avatar-square .semi-avatar,.semi-tag-avatar-circle .semi-avatar{margin-right:4px}.semi-tag-avatar-square{padding:0 4px 0 0}.semi-tag-avatar-square .semi-avatar>img{background-color:var(--semi-color-default)}.semi-tag-avatar-circle{padding:2px 4px 2px 2px}.semi-tag-avatar-square.semi-tag-default .semi-avatar,.semi-tag-avatar-square.semi-tag-small .semi-avatar{width:20px;height:20px}.semi-tag-avatar-square.semi-tag-large .semi-avatar{width:24px;height:24px}.semi-tag-avatar-circle.semi-tag-small,.semi-tag-avatar-circle.semi-tag-default{border-radius:11px}.semi-tag-avatar-circle.semi-tag-small .semi-avatar,.semi-tag-avatar-circle.semi-tag-default .semi-avatar{width:16px;height:16px}.semi-tag-avatar-circle.semi-tag-large{border-radius:13px}.semi-tag-avatar-circle.semi-tag-large .semi-avatar{width:20px;height:20px}.semi-tag-colorful{font-weight:600}.semi-tag-colorful.semi-tag-solid{background:var(--semi-color-ai-purple);color:var(--semi-color-white)}.semi-tag-colorful.semi-tag-solid.semi-tag-gradient{background:var(--semi-color-ai-general)}.semi-tag-colorful.semi-tag-light{background:rgba(var(--semi-ai-purple-0),1);color:var(--semi-color-ai-purple)}.semi-tag-colorful.semi-tag-light.semi-tag-gradient{background:var(--semi-ai-general-0)}.semi-tag-colorful.semi-tag-light.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(1){stop-color:rgba(var(--semi-ai-general-5-0),1)}.semi-tag-colorful.semi-tag-light.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(2){stop-color:rgba(var(--semi-ai-general-5-1),1)}.semi-tag-colorful.semi-tag-light.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(3){stop-color:rgba(var(--semi-ai-general-5-2),1)}.semi-tag-colorful.semi-tag-light.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(4){stop-color:rgba(var(--semi-ai-general-5-3),1)}.semi-tag-colorful.semi-tag-light.semi-tag-gradient .semi-tag-content{background:var(--semi-color-ai-general);-webkit-background-clip:text;background-clip:text;color:#0000}.semi-tag-colorful.semi-tag-ghost{background:var(--semi-color-white);color:var(--semi-color-ai-purple);border-color:var(--semi-color-ai-general)}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient{border:none}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(1){stop-color:rgba(var(--semi-ai-general-5-0),1)}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(2){stop-color:rgba(var(--semi-ai-general-5-1),1)}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(3){stop-color:rgba(var(--semi-ai-general-5-2),1)}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient .semi-tag-prefix-icon svg stop:nth-child(4){stop-color:rgba(var(--semi-ai-general-5-3),1)}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient.semi-tag-circle:before{border-radius:var(--semi-border-radius-full)}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:var(--semi-border-radius-small);padding:1px;background:var(--semi-color-ai-general);-webkit-mask:linear-gradient(var(--semi-color-white) 0 0) content-box,linear-gradient(var(--semi-color-white) 0 0);mask:linear-gradient(var(--semi-color-white) 0 0) content-box,linear-gradient(var(--semi-color-white) 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none}.semi-tag-colorful.semi-tag-ghost.semi-tag-gradient .semi-tag-content{background:var(--semi-color-ai-general);-webkit-background-clip:text;background-clip:text;color:#0000}.semi-tag-group{display:block;height:auto}.semi-tag-group .semi-tag{margin-bottom:0;margin-right:8px}.semi-tag-group-max.semi-tag-group-small{height:22px}.semi-tag-group-max.semi-tag-group-large{height:26px}.semi-tag-rest-group-popover .semi-tag{margin-right:8px;margin-bottom:0}.semi-tag-rest-group-popover .semi-tag:last-of-type{margin-right:0}.semi-tag-amber-ghost{background-color:#0000;border:1px solid rgba(var(--semi-amber-4),1);color:rgba(var(--semi-amber-5),1)}.semi-tag-amber-solid{background-color:rgba(var(--semi-amber-5),1);color:rgba(var(--semi-white),1)}.semi-tag-amber-light{background-color:rgba(var(--semi-amber-5),.15);color:rgba(var(--semi-amber-8),1)}.semi-tag-blue-ghost{background-color:#0000;border:1px solid rgba(var(--semi-blue-4),1);color:rgba(var(--semi-blue-5),1)}.semi-tag-blue-solid{background-color:rgba(var(--semi-blue-5),1);color:rgba(var(--semi-white),1)}.semi-tag-blue-light{background-color:rgba(var(--semi-blue-5),.15);color:rgba(var(--semi-blue-8),1)}.semi-tag-cyan-ghost{background-color:#0000;border:1px solid rgba(var(--semi-cyan-4),1);color:rgba(var(--semi-cyan-5),1)}.semi-tag-cyan-solid{background-color:rgba(var(--semi-cyan-5),1);color:rgba(var(--semi-white),1)}.semi-tag-cyan-light{background-color:rgba(var(--semi-cyan-5),.15);color:rgba(var(--semi-cyan-8),1)}.semi-tag-green-ghost{background-color:#0000;border:1px solid rgba(var(--semi-green-4),1);color:rgba(var(--semi-green-5),1)}.semi-tag-green-solid{background-color:rgba(var(--semi-green-5),1);color:rgba(var(--semi-white),1)}.semi-tag-green-light{background-color:rgba(var(--semi-green-5),.15);color:rgba(var(--semi-green-8),1)}.semi-tag-grey-ghost{background-color:#0000;border:1px solid rgba(var(--semi-grey-4),1);color:rgba(var(--semi-grey-5),1)}.semi-tag-grey-solid{background-color:rgba(var(--semi-grey-5),1);color:rgba(var(--semi-white),1)}.semi-tag-grey-light{background-color:rgba(var(--semi-grey-5),.15);color:rgba(var(--semi-grey-8),1)}.semi-tag-indigo-ghost{background-color:#0000;border:1px solid rgba(var(--semi-indigo-4),1);color:rgba(var(--semi-indigo-5),1)}.semi-tag-indigo-solid{background-color:rgba(var(--semi-indigo-5),1);color:rgba(var(--semi-white),1)}.semi-tag-indigo-light{background-color:rgba(var(--semi-indigo-5),.15);color:rgba(var(--semi-indigo-8),1)}.semi-tag-light-blue-ghost{background-color:#0000;border:1px solid rgba(var(--semi-light-blue-4),1);color:rgba(var(--semi-light-blue-5),1)}.semi-tag-light-blue-solid{background-color:rgba(var(--semi-light-blue-5),1);color:rgba(var(--semi-white),1)}.semi-tag-light-blue-light{background-color:rgba(var(--semi-light-blue-5),.15);color:rgba(var(--semi-light-blue-8),1)}.semi-tag-light-green-ghost{background-color:#0000;border:1px solid rgba(var(--semi-light-green-4),1);color:rgba(var(--semi-light-green-5),1)}.semi-tag-light-green-solid{background-color:rgba(var(--semi-light-green-5),1);color:rgba(var(--semi-white),1)}.semi-tag-light-green-light{background-color:rgba(var(--semi-light-green-5),.15);color:rgba(var(--semi-light-green-8),1)}.semi-tag-lime-ghost{background-color:#0000;border:1px solid rgba(var(--semi-lime-4),1);color:rgba(var(--semi-lime-5),1)}.semi-tag-lime-solid{background-color:rgba(var(--semi-lime-5),1);color:rgba(var(--semi-white),1)}.semi-tag-lime-light{background-color:rgba(var(--semi-lime-5),.15);color:rgba(var(--semi-lime-8),1)}.semi-tag-orange-ghost{background-color:#0000;border:1px solid rgba(var(--semi-orange-4),1);color:rgba(var(--semi-orange-5),1)}.semi-tag-orange-solid{background-color:rgba(var(--semi-orange-5),1);color:rgba(var(--semi-white),1)}.semi-tag-orange-light{background-color:rgba(var(--semi-orange-5),.15);color:rgba(var(--semi-orange-8),1)}.semi-tag-pink-ghost{background-color:#0000;border:1px solid rgba(var(--semi-pink-4),1);color:rgba(var(--semi-pink-5),1)}.semi-tag-pink-solid{background-color:rgba(var(--semi-pink-5),1);color:rgba(var(--semi-white),1)}.semi-tag-pink-light{background-color:rgba(var(--semi-pink-5),.15);color:rgba(var(--semi-pink-8),1)}.semi-tag-purple-ghost{background-color:#0000;border:1px solid rgba(var(--semi-purple-4),1);color:rgba(var(--semi-purple-5),1)}.semi-tag-purple-solid{background-color:rgba(var(--semi-purple-5),1);color:rgba(var(--semi-white),1)}.semi-tag-purple-light{background-color:rgba(var(--semi-purple-5),.15);color:rgba(var(--semi-purple-8),1)}.semi-tag-red-ghost{background-color:#0000;border:1px solid rgba(var(--semi-red-4),1);color:rgba(var(--semi-red-5),1)}.semi-tag-red-solid{background-color:rgba(var(--semi-red-5),1);color:rgba(var(--semi-white),1)}.semi-tag-red-light{background-color:rgba(var(--semi-red-5),.15);color:rgba(var(--semi-red-8),1)}.semi-tag-teal-ghost{background-color:#0000;border:1px solid rgba(var(--semi-teal-4),1);color:rgba(var(--semi-teal-5),1)}.semi-tag-teal-solid{background-color:rgba(var(--semi-teal-5),1);color:rgba(var(--semi-white),1)}.semi-tag-teal-light{background-color:rgba(var(--semi-teal-5),.15);color:rgba(var(--semi-teal-8),1)}.semi-tag-violet-ghost{background-color:#0000;border:1px solid rgba(var(--semi-violet-4),1);color:rgba(var(--semi-violet-5),1)}.semi-tag-violet-solid{background-color:rgba(var(--semi-violet-5),1);color:rgba(var(--semi-white),1)}.semi-tag-violet-light{background-color:rgba(var(--semi-violet-5),.15);color:rgba(var(--semi-violet-8),1)}.semi-tag-yellow-ghost{background-color:#0000;border:1px solid rgba(var(--semi-yellow-4),1);color:rgba(var(--semi-yellow-5),1)}.semi-tag-yellow-solid{background-color:rgba(var(--semi-yellow-5),1);color:rgba(var(--semi-white),1)}.semi-tag-yellow-light{background-color:rgba(var(--semi-yellow-5),.15);color:rgba(var(--semi-yellow-8),1)}.semi-tag-white-ghost,.semi-tag-white-solid,.semi-tag-white-light{background-color:var(--semi-color-bg-4);border:1px solid rgba(var(--semi-grey-2),.7);color:var(--semi-color-text-0)}.semi-tag-white-ghost .semi-tag-close,.semi-tag-white-light .semi-tag-close,.semi-tag-white-solid .semi-tag-close{color:var(--semi-color-text-2)}.semi-tag-avatar-square,.semi-tag-avatar-circle{background-color:var(--semi-color-bg-4);border:1px solid var(--semi-color-border);color:var(--semi-color-text-0)}.semi-tag-split{display:inline-flex;align-items:center}.semi-tag-split .semi-tag{border-radius:0;margin-right:1px}.semi-tag-split .semi-tag-first{border-top-left-radius:var(--semi-border-radius-small);border-bottom-left-radius:var(--semi-border-radius-small)}.semi-tag-split .semi-tag-last{border-top-right-radius:var(--semi-border-radius-small);border-bottom-right-radius:var(--semi-border-radius-small);margin-right:unset}.semi-tag-split .semi-tag-circle.semi-tag-first{border-top-left-radius:var(--semi-border-radius-full);border-bottom-left-radius:var(--semi-border-radius-full)}.semi-tag-split .semi-tag-circle.semi-tag-last{border-top-right-radius:var(--semi-border-radius-full);border-bottom-right-radius:var(--semi-border-radius-full)}.semi-rtl .semi-tag,.semi-portal-rtl .semi-tag{direction:rtl}.semi-rtl .semi-tag-close,.semi-portal-rtl .semi-tag-close{padding-left:auto;padding-right:4px}.semi-rtl .semi-tag-closable,.semi-portal-rtl .semi-tag-closable{padding:4px 8px 4px 4px}.semi-rtl .semi-tag-avatar-square .semi-avatar,.semi-rtl .semi-tag-avatar-circle .semi-avatar,.semi-portal-rtl .semi-tag-avatar-square .semi-avatar,.semi-portal-rtl .semi-tag-avatar-circle .semi-avatar{margin-right:auto;margin-left:4px}.semi-rtl .semi-tag-avatar-square,.semi-portal-rtl .semi-tag-avatar-square{padding-right:auto;padding-left:4px}.semi-rtl .semi-tag-avatar-circle,.semi-portal-rtl .semi-tag-avatar-circle{padding:2px 2px 2px 4px}.semi-rtl .semi-tag-group,.semi-portal-rtl .semi-tag-group{direction:rtl}.semi-rtl .semi-tag-group .semi-tag,.semi-portal-rtl .semi-tag-group .semi-tag{margin-right:auto;margin-left:8px}.semi-rtl .semi-tag-rest-group-popover,.semi-portal-rtl .semi-tag-rest-group-popover{direction:rtl}.semi-rtl .semi-tag-rest-group-popover .semi-tag,.semi-portal-rtl .semi-tag-rest-group-popover .semi-tag{margin-right:0;margin-left:8px}.semi-rtl .semi-tag-rest-group-popover .semi-tag:last-of-type,.semi-portal-rtl .semi-tag-rest-group-popover .semi-tag:last-of-type{margin-right:auto;margin-left:0}.semi-tagInput{background-color:var(--semi-color-fill-0);border:1px rgba(0,0,0,0) solid;border-radius:var(--semi-border-radius-small);display:inline-flex;font-weight:400;width:100%;min-height:32px;box-sizing:border-box;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-tagInput-small{min-height:24px}.semi-tagInput-large{min-height:40px}.semi-tagInput-drag-item{display:flex;align-items:center}.semi-tagInput-drag-item-move{z-index:2000}.semi-tagInput-drag-handler{color:var(--semi-color-text-2);margin-right:4px;cursor:move}.semi-tagInput-sortable-item{position:relative;max-width:100%}.semi-tagInput-sortable-item-over{overflow:visible}.semi-tagInput-sortable-item-over:before{content:"";display:block;height:100%;width:2px;background-color:var(--semi-color-primary);position:absolute;left:-2px;top:0}.semi-tagInput-sortable-item-active{opacity:.5}.semi-tagInput-hover{background-color:var(--semi-color-fill-1);border:1px rgba(0,0,0,0) solid}.semi-tagInput-focus{background-color:var(--semi-color-fill-0);border:1px var(--semi-color-focus-border) solid}.semi-tagInput-warning{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning-light-default)}.semi-tagInput-warning:hover{background-color:var(--semi-color-warning-light-hover);border-color:var(--semi-color-warning-light-hover)}.semi-tagInput-warning.semi-tagInput-focus{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning)}.semi-tagInput-error{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger-light-default)}.semi-tagInput-error:hover{background-color:var(--semi-color-danger-light-hover);border-color:var(--semi-color-danger-light-hover)}.semi-tagInput-error.semi-tagInput-focus{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger)}.semi-tagInput-disabled{background-color:var(--semi-color-disabled-fill);cursor:not-allowed}.semi-tagInput-disabled .semi-tagInput-clearBtn,.semi-tagInput-disabled .semi-tagInput-prefix,.semi-tagInput-disabled .semi-tagInput-suffix{color:var(--semi-color-disabled-text)}.semi-tagInput-disabled .semi-tagInput-wrapper{cursor:not-allowed}.semi-tagInput-disabled .semi-tagInput-wrapper-tag{color:var(--semi-color-disabled-text);background-color:#0000}.semi-tagInput-disabled .semi-tagInput-wrapper-input{cursor:not-allowed}.semi-tagInput-disabled .semi-tagInput-wrapper-input::placeholder{color:var(--semi-color-disabled-text)}.semi-tagInput-wrapper{display:flex;flex-wrap:wrap;flex-grow:1;align-items:center;padding-left:4px;padding-right:4px;overflow:hidden;position:relative}.semi-tagInput-wrapper-tag{margin-right:4px;white-space:pre;max-width:100%}.semi-tagInput-wrapper-tag-size-small{margin-top:1px;margin-bottom:1px}.semi-tagInput-wrapper-tag-size-default{margin-top:2px;margin-bottom:2px}.semi-tagInput-wrapper-tag-size-large{margin-top:3px;margin-bottom:3px}.semi-tagInput-wrapper-tag-icon{padding-left:4px}.semi-tagInput-wrapper-typo{font-size:12px}.semi-tagInput-wrapper-typo-disabled{color:var(--semi-color-disabled-text)}.semi-tagInput-wrapper-n{cursor:pointer;font-size:12px;margin-right:4px;color:var(--semi-color-text-0);padding-left:8px;padding-right:8px}.semi-tagInput-wrapper-n-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text)}.semi-tagInput-wrapper .semi-tagInput-wrapper-input{flex-grow:1;width:min-content;min-width:2px;max-width:100%;border:none;outline:none;background-color:#0000;font-size:14px}.semi-tagInput-wrapper .semi-tagInput-wrapper-input:hover{background-color:#0000}.semi-tagInput-wrapper .semi-tagInput-wrapper-input:not(:first-child)>input{padding-left:0}.semi-tagInput-wrapper .semi-tagInput-wrapper-input-small{height:20px;margin-top:1px;margin-bottom:1px;line-height:20px}.semi-tagInput-wrapper .semi-tagInput-wrapper-input-small .semi-input-small{height:20px;line-height:20px}.semi-tagInput-wrapper .semi-tagInput-wrapper-input-default{height:24px;margin-top:2px;margin-bottom:2px;line-height:24px}.semi-tagInput-wrapper .semi-tagInput-wrapper-input-default .semi-input-default{height:24px;line-height:24px}.semi-tagInput-wrapper .semi-tagInput-wrapper-input-large{height:24px;margin-top:3px;margin-bottom:3px;line-height:24px}.semi-tagInput-wrapper .semi-tagInput-wrapper-input-large .semi-input-large{height:24px;line-height:24px}.semi-tagInput-wrapper-inputMirror{position:absolute;top:0;left:0;visibility:hidden;pointer-events:none;height:0;overflow:hidden;white-space:pre;font-size:14px;font-weight:400;font-family:inherit}.semi-tagInput-clearBtn{display:flex;justify-content:center;align-items:center;width:32px;flex-shrink:0;color:var(--semi-color-text-2)}.semi-tagInput-clearBtn:hover{cursor:pointer;color:var(--semi-color-primary-hover)}.semi-tagInput-clearBtn-invisible{visibility:hidden}.semi-tagInput-inset-label{margin:0 12px;font-weight:600;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2);flex-shrink:0;white-space:nowrap}.semi-tagInput-prefix,.semi-tagInput-suffix{display:flex;justify-content:center;align-items:center}.semi-tagInput-prefix-text,.semi-tagInput-suffix-text{margin:0 12px;font-weight:600;white-space:nowrap;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-tagInput-prefix-icon,.semi-tagInput-suffix-icon{color:var(--semi-color-text-2);margin:0 8px}.semi-tagInput-prefix-text,.semi-tagInput-suffix-text{color:var(--semi-color-text-2)}.semi-tagInput-with-prefix .semi-input{padding-left:0}.semi-tagInput-tag-content-wrapper{display:flex;align-items:center}.semi-tagInput-sortable-list{display:flex;flex-flow:row wrap;width:100%}.semi-rtl .semi-tagInput,.semi-portal-rtl .semi-tagInput{direction:rtl}.semi-rtl .semi-tagInput-wrapper-tag,.semi-portal-rtl .semi-tagInput-wrapper-tag{margin-left:4px;margin-right:0}.semi-rtl .semi-tagInput-wrapper-input:not(:first-child)>input,.semi-portal-rtl .semi-tagInput-wrapper-input:not(:first-child)>input{padding-right:0}.semi-timepicker{display:inline-block}.semi-timepicker-panel .semi-scrolllist-body{height:252px}.semi-timepicker-panel .semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer-nocycle>ul:before,.semi-timepicker-panel .semi-scrolllist-body .semi-scrolllist-item>ul:before{height:108px}.semi-timepicker-panel .semi-scrolllist-body .semi-scrolllist-item,.semi-timepicker-panel .semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer{-ms-overflow-style:none;scrollbar-width:none}.semi-timepicker-panel .semi-scrolllist-body .semi-scrolllist-item::-webkit-scrollbar,.semi-timepicker-panel .semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer::-webkit-scrollbar{display:none;width:0;height:0}.semi-timepicker-panel .semi-scrolllist-body .semi-scrolllist-item>ul,.semi-timepicker-panel .semi-scrolllist-body .semi-scrolllist-item-wheel .semi-scrolllist-list-outer>ul{padding-bottom:108px}.semi-timepicker-panel .semi-scrolllist-body .semi-scrolllist-item{-ms-overflow-style:none;scrollbar-width:none}.semi-timepicker-panel .semi-scrolllist-body .semi-scrolllist-item::-webkit-scrollbar{display:none;width:0;height:0}.semi-timepicker-panel .semi-scrolllist-item,.semi-timepicker-panel .semi-scrolllist-item-wheel{flex:none}.semi-timepicker-panel .semi-scrolllist-item-wheel,.semi-timepicker-panel .semi-scrolllist-item-wheel:not(:last-child){border:none}.semi-timepicker-panel-list-ampm{width:72px}.semi-timepicker-panel-list-hour,.semi-timepicker-panel-list-minute,.semi-timepicker-panel-list-second{width:64px}.semi-timepicker-range-panel .semi-timepicker-lists{display:flex;box-shadow:0 4px 14px #0000001a;border:1px solid rgba(0,0,0,.1);border-radius:var(--semi-border-radius-medium)}.semi-timepicker-range-panel .semi-timepicker-lists .semi-scrolllist:first-of-type{border-radius:var(--semi-border-radius-medium) 0 0 var(--semi-border-radius-medium)}.semi-timepicker-range-panel .semi-timepicker-lists .semi-scrolllist:last-of-type{border-radius:0 var(--semi-border-radius-medium) var(--semi-border-radius-medium) 0}.semi-timepicker-range-panel .semi-timepicker-lists>.semi-scrolllist:not(:last-child) .semi-scrolllist-body{border-right:2px solid var(--semi-color-border)}.semi-timepicker-range-panel .semi-timepicker-lists>.semi-scrolllist{box-shadow:none}.semi-timepicker-range-panel .semi-timepicker-lists>.semi-scrolllist .semi-scrolllist-body,.semi-timepicker-range-panel .semi-timepicker-lists>.semi-scrolllist .semi-scrolllist-header{padding:0}.semi-timepicker .semi-timepicker-input{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;border-radius:var(--semi-border-radius-small);align-items:center}.semi-timepicker .semi-input-readonly{cursor:pointer}.semi-timepicker .semi-input-borderless:not(:focus-within):not(:hover) .semi-input-suffix{opacity:0}.semi-rtl .semi-timepicker,.semi-portal-rtl .semi-timepicker,.semi-rtl .semi-timepicker-panel,.semi-portal-rtl .semi-timepicker-panel,.semi-rtl .semi-timepicker-range,.semi-portal-rtl .semi-timepicker-range{direction:rtl}.semi-rtl .semi-timepicker-range-panel .semi-timepicker-lists>.semi-scrolllist:not(:last-child) .semi-scrolllist-body,.semi-portal-rtl .semi-timepicker-range-panel .semi-timepicker-lists>.semi-scrolllist:not(:last-child) .semi-scrolllist-body{border-right:0;border-left:2px solid var(--semi-color-border)}.semi-timeline{margin:0;padding:8px;width:100%;list-style:none}.semi-timeline-item{position:relative;margin:0;padding:0 0 24px;list-style:none}.semi-timeline-item-tail{position:absolute;top:20px;left:4px;height:calc(100% - 20px);border-left:1px solid var(--semi-color-text-3)}.semi-timeline-item-head{position:absolute;top:5px;width:9px;height:9px;border-radius:var(--semi-border-radius-circle)}.semi-timeline-item-head-ongoing{background-color:var(--semi-color-primary)}.semi-timeline-item-head-default{background-color:var(--semi-color-tertiary-light-active)}.semi-timeline-item-head-success{background-color:var(--semi-color-success)}.semi-timeline-item-head-warning{background-color:var(--semi-color-warning)}.semi-timeline-item-head-error{background-color:var(--semi-color-danger)}.semi-timeline-item-head-custom{position:absolute;display:flex;align-self:center;top:10px;left:5px;width:auto;height:auto;border:0;border-radius:0;transform:translate(-50%,-50%)}.semi-timeline-item .semi-timeline-item-head-custom.semi-timeline-item-head-ongoing{background-color:#0000;color:var(--semi-color-primary)}.semi-timeline-item .semi-timeline-item-head-custom.semi-timeline-item-head-success{background-color:#0000;color:var(--semi-color-success)}.semi-timeline-item .semi-timeline-item-head-custom.semi-timeline-item-head-warning{background-color:#0000;color:var(--semi-color-warning)}.semi-timeline-item .semi-timeline-item-head-custom.semi-timeline-item-head-error{background-color:#0000;color:var(--semi-color-danger)}.semi-timeline-item .semi-timeline-item-head-custom.semi-timeline-item-head-default{background-color:#0000;color:var(--semi-color-tertiary-light-active)}.semi-timeline-item-content{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;position:relative;margin:0 0 0 25px;word-break:break-word;color:var(--semi-color-text-0)}.semi-timeline-item-content-extra,.semi-timeline-item-content-time{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2);margin-top:4px}.semi-timeline-item:last-child>.semi-timeline-item-tail{border-left:none}.semi-timeline-alternate .semi-timeline-item-tail,.semi-timeline-alternate .semi-timeline-item-head,.semi-timeline-alternate .semi-timeline-item-head-custom,.semi-timeline-right .semi-timeline-item-tail,.semi-timeline-right .semi-timeline-item-head,.semi-timeline-right .semi-timeline-item-head-custom,.semi-timeline-center .semi-timeline-item-tail,.semi-timeline-center .semi-timeline-item-head,.semi-timeline-center .semi-timeline-item-head-custom{left:50%}.semi-timeline-alternate .semi-timeline-item-head.semi-timeline-item-head-custom,.semi-timeline-right .semi-timeline-item-head.semi-timeline-item-head-custom,.semi-timeline-center .semi-timeline-item-head.semi-timeline-item-head-custom{margin-left:0}.semi-timeline-alternate .semi-timeline-item-head,.semi-timeline-right .semi-timeline-item-head,.semi-timeline-center .semi-timeline-item-head{margin-left:-4px}.semi-timeline-alternate .semi-timeline-item-left .semi-timeline-item-content,.semi-timeline-right .semi-timeline-item-left .semi-timeline-item-content,.semi-timeline-center .semi-timeline-item-left .semi-timeline-item-content{left:calc(50% - 4px);width:calc(50% - 14px);text-align:left}.semi-timeline-alternate .semi-timeline-item-right .semi-timeline-item-content,.semi-timeline-right .semi-timeline-item-right .semi-timeline-item-content,.semi-timeline-center .semi-timeline-item-right .semi-timeline-item-content{width:calc(50% - 20px);margin:0;text-align:right}.semi-timeline-center .semi-timeline-item-content-time{position:absolute;top:-2px;margin-left:calc(-40px - 100%);width:100%;text-align:right}.semi-timeline-right .semi-timeline-item-right .semi-timeline-item-tail,.semi-timeline-right .semi-timeline-item-right .semi-timeline-item-head,.semi-timeline-right .semi-timeline-item-right .semi-timeline-item-head-custom{left:calc(100% - 9px)}.semi-timeline-right .semi-timeline-item-right .semi-timeline-item-content{width:calc(100% - 28px)}.semi-rtl .semi-timeline,.semi-portal-rtl .semi-timeline{direction:rtl}.semi-rtl .semi-timeline-item-tail,.semi-portal-rtl .semi-timeline-item-tail{left:auto;right:4px;border-left:0;border-right:1px solid var(--semi-color-text-3)}.semi-rtl .semi-timeline-item-head-custom,.semi-portal-rtl .semi-timeline-item-head-custom{left:auto;right:5px;transform:translate(50%,-50%)}.semi-rtl .semi-timeline-item-content,.semi-portal-rtl .semi-timeline-item-content{margin:0 25px 0 0}.semi-rtl .semi-timeline-item:last-child .semi-timeline-item-tail,.semi-portal-rtl .semi-timeline-item:last-child .semi-timeline-item-tail{border-right:none}.semi-rtl .semi-timeline-alternate .semi-timeline-item-tail,.semi-rtl .semi-timeline-alternate .semi-timeline-item-head,.semi-rtl .semi-timeline-alternate .semi-timeline-item-head-custom,.semi-rtl .semi-timeline-right .semi-timeline-item-tail,.semi-rtl .semi-timeline-right .semi-timeline-item-head,.semi-rtl .semi-timeline-right .semi-timeline-item-head-custom,.semi-rtl .semi-timeline-center .semi-timeline-item-tail,.semi-rtl .semi-timeline-center .semi-timeline-item-head,.semi-rtl .semi-timeline-center .semi-timeline-item-head-custom,.semi-portal-rtl .semi-timeline-alternate .semi-timeline-item-tail,.semi-portal-rtl .semi-timeline-alternate .semi-timeline-item-head,.semi-portal-rtl .semi-timeline-alternate .semi-timeline-item-head-custom,.semi-portal-rtl .semi-timeline-right .semi-timeline-item-tail,.semi-portal-rtl .semi-timeline-right .semi-timeline-item-head,.semi-portal-rtl .semi-timeline-right .semi-timeline-item-head-custom,.semi-portal-rtl .semi-timeline-center .semi-timeline-item-tail,.semi-portal-rtl .semi-timeline-center .semi-timeline-item-head,.semi-portal-rtl .semi-timeline-center .semi-timeline-item-head-custom{left:auto;right:50%}.semi-rtl .semi-timeline-alternate .semi-timeline-item-head,.semi-rtl .semi-timeline-right .semi-timeline-item-head,.semi-rtl .semi-timeline-center .semi-timeline-item-head,.semi-portal-rtl .semi-timeline-alternate .semi-timeline-item-head,.semi-portal-rtl .semi-timeline-right .semi-timeline-item-head,.semi-portal-rtl .semi-timeline-center .semi-timeline-item-head{margin-left:0;margin-right:-4px}.semi-rtl .semi-timeline-alternate .semi-timeline-item-left .semi-timeline-item-content,.semi-rtl .semi-timeline-right .semi-timeline-item-left .semi-timeline-item-content,.semi-rtl .semi-timeline-center .semi-timeline-item-left .semi-timeline-item-content,.semi-portal-rtl .semi-timeline-alternate .semi-timeline-item-left .semi-timeline-item-content,.semi-portal-rtl .semi-timeline-right .semi-timeline-item-left .semi-timeline-item-content,.semi-portal-rtl .semi-timeline-center .semi-timeline-item-left .semi-timeline-item-content{left:auto;right:calc(50% - 4px);text-align:right}.semi-rtl .semi-timeline-alternate .semi-timeline-item-right .semi-timeline-item-content,.semi-rtl .semi-timeline-right .semi-timeline-item-right .semi-timeline-item-content,.semi-rtl .semi-timeline-center .semi-timeline-item-right .semi-timeline-item-content,.semi-portal-rtl .semi-timeline-alternate .semi-timeline-item-right .semi-timeline-item-content,.semi-portal-rtl .semi-timeline-right .semi-timeline-item-right .semi-timeline-item-content,.semi-portal-rtl .semi-timeline-center .semi-timeline-item-right .semi-timeline-item-content{text-align:left}.semi-rtl .semi-timeline-center .semi-timeline-item-content-time,.semi-portal-rtl .semi-timeline-center .semi-timeline-item-content-time{margin-left:0;margin-right:calc(-40px - 100%);text-align:left}.semi-rtl .semi-timeline-right .semi-timeline-item-right .semi-timeline-item-tail,.semi-rtl .semi-timeline-right .semi-timeline-item-right .semi-timeline-item-head,.semi-rtl .semi-timeline-right .semi-timeline-item-right .semi-timeline-item-head-custom,.semi-portal-rtl .semi-timeline-right .semi-timeline-item-right .semi-timeline-item-tail,.semi-portal-rtl .semi-timeline-right .semi-timeline-item-right .semi-timeline-item-head,.semi-portal-rtl .semi-timeline-right .semi-timeline-item-right .semi-timeline-item-head-custom{left:0;right:calc(100% - 9px)}.semi-toast{pointer-events:none}.semi-toast-wrapper{position:fixed;height:0;top:0;width:100%;display:flex;justify-content:center;z-index:1010}.semi-toast-wrapper .semi-toast-innerWrapper{width:fit-content;height:fit-content;text-align:center}.semi-toast-wrapper .semi-toast-innerWrapper-hover .semi-toast-zero-height-wrapper{perspective:unset;perspective-origin:center center}.semi-toast-zero-height-wrapper{transition:all .3s cubic-bezier(.22,.57,.02,1.2);perspective-origin:center 280px;perspective:280px;height:0;overflow:visible}.semi-toast-content{pointer-events:all;box-shadow:var(--semi-shadow-elevated);font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;background-color:var(--semi-color-bg-3);border-radius:var(--semi-border-radius-medium);padding:12px 8px;display:inline-flex;align-items:flex-start;justify-content:center;margin:12px;font-weight:600;color:var(--semi-color-text-0)}.semi-toast-content .semi-toast-close-button{margin-top:-2px;height:20px}.semi-toast-content .semi-toast-content-text{margin-left:12px;margin-right:12px;text-align:left;word-wrap:break-word;overflow-wrap:break-word}.semi-toast-light.semi-toast-warning .semi-toast-content{background-color:var(--semi-color-warning-light-default);border:1px solid var(--semi-color-warning)}.semi-toast-light.semi-toast-warning .semi-toast-icon-warning{color:var(--semi-color-warning)}.semi-toast-light.semi-toast-success .semi-toast-content{background-color:var(--semi-color-success-light-default);border:1px solid var(--semi-color-success)}.semi-toast-light.semi-toast-success .semi-toast-icon-success{color:var(--semi-color-success)}.semi-toast-light.semi-toast-info .semi-toast-content{background-color:var(--semi-color-info-light-default);border:1px solid var(--semi-color-info)}.semi-toast-light.semi-toast-info .semi-toast-icon-info{color:var(--semi-color-info)}.semi-toast-light.semi-toast-error .semi-toast-content{background-color:var(--semi-color-danger-light-default);border:1px solid var(--semi-color-danger)}.semi-toast-light.semi-toast-error .semi-toast-icon-error{color:var(--semi-color-danger)}.semi-toast .semi-toast-icon-warning{color:var(--semi-color-warning)}.semi-toast .semi-toast-icon-success{color:var(--semi-color-success)}.semi-toast .semi-toast-icon-info{color:var(--semi-color-info)}.semi-toast .semi-toast-icon-error{color:var(--semi-color-danger)}.semi-toast-animation-show{animation:.3s semi-toast-keyframe-toast-show cubic-bezier(.22,.57,.02,1.2) 0s;animation-fill-mode:forwards}.semi-toast-animation-hide{animation:.3s semi-toast-keyframe-toast-hide cubic-bezier(.22,.57,.02,1.2) 0s;animation-fill-mode:forwards}@keyframes semi-toast-keyframe-toast-show{0%{opacity:0;transform:translateY(-100%)}to{opacity:1}}@keyframes semi-toast-keyframe-toast-hide{0%{opacity:1}to{opacity:0;transform:translateY(-100%)}}.semi-toast-rtl{direction:rtl}.semi-toast-rtl .semi-toast-content .semi-toast-content-text{text-align:right;margin-left:12px;margin-right:12px}.semi-transfer{background-color:var(--semi-color-bg-1);border:1px solid var(--semi-color-border);border-radius:var(--semi-border-radius-medium);min-width:402px;height:400px;box-sizing:border-box;display:flex}.semi-transfer-disabled .semi-transfer-header,.semi-transfer-disabled .semi-transfer-item{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-transfer-disabled .semi-transfer-item:hover{background-color:inherit}.semi-transfer-disabled .semi-transfer-item:hover .semi-transfer-item-close-icon{visibility:hidden}.semi-transfer-disabled .semi-transfer-item:active{background-color:inherit}.semi-transfer-custom-panel{border:none;min-width:inherit;height:inherit}.semi-transfer-header{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;display:flex;align-items:center;height:24px;margin:12px 12px 8px;color:var(--semi-color-text-2);flex-shrink:0}.semi-transfer-header-all{font-weight:600;margin-left:16px}.semi-transfer-header .semi-button{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-transfer-item{min-height:36px;box-sizing:border-box;padding:8px 9px 8px 12px;-webkit-user-select:none;user-select:none;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;display:flex;align-items:center;justify-content:space-between;flex-wrap:nowrap;color:var(--semi-color-text-1);cursor:pointer;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-transfer-item:hover{background-color:var(--semi-color-fill-0)}.semi-transfer-item:active{background-color:var(--semi-color-fill-1)}.semi-transfer-item-disabled{cursor:not-allowed}.semi-transfer-item-disabled:hover{background-color:inherit}.semi-transfer-item .semi-transfer-item-close-icon{font-size:12px;cursor:pointer;visibility:hidden;color:var(--semi-color-text-2)}.semi-transfer-left{width:50%;border-right:1px solid var(--semi-color-border);display:flex;flex-direction:column}.semi-transfer-left-list{overflow:auto;flex-grow:1}.semi-transfer-left-pagination{padding:12px;flex-shrink:0;display:flex;justify-content:center}.semi-transfer-left-empty{height:36px}.semi-transfer-left>.semi-spin{width:100%;flex-grow:1}.semi-transfer-right{width:50%;display:flex;flex-direction:column;position:relative}.semi-transfer-right-header{margin-top:12px;margin-bottom:0;height:32px;flex-shrink:0}.semi-transfer-right-list{overflow:auto;flex-grow:1}.semi-transfer-right-item{color:var(--semi-color-text-0);cursor:auto}.semi-transfer-right-item:hover .semi-transfer-item-close-icon{flex-shrink:0;visibility:visible;cursor:pointer}.semi-transfer-right-item:hover .semi-transfer-item-close-icon.semi-transfer-item-close-icon-disabled{visibility:hidden}.semi-transfer-right-item-text{flex:1;word-break:break-all}.semi-transfer-right-item-drag-handler{margin-right:4px;flex-shrink:0;cursor:move}.semi-transfer-right-item-drag-item-move{z-index:2000}.semi-transfer-right-item-sortable-item-active{opacity:0}.semi-transfer-right-empty{position:absolute;height:100%}.semi-transfer-empty{width:100%;display:flex;justify-content:center;align-items:center;font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2)}.semi-transfer-filter{margin:12px 12px 0}.semi-transfer-group-title{color:var(--semi-color-text-2);padding-left:12px;font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;height:28px;display:flex;align-items:center}.semi-rtl .semi-transfer,.semi-portal-rtl .semi-transfer{direction:rtl}.semi-rtl .semi-transfer-header-all,.semi-portal-rtl .semi-transfer-header-all{margin-left:0;margin-right:16px}.semi-rtl .semi-transfer-item,.semi-portal-rtl .semi-transfer-item{padding-left:9px;padding-right:12px}.semi-rtl .semi-transfer-left,.semi-portal-rtl .semi-transfer-left{border-right:0;border-left:1px solid var(--semi-color-border)}.semi-rtl .semi-transfer-group-title,.semi-portal-rtl .semi-transfer-group-title{padding-left:0;padding-right:12px}.semi-tree-search-wrapper{padding:8px 12px}.semi-tree-wrapper{display:flex;flex-direction:column}.semi-tree-option-list{overflow-x:hidden;overflow-y:auto;box-sizing:border-box;flex:1;padding:8px 0}.semi-tree-option-list ul,.semi-tree-option-list li{list-style-type:none;padding:0;margin:0}.semi-tree-option-list li.semi-tree-option{box-sizing:border-box;padding-top:4px;padding-bottom:4px;padding-left:8px}.semi-tree-option-list li>.semi-tree-option-label{list-style-type:none;padding:0}.semi-tree-option-list .semi-tree-option-expand-icon,.semi-tree-option-list .semi-tree-option-empty-icon{box-sizing:border-box;width:12px;color:var(--semi-color-text-2);margin-right:8px;display:flex;flex-shrink:0}.semi-tree-option-list .semi-tree-option{display:flex;align-items:center;cursor:pointer;transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none);transform:scale(var(--semi-transform_scale-none));font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;word-break:break-word;color:var(--semi-color-text-0);position:relative}.semi-tree-option-list .semi-tree-option-label{display:flex;align-items:center}.semi-tree-option-list .semi-tree-option-label>.semi-icon{margin-right:8px}.semi-tree-option-list .semi-tree-option-label .semi-checkbox{margin-right:8px}.semi-tree-option-list .semi-tree-option-label-text{display:block;flex:1}.semi-tree-option-list .semi-tree-option-ellipsis .semi-tree-option-label-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.semi-tree-option-list .semi-tree-option-label-text,.semi-tree-option-list .semi-tree-option .semi-checkbox-addon{border-radius:var(--semi-border-radius-small)}.semi-tree-option-list .semi-tree-option-label-text:hover,.semi-tree-option-list .semi-tree-option .semi-checkbox-addon:hover{background-color:var(--semi-color-fill-0)}.semi-tree-option-list .semi-tree-option-label-text:active,.semi-tree-option-list .semi-tree-option .semi-checkbox-addon:active{background-color:var(--semi-color-fill-1)}.semi-tree-option-list .semi-tree-option-item-icon{color:var(--semi-color-text-2)}.semi-tree-option-list .semi-tree-option-active .semi-tree-option-label-text{background-color:var(--semi-color-primary-light-default)}.semi-tree-option-list .semi-tree-option-active:hover,.semi-tree-option-list .semi-tree-option-active:active{background-color:#0000}.semi-tree-option-list .semi-tree-option-selected .semi-tree-option-label,.semi-tree-option-list .semi-tree-option-selected .semi-tree-option-label:hover,.semi-tree-option-list .semi-tree-option-selected .semi-tree-option-label:active{background-color:var(--semi-color-primary-light-default)}.semi-tree-option-list .semi-tree-option-collapsed .semi-tree-option-expand-icon{transform:rotate(270deg)}.semi-tree-option-list .semi-tree-option-highlight{font-weight:600;color:var(--semi-color-primary);background-color:inherit}.semi-tree-option-list .semi-tree-option-hidden{display:none}.semi-tree-option-list .semi-tree-option-disabled .semi-tree-option-label{color:var(--semi-color-disabled-text)}.semi-tree-option-list .semi-tree-option-fullLabel-draggable,.semi-tree-option-list .semi-tree-option-draggable{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}.semi-tree-option-list .semi-tree-option-draggable{box-sizing:border-box;border-left:2px solid rgba(0,0,0,0)}.semi-tree-option-list .semi-tree-option-draggable .semi-tree-option-label{border-top:2px rgba(0,0,0,0) solid;border-bottom:2px rgba(0,0,0,0) solid}.semi-tree-option-list .semi-tree-option-draggable .semi-tree-option-drag-over-gap-top{border-top:2px var(--semi-color-primary) solid}.semi-tree-option-list .semi-tree-option-draggable .semi-tree-option-drag-over-gap-bottom{border-bottom:2px var(--semi-color-primary) solid}.semi-tree-option-list .semi-tree-option-draggable .semi-tree-option-indent .semi-tree-option-indent-unit:before{top:0;bottom:0}.semi-tree-option-list .semi-tree-option-draggable .semi-tree-option-switcher-leaf-line:before{top:0;bottom:0}.semi-tree-option-list .semi-tree-option-draggable.semi-tree-option-tree-node-last-leaf .semi-tree-option-switcher-leaf-line:before{height:50%}.semi-tree-option-list .semi-tree-option-fullLabel-draggable.semi-tree-option-fullLabel-drag-over-gap-top{border-top:2px var(--semi-color-primary) solid}.semi-tree-option-list .semi-tree-option-fullLabel-draggable.semi-tree-option-fullLabel-drag-over-gap-bottom{border-bottom:2px var(--semi-color-primary) solid}.semi-tree-option-list .semi-tree-option-drag-over.semi-tree-option-draggable,.semi-tree-option-list .semi-tree-option-drag-over.semi-tree-option-fullLabel-draggable{border:2px solid var(--semi-color-primary)}.semi-tree-option-list .semi-tree-option-drag-over.semi-tree-option-draggable .semi-tree-option-label,.semi-tree-option-list .semi-tree-option-drag-over.semi-tree-option-fullLabel-draggable .semi-tree-option-label{border-top:0;border-bottom:0}.semi-tree-option-list .semi-tree-option-drag-over.semi-tree-option-draggable+.semi-tree-option-selected:after,.semi-tree-option-list .semi-tree-option-drag-over.semi-tree-option-fullLabel-draggable+.semi-tree-option-selected:after{content:"";position:absolute;top:0;left:-2px;bottom:0;right:-1px;border-top:2px solid var(--semi-color-primary)}.semi-tree-option-list .semi-tree-option-indent{align-self:stretch;white-space:nowrap;-webkit-user-select:none;user-select:none}.semi-tree-option-list .semi-tree-option-indent-unit{display:inline-block;width:20px}.semi-tree-option-list .semi-tree-option-indent-show-line .semi-tree-option-indent-unit{position:relative;height:100%}.semi-tree-option-list .semi-tree-option-indent-show-line .semi-tree-option-indent-unit:before{position:absolute;top:-4px;inset-inline-start:6px;bottom:-4px;border-inline-end:1px solid var(--semi-color-text-3);content:""}.semi-tree-option-list .semi-tree-option-indent-show-line .semi-tree-option-indent-unit-end:before{display:none}.semi-tree-option-list .semi-tree-option-switcher{position:relative;flex:none;align-self:stretch;width:12px;margin:0 8px 0 0;text-align:center;cursor:pointer;-webkit-user-select:none;user-select:none}.semi-tree-option-list .semi-tree-option-switcher-leaf-line{z-index:1;position:relative;display:inline-block;width:100%;height:100%}.semi-tree-option-list .semi-tree-option-switcher-leaf-line:before{position:absolute;top:-4px;inset-inline-start:6px;bottom:-4px;border-inline-end:1px solid var(--semi-color-text-3);content:""}.semi-tree-option-list .semi-tree-option-switcher-leaf-line:after{box-sizing:border-box;position:absolute;width:8px;height:50%;border-bottom:1px solid var(--semi-color-text-3);content:"";margin-inline-start:1px}.semi-tree-option-list .semi-tree-option-tree-node-last-leaf .semi-tree-option-switcher-leaf-line:before{height:calc(50% + 4px)}.semi-tree-option-list li.semi-tree-option-draggable.semi-tree-option{padding-top:0;padding-bottom:0}.semi-tree-option-list li.semi-tree-option-draggable.semi-tree-option .semi-tree-option-label{padding:2px 0}.semi-tree-option-list li.semi-tree-option-draggable.semi-tree-option .semi-tree-option-selected,.semi-tree-option-list li.semi-tree-option-draggable.semi-tree-option .semi-tree-option-selected:hover,.semi-tree-option-list li.semi-tree-option-draggable.semi-tree-option .semi-tree-option-selected:active{background-color:#0000}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-1{padding-left:8px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-2{padding-left:28px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-3{padding-left:48px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-4{padding-left:68px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-5{padding-left:88px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-6{padding-left:108px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-7{padding-left:128px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-8{padding-left:148px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-9{padding-left:168px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-10{padding-left:188px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-11{padding-left:208px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-12{padding-left:228px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-13{padding-left:248px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-14{padding-left:268px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-15{padding-left:288px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-16{padding-left:308px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-17{padding-left:328px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-18{padding-left:348px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-19{padding-left:368px}.semi-tree-option-list .semi-tree-option.semi-tree-option-fullLabel-level-20{padding-left:388px}.semi-tree-option-list .semi-tree-option-empty:hover,.semi-tree-option-list .semi-tree-option-empty:active{background-color:#0000}.semi-tree-option-list .semi-tree-option-label-empty{padding-left:0;justify-content:center;color:var(--semi-color-disabled-text);-webkit-user-select:none;user-select:none;cursor:not-allowed}.semi-tree-option-list .semi-checkboxGroup-vertical{row-gap:0}.semi-tree-option-list-block .semi-tree-option:hover{background-color:var(--semi-color-fill-0)}.semi-tree-option-list-block .semi-tree-option:active{background-color:var(--semi-color-fill-1)}.semi-tree-option-list-block .semi-tree-option-label{flex:1}.semi-tree-option-list-block .semi-tree-option-active,.semi-tree-option-list-block .semi-tree-option-active:hover,.semi-tree-option-list-block .semi-tree-option-active:active{background-color:var(--semi-color-primary-light-default)}.semi-tree-option-list-block .semi-tree-option-active .semi-tree-option-label-text{background-color:#0000}.semi-tree-option-list-block .semi-tree-option-expand-icon{flex-shrink:0;box-sizing:content-box}.semi-tree-option-list-block .semi-tree-option-expand-icon:hover{color:var(--semi-color-text-0)}.semi-tree-option-list-block .semi-tree-option-expand-icon:active{color:var(--semi-color-black)}.semi-tree-option-list-block .semi-tree-option-spin-icon{display:flex;line-height:0;color:var(--semi-color-primary)}.semi-tree-option-list-block .semi-tree-option-spin-icon svg{width:12px;height:12px}.semi-tree-option-list-block .semi-tree-option-selected{background-color:var(--semi-color-primary-light-default)}.semi-tree-option-list-block .semi-tree-option-selected .semi-tree-option-label,.semi-tree-option-list-block .semi-tree-option-selected .semi-tree-option-label:hover,.semi-tree-option-list-block .semi-tree-option-selected .semi-tree-option-label:active,.semi-tree-option-list-block .semi-tree-option-selected .semi-checkbox-addon{background-color:#0000}.semi-tree-option-list-block .semi-tree-option-selected:hover,.semi-tree-option-list-block .semi-tree-option-selected:active{background-color:var(--semi-color-primary-light-default)}.semi-tree-option-list-block .semi-tree-option-label-text,.semi-tree-option-list-block .semi-tree-option .semi-checkbox-addon{padding:0;border-radius:var(--semi-border-radius-small)}.semi-tree-option-list-block .semi-tree-option-label-text:hover,.semi-tree-option-list-block .semi-tree-option .semi-checkbox-addon:hover,.semi-tree-option-list-block .semi-tree-option-label-text:active,.semi-tree-option-list-block .semi-tree-option .semi-checkbox-addon:active{background-color:#0000}.semi-tree-option-list-block .semi-tree-option-label-text{width:0}.semi-tree-option-list-block .semi-tree-option-empty:hover,.semi-tree-option-list-block .semi-tree-option-empty:active{background-color:#0000}.semi-rtl .semi-tree,.semi-popover-rtl .semi-tree,.semi-rtl .semi-tree-wrapper,.semi-popover-rtl .semi-tree-wrapper,.semi-rtl .semi-tree-option-list,.semi-popover-rtl .semi-tree-option-list{direction:rtl}.semi-rtl .semi-tree-option-list .semi-tree-option-expand-icon,.semi-rtl .semi-tree-option-list .semi-tree-option-empty-icon,.semi-popover-rtl .semi-tree-option-list .semi-tree-option-expand-icon,.semi-popover-rtl .semi-tree-option-list .semi-tree-option-empty-icon{margin-right:0;margin-left:8px}.semi-rtl .semi-tree-option-list .semi-tree-option,.semi-popover-rtl .semi-tree-option-list .semi-tree-option{padding-left:0;padding-right:8px}.semi-rtl .semi-tree-option-list .semi-tree-option-label>.semi-icon,.semi-popover-rtl .semi-tree-option-list .semi-tree-option-label>.semi-icon{margin-right:0;margin-left:8px}.semi-rtl .semi-tree-option-list .semi-tree-option-label .semi-checkbox,.semi-popover-rtl .semi-tree-option-list .semi-tree-option-label .semi-checkbox{margin-right:0;margin-left:8px}.semi-rtl .semi-tree-option-list .semi-tree-option-collapsed .semi-tree-option-expand-icon,.semi-popover-rtl .semi-tree-option-list .semi-tree-option-collapsed .semi-tree-option-expand-icon{transform:rotate(90deg)}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-1,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-1{padding-left:0;padding-right:8px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-2,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-2{padding-left:0;padding-right:28px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-3,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-3{padding-left:0;padding-right:48px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-4,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-4{padding-left:0;padding-right:68px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-5,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-5{padding-left:0;padding-right:88px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-6,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-6{padding-left:0;padding-right:108px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-7,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-7{padding-left:0;padding-right:128px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-8,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-8{padding-left:0;padding-right:148px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-9,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-9{padding-left:0;padding-right:168px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-10,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-10{padding-left:0;padding-right:188px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-11,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-11{padding-left:0;padding-right:208px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-12,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-12{padding-left:0;padding-right:228px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-13,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-13{padding-left:0;padding-right:248px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-14,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-14{padding-left:0;padding-right:268px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-15,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-15{padding-left:0;padding-right:288px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-16,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-16{padding-left:0;padding-right:308px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-17,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-17{padding-left:0;padding-right:328px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-18,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-18{padding-left:0;padding-right:348px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-19,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-19{padding-left:0;padding-right:368px}.semi-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-20,.semi-popover-rtl .semi-tree-option-list li.semi-tree-option.semi-tree-option-fullLabel-level-20{padding-left:0;padding-right:388px}.semi-rtl .semi-tree-option-list .semi-tree-option-label-empty,.semi-popover-rtl .semi-tree-option-list .semi-tree-option-label-empty{padding-left:auto;padding-right:0}.semi-rtl .semi-tree-option-list .semi-tree-option-switcher,.semi-popover-rtl .semi-tree-option-list .semi-tree-option-switcher{margin-right:0;margin-left:8px}.semi-rtl .semi-tree-option-list-block,.semi-popover-rtl .semi-tree-option-list-block{direction:rtl}.semi-tree-select{box-sizing:border-box;border-radius:var(--semi-border-radius-small);border:1px solid rgba(0,0,0,0);min-width:80px;min-height:32px;line-height:32px;font-weight:400;background-color:var(--semi-color-fill-0);display:inline-flex;align-items:center;position:relative;cursor:pointer}.semi-tree-select:hover{background-color:var(--semi-color-fill-1);border:1px solid rgba(0,0,0,0)}.semi-tree-select:active{background-color:var(--semi-color-fill-2)}.semi-tree-select-focus,.semi-tree-select-focus:hover{background-color:var(--semi-color-fill-0);border:1px solid var(--semi-color-focus-border);outline:0}.semi-tree-select-focus:active{background-color:var(--semi-color-fill-2)}.semi-tree-select-warning{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning-light-default)}.semi-tree-select-warning:hover{background-color:var(--semi-color-warning-light-hover);border-color:var(--semi-color-warning-light-hover)}.semi-tree-select-warning.semi-tree-select-focus{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning)}.semi-tree-select-warning:active{background-color:var(--semi-color-warning-light-active);border-color:var(--semi-color-warning-light-active)}.semi-tree-select-error{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger-light-default)}.semi-tree-select-error:hover{background-color:var(--semi-color-danger-light-hover);border-color:var(--semi-color-danger-light-hover)}.semi-tree-select-error.semi-tree-select-focus{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger)}.semi-tree-select-error:active{background-color:var(--semi-color-danger-light-active);border-color:var(--semi-color-danger-light-active)}.semi-tree-select-disabled{cursor:not-allowed;-webkit-user-select:none;user-select:none;background-color:var(--semi-color-disabled-fill)}.semi-tree-select-disabled:hover{background-color:var(--semi-color-disabled-fill)}.semi-tree-select-disabled .semi-tree-select-selection,.semi-tree-select-disabled .semi-tree-select-selection-placeholder{color:var(--semi-color-disabled-text);cursor:not-allowed}.semi-tree-select-disabled .semi-tree-select-arrow,.semi-tree-select-disabled .semi-tree-select-prefix,.semi-tree-select-disabled .semi-tree-select-suffix{color:var(--semi-color-disabled-text)}.semi-tree-select-disabled .semi-tag{color:var(--semi-color-disabled-text);background-color:#0000}.semi-tree-select-selection{font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;height:100%;display:inline-flex;align-items:center;flex-wrap:wrap;flex-grow:1;overflow:hidden;padding-left:12px;padding-right:0;cursor:pointer;color:var(--semi-color-text-0);position:relative}.semi-tree-select-selection-content{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.semi-tree-select-selection-placeholder{color:var(--semi-color-text-2)}.semi-tree-select-selection .semi-tag-group{height:inherit;display:inline-flex;align-items:center;flex-wrap:wrap}.semi-tree-select-selection .semi-tag{margin:1px 2px}.semi-tree-select-selection-TriggerSearchItem{position:absolute;max-width:calc(100% - 12px);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.semi-tree-select-selection-TriggerSearchItem-placeholder{opacity:.6}.semi-tree-select-selection-TriggerSearchItem-disabled{cursor:not-allowed;color:var(--semi-color-disabled-text)}.semi-tree-select-selection .semi-tree-select-triggerSingleSearch-upper{z-index:1}.semi-tree-select-selection .semi-tree-select-triggerSingleSearch-wrapper{width:100%}.semi-tree-select-selection .semi-tree-select-triggerSingleSearch-wrapper .semi-tree-select-inputTrigger .semi-input-wrapper{background:#0000}.semi-tree-select-selection .semi-tree-select-triggerSingleSearch-wrapper .semi-input-wrapper{height:100%;width:100%;border:none;background-color:#0000}.semi-tree-select-selection .semi-tree-select-triggerSingleSearch-wrapper .semi-input-wrapper-focus{border:none}.semi-tree-select-selection .semi-tree-select-triggerSingleSearch-wrapper .semi-input{padding-left:0;padding-right:0}.semi-tree-select-selection .semi-tagInput{border:hidden;background:#0000;min-height:30px}.semi-tree-select-selection .semi-tagInput-small{min-height:22px}.semi-tree-select-selection .semi-tagInput-large{min-height:38px}.semi-tree-select-selection .semi-tagInput .semi-tagInput-wrapper{padding-left:4px;padding-right:4px}.semi-tree-select-selection .semi-tagInput .semi-tagInput-wrapper .semi-input-wrapper .semi-input{padding-left:0}.semi-tree-select-selection .semi-tagInput .semi-tagInput-wrapper .semi-input-wrapper-default,.semi-tree-select-selection .semi-tagInput .semi-tagInput-wrapper .semi-input-wrapper-large{margin-top:1px;margin-bottom:1px}.semi-tree-select-multiple-tagInput-notEmpty .semi-tagInput{margin-left:-4px}.semi-tree-select-multiple-tagInput-empty .semi-tagInput{margin-left:4px}.semi-tree-select-multiple{display:inline-flex}.semi-tree-select-multiple .semi-tree-select-selection{padding-left:4px;padding-right:0}.semi-tree-select-multiple .semi-tree-select-selection-placeholder{padding-left:8px}.semi-tree-select-triggerTagWrap{max-width:100%}.semi-tree-select-triggerTagWrap .semi-tree-select-selection{min-width:0}.semi-tree-select-triggerTagWrap.semi-tree-select-multiple{height:auto}.semi-tree-select-triggerTagWrap.semi-tree-select-multiple .semi-tree-select-selection{height:auto;min-height:30px;overflow:visible}.semi-tree-select-triggerTagWrap.semi-tree-select-multiple.semi-tree-select-small .semi-tree-select-selection{min-height:22px}.semi-tree-select-triggerTagWrap.semi-tree-select-multiple.semi-tree-select-large .semi-tree-select-selection{min-height:38px}.semi-tree-select-triggerTagWrap .semi-tagInput{min-width:0;max-width:100%;flex:1 1 auto}.semi-tree-select-triggerTagWrap .semi-tagInput .semi-tagInput-wrapper-input{max-width:100%}.semi-tree-select-small{min-height:24px;line-height:24px}.semi-tree-select-large{min-height:40px;line-height:40px}.semi-tree-select-large .semi-tree-select-selection{font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-tree-select-arrow{display:inline-flex;align-items:center;flex-shrink:0;height:100%;justify-content:center;width:32px;color:var(--semi-color-text-2)}.semi-tree-select-inset-label{display:inline;margin:0 12px;font-weight:600;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2);flex-shrink:0;white-space:nowrap}.semi-tree-select.semi-tree-select-with-prefix{display:inline-flex;align-items:center}.semi-tree-select-arrow,.semi-tree-select-clearbtn{display:inline-flex;align-items:center;height:100%;flex-shrink:0;justify-content:center;width:32px;color:var(--semi-color-text-2)}.semi-tree-select-clearbtn:hover{color:var(--semi-color-primary-hover)}.semi-tree-select-clearbtn:active{color:var(--semi-color-primary-active)}.semi-tree-select-prefix,.semi-tree-select-suffix{display:inline;display:flex;justify-content:center;align-items:center}.semi-tree-select-prefix-text,.semi-tree-select-suffix-text{color:var(--semi-color-text-2);font-weight:600;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;margin:0 12px}.semi-tree-select-prefix-icon,.semi-tree-select-suffix-icon{color:var(--semi-color-text-2);margin:0 8px}.semi-tree-select-prefix.semi-tree-select-with-suffix .semi-tree-select-selection,.semi-tree-select-suffix.semi-tree-select-with-suffix .semi-tree-select-selection{padding-right:0}.semi-tree-select-prefix-search-wrapper,.semi-tree-select-suffix-search-wrapper{padding:8px 12px;border-bottom:1px solid var(--semi-color-fill-0)}.semi-tree-select-prefix-maxTagCount,.semi-tree-select-suffix-maxTagCount{color:var(--semi-color-text-2);font-size:14px}.semi-tree-select-prefix-popover,.semi-tree-select-suffix-popover{max-height:300px;overflow:auto}.semi-tree-select-popover .semi-tree-wrapper{height:100%;display:flex;flex-direction:column}.semi-tree-select-popover .semi-tree-wrapper .semi-tree-option-list{flex:1;min-width:230px}.semi-tree-select-popover .semi-tree-wrapper .semi-tree-option-list-hidden{padding:0}.semi-tree-select-popover .semi-tree-wrapper .semi-tree-search-wrapper{border-bottom:1px var(--semi-color-fill-0) solid}.semi-tree-select-borderless:not(:focus-within):not(:hover){background-color:#0000;border-color:#0000}.semi-tree-select-borderless:not(:focus-within):not(:hover) .semi-tree-select-arrow{opacity:0}.semi-tree-select-borderless:focus-within:not(:active){background-color:#0000}.semi-tree-select-borderless.semi-tree-select-error:not(:focus-within){border-color:var(--semi-color-danger)}.semi-tree-select-borderless.semi-tree-select-warning:not(:focus-within){border-color:var(--semi-color-warning)}.semi-tree-select-borderless.semi-tree-select-error:focus-within{border-color:var(--semi-color-danger)}.semi-tree-select-borderless.semi-tree-select-warning:focus-within{border-color:var(--semi-color-warning)}.semi-rtl .semi-tree-select,.semi-portal-rtl .semi-tree-select{direction:rtl}.semi-rtl .semi-tree-select .semi-tagInput .semi-input,.semi-portal-rtl .semi-tree-select .semi-tagInput .semi-input{padding-right:0}.semi-rtl .semi-tree-select-multiple-tagInput-notEmpty .semi-tagInput,.semi-portal-rtl .semi-tree-select-multiple-tagInput-notEmpty .semi-tagInput{margin-left:0;margin-right:-4px}.semi-rtl .semi-tree-select-multiple-tagInput-empty .semi-tagInput,.semi-portal-rtl .semi-tree-select-multiple-tagInput-empty .semi-tagInput{margin-left:0;margin-right:4px}.semi-rtl .semi-tree-select-selection,.semi-portal-rtl .semi-tree-select-selection{padding-right:12px;padding-left:0}.semi-rtl .semi-tree-select-multiple .semi-tree-select-selection,.semi-portal-rtl .semi-tree-select-multiple .semi-tree-select-selection{padding-left:0;padding-right:4px}.semi-rtl .semi-tree-select-multiple .semi-tree-select-selection-placeholder,.semi-portal-rtl .semi-tree-select-multiple .semi-tree-select-selection-placeholder{padding-left:0;padding-right:8px}.semi-rtl .semi-tree-select-prefix.semi-tree-select-with-suffix .semi-tree-select-selection,.semi-rtl .semi-tree-select-suffix.semi-tree-select-with-suffix .semi-tree-select-selection,.semi-portal-rtl .semi-tree-select-prefix.semi-tree-select-with-suffix .semi-tree-select-selection,.semi-portal-rtl .semi-tree-select-suffix.semi-tree-select-with-suffix .semi-tree-select-selection{padding-right:auto;padding-left:0}.semi-rtl .semi-tree-select-popover,.semi-portal-rtl .semi-tree-select-popover{direction:rtl}.semi-upload{display:flex;flex-wrap:wrap}.semi-upload-tooltip-children-wrapper{display:inline-flex;width:fit-content;height:fit-content;vertical-align:middle}.semi-upload-disabled,.semi-upload-disabled .semi-upload-file-card,.semi-upload-disabled .semi-upload-file-card-close{cursor:not-allowed}.semi-upload-disabled .semi-upload-drag-area{border:none;cursor:not-allowed}.semi-upload-disabled .semi-upload-drag-area:hover{background-color:var(--semi-color-tertiary-light-default)}.semi-upload-disabled .semi-upload-drag-area-main-text,.semi-upload-disabled .semi-upload-drag-area-sub-text,.semi-upload-disabled .semi-upload-drag-area-icon{cursor:not-allowed;color:var(--semi-color-disabled-text)}.semi-upload-hidden-input,.semi-upload-hidden-input-replace{display:none}.semi-upload-add{display:flex;align-items:center}.semi-upload[x-prompt-pos=right] .semi-upload-add,.semi-upload[x-prompt-pos=right] .semi-upload-prompt{display:inline-flex}.semi-upload[x-prompt-pos=bottom] .semi-upload-add{display:flex}.semi-upload[x-prompt-pos=bottom] .semi-upload-prompt{display:flex;flex-basis:100%}.semi-upload[x-prompt-pos=bottom] .semi-upload-file-list{flex-basis:100%}.semi-upload[x-prompt-pos=left] .semi-upload-add{display:inline-flex}.semi-upload[x-prompt-pos=left] .semi-upload-prompt{display:inline-flex;order:-1}.semi-upload[x-prompt-pos=left] .semi-upload-file-list{order:2}.semi-upload-file-list{flex-basis:100%;flex-shrink:0;display:block;margin-top:8px;margin-bottom:8px}.semi-upload-file-list-main{display:flex;flex-wrap:wrap;flex-shrink:0;gap:8px;margin-bottom:8px}.semi-upload-file-list-main p{display:flex;align-items:center}.semi-upload-file-list-title{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-2);margin-bottom:4px}.semi-upload-file-list-title-choosen{margin-right:8px}.semi-upload-file-list-title-clear{cursor:pointer;color:var(--semi-color-primary)}.semi-upload-file-card{border-radius:var(--semi-border-radius-medium);display:inline-flex;align-items:center;justify-content:space-between;height:52px;width:250px;background-color:var(--semi-color-fill-0);cursor:pointer}.semi-upload-file-card:hover{background-color:var(--semi-color-fill-1)}.semi-upload-file-card a{text-decoration:none}.semi-upload-file-card-preview{height:36px;width:36px;color:var(--semi-color-text-2);margin:8px;display:flex;justify-content:center;align-items:center;border-radius:var(--semi-border-radius-small);flex-shrink:0}.semi-upload-file-card-preview img{width:36px;height:36px;object-fit:cover}.semi-upload-file-card-preview-placeholder{background-color:rgba(var(--semi-grey-3),1);color:rgba(var(--semi-white),1)}.semi-upload-file-card-show-pointer{cursor:pointer}.semi-upload-file-card-info{display:flex;align-items:center}.semi-upload-file-card-info-main{display:flex;flex-wrap:wrap;flex:1}.semi-upload-file-card-info-main-text{display:flex;align-items:center;flex-basis:100%}.semi-upload-file-card-info-main-control{display:flex}.semi-upload-file-card-info-name{width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;color:var(--semi-color-text-0)}.semi-upload-file-card-info-size{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;margin-left:8px;color:var(--semi-color-text-2);margin-top:1px}.semi-upload-file-card-info-replace{display:inline-flex;margin-left:8px;color:var(--semi-color-text-2)}.semi-upload-file-card-info-validate-message{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;display:flex;align-items:center;color:var(--semi-color-text-0)}.semi-upload-file-card-info-retry{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-primary);cursor:pointer;margin-left:8px}.semi-upload-file-card-info .semi-progress{flex-basis:100%;margin-top:4px}.semi-upload-file-card-close{margin-left:8px;margin-right:8px;flex-shrink:0}.semi-upload-file-card-replace{margin-left:8px;width:24px;flex-shrink:0}.semi-upload-file-card-icon-loading,.semi-upload-file-card-icon-error.semi-icon{font-size:11px;margin-right:2px}.semi-upload-file-card-icon-error{position:relative;top:-1px}.semi-upload-file-card-icon-loading{line-height:0}.semi-upload-file-card-icon-loading .semi-spin-wrapper svg{height:11px;width:11px}.semi-upload-file-card-fail{background-color:var(--semi-color-danger-light-default)}.semi-upload-file-card-fail:hover{background-color:var(--semi-color-danger-light-hover)}.semi-upload-file-card-fail .semi-upload-file-card-info-validate-message{color:var(--semi-color-danger)}.semi-upload-picture{display:flex}.semi-upload-picture[x-prompt-pos=bottom]{flex-direction:column}.semi-upload-picture[x-prompt-pos=bottom] .semi-upload-prompt,.semi-upload-picture[x-prompt-pos=right] .semi-upload-prompt{order:1}.semi-upload-picture-add{background-color:var(--semi-color-fill-0);height:96px;width:96px;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;border:2px dashed var(--semi-color-border);color:var(--semi-color-tertiary);border-radius:var(--semi-border-radius-small);cursor:pointer}.semi-upload-picture-add:hover{background-color:var(--semi-color-fill-1)}.semi-upload-picture-add:active{background-color:var(--semi-color-fill-2)}.semi-upload-picture-add-disabled{cursor:not-allowed}.semi-upload-picture-add-disabled:hover,.semi-upload-picture-add-disabled:active{background-color:var(--semi-color-fill-0)}.semi-upload-picture-file-list{flex-basis:inherit;margin-top:0;margin-bottom:0}.semi-upload-picture-file-card{display:flex;align-items:center;justify-content:center;height:96px;width:96px;border-radius:var(--semi-border-radius-small);box-sizing:border-box;position:relative;overflow:hidden}.semi-upload-picture-file-card img{height:96px;width:96px;object-fit:cover;border-radius:var(--semi-border-radius-small)}.semi-upload-picture-file-card-custom-thumbnail .semi-image img{width:inherit;height:inherit}.semi-upload-picture-file-card-close{visibility:hidden;display:inline-flex;position:absolute;top:8px;right:8px;border-radius:var(--semi-border-radius-circle);cursor:pointer;transition:all 0s}.semi-upload-picture-file-card-icon-close{font-size:16px;color:var(--semi-color-white)}.semi-upload-picture-file-card:before{visibility:hidden;background-color:var(--semi-color-overlay-bg);content:"";position:absolute;left:0;right:0;top:0;bottom:0}.semi-upload-picture-file-card-retry{visibility:hidden;background-color:var(--semi-color-white);width:24px;height:24px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--semi-color-primary);border-radius:var(--semi-border-radius-circle);display:flex;align-items:center;justify-content:center;cursor:pointer}.semi-upload-picture-file-card-icon-retry{transform:scaleX(-1);font-size:13px}.semi-upload-picture-file-card-replace{visibility:hidden;display:inline-flex;position:absolute;cursor:pointer;top:50%;left:50%;color:var(--semi-color-white);transform:translate3D(-50%,-50%,0)}.semi-upload-picture-file-card-preview{visibility:hidden;display:inline-flex;position:absolute;cursor:pointer;top:50%;left:50%;transform:translate3D(-50%,-50%,0)}.semi-upload-picture-file-card-preview-fallback{background-color:var(--semi-color-fill-0);border:2px var(--semi-color-border);color:var(--semi-color-tertiary);border-radius:var(--semi-border-radius-small)}.semi-upload-picture-file-card-pic-info{display:inline-flex;box-sizing:border-box;justify-content:space-between;align-items:center;position:absolute;width:100%;height:24px;padding:0 10px;bottom:0;left:0;color:var(--semi-color-white);font-size:12px;font-weight:600;background:linear-gradient(0deg,#16161a4d,#16161a00 77.08%)}.semi-upload-picture-file-card-icon-loading,.semi-upload-picture-file-card-icon-error{position:absolute;bottom:6px;right:6px;color:var(--semi-color-danger)}.semi-upload-picture-file-card-icon-loading{font-size:14px}.semi-upload-picture-file-card-show-pointer{cursor:pointer}.semi-upload-picture-file-card-error{border:1px solid var(--semi-color-danger);outline:1px solid var(--semi-color-danger)}.semi-upload-picture-file-card:hover:before{visibility:visible}.semi-upload-picture-file-card:hover .semi-upload-picture-file-card-close,.semi-upload-picture-file-card:hover .semi-upload-picture-file-card-replace,.semi-upload-picture-file-card:hover .semi-upload-picture-file-card-retry,.semi-upload-picture-file-card:hover .semi-upload-picture-file-card-preview{visibility:visible}.semi-upload-picture-file-card-uploading:before{visibility:visible}.semi-upload-picture-file-card .semi-progress-circle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.semi-upload-drag-area{border-radius:var(--semi-border-radius-small);border:2px dashed var(--semi-color-border);width:100%;padding:12px;background-color:var(--semi-color-tertiary-light-default);display:flex;justify-content:center;align-items:center;flex-direction:column;cursor:pointer}.semi-upload-drag-area:hover{background-color:var(--semi-color-primary-light-default);border-color:var(--semi-color-primary)}.semi-upload-drag-area-custom{border:none;padding:0;background-color:inherit}.semi-upload-drag-area-custom:hover{background-color:inherit}.semi-upload-drag-area-legal{background-color:var(--semi-color-primary-light-default);border-color:var(--semi-color-primary)}.semi-upload-drag-area-legal .semi-upload-drag-area-sub-text{display:none}.semi-upload-drag-area-icon{color:var(--semi-color-primary)}.semi-upload-drag-area-text{text-align:center}.semi-upload-drag-area-main-text{cursor:pointer;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;margin-bottom:4px;color:var(--semi-color-text-0)}.semi-upload-drag-area-main-text:hover,.semi-upload-drag-area-main-text:active{color:var(--semi-color-text-0)}.semi-upload-drag-area-sub-text{cursor:pointer;font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;color:var(--semi-color-text-0)}.semi-upload-drag-area-sub-text:hover,.semi-upload-drag-area-sub-text:active{color:var(--semi-color-text-0)}.semi-upload-drag-area-tips{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600}.semi-upload-drag-area-tips-legal{color:var(--semi-color-primary)}.semi-upload-validate-message{flex-basis:100%;flex-shrink:0;display:block;color:var(--semi-color-danger)}.semi-rtl .semi-upload,.semi-portal-rtl .semi-upload{direction:rtl}.semi-rtl .semi-upload-file-list-title-choosen,.semi-portal-rtl .semi-upload-file-list-title-choosen{margin-right:0;margin-left:8px}.semi-rtl .semi-upload-file-list-title-choosen,.semi-rtl .semi-upload-file-list-title-clear,.semi-portal-rtl .semi-upload-file-list-title-choosen,.semi-portal-rtl .semi-upload-file-list-title-clear{display:inline-block}.semi-rtl .semi-upload-file-card-info-size,.semi-portal-rtl .semi-upload-file-card-info-size,.semi-rtl .semi-upload-file-card-info-retry,.semi-portal-rtl .semi-upload-file-card-info-retry{margin-left:0;margin-right:8px}.semi-rtl .semi-upload-file-card-icon-loading,.semi-rtl .semi-upload-file-card-icon-error,.semi-portal-rtl .semi-upload-file-card-icon-loading,.semi-portal-rtl .semi-upload-file-card-icon-error{margin-right:0;margin-left:2px}.semi-rtl .semi-upload-picture-file-card-close,.semi-portal-rtl .semi-upload-picture-file-card-close{right:auto;left:8px}.semi-rtl .semi-upload-picture-file-card .semi-progress-circle,.semi-portal-rtl .semi-upload-picture-file-card .semi-progress-circle,.semi-rtl .semi-upload-picture-file-card-retry,.semi-portal-rtl .semi-upload-picture-file-card-retry{left:auto;right:50%;transform:translate(50%,-50%)}.semi-rtl .semi-upload-picture-file-card-icon-loading,.semi-rtl .semi-upload-picture-file-card-icon-error,.semi-portal-rtl .semi-upload-picture-file-card-icon-loading,.semi-portal-rtl .semi-upload-picture-file-card-icon-error{right:0;left:6px}.semi-userGuide-spotlight{position:fixed;top:0;left:0;width:100vw;height:100vh;pointer-events:none}.semi-userGuide-spotlight-transparent-rect{pointer-events:auto}.semi-userGuide-spotlight-rect{transition:all .2s cubic-bezier(.4,0,.2,1)}.semi-userGuide-popover{max-width:fit-content;width:400px}.semi-userGuide-popup-content{color:var(--semi-color-text-0)}.semi-userGuide-popup-content-primary{color:var(--semi-color-tertiary-light-default)}.semi-userGuide-popup-content-cover img{display:block;height:200px;width:100%;border-radius:var(--semi-border-radius-medium) var(--semi-border-radius-medium) 0 0}.semi-userGuide-popup-content-body{padding:24px}.semi-userGuide-popup-content-title{font-size:18px;font-weight:600;line-height:24px;margin-bottom:8px}.semi-userGuide-popup-content-description{font-size:14px;line-height:20px;margin-bottom:48px}.semi-userGuide-popup-content-footer{display:flex;justify-content:space-between;align-items:center}.semi-userGuide-popup-content-buttons{display:flex;gap:12px;margin-left:120px}.semi-userGuide-popup-content-indicator{font-size:14px;line-height:20px}.semi-userGuide-modal .semi-modal-small{width:fit-content}.semi-userGuide-modal .semi-modal-content{padding:0;width:600px;max-width:fit-content}.semi-userGuide-modal-cover{height:300px}.semi-userGuide-modal-indicator{height:30px;display:flex;justify-content:center;align-items:center;column-gap:8px}.semi-userGuide-modal-indicator-item{width:6px;height:6px;border-radius:var(--semi-border-radius-large);background-color:var(--semi-color-primary-light-active)}.semi-userGuide-modal-indicator-item-active{background:var(--semi-color-primary)}.semi-userGuide-modal-body{display:flex;justify-content:center;align-items:center;flex-direction:column;padding:24px 48px}.semi-userGuide-modal-body-title{font-size:18px;font-weight:600;line-height:24px;margin-bottom:8px}.semi-userGuide-modal-body-description{font-size:14px;line-height:20px}.semi-userGuide-modal-footer{display:flex;justify-content:center;align-items:center;padding:24px;column-gap:12px}.semi-videoPlayer{position:relative;display:inline-block;width:100%;height:100%}.semi-videoPlayer ::-webkit-media-controls{display:none}.semi-videoPlayer-wrapper{width:100%;height:100%;position:relative;line-height:0}.semi-videoPlayer-wrapper video{width:100%;height:100%;object-fit:contain}.semi-videoPlayer-wrapper-dark{background-color:rgba(var(--semi-grey-8),1);color:var(--semi-color-bg-0)}.semi-videoPlayer-wrapper-light{background-color:var(--semi-color-disabled-bg);color:rgba(var(--semi-grey-8),1)}.semi-videoPlayer-pause{top:0;left:0;width:100%;height:100%;position:absolute;display:flex;justify-content:center;align-items:center;pointer-events:none}.semi-videoPlayer-pause svg{font-size:88px;color:var(--semi-color-text-1);pointer-events:none}.semi-videoPlayer-error{top:0;left:0;width:100%;height:100%;position:absolute;display:flex;justify-content:center;align-items:center;flex-direction:column;font-weight:600;font-size:14px}.semi-videoPlayer-error-svg{margin-bottom:12px}.semi-videoPlayer-error-dark{background-color:rgba(var(--semi-grey-8),1);color:var(--semi-color-bg-0)}.semi-videoPlayer-error-dark path{fill:var(--semi-color-bg-0)}.semi-videoPlayer-error-light{background-color:var(--semi-color-disabled-bg);color:rgba(var(--semi-grey-8),1)}.semi-videoPlayer-error-light path{fill:rgba(var(--semi-grey-8),1)}.semi-videoPlayer-poster{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.semi-videoPlayer-poster-hide{opacity:0}.semi-videoPlayer-notification{position:absolute;bottom:78px;left:8px;text-align:center;background-color:var(--semi-color-overlay-bg);color:var(--semi-color-default);padding:8px 12px;line-height:20px;border-radius:3px;font-size:14px}.semi-videoPlayer-mirror video{transform:rotateX(0) rotateY(180deg)}.semi-videoPlayer-controls{position:absolute;bottom:0;left:0;right:0;height:fit-content;opacity:1;transition:opacity .5s ease-in-out;z-index:1}.semi-videoPlayer-controls-hide{opacity:0}.semi-videoPlayer-controls-menu{display:flex;justify-content:space-between;align-items:center;box-sizing:border-box;height:56px;background-color:#1c1f23cc;padding:12px 16px}.semi-videoPlayer-controls-menu-left,.semi-videoPlayer-controls-menu-right{display:flex;align-items:center}.semi-videoPlayer-controls-menu-item{margin-right:8px}.semi-videoPlayer-controls-menu-button svg{color:#fff}.semi-videoPlayer-controls-time{color:#fff;font-size:14px;margin-right:8px;padding:0 8px;font-variant-numeric:tabular-nums}.semi-videoPlayer-controls-popover{background-color:#0000}.semi-videoPlayer-controls-volume{box-sizing:border-box;width:40px;height:160px;background-color:var(--semi-color-overlay-bg);color:#ffffffb3;border-radius:4px;padding:0 4px;line-height:16px;font-size:12px;-webkit-user-select:none;user-select:none}.semi-videoPlayer-controls-volume-title{padding:10px 0;text-align:center}.semi-videoPlayer-controls-popup{display:flex;justify-content:center;align-items:center;width:50px;height:24px;background-color:var(--semi-color-overlay-bg);color:#fff;font-weight:600;font-size:12px;line-height:16px;border-radius:3px;cursor:pointer}.semi-videoPlayer-controls-popup-menu{width:48px;background-color:var(--semi-color-overlay-bg);border-radius:4px}.semi-videoPlayer-controls-popup-menu-item{display:flex;justify-content:center;align-items:center;padding:0 8px;height:32px;color:#fff;font-size:12px}.semi-videoPlayer-controls-popup-menu-item:hover{background-color:#43444a!important}.semi-videoPlayer-controls-popup-menu .semi-dropdown-item-active{color:var(--semi-color-primary);font-weight:600;cursor:pointer}.semi-videoPlayer-progress{position:relative;height:20px;display:flex;align-items:center;justify-content:center;cursor:pointer;margin:0 8px}.semi-videoPlayer-progress-markers{position:absolute;width:100%;height:100%}.semi-videoPlayer-progress-tooltip{top:6px}.semi-videoPlayer-progress-tooltip-content{display:flex;justify-content:center;align-items:center}.semi-videoPlayer-progress-slider{position:absolute;width:100%;height:100%;left:0;bottom:0;border-radius:999px}.semi-videoPlayer-progress-slider-active .semi-videoPlayer-progress-slider-list,.semi-videoPlayer-progress-slider-active .semi-videoPlayer-progress-slider-played,.semi-videoPlayer-progress-slider-active .semi-videoPlayer-progress-slider-buffered,.semi-videoPlayer-progress-slider:hover .semi-videoPlayer-progress-slider-list,.semi-videoPlayer-progress-slider:hover .semi-videoPlayer-progress-slider-played,.semi-videoPlayer-progress-slider:hover .semi-videoPlayer-progress-slider-buffered{height:10px;transition:transform .3s;transition-timing-function:cubic-bezier(.62,.05,.36,.95)}.semi-videoPlayer-progress-slider-list{position:absolute;bottom:0;left:0;background-color:rgba(var(--semi-grey-5),1);height:4px;width:calc(100% - 2px);margin-right:2px;border-radius:999px;transition:transform .3s;transition-timing-function:cubic-bezier(.62,.05,.36,.95)}.semi-videoPlayer-progress-slider-played{position:absolute;bottom:0;left:0;background-color:var(--semi-color-primary);height:4px;border-radius:999px;transition:transform .3s;transition-timing-function:cubic-bezier(.62,.05,.36,.95)}.semi-videoPlayer-progress-slider-buffered{position:absolute;bottom:0;left:0;background-color:rgba(var(--semi-grey-3),1);height:4px;border-radius:999px;transition:transform .3s;transition-timing-function:cubic-bezier(.62,.05,.36,.95)}.semi-videoPlayer-progress-handle{box-sizing:border-box;position:absolute;width:16px;height:16px;background-color:#fff;border:1px solid var(--semi-color-primary);box-shadow:0 0 4px 0 var(--semi-color-shadow);border-radius:50%;top:15px}@keyframes semi-animation-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.semi-button.semi-button-with-icon{display:inline-flex;align-items:center}.semi-button.semi-button-with-icon .semi-button-content{display:flex;align-items:center;justify-content:center}.semi-button.semi-button-loading{pointer-events:none;cursor:not-allowed}.semi-button.semi-button-loading .semi-button-content>svg,.semi-button.semi-button-loading .semi-button-content-loading-icon{width:16px;height:16px;animation:.6s linear infinite semi-animation-rotate;animation-fill-mode:forwards}.semi-button.semi-button-with-icon-only{padding:8px;height:32px;width:32px;justify-content:center;align-items:center}.semi-button.semi-button-with-icon-only.semi-button-size-small{padding:4px;height:24px;width:24px}.semi-button.semi-button-with-icon-only.semi-button-size-large{padding:12px;height:40px;width:40px}.semi-button-content-left{margin-right:8px;display:flex;align-items:center}.semi-button-content-right{margin-left:8px;display:flex;align-items:center}.semi-rtl .semi-button,.semi-portal-rtl .semi-button{direction:rtl;padding-left:12px;padding-right:12px}.semi-rtl .semi-button-size-small,.semi-portal-rtl .semi-button-size-small{padding-left:12px;padding-right:12px}.semi-rtl .semi-button-size-large,.semi-portal-rtl .semi-button-size-large{padding-left:16px;padding-right:16px}.semi-rtl .semi-button-group,.semi-portal-rtl .semi-button-group{direction:rtl}.semi-rtl .semi-button-group>.semi-button,.semi-portal-rtl .semi-button-group>.semi-button{padding-left:0;padding-right:0}.semi-rtl .semi-button-group>.semi-button .semi-button-content,.semi-portal-rtl .semi-button-group>.semi-button .semi-button-content{padding-left:12px;padding-right:12px}.semi-rtl .semi-button-group>.semi-button-size-large .semi-button-content,.semi-portal-rtl .semi-button-group>.semi-button-size-large .semi-button-content{padding-left:16px;padding-right:16px}.semi-rtl .semi-button-group>.semi-button-size-small .semi-button-content,.semi-portal-rtl .semi-button-group>.semi-button-size-small .semi-button-content{padding-left:12px;padding-right:12px}.semi-rtl .semi-button-group>.semi-button.semi-button-with-icon-only,.semi-portal-rtl .semi-button-group>.semi-button.semi-button-with-icon-only{padding-left:0;padding-right:0}.semi-rtl .semi-button-group>.semi-button.semi-button-with-icon-only .semi-button-content,.semi-portal-rtl .semi-button-group>.semi-button.semi-button-with-icon-only .semi-button-content{padding-left:8px;padding-right:8px}.semi-rtl .semi-button-group>.semi-button.semi-button-with-icon-only.semi-button-size-small .semi-button-content,.semi-portal-rtl .semi-button-group>.semi-button.semi-button-with-icon-only.semi-button-size-small .semi-button-content{padding-left:4px;padding-right:4px}.semi-rtl .semi-button-group>.semi-button.semi-button-with-icon-only.semi-button-size-large .semi-button-content,.semi-portal-rtl .semi-button-group>.semi-button.semi-button-with-icon-only.semi-button-size-large .semi-button-content{padding-left:12px;padding-right:12px}.semi-rtl .semi-button-group>.semi-button:first-child,.semi-portal-rtl .semi-button-group>.semi-button:first-child{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--semi-border-radius-small);border-bottom-right-radius:var(--semi-border-radius-small)}.semi-rtl .semi-button-group>.semi-button:not(:last-child) .semi-button-content,.semi-portal-rtl .semi-button-group>.semi-button:not(:last-child) .semi-button-content{border-left:1px var(--semi-color-border) solid;border-right:0}.semi-rtl .semi-button-group>.semi-button:last-child,.semi-portal-rtl .semi-button-group>.semi-button:last-child{border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--semi-border-radius-small);border-bottom-left-radius:var(--semi-border-radius-small)}.semi-rtl .semi-button.semi-button-with-icon-only,.semi-portal-rtl .semi-button.semi-button-with-icon-only{padding-left:8px;padding-right:8px}.semi-rtl .semi-button.semi-button-with-icon-only.semi-button-size-small,.semi-portal-rtl .semi-button.semi-button-with-icon-only.semi-button-size-small{padding-left:4px;padding-right:4px}.semi-rtl .semi-button.semi-button-with-icon-only.semi-button-size-large,.semi-portal-rtl .semi-button.semi-button-with-icon-only.semi-button-size-large{padding-left:12px;padding-right:12px}.semi-rtl .semi-button-content-left,.semi-portal-rtl .semi-button-content-left{margin-left:8px;margin-right:0}.semi-rtl .semi-button-content-right,.semi-portal-rtl .semi-button-content-right{margin-right:8px;margin-left:0}.semi-input-textarea-wrapper{box-sizing:border-box;display:inline-block;position:relative;width:100%;border:1px rgba(0,0,0,0) solid;border-radius:var(--semi-border-radius-small);vertical-align:bottom;background-color:var(--semi-color-fill-0);transition:background-color var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none),border var(--semi-transition_duration-none) var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-input-textarea-wrapper-resizeX{display:inline-block;width:fit-content;max-width:100%}.semi-input-textarea-wrapper:hover{background-color:var(--semi-color-fill-1)}.semi-input-textarea-wrapper-focus{background-color:var(--semi-color-fill-0);border:1px var(--semi-color-focus-border) solid}.semi-input-textarea-wrapper-focus:hover,.semi-input-textarea-wrapper-focus:active{background-color:var(--semi-color-fill-0)}.semi-input-textarea-wrapper:active{background-color:var(--semi-color-fill-2)}.semi-input-textarea-wrapper .semi-input-clearbtn{position:absolute;top:0;min-width:24px;color:var(--semi-color-text-2);right:4px;height:32px;display:flex;align-items:center;justify-content:center}.semi-input-textarea-wrapper .semi-input-clearbtn>svg{pointer-events:none}.semi-input-textarea-wrapper .semi-input-clearbtn:hover{cursor:pointer}.semi-input-textarea-wrapper .semi-input-clearbtn:hover .semi-icon{color:var(--semi-color-primary-hover)}.semi-input-textarea-wrapper .semi-input-clearbtn-hidden{visibility:hidden}.semi-input-textarea-wrapper-disabled,.semi-input-textarea-wrapper-readonly{cursor:not-allowed;color:var(--semi-color-disabled-text);background-color:var(--semi-color-disabled-fill)}.semi-input-textarea-wrapper-disabled:hover,.semi-input-textarea-wrapper-readonly:hover{background-color:var(--semi-color-disabled-fill)}.semi-input-textarea-wrapper-disabled::placeholder,.semi-input-textarea-wrapper-readonly::placeholder{color:var(--semi-color-disabled-text)}.semi-input-textarea-wrapper-readonly{cursor:text}.semi-input-textarea-wrapper-error{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger-light-default)}.semi-input-textarea-wrapper-error:hover{background-color:var(--semi-color-danger-light-hover);border-color:var(--semi-color-danger-light-hover)}.semi-input-textarea-wrapper-error.semi-input-textarea-wrapper-focus{background-color:var(--semi-color-danger-light-default);border-color:var(--semi-color-danger)}.semi-input-textarea-wrapper-error:active{background-color:var(--semi-color-danger-light-active);border-color:var(--semi-color-danger)}.semi-input-textarea-wrapper-warning{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning-light-default)}.semi-input-textarea-wrapper-warning:hover{background-color:var(--semi-color-warning-light-hover);border-color:var(--semi-color-warning-light-hover)}.semi-input-textarea-wrapper-warning.semi-input-textarea-wrapper-focus{background-color:var(--semi-color-warning-light-default);border-color:var(--semi-color-warning)}.semi-input-textarea-wrapper-warning:active{background-color:var(--semi-color-warning-light-active);border-color:var(--semi-color-warning)}.semi-input-textarea{position:relative;resize:none;padding:5px 12px;box-shadow:none;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;background-color:#0000;border:0 solid rgba(0,0,0,0);vertical-align:bottom;width:100%;outline:none;cursor:text;box-sizing:border-box;color:var(--semi-color-text-0)}.semi-input-textarea:hover{border-color:#0000}.semi-input-textarea::placeholder{color:var(--semi-color-text-2)}.semi-input-textarea-showClear{padding-right:36px}.semi-input-textarea-disabled,.semi-input-textarea-readonly{cursor:not-allowed;color:var(--semi-color-disabled-text);background-color:#0000}.semi-input-textarea-disabled:hover,.semi-input-textarea-readonly:hover{background-color:#0000}.semi-input-textarea-disabled::placeholder,.semi-input-textarea-readonly::placeholder{color:var(--semi-color-disabled-text)}.semi-input-textarea-readonly{cursor:text}.semi-input-textarea-autosize{overflow:hidden;resize:none}.semi-input-textarea-counter{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;display:flex;flex-direction:column;justify-content:center;padding:3px 12px 5px;min-height:24px;text-align:right;color:var(--semi-color-text-2)}.semi-input-textarea-counter-exceed{color:var(--semi-color-danger)}.semi-input-textarea-borderless:not(:focus-within):not(:hover){background-color:#0000;border-color:#0000}.semi-input-textarea-borderless:focus-within:not(:active){background-color:#0000}.semi-input-textarea-borderless.semi-input-textarea-wrapper-error:not(:focus-within){border-color:var(--semi-color-danger)}.semi-input-textarea-borderless.semi-input-textarea-wrapper-warning:not(:focus-within){border-color:var(--semi-color-warning)}.semi-input-textarea-borderless.semi-input-textarea-wrapper-error .semi-input-textarea-counter{color:var(--semi-color-danger)}.semi-input-textarea-borderless.semi-input-textarea-wrapper-warning .semi-input-textarea-counter{color:var(--semi-color-warning)}.semi-input-textarea-wrapper-withLineNumber{display:flex;padding:0;align-items:flex-start}.semi-input-textarea-wrapper-withLineNumber.semi-input-textarea-wrapper-resizeX{display:inline-flex;width:fit-content;max-width:100%}.semi-input-textarea-wrapper-withLineNumber.semi-input-textarea-wrapper-resizeX .semi-input-textarea-content{flex:0 0 auto}.semi-input-textarea-wrapper-withLineNumber .semi-input-textarea-lineNumber{flex-shrink:0;padding:5px 12px;background-color:var(--semi-color-fill-1);border-right:1px solid var(--semi-color-border);color:var(--semi-color-text-2);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:inherit;line-height:1.5;text-align:right;-webkit-user-select:none;user-select:none;min-width:36px;border-radius:var(--semi-border-radius-small) 0 0 var(--semi-border-radius-small);overflow-y:auto;overflow-x:hidden;scrollbar-width:none;-ms-overflow-style:none}.semi-input-textarea-wrapper-withLineNumber .semi-input-textarea-lineNumber::-webkit-scrollbar{display:none}.semi-input-textarea-wrapper-withLineNumber .semi-input-textarea-content{display:flex;flex:1;min-width:0}.semi-input-textarea-wrapper-withLineNumber .semi-input-textarea-lineNumber-item{display:flex;align-items:flex-start;justify-content:flex-end;box-sizing:border-box}.semi-input-textarea-wrapper-withLineNumber .semi-input-textarea{border-radius:0 var(--semi-border-radius-small) var(--semi-border-radius-small) 0;line-height:1.5;flex:1}.semi-rtl .semi-input-wrapper,.semi-portal-rtl .semi-input-wrapper{direction:rtl}.semi-rtl .semi-input-wrapper__with-prefix .semi-input,.semi-portal-rtl .semi-input-wrapper__with-prefix .semi-input{padding-left:auto;padding-right:0}.semi-rtl .semi-input-wrapper__with-suffix .semi-input,.semi-portal-rtl .semi-input-wrapper__with-suffix .semi-input{padding-right:auto;padding-left:0}.semi-rtl .semi-input,.semi-portal-rtl .semi-input{padding-left:12px;padding-right:12px}.semi-rtl .semi-input-clearbtn+.semi-rtl .semi-input-suffix+.semi-input-suffix-text,.semi-rtl .semi-input-clearbtn+.semi-portal-rtl .semi-input-suffix+.semi-input-suffix-text,.semi-portal-rtl .semi-input-clearbtn+.semi-rtl .semi-input-suffix+.semi-input-suffix-text,.semi-portal-rtl .semi-input-clearbtn+.semi-portal-rtl .semi-input-suffix+.semi-input-suffix-text{margin-left:auto;margin-right:0}.semi-rtl .semi-input-clearbtn+.semi-rtl .semi-input-suffix+.semi-input-suffix-icon,.semi-rtl .semi-input-clearbtn+.semi-portal-rtl .semi-input-suffix+.semi-input-suffix-icon,.semi-portal-rtl .semi-input-clearbtn+.semi-rtl .semi-input-suffix+.semi-input-suffix-icon,.semi-portal-rtl .semi-input-clearbtn+.semi-portal-rtl .semi-input-suffix+.semi-input-suffix-icon{margin-left:auto;margin-right:0}.semi-rtl .semi-input-append,.semi-portal-rtl .semi-input-append{border-left:0;border-right:1px rgba(0,0,0,0) solid}.semi-rtl .semi-input-prepend,.semi-portal-rtl .semi-input-prepend{border-right:0;border-left:1px rgba(0,0,0,0) solid}.semi-rtl .semi-input-group .semi-select:not(:last-child):after,.semi-rtl .semi-input-group .semi-cascader:not(:last-child):after,.semi-rtl .semi-input-group .semi-tree-select:not(:last-child):after,.semi-rtl .semi-input-group>.semi-input-wrapper:not(:last-child):after,.semi-portal-rtl .semi-input-group .semi-select:not(:last-child):after,.semi-portal-rtl .semi-input-group .semi-cascader:not(:last-child):after,.semi-portal-rtl .semi-input-group .semi-tree-select:not(:last-child):after,.semi-portal-rtl .semi-input-group>.semi-input-wrapper:not(:last-child):after{right:auto;left:-1px}.semi-rtl .semi-input-group .semi-input-number:not(:last-child):after,.semi-portal-rtl .semi-input-group .semi-input-number:not(:last-child):after{right:auto;left:-1px}.semi-rtl .semi-input-textarea-wrapper,.semi-portal-rtl .semi-input-textarea-wrapper{direction:rtl}.semi-rtl .semi-input-textarea-counter,.semi-portal-rtl .semi-input-textarea-counter{text-align:left}.semi-rtl .semi-input-textarea-showClear,.semi-portal-rtl .semi-input-textarea-showClear{padding-right:0;padding-left:36px}body,:host{--semi-transition_duration-slowest:0ms;--semi-transition_duration-slower:0ms;--semi-transition_duration-slow:0ms;--semi-transition_duration-normal:0ms;--semi-transition_duration-fast:0ms;--semi-transition_duration-faster:0ms;--semi-transition_duration-fastest:0ms;--semi-transition_duration-none:0ms;--semi-transition_function-linear:linear;--semi-transition_function-ease:ease;--semi-transition_function-easeIn:ease-in;--semi-transition_function-easeOut:ease-out;--semi-transition_function-easeInIOut:ease-in-out;--semi-transition_delay-none: 0ms;--semi-transition_delay-slowest:0ms;--semi-transition_delay-slower:0ms;--semi-transition_delay-slow:0ms;--semi-transition_delay-normal:0ms;--semi-transition_delay-fast:0ms;--semi-transition_delay-faster:0ms;--semi-transition_delay-fastest:0ms;--semi-transform_scale-none:scale(1,1);--semi-transform_scale-small:scale(1,1);--semi-transform_scale-medium:scale(1,1);--semi-transform_scale-large:scale(1,1);--semi-transform-rotate-none:rotate(0deg);--semi-transform_rotate-clockwise90deg:rotate(90deg);--semi-transform_rotate-clockwise180deg:rotate(180deg);--semi-transform_rotate-clockwise270deg:rotate(270deg);--semi-transform_rotate-clockwise360deg:rotate(360deg);--semi-transform_rotate-anticlockwise90deg:rotate(-90deg);--semi-transform_rotate-anticlockwise180deg:rotate(-180deg);--semi-transform_rotate-anticlockwise270deg:rotate(-270deg);--semi-transform_rotate-anticlockwise360deg:rotate(-360deg)}body,body .semi-always-light,:host,:host .semi-always-light{--semi-amber-0: 254,251,235;--semi-amber-1: 252,245,206;--semi-amber-2: 249,232,158;--semi-amber-3: 246,216,111;--semi-amber-4: 243,198,65;--semi-amber-5: 240,177,20;--semi-amber-6: 200,138,15;--semi-amber-7: 160,102,10;--semi-amber-8: 120,70,6;--semi-amber-9: 80,43,3;--semi-black: 0,0,0;--semi-blue-0: 234,245,255;--semi-blue-1: 203,231,254;--semi-blue-2: 152,205,253;--semi-blue-3: 101,178,252;--semi-blue-4: 50,149,251;--semi-blue-5: 0,100,250;--semi-blue-6: 0,98,214;--semi-blue-7: 0,79,179;--semi-blue-8: 0,61,143;--semi-blue-9: 0,44,107;--semi-cyan-0: 229,247,248;--semi-cyan-1: 194,239,240;--semi-cyan-2: 138,221,226;--semi-cyan-3: 88,203,211;--semi-cyan-4: 44,184,197;--semi-cyan-5: 5,164,182;--semi-cyan-6: 3,134,152;--semi-cyan-7: 1,105,121;--semi-cyan-8: 0,77,91;--semi-cyan-9: 0,50,61;--semi-green-0: 236,247,236;--semi-green-1: 208,240,209;--semi-green-2: 164,224,167;--semi-green-3: 125,209,130;--semi-green-4: 90,194,98;--semi-green-5: 59,179,70;--semi-green-6: 48,149,59;--semi-green-7: 37,119,47;--semi-green-8: 27,89,36;--semi-green-9: 17,60,24;--semi-grey-0: 249,249,249;--semi-grey-1: 230,232,234;--semi-grey-2: 198,202,205;--semi-grey-3: 167,171,176;--semi-grey-4: 136,141,146;--semi-grey-5: 107,112,117;--semi-grey-6: 85,91,97;--semi-grey-7: 65,70,76;--semi-grey-8: 46,50,56;--semi-grey-9: 28,31,35;--semi-indigo-0: 236,239,248;--semi-indigo-1: 209,216,240;--semi-indigo-2: 167,179,225;--semi-indigo-3: 128,144,211;--semi-indigo-4: 94,111,196;--semi-indigo-5: 63,81,181;--semi-indigo-6: 51,66,161;--semi-indigo-7: 40,52,140;--semi-indigo-8: 31,40,120;--semi-indigo-9: 23,29,99;--semi-light-blue-0: 233,247,253;--semi-light-blue-1: 201,236,252;--semi-light-blue-2: 149,216,248;--semi-light-blue-3: 98,195,245;--semi-light-blue-4: 48,172,241;--semi-light-blue-5: 0,149,238;--semi-light-blue-6: 0,123,202;--semi-light-blue-7: 0,99,167;--semi-light-blue-8: 0,75,131;--semi-light-blue-9: 0,53,95;--semi-light-green-0: 243,248,236;--semi-light-green-1: 227,240,208;--semi-light-green-2: 200,226,165;--semi-light-green-3: 173,211,126;--semi-light-green-4: 147,197,91;--semi-light-green-5: 123,182,60;--semi-light-green-6: 100,152,48;--semi-light-green-7: 78,121,38;--semi-light-green-8: 57,91,27;--semi-light-green-9: 37,61,18;--semi-lime-0: 242,250,230;--semi-lime-1: 227,246,197;--semi-lime-2: 203,237,142;--semi-lime-3: 183,227,91;--semi-lime-4: 167,218,44;--semi-lime-5: 155,209,0;--semi-lime-6: 126,174,0;--semi-lime-7: 99,139,0;--semi-lime-8: 72,104,0;--semi-lime-9: 47,70,0;--semi-orange-0: 255,248,234;--semi-orange-1: 254,238,204;--semi-orange-2: 254,217,152;--semi-orange-3: 253,193,101;--semi-orange-4: 253,166,51;--semi-orange-5: 252,136,0;--semi-orange-6: 210,103,0;--semi-orange-7: 168,74,0;--semi-orange-8: 126,49,0;--semi-orange-9: 84,29,0;--semi-pink-0: 253,236,239;--semi-pink-1: 251,207,216;--semi-pink-2: 246,160,181;--semi-pink-3: 242,115,150;--semi-pink-4: 237,72,123;--semi-pink-5: 233,30,99;--semi-pink-6: 197,19,86;--semi-pink-7: 162,11,72;--semi-pink-8: 126,5,58;--semi-pink-9: 90,1,43;--semi-purple-0: 247,233,247;--semi-purple-1: 239,202,240;--semi-purple-2: 221,155,224;--semi-purple-3: 201,111,209;--semi-purple-4: 180,73,194;--semi-purple-5: 158,40,179;--semi-purple-6: 135,30,158;--semi-purple-7: 113,22,138;--semi-purple-8: 92,15,117;--semi-purple-9: 73,10,97;--semi-red-0: 254,242,237;--semi-red-1: 254,221,210;--semi-red-2: 253,183,165;--semi-red-3: 251,144,120;--semi-red-4: 250,102,76;--semi-red-5: 249,57,32;--semi-red-6: 213,37,21;--semi-red-7: 178,20,12;--semi-red-8: 142,8,5;--semi-red-9: 106,1,3;--semi-teal-0: 228,247,244;--semi-teal-1: 192,240,232;--semi-teal-2: 135,224,211;--semi-teal-3: 84,209,193;--semi-teal-4: 39,194,176;--semi-teal-5: 0,179,161;--semi-teal-6: 0,149,137;--semi-teal-7: 0,119,111;--semi-teal-8: 0,89,85;--semi-teal-9: 0,60,58;--semi-violet-0: 243,237,249;--semi-violet-1: 226,209,244;--semi-violet-2: 196,167,233;--semi-violet-3: 166,127,221;--semi-violet-4: 136,91,210;--semi-violet-5: 106,58,199;--semi-violet-6: 87,47,179;--semi-violet-7: 70,37,158;--semi-violet-8: 54,28,138;--semi-violet-9: 40,20,117;--semi-white: 255,255,255;--semi-yellow-0: 255,253,234;--semi-yellow-1: 254,251,203;--semi-yellow-2: 253,243,152;--semi-yellow-3: 252,232,101;--semi-yellow-4: 251,218,50;--semi-yellow-5: 250,200,0;--semi-yellow-6: 208,170,0;--semi-yellow-7: 167,139,0;--semi-yellow-8: 125,106,0;--semi-yellow-9: 83,72,0;--semi-ai-purple-0: 248,237,255;--semi-ai-purple-1: 242,218,255;--semi-ai-purple-2: 227,181,255;--semi-ai-purple-3: 209,145,255;--semi-ai-purple-4: 189,108,255;--semi-ai-purple-5: 166,71,255;--semi-ai-purple-6: 134,54,219;--semi-ai-purple-7: 105,40,184;--semi-ai-purple-8: 78,28,148;--semi-ai-purple-9: 54,18,112;--semi-ai-general-0-3: 239,247,255;--semi-ai-general-0-2: 244,244,255;--semi-ai-general-0-1: 248,237,255;--semi-ai-general-0-0: 255,242,255;--semi-ai-general-1-3: 213,235,255;--semi-ai-general-1-2: 223,224,255;--semi-ai-general-1-1: 242,218,255;--semi-ai-general-1-0: 255,218,254;--semi-ai-general-2-3: 171,213,255;--semi-ai-general-2-2: 193,192,255;--semi-ai-general-2-1: 227,181,255;--semi-ai-general-2-0: 254,181,255;--semi-ai-general-3-3: 130,190,255;--semi-ai-general-3-2: 163,160,255;--semi-ai-general-3-1: 209,145,255;--semi-ai-general-3-0: 249,143,255;--semi-ai-general-4-3: 88,166,255;--semi-ai-general-4-2: 134,129,255;--semi-ai-general-4-1: 189,108,255;--semi-ai-general-4-0: 242,106,255;--semi-ai-general-5-3: 46,140,255;--semi-ai-general-5-2: 107,97,255;--semi-ai-general-5-1: 166,71,255;--semi-ai-general-5-0: 233,69,255;--semi-ai-general-6-3: 33,114,219;--semi-ai-general-6-2: 88,77,219;--semi-ai-general-6-1: 134,54,219;--semi-ai-general-6-0: 194,53,219;--semi-ai-general-7-3: 22,89,184;--semi-ai-general-7-2: 71,59,184;--semi-ai-general-7-1: 105,40,184;--semi-ai-general-7-0: 157,39,184;--semi-ai-general-8-3: 13,67,148;--semi-ai-general-8-2: 55,43,148;--semi-ai-general-8-1: 78,28,148;--semi-ai-general-8-0: 121,27,148;--semi-ai-general-9-3: 7,47,112;--semi-ai-general-9-2: 40,29,112;--semi-ai-general-9-1: 54,18,112;--semi-ai-general-9-0: 88,17,112;--semi-ai-general-0: linear-gradient(278deg, rgba(var(--semi-ai-general-0-0)) 0%, rgba(var(--semi-ai-general-0-1)) 30%, rgba(var(--semi-ai-general-0-2)) 60%, rgba(var(--semi-ai-general-0-3)) 100%);--semi-ai-general-1: linear-gradient(278deg, rgba(var(--semi-ai-general-1-0)) 0%, rgba(var(--semi-ai-general-1-1)) 30%, rgba(var(--semi-ai-general-1-2)) 60%, rgba(var(--semi-ai-general-1-3)) 100%);--semi-ai-general-2: linear-gradient(278deg, rgba(var(--semi-ai-general-2-0)) 0%, rgba(var(--semi-ai-general-2-1)) 30%, rgba(var(--semi-ai-general-2-2)) 60%, rgba(var(--semi-ai-general-2-3)) 100%);--semi-ai-general-3: linear-gradient(278deg, rgba(var(--semi-ai-general-3-0)) 0%, rgba(var(--semi-ai-general-3-1)) 30%, rgba(var(--semi-ai-general-3-2)) 60%, rgba(var(--semi-ai-general-3-3)) 100%);--semi-ai-general-4: linear-gradient(278deg, rgba(var(--semi-ai-general-4-0)) 0%, rgba(var(--semi-ai-general-4-1)) 30%, rgba(var(--semi-ai-general-4-2)) 60%, rgba(var(--semi-ai-general-4-3)) 100%);--semi-ai-general-5: linear-gradient(278deg, rgba(var(--semi-ai-general-5-0)) 0%, rgba(var(--semi-ai-general-5-1)) 30%, rgba(var(--semi-ai-general-5-2)) 60%, rgba(var(--semi-ai-general-5-3)) 100%);--semi-ai-general-6: linear-gradient(278deg, rgba(var(--semi-ai-general-6-0)) 0%, rgba(var(--semi-ai-general-6-1)) 30%, rgba(var(--semi-ai-general-6-2)) 60%, rgba(var(--semi-ai-general-6-3)) 100%);--semi-ai-general-7: linear-gradient(278deg, rgba(var(--semi-ai-general-7-0)) 0%, rgba(var(--semi-ai-general-7-1)) 30%, rgba(var(--semi-ai-general-7-2)) 60%, rgba(var(--semi-ai-general-7-3)) 100%);--semi-ai-general-8: linear-gradient(278deg, rgba(var(--semi-ai-general-8-0)) 0%, rgba(var(--semi-ai-general-8-1)) 30%, rgba(var(--semi-ai-general-8-2)) 60%, rgba(var(--semi-ai-general-8-3)) 100%);--semi-ai-general-9: linear-gradient(278deg, rgba(var(--semi-ai-general-9-0)) 0%, rgba(var(--semi-ai-general-9-1)) 30%, rgba(var(--semi-ai-general-9-2)) 60%, rgba(var(--semi-ai-general-9-3)) 100%)}body[theme-mode=dark],body .semi-always-dark,:host([theme-mode=dark]),:host .semi-always-dark{--semi-red-0: 108,9,11;--semi-red-1: 144,17,16;--semi-red-2: 180,32,25;--semi-red-3: 215,51,36;--semi-red-4: 251,73,50;--semi-red-5: 252,114,90;--semi-red-6: 253,153,131;--semi-red-7: 253,190,172;--semi-red-8: 254,224,213;--semi-red-9: 255,243,239;--semi-pink-0: 92,7,48;--semi-pink-1: 128,14,65;--semi-pink-2: 164,23,81;--semi-pink-3: 199,34,97;--semi-pink-4: 235,47,113;--semi-pink-5: 239,86,134;--semi-pink-6: 243,126,159;--semi-pink-7: 247,168,188;--semi-pink-8: 251,211,220;--semi-pink-9: 253,238,241;--semi-purple-0: 74,16,97;--semi-purple-1: 94,23,118;--semi-purple-2: 115,31,138;--semi-purple-3: 137,40,159;--semi-purple-4: 160,51,179;--semi-purple-5: 181,83,194;--semi-purple-6: 202,120,209;--semi-purple-7: 221,160,225;--semi-purple-8: 239,206,240;--semi-purple-9: 247,235,247;--semi-violet-0: 64,27,119;--semi-violet-1: 76,36,140;--semi-violet-2: 88,46,160;--semi-violet-3: 100,57,181;--semi-violet-4: 114,70,201;--semi-violet-5: 136,101,212;--semi-violet-6: 162,136,223;--semi-violet-7: 190,173,233;--semi-violet-8: 221,212,244;--semi-violet-9: 241,238,250;--semi-indigo-0: 23,30,101;--semi-indigo-1: 32,41,122;--semi-indigo-2: 41,54,142;--semi-indigo-3: 52,68,163;--semi-indigo-4: 64,83,183;--semi-indigo-5: 95,113,197;--semi-indigo-6: 129,145,212;--semi-indigo-7: 167,180,226;--semi-indigo-8: 209,216,241;--semi-indigo-9: 237,239,248;--semi-blue-0: 5,49,112;--semi-blue-1: 10,70,148;--semi-blue-2: 19,92,184;--semi-blue-3: 29,117,219;--semi-blue-4: 41,144,255;--semi-blue-5: 84,169,255;--semi-blue-6: 127,193,255;--semi-blue-7: 169,215,255;--semi-blue-8: 212,236,255;--semi-blue-9: 239,248,255;--semi-light-blue-0: 0,55,97;--semi-light-blue-1: 0,77,133;--semi-light-blue-2: 3,102,169;--semi-light-blue-3: 10,129,204;--semi-light-blue-4: 19,159,240;--semi-light-blue-5: 64,180,243;--semi-light-blue-6: 110,200,246;--semi-light-blue-7: 157,220,249;--semi-light-blue-8: 206,238,252;--semi-light-blue-9: 235,248,254;--semi-cyan-0: 4,52,61;--semi-cyan-1: 7,79,92;--semi-cyan-2: 10,108,123;--semi-cyan-3: 14,137,153;--semi-cyan-4: 19,168,184;--semi-cyan-5: 56,187,198;--semi-cyan-6: 98,205,212;--semi-cyan-7: 145,223,227;--semi-cyan-8: 198,239,241;--semi-cyan-9: 231,247,248;--semi-teal-0: 2,60,57;--semi-teal-1: 4,90,85;--semi-teal-2: 7,119,111;--semi-teal-3: 10,149,136;--semi-teal-4: 14,179,161;--semi-teal-5: 51,194,176;--semi-teal-6: 94,209,193;--semi-teal-7: 142,225,211;--semi-teal-8: 196,240,232;--semi-teal-9: 230,247,244;--semi-green-0: 18,60,25;--semi-green-1: 28,90,37;--semi-green-2: 39,119,49;--semi-green-3: 50,149,61;--semi-green-4: 62,179,73;--semi-green-5: 93,194,100;--semi-green-6: 127,209,132;--semi-green-7: 166,225,168;--semi-green-8: 208,240,209;--semi-green-9: 236,247,236;--semi-light-green-0: 38,61,19;--semi-light-green-1: 59,92,29;--semi-light-green-2: 81,123,40;--semi-light-green-3: 103,153,52;--semi-light-green-4: 127,184,64;--semi-light-green-5: 151,198,95;--semi-light-green-6: 176,212,129;--semi-light-green-7: 201,227,167;--semi-light-green-8: 228,241,209;--semi-light-green-9: 243,248,237;--semi-lime-0: 49,70,3;--semi-lime-1: 75,105,5;--semi-lime-2: 103,141,9;--semi-lime-3: 132,176,12;--semi-lime-4: 162,211,17;--semi-lime-5: 174,220,58;--semi-lime-6: 189,229,102;--semi-lime-7: 207,237,150;--semi-lime-8: 229,246,201;--semi-lime-9: 243,251,233;--semi-yellow-0: 84,73,3;--semi-yellow-1: 126,108,6;--semi-yellow-2: 168,142,10;--semi-yellow-3: 210,175,15;--semi-yellow-4: 252,206,20;--semi-yellow-5: 253,222,67;--semi-yellow-6: 253,235,113;--semi-yellow-7: 254,245,160;--semi-yellow-8: 254,251,208;--semi-yellow-9: 255,254,236;--semi-amber-0: 81,46,9;--semi-amber-1: 121,75,15;--semi-amber-2: 161,107,22;--semi-amber-3: 202,143,30;--semi-amber-4: 242,183,38;--semi-amber-5: 245,202,80;--semi-amber-6: 247,219,122;--semi-amber-7: 250,234,166;--semi-amber-8: 252,246,210;--semi-amber-9: 254,251,237;--semi-orange-0: 85,31,3;--semi-orange-1: 128,53,6;--semi-orange-2: 170,80,10;--semi-orange-3: 213,111,15;--semi-orange-4: 255,146,20;--semi-orange-5: 255,174,67;--semi-orange-6: 255,199,114;--semi-orange-7: 255,221,161;--semi-orange-8: 255,239,208;--semi-orange-9: 255,249,237;--semi-grey-0: 28,31,35;--semi-grey-1: 46,50,56;--semi-grey-2: 65,70,76;--semi-grey-3: 85,91,97;--semi-grey-4: 107,112,117;--semi-grey-5: 136,141,146;--semi-grey-6: 167,171,176;--semi-grey-7: 198,202,205;--semi-grey-8: 230,232,234;--semi-grey-9: 249,249,249;--semi-white: 255, 255, 255;--semi-black: 0, 0, 0;--semi-ai-purple-0: 58,23,112;--semi-ai-purple-1: 83,35,148;--semi-ai-purple-2: 111,49,184;--semi-ai-purple-3: 141,65,219;--semi-ai-purple-4: 167,68,255;--semi-ai-purple-5: 195,117,255;--semi-ai-purple-6: 213,152,255;--semi-ai-purple-7: 229,186,255;--semi-ai-purple-8: 243,221,255;--semi-ai-purple-9: 251,243,255;--semi-ai-general-0-0: 9,44,100;--semi-ai-general-0-1: 39,29,108;--semi-ai-general-0-2: 58,23,112;--semi-ai-general-0-3: 80,18,101;--semi-ai-general-1-0: 17,64,136;--semi-ai-general-1-1: 54,43,144;--semi-ai-general-1-2: 83,35,148;--semi-ai-general-1-3: 113,28,137;--semi-ai-general-2-0: 26,86,172;--semi-ai-general-2-1: 70,59,180;--semi-ai-general-2-2: 111,49,184;--semi-ai-general-2-3: 148,41,173;--semi-ai-general-3-0: 38,111,207;--semi-ai-general-3-1: 88,78,215;--semi-ai-general-3-2: 141,65,219;--semi-ai-general-3-3: 185,55,208;--semi-ai-general-4-0: 35,127,240;--semi-ai-general-4-1: 94,84,248;--semi-ai-general-4-2: 167,68,255;--semi-ai-general-4-3: 219,56,241;--semi-ai-general-5-0: 91,162,245;--semi-ai-general-5-1: 134,129,252;--semi-ai-general-5-2: 195,117,255;--semi-ai-general-5-3: 234,107,246;--semi-ai-general-6-0: 131,187,248;--semi-ai-general-6-1: 163,160,253;--semi-ai-general-6-2: 213,152,255;--semi-ai-general-6-3: 243,143,248;--semi-ai-general-7-0: 172,210,250;--semi-ai-general-7-1: 192,192,253;--semi-ai-general-7-2: 229,186,255;--semi-ai-general-7-3: 249,180,251;--semi-ai-general-8-0: 213,233,253;--semi-ai-general-8-1: 223,223,254;--semi-ai-general-8-2: 243,221,255;--semi-ai-general-8-3: 253,217,252;--semi-ai-general-9-0: 239,247,254;--semi-ai-general-9-1: 244,244,255;--semi-ai-general-9-2: 251,243,255;--semi-ai-general-9-3: 254,241,254;--semi-ai-general-0: linear-gradient(278deg, rgba(var(--semi-ai-general-0-0)) 0%, rgba(var(--semi-ai-general-0-1)) 30%, rgba(var(--semi-ai-general-0-2)) 60%, rgba(var(--semi-ai-general-0-3)) 100%);--semi-ai-general-1: linear-gradient(278deg, rgba(var(--semi-ai-general-1-0)) 0%, rgba(var(--semi-ai-general-1-1)) 30%, rgba(var(--semi-ai-general-1-2)) 60%, rgba(var(--semi-ai-general-1-3)) 100%);--semi-ai-general-2: linear-gradient(278deg, rgba(var(--semi-ai-general-2-0)) 0%, rgba(var(--semi-ai-general-2-1)) 30%, rgba(var(--semi-ai-general-2-2)) 60%, rgba(var(--semi-ai-general-2-3)) 100%);--semi-ai-general-3: linear-gradient(278deg, rgba(var(--semi-ai-general-3-0)) 0%, rgba(var(--semi-ai-general-3-1)) 30%, rgba(var(--semi-ai-general-3-2)) 60%, rgba(var(--semi-ai-general-3-3)) 100%);--semi-ai-general-4: linear-gradient(278deg, rgba(var(--semi-ai-general-4-0)) 0%, rgba(var(--semi-ai-general-4-1)) 30%, rgba(var(--semi-ai-general-4-2)) 60%, rgba(var(--semi-ai-general-4-3)) 100%);--semi-ai-general-5: linear-gradient(278deg, rgba(var(--semi-ai-general-5-0)) 0%, rgba(var(--semi-ai-general-5-1)) 30%, rgba(var(--semi-ai-general-5-2)) 60%, rgba(var(--semi-ai-general-5-3)) 100%);--semi-ai-general-6: linear-gradient(278deg, rgba(var(--semi-ai-general-6-0)) 0%, rgba(var(--semi-ai-general-6-1)) 30%, rgba(var(--semi-ai-general-6-2)) 60%, rgba(var(--semi-ai-general-6-3)) 100%);--semi-ai-general-7: linear-gradient(278deg, rgba(var(--semi-ai-general-7-0)) 0%, rgba(var(--semi-ai-general-7-1)) 30%, rgba(var(--semi-ai-general-7-2)) 60%, rgba(var(--semi-ai-general-7-3)) 100%);--semi-ai-general-8: linear-gradient(278deg, rgba(var(--semi-ai-general-8-0)) 0%, rgba(var(--semi-ai-general-8-1)) 30%, rgba(var(--semi-ai-general-8-2)) 60%, rgba(var(--semi-ai-general-8-3)) 100%);--semi-ai-general-9: linear-gradient(278deg, rgba(var(--semi-ai-general-9-0)) 0%, rgba(var(--semi-ai-general-9-1)) 30%, rgba(var(--semi-ai-general-9-2)) 60%, rgba(var(--semi-ai-general-9-3)) 100%)}body,body[theme-mode=dark] .semi-always-light,:host,:host .semi-always-light{font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;--semi-color-white: rgba(var(--semi-white), 1);--semi-color-black: rgba(var(--semi-black), 1);--semi-color-primary: rgba(var(--semi-blue-5), 1);--semi-color-primary-hover: rgba(var(--semi-blue-6), 1);--semi-color-primary-active: rgba(var(--semi-blue-7), 1);--semi-color-primary-disabled: rgba(var(--semi-blue-2), 1);--semi-color-primary-light-default: rgba(var(--semi-blue-0), 1);--semi-color-primary-light-hover: rgba(var(--semi-blue-1), 1);--semi-color-primary-light-active: rgba(var(--semi-blue-2), 1);--semi-color-secondary: rgba(var(--semi-light-blue-5), 1);--semi-color-secondary-hover: rgba(var(--semi-light-blue-6), 1);--semi-color-secondary-active: rgba(var(--semi-light-blue-7), 1);--semi-color-secondary-disabled: rgba(var(--semi-light-blue-2), 1);--semi-color-secondary-light-default: rgba(var(--semi-light-blue-0), 1);--semi-color-secondary-light-hover: rgba(var(--semi-light-blue-1), 1);--semi-color-secondary-light-active: rgba(var(--semi-light-blue-2), 1);--semi-color-tertiary: rgba(var(--semi-grey-5), 1);--semi-color-tertiary-hover: rgba(var(--semi-grey-6), 1);--semi-color-tertiary-active: rgba(var(--semi-grey-7), 1);--semi-color-tertiary-light-default: rgba(var(--semi-grey-0), 1);--semi-color-tertiary-light-hover: rgba(var(--semi-grey-1), 1);--semi-color-tertiary-light-active: rgba(var(--semi-grey-2), 1);--semi-color-default: rgba(var(--semi-grey-0), 1);--semi-color-default-hover: rgba(var(--semi-grey-1), 1);--semi-color-default-active: rgba(var(--semi-grey-2), 1);--semi-color-info: rgba(var(--semi-blue-5), 1);--semi-color-info-hover: rgba(var(--semi-blue-6), 1);--semi-color-info-active: rgba(var(--semi-blue-7), 1);--semi-color-info-disabled: rgba(var(--semi-blue-2), 1);--semi-color-info-light-default: rgba(var(--semi-blue-0), 1);--semi-color-info-light-hover: rgba(var(--semi-blue-1), 1);--semi-color-info-light-active: rgba(var(--semi-blue-2), 1);--semi-color-success: rgba(var(--semi-green-5), 1);--semi-color-success-hover: rgba(var(--semi-green-6), 1);--semi-color-success-active: rgba(var(--semi-green-7), 1);--semi-color-success-disabled: rgba(var(--semi-green-2), 1);--semi-color-success-light-default: rgba(var(--semi-green-0), 1);--semi-color-success-light-hover: rgba(var(--semi-green-1), 1);--semi-color-success-light-active: rgba(var(--semi-green-2), 1);--semi-color-danger: rgba(var(--semi-red-5), 1);--semi-color-danger-hover: rgba(var(--semi-red-6), 1);--semi-color-danger-active: rgba(var(--semi-red-7), 1);--semi-color-danger-light-default: rgba(var(--semi-red-0), 1);--semi-color-danger-light-hover: rgba(var(--semi-red-1), 1);--semi-color-danger-light-active: rgba(var(--semi-red-2), 1);--semi-color-warning: rgba(var(--semi-orange-5), 1);--semi-color-warning-hover: rgba(var(--semi-orange-6), 1);--semi-color-warning-active: rgba(var(--semi-orange-7), 1);--semi-color-warning-light-default: rgba(var(--semi-orange-0), 1);--semi-color-warning-light-hover: rgba(var(--semi-orange-1), 1);--semi-color-warning-light-active: rgba(var(--semi-orange-2), 1);--semi-color-focus-border: rgba(var(--semi-blue-5), 1);--semi-color-disabled-text: rgba(var(--semi-grey-9), .35);--semi-color-disabled-border: rgba(var(--semi-grey-1), 1);--semi-color-disabled-bg: rgba(var(--semi-grey-1), 1);--semi-color-disabled-fill: rgba(var(--semi-grey-8), .04);--semi-color-shadow: rgba(var(--semi-black), .04);--semi-color-link: rgba(var(--semi-blue-5), 1);--semi-color-link-hover: rgba(var(--semi-blue-6), 1);--semi-color-link-active: rgba(var(--semi-blue-7), 1);--semi-color-link-visited: rgba(var(--semi-blue-5), 1);--semi-color-border: rgba(var(--semi-grey-9), .08);--semi-color-nav-bg: rgba(var(--semi-white), 1);--semi-color-overlay-bg: rgba(22, 22, 26, .6);--semi-color-fill-0: rgba(var(--semi-grey-8), .05);--semi-color-fill-1: rgba(var(--semi-grey-8), .09);--semi-color-fill-2: rgba(var(--semi-grey-8), .13);--semi-color-bg-0: rgba(var(--semi-white), 1);--semi-color-bg-1: rgba(var(--semi-white), 1);--semi-color-bg-2: rgba(var(--semi-white), 1);--semi-color-bg-3: rgba(var(--semi-white), 1);--semi-color-bg-4: rgba(var(--semi-white), 1);--semi-color-text-0: rgba(var(--semi-grey-9), 1);--semi-color-text-1: rgba(var(--semi-grey-9), .8);--semi-color-text-2: rgba(var(--semi-grey-9), .62);--semi-color-text-3: rgba(var(--semi-grey-9), .35);--semi-shadow-elevated: 0 0 1px rgba(0, 0, 0, .3), 0 4px 14px rgba(0, 0, 0, .1);--semi-border-radius-extra-small: 3px;--semi-border-radius-small: 3px;--semi-border-radius-medium: 6px;--semi-border-radius-large: 12px;--semi-border-radius-circle: 50%;--semi-border-radius-full: 9999px;--semi-color-highlight-bg: rgba(var(--semi-yellow-4), 1);--semi-color-highlight: rgba(var(--semi-black), 1);--semi-color-data-0: rgba(87, 105, 255, 1);--semi-color-data-1: rgba(142, 212, 231, 1);--semi-color-data-2: rgba(245, 135, 0, 1);--semi-color-data-3: rgba(220, 183, 252, 1);--semi-color-data-4: rgba(74, 156, 247, 1);--semi-color-data-5: rgba(243, 204, 53, 1);--semi-color-data-6: rgba(254, 128, 144, 1);--semi-color-data-7: rgba(139, 215, 210, 1);--semi-color-data-8: rgba(131, 176, 35, 1);--semi-color-data-9: rgba(233, 165, 229, 1);--semi-color-data-10: rgba(48, 167, 206, 1);--semi-color-data-11: rgba(249, 192, 100, 1);--semi-color-data-12: rgba(177, 113, 249, 1);--semi-color-data-13: rgba(119, 182, 249, 1);--semi-color-data-14: rgba(200, 143, 2, 1);--semi-color-data-15: rgba(255, 170, 178, 1);--semi-color-data-16: rgba(51, 176, 171, 1);--semi-color-data-17: rgba(182, 215, 129, 1);--semi-color-data-18: rgba(212, 88, 212, 1);--semi-color-data-19: rgba(188, 198, 255, 1);--semi-color-ai-general: var(--semi-ai-general-5);--semi-color-ai-general-hover: var(--semi-ai-general-6);--semi-color-ai-general-active: var(--semi-ai-general-7);--semi-color-ai-general-disabled: var(--semi-ai-general-2);--semi-color-ai-purple: rgba(var(--semi-ai-purple-5));--semi-color-ai-purple-hover: rgba(var(--semi-ai-purple-6));--semi-color-ai-purple-active: rgba(var(--semi-ai-purple-7));--semi-color-ai-purple-disabled: rgba(var(--semi-ai-purple-2));--semi-color-ai-background-bottom: linear-gradient(201.15deg, rgba(255, 255, 255, .04) 6.58%, rgba(255, 226, 138, .04) 32.88%, rgba(231, 45, 255, .04) 67.93%, rgba(0, 115, 255, .04) 94.23%);--semi-color-ai-background-bottom-hover: linear-gradient(201.15deg, rgba(255, 255, 255, .08) 6.58%, rgba(255, 226, 138, .08) 32.88%, rgba(231, 45, 255, .08) 67.93%, rgba(0, 115, 255, .08) 94.23%);--semi-color-ai-background-bottom-active: linear-gradient(201.15deg, rgba(255, 255, 255, .12) 6.58%, rgba(255, 226, 138, .12) 32.88%, rgba(231, 45, 255, .12) 67.93%, rgba(0, 115, 255, .12) 94.23%);--semi-color-ai-background-top: linear-gradient(201.15deg, rgba(83, 56, 255, .16) 6.58%, rgba(176, 48, 240, .096) 32.88%, rgba(231, 45, 255, .048) 59.17%, rgba(255, 255, 255, 0) 94.23%);--semi-color-ai-background-top-hover: linear-gradient(201.15deg, rgba(83, 56, 255, .24) 6.58%, rgba(176, 48, 240, .144) 32.88%, rgba(231, 45, 255, .072) 59.17%, rgba(255, 255, 255, 0) 94.23%);--semi-color-ai-background-top-hover: linear-gradient(201.15deg, rgba(83, 56, 255, .32) 6.58%, rgba(176, 48, 240, .192) 32.88%, rgba(231, 45, 255, .096) 59.17%, rgba(255, 255, 255, 0) 94.23%)}body[theme-mode=dark],body .semi-always-dark,:host([theme-mode=dark]),:host .semi-always-dark{font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;--semi-color-white: rgba(228, 231, 245, 1);--semi-color-black: rgba(var(--semi-black), 1);--semi-color-primary: rgba(var(--semi-blue-5), 1);--semi-color-primary-hover: rgba(var(--semi-blue-6), 1);--semi-color-primary-active: rgba(var(--semi-blue-7), 1);--semi-color-primary-disabled: rgba(var(--semi-blue-2), 1);--semi-color-primary-light-default: rgba(var(--semi-blue-5), .2);--semi-color-primary-light-hover: rgba(var(--semi-blue-5), .3);--semi-color-primary-light-active: rgba(var(--semi-blue-5), .4);--semi-color-secondary: rgba(var(--semi-light-blue-5), 1);--semi-color-secondary-hover: rgba(var(--semi-light-blue-6), 1);--semi-color-secondary-active: rgba(var(--semi-light-blue-7), 1);--semi-color-secondary-disabled: rgba(var(--semi-light-blue-2), 1);--semi-color-secondary-light-default: rgba(var(--semi-light-blue-5), .2);--semi-color-secondary-light-hover: rgba(var(--semi-light-blue-5), .3);--semi-color-secondary-light-active: rgba(var(--semi-light-blue-5), .4);--semi-color-tertiary: rgba(var(--semi-grey-5), 1);--semi-color-tertiary-hover: rgba(var(--semi-grey-6), 1);--semi-color-tertiary-active: rgba(var(--semi-grey-7), 1);--semi-color-tertiary-light-default: rgba(var(--semi-grey-5), .2);--semi-color-tertiary-light-hover: rgba(var(--semi-grey-5), .3);--semi-color-tertiary-light-active: rgba(var(--semi-grey-5), .4);--semi-color-default: rgba(var(--semi-grey-0), 1);--semi-color-default-hover: rgba(var(--semi-grey-1), 1);--semi-color-default-active: rgba(var(--semi-grey-2), 1);--semi-color-info: rgba(var(--semi-blue-5), 1);--semi-color-info-hover: rgba(var(--semi-blue-6), 1);--semi-color-info-active: rgba(var(--semi-blue-7), 1);--semi-color-info-disabled: rgba(var(--semi-blue-2), 1);--semi-color-info-light-default: rgba(var(--semi-blue-5), .2);--semi-color-info-light-hover: rgba(var(--semi-blue-5), .3);--semi-color-info-light-active: rgba(var(--semi-blue-5), .4);--semi-color-success: rgba(var(--semi-green-5), 1);--semi-color-success-hover: rgba(var(--semi-green-6), 1);--semi-color-success-active: rgba(var(--semi-green-7), 1);--semi-color-success-disabled: rgba(var(--semi-green-2), 1);--semi-color-success-light-default: rgba(var(--semi-green-5), .2);--semi-color-success-light-hover: rgba(var(--semi-green-5), .3);--semi-color-success-light-active: rgba(var(--semi-green-5), .4);--semi-color-danger: rgba(var(--semi-red-5), 1);--semi-color-danger-hover: rgba(var(--semi-red-6), 1);--semi-color-danger-active: rgba(var(--semi-red-7), 1);--semi-color-danger-light-default: rgba(var(--semi-red-5), .2);--semi-color-danger-light-hover: rgba(var(--semi-red-5), .3);--semi-color-danger-light-active: rgba(var(--semi-red-5), .4);--semi-color-warning: rgba(var(--semi-orange-5), 1);--semi-color-warning-hover: rgba(var(--semi-orange-6), 1);--semi-color-warning-active: rgba(var(--semi-orange-7), 1);--semi-color-warning-light-default: rgba(var(--semi-orange-5), .2);--semi-color-warning-light-hover: rgba(var(--semi-orange-5), .3);--semi-color-warning-light-active: rgba(var(--semi-orange-5), .4);--semi-color-focus-border: rgba(var(--semi-blue-5), 1);--semi-color-disabled-text: rgba(var(--semi-grey-9), .35);--semi-color-disabled-border: rgba(var(--semi-grey-1), 1);--semi-color-disabled-bg: rgba(var(--semi-grey-1), 1);--semi-color-disabled-fill: rgba(var(--semi-grey-8), .04);--semi-color-link: rgba(var(--semi-blue-5), 1);--semi-color-link-hover: rgba(var(--semi-blue-6), 1);--semi-color-link-active: rgba(var(--semi-blue-7), 1);--semi-color-link-visited: rgba(var(--semi-blue-5), 1);--semi-color-nav-bg: rgba(35, 36, 41, 1);--semi-shadow-elevated: inset 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 14px rgba(0, 0, 0, .25);--semi-color-overlay-bg: rgba(22, 22, 26, .6);--semi-color-fill-0: rgba(var(--semi-white), .12);--semi-color-fill-1: rgba(var(--semi-white), .16);--semi-color-fill-2: rgba(var(--semi-white), .2);--semi-color-border: rgba(var(--semi-white), .08);--semi-color-shadow: rgba(var(--semi-black), .04);--semi-color-bg-0: rgba(22, 22, 26, 1);--semi-color-bg-1: rgba(35, 36, 41, 1);--semi-color-bg-2: rgba(53, 54, 60, 1);--semi-color-bg-3: rgba(67, 68, 74, 1);--semi-color-bg-4: rgba(79, 81, 89, 1);--semi-color-text-0: rgba(var(--semi-grey-9), 1);--semi-color-text-1: rgba(var(--semi-grey-9), .8);--semi-color-text-2: rgba(var(--semi-grey-9), .6);--semi-color-text-3: rgba(var(--semi-grey-9), .35);--semi-border-radius-extra-small: 3px;--semi-border-radius-small: 3px;--semi-border-radius-medium: 6px;--semi-border-radius-large: 12px;--semi-border-radius-circle: 50%;--semi-border-radius-full: 9999px;--semi-color-highlight-bg: rgba(var(--semi-yellow-2), 1);--semi-color-highlight: rgba(var(--semi-white), 1);--semi-color-data-0: rgba(94, 109, 194, 1);--semi-color-data-1: rgba(8, 104, 120, 1);--semi-color-data-2: rgba(250, 173, 63, 1);--semi-color-data-3: rgba(76, 43, 156, 1);--semi-color-data-4: rgba(16, 125, 248, 1);--semi-color-data-5: rgba(248, 202, 16, 1);--semi-color-data-6: rgba(195, 30, 87, 1);--semi-color-data-7: rgba(5, 119, 115, 1);--semi-color-data-8: rgba(154, 207, 13, 1);--semi-color-data-9: rgba(117, 29, 138, 1);--semi-color-data-10: rgba(16, 162, 180, 1);--semi-color-data-11: rgba(208, 110, 11, 1);--semi-color-data-12: rgba(113, 66, 197, 1);--semi-color-data-13: rgba(7, 100, 212, 1);--semi-color-data-14: rgba(251, 232, 110, 1);--semi-color-data-15: rgba(160, 19, 73, 1);--semi-color-data-16: rgba(11, 179, 167, 1);--semi-color-data-17: rgba(98, 138, 6, 1);--semi-color-data-18: rgba(162, 48, 179, 1);--semi-color-data-19: rgba(40, 51, 138, 1);--semi-color-ai-general: var(--semi-ai-general-5);--semi-color-ai-general-hover: var(--semi-ai-general-6);--semi-color-ai-general-active: var(--semi-ai-general-7);--semi-color-ai-general-disabled: var(--semi-ai-general-2);--semi-color-ai-purple: rgba(var(--semi-ai-purple-5));--semi-color-ai-purple-hover: rgba(var(--semi-ai-purple-6));--semi-color-ai-purple-active: rgba(var(--semi-ai-purple-7));--semi-color-ai-purple-disabled: rgba(var(--semi-ai-purple-2));--semi-color-ai-background-bottom: linear-gradient(201.15deg, rgba(255, 226, 138, .2) 6.58%, rgba(231, 45, 255, .2) 50.4%, rgba(0, 115, 255, .2) 94.23%);--semi-color-ai-background-bottom-hover: linear-gradient(201.15deg, rgba(255, 226, 138, .3) 6.58%, rgba(231, 45, 255, .3) 50.4%, rgba(0, 115, 255, .3) 94.23%);--semi-color-ai-background-bottom-active: linear-gradient(201.15deg, rgba(255, 226, 138, .4) 6.58%, rgba(231, 45, 255, .4) 50.4%, rgba(0, 115, 255, .4) 94.23%);--semi-color-ai-background-top: linear-gradient(201.15deg, rgba(83, 56, 255, .36) 6.58%, rgba(176, 48, 240, .216) 32.88%, rgba(154, 0, 174, .108) 59.17%, rgba(0, 0, 0, 0) 94.23%);--semi-color-ai-background-top-hover: linear-gradient(201.15deg, rgba(83, 56, 255, .54) 6.58%, rgba(176, 48, 240, .324) 32.88%, rgba(154, 0, 174, .162) 59.17%, rgba(0, 0, 0, 0) 94.23%);--semi-color-ai-background-top-hover: linear-gradient(201.15deg, rgba(83, 56, 255, .72) 6.58%, rgba(176, 48, 240, .432) 32.88%, rgba(154, 0, 174, .216) 59.17%, rgba(0, 0, 0, 0) 94.23%)}.semi-light-scrollbar::-webkit-scrollbar,.semi-light-scrollbar *::-webkit-scrollbar{width:8px;height:8px}.semi-light-scrollbar::-webkit-scrollbar-track,.semi-light-scrollbar *::-webkit-scrollbar-track{background:#0000}.semi-light-scrollbar::-webkit-scrollbar-corner,.semi-light-scrollbar *::-webkit-scrollbar-corner{background-color:#0000}.semi-light-scrollbar::-webkit-scrollbar-thumb,.semi-light-scrollbar *::-webkit-scrollbar-thumb{border-radius:6px;background:transparent;transition:all 1s}.semi-light-scrollbar:hover::-webkit-scrollbar-thumb,.semi-light-scrollbar *:hover::-webkit-scrollbar-thumb{background:var(--semi-color-fill-2)}.semi-light-scrollbar::-webkit-scrollbar-thumb:hover,.semi-light-scrollbar *::-webkit-scrollbar-thumb:hover{background:var(--semi-color-fill-1)}.semi-typography{color:var(--semi-color-text-0);font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-typography.semi-typography-secondary{color:var(--semi-color-text-1)}.semi-typography.semi-typography-tertiary{color:var(--semi-color-text-2)}.semi-typography.semi-typography-quaternary{color:var(--semi-color-text-3)}.semi-typography.semi-typography-warning{color:var(--semi-color-warning)}.semi-typography.semi-typography-success{color:var(--semi-color-success)}.semi-typography.semi-typography-danger{color:var(--semi-color-danger)}.semi-typography.semi-typography-link{color:var(--semi-color-link);font-weight:600}.semi-typography.semi-typography-disabled{color:var(--semi-color-disabled-text);cursor:not-allowed;-webkit-user-select:none;user-select:none}.semi-typography.semi-typography-disabled.semi-typography-link{color:var(--semi-color-link)}.semi-typography-icon{margin-right:4px;vertical-align:middle;color:inherit}.semi-typography-small{font-size:12px;line-height:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400}.semi-typography-small.semi-typography-paragraph{font-weight:400}.semi-typography code{border:1px solid var(--semi-color-border);border-radius:2px;color:var(--semi-color-text-2);background-color:var(--semi-color-fill-1);padding:2px 4px}.semi-typography mark{background-color:var(--semi-color-primary-light-default)}.semi-typography u{text-decoration:underline;text-decoration-skip-ink:auto}.semi-typography del{text-decoration:line-through}.semi-typography strong{font-weight:600}.semi-typography a{display:inline;color:var(--semi-color-link);cursor:pointer;text-decoration:none}.semi-typography a:visited{color:var(--semi-color-link-visited)}.semi-typography a:hover{color:var(--semi-color-link-hover)}.semi-typography a:active{color:var(--semi-color-link-active)}.semi-typography a .semi-typography-link-underline:hover{border-bottom:1px solid var(--semi-color-link-hover);margin-bottom:-1px}.semi-typography a .semi-typography-link-underline:active{border-bottom:1px solid var(--semi-color-link-active);margin-bottom:-1px}.semi-typography-ellipsis-single-line{overflow:hidden}.semi-typography-ellipsis-multiple-line{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}.semi-typography-ellipsis-multiple-line.semi-typography-ellipsis-multiple-line-text{display:-webkit-inline-box}.semi-typography-ellipsis-overflow-ellipsis{display:block;white-space:nowrap;text-overflow:ellipsis}.semi-typography-ellipsis-overflow-ellipsis.semi-typography-ellipsis-overflow-ellipsis-text{display:inline-block;max-width:100%;vertical-align:top}.semi-typography-ellipsis-expand{display:inline;margin-left:8px}.semi-typography-action-copy{display:inline-flex;vertical-align:middle;padding:0;margin-left:4px}.semi-typography a.semi-typography-action-copy-icon{display:inline-flex}.semi-typography-action-copied{display:inline-flex;padding:0;margin-left:4px;color:var(--semi-color-text-2)}.semi-typography-action-copied .semi-icon{vertical-align:middle;color:var(--semi-color-success)}.semi-typography-paragraph{margin:0}h1.semi-typography,.semi-typography-h1.semi-typography{font-size:32px;line-height:44px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;margin:0}h1.semi-typography.semi-typography-h1-weight-light,.semi-typography-h1.semi-typography.semi-typography-h1-weight-light{font-weight:200}h1.semi-typography.semi-typography-h1-weight-regular,.semi-typography-h1.semi-typography.semi-typography-h1-weight-regular{font-weight:400}h1.semi-typography.semi-typography-h1-weight-medium,.semi-typography-h1.semi-typography.semi-typography-h1-weight-medium{font-weight:500}h1.semi-typography.semi-typography-h1-weight-semibold,.semi-typography-h1.semi-typography.semi-typography-h1-weight-semibold{font-weight:600}h1.semi-typography.semi-typography-h1-weight-bold,.semi-typography-h1.semi-typography.semi-typography-h1-weight-bold{font-weight:700}h2.semi-typography,.semi-typography-h2.semi-typography{font-size:28px;line-height:40px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;margin:0}h2.semi-typography.semi-typography-h2-weight-light,.semi-typography-h2.semi-typography.semi-typography-h2-weight-light{font-weight:200}h2.semi-typography.semi-typography-h2-weight-regular,.semi-typography-h2.semi-typography.semi-typography-h2-weight-regular{font-weight:400}h2.semi-typography.semi-typography-h2-weight-medium,.semi-typography-h2.semi-typography.semi-typography-h2-weight-medium{font-weight:500}h2.semi-typography.semi-typography-h2-weight-semibold,.semi-typography-h2.semi-typography.semi-typography-h2-weight-semibold{font-weight:600}h2.semi-typography.semi-typography-h2-weight-bold,.semi-typography-h2.semi-typography.semi-typography-h2-weight-bold{font-weight:700}h3.semi-typography,.semi-typography-h3.semi-typography{font-size:24px;line-height:32px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;margin:0}h3.semi-typography.semi-typography-h3-weight-light,.semi-typography-h3.semi-typography.semi-typography-h3-weight-light{font-weight:200}h3.semi-typography.semi-typography-h3-weight-regular,.semi-typography-h3.semi-typography.semi-typography-h3-weight-regular{font-weight:400}h3.semi-typography.semi-typography-h3-weight-medium,.semi-typography-h3.semi-typography.semi-typography-h3-weight-medium{font-weight:500}h3.semi-typography.semi-typography-h3-weight-semibold,.semi-typography-h3.semi-typography.semi-typography-h3-weight-semibold{font-weight:600}h3.semi-typography.semi-typography-h3-weight-bold,.semi-typography-h3.semi-typography.semi-typography-h3-weight-bold{font-weight:700}h4.semi-typography,.semi-typography-h4.semi-typography{font-size:20px;line-height:28px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;margin:0}h4.semi-typography.semi-typography-h4-weight-light,.semi-typography-h4.semi-typography.semi-typography-h4-weight-light{font-weight:200}h4.semi-typography.semi-typography-h4-weight-regular,.semi-typography-h4.semi-typography.semi-typography-h4-weight-regular{font-weight:400}h4.semi-typography.semi-typography-h4-weight-medium,.semi-typography-h4.semi-typography.semi-typography-h4-weight-medium{font-weight:500}h4.semi-typography.semi-typography-h4-weight-semibold,.semi-typography-h4.semi-typography.semi-typography-h4-weight-semibold{font-weight:600}h4.semi-typography.semi-typography-h4-weight-bold,.semi-typography-h4.semi-typography.semi-typography-h4-weight-bold{font-weight:700}h5.semi-typography,.semi-typography-h5.semi-typography{font-size:18px;line-height:24px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;margin:0}h5.semi-typography.semi-typography-h5-weight-light,.semi-typography-h5.semi-typography.semi-typography-h5-weight-light{font-weight:200}h5.semi-typography.semi-typography-h5-weight-regular,.semi-typography-h5.semi-typography.semi-typography-h5-weight-regular{font-weight:400}h5.semi-typography.semi-typography-h5-weight-medium,.semi-typography-h5.semi-typography.semi-typography-h5-weight-medium{font-weight:500}h5.semi-typography.semi-typography-h5-weight-semibold,.semi-typography-h5.semi-typography.semi-typography-h5-weight-semibold{font-weight:600}h5.semi-typography.semi-typography-h5-weight-bold,.semi-typography-h5.semi-typography.semi-typography-h5-weight-bold{font-weight:700}h6.semi-typography,.semi-typography-h6.semi-typography{font-size:16px;line-height:22px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600;margin:0}h6.semi-typography.semi-typography-h6-weight-light,.semi-typography-h6.semi-typography.semi-typography-h6-weight-light{font-weight:200}h6.semi-typography.semi-typography-h6-weight-regular,.semi-typography-h6.semi-typography.semi-typography-h6-weight-regular{font-weight:400}h6.semi-typography.semi-typography-h6-weight-medium,.semi-typography-h6.semi-typography.semi-typography-h6-weight-medium{font-weight:500}h6.semi-typography.semi-typography-h6-weight-semibold,.semi-typography-h6.semi-typography.semi-typography-h6-weight-semibold{font-weight:600}h6.semi-typography.semi-typography-h6-weight-bold,.semi-typography-h6.semi-typography.semi-typography-h6-weight-bold{font-weight:700}p.semi-typography-extended,.semi-typography-paragraph.semi-typography-extended{line-height:24px;font-weight:400}.semi-rtl .semi-typography,.semi-portal-rtl .semi-typography{direction:rtl}.semi-rtl .semi-typography-link a,.semi-rtl .semi-typography a,.semi-portal-rtl .semi-typography-link a,.semi-portal-rtl .semi-typography a{display:inline-block}.semi-rtl .semi-typography-icon,.semi-portal-rtl .semi-typography-icon{margin-right:auto;margin-left:4px}.semi-rtl .semi-typography-ellipsis-expand,.semi-portal-rtl .semi-typography-ellipsis-expand{margin-left:auto}.semi-rtl .semi-typography-action-copy,.semi-portal-rtl .semi-typography-action-copy,.semi-rtl .semi-typography-action-copied,.semi-portal-rtl .semi-typography-action-copied{margin-left:auto;margin-right:4px}@keyframes semi-tooltip-zoomIn{0%{opacity:0;transform:scale(.8)}50%{opacity:1}}@keyframes semi-tooltip-bounceIn{0%{opacity:0;transform:scale(.6)}70%{opacity:1;transform:scale(1.01)}to{opacity:1;transform:scale(1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}}@keyframes semi-tooltip-zoomOut{0%{opacity:1}60%{opacity:0;transform:scale(.8)}to{opacity:0}}.semi-tooltip-wrapper{position:relative;background-color:rgba(var(--semi-grey-7),1);-webkit-backdrop-filter:none;backdrop-filter:none;color:var(--semi-color-bg-0);border-radius:var(--semi-border-radius-medium);padding:8px 12px;left:0;top:0;word-wrap:break-word;overflow-wrap:break-word;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;opacity:0;max-width:240px}.semi-tooltip-wrapper-show{opacity:1}.semi-tooltip-content{min-width:0}.semi-tooltip-trigger{display:inline-block;width:auto;height:auto}.semi-tooltip-with-arrow{display:flex;align-items:center;justify-content:center;box-sizing:border-box}.semi-tooltip-animation-show{animation:semi-tooltip-zoomIn .1s cubic-bezier(.215,.61,.355,1);animation-fill-mode:forwards}.semi-tooltip-animation-hide{animation:semi-tooltip-zoomOut .1s cubic-bezier(.215,.61,.355,1);animation-fill-mode:forwards}.semi-tooltip-wrapper .semi-tooltip-icon-arrow{height:7px;width:24px;position:absolute;color:rgba(var(--semi-grey-7),1)}.semi-tooltip-wrapper[x-placement=top] .semi-tooltip-icon-arrow{left:var(--semi-tooltip-arrow-offset-x, 50%);transform:translate(-50%);bottom:-6px}.semi-tooltip-wrapper[x-placement=top].semi-tooltip-with-arrow,.semi-tooltip-wrapper[x-placement=top] .semi-tooltip-with-arrow{min-width:36px}.semi-tooltip-wrapper[x-placement=topLeft] .semi-tooltip-icon-arrow{bottom:-6px;left:6px}.semi-tooltip-wrapper[x-placement=topLeft].semi-tooltip-with-arrow,.semi-tooltip-wrapper[x-placement=topLeft] .semi-tooltip-with-arrow{min-width:36px}.semi-tooltip-wrapper[x-placement=topRight] .semi-tooltip-icon-arrow{bottom:-6px;right:6px}.semi-tooltip-wrapper[x-placement=topRight].semi-tooltip-with-arrow,.semi-tooltip-wrapper[x-placement=topRight] .semi-tooltip-with-arrow{min-width:36px}.semi-tooltip-wrapper[x-placement=leftTop] .semi-tooltip-icon-arrow{width:7px;height:24px;right:-6px;top:5px}.semi-tooltip-wrapper[x-placement=leftTop].semi-tooltip-with-arrow,.semi-tooltip-wrapper[x-placement=leftTop] .semi-tooltip-with-arrow{min-height:34px}.semi-tooltip-wrapper[x-placement=left] .semi-tooltip-icon-arrow{width:7px;height:24px;right:-6px;top:var(--semi-tooltip-arrow-offset-y, 50%);transform:translateY(-50%)}.semi-tooltip-wrapper[x-placement=left].semi-tooltip-with-arrow,.semi-tooltip-wrapper[x-placement=left] .semi-tooltip-with-arrow{min-height:34px}.semi-tooltip-wrapper[x-placement=leftBottom] .semi-tooltip-icon-arrow{width:7px;height:24px;right:-6px;bottom:5px}.semi-tooltip-wrapper[x-placement=leftBottom].semi-tooltip-with-arrow,.semi-tooltip-wrapper[x-placement=leftBottom] .semi-tooltip-with-arrow{min-height:34px}.semi-tooltip-wrapper[x-placement=rightTop] .semi-tooltip-icon-arrow{width:7px;height:24px;left:-6px;top:5px;transform:rotate(180deg)}.semi-tooltip-wrapper[x-placement=rightTop].semi-tooltip-with-arrow,.semi-tooltip-wrapper[x-placement=rightTop] .semi-tooltip-with-arrow{min-height:34px}.semi-tooltip-wrapper[x-placement=right] .semi-tooltip-icon-arrow{width:7px;height:24px;left:-6px;top:var(--semi-tooltip-arrow-offset-y, 50%);transform:translateY(-50%) rotate(180deg)}.semi-tooltip-wrapper[x-placement=right].semi-tooltip-with-arrow,.semi-tooltip-wrapper[x-placement=right] .semi-tooltip-with-arrow{min-height:34px}.semi-tooltip-wrapper[x-placement=rightBottom] .semi-tooltip-icon-arrow{width:7px;height:24px;left:-6px;bottom:5px;transform:rotate(180deg)}.semi-tooltip-wrapper[x-placement=rightBottom].semi-tooltip-with-arrow,.semi-tooltip-wrapper[x-placement=rightBottom] .semi-tooltip-with-arrow{min-height:34px}.semi-tooltip-wrapper[x-placement=bottomLeft] .semi-tooltip-icon-arrow{top:-6px;left:6px;transform:rotate(180deg)}.semi-tooltip-wrapper[x-placement=bottomLeft].semi-tooltip-with-arrow,.semi-tooltip-wrapper[x-placement=bottomLeft] .semi-tooltip-with-arrow{min-width:36px}.semi-tooltip-wrapper[x-placement=bottom] .semi-tooltip-icon-arrow{top:-6px;left:var(--semi-tooltip-arrow-offset-x, 50%);transform:translate(-50%) rotate(180deg)}.semi-tooltip-wrapper[x-placement=bottom].semi-tooltip-with-arrow,.semi-tooltip-wrapper[x-placement=bottom] .semi-tooltip-with-arrow{min-width:36px}.semi-tooltip-wrapper[x-placement=bottomRight] .semi-tooltip-icon-arrow{right:6px;top:-6px;transform:rotate(180deg)}.semi-tooltip-wrapper[x-placement=bottomRight].semi-tooltip-with-arrow,.semi-tooltip-wrapper[x-placement=bottomRight] .semi-tooltip-with-arrow{min-width:36px}.semi-rtl .semi-tooltip-wrapper,.semi-portal-rtl .semi-tooltip-wrapper{direction:rtl;padding-right:12px;padding-left:12px;left:auto;right:0}.semi-portal{position:absolute;top:0;left:0;width:100%;z-index:1}.semi-portal-inner{position:absolute;background-color:transparent;min-width:max-content}.semi-icon{display:inline-block;font-style:normal;line-height:0;text-align:center;text-transform:none;text-rendering:optimizeLegibility;fill:currentColor}.semi-icon-extra-small{font-size:8px}.semi-icon-small{font-size:12px}.semi-icon-default{font-size:16px}.semi-icon-large{font-size:20px}.semi-icon-extra-large{font-size:24px}.semi-icon-spinning{animation:.6s linear infinite semi-icon-animation-rotate;animation-fill-mode:forwards}@keyframes semi-icon-animation-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes semi-popover-zoomIn{0%{opacity:0;transform:scale(.8)}50%{opacity:1}}@keyframes semi-popover-zoomOut{0%{opacity:1}60%{opacity:0;transform:scale(.8)}to{opacity:0}}.semi-popover-wrapper{position:relative;background-color:var(--semi-color-bg-3);-webkit-backdrop-filter:none;backdrop-filter:none;box-shadow:var(--semi-shadow-elevated);z-index:1030;border-radius:var(--semi-border-radius-medium);font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;opacity:0}.semi-popover-wrapper-show{opacity:1}.semi-popover-trigger{display:inline-block;width:auto;height:auto}.semi-popover-title{padding:8px;border-bottom:1px solid var(--semi-color-border)}.semi-popover-confirm{position:absolute}.semi-popover-with-arrow{padding:12px;box-sizing:border-box}.semi-popover-animation-show{animation:semi-popover-zoomIn .1s cubic-bezier(.215,.61,.355,1);animation-fill-mode:forwards}.semi-popover-animation-hide{animation:semi-popover-zoomOut .1s cubic-bezier(.215,.61,.355,1);animation-fill-mode:forwards}.semi-popover-icon-arrow path:nth-child(1){fill:var(--semi-color-border)}.semi-popover-icon-arrow path:nth-child(2){fill:var(--semi-color-bg-3)}.semi-popover-wrapper .semi-popover-icon-arrow{height:8px;width:24px;position:absolute;color:unset}.semi-popover-wrapper[x-placement=top] .semi-popover-icon-arrow{left:var(--semi-tooltip-arrow-offset-x, 50%);transform:translate(-50%);bottom:-7px}.semi-popover-wrapper[x-placement=top].semi-popover-with-arrow,.semi-popover-wrapper[x-placement=top] .semi-popover-with-arrow{min-width:36px}.semi-popover-wrapper[x-placement=topLeft] .semi-popover-icon-arrow{bottom:-7px;left:6px}.semi-popover-wrapper[x-placement=topLeft].semi-popover-with-arrow,.semi-popover-wrapper[x-placement=topLeft] .semi-popover-with-arrow{min-width:36px}.semi-popover-wrapper[x-placement=topRight] .semi-popover-icon-arrow{bottom:-7px;right:6px}.semi-popover-wrapper[x-placement=topRight].semi-popover-with-arrow,.semi-popover-wrapper[x-placement=topRight] .semi-popover-with-arrow{min-width:36px}.semi-popover-wrapper[x-placement=leftTop] .semi-popover-icon-arrow{width:8px;height:24px;right:-7px;top:6px}.semi-popover-wrapper[x-placement=leftTop].semi-popover-with-arrow,.semi-popover-wrapper[x-placement=leftTop] .semi-popover-with-arrow{min-height:36px}.semi-popover-wrapper[x-placement=left] .semi-popover-icon-arrow{width:8px;height:24px;right:-7px;top:var(--semi-tooltip-arrow-offset-y, 50%);transform:translateY(-50%)}.semi-popover-wrapper[x-placement=left].semi-popover-with-arrow,.semi-popover-wrapper[x-placement=left] .semi-popover-with-arrow{min-height:36px}.semi-popover-wrapper[x-placement=leftBottom] .semi-popover-icon-arrow{width:8px;height:24px;right:-7px;bottom:6px}.semi-popover-wrapper[x-placement=leftBottom].semi-popover-with-arrow,.semi-popover-wrapper[x-placement=leftBottom] .semi-popover-with-arrow{min-height:36px}.semi-popover-wrapper[x-placement=rightTop] .semi-popover-icon-arrow{width:8px;height:24px;left:-7px;top:6px;transform:rotate(180deg)}.semi-popover-wrapper[x-placement=rightTop].semi-popover-with-arrow,.semi-popover-wrapper[x-placement=rightTop] .semi-popover-with-arrow{min-height:36px}.semi-popover-wrapper[x-placement=right] .semi-popover-icon-arrow{width:8px;height:24px;left:-7px;top:var(--semi-tooltip-arrow-offset-y, 50%);transform:translateY(-50%) rotate(180deg)}.semi-popover-wrapper[x-placement=right].semi-popover-with-arrow,.semi-popover-wrapper[x-placement=right] .semi-popover-with-arrow{min-height:36px}.semi-popover-wrapper[x-placement=rightBottom] .semi-popover-icon-arrow{width:8px;height:24px;left:-7px;bottom:6px;transform:rotate(180deg)}.semi-popover-wrapper[x-placement=rightBottom].semi-popover-with-arrow,.semi-popover-wrapper[x-placement=rightBottom] .semi-popover-with-arrow{min-height:36px}.semi-popover-wrapper[x-placement=bottomLeft] .semi-popover-icon-arrow{top:-7px;left:6px;transform:rotate(180deg)}.semi-popover-wrapper[x-placement=bottomLeft].semi-popover-with-arrow,.semi-popover-wrapper[x-placement=bottomLeft] .semi-popover-with-arrow{min-width:36px}.semi-popover-wrapper[x-placement=bottom] .semi-popover-icon-arrow{top:-7px;left:var(--semi-tooltip-arrow-offset-x, 50%);transform:translate(-50%) rotate(180deg)}.semi-popover-wrapper[x-placement=bottom].semi-popover-with-arrow,.semi-popover-wrapper[x-placement=bottom] .semi-popover-with-arrow{min-width:36px}.semi-popover-wrapper[x-placement=bottomRight] .semi-popover-icon-arrow{right:6px;top:-7px;transform:rotate(180deg)}.semi-popover-wrapper[x-placement=bottomRight].semi-popover-with-arrow,.semi-popover-wrapper[x-placement=bottomRight] .semi-popover-with-arrow{min-width:36px}.semi-popover.semi-popover-rtl{direction:rtl}.semi-collapsible-transition{transition:height .25s cubic-bezier(.25,.1,.25,1) var(--semi-transition_delay-none),opacity .25s var(--semi-transition_function-easeIn) var(--semi-transition_delay-none)}.semi-collapse-item{border-bottom:1px solid var(--semi-color-border)}.semi-collapse-header{display:flex;align-items:center;justify-content:space-between;margin:4px 8px;padding:8px;border-radius:var(--semi-border-radius-small);outline:none;cursor:pointer;color:var(--semi-color-text-0);font-weight:600;font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-collapse-header-right{display:flex;align-items:center}.semi-collapse-header-right span{display:flex;padding-right:8px}.semi-collapse-header-right span:last-child{padding-right:0}.semi-collapse-header-icon{width:16px;height:16px;color:var(--semi-color-text-2)}.semi-collapse-header-iconLeft{justify-content:flex-start}.semi-collapse-header-iconLeft .semi-collapse-header-icon{margin-right:8px}.semi-collapse-header-iconDisabled{color:var(--semi-color-disabled-text)}.semi-collapse-header:hover{background-color:var(--semi-color-fill-0)}.semi-collapse-header:active{background-color:var(--semi-color-fill-1)}.semi-collapse-header-disabled{color:var(--semi-color-disabled-text)}.semi-collapse-header-disabled:hover{background-color:transparent}.semi-collapse-content{padding:4px 16px 8px;color:var(--semi-color-text-1);font-size:14px;line-height:20px;font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif}.semi-collapse-content p{margin:0}.semi-rtl .semi-collapse,.semi-portal-rtl .semi-collapse{direction:rtl}.semi-rtl .semi-collapse-header-right span,.semi-portal-rtl .semi-collapse-header-right span{display:flex;padding-right:0;padding-left:8px}.semi-rtl .semi-collapse-header-right span:last-child,.semi-portal-rtl .semi-collapse-header-right span:last-child{padding-right:0;padding-left:0} diff --git a/frontends/desktop/dist/assets/tauri-compat-tfiFK9EG.js b/frontends/desktop/dist/assets/tauri-compat-tfiFK9EG.js new file mode 100644 index 000000000..67360a123 --- /dev/null +++ b/frontends/desktop/dist/assets/tauri-compat-tfiFK9EG.js @@ -0,0 +1,47 @@ +function H_(s,i){for(var r=0;ro[l]})}}}return Object.freeze(Object.defineProperty(s,Symbol.toStringTag,{value:"Module"}))}(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))o(l);new MutationObserver(l=>{for(const f of l)if(f.type==="childList")for(const d of f.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&o(d)}).observe(document,{childList:!0,subtree:!0});function r(l){const f={};return l.integrity&&(f.integrity=l.integrity),l.referrerPolicy&&(f.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?f.credentials="include":l.crossOrigin==="anonymous"?f.credentials="omit":f.credentials="same-origin",f}function o(l){if(l.ep)return;l.ep=!0;const f=r(l);fetch(l.href,f)}})();var na=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function He(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}var gl={exports:{}},Ri={},ml={exports:{}},me={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var og;function U_(){if(og)return me;og=1;var s=Symbol.for("react.element"),i=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),l=Symbol.for("react.profiler"),f=Symbol.for("react.provider"),d=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),g=Symbol.for("react.suspense"),m=Symbol.for("react.memo"),_=Symbol.for("react.lazy"),C=Symbol.iterator;function b(T){return T===null||typeof T!="object"?null:(T=C&&T[C]||T["@@iterator"],typeof T=="function"?T:null)}var x={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},A=Object.assign,k={};function R(T,j,ae){this.props=T,this.context=j,this.refs=k,this.updater=ae||x}R.prototype.isReactComponent={},R.prototype.setState=function(T,j){if(typeof T!="object"&&typeof T!="function"&&T!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,T,j,"setState")},R.prototype.forceUpdate=function(T){this.updater.enqueueForceUpdate(this,T,"forceUpdate")};function z(){}z.prototype=R.prototype;function H(T,j,ae){this.props=T,this.context=j,this.refs=k,this.updater=ae||x}var W=H.prototype=new z;W.constructor=H,A(W,R.prototype),W.isPureReactComponent=!0;var $=Array.isArray,Y=Object.prototype.hasOwnProperty,M={current:null},N={key:!0,ref:!0,__self:!0,__source:!0};function U(T,j,ae){var se,fe={},ue=null,he=null;if(j!=null)for(se in j.ref!==void 0&&(he=j.ref),j.key!==void 0&&(ue=""+j.key),j)Y.call(j,se)&&!N.hasOwnProperty(se)&&(fe[se]=j[se]);var de=arguments.length-2;if(de===1)fe.children=ae;else if(1-1}return Gl=i,Gl}var Xl,$g;function pw(){if($g)return Xl;$g=1;var s=ga();function i(r,o){var l=this.__data__,f=s(l,r);return f<0?(++this.size,l.push([r,o])):l[f][1]=o,this}return Xl=i,Xl}var Ql,Bg;function ma(){if(Bg)return Ql;Bg=1;var s=uw(),i=cw(),r=fw(),o=dw(),l=pw();function f(d){var p=-1,g=d==null?0:d.length;for(this.clear();++p1?i-1:0),o=1;o0&&arguments[0]!==void 0?arguments[0]:"value";const r=this.getProps();return i in r}_isInProps(i){const r=this.getProps();return i in r}init(i){}destroy(){}log(i){for(var r=arguments.length,o=new Array(r>1?r-1:0),l=1;l(r.substr(0,5)==="data-"&&(i[r]=s[r]),i),{})}const{hasOwnProperty:xw}=Object.prototype;class $r extends Ee.Component{constructor(i){super(i),this.isControlled=r=>!!(r&&this.props&&typeof this.props=="object"&&xw.call(this.props,r)),this.setStateAsync=r=>new Promise(o=>{this.setState(r,o)}),this.cache={},this.foundation=null}componentDidMount(){this.foundation&&typeof this.foundation.init=="function"&&this.foundation.init()}componentWillUnmount(){this.foundation&&typeof this.foundation.destroy=="function"&&this.foundation.destroy(),this.cache={}}get adapter(){return{getContext:i=>{if(this.context&&i)return this.context[i]},getContexts:()=>this.context,getProp:i=>this.props[i],getProps:()=>this.props,getState:i=>this.state[i],getStates:()=>this.state,setState:(i,r)=>this.setState(Object.assign({},i),r),getCache:i=>i&&this.cache[i],getCaches:()=>this.cache,setCache:(i,r)=>i&&(this.cache[i]=r),stopPropagation:i=>{try{i.stopPropagation(),i.nativeEvent&&i.nativeEvent.stopImmediatePropagation()}catch{}},persistEvent:i=>{i&&i.persist&&typeof i.persist=="function"&&i.persist()}}}log(i){for(var r=arguments.length,o=new Array(r>1?r-1:0),l=1;l0&&arguments[0]!==void 0?arguments[0]:this.props;return bw(i)}}$r.propTypes={};$r.defaultProps={};var mu,lm;function Rw(){if(lm)return mu;lm=1;var s=Kt(),i=function(){return s.Date.now()};return mu=i,mu}var vu,um;function kw(){if(um)return vu;um=1;var s=/\s/;function i(r){for(var o=r.length;o--&&s.test(r.charAt(o)););return o}return vu=i,vu}var yu,cm;function Iw(){if(cm)return yu;cm=1;var s=kw(),i=/^\s+/;function r(o){return o&&o.slice(0,s(o)+1).replace(i,"")}return yu=r,yu}var _u,fm;function Aw(){if(fm)return _u;fm=1;var s=Iw(),i=Nt(),r=da(),o=NaN,l=/^[-+]0x[0-9a-f]+$/i,f=/^0b[01]+$/i,d=/^0o[0-7]+$/i,p=parseInt;function g(m){if(typeof m=="number")return m;if(r(m))return o;if(i(m)){var _=typeof m.valueOf=="function"?m.valueOf():m;m=i(_)?_+"":_}if(typeof m!="string")return m===0?m:+m;m=s(m);var C=f.test(m);return C||d.test(m)?p(m.slice(2),C?2:8):l.test(m)?o:+m}return _u=g,_u}var wu,dm;function Nw(){if(dm)return wu;dm=1;var s=Nt(),i=Rw(),r=Aw(),o="Expected a function",l=Math.max,f=Math.min;function d(p,g,m){var _,C,b,x,A,k,R=0,z=!1,H=!1,W=!0;if(typeof p!="function")throw new TypeError(o);g=r(g)||0,s(m)&&(z=!!m.leading,H="maxWait"in m,b=H?l(r(m.maxWait)||0,g):b,W="trailing"in m?!!m.trailing:W);function $(ne){var pe=_,_e=C;return _=C=void 0,R=ne,x=p.apply(_e,pe),x}function Y(ne){return R=ne,A=setTimeout(U,g),z?$(ne):x}function M(ne){var pe=ne-k,_e=ne-R,Pe=g-pe;return H?f(Pe,b-_e):Pe}function N(ne){var pe=ne-k,_e=ne-R;return k===void 0||pe>=g||pe<0||H&&_e>=b}function U(){var ne=i();if(N(ne))return X(ne);A=setTimeout(U,M(ne))}function X(ne){return A=void 0,W&&_?$(ne):(_=C=void 0,x)}function ee(){A!==void 0&&clearTimeout(A),R=0,_=k=C=A=void 0}function V(){return A===void 0?x:X(i())}function ce(){var ne=i(),pe=N(ne);if(_=arguments,C=this,k=ne,pe){if(A===void 0)return Y(k);if(H)return clearTimeout(A),A=setTimeout(U,g),$(k)}return A===void 0&&(A=setTimeout(U,g)),x}return ce.cancel=ee,ce.flush=V,ce}return wu=d,wu}var Su,pm;function jw(){if(pm)return Su;pm=1;var s=Nw(),i=Nt(),r="Expected a function";function o(l,f,d){var p=!0,g=!0;if(typeof l!="function")throw new TypeError(r);return i(d)&&(p="leading"in d?!!d.leading:p,g="trailing"in d?!!d.trailing:g),s(l,f,{leading:p,maxWait:f,trailing:g})}return Su=o,Su}var Mw=jw();const hm=He(Mw);var Cu={exports:{}};/*! + Copyright (c) 2018 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/var gm;function Dw(){return gm||(gm=1,(function(s){(function(){var i={}.hasOwnProperty;function r(){for(var f="",d=0;d-1&&o%1==0&&o-1&&r%1==0&&r<=s}return Bu=i,Bu}var Hu,Lm;function Qw(){if(Lm)return Hu;Lm=1;var s=cr(),i=ld(),r=rn(),o="[object Arguments]",l="[object Array]",f="[object Boolean]",d="[object Date]",p="[object Error]",g="[object Function]",m="[object Map]",_="[object Number]",C="[object Object]",b="[object RegExp]",x="[object Set]",A="[object String]",k="[object WeakMap]",R="[object ArrayBuffer]",z="[object DataView]",H="[object Float32Array]",W="[object Float64Array]",$="[object Int8Array]",Y="[object Int16Array]",M="[object Int32Array]",N="[object Uint8Array]",U="[object Uint8ClampedArray]",X="[object Uint16Array]",ee="[object Uint32Array]",V={};V[H]=V[W]=V[$]=V[Y]=V[M]=V[N]=V[U]=V[X]=V[ee]=!0,V[o]=V[l]=V[R]=V[f]=V[z]=V[d]=V[p]=V[g]=V[m]=V[_]=V[C]=V[b]=V[x]=V[A]=V[k]=!1;function ce(ne){return r(ne)&&i(ne.length)&&!!V[s(ne)]}return Hu=ce,Hu}var Uu,Fm;function ud(){if(Fm)return Uu;Fm=1;function s(i){return function(r){return i(r)}}return Uu=s,Uu}var Ii={exports:{}};Ii.exports;var qm;function cd(){return qm||(qm=1,(function(s,i){var r=i1(),o=i&&!i.nodeType&&i,l=o&&!0&&s&&!s.nodeType&&s,f=l&&l.exports===o,d=f&&r.process,p=(function(){try{var g=l&&l.require&&l.require("util").types;return g||d&&d.binding&&d.binding("util")}catch{}})();s.exports=p})(Ii,Ii.exports)),Ii.exports}var Wu,zm;function wa(){if(zm)return Wu;zm=1;var s=Qw(),i=ud(),r=cd(),o=r&&r.isTypedArray,l=o?i(o):s;return Wu=l,Wu}var Vu,$m;function c1(){if($m)return Vu;$m=1;var s=Kw(),i=Hi(),r=Et(),o=Ui(),l=_a(),f=wa(),d=Object.prototype,p=d.hasOwnProperty;function g(m,_){var C=r(m),b=!C&&i(m),x=!C&&!b&&o(m),A=!C&&!b&&!x&&f(m),k=C||b||x||A,R=k?s(m.length,String):[],z=R.length;for(var H in m)(_||p.call(m,H))&&!(k&&(H=="length"||x&&(H=="offset"||H=="parent")||A&&(H=="buffer"||H=="byteLength"||H=="byteOffset")||l(H,z)))&&R.push(H);return R}return Vu=g,Vu}var Ku,Bm;function Sa(){if(Bm)return Ku;Bm=1;var s=Object.prototype;function i(r){var o=r&&r.constructor,l=typeof o=="function"&&o.prototype||s;return r===l}return Ku=i,Ku}var Gu,Hm;function f1(){if(Hm)return Gu;Hm=1;function s(i,r){return function(o){return i(r(o))}}return Gu=s,Gu}var Xu,Um;function Yw(){if(Um)return Xu;Um=1;var s=f1(),i=s(Object.keys,Object);return Xu=i,Xu}var Qu,Wm;function d1(){if(Wm)return Qu;Wm=1;var s=Sa(),i=Yw(),r=Object.prototype,o=r.hasOwnProperty;function l(f){if(!s(f))return i(f);var d=[];for(var p in Object(f))o.call(f,p)&&p!="constructor"&&d.push(p);return d}return Qu=l,Qu}var Yu,Vm;function Hr(){if(Vm)return Yu;Vm=1;var s=pa(),i=ld();function r(o){return o!=null&&i(o.length)&&!s(o)}return Yu=r,Yu}var Zu,Km;function Ca(){if(Km)return Zu;Km=1;var s=c1(),i=d1(),r=Hr();function o(l){return r(l)?s(l):i(l)}return Zu=o,Zu}var Ju,Gm;function Zw(){if(Gm)return Ju;Gm=1;var s=Br(),i=Ca();function r(o,l){return o&&s(l,i(l),o)}return Ju=r,Ju}var ec,Xm;function Jw(){if(Xm)return ec;Xm=1;function s(i){var r=[];if(i!=null)for(var o in Object(i))r.push(o);return r}return ec=s,ec}var tc,Qm;function eS(){if(Qm)return tc;Qm=1;var s=Nt(),i=Sa(),r=Jw(),o=Object.prototype,l=o.hasOwnProperty;function f(d){if(!s(d))return r(d);var p=i(d),g=[];for(var m in d)m=="constructor"&&(p||!l.call(d,m))||g.push(m);return g}return tc=f,tc}var nc,Ym;function Wi(){if(Ym)return nc;Ym=1;var s=c1(),i=eS(),r=Hr();function o(l){return r(l)?s(l,!0):i(l)}return nc=o,nc}var rc,Zm;function tS(){if(Zm)return rc;Zm=1;var s=Br(),i=Wi();function r(o,l){return o&&s(l,i(l),o)}return rc=r,rc}var Ai={exports:{}};Ai.exports;var Jm;function p1(){return Jm||(Jm=1,(function(s,i){var r=Kt(),o=i&&!i.nodeType&&i,l=o&&!0&&s&&!s.nodeType&&s,f=l&&l.exports===o,d=f?r.Buffer:void 0,p=d?d.allocUnsafe:void 0;function g(m,_){if(_)return m.slice();var C=m.length,b=p?p(C):new m.constructor(C);return m.copy(b),b}s.exports=g})(Ai,Ai.exports)),Ai.exports}var ic,ev;function h1(){if(ev)return ic;ev=1;function s(i,r){var o=-1,l=i.length;for(r||(r=Array(l));++of?0:f+r),o=o>f?f:o,o<0&&(o+=f),f=r>o?0:o-r>>>0,r>>>=0;for(var d=Array(f);++l0&&f(_)?l>1?r(_,l-1,f,d,p):s(p,_):d||(p[p.length]=_)}return p}return Hc=r,Hc}var Uc,zv;function PS(){if(zv)return Uc;zv=1;var s=OS();function i(r){var o=r==null?0:r.length;return o?s(r,1):[]}return Uc=i,Uc}var Wc,$v;function bS(){if($v)return Wc;$v=1;function s(i,r,o){switch(o.length){case 0:return i.call(r);case 1:return i.call(r,o[0]);case 2:return i.call(r,o[0],o[1]);case 3:return i.call(r,o[0],o[1],o[2])}return i.apply(r,o)}return Wc=s,Wc}var Vc,Bv;function O1(){if(Bv)return Vc;Bv=1;var s=bS(),i=Math.max;function r(o,l,f){return l=i(l===void 0?o.length-1:l,0),function(){for(var d=arguments,p=-1,g=i(d.length-l,0),m=Array(g);++p0){if(++f>=s)return arguments[0]}else f=0;return l.apply(void 0,arguments)}}return Qc=o,Qc}var Yc,Kv;function P1(){if(Kv)return Yc;Kv=1;var s=RS(),i=kS(),r=i(s);return Yc=r,Yc}var Zc,Gv;function b1(){if(Gv)return Zc;Gv=1;var s=PS(),i=O1(),r=P1();function o(l){return r(i(l,void 0,s),l+"")}return Zc=o,Zc}var Jc,Xv;function IS(){if(Xv)return Jc;Xv=1;var s=a1(),i=T1(),r=CS(),o=zr(),l=Br(),f=TS(),d=b1(),p=_1(),g=1,m=2,_=4,C=d(function(b,x){var A={};if(b==null)return A;var k=!1;x=s(x,function(z){return z=o(z,b),k||(k=z.length>1),z}),l(b,p(b),A),k&&(A=i(A,g|m|_,f));for(var R=x.length;R--;)r(A,x[R]);return A});return Jc=C,Jc}var AS=IS();const Ta=He(AS),Ea={PREFIX:`${qn}-typography`},st={WEIGHT:["light","regular","medium","semibold","bold","default"],TYPE:["primary","secondary","danger","warning","success","tertiary","quaternary"],SIZE:["normal","small","inherit"],SPACING:["normal","extended"],HEADING:[1,2,3,4,5,6],RULE:["text","numbers","bytes-decimal","bytes-binary","percentages","exponential"],TRUNCATE:["ceil","floor","round"]};var NS=function(s,i){var r={};for(var o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.indexOf(o)<0&&(r[o]=s[o]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,o=Object.getOwnPropertySymbols(s);l1?f[p-1]:void 0,m=p>2?f[2]:void 0;for(g=o.length>3&&typeof g=="function"?(p--,g):void 0,m&&i(f[0],f[1],m)&&(g=p<3?void 0:g,p=1),l=Object(l);++dx))return!1;var k=C.get(d),R=C.get(p);if(k&&R)return k==p&&R==d;var z=-1,H=!0,W=g&l?new s:void 0;for(C.set(d,p),C.set(p,d);++zf===r))>-1;)o.splice(l,1)}}else ca(r)&&this._eventMap.delete(i);return this}emit(i){for(var r=arguments.length,o=new Array(r>1?r-1:0),l=1;ld(...o)),!0):!1}}function Ni(s){try{return s instanceof HTMLElement}catch{return typeof s=="object"&&s.nodeType===1&&typeof s.style=="object"&&typeof s.ownerDocument=="object"}}function OC(s){for(var i=arguments.length,r=new Array(i>1?i-1:0),o=1;o1?i-1:0),o=1;o(r[o]=s[o],r),{})}function bC(s){s.stopPropagation(),s.preventDefault()}function pO(s){return s.length===1&&s.match(/\S/)}function Pa(s,i){for(let r=0;r0&&Pa(s,s[0])}function gO(s){s.length>0&&Pa(s,s[s.length-1])}function mO(s,i){let r,o;s.length>0&&(i===s[0]?r=s[s.length-1]:(o=s.indexOf(i),r=s[o-1]),Pa(s,r))}function vO(s,i){let r,o;s.length>0&&(i===s[s.length-1]?r=s[0]:(o=s.indexOf(i),r=s[o+1]),Pa(s,r))}function yO(s,i,r,o){let l,f;return!s||!r||!o||o.length>1?-1:(o=o.toLowerCase(),l=s.indexOf(i)+1,l>=s.length&&(l=0),f=r.indexOf(o,l),f===-1&&(f=r.indexOf(o,0)),f>=0?f:-1)}function _O(s,i){if(!s)return null;for(;s.parentElement&&Te(s.parentElement,"attributes.role.value","")!==i;)s=s.parentElement;return s.parentElement}function wO(s,i){for(let r=0;r{this._adapter.removePortal()},this.setDisplayNone=(o,l)=>{this._adapter.setDisplayNone(o,l)},this.updateStateIfCursorOnTrigger=o=>{var l,f;if(!((l=o==null?void 0:o.matches)===null||l===void 0)&&l.call(o,":hover")){const d=this._adapter.getEventName(),p=this.getState("triggerEventSet");(f=p[d.mouseEnter])===null||f===void 0||f.call(p)}},this.onResize=()=>{this.getState("visible")&&this.calcPosition()},this.delayShow=()=>{const o=this.getProp("mouseEnterDelay");this.clearDelayTimer(),o>0?this._timer=setTimeout(()=>{this.show(),this.clearDelayTimer()},o):this.show()},this.show=()=>{if(this._initContainerPosition(),this._adapter.getAnimatingState())return;const o=this.getProp("content"),l=this.getProp("trigger"),f=this.getProp("clickTriggerToHide"),{visible:d,displayNone:p}=this.getStates();if(p&&this.setDisplayNone(!1),!d){if(this.clearDelayTimer(),this._adapter.on("portalInserted",()=>{this.calcPosition()}),l==="hover"){const g=()=>{var m;const _=this._adapter.getTriggerDOM();l&&!(!((m=_==null?void 0:_.matches)===null||m===void 0)&&m.call(_,":hover"))&&this.hide(),this._adapter.off("portalInserted",g)};this._adapter.on("portalInserted",g)}this._adapter.on("positionUpdated",()=>{this._togglePortalVisible(!0)}),this._adapter.insertPortal(o,{left:-9999,top:-9999}),l==="custom"&&this._adapter.registerClickOutsideHandler(()=>{}),(l==="click"||f||l==="contextMenu")&&this._adapter.registerClickOutsideHandler(this.hide),this._bindScrollEvent(),this._bindResizeEvent()}},this.calcPosition=function(o,l,f){let d=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0;o=(Fn(o)?r._adapter.getTriggerBounding():o)||Object.assign({},Mr),f=(Fn(f)?r._adapter.getPopupContainerRect():f)||Object.assign({},Mr),l=(Fn(l)?r._adapter.getWrapperBounding():l)||Object.assign({},Mr);let p=r.calcPosStyle({triggerRect:o,wrapperRect:l,containerRect:f}),g=r.getProp("position");if(r.getProp("autoAdjustOverflow")){const{position:m,isHeightOverFlow:_,isWidthOverFlow:C}=r.adjustPosIfNeed(g,p,o,l,f);(g!==m||_||C)&&(g=m,p=r.calcPosStyle({triggerRect:o,wrapperRect:l,containerRect:f,position:g,spacing:null,isOverFlow:[_,C]}))}return d&&r._mounted&&r._adapter.setPosition(Object.assign(Object.assign({},p),{position:g})),p},this.delayHide=()=>{const o=this.getProp("mouseLeaveDelay");this.clearDelayTimer(),o>0?this._timer=setTimeout(()=>{this.hide(),this.clearDelayTimer()},o):this.hide()},this.hide=()=>{this.clearDelayTimer(),this._togglePortalVisible(!1),this._adapter.off("portalInserted"),this._adapter.off("positionUpdated")},this.handleContainerKeydown=o=>{const{guardFocus:l,closeOnEsc:f}=this.getProps();switch(o&&o.key){case"Escape":f&&this._handleEscKeyDown(o);break;case"Tab":if(l){const d=this._adapter.getContainer(),p=this._adapter.getFocusableElements(d);p.length&&(o.shiftKey?this._handleContainerShiftTabKeyDown(p,o):this._handleContainerTabKeyDown(p,o))}break}},this._timer=null}init(){const{wrapperId:i}=this.getProps();this._mounted=!0,this._bindEvent(),this._shouldShow(),i||this._adapter.setId()}destroy(){this._mounted=!1,this.unBindEvent()}_bindEvent(){const i=this.getProp("trigger"),{triggerEventSet:r,portalEventSet:o}=this._generateEvent(i);this._bindTriggerEvent(r),this._bindPortalEvent(o),this._bindResizeEvent()}unBindEvent(){this._adapter.unregisterClickOutsideHandler(),this.unBindResizeEvent(),this.unBindScrollEvent(),clearTimeout(this._timer)}_bindTriggerEvent(i){this._adapter.registerTriggerEvent(i)}_bindPortalEvent(i){this._adapter.registerPortalEvent(i)}_bindResizeEvent(){this._adapter.registerResizeHandler(this.onResize)}unBindResizeEvent(){this._adapter.unregisterResizeHandler(this.onResize)}_adjustPos(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"reverse",l=arguments.length>3?arguments[3]:void 0;switch(o){case"reverse":return this._reversePos(i,r);case"expand":return this._expandPos(i,l);case"reduce":return this._reducePos(i);default:return this._reversePos(i,r)}}_reversePos(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";if(arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1){if(ia.TOP.test(i))return i.replace("top","bottom").replace("Top","Bottom");if(ia.BOTTOM.test(i))return i.replace("bottom","top").replace("Bottom","Top")}else{if(ia.LEFT.test(i))return i.replace("left","right").replace("Left","Right");if(ia.RIGHT.test(i))return i.replace("right","left").replace("Right","Left")}return i}_expandPos(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",r=arguments.length>1?arguments[1]:void 0;return i.concat(r)}_reducePos(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";const r=["Top","Bottom","Left","Right"].find(o=>i.endsWith(o));return r?i.replace(r,""):i}clearDelayTimer(){this._timer&&(clearTimeout(this._timer),this._timer=null)}_generateEvent(i){const r=this._adapter.getEventName(),o={[r.keydown]:f=>{this._handleTriggerKeydown(f)}};let l={};switch(i){case"focus":o[r.focus]=()=>{this.getProp("condition")!==!1&&this.delayShow()},o[r.blur]=()=>{this.delayHide()},l=o;break;case"click":o[r.click]=()=>{this.getProp("condition")!==!1&&this.show()},l={};break;case"hover":o[r.mouseEnter]=()=>{this.setCache("isClickToHide",!1),this.getProp("condition")!==!1&&this.delayShow()},o[r.mouseLeave]=()=>{this.delayHide()},o[r.focus]=()=>{const{disableFocusListener:f}=this.getProps();this.getProp("condition")!==!1&&!f&&this.delayShow()},o[r.blur]=()=>{const{disableFocusListener:f}=this.getProps();!f&&this.delayHide()},l=Object.assign({},o),this.getProp("clickToHide")&&(l[r.click]=()=>{this.setCache("isClickToHide",!0),this.hide()},l[r.mouseEnter]=()=>{this.getCache("isClickToHide")||this.getProp("condition")!==!1&&this.delayShow()});break;case"custom":break;case"contextMenu":o[r.contextMenu]=f=>{this.getProp("condition")!==!1&&(f.preventDefault(),this.show())};break}return{triggerEventSet:o,portalEventSet:l}}_shouldShow(){this.getProp("visible")&&this.show()}_togglePortalVisible(i){const r=this.getState("visible"),o=this.getState("isInsert");(r!==i||o!==i)&&this._adapter.togglePortalVisible(i,()=>{i&&this._adapter.setInitialFocus(),this._adapter.notifyVisibleChange(i)})}_roundPixel(i){return typeof i=="number"?Math.round(i):i}calcTransformOrigin(i,r,o,l){if(i&&r&&o!=null&&l!=null){if(this.getProp("transformFromCenter")){if(["topLeft","bottomLeft"].includes(i))return`${this._roundPixel(r.width/2)}px ${-l*100}%`;if(["topRight","bottomRight"].includes(i))return`calc(100% - ${this._roundPixel(r.width/2)}px) ${-l*100}%`;if(["leftTop","rightTop"].includes(i))return`${-o*100}% ${this._roundPixel(r.height/2)}px`;if(["leftBottom","rightBottom"].includes(i))return`${-o*100}% calc(100% - ${this._roundPixel(r.height/2)}px)`}return`${-o*100}% ${-l*100}%`}return null}calcPosStyle(i){var r;const{spacing:o,isOverFlow:l}=i,{innerWidth:f}=window,d=(Fn(i.triggerRect)?i.triggerRect:this._adapter.getTriggerBounding())||Object.assign({},Mr),p=(Fn(i.containerRect)?i.containerRect:this._adapter.getPopupContainerRect())||Object.assign({},Mr),g=(Fn(i.wrapperRect)?i.wrapperRect:this._adapter.getWrapperBounding())||Object.assign({},Mr),m=i.position!=null?i.position:this.getProp("position"),_=o??this.getProp("spacing"),{arrowPointAtCenter:C,showArrow:b,arrowBounding:x}=this.getProps(),A=b&&C;let k=_,R=0;if(typeof _!="number"){const Me=m.includes("top")||m.includes("bottom");k=Me?_.y:_.x,R=Me?_.x:_.y}const z=Te(x,"width",24),H=Te(x,"width",24),W=Te(x,"offsetY",0),$=6,Y=6;let M,N,U=0,X=0;const ee=d.left+d.width/2,V=d.top+d.height/2,ce=$+z/2,ne=Y+H/2,pe=g.height-p.height,_e=g.width-p.width,Pe=pe>0?pe:0,we=_e>0?_e:0,F=l&&l[0],K=l&&l[1],G=ee-p.leftf,ae=Math.abs((g==null?void 0:g.width)-((r=this._adapter.getContainer())===null||r===void 0?void 0:r.clientWidth))>1;switch(ae&&(k=k*g.width/this._adapter.getContainer().clientWidth),m){case"top":M=K?G?p.left+g.width/2:p.right-g.width/2+we:ee+R,N=F?p.top:d.top-k,U=-.5,X=F?0:-1;break;case"topLeft":M=K?j?p.left:p.right-g.width:A?ee-ce+R:d.left+R,N=F?p.top:d.top-k,X=F?0:-1;break;case"topRight":M=K?p.right+we:A?ee+ce+R:d.right+R,N=F?p.top:d.top-k,X=F?0:-1,U=-1;break;case"left":M=K?p.left:d.left-k,N=F?T?p.top+g.height/2:p.bottom-g.height/2+Pe:V+R,U=K?0:-1,X=-.5;break;case"leftTop":M=K?p.left:d.left-k,N=F?p.top:A?V-ne+R:d.top+R,U=K?0:-1;break;case"leftBottom":M=K?p.left:d.left-k,N=F?p.bottom:A?V+ne+R:d.bottom+R,U=K?0:-1,X=-1;break;case"bottom":M=K?G?p.left+g.width/2:p.right-g.width/2+we:ee+R,N=F?p.bottom:d.top+d.height+k,U=-.5,X=F?-1:0;break;case"bottomLeft":M=K?j?p.left:p.right-g.width:A?ee-ce+R:d.left+R,N=F?p.bottom:d.top+d.height+k,X=F?-1:0;break;case"bottomRight":M=K?p.right+we:A?ee+ce+R:d.right+R,N=F?p.bottom:d.top+d.height+k,U=-1,X=F?-1:0;break;case"right":M=K?p.right:d.right+k,N=F?T?p.top+g.height/2:p.bottom-g.height/2+Pe:V+R,U=K?-1:0,X=-.5;break;case"rightTop":M=K?p.right:d.right+k,N=F?p.top:A?V-ne+R:d.top+R,U=K?-1:0;break;case"rightBottom":M=K?p.right:d.right+k,N=F?p.bottom:A?V+ne+R:d.bottom+R,U=K?-1:0,X=-1;break;case"leftTopOver":M=K?p.left:d.left-k,N=F?p.top:d.top-k;break;case"rightTopOver":M=K?p.right:d.right+k,N=F?p.top:d.top-k,U=-1;break;case"leftBottomOver":M=K?p.left:d.left-k,N=F?p.bottom:d.bottom+k,X=-1;break;case"rightBottomOver":M=K?p.right:d.right+k,N=F?p.bottom:d.bottom+k,U=-1,X=-1;break}const se=this.calcTransformOrigin(m,d,U,X),fe=this._adapter.containerIsBody();if(M=M-p.left,N=N-p.top,ae&&(M/=g.width/this._adapter.getContainer().clientWidth),ae&&(N/=g.height/this._adapter.getContainer().clientHeight),fe&&!this._adapter.containerIsRelativeOrAbsolute()){const Me=this._adapter.getDocumentElementBounding();M+=p.left-Me.left,N+=p.top-Me.top}M=fe?M:M+p.scrollLeft,N=fe?N:N+p.scrollTop;const ue=d.height;if(this.getProp("showArrow")&&!C&&ue<=(H/2+W)*2){const Me=ue/2-(W+H/2);(m.includes("Top")||m.includes("Bottom"))&&!m.includes("Over")&&(N=m.includes("Top")?N+Me:N-Me)}let he,de;if(b&&["top","bottom","left","right"].includes(m))if(C){if((m==="top"||m==="bottom")&&g.width>0){const Je=(ee-M)/g.width+.5,ft=(z/2+$)/g.width,jt=1-ft,ve=Math.max(ft,Math.min(jt,Je));Math.abs(ve-.5)>.01&&(he=`${ve*100}%`)}if((m==="left"||m==="right")&&g.height>0){const Je=(V-N)/g.height+.5,ft=(H/2+Y)/g.height,jt=1-ft,ve=Math.max(ft,Math.min(jt,Je));Math.abs(ve-.5)>.01&&(de=`${ve*100}%`)}}else{if((m==="top"||m==="bottom")&&g.width>0){const Je=$+z/2;G?he=`${Je/g.width*100}%`:he=`${(g.width-Je)/g.width*100}%`}if((m==="left"||m==="right")&&g.height>0){const Je=Y+H/2;T?de=`${Je/g.height*100}%`:de=`${(g.height-Je)/g.height*100}%`}}const ge={left:this._roundPixel(M),top:this._roundPixel(N)};he&&(ge["--semi-tooltip-arrow-offset-x"]=he),de&&(ge["--semi-tooltip-arrow-offset-y"]=de);let be="";return U!=null&&(be+=`translateX(${U*100}%) `,Object.defineProperty(ge,"translateX",{enumerable:!1,value:U})),X!=null&&(be+=`translateY(${X*100}%) `,Object.defineProperty(ge,"translateY",{enumerable:!1,value:X})),se!=null&&(ge.transformOrigin=se),be&&(ge.transform=be),ge}isLR(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return i.includes("left")||i.includes("right")}isTB(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return i.includes("top")||i.includes("bottom")}isReverse(i,r,o){return io}isOverFlow(i,r,o){return i=o||r>=o}getReverse(i,r,o,l){return i&&l||o}adjustPosIfNeed(i,r,o,l,f){const{innerWidth:d,innerHeight:p}=window,{margin:g}=this.getProps(),m=typeof g=="number"?g:g.marginLeft,_=typeof g=="number"?g:g.marginTop,C=typeof g=="number"?g:g.marginRight,b=typeof g=="number"?g:g.marginBottom;let x=!1,A=!1;const k=this.getProp("spacing");let R=k,z=0;if(typeof k!="number"){const H=i.includes("top")||i.includes("bottom");R=H?k.y:k.x,z=H?k.x:k.y}if(l.width>0&&l.height>0){const H=o.left,W=o.right,$=o.top,Y=o.bottom,M=d-H,N=p-$,U=d-W,X=p-Y,ee=l.width>o.width,V=l.height>o.height,ce=$-_l.height+R,ne=H-ml.width+R,pe=X-bl.height+R,_e=U-Cl.width+R;N-bl.height+R,Y-_l.height+R;const Pe=Nl.height+z,we=Yl.height+z,F=Ml.width+z,K=Wl.width+z,G=Nl.height+R,T=Yl.height+R,j=Ml.width,ae=Wl.width,se=$-f.top,fe=H-f.left,ue=se+o.height,he=fe+o.width,de=f.bottom-Y,ge=f.right-W,be=de+o.height,Me=ge+o.width,Je=this.isReverse(se-_,de-b,l.height+R),ft=this.isReverse(fe-m,ge-C,l.width+R),jt=this.isReverse(de-b,se-_,l.height+R),ve=this.isReverse(ge-C,fe-m,l.width+R);this.isReverse(be-b,ue-_,l.height+R),this.isReverse(ue-_,be-b,l.height+R);const on=this.isReverse(be,ue,l.height+z),ye=this.isReverse(ue,be,l.height+z),Mt=this.isReverse(Me,he,l.width+z),Ot=this.isReverse(he,Me,l.width+z),et=o.height/2,$e=o.width/2,tt=this.isOverFlow($-_,X-b,l.height+R),Fe=this.isOverFlow(H-m,U-C,l.width+R),Dt=this.isOverFlow(Y-_,N-b,l.height+R),Lt=this.isOverFlow(W-m,M-C,l.width+R),$n=this.isHalfOverFlow(Y-et,N-et,(l.height+z)/2),an=this.isHalfOverFlow(W-$e,M-$e,(l.width+z)/2),nt=this.isHalfAllEnough(Y-et,N-et,(l.height+z)/2),Gt=this.isHalfAllEnough(W-$e,M-$e,(l.width+z)/2),Pt=this.isOverFlow(se-_,de-b,l.height+R),Ft=this.isOverFlow(fe-m,ge-C,l.width+R),mn=this.isOverFlow(ue-_,be-b,l.height+R),lt=this.isOverFlow(he-m,Me-C,l.width+R),yt=this.isHalfOverFlow(ue-et,be-et,(l.height+z)/2),Ki=this.isHalfOverFlow(he-$e,Me-$e,(l.width+z)/2),vn=this.isHalfAllEnough(ue-et,be-et,(l.height+z)/2),yn=this.isHalfAllEnough(he-$e,Me-$e,(l.width+z)/2),Bn=this.getReverse(tt,Pt,ce,Je),Hn=this.getReverse(Fe,Ft,ne,ft),Un=this.getReverse(tt,Pt,pe,jt),Xt=this.getReverse(Fe,Ft,_e,ve),_t=this.getReverse(Dt,mn,Pe,on),Wn=this.getReverse(Dt,mn,we,ye),sn=this.getReverse(Lt,lt,F,Mt),Vn=this.getReverse(Lt,lt,K,Ot),Wr=$n&&yt,Vr=an&&Ki;switch(i){case"top":Bn&&(i=this._adjustPos(i,!0)),Vr&&(sn||Vn)&&(i=this._adjustPos(i,!0,"expand",sn?"Right":"Left"));break;case"topLeft":Bn&&(i=this._adjustPos(i,!0)),sn&&ee&&(i=this._adjustPos(i)),A&&(Gt||yn)&&(i=this._adjustPos(i,!0,"reduce"));break;case"topRight":Bn&&(i=this._adjustPos(i,!0)),Vn&&ee&&(i=this._adjustPos(i)),A&&(Gt||yn)&&(i=this._adjustPos(i,!0,"reduce"));break;case"left":Hn&&(i=this._adjustPos(i)),Wr&&(_t||Wn)&&(i=this._adjustPos(i,!1,"expand",_t?"Bottom":"Top"));break;case"leftTop":Hn&&(i=this._adjustPos(i)),_t&&V&&(i=this._adjustPos(i,!0)),x&&(nt||vn)&&(i=this._adjustPos(i,!1,"reduce"));break;case"leftBottom":Hn&&(i=this._adjustPos(i)),Wn&&V&&(i=this._adjustPos(i,!0)),x&&(nt||vn)&&(i=this._adjustPos(i,!1,"reduce"));break;case"bottom":Un&&(i=this._adjustPos(i,!0)),Vr&&(sn||Vn)&&(i=this._adjustPos(i,!0,"expand",sn?"Right":"Left"));break;case"bottomLeft":Un&&(i=this._adjustPos(i,!0)),sn&&ee&&(i=this._adjustPos(i)),A&&(Gt||yn)&&(i=this._adjustPos(i,!0,"reduce"));break;case"bottomRight":Un&&(i=this._adjustPos(i,!0)),Vn&&ee&&(i=this._adjustPos(i)),A&&(Gt||yn)&&(i=this._adjustPos(i,!0,"reduce"));break;case"right":Xt&&(i=this._adjustPos(i)),Wr&&(_t||Wn)&&(i=this._adjustPos(i,!1,"expand",_t?"Bottom":"Top"));break;case"rightTop":Xt&&(i=this._adjustPos(i)),_t&&V&&(i=this._adjustPos(i,!0)),x&&(nt||vn)&&(i=this._adjustPos(i,!1,"reduce"));break;case"rightBottom":Xt&&(i=this._adjustPos(i)),Wn&&V&&(i=this._adjustPos(i,!0)),x&&(nt||vn)&&(i=this._adjustPos(i,!1,"reduce"));break;case"leftTopOver":G&&(i=this._adjustPos(i,!0)),j&&(i=this._adjustPos(i));break;case"leftBottomOver":T&&(i=this._adjustPos(i,!0)),j&&(i=this._adjustPos(i));break;case"rightTopOver":G&&(i=this._adjustPos(i,!0)),ae&&(i=this._adjustPos(i));break;case"rightBottomOver":T&&(i=this._adjustPos(i,!0)),ae&&(i=this._adjustPos(i));break}this.isTB(i)&&(x=tt&&Pt,i==="top"||i==="bottom"?A=an&&Ki||W<0||U<0:A=Lt&<||W<0||U<0),this.isLR(i)&&(A=Fe&&Ft,i==="left"||i==="right"?x=$n&&yt||$<0||N<0:x=Dt&&mn||$<0||N<0)}return{position:i,isHeightOverFlow:x,isWidthOverFlow:A}}_bindScrollEvent(){this._adapter.registerScrollHandler(()=>this.calcPosition())}unBindScrollEvent(){this._adapter.unregisterScrollHandler()}_initContainerPosition(){this._adapter.getContainerPosition()||!this._adapter.containerIsBody()||this._adapter.updateContainerPosition()}_handleTriggerKeydown(i){const{closeOnEsc:r,disableArrowKeyDown:o}=this.getProps(),l=this._adapter.getContainer(),f=this._adapter.getFocusableElements(l),d=f.length;switch(i&&i.key){case"Escape":bC(i),r&&this._handleEscKeyDown(i);break;case"ArrowUp":!o&&d&&this._handleTriggerArrowUpKeydown(f,i);break;case"ArrowDown":!o&&d&&this._handleTriggerArrowDownKeydown(f,i);break}}focusTrigger(){const{trigger:i,returnFocusOnClose:r,preventScroll:o}=this.getProps();if(r&&i!=="custom"){const l=this._adapter.getTriggerNode();l&&"focus"in l&&l.focus({preventScroll:o})}}_handleEscKeyDown(i){const{trigger:r}=this.getProps();r!=="custom"&&(this.focusTrigger(),this.hide()),this._adapter.notifyEscKeydown(i)}_handleContainerTabKeyDown(i,r){const{preventScroll:o}=this.getProps(),l=this._adapter.getActiveElement();i[i.length-1]===l&&(i[0].focus({preventScroll:o}),r.preventDefault())}_handleContainerShiftTabKeyDown(i,r){const{preventScroll:o}=this.getProps(),l=this._adapter.getActiveElement();i[0]===l&&(i[i.length-1].focus({preventScroll:o}),r.preventDefault())}_handleTriggerArrowDownKeydown(i,r){const{preventScroll:o}=this.getProps();i[0].focus({preventScroll:o}),r.preventDefault()}_handleTriggerArrowUpKeydown(i,r){const{preventScroll:o}=this.getProps();i[i.length-1].focus({preventScroll:o}),r.preventDefault()}};const RC={PREFIX:`${qn}-tooltip`},Mi={POSITION_SET:["top","topLeft","topRight","left","leftTop","leftBottom","right","rightTop","rightBottom","bottom","bottomLeft","bottomRight","leftTopOver","rightTopOver","leftBottomOver","rightBottomOver"],TRIGGER_SET:["hover","focus","click","custom","contextMenu"],STATUS_DISABLED:"disabled",STATUS_LOADING:"loading"},ar={ARROW_BOUNDING:{offsetX:0,offsetY:2,width:24,height:7},DEFAULT_Z_INDEX:1060,MOUSE_ENTER_DELAY:50,MOUSE_LEAVE_DELAY:50,SPACING:8,MARGIN:0};function kC(s){return`${s}-${new Date().getTime()}-${Math.random()}`}function CO(){var s,i;try{return(i=(s=crypto==null?void 0:crypto.randomUUID)===null||s===void 0?void 0:s.call(crypto))!==null&&i!==void 0?i:String(9987e3+-1e11).replace(/[018]/g,r=>(Number(r)^crypto.getRandomValues(new Uint8Array(1))[0]&15>>Number(r)/4).toString(16))}catch{return kC("semi")}}function vd(){let s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{prefix:i="",length:r=7}=s,o="0123456789abcdefghijklmnopqrstuvwxyz",l=o.length;let f="";for(let d=0;d{if(typeof i=="function")return i(r);if(typeof r=="function"||I.isValidElement(r)||Object.prototype.toString.call(r)==="[object Error]")return r;if(Array.isArray(r)&&r.length===0){const o=Object.keys(r);if(o.length){const l=[];o.forEach(f=>{NC(l,f,r[f])});try{Fi(Te(process,"env.NODE_ENV")!=="production",`[Semi] You may use an out-of-bounds array. In some cases, your program may not behave as expected. + The maximum length of an array is 4294967295. + Please check whether the array subscript in your data exceeds the maximum value of the JS array subscript`)}catch{}return l}else return}})}const FC=s=>I.isValidElement(s)&&Te(s.type,"elementType")==="Icon";function qC(){return document?document.activeElement:null}function zC(s){if(!Ni(s))return[];const r=["input:not([disabled]):not([tabindex='-1'])","textarea:not([disabled]):not([tabindex='-1'])","button:not([disabled]):not([tabindex='-1'])","a[href]:not([tabindex='-1'])","select:not([disabled]):not([tabindex='-1'])","area[href]:not([tabindex='-1'])","iframe:not([tabindex='-1'])","object:not([tabindex='-1'])","*[tabindex]:not([tabindex='-1'])","*[contenteditable]:not([tabindex='-1'])"].join(",");return Array.from(s.querySelectorAll(r))}function yd(s,i){return jy(this,void 0,void 0,function*(){if(i===0){yield s();return}else{yield new Promise(r=>{setTimeout(()=>jy(this,void 0,void 0,function*(){yield yd(s,i-1),r()}),0)});return}})}function EO(){return globalThis&&Object.prototype.toString.call(globalThis)==="[object Window]"?window.innerWidth-document.documentElement.clientWidth:0}function ba(s){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=()=>{var o,l;return((l=(o=sr==null?void 0:sr.config)===null||o===void 0?void 0:o.overrideDefaultProps)===null||l===void 0?void 0:l[s])||{}};return new Proxy(Object.assign({},i),{get(o,l,f){const d=r();return l in d?d[l]:Reflect.get(o,l,f)},set(o,l,f,d){return Reflect.set(o,l,f,d)},ownKeys(){const o=r();return Array.from(new Set([...Reflect.ownKeys(i),...Object.keys(o)]))},getOwnPropertyDescriptor(o,l){const f=r();return l in f?Reflect.getOwnPropertyDescriptor(f,l):Reflect.getOwnPropertyDescriptor(o,l)}})}var qf={exports:{}},vt={},zf={exports:{}},$f={};/** + * @license React + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var My;function $C(){return My||(My=1,(function(s){function i(F,K){var G=F.length;F.push(K);e:for(;0>>1,j=F[T];if(0>>1;Tl(fe,G))uel(he,fe)?(F[T]=he,F[ue]=G,T=ue):(F[T]=fe,F[se]=G,T=se);else if(uel(he,G))F[T]=he,F[ue]=G,T=ue;else break e}}return K}function l(F,K){var G=F.sortIndex-K.sortIndex;return G!==0?G:F.id-K.id}if(typeof performance=="object"&&typeof performance.now=="function"){var f=performance;s.unstable_now=function(){return f.now()}}else{var d=Date,p=d.now();s.unstable_now=function(){return d.now()-p}}var g=[],m=[],_=1,C=null,b=3,x=!1,A=!1,k=!1,R=typeof setTimeout=="function"?setTimeout:null,z=typeof clearTimeout=="function"?clearTimeout:null,H=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function W(F){for(var K=r(m);K!==null;){if(K.callback===null)o(m);else if(K.startTime<=F)o(m),K.sortIndex=K.expirationTime,i(g,K);else break;K=r(m)}}function $(F){if(k=!1,W(F),!A)if(r(g)!==null)A=!0,Pe(Y);else{var K=r(m);K!==null&&we($,K.startTime-F)}}function Y(F,K){A=!1,k&&(k=!1,z(U),U=-1),x=!0;var G=b;try{for(W(K),C=r(g);C!==null&&(!(C.expirationTime>K)||F&&!V());){var T=C.callback;if(typeof T=="function"){C.callback=null,b=C.priorityLevel;var j=T(C.expirationTime<=K);K=s.unstable_now(),typeof j=="function"?C.callback=j:C===r(g)&&o(g),W(K)}else o(g);C=r(g)}if(C!==null)var ae=!0;else{var se=r(m);se!==null&&we($,se.startTime-K),ae=!1}return ae}finally{C=null,b=G,x=!1}}var M=!1,N=null,U=-1,X=5,ee=-1;function V(){return!(s.unstable_now()-eeF||125T?(F.sortIndex=G,i(m,F),r(g)===null&&F===r(m)&&(k?(z(U),U=-1):k=!0,we($,G-T))):(F.sortIndex=j,i(g,F),A||x||(A=!0,Pe(Y))),F},s.unstable_shouldYield=V,s.unstable_wrapCallback=function(F){var K=b;return function(){var G=b;b=K;try{return F.apply(this,arguments)}finally{b=G}}}})($f)),$f}var Dy;function BC(){return Dy||(Dy=1,zf.exports=$C()),zf.exports}/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Ly;function HC(){if(Ly)return vt;Ly=1;var s=td(),i=BC();function r(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),g=Object.prototype.hasOwnProperty,m=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,_={},C={};function b(e){return g.call(C,e)?!0:g.call(_,e)?!1:m.test(e)?C[e]=!0:(_[e]=!0,!1)}function x(e,t,n,a){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return a?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function A(e,t,n,a){if(t===null||typeof t>"u"||x(e,t,n,a))return!0;if(a)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function k(e,t,n,a,u,c,h){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=a,this.attributeNamespace=u,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=c,this.removeEmptyString=h}var R={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){R[e]=new k(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];R[t]=new k(t,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){R[e]=new k(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){R[e]=new k(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){R[e]=new k(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){R[e]=new k(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){R[e]=new k(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){R[e]=new k(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){R[e]=new k(e,5,!1,e.toLowerCase(),null,!1,!1)});var z=/[\-:]([a-z])/g;function H(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(z,H);R[t]=new k(t,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(z,H);R[t]=new k(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(z,H);R[t]=new k(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){R[e]=new k(e,1,!1,e.toLowerCase(),null,!1,!1)}),R.xlinkHref=new k("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){R[e]=new k(e,1,!1,e.toLowerCase(),null,!0,!0)});function W(e,t,n,a){var u=R.hasOwnProperty(t)?R[t]:null;(u!==null?u.type!==0:a||!(2y||u[h]!==c[y]){var w=` +`+u[h].replace(" at new "," at ");return e.displayName&&w.includes("")&&(w=w.replace("",e.displayName)),w}while(1<=h&&0<=y);break}}}finally{ae=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?j(e):""}function fe(e){switch(e.tag){case 5:return j(e.type);case 16:return j("Lazy");case 13:return j("Suspense");case 19:return j("SuspenseList");case 0:case 2:case 15:return e=se(e.type,!1),e;case 11:return e=se(e.type.render,!1),e;case 1:return e=se(e.type,!0),e;default:return""}}function ue(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case N:return"Fragment";case M:return"Portal";case X:return"Profiler";case U:return"StrictMode";case ne:return"Suspense";case pe:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case V:return(e.displayName||"Context")+".Consumer";case ee:return(e._context.displayName||"Context")+".Provider";case ce:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case _e:return t=e.displayName||null,t!==null?t:ue(e.type)||"Memo";case Pe:t=e._payload,e=e._init;try{return ue(e(t))}catch{}}return null}function he(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return ue(t);case 8:return t===U?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function de(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function ge(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function be(e){var t=ge(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),a=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var u=n.get,c=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return u.call(this)},set:function(h){a=""+h,c.call(this,h)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return a},setValue:function(h){a=""+h},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Me(e){e._valueTracker||(e._valueTracker=be(e))}function Je(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),a="";return e&&(a=ge(e)?e.checked?"true":"false":e.value),e=a,e!==n?(t.setValue(e),!0):!1}function ft(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function jt(e,t){var n=t.checked;return G({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function ve(e,t){var n=t.defaultValue==null?"":t.defaultValue,a=t.checked!=null?t.checked:t.defaultChecked;n=de(t.value!=null?t.value:n),e._wrapperState={initialChecked:a,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function on(e,t){t=t.checked,t!=null&&W(e,"checked",t,!1)}function ye(e,t){on(e,t);var n=de(t.value),a=t.type;if(n!=null)a==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(a==="submit"||a==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Ot(e,t.type,n):t.hasOwnProperty("defaultValue")&&Ot(e,t.type,de(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Mt(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var a=t.type;if(!(a!=="submit"&&a!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Ot(e,t,n){(t!=="number"||ft(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var et=Array.isArray;function $e(e,t,n,a){if(e=e.options,t){t={};for(var u=0;u"+t.valueOf().toString()+"",t=nt.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Pt(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Ft={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},mn=["Webkit","ms","Moz","O"];Object.keys(Ft).forEach(function(e){mn.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Ft[t]=Ft[e]})});function lt(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Ft.hasOwnProperty(e)&&Ft[e]?(""+t).trim():t+"px"}function yt(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var a=n.indexOf("--")===0,u=lt(n,t[n],a);n==="float"&&(n="cssFloat"),a?e.setProperty(n,u):e[n]=u}}var Ki=G({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function vn(e,t){if(t){if(Ki[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(r(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(r(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(r(61))}if(t.style!=null&&typeof t.style!="object")throw Error(r(62))}}function yn(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Bn=null;function Hn(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Un=null,Xt=null,_t=null;function Wn(e){if(e=hi(e)){if(typeof Un!="function")throw Error(r(280));var t=e.stateNode;t&&(t=vo(t),Un(e.stateNode,e.type,t))}}function sn(e){Xt?_t?_t.push(e):_t=[e]:Xt=e}function Vn(){if(Xt){var e=Xt,t=_t;if(_t=Xt=null,Wn(e),t)for(e=0;e>>=0,e===0?32:31-(o0(e)/a0|0)|0}var Zi=64,Ji=4194304;function Qr(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function eo(e,t){var n=e.pendingLanes;if(n===0)return 0;var a=0,u=e.suspendedLanes,c=e.pingedLanes,h=n&268435455;if(h!==0){var y=h&~u;y!==0?a=Qr(y):(c&=h,c!==0&&(a=Qr(c)))}else h=n&~u,h!==0?a=Qr(h):c!==0&&(a=Qr(c));if(a===0)return 0;if(t!==0&&t!==a&&(t&u)===0&&(u=a&-a,c=t&-t,u>=c||u===16&&(c&4194240)!==0))return t;if((a&4)!==0&&(a|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=a;0n;n++)t.push(e);return t}function Yr(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-qt(t),e[t]=n}function c0(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var a=e.eventTimes;for(e=e.expirationTimes;0=oi),Zd=" ",Jd=!1;function ep(e,t){switch(e){case"keyup":return F0.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function tp(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var gr=!1;function z0(e,t){switch(e){case"compositionend":return tp(t);case"keypress":return t.which!==32?null:(Jd=!0,Zd);case"textInput":return e=t.data,e===Zd&&Jd?null:e;default:return null}}function $0(e,t){if(gr)return e==="compositionend"||!Xa&&ep(e,t)?(e=Vd(),oo=Ha=Tn=null,gr=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=a}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=lp(n)}}function cp(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?cp(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function fp(){for(var e=window,t=ft();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=ft(e.document)}return t}function Za(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function Q0(e){var t=fp(),n=e.focusedElem,a=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&cp(n.ownerDocument.documentElement,n)){if(a!==null&&Za(n)){if(t=a.start,e=a.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var u=n.textContent.length,c=Math.min(a.start,u);a=a.end===void 0?c:Math.min(a.end,u),!e.extend&&c>a&&(u=a,a=c,c=u),u=up(n,c);var h=up(n,a);u&&h&&(e.rangeCount!==1||e.anchorNode!==u.node||e.anchorOffset!==u.offset||e.focusNode!==h.node||e.focusOffset!==h.offset)&&(t=t.createRange(),t.setStart(u.node,u.offset),e.removeAllRanges(),c>a?(e.addRange(t),e.extend(h.node,h.offset)):(t.setEnd(h.node,h.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,mr=null,Ja=null,ui=null,es=!1;function dp(e,t,n){var a=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;es||mr==null||mr!==ft(a)||(a=mr,"selectionStart"in a&&Za(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),ui&&li(ui,a)||(ui=a,a=ho(Ja,"onSelect"),0Sr||(e.current=ds[Sr],ds[Sr]=null,Sr--)}function xe(e,t){Sr++,ds[Sr]=e.current,e.current=t}var bn={},rt=Pn(bn),dt=Pn(!1),Xn=bn;function Cr(e,t){var n=e.type.contextTypes;if(!n)return bn;var a=e.stateNode;if(a&&a.__reactInternalMemoizedUnmaskedChildContext===t)return a.__reactInternalMemoizedMaskedChildContext;var u={},c;for(c in n)u[c]=t[c];return a&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=u),u}function pt(e){return e=e.childContextTypes,e!=null}function yo(){ke(dt),ke(rt)}function bp(e,t,n){if(rt.current!==bn)throw Error(r(168));xe(rt,t),xe(dt,n)}function xp(e,t,n){var a=e.stateNode;if(t=t.childContextTypes,typeof a.getChildContext!="function")return n;a=a.getChildContext();for(var u in a)if(!(u in t))throw Error(r(108,he(e)||"Unknown",u));return G({},n,a)}function _o(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||bn,Xn=rt.current,xe(rt,e),xe(dt,dt.current),!0}function Rp(e,t,n){var a=e.stateNode;if(!a)throw Error(r(169));n?(e=xp(e,t,Xn),a.__reactInternalMemoizedMergedChildContext=e,ke(dt),ke(rt),xe(rt,e)):ke(dt),xe(dt,n)}var un=null,wo=!1,ps=!1;function kp(e){un===null?un=[e]:un.push(e)}function l_(e){wo=!0,kp(e)}function xn(){if(!ps&&un!==null){ps=!0;var e=0,t=Oe;try{var n=un;for(Oe=1;e>=h,u-=h,cn=1<<32-qt(t)+u|n<le?(Ge=oe,oe=null):Ge=oe.sibling;var Ce=D(E,oe,O[le],B);if(Ce===null){oe===null&&(oe=Ge);break}e&&oe&&Ce.alternate===null&&t(E,oe),S=c(Ce,S,le),ie===null?re=Ce:ie.sibling=Ce,ie=Ce,oe=Ge}if(le===O.length)return n(E,oe),Ie&&Yn(E,le),re;if(oe===null){for(;lele?(Ge=oe,oe=null):Ge=oe.sibling;var Ln=D(E,oe,Ce.value,B);if(Ln===null){oe===null&&(oe=Ge);break}e&&oe&&Ln.alternate===null&&t(E,oe),S=c(Ln,S,le),ie===null?re=Ln:ie.sibling=Ln,ie=Ln,oe=Ge}if(Ce.done)return n(E,oe),Ie&&Yn(E,le),re;if(oe===null){for(;!Ce.done;le++,Ce=O.next())Ce=q(E,Ce.value,B),Ce!==null&&(S=c(Ce,S,le),ie===null?re=Ce:ie.sibling=Ce,ie=Ce);return Ie&&Yn(E,le),re}for(oe=a(E,oe);!Ce.done;le++,Ce=O.next())Ce=Q(oe,E,le,Ce.value,B),Ce!==null&&(e&&Ce.alternate!==null&&oe.delete(Ce.key===null?le:Ce.key),S=c(Ce,S,le),ie===null?re=Ce:ie.sibling=Ce,ie=Ce);return e&&oe.forEach(function(B_){return t(E,B_)}),Ie&&Yn(E,le),re}function ze(E,S,O,B){if(typeof O=="object"&&O!==null&&O.type===N&&O.key===null&&(O=O.props.children),typeof O=="object"&&O!==null){switch(O.$$typeof){case Y:e:{for(var re=O.key,ie=S;ie!==null;){if(ie.key===re){if(re=O.type,re===N){if(ie.tag===7){n(E,ie.sibling),S=u(ie,O.props.children),S.return=E,E=S;break e}}else if(ie.elementType===re||typeof re=="object"&&re!==null&&re.$$typeof===Pe&&Dp(re)===ie.type){n(E,ie.sibling),S=u(ie,O.props),S.ref=gi(E,ie,O),S.return=E,E=S;break e}n(E,ie);break}else t(E,ie);ie=ie.sibling}O.type===N?(S=or(O.props.children,E.mode,B,O.key),S.return=E,E=S):(B=Go(O.type,O.key,O.props,null,E.mode,B),B.ref=gi(E,S,O),B.return=E,E=B)}return h(E);case M:e:{for(ie=O.key;S!==null;){if(S.key===ie)if(S.tag===4&&S.stateNode.containerInfo===O.containerInfo&&S.stateNode.implementation===O.implementation){n(E,S.sibling),S=u(S,O.children||[]),S.return=E,E=S;break e}else{n(E,S);break}else t(E,S);S=S.sibling}S=cl(O,E.mode,B),S.return=E,E=S}return h(E);case Pe:return ie=O._init,ze(E,S,ie(O._payload),B)}if(et(O))return J(E,S,O,B);if(K(O))return te(E,S,O,B);Eo(E,O)}return typeof O=="string"&&O!==""||typeof O=="number"?(O=""+O,S!==null&&S.tag===6?(n(E,S.sibling),S=u(S,O),S.return=E,E=S):(n(E,S),S=ul(O,E.mode,B),S.return=E,E=S),h(E)):n(E,S)}return ze}var Pr=Lp(!0),Fp=Lp(!1),Oo=Pn(null),Po=null,br=null,_s=null;function ws(){_s=br=Po=null}function Ss(e){var t=Oo.current;ke(Oo),e._currentValue=t}function Cs(e,t,n){for(;e!==null;){var a=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,a!==null&&(a.childLanes|=t)):a!==null&&(a.childLanes&t)!==t&&(a.childLanes|=t),e===n)break;e=e.return}}function xr(e,t){Po=e,_s=br=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(ht=!0),e.firstContext=null)}function Rt(e){var t=e._currentValue;if(_s!==e)if(e={context:e,memoizedValue:t,next:null},br===null){if(Po===null)throw Error(r(308));br=e,Po.dependencies={lanes:0,firstContext:e}}else br=br.next=e;return t}var Zn=null;function Ts(e){Zn===null?Zn=[e]:Zn.push(e)}function qp(e,t,n,a){var u=t.interleaved;return u===null?(n.next=n,Ts(t)):(n.next=u.next,u.next=n),t.interleaved=n,dn(e,a)}function dn(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Rn=!1;function Es(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function zp(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function pn(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function kn(e,t,n){var a=e.updateQueue;if(a===null)return null;if(a=a.shared,(Se&2)!==0){var u=a.pending;return u===null?t.next=t:(t.next=u.next,u.next=t),a.pending=t,dn(e,n)}return u=a.interleaved,u===null?(t.next=t,Ts(a)):(t.next=u.next,u.next=t),a.interleaved=t,dn(e,n)}function bo(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var a=t.lanes;a&=e.pendingLanes,n|=a,t.lanes=n,Fa(e,n)}}function $p(e,t){var n=e.updateQueue,a=e.alternate;if(a!==null&&(a=a.updateQueue,n===a)){var u=null,c=null;if(n=n.firstBaseUpdate,n!==null){do{var h={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};c===null?u=c=h:c=c.next=h,n=n.next}while(n!==null);c===null?u=c=t:c=c.next=t}else u=c=t;n={baseState:a.baseState,firstBaseUpdate:u,lastBaseUpdate:c,shared:a.shared,effects:a.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function xo(e,t,n,a){var u=e.updateQueue;Rn=!1;var c=u.firstBaseUpdate,h=u.lastBaseUpdate,y=u.shared.pending;if(y!==null){u.shared.pending=null;var w=y,P=w.next;w.next=null,h===null?c=P:h.next=P,h=w;var L=e.alternate;L!==null&&(L=L.updateQueue,y=L.lastBaseUpdate,y!==h&&(y===null?L.firstBaseUpdate=P:y.next=P,L.lastBaseUpdate=w))}if(c!==null){var q=u.baseState;h=0,L=P=w=null,y=c;do{var D=y.lane,Q=y.eventTime;if((a&D)===D){L!==null&&(L=L.next={eventTime:Q,lane:0,tag:y.tag,payload:y.payload,callback:y.callback,next:null});e:{var J=e,te=y;switch(D=t,Q=n,te.tag){case 1:if(J=te.payload,typeof J=="function"){q=J.call(Q,q,D);break e}q=J;break e;case 3:J.flags=J.flags&-65537|128;case 0:if(J=te.payload,D=typeof J=="function"?J.call(Q,q,D):J,D==null)break e;q=G({},q,D);break e;case 2:Rn=!0}}y.callback!==null&&y.lane!==0&&(e.flags|=64,D=u.effects,D===null?u.effects=[y]:D.push(y))}else Q={eventTime:Q,lane:D,tag:y.tag,payload:y.payload,callback:y.callback,next:null},L===null?(P=L=Q,w=q):L=L.next=Q,h|=D;if(y=y.next,y===null){if(y=u.shared.pending,y===null)break;D=y,y=D.next,D.next=null,u.lastBaseUpdate=D,u.shared.pending=null}}while(!0);if(L===null&&(w=q),u.baseState=w,u.firstBaseUpdate=P,u.lastBaseUpdate=L,t=u.shared.interleaved,t!==null){u=t;do h|=u.lane,u=u.next;while(u!==t)}else c===null&&(u.shared.lanes=0);tr|=h,e.lanes=h,e.memoizedState=q}}function Bp(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var a=Rs.transition;Rs.transition={};try{e(!1),t()}finally{Oe=n,Rs.transition=a}}function sh(){return kt().memoizedState}function d_(e,t,n){var a=jn(e);if(n={lane:a,action:n,hasEagerState:!1,eagerState:null,next:null},lh(e))uh(t,n);else if(n=qp(e,t,n,a),n!==null){var u=ct();Wt(n,e,a,u),ch(n,t,a)}}function p_(e,t,n){var a=jn(e),u={lane:a,action:n,hasEagerState:!1,eagerState:null,next:null};if(lh(e))uh(t,u);else{var c=e.alternate;if(e.lanes===0&&(c===null||c.lanes===0)&&(c=t.lastRenderedReducer,c!==null))try{var h=t.lastRenderedState,y=c(h,n);if(u.hasEagerState=!0,u.eagerState=y,zt(y,h)){var w=t.interleaved;w===null?(u.next=u,Ts(t)):(u.next=w.next,w.next=u),t.interleaved=u;return}}catch{}finally{}n=qp(e,t,u,a),n!==null&&(u=ct(),Wt(n,e,a,u),ch(n,t,a))}}function lh(e){var t=e.alternate;return e===je||t!==null&&t===je}function uh(e,t){_i=Io=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function ch(e,t,n){if((n&4194240)!==0){var a=t.lanes;a&=e.pendingLanes,n|=a,t.lanes=n,Fa(e,n)}}var jo={readContext:Rt,useCallback:it,useContext:it,useEffect:it,useImperativeHandle:it,useInsertionEffect:it,useLayoutEffect:it,useMemo:it,useReducer:it,useRef:it,useState:it,useDebugValue:it,useDeferredValue:it,useTransition:it,useMutableSource:it,useSyncExternalStore:it,useId:it,unstable_isNewReconciler:!1},h_={readContext:Rt,useCallback:function(e,t){return Jt().memoizedState=[e,t===void 0?null:t],e},useContext:Rt,useEffect:Jp,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Ao(4194308,4,nh.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Ao(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ao(4,2,e,t)},useMemo:function(e,t){var n=Jt();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var a=Jt();return t=n!==void 0?n(t):t,a.memoizedState=a.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},a.queue=e,e=e.dispatch=d_.bind(null,je,e),[a.memoizedState,e]},useRef:function(e){var t=Jt();return e={current:e},t.memoizedState=e},useState:Yp,useDebugValue:Ds,useDeferredValue:function(e){return Jt().memoizedState=e},useTransition:function(){var e=Yp(!1),t=e[0];return e=f_.bind(null,e[1]),Jt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var a=je,u=Jt();if(Ie){if(n===void 0)throw Error(r(407));n=n()}else{if(n=t(),Ke===null)throw Error(r(349));(er&30)!==0||Vp(a,t,n)}u.memoizedState=n;var c={value:n,getSnapshot:t};return u.queue=c,Jp(Gp.bind(null,a,c,e),[e]),a.flags|=2048,Ci(9,Kp.bind(null,a,c,n,t),void 0,null),n},useId:function(){var e=Jt(),t=Ke.identifierPrefix;if(Ie){var n=fn,a=cn;n=(a&~(1<<32-qt(a)-1)).toString(32)+n,t=":"+t+"R"+n,n=wi++,0<\/script>",e=e.removeChild(e.firstChild)):typeof a.is=="string"?e=h.createElement(n,{is:a.is}):(e=h.createElement(n),n==="select"&&(h=e,a.multiple?h.multiple=!0:a.size&&(h.size=a.size))):e=h.createElementNS(e,n),e[Yt]=t,e[pi]=a,kh(e,t,!1,!1),t.stateNode=e;e:{switch(h=yn(n,a),n){case"dialog":Re("cancel",e),Re("close",e),u=a;break;case"iframe":case"object":case"embed":Re("load",e),u=a;break;case"video":case"audio":for(u=0;uNr&&(t.flags|=128,a=!0,Ti(c,!1),t.lanes=4194304)}else{if(!a)if(e=Ro(h),e!==null){if(t.flags|=128,a=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Ti(c,!0),c.tail===null&&c.tailMode==="hidden"&&!h.alternate&&!Ie)return ot(t),null}else 2*qe()-c.renderingStartTime>Nr&&n!==1073741824&&(t.flags|=128,a=!0,Ti(c,!1),t.lanes=4194304);c.isBackwards?(h.sibling=t.child,t.child=h):(n=c.last,n!==null?n.sibling=h:t.child=h,c.last=h)}return c.tail!==null?(t=c.tail,c.rendering=t,c.tail=t.sibling,c.renderingStartTime=qe(),t.sibling=null,n=Ne.current,xe(Ne,a?n&1|2:n&1),t):(ot(t),null);case 22:case 23:return al(),a=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==a&&(t.flags|=8192),a&&(t.mode&1)!==0?(Tt&1073741824)!==0&&(ot(t),t.subtreeFlags&6&&(t.flags|=8192)):ot(t),null;case 24:return null;case 25:return null}throw Error(r(156,t.tag))}function C_(e,t){switch(gs(t),t.tag){case 1:return pt(t.type)&&yo(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Rr(),ke(dt),ke(rt),xs(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return Ps(t),null;case 13:if(ke(Ne),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(r(340));Or()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return ke(Ne),null;case 4:return Rr(),null;case 10:return Ss(t.type._context),null;case 22:case 23:return al(),null;case 24:return null;default:return null}}var Fo=!1,at=!1,T_=typeof WeakSet=="function"?WeakSet:Set,Z=null;function Ir(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(a){De(e,t,a)}else n.current=null}function Gs(e,t,n){try{n()}catch(a){De(e,t,a)}}var Nh=!1;function E_(e,t){if(as=ro,e=fp(),Za(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var a=n.getSelection&&n.getSelection();if(a&&a.rangeCount!==0){n=a.anchorNode;var u=a.anchorOffset,c=a.focusNode;a=a.focusOffset;try{n.nodeType,c.nodeType}catch{n=null;break e}var h=0,y=-1,w=-1,P=0,L=0,q=e,D=null;t:for(;;){for(var Q;q!==n||u!==0&&q.nodeType!==3||(y=h+u),q!==c||a!==0&&q.nodeType!==3||(w=h+a),q.nodeType===3&&(h+=q.nodeValue.length),(Q=q.firstChild)!==null;)D=q,q=Q;for(;;){if(q===e)break t;if(D===n&&++P===u&&(y=h),D===c&&++L===a&&(w=h),(Q=q.nextSibling)!==null)break;q=D,D=q.parentNode}q=Q}n=y===-1||w===-1?null:{start:y,end:w}}else n=null}n=n||{start:0,end:0}}else n=null;for(ss={focusedElem:e,selectionRange:n},ro=!1,Z=t;Z!==null;)if(t=Z,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Z=e;else for(;Z!==null;){t=Z;try{var J=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(J!==null){var te=J.memoizedProps,ze=J.memoizedState,E=t.stateNode,S=E.getSnapshotBeforeUpdate(t.elementType===t.type?te:Bt(t.type,te),ze);E.__reactInternalSnapshotBeforeUpdate=S}break;case 3:var O=t.stateNode.containerInfo;O.nodeType===1?O.textContent="":O.nodeType===9&&O.documentElement&&O.removeChild(O.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(r(163))}}catch(B){De(t,t.return,B)}if(e=t.sibling,e!==null){e.return=t.return,Z=e;break}Z=t.return}return J=Nh,Nh=!1,J}function Ei(e,t,n){var a=t.updateQueue;if(a=a!==null?a.lastEffect:null,a!==null){var u=a=a.next;do{if((u.tag&e)===e){var c=u.destroy;u.destroy=void 0,c!==void 0&&Gs(t,n,c)}u=u.next}while(u!==a)}}function qo(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var a=n.create;n.destroy=a()}n=n.next}while(n!==t)}}function Xs(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function jh(e){var t=e.alternate;t!==null&&(e.alternate=null,jh(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Yt],delete t[pi],delete t[fs],delete t[a_],delete t[s_])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Mh(e){return e.tag===5||e.tag===3||e.tag===4}function Dh(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Mh(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Qs(e,t,n){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=mo));else if(a!==4&&(e=e.child,e!==null))for(Qs(e,t,n),e=e.sibling;e!==null;)Qs(e,t,n),e=e.sibling}function Ys(e,t,n){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(a!==4&&(e=e.child,e!==null))for(Ys(e,t,n),e=e.sibling;e!==null;)Ys(e,t,n),e=e.sibling}var Qe=null,Ht=!1;function In(e,t,n){for(n=n.child;n!==null;)Lh(e,t,n),n=n.sibling}function Lh(e,t,n){if(Qt&&typeof Qt.onCommitFiberUnmount=="function")try{Qt.onCommitFiberUnmount(Yi,n)}catch{}switch(n.tag){case 5:at||Ir(n,t);case 6:var a=Qe,u=Ht;Qe=null,In(e,t,n),Qe=a,Ht=u,Qe!==null&&(Ht?(e=Qe,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Qe.removeChild(n.stateNode));break;case 18:Qe!==null&&(Ht?(e=Qe,n=n.stateNode,e.nodeType===8?cs(e.parentNode,n):e.nodeType===1&&cs(e,n),ni(e)):cs(Qe,n.stateNode));break;case 4:a=Qe,u=Ht,Qe=n.stateNode.containerInfo,Ht=!0,In(e,t,n),Qe=a,Ht=u;break;case 0:case 11:case 14:case 15:if(!at&&(a=n.updateQueue,a!==null&&(a=a.lastEffect,a!==null))){u=a=a.next;do{var c=u,h=c.destroy;c=c.tag,h!==void 0&&((c&2)!==0||(c&4)!==0)&&Gs(n,t,h),u=u.next}while(u!==a)}In(e,t,n);break;case 1:if(!at&&(Ir(n,t),a=n.stateNode,typeof a.componentWillUnmount=="function"))try{a.props=n.memoizedProps,a.state=n.memoizedState,a.componentWillUnmount()}catch(y){De(n,t,y)}In(e,t,n);break;case 21:In(e,t,n);break;case 22:n.mode&1?(at=(a=at)||n.memoizedState!==null,In(e,t,n),at=a):In(e,t,n);break;default:In(e,t,n)}}function Fh(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new T_),t.forEach(function(a){var u=N_.bind(null,e,a);n.has(a)||(n.add(a),a.then(u,u))})}}function Ut(e,t){var n=t.deletions;if(n!==null)for(var a=0;au&&(u=h),a&=~c}if(a=u,a=qe()-a,a=(120>a?120:480>a?480:1080>a?1080:1920>a?1920:3e3>a?3e3:4320>a?4320:1960*P_(a/1960))-a,10e?16:e,Nn===null)var a=!1;else{if(e=Nn,Nn=null,Uo=0,(Se&6)!==0)throw Error(r(331));var u=Se;for(Se|=4,Z=e.current;Z!==null;){var c=Z,h=c.child;if((Z.flags&16)!==0){var y=c.deletions;if(y!==null){for(var w=0;wqe()-el?rr(e,0):Js|=n),mt(e,t)}function Yh(e,t){t===0&&((e.mode&1)===0?t=1:(t=Ji,Ji<<=1,(Ji&130023424)===0&&(Ji=4194304)));var n=ct();e=dn(e,t),e!==null&&(Yr(e,t,n),mt(e,n))}function A_(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Yh(e,n)}function N_(e,t){var n=0;switch(e.tag){case 13:var a=e.stateNode,u=e.memoizedState;u!==null&&(n=u.retryLane);break;case 19:a=e.stateNode;break;default:throw Error(r(314))}a!==null&&a.delete(t),Yh(e,n)}var Zh;Zh=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||dt.current)ht=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return ht=!1,w_(e,t,n);ht=(e.flags&131072)!==0}else ht=!1,Ie&&(t.flags&1048576)!==0&&Ip(t,Co,t.index);switch(t.lanes=0,t.tag){case 2:var a=t.type;Lo(e,t),e=t.pendingProps;var u=Cr(t,rt.current);xr(t,n),u=Is(null,t,a,e,u,n);var c=As();return t.flags|=1,typeof u=="object"&&u!==null&&typeof u.render=="function"&&u.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,pt(a)?(c=!0,_o(t)):c=!1,t.memoizedState=u.state!==null&&u.state!==void 0?u.state:null,Es(t),u.updater=Mo,t.stateNode=u,u._reactInternals=t,Fs(t,a,e,n),t=Bs(null,t,a,!0,c,n)):(t.tag=0,Ie&&c&&hs(t),ut(null,t,u,n),t=t.child),t;case 16:a=t.elementType;e:{switch(Lo(e,t),e=t.pendingProps,u=a._init,a=u(a._payload),t.type=a,u=t.tag=M_(a),e=Bt(a,e),u){case 0:t=$s(null,t,a,e,n);break e;case 1:t=Eh(null,t,a,e,n);break e;case 11:t=_h(null,t,a,e,n);break e;case 14:t=wh(null,t,a,Bt(a.type,e),n);break e}throw Error(r(306,a,""))}return t;case 0:return a=t.type,u=t.pendingProps,u=t.elementType===a?u:Bt(a,u),$s(e,t,a,u,n);case 1:return a=t.type,u=t.pendingProps,u=t.elementType===a?u:Bt(a,u),Eh(e,t,a,u,n);case 3:e:{if(Oh(t),e===null)throw Error(r(387));a=t.pendingProps,c=t.memoizedState,u=c.element,zp(e,t),xo(t,a,null,n);var h=t.memoizedState;if(a=h.element,c.isDehydrated)if(c={element:a,isDehydrated:!1,cache:h.cache,pendingSuspenseBoundaries:h.pendingSuspenseBoundaries,transitions:h.transitions},t.updateQueue.baseState=c,t.memoizedState=c,t.flags&256){u=kr(Error(r(423)),t),t=Ph(e,t,a,n,u);break e}else if(a!==u){u=kr(Error(r(424)),t),t=Ph(e,t,a,n,u);break e}else for(Ct=On(t.stateNode.containerInfo.firstChild),St=t,Ie=!0,$t=null,n=Fp(t,null,a,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Or(),a===u){t=hn(e,t,n);break e}ut(e,t,a,n)}t=t.child}return t;case 5:return Hp(t),e===null&&vs(t),a=t.type,u=t.pendingProps,c=e!==null?e.memoizedProps:null,h=u.children,ls(a,u)?h=null:c!==null&&ls(a,c)&&(t.flags|=32),Th(e,t),ut(e,t,h,n),t.child;case 6:return e===null&&vs(t),null;case 13:return bh(e,t,n);case 4:return Os(t,t.stateNode.containerInfo),a=t.pendingProps,e===null?t.child=Pr(t,null,a,n):ut(e,t,a,n),t.child;case 11:return a=t.type,u=t.pendingProps,u=t.elementType===a?u:Bt(a,u),_h(e,t,a,u,n);case 7:return ut(e,t,t.pendingProps,n),t.child;case 8:return ut(e,t,t.pendingProps.children,n),t.child;case 12:return ut(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(a=t.type._context,u=t.pendingProps,c=t.memoizedProps,h=u.value,xe(Oo,a._currentValue),a._currentValue=h,c!==null)if(zt(c.value,h)){if(c.children===u.children&&!dt.current){t=hn(e,t,n);break e}}else for(c=t.child,c!==null&&(c.return=t);c!==null;){var y=c.dependencies;if(y!==null){h=c.child;for(var w=y.firstContext;w!==null;){if(w.context===a){if(c.tag===1){w=pn(-1,n&-n),w.tag=2;var P=c.updateQueue;if(P!==null){P=P.shared;var L=P.pending;L===null?w.next=w:(w.next=L.next,L.next=w),P.pending=w}}c.lanes|=n,w=c.alternate,w!==null&&(w.lanes|=n),Cs(c.return,n,t),y.lanes|=n;break}w=w.next}}else if(c.tag===10)h=c.type===t.type?null:c.child;else if(c.tag===18){if(h=c.return,h===null)throw Error(r(341));h.lanes|=n,y=h.alternate,y!==null&&(y.lanes|=n),Cs(h,n,t),h=c.sibling}else h=c.child;if(h!==null)h.return=c;else for(h=c;h!==null;){if(h===t){h=null;break}if(c=h.sibling,c!==null){c.return=h.return,h=c;break}h=h.return}c=h}ut(e,t,u.children,n),t=t.child}return t;case 9:return u=t.type,a=t.pendingProps.children,xr(t,n),u=Rt(u),a=a(u),t.flags|=1,ut(e,t,a,n),t.child;case 14:return a=t.type,u=Bt(a,t.pendingProps),u=Bt(a.type,u),wh(e,t,a,u,n);case 15:return Sh(e,t,t.type,t.pendingProps,n);case 17:return a=t.type,u=t.pendingProps,u=t.elementType===a?u:Bt(a,u),Lo(e,t),t.tag=1,pt(a)?(e=!0,_o(t)):e=!1,xr(t,n),dh(t,a,u),Fs(t,a,u,n),Bs(null,t,a,!0,e,n);case 19:return Rh(e,t,n);case 22:return Ch(e,t,n)}throw Error(r(156,t.tag))};function Jh(e,t){return Ad(e,t)}function j_(e,t,n,a){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=a,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function At(e,t,n,a){return new j_(e,t,n,a)}function ll(e){return e=e.prototype,!(!e||!e.isReactComponent)}function M_(e){if(typeof e=="function")return ll(e)?1:0;if(e!=null){if(e=e.$$typeof,e===ce)return 11;if(e===_e)return 14}return 2}function Dn(e,t){var n=e.alternate;return n===null?(n=At(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Go(e,t,n,a,u,c){var h=2;if(a=e,typeof e=="function")ll(e)&&(h=1);else if(typeof e=="string")h=5;else e:switch(e){case N:return or(n.children,u,c,t);case U:h=8,u|=8;break;case X:return e=At(12,n,t,u|2),e.elementType=X,e.lanes=c,e;case ne:return e=At(13,n,t,u),e.elementType=ne,e.lanes=c,e;case pe:return e=At(19,n,t,u),e.elementType=pe,e.lanes=c,e;case we:return Xo(n,u,c,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ee:h=10;break e;case V:h=9;break e;case ce:h=11;break e;case _e:h=14;break e;case Pe:h=16,a=null;break e}throw Error(r(130,e==null?e:typeof e,""))}return t=At(h,n,t,u),t.elementType=e,t.type=a,t.lanes=c,t}function or(e,t,n,a){return e=At(7,e,a,t),e.lanes=n,e}function Xo(e,t,n,a){return e=At(22,e,a,t),e.elementType=we,e.lanes=n,e.stateNode={isHidden:!1},e}function ul(e,t,n){return e=At(6,e,null,t),e.lanes=n,e}function cl(e,t,n){return t=At(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function D_(e,t,n,a,u){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=La(0),this.expirationTimes=La(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=La(0),this.identifierPrefix=a,this.onRecoverableError=u,this.mutableSourceEagerHydrationData=null}function fl(e,t,n,a,u,c,h,y,w){return e=new D_(e,t,n,y,w),t===1?(t=1,c===!0&&(t|=8)):t=0,c=At(3,null,null,t),e.current=c,c.stateNode=e,c.memoizedState={element:a,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Es(c),e}function L_(e,t,n){var a=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(s)}catch(i){console.error(i)}}return s(),qf.exports=HC(),qf.exports}var _d=N1();const UC=He(_d),j1=H_({__proto__:null,default:UC},[_d]),lr=Object.assign({},j1),qy=lr.render,zy=lr.unmountComponentAtNode,$y=lr.findDOMNode,{version:M1}=j1,D1=Number((M1||"").split(".")[0]);let By=!1;function WC(){var s;By||D1<18&&typeof((s=sr.config)===null||s===void 0?void 0:s.createRoot)=="function"&&(By=!0,console.warn(`[Semi UI] createRoot was injected but React version is ${M1} (< 18). This configuration is unusual and may cause unexpected behavior.`))}function Hy(s){var i;const r=(i=lr.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED)!==null&&i!==void 0?i:lr.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;r&&typeof r=="object"&&(r.usingClientEntryPoint=s)}function VC(){var s;if(typeof((s=sr.config)===null||s===void 0?void 0:s.createRoot)=="function")return sr.config.createRoot;if(typeof lr.createRoot=="function")return lr.createRoot}let Uy=!1;function KC(){Uy||(Uy=!0,console.error(`[Semi UI] createRoot is not available. If you are using React 19, please inject createRoot before using Semi components. For details, see: https://semi.design/zh-CN/ecosystem/react19 +[Semi UI] createRoot 不可用。如果您正在使用 React 19,请在使用 Semi 组件前注入 createRoot。详情请参阅:https://semi.design/zh-CN/ecosystem/react19`))}const Di="__semi_react_root__";function OO(s,i){WC();const r=VC();if(r){Hy(!0);const o=i[Di]||r(i);Hy(!1),o.render(s),i[Di]=o}else qy?qy(s,i):KC()}function PO(s){s[Di]?(s[Di].unmount(),delete s[Di]):zy&&zy(s)}function GC(s){var i;try{const r=(i=s==null?void 0:s._reactInternals)!==null&&i!==void 0?i:s==null?void 0:s._reactInternalFiber;if(!r||typeof r!="object")return null;let o=r.child,l=0;const f=50;for(;o&&l=19?(r=(i=s.props)===null||i===void 0?void 0:i.ref)!==null&&r!==void 0?r:null:(o=s.ref)!==null&&o!==void 0?o:null:null}const xa=I.createContext({}),XC=()=>document.body;class Ra extends Ee.PureComponent{constructor(i,r){var o;super(i),o=this,this.initContainer=function(l){let f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;var d,p;try{let g;if(!o.el||!(!((d=o.state)===null||d===void 0)&&d.container)||!Array.from(o.state.container.childNodes).includes(o.el)){o.el=document.createElement("div");const _=(o.props.getPopupContainer||l.getPopupContainer||XC)();return _.appendChild(o.el),o.addStyle(o.props.style),o.addClass(o.props.prefixCls,l,o.props.className),g=_,g}}catch(g){if(!f)throw g}return(p=o.state)===null||p===void 0?void 0:p.container},this.addStyle=function(){let l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(o.el)for(const f of Object.keys(l))o.el.style[f]=l[f]},this.addClass=function(l){let f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:o.context;const{direction:d}=f;for(var p=arguments.length,g=new Array(p>2?p-2:0),m=2;m{const{className:i,style:r}=s,o=QC(s,["className","style"]);return I.createElement("svg",Object.assign({"aria-hidden":!0,className:i,style:r},o,{width:"24",height:"7",viewBox:"0 0 24 7",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"}),I.createElement("path",{d:"M24 0V1C20 1 18.5 2 16.5 4C14.5 6 14 7 12 7C10 7 9.5 6 7.5 4C5.5 2 4 1 0 1V0H24Z"}))};var ZC=function(s,i){var r={};for(var o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.indexOf(o)<0&&(r[o]=s[o]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,o=Object.getOwnPropertySymbols(s);l{const{className:i,style:r}=s,o=ZC(s,["className","style"]);return I.createElement("svg",Object.assign({"aria-hidden":!0,className:i,style:r},o,{width:"7",height:"24",xmlns:"http://www.w3.org/2000/svg",fill:"currentColor"}),I.createElement("path",{d:"M0 0L1 0C1 4, 2 5.5, 4 7.5S7,10 7,12S6 14.5, 4 16.5S1,20 1,24L0 24L0 0z"}))},eT=v.shape({offsetX:v.number,offsetY:v.number,width:v.number,height:v.number});class F1 extends I.Component{constructor(i){super(i),this.handleAnimationStart=()=>{var r,o;(o=(r=this.props).onAnimationStart)===null||o===void 0||o.call(r)},this.handleAnimationEnd=()=>{this.setState({currentClassName:this.props.endClassName,extraStyle:{animationFillMode:this.props.fillMode},isAnimating:!1},()=>{var r,o;(o=(r=this.props).onAnimationEnd)===null||o===void 0||o.call(r,!1)})},this.state={currentClassName:this.props.startClassName,extraStyle:{animationFillMode:this.props.fillMode},isAnimating:!0}}componentDidMount(){var i,r,o,l;(r=(i=this.props).onAnimationStart)===null||r===void 0||r.call(i),this.props.motion||((l=(o=this.props).onAnimationEnd)===null||l===void 0||l.call(o,!1),this.setState({isAnimating:!1}))}componentDidUpdate(i,r,o){const l=Object.keys(this.props).filter(f=>!Li(this.props[f],i[f]));l.includes("animationState"),(l.includes("startClassName")||l.includes("replayKey")||l.includes("motion"))&&this.setState({currentClassName:this.props.startClassName,extraStyle:{animationFillMode:this.props.fillMode},isAnimating:!0},()=>{var f,d,p,g;(d=(f=this.props).onAnimationStart)===null||d===void 0||d.call(f),this.props.motion||((g=(p=this.props).onAnimationEnd)===null||g===void 0||g.call(p,this.state.isAnimating),this.setState({isAnimating:!1}))})}render(){var i;return this.props.motion?this.props.children({animationClassName:(i=this.state.currentClassName)!==null&&i!==void 0?i:"",animationStyle:this.state.extraStyle,animationEventsNeedBind:{onAnimationStart:this.handleAnimationStart,onAnimationEnd:this.handleAnimationEnd},isAnimating:this.state.isAnimating}):this.props.children({animationClassName:"",animationStyle:{},animationEventsNeedBind:{},isAnimating:this.state.isAnimating})}}F1.defaultProps={motion:!0,replayKey:""};var Wy=function(s,i){var r={};for(var o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.indexOf(o)<0&&(r[o]=s[o]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,o=Object.getOwnPropertySymbols(s);ldocument.body;class zn extends $r{constructor(i){super(i),this.isAnimating=!1,this.cachedLatestTransitionState="enter",this.setContainerEl=r=>this.containerEl={current:r},this.isSpecial=r=>{if(Ni(r))return!!r.disabled;if(Ee.isValidElement(r)){if(Te(r,"props.disabled"))return Mi.STATUS_DISABLED;const l=Te(r,"props.loading"),f=!Fn(r)&&!Fn(r.type)&&(Te(r,"type.elementType")==="Button"||Te(r,"type.elementType")==="IconButton");if(l&&f)return Mi.STATUS_LOADING}return!1},this.didLeave=()=>{this.props.keepDOM?this.foundation.setDisplayNone(!0):this.foundation.removePortal(),this.foundation.unBindEvent()},this.renderIcon=()=>{const{placement:r}=this.state,{showArrow:o,prefixCls:l,style:f}=this.props;let d=null;const p=Le([`${l}-icon-arrow`]),g=Te(f,"backgroundColor"),m=r!=null&&r.includes("left")||r!=null&&r.includes("right")?I.createElement(JC,null):I.createElement(YC,null);return o&&(Ee.isValidElement(o)?d=o:d=I.cloneElement(m,{className:p,style:{color:g,fill:"currentColor"}})),d},this.handlePortalInnerClick=r=>{this.props.clickToHide&&this.foundation.hide(),this.props.stopPropagation&&oa(r)},this.handlePortalMouseDown=r=>{this.props.stopPropagation&&oa(r)},this.handlePortalFocus=r=>{this.props.stopPropagation&&oa(r)},this.handlePortalBlur=r=>{this.props.stopPropagation&&oa(r)},this.handlePortalInnerKeyDown=r=>{this.foundation.handleContainerKeydown(r)},this.renderContentNode=r=>{const o={initialFocusRef:this.initialFocusRef};return md(r)?r(o):r},this.renderPortal=()=>{const{containerStyle:r={},visible:o,portalEventSet:l,placement:f,displayNone:d,transitionState:p,id:g,isPositionUpdated:m}=this.state,{prefixCls:_,content:C,showArrow:b,style:x,motion:A,role:k,zIndex:R}=this.props,z=this.renderContentNode(C),{className:H}=this.props,W=this.context.direction,$=Le(H,{[`${_}-wrapper`]:!0,[`${_}-wrapper-show`]:o,[`${_}-with-arrow`]:!!b,[`${_}-rtl`]:W==="rtl"}),Y=this.renderIcon(),M=Ta(r,A?["transformOrigin"]:void 0),N=Te(r,"transformOrigin"),U=Te(r,"--semi-tooltip-arrow-offset-x"),X=Te(r,"--semi-tooltip-arrow-offset-y"),ee=Object.assign(Object.assign({},U?{"--semi-tooltip-arrow-offset-x":U}:{}),X?{"--semi-tooltip-arrow-offset-y":X}:{}),V=Te(x,"opacity",null),ce=V||1,ne=I.createElement(F1,{fillMode:"forwards",animationState:p,motion:A&&m,startClassName:p==="enter"?`${la}-animation-show`:`${la}-animation-hide`,onAnimationStart:()=>this.isAnimating=!0,onAnimationEnd:()=>{var pe,_e;p==="leave"&&(this.didLeave(),(_e=(pe=this.props).afterClose)===null||_e===void 0||_e.call(pe)),this.isAnimating=!1}},pe=>{let{animationStyle:_e,animationClassName:Pe,animationEventsNeedBind:we}=pe;return I.createElement("div",Object.assign({className:Le($,Pe),style:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},_e),d?{display:"none"}:{}),{transformOrigin:N}),x),ee),V?{opacity:m?ce:"0"}:{})},l,we,{role:k,"x-placement":f,id:g}),I.createElement("div",{className:`${la}-content`},z),Y)});return I.createElement(Ra,{getPopupContainer:this.props.getPopupContainer,style:{zIndex:R}},I.createElement("div",{tabIndex:-1,className:`${qn}-portal-inner`,style:M,ref:this.setContainerEl,onClick:this.handlePortalInnerClick,onFocus:this.handlePortalFocus,onBlur:this.handlePortalBlur,onMouseDown:this.handlePortalMouseDown,onKeyDown:this.handlePortalInnerKeyDown},ne))},this.wrapSpan=r=>{const{wrapperClassName:o}=this.props,l=Te(r,"props.style.display"),f=Te(r,"props.block"),d=typeof r=="string",p={};return d||(p.display="inline-block"),(f||rT.includes(l))&&(p.width="100%"),I.createElement("span",{className:o,style:p},r)},this.mergeEvents=(r,o)=>{const l={};return TC(o,(f,d)=>{typeof f=="function"&&(l[d]=function(){f(...arguments),r&&typeof r[d]=="function"&&r[d](...arguments)})}),l},this.getPopupId=()=>this.state.id,this.state={visible:!1,transitionState:"",triggerEventSet:{},portalEventSet:{},containerStyle:{},isInsert:!1,placement:i.position||"top",transitionStyle:{},isPositionUpdated:!1,id:i.wrapperId,displayNone:!1},this.foundation=new xC(this.adapter),this.eventManager=new EC,this.triggerEl=I.createRef(),this.containerEl=I.createRef(),this.initialFocusRef=I.createRef(),this.clickOutsideHandler=null,this.resizeHandler=null,this.isWrapped=!1,this.containerPosition=void 0}get adapter(){var i=this;return Object.assign(Object.assign({},super.adapter),{on:function(){return i.eventManager.on(...arguments)},off:function(){return i.eventManager.off(...arguments)},getAnimatingState:()=>this.isAnimating,insertPortal:(r,o)=>{var{position:l}=o,f=Wy(o,["position"]);this.cachedLatestTransitionState="enter",this.setState({isInsert:!0,transitionState:"enter",containerStyle:Object.assign(Object.assign({},this.state.containerStyle),f),isPositionUpdated:!1},()=>{var d;const p=()=>{this.cachedLatestTransitionState==="enter"&&this.eventManager.emit("portalInserted")},g=(d=this.containerEl)===null||d===void 0?void 0:d.current;if(g&&(g.offsetWidth>0||g.offsetHeight>0)){p();return}if(g&&typeof ResizeObserver<"u"){let m=!1;const _=new ResizeObserver(()=>{!m&&g.offsetWidth>0&&g.offsetHeight>0&&(m=!0,_.disconnect(),p())});_.observe(g),setTimeout(()=>{m||(m=!0,_.disconnect(),p())},50);return}setTimeout(p,0)})},removePortal:()=>{this.setState({isInsert:!1,isPositionUpdated:!1})},getEventName:()=>({mouseEnter:"onMouseEnter",mouseLeave:"onMouseLeave",mouseOut:"onMouseOut",mouseOver:"onMouseOver",click:"onClick",focus:"onFocus",blur:"onBlur",keydown:"onKeyDown",contextMenu:"onContextMenu"}),registerTriggerEvent:r=>{this.setState({triggerEventSet:r})},registerPortalEvent:r=>{this.setState({portalEventSet:r})},getTriggerBounding:()=>{const r=this.adapter.getTriggerNode();return this.triggerEl.current=r,r&&r.getBoundingClientRect()},getPopupContainerRect:()=>{const r=this.getPopupContainer();let o=null;if(r&&Ni(r)){const l=PC(r.getBoundingClientRect());o=Object.assign(Object.assign({},l),{scrollLeft:r.scrollLeft,scrollTop:r.scrollTop})}return o},containerIsBody:()=>this.getPopupContainer()===document.body,containerIsRelative:()=>{const r=this.getPopupContainer();return window.getComputedStyle(r).getPropertyValue("position")==="relative"},containerIsRelativeOrAbsolute:()=>["relative","absolute"].includes(this.containerPosition),getWrapperBounding:()=>{const r=this.containerEl&&this.containerEl.current;return r&&r.getBoundingClientRect()},getDocumentElementBounding:()=>document.documentElement.getBoundingClientRect(),setPosition:r=>{var{position:o}=r,l=Wy(r,["position"]);this.setState({containerStyle:Object.assign(Object.assign({},this.state.containerStyle),l),placement:o,isPositionUpdated:!0},()=>{this.eventManager.emit("positionUpdated")})},setDisplayNone:(r,o)=>{this.setState({displayNone:r},o)},updatePlacementAttr:r=>{this.setState({placement:r})},togglePortalVisible:(r,o)=>{const l={};l.transitionState=r?"enter":"leave",l.visible=r,this.cachedLatestTransitionState=l.transitionState,this.mounted&&this.setState(l,()=>{o()})},registerClickOutsideHandler:r=>{this.clickOutsideHandler&&this.adapter.unregisterClickOutsideHandler(),this.clickOutsideHandler=o=>{var l;if(!this.mounted)return!1;let f=this.triggerEl&&this.triggerEl.current,d=this.containerEl&&this.containerEl.current;f=(l=ji(f))!==null&&l!==void 0?l:f;const p=o.target,g=o.composedPath&&o.composedPath()||[p],m=this.props.clickTriggerToHide?f&&f.contains(p)||g.includes(f):!1;(f&&!f.contains(p)&&d&&!d.contains(p)&&!(g.includes(d)||g.includes(f))||m)&&(this.props.onClickOutSide(o),r())},window.addEventListener("mousedown",this.clickOutsideHandler)},unregisterClickOutsideHandler:()=>{this.clickOutsideHandler&&(window.removeEventListener("mousedown",this.clickOutsideHandler),this.clickOutsideHandler=null)},registerResizeHandler:r=>{this.resizeHandler&&this.adapter.unregisterResizeHandler(),this.resizeHandler=hm(o=>{if(!this.mounted)return!1;r(o)},10),window.addEventListener("resize",this.resizeHandler,!1)},unregisterResizeHandler:()=>{this.resizeHandler&&(window.removeEventListener("resize",this.resizeHandler,!1),this.resizeHandler=null)},notifyVisibleChange:r=>{this.props.onVisibleChange(r)},registerScrollHandler:r=>{this.scrollHandler&&this.adapter.unregisterScrollHandler(),this.scrollHandler=hm(o=>{if(!this.mounted)return!1;const l=this.adapter.getTriggerNode();if(o.target.contains(l)){const d={x:o.target.scrollLeft,y:o.target.scrollTop};r(d)}},10),window.addEventListener("scroll",this.scrollHandler,!0)},unregisterScrollHandler:()=>{this.scrollHandler&&(window.removeEventListener("scroll",this.scrollHandler,!0),this.scrollHandler=null)},canMotion:()=>!!this.props.motion,updateContainerPosition:()=>{const r=document.body.getAttribute("data-position");if(r){this.containerPosition=r;return}requestAnimationFrame(()=>{const o=this.getPopupContainer();if(o&&Ni(o)){const f=window.getComputedStyle(o).getPropertyValue("position");document.body.setAttribute("data-position",f),this.containerPosition=f}})},getContainerPosition:()=>this.containerPosition,getContainer:()=>this.containerEl&&this.containerEl.current,getTriggerNode:()=>{let r=this.triggerEl.current;if(!Ni(r)){const o=ji(r);if(o)r=o;else return r&&Fi(!0,"[Semi Tooltip] The trigger element's ref did not return a DOM node. Please ensure the trigger component forwards ref correctly."),null}return r},getFocusableElements:r=>zC(r),getActiveElement:()=>qC(),setInitialFocus:()=>{const{preventScroll:r}=this.props,o=Te(this,"initialFocusRef.current");o&&"focus"in o&&o.focus({preventScroll:r})},notifyEscKeydown:r=>{this.props.onEscKeyDown(r)},setId:()=>{this.setState({id:vd()})},getTriggerDOM:()=>this.triggerEl.current?ji(this.triggerEl.current):null})}componentDidMount(){this.mounted=!0,this.getPopupContainer=this.props.getPopupContainer||this.context.getPopupContainer||iT,this.foundation.init(),yd(()=>{let i=this.triggerEl.current;i&&!(i instanceof HTMLElement)&&(i=ji(i)),this.foundation.updateStateIfCursorOnTrigger(i)},1)}componentWillUnmount(){this.mounted=!1,this.foundation.destroy()}focusTrigger(){this.foundation.focusTrigger()}rePosition(){return this.foundation.calcPosition()}componentDidUpdate(i,r){Fi(this.props.mouseLeaveDelay{const{tooltipRef:A}=g.props;A?this.triggerEl.current=A.current:this.triggerEl.current=x;const k=L1(g);typeof k=="function"?k(x):k&&typeof k=="object"&&(k.current=x)},tabIndex:g.props.tabIndex||0,"data-popupid":l}));return I.createElement(I.Fragment,null,i?this.renderPortal():null,b)}}zn.contextType=xa;zn.propTypes={children:v.node,motion:v.bool,autoAdjustOverflow:v.bool,position:v.oneOf(tT),getPopupContainer:v.func,mouseEnterDelay:v.number,mouseLeaveDelay:v.number,trigger:v.oneOf(nT).isRequired,className:v.string,wrapperClassName:v.string,clickToHide:v.bool,clickTriggerToHide:v.bool,visible:v.bool,style:v.object,content:v.oneOfType([v.node,v.func]),prefixCls:v.string,onVisibleChange:v.func,onClickOutSide:v.func,spacing:v.oneOfType([v.number,v.object]),margin:v.oneOfType([v.number,v.object]),showArrow:v.oneOfType([v.bool,v.node]),zIndex:v.number,rePosKey:v.oneOfType([v.string,v.number]),arrowBounding:eT,transformFromCenter:v.bool,arrowPointAtCenter:v.bool,stopPropagation:v.bool,role:v.string,wrapWhenSpecial:v.bool,guardFocus:v.bool,returnFocusOnClose:v.bool,preventScroll:v.bool,keepDOM:v.bool,condition:v.bool};zn.__SemiComponentName__="Tooltip";zn.defaultProps=ba(zn.__SemiComponentName__,{arrowBounding:ar.ARROW_BOUNDING,autoAdjustOverflow:!0,arrowPointAtCenter:!0,trigger:"hover",transformFromCenter:!0,position:"top",prefixCls:la,role:"tooltip",mouseEnterDelay:ar.MOUSE_ENTER_DELAY,mouseLeaveDelay:ar.MOUSE_LEAVE_DELAY,motion:!0,onVisibleChange:Ze,onClickOutSide:Ze,spacing:ar.SPACING,margin:ar.MARGIN,showArrow:!0,wrapWhenSpecial:!0,zIndex:ar.DEFAULT_Z_INDEX,closeOnEsc:!1,guardFocus:!1,returnFocusOnClose:!1,onEscKeyDown:Ze,disableFocusListener:!1,disableArrowKeyDown:!1,keepDOM:!1,condition:!0});var aa={exports:{}},Vy;function oT(){if(Vy)return aa.exports;Vy=1;const s=(i,{target:r=document.body}={})=>{const o=document.createElement("textarea"),l=document.activeElement;o.value=i,o.setAttribute("readonly",""),o.style.contain="strict",o.style.position="absolute",o.style.left="-9999px",o.style.fontSize="12pt";const f=document.getSelection();let d=!1;f.rangeCount>0&&(d=f.getRangeAt(0)),r.append(o),o.select(),o.selectionStart=0,o.selectionEnd=i.length;let p=!1;try{p=document.execCommand("copy")}catch{}return o.remove(),d&&(f.removeAllRanges(),f.addRange(d)),l&&l.focus(),p};return aa.exports=s,aa.exports.default=s,aa.exports}var aT=oT();const sT=He(aT);function q1(){}const z1=I.createContext(null);function Dr(s){return function(){var i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=i.width?String(i.width):s.defaultWidth,o=s.formats[r]||s.formats[s.defaultWidth];return o}}function tn(s){return function(i,r){var o=r!=null&&r.context?String(r.context):"standalone",l;if(o==="formatting"&&s.formattingValues){var f=s.defaultFormattingWidth||s.defaultWidth,d=r!=null&&r.width?String(r.width):f;l=s.formattingValues[d]||s.formattingValues[f]}else{var p=s.defaultWidth,g=r!=null&&r.width?String(r.width):s.defaultWidth;l=s.values[g]||s.values[p]}var m=s.argumentCallback?s.argumentCallback(i):i;return l[m]}}function nn(s){return function(i){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=r.width,l=o&&s.matchPatterns[o]||s.matchPatterns[s.defaultMatchWidth],f=i.match(l);if(!f)return null;var d=f[0],p=o&&s.parsePatterns[o]||s.parsePatterns[s.defaultParseWidth],g=Array.isArray(p)?uT(p,function(C){return C.test(d)}):lT(p,function(C){return C.test(d)}),m;m=s.valueCallback?s.valueCallback(g):g,m=r.valueCallback?r.valueCallback(m):m;var _=i.slice(d.length);return{value:m,rest:_}}}function lT(s,i){for(var r in s)if(s.hasOwnProperty(r)&&i(s[r]))return r}function uT(s,i){for(var r=0;r1&&arguments[1]!==void 0?arguments[1]:{},o=i.match(s.matchPattern);if(!o)return null;var l=o[0],f=i.match(s.parsePattern);if(!f)return null;var d=s.valueCallback?s.valueCallback(f[0]):f[0];d=r.valueCallback?r.valueCallback(d):d;var p=i.slice(l.length);return{value:d,rest:p}}}function Jf(s){"@babel/helpers - typeof";return Jf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(i){return typeof i}:function(i){return i&&typeof Symbol=="function"&&i.constructor===Symbol&&i!==Symbol.prototype?"symbol":typeof i},Jf(s)}function cT(s){if(s===null||s===!0||s===!1)return NaN;var i=Number(s);return isNaN(i)?i:i<0?Math.ceil(i):Math.floor(i)}function wd(s,i){if(i.length1?"s":"")+" required, but only "+i.length+" present")}function fT(s){wd(1,arguments);var i=Object.prototype.toString.call(s);return s instanceof Date||Jf(s)==="object"&&i==="[object Date]"?new Date(s.getTime()):typeof s=="number"||i==="[object Number]"?new Date(s):((typeof s=="string"||i==="[object String]")&&typeof console<"u"&&(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments"),console.warn(new Error().stack)),new Date(NaN))}var dT={};function pT(){return dT}function Ky(s,i){var r,o,l,f,d,p,g,m;wd(1,arguments);var _=pT(),C=cT((r=(o=(l=(f=i==null?void 0:i.weekStartsOn)!==null&&f!==void 0?f:i==null||(d=i.locale)===null||d===void 0||(p=d.options)===null||p===void 0?void 0:p.weekStartsOn)!==null&&l!==void 0?l:_.weekStartsOn)!==null&&o!==void 0?o:(g=_.locale)===null||g===void 0||(m=g.options)===null||m===void 0?void 0:m.weekStartsOn)!==null&&r!==void 0?r:0);if(!(C>=0&&C<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var b=fT(s),x=b.getUTCDay(),A=(x0?"in "+l:l+" ago":l},mT={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},vT={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},yT={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},_T={date:Dr({formats:mT,defaultWidth:"full"}),time:Dr({formats:vT,defaultWidth:"full"}),dateTime:Dr({formats:yT,defaultWidth:"full"})},wT={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},ST=function(i,r,o,l){return wT[i]},CT={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},TT={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},ET={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},OT={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},PT={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},bT={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},xT=function(i,r){var o=Number(i),l=o%100;if(l>20||l<10)switch(l%10){case 1:return o+"st";case 2:return o+"nd";case 3:return o+"rd"}return o+"th"},RT={ordinalNumber:xT,era:tn({values:CT,defaultWidth:"wide"}),quarter:tn({values:TT,defaultWidth:"wide",argumentCallback:function(i){return i-1}}),month:tn({values:ET,defaultWidth:"wide"}),day:tn({values:OT,defaultWidth:"wide"}),dayPeriod:tn({values:PT,defaultWidth:"wide",formattingValues:bT,defaultFormattingWidth:"wide"})},kT=/^(\d+)(th|st|nd|rd)?/i,IT=/\d+/i,AT={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},NT={any:[/^b/i,/^(a|c)/i]},jT={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},MT={any:[/1/i,/2/i,/3/i,/4/i]},DT={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},LT={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},FT={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},qT={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},zT={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},$T={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},BT={ordinalNumber:$1({matchPattern:kT,parsePattern:IT,valueCallback:function(i){return parseInt(i,10)}}),era:nn({matchPatterns:AT,defaultMatchWidth:"wide",parsePatterns:NT,defaultParseWidth:"any"}),quarter:nn({matchPatterns:jT,defaultMatchWidth:"wide",parsePatterns:MT,defaultParseWidth:"any",valueCallback:function(i){return i+1}}),month:nn({matchPatterns:DT,defaultMatchWidth:"wide",parsePatterns:LT,defaultParseWidth:"any"}),day:nn({matchPatterns:FT,defaultMatchWidth:"wide",parsePatterns:qT,defaultParseWidth:"any"}),dayPeriod:nn({matchPatterns:zT,defaultMatchWidth:"any",parsePatterns:$T,defaultParseWidth:"any"})},HT={code:"en-US",formatDistance:gT,formatLong:_T,formatRelative:ST,localize:RT,match:BT,options:{weekStartsOn:0,firstWeekContainsDate:1}};function UT(s,i,r){wd(2,arguments);var o=Ky(s,r),l=Ky(i,r);return o.getTime()===l.getTime()}var WT={lessThanXSeconds:{one:"不到 1 秒",other:"不到 {{count}} 秒"},xSeconds:{one:"1 秒",other:"{{count}} 秒"},halfAMinute:"半分钟",lessThanXMinutes:{one:"不到 1 分钟",other:"不到 {{count}} 分钟"},xMinutes:{one:"1 分钟",other:"{{count}} 分钟"},xHours:{one:"1 小时",other:"{{count}} 小时"},aboutXHours:{one:"大约 1 小时",other:"大约 {{count}} 小时"},xDays:{one:"1 天",other:"{{count}} 天"},aboutXWeeks:{one:"大约 1 个星期",other:"大约 {{count}} 个星期"},xWeeks:{one:"1 个星期",other:"{{count}} 个星期"},aboutXMonths:{one:"大约 1 个月",other:"大约 {{count}} 个月"},xMonths:{one:"1 个月",other:"{{count}} 个月"},aboutXYears:{one:"大约 1 年",other:"大约 {{count}} 年"},xYears:{one:"1 年",other:"{{count}} 年"},overXYears:{one:"超过 1 年",other:"超过 {{count}} 年"},almostXYears:{one:"将近 1 年",other:"将近 {{count}} 年"}},VT=function(i,r,o){var l,f=WT[i];return typeof f=="string"?l=f:r===1?l=f.one:l=f.other.replace("{{count}}",String(r)),o!=null&&o.addSuffix?o.comparison&&o.comparison>0?l+"内":l+"前":l},KT={full:"y'年'M'月'd'日' EEEE",long:"y'年'M'月'd'日'",medium:"yyyy-MM-dd",short:"yy-MM-dd"},GT={full:"zzzz a h:mm:ss",long:"z a h:mm:ss",medium:"a h:mm:ss",short:"a h:mm"},XT={full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},QT={date:Dr({formats:KT,defaultWidth:"full"}),time:Dr({formats:GT,defaultWidth:"full"}),dateTime:Dr({formats:XT,defaultWidth:"full"})};function Gy(s,i,r){var o="eeee p";return UT(s,i,r)?o:s.getTime()>i.getTime()?"'下个'"+o:"'上个'"+o}var YT={lastWeek:Gy,yesterday:"'昨天' p",today:"'今天' p",tomorrow:"'明天' p",nextWeek:Gy,other:"PP p"},ZT=function(i,r,o,l){var f=YT[i];return typeof f=="function"?f(r,o,l):f},JT={narrow:["前","公元"],abbreviated:["前","公元"],wide:["公元前","公元"]},eE={narrow:["1","2","3","4"],abbreviated:["第一季","第二季","第三季","第四季"],wide:["第一季度","第二季度","第三季度","第四季度"]},tE={narrow:["一","二","三","四","五","六","七","八","九","十","十一","十二"],abbreviated:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],wide:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},nE={narrow:["日","一","二","三","四","五","六"],short:["日","一","二","三","四","五","六"],abbreviated:["周日","周一","周二","周三","周四","周五","周六"],wide:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},rE={narrow:{am:"上",pm:"下",midnight:"凌晨",noon:"午",morning:"早",afternoon:"下午",evening:"晚",night:"夜"},abbreviated:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"},wide:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"}},iE={narrow:{am:"上",pm:"下",midnight:"凌晨",noon:"午",morning:"早",afternoon:"下午",evening:"晚",night:"夜"},abbreviated:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"},wide:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"}},oE=function(i,r){var o=Number(i);switch(r==null?void 0:r.unit){case"date":return o.toString()+"日";case"hour":return o.toString()+"时";case"minute":return o.toString()+"分";case"second":return o.toString()+"秒";default:return"第 "+o.toString()}},aE={ordinalNumber:oE,era:tn({values:JT,defaultWidth:"wide"}),quarter:tn({values:eE,defaultWidth:"wide",argumentCallback:function(i){return i-1}}),month:tn({values:tE,defaultWidth:"wide"}),day:tn({values:nE,defaultWidth:"wide"}),dayPeriod:tn({values:rE,defaultWidth:"wide",formattingValues:iE,defaultFormattingWidth:"wide"})},sE=/^(第\s*)?\d+(日|时|分|秒)?/i,lE=/\d+/i,uE={narrow:/^(前)/i,abbreviated:/^(前)/i,wide:/^(公元前|公元)/i},cE={any:[/^(前)/i,/^(公元)/i]},fE={narrow:/^[1234]/i,abbreviated:/^第[一二三四]刻/i,wide:/^第[一二三四]刻钟/i},dE={any:[/(1|一)/i,/(2|二)/i,/(3|三)/i,/(4|四)/i]},pE={narrow:/^(一|二|三|四|五|六|七|八|九|十[二一])/i,abbreviated:/^(一|二|三|四|五|六|七|八|九|十[二一]|\d|1[12])月/i,wide:/^(一|二|三|四|五|六|七|八|九|十[二一])月/i},hE={narrow:[/^一/i,/^二/i,/^三/i,/^四/i,/^五/i,/^六/i,/^七/i,/^八/i,/^九/i,/^十(?!(一|二))/i,/^十一/i,/^十二/i],any:[/^一|1/i,/^二|2/i,/^三|3/i,/^四|4/i,/^五|5/i,/^六|6/i,/^七|7/i,/^八|8/i,/^九|9/i,/^十(?!(一|二))|10/i,/^十一|11/i,/^十二|12/i]},gE={narrow:/^[一二三四五六日]/i,short:/^[一二三四五六日]/i,abbreviated:/^周[一二三四五六日]/i,wide:/^星期[一二三四五六日]/i},mE={any:[/日/i,/一/i,/二/i,/三/i,/四/i,/五/i,/六/i]},vE={any:/^(上午?|下午?|午夜|[中正]午|早上?|下午|晚上?|凌晨|)/i},yE={any:{am:/^上午?/i,pm:/^下午?/i,midnight:/^午夜/i,noon:/^[中正]午/i,morning:/^早上/i,afternoon:/^下午/i,evening:/^晚上?/i,night:/^凌晨/i}},_E={ordinalNumber:$1({matchPattern:sE,parsePattern:lE,valueCallback:function(i){return parseInt(i,10)}}),era:nn({matchPatterns:uE,defaultMatchWidth:"wide",parsePatterns:cE,defaultParseWidth:"any"}),quarter:nn({matchPatterns:fE,defaultMatchWidth:"wide",parsePatterns:dE,defaultParseWidth:"any",valueCallback:function(i){return i+1}}),month:nn({matchPatterns:pE,defaultMatchWidth:"wide",parsePatterns:hE,defaultParseWidth:"any"}),day:nn({matchPatterns:gE,defaultMatchWidth:"wide",parsePatterns:mE,defaultParseWidth:"any"}),dayPeriod:nn({matchPatterns:vE,defaultMatchWidth:"any",parsePatterns:yE,defaultParseWidth:"any"})},wE={code:"zh-CN",formatDistance:VT,formatLong:QT,formatRelative:ZT,localize:aE,match:_E,options:{weekStartsOn:1,firstWeekContainsDate:4}};const ed={code:"zh-CN",currency:"CNY",dateFnsLocale:wE,Pagination:{pageSize:"每页条数:${pageSize}",total:"总页数:${total}",jumpTo:"跳至",page:"页"},Modal:{confirm:"确定",cancel:"取消"},Tabs:{more:"更多"},TimePicker:{placeholder:{time:"请选择时间",timeRange:"请选择时间范围"},begin:"开始时间",end:"结束时间",hour:"时",minute:"分",second:"秒",AM:"上午",PM:"下午"},DatePicker:{placeholder:{date:"请选择日期",dateTime:"请选择日期及时间",dateRange:["开始日期","结束日期"],dateTimeRange:["开始日期","结束日期"],monthRange:["开始月份","结束月份"]},presets:"快捷选择",footer:{confirm:"确定",cancel:"取消"},selectDate:"返回选择日期",selectTime:"选择时间",year:"年",month:"月",day:"日",monthText:"${year}年 ${month}",months:{1:"1月",2:"2月",3:"3月",4:"4月",5:"5月",6:"6月",7:"7月",8:"8月",9:"9月",10:"10月",11:"11月",12:"12月"},fullMonths:{1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12"},weeks:{Mon:"一",Tue:"二",Wed:"三",Thu:"四",Fri:"五",Sat:"六",Sun:"日"},localeFormatToken:{FORMAT_SWITCH_DATE:"yyyy-MM-dd"}},Navigation:{collapseText:"收起侧边栏",expandText:"展开侧边栏"},Popconfirm:{confirm:"确定",cancel:"取消"},Table:{emptyText:"暂无数据",pageText:"显示第 ${currentStart} 条-第 ${currentEnd} 条,共 ${total} 条",descend:"点击降序",ascend:"点击升序",cancelSort:"取消排序",confirmFilter:"确定",resetFilter:"重置"},Select:{emptyText:"暂无数据",createText:"创建"},Cascader:{emptyText:"暂无数据"},Tree:{emptyText:"暂无数据",searchPlaceholder:"搜索"},List:{emptyText:"暂无数据"},Calendar:{allDay:"全天",AM:"上午${time}时",PM:"下午${time}时",datestring:"日",remaining:"还有${remained}项"},Upload:{mainText:"点击上传文件或拖拽文件到这里",illegalTips:"不支持此类型文件",legalTips:"松手开始上传",retry:"重试",replace:"替换文件",clear:"清空",selectedFiles:"已选择文件",illegalSize:"文件尺寸不合法",fail:"上传失败",cropTitle:"裁切图片",cropOk:"确定",cropCancel:"取消"},TreeSelect:{searchPlaceholder:"搜索"},Typography:{copy:"复制",copied:"复制成功",expand:"展开",collapse:"收起"},Transfer:{emptyLeft:"暂无数据",emptySearch:"无搜索结果",emptyRight:"暂无内容,可从左侧勾选",placeholder:"搜索",clear:"清空",selectAll:"全选",clearSelectAll:"取消全选",total:"总个数:${total}",selected:"已选个数:${total}"},Form:{optional:"(可选)"},Image:{preview:"预览",loading:"加载中",loadError:"加载失败",prevTip:"上一张",nextTip:"下一张",zoomInTip:"放大",zoomOutTip:"缩小",rotateTip:"旋转",downloadTip:"下载",adaptiveTip:"适应页面",originTip:"原始尺寸"},Chat:{deleteConfirm:"确认删除该会话吗?",clearContext:"上下文已清除",copySuccess:"复制成功",stop:"停止",copy:"复制",copied:"复制成功",dropAreaText:"将文件放到这里"},UserGuide:{skip:"跳过",next:"下一步",prev:"上一步",finish:"完成"},InputNumber:{},JsonViewer:{search:"查找",replace:"替换",replaceAll:"全部替换"},VideoPlayer:{rateChange:"切换速率至 ${rate}",qualityChange:"切换清晰度至${quality}",routeChange:"切换线路至${route}",mirror:"镜像",cancelMirror:"取消镜像",loading:"加载中...",stall:"加载失败",noResource:"暂无资源",videoError:"视频加载错误"},AIChatDialogue:{delete:"删除",deleteConfirm:"确认要删除吗?",deleteContent:"删除后将无法恢复!",copySuccess:"复制成功",loading:"请稍候...",reasoning:{completed:"已思考完成",thinking:"正在思考中..."},annotationText:"篇资料"},Feedback:{submit:"提交",cancel:"取消"},AIChatInput:{template:"模板",configure:"配置",selected:"已选 ${count} 个"},Sidebar:{linkAddSuccess:"已添加链接",linkRemoveSuccess:"已移除链接",enterLinkAddress:"输入链接地址",validateFailInfo:"验证失败,请重新上传",uploadFailInfo:"上传失败,请重试",uploadImgInfo:"点击上传图片或者拖拽图片到这里",defaultMcpInfo:"预设 MCP,不可关闭",searchPlaceholder:"请输入",emptyCustomMcpInfo:"暂无自定义 MCP",newMcpAdd:"自定义 MCP",mcpConfigure:"MCP 配置",annotationTitle:"参考来源",activeMCPNumber:"已激活 MCP 数:",copySuccess:"复制成功"},AudioPlayer:{backward:"后退 ${skipDuration} 秒",forward:"前进 ${skipDuration} 秒",prev:"上一首",next:"下一首",loop:"循环播放",volume:"音量",mediaError:"音频加载失败"}};class qi extends Ee.Component{renderChildren(i,r){const{componentName:o}=this.props;let l=i;i!=null&&i.code||(l=ed);const f=Te(ed,"dateFnsLocale"),d=Te(l,"dateFnsLocale",f),p=Te(l,"currency");return r(l[o],l.code,d,p)}render(){const{children:i}=this.props;return I.createElement(xa.Consumer,null,r=>{let{locale:o}=r;return I.createElement(z1.Consumer,null,l=>this.renderChildren(o||l,i))})}}qi.propTypes={componentName:v.string.isRequired,children:v.any};qi.defaultProps={componentName:""};const SE="semi";var CE=function(s,i){var r={};for(var o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.indexOf(o)<0&&(r[o]=s[o]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,o=Object.getOwnPropertySymbols(s);l{const{svg:r,spin:o=!1,rotate:l,style:f,className:d,prefixCls:p=SE,type:g,size:m="default",fill:_}=s,C=CE(s,["svg","spin","rotate","style","className","prefixCls","type","size","fill"]),b=Le(`${p}-icon`,{[`${p}-icon-extra-small`]:m==="extra-small",[`${p}-icon-small`]:m==="small",[`${p}-icon-default`]:m==="default",[`${p}-icon-large`]:m==="large",[`${p}-icon-extra-large`]:m==="extra-large",[`${p}-icon-spinning`]:o===!0,[`${p}-icon-${g}`]:!!g},d),x={};return Number.isSafeInteger(l)&&(x.transform=`rotate(${l}deg)`),Object.assign(x,f),I.createElement("span",Object.assign({role:"img",ref:i,"aria-label":g,className:b,style:x},C),_?I.cloneElement(r,{fill:_}):r)});B1.elementType="Icon";const Ur=(s,i)=>{const r=I.forwardRef((o,l)=>I.createElement(B1,Object.assign({svg:I.createElement(s),type:i,ref:l},o)));return r.elementType="Icon",r};function TE(s){return Ee.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},s),Ee.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M23 12a11 11 0 1 1-22 0 11 11 0 0 1 22 0Zm-9.5 5.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0ZM12 5a1.9 1.9 0 0 0-1.89 2l.3 5.5a1.59 1.59 0 0 0 3.17 0l.3-5.5c.07-1.09-.8-2-1.88-2Z",fill:"currentColor"}))}const bO=Ur(TE,"alert_circle");function EE(s){return Ee.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},s),Ee.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.08 7.6a1.5 1.5 0 0 1 2.12 0l5.66 5.65 5.66-5.65a1.5 1.5 0 1 1 2.12 2.12l-6.72 6.72a1.5 1.5 0 0 1-2.12 0L4.08 9.72a1.5 1.5 0 0 1 0-2.12Z",fill:"currentColor"}))}const OE=Ur(EE,"chevron_down");function PE(s){return Ee.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},s),Ee.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M19.64 16.44a1.5 1.5 0 0 1-2.12 0l-5.66-5.66-5.66 5.66a1.5 1.5 0 1 1-2.12-2.12L10.8 7.6a1.5 1.5 0 0 1 2.12 0l6.72 6.72a1.5 1.5 0 0 1 0 2.12Z",fill:"currentColor"}))}const bE=Ur(PE,"chevron_up");function xE(s){return Ee.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},s),Ee.createElement("path",{d:"M7 4c0-1.1.9-2 2-2h11a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2h-1V8c0-2-1-3-3-3H7V4Z",fill:"currentColor"}),Ee.createElement("path",{d:"M5 7a2 2 0 0 0-2 2v10c0 1.1.9 2 2 2h10a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2H5Z",fill:"currentColor"}))}const RE=Ur(xE,"copy");function kE(s){return Ee.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},s),Ee.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M21.35 4.27c.68.47.86 1.4.38 2.08l-10 14.5a1.5 1.5 0 0 1-2.33.17l-6.5-7a1.5 1.5 0 0 1 2.2-2.04l5.23 5.63 8.94-12.96a1.5 1.5 0 0 1 2.08-.38Z",fill:"currentColor"}))}const IE=Ur(kE,"tick");function AE(s){return Ee.createElement("svg",Object.assign({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",focusable:!1,"aria-hidden":!0},s),Ee.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm5.88-13.18-6.2 7.6a1.5 1.5 0 0 1-2.37 0l-3.5-4a1.5 1.5 0 1 1 2.37-1.84l2.3 2.46L15.5 8a1.5 1.5 0 1 1 2.38 1.82Z",fill:"currentColor"}))}const xO=Ur(AE,"tick_circle"),RO={BACKSPACE:8,TAB:9,ENTER:13,ESC:27,UP:38,DOWN:40},NE="Enter";function H1(s){return Te(s,"key")===NE}const Bf=Ea.PREFIX;class Sd extends I.PureComponent{constructor(i){super(i),this.copy=r=>{const{content:o,duration:l,onCopy:f}=this.props,d=sT(o);f&&f(r,o,d),this.setCopied(o,l)},this.setCopied=(r,o)=>{this.setState({copied:!0,item:r}),this._timeId=setTimeout(()=>{this.resetCopied()},o*1e3)},this.resetCopied=()=>{this._timeId&&(clearTimeout(this._timeId),this._timeId=null,this.setState({copied:!1,item:""}))},this.renderSuccessTip=()=>{const{successTip:r}=this.props;return typeof r<"u"?r:I.createElement(qi,{componentName:"Typography"},o=>I.createElement("span",null,I.createElement(IE,null),o.copied))},this.renderCopyIcon=()=>{const{icon:r}=this.props,o={role:"button",tabIndex:0,onClick:this.copy,onKeyPress:f=>H1(f)&&this.copy(f)},l=I.createElement("a",{className:`${Bf}-action-copy-icon`},I.createElement(RE,Object.assign({onClick:this.copy},o)));return I.isValidElement(r)?I.cloneElement(r,o):l},this.state={copied:!1,item:""}}componentWillUnmount(){this._timeId&&(clearTimeout(this._timeId),this._timeId=null)}render(){const{style:i,className:r,forwardRef:o,copyTip:l,render:f}=this.props,{copied:d}=this.state,p=Le(r,{[`${Bf}-action-copy`]:!d,[`${Bf}-action-copied`]:d});return f?f(d,this.copy,this.props):I.createElement(qi,{componentName:"Typography"},g=>I.createElement("span",{style:Object.assign({marginLeft:"4px"},i),className:p,ref:o},d?this.renderSuccessTip():I.createElement(zn,{content:typeof l<"u"?l:g.copy},this.renderCopyIcon())))}}Sd.propTypes={content:v.string,onCopy:v.func,successTip:v.node,copyTip:v.node,duration:v.number,style:v.object,className:v.string,icon:v.node};Sd.defaultProps={content:"",onCopy:q1,duration:3,style:{},className:""};const U1={PREFIX:`${qn}-popover`,ARROW:`${qn}-popover-icon-arrow`},W1={POSITION_SET:["top","topLeft","topRight","left","leftTop","leftBottom","right","rightTop","rightBottom","bottom","bottomLeft","bottomRight","leftTopOver","rightTopOver"],TRIGGER_SET:["hover","focus","click","custom","contextMenu"]},Lr={ARROW_BOUNDING:Object.assign(Object.assign({},ar.ARROW_BOUNDING),{offsetY:6,offsetX:0,height:8}),SPACING:4,SPACING_WITH_ARROW:10,DEFAULT_Z_INDEX:1030};var jE=function(s,i){var r={};for(var o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.indexOf(o)<0&&(r[o]=s[o]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,o=Object.getOwnPropertySymbols(s);l0&&arguments[0]!==void 0?arguments[0]:{};const{position:i="",className:r,arrowStyle:o,popStyle:l}=s,f=jE(s,["position","className","arrowStyle","popStyle"]),d=i.indexOf("top")===0||i.indexOf("bottom")===0,p=Le(r,U1.ARROW),g=Te(o,"borderOpacity"),m=Te(o,"backgroundColor",Te(l,"backgroundColor")),_=Te(o,"borderColor",Te(l,"borderColor")),C=Object.assign(Object.assign({},f),{width:Lr.ARROW_BOUNDING.width,height:Lr.ARROW_BOUNDING.height,xmlns:"http://www.w3.org/2000/svg",className:p});return d?I.createElement("svg",Object.assign({},C),I.createElement("path",{d:"M0 0.5L0 1.5C4 1.5, 5.5 3, 7.5 5S10,8 12,8S14.5 7, 16.5 5S20,1.5 24,1.5L24 0.5L0 0.5z",style:{fill:_,opacity:g}}),I.createElement("path",{d:"M0 0L0 1C4 1, 5.5 2, 7.5 4S10,7 12,7S14.5 6, 16.5 4S20,1 24,1L24 0L0 0z",style:{fill:m}})):I.createElement("svg",Object.assign({},C),I.createElement("path",{d:"M0.5 0L1.5 0C1.5 4, 3 5.5, 5 7.5S8,10 8,12S7 14.5, 5 16.5S1.5,20 1.5,24L0.5 24L0.5 0z",style:{fill:_,opacity:g}}),I.createElement("path",{d:"M0 0L1 0C1 4, 2 5.5, 4 7.5S7,10 7,12S6 14.5, 4 16.5S1,20 1,24L0 24L0 0z",style:{fill:m}}))};var DE=function(s,i){var r={};for(var o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.indexOf(o)<0&&(r[o]=s[o]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,o=Object.getOwnPropertySymbols(s);l{var r;(r=this.tooltipRef.current)===null||r===void 0||r.focusTrigger()},this.renderPopCard=r=>{let{initialFocusRef:o}=r;const{content:l,contentClassName:f,prefixCls:d}=this.props,{direction:p}=this.context,g=Le(d,f,{[`${d}-rtl`]:p==="rtl"}),m=this.renderContentNode({initialFocusRef:o,content:l});return I.createElement("div",{className:g},I.createElement("div",{className:`${d}-content`},m))},this.renderContentNode=r=>{const{initialFocusRef:o,content:l}=r,f={initialFocusRef:o};return md(l)?l(f):l},this.tooltipRef=I.createRef()}render(){const i=this.props,{children:r,prefixCls:o,showArrow:l,arrowStyle:f={},arrowBounding:d,position:p,style:g,trigger:m}=i,_=DE(i,["children","prefixCls","showArrow","arrowStyle","arrowBounding","position","style","trigger"]);let{spacing:C}=this.props;const b={position:p,className:"",popStyle:g,arrowStyle:f},x=l?I.createElement(ME,Object.assign({},b)):!1;ca(C)&&(C=l?Lr.SPACING_WITH_ARROW:Lr.SPACING);const A=m==="click"||m==="custom"?"dialog":"tooltip";return I.createElement(zn,Object.assign({guardFocus:!0,ref:this.tooltipRef},_,{trigger:m,position:p,style:g,content:this.renderPopCard,prefixCls:o,spacing:C,showArrow:x,arrowBounding:d,role:A}),r)}}Fr.contextType=xa;Fr.propTypes={children:v.node,content:v.oneOfType([v.node,v.func]),visible:v.bool,autoAdjustOverflow:v.bool,motion:v.bool,position:v.oneOf(LE),margin:v.oneOfType([v.number,v.object]),mouseEnterDelay:v.number,mouseLeaveDelay:v.number,trigger:v.oneOf(FE).isRequired,contentClassName:v.oneOfType([v.string,v.array]),onVisibleChange:v.func,onClickOutSide:v.func,style:v.object,spacing:v.oneOfType([v.number,v.object]),zIndex:v.number,showArrow:v.bool,arrowStyle:v.shape({borderColor:v.string,backgroundColor:v.string,borderOpacity:v.oneOfType([v.string,v.number])}),arrowPointAtCenter:v.bool,arrowBounding:v.object,prefixCls:v.string,guardFocus:v.bool,disableArrowKeyDown:v.bool,condition:v.bool};Fr.__SemiComponentName__="Popover";Fr.defaultProps=ba(Fr.__SemiComponentName__,{arrowBounding:Lr.ARROW_BOUNDING,showArrow:!1,autoAdjustOverflow:!0,zIndex:Lr.DEFAULT_Z_INDEX,motion:!0,trigger:"hover",cancelText:"No",okText:"Yes",position:"bottom",prefixCls:U1.PREFIX,onClickOutSide:Ze,onEscKeyDown:Ze,closeOnEsc:!0,returnFocusOnClose:!0,guardFocus:!0,disableFocusListener:!0});let Ae;function Hf(s){if(!s)return 0;const i=s.match(/^\d*(\.\d*)?/);return i?Number(i[0]):0}function qE(s){return Array.prototype.slice.apply(s).map(r=>`${r}: ${s.getPropertyValue(r)};`).join("")}const zE=function(s,i){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"",o=arguments.length>3?arguments[3]:void 0,l=arguments.length>4?arguments[4]:void 0,f=arguments.length>5?arguments[5]:void 0,d=arguments.length>6?arguments[6]:void 0,p=arguments.length>7?arguments[7]:void 0;if(r.length===0)return"";Ae||(Ae=document.createElement("div"),Ae.setAttribute("aria-hidden","true"),document.body.appendChild(Ae));const g=window.getComputedStyle(s),m=qE(g),_=Hf(g.lineHeight),C=Math.round(_*(i+1)+Hf(g.paddingTop)+Hf(g.paddingBottom));Ae.setAttribute("style",m),Ae.style.position="fixed",Ae.style.left="0",g.getPropertyValue("width")==="auto"&&s.offsetWidth&&(Ae.style.width=`${s.offsetWidth}px`),Ae.style.height="auto",Ae.style.top="-999999px",Ae.style.zIndex="-1000",p&&(Ae.style.fontWeight="600"),Ae.style.textOverflow="clip",Ae.style.webkitLineClamp="none",Ae.innerHTML="";function b(){const W=Ae.scrollWidth<=Ae.offsetWidth,$=Ae.scrollHeight0){const W=document.createTextNode(f);x.appendChild(W)}Ae.appendChild(x),Object.values(Ta(o,"expand")).map(W=>W&&Ae.appendChild(W.cloneNode(!0)));function k(){Ae.innerHTML="",Ae.appendChild(x),Object.values(o).map(W=>W&&Ae.appendChild(W.cloneNode(!0)))}function R(W,$){const Y=W.length;return $?d==="end"?W.slice(0,$)+l:W.slice(0,$)+l+W.slice(Y-$,Y):l}function z(W,$){let Y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,M=arguments.length>3&&arguments[3]!==void 0?arguments[3]:$.length,N=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;const U=Math.floor((Y+M)/2),X=R($,U);if(W.textContent=X,Y>=M-1&&M>0)for(let ee=M;ee>=Y;ee-=1){const V=R($,ee);if(W.textContent=V,b())return V}else if(M===0)return l;return b()?z(W,$,U,M,U):z(W,$,Y,U,N)}let H=r;return b()||(k(),H=z(A,r,0,d==="middle"?Math.floor(r.length/2):r.length)),Ae.innerHTML="",H},V1=I.createContext("normal");var fa;(function(s){s.Width="width",s.Height="height",s.All="all"})(fa||(fa={}));class Cd extends $r{constructor(i){var r;super(i),r=this,this.formerPropertyValue=new Map,this.getElement=()=>{try{const o=this.childNode||this;return ji(o)||(o instanceof Element?o:null)}catch{return null}},this.handleResizeEventTriggered=o=>{var l,f,d,p;if(this.props.observerProperty===fa.All)(f=(l=this.props).onResize)===null||f===void 0||f.call(l,o);else{const g=[];for(const m of o)this.formerPropertyValue.has(m.target)?m.contentRect[this.props.observerProperty]!==this.formerPropertyValue.get(m.target)&&(this.formerPropertyValue.set(m.target,m.contentRect[this.props.observerProperty]),g.push(m)):(this.formerPropertyValue.set(m.target,m.contentRect[this.props.observerProperty]),g.push(m));g.length>0&&((p=(d=this.props).onResize)===null||p===void 0||p.call(d,g))}},this.observeElement=function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;const l=r.getElement();if(r.observer||(r.observer=new ResizeObserver(r.handleResizeEventTriggered)),!(l&&l instanceof Element)){r.observer.disconnect();return}l===r.element&&!o||(r.observer.disconnect(),r.element=l,r.observer.observe(l),r.props.observeParent&&l.parentNode&&l.parentNode.ownerDocument&&l.parentNode.ownerDocument.defaultView&&l.parentNode instanceof l.parentNode.ownerDocument.defaultView.HTMLElement&&(r._parentNode=l.parentNode,r.observer.observe(r._parentNode)))},this.mergeRef=(o,l)=>{this.childNode=l,typeof o=="function"?o(l):typeof o=="object"&&o&&"current"in o&&(o.current=l)},globalThis.ResizeObserver&&(this.observer=new ResizeObserver(this.handleResizeEventTriggered))}componentDidMount(){var i;(i=this.observeElement)===null||i===void 0||i.call(this)}componentDidUpdate(i){var r;(r=this.observeElement)===null||r===void 0||r.call(this,this.props.observeParent!==i.observeParent)}componentWillUnmount(){this.observer&&(this.observer.disconnect(),this.observer=null,this.element=null)}render(){const i=I.Children.only(this.props.children),r=L1(i);return I.cloneElement(i,{ref:o=>this.mergeRef(r,o)})}}Cd.propTypes={onResize:v.func,observeParent:v.bool,observerProperty:v.string,delayTick:v.number};Cd.defaultProps={onResize:()=>{},observeParent:!1,observerProperty:"all",delayTick:0};var Uf=function(s,i,r,o){function l(f){return f instanceof r?f:new r(function(d){d(f)})}return new(r||(r=Promise))(function(f,d){function p(_){try{m(o.next(_))}catch(C){d(C)}}function g(_){try{m(o.throw(_))}catch(C){d(C)}}function m(_){_.done?f(_.value):l(_.value).then(p,g)}m((o=o.apply(s,i||[])).next())})},$E=function(s,i){var r={};for(var o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.indexOf(o)<0&&(r[o]=s[o]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,o=Object.getOwnPropertySymbols(s);l{const{mark:r,code:o,underline:l,strong:f,link:d,disabled:p}=s;let g=i;const m=(_,C)=>{let b={};_&&(typeof _=="object"&&(b=Object.assign({},_)),g=I.createElement(C,b,g))};return m(r,"mark"),m(o,"code"),m(l&&!d,"u"),m(f,"strong"),m(s.delete,"del"),m(d,p?"span":"a"),g};class dr extends Ee.Component{constructor(i){super(i),this.observerTakingEffect=!1,this.onResize=r=>Uf(this,void 0,void 0,function*(){return this.rafId&&window.cancelAnimationFrame(this.rafId),new Promise(o=>{this.rafId=window.requestAnimationFrame(()=>Uf(this,void 0,void 0,function*(){yield this.getEllipsisState(),o()}))})}),this.canUseCSSEllipsis=()=>{const{copyable:r}=this.props,{expandable:o,expandText:l,pos:f,suffix:d}=this.getEllipsisOpt();return!o&&ra(l)&&!r&&f==="end"&&!d.length},this.shouldTruncated=r=>!r||r<1?!1:r<=1?this.compareSingleRow():this.wrapperRef.current.scrollHeight>this.wrapperRef.current.offsetHeight,this.compareSingleRow=()=>{if(!(document&&document.createRange))return!1;const r=this.wrapperRef.current,o=r.clientWidth,l=window.getComputedStyle(r),f=parseFloat(l.paddingLeft)||0,d=parseFloat(l.paddingRight)||0,p=Math.max(0,o-f-d),g=Array.from(r.childNodes),m=document.createRange(),_=g.reduce((C,b)=>{var x;return m.selectNodeContents(b),C+((x=m.getBoundingClientRect().width)!==null&&x!==void 0?x:0)},0);return m.detach(),_>p},this.showTooltip=()=>{var r,o;const{isOverflowed:l,isTruncated:f,expanded:d}=this.state,{showTooltip:p,expandable:g,expandText:m}=this.getEllipsisOpt(),_=this.canUseCSSEllipsis(),C=!d&&(_?l:f),x=!g&&ra(m)&&C&&p;if(!x)return x;const A={type:"tooltip"};return typeof p=="object"?p.type&&p.type.toLowerCase()==="popover"?ZS({opts:{showArrow:!0}},p,{opts:{className:Le({[`${Xe}-ellipsis-popover`]:!0,[(r=p==null?void 0:p.opts)===null||r===void 0?void 0:r.className]:!!(!((o=p==null?void 0:p.opts)===null||o===void 0)&&o.className)})}}):Object.assign(Object.assign({},A),p):A},this.onHover=()=>{if(this.canUseCSSEllipsis()){const{rows:o,suffix:l,pos:f}=this.getEllipsisOpt(),d=this.shouldTruncated(o);this.setState({isOverflowed:d,isTruncated:!1});return}},this.getEllipsisState=()=>Uf(this,void 0,void 0,function*(){const{rows:r,suffix:o,pos:l,showTooltip:f}=this.getEllipsisOpt(),{children:d,strong:p}=this.props;if(!this.wrapperRef||!this.wrapperRef.current){yield this.onResize();return}const{expanded:g}=this.state;if(this.canUseCSSEllipsis()){if(f){const x=this.shouldTruncated(r);return new Promise(A=>{this.setState({isOverflowed:x,isTruncated:!1},A)})}return}if(FS(d))return new Promise(x=>{this.setState({isTruncated:!1,isOverflowed:!1},x)});if(Fi("children"in this.props&&typeof d!="string","[Semi Typography] Only children with pure text could be used with ellipsis at this moment."),!r||r<0||g)return;const _={expand:this.expandRef.current,copy:this.copyRef&&this.copyRef.current},C=Array.isArray(d)?d.join(""):String(d),b=zE(this.wrapperRef.current,r,C,_,BE,o,l,p);return new Promise(x=>{this.setState({isOverflowed:!1,ellipsisContent:b,isTruncated:C!==b},x)})}),this.toggleOverflow=r=>{const{onExpand:o,expandable:l,collapsible:f}=this.getEllipsisOpt(),{expanded:d}=this.state;o&&o(!d,r),(l&&!d||f&&d)&&this.setState({expanded:!d})},this.getEllipsisOpt=()=>{const{ellipsis:r}=this.props;return r?Object.assign({rows:1,expandable:!1,pos:"end",suffix:"",showTooltip:!1,collapsible:!1,expandText:r.expandable?this.expandStr:void 0,collapseText:r.collapsible?this.collapseStr:void 0},typeof r=="object"?r:null):{}},this.renderExpandable=()=>{const{expanded:r,isTruncated:o}=this.state;if(!o)return null;const{expandText:l,expandable:f,collapseText:d,collapsible:p}=this.getEllipsisOpt(),g=!f&&ra(l),m=!p&&ra(d);let _;return!r&&!g?_=l:r&&!m&&(_=d),!g||!m?I.createElement("a",{role:"button",tabIndex:0,className:`${Xe}-ellipsis-expand`,key:"expand",ref:this.expandRef,"aria-label":_,onClick:this.toggleOverflow,onKeyPress:C=>H1(C)&&this.toggleOverflow(C)},_):null},this.getEllipsisStyle=()=>{const{ellipsis:r,component:o}=this.props;if(!r)return{ellipsisCls:"",ellipsisStyle:{}};const{rows:l}=this.getEllipsisOpt(),{expanded:f}=this.state,d=!f&&this.canUseCSSEllipsis(),p=Le({[`${Xe}-ellipsis`]:!0,[`${Xe}-ellipsis-single-line`]:l===1,[`${Xe}-ellipsis-multiple-line`]:l>1,[`${Xe}-ellipsis-multiple-line-text`]:l>1&&o==="span",[`${Xe}-ellipsis-overflow-ellipsis`]:l===1&&d,[`${Xe}-ellipsis-overflow-ellipsis-text`]:l===1&&d&&o==="span"}),g=d&&l>1?{WebkitLineClamp:l}:{};return{ellipsisCls:p,ellipsisStyle:g}},this.renderEllipsisText=r=>{const{suffix:o}=r,{children:l}=this.props,{isTruncated:f,expanded:d,ellipsisContent:p}=this.state;return d||!f?I.createElement("span",{onMouseEnter:this.onHover},l,o&&o.length?o:null):I.createElement("span",{onMouseEnter:this.onHover},p,o)},this.state={editable:!1,copied:!1,isOverflowed:!1,ellipsisContent:i.children,expanded:!1,isTruncated:!1,prevChildren:null},this.wrapperRef=I.createRef(),this.expandRef=I.createRef(),this.copyRef=I.createRef()}componentDidMount(){this.props.ellipsis&&this.onResize().then(()=>yd(()=>this.observerTakingEffect=!0,1))}static getDerivedStateFromProps(i,r){const{prevChildren:o}=r,l={};return l.prevChildren=i.children,i.ellipsis&&o!==i.children&&(l.isOverflowed=!1,l.ellipsisContent=i.children,l.expanded=!1,l.isTruncated=!0),l}componentDidUpdate(i){this.props.children!==i.children&&(this.forceUpdate(),this.props.ellipsis&&this.onResize())}componentWillUnmount(){this.rafId&&window.cancelAnimationFrame(this.rafId)}renderOperations(){return I.createElement(I.Fragment,null,this.renderExpandable(),this.renderCopy())}renderCopy(){var i;const{copyable:r,children:o}=this.props;if(!r)return null;const l=(i=r==null?void 0:r.content)!==null&&i!==void 0?i:o;let f,d=!1;Array.isArray(l)?(f="",l.forEach(g=>{typeof g=="object"&&(d=!0),f+=String(g)})):(typeof l!="object"||(d=!0),f=String(l)),Fi(d,"Content to be copied in Typography is a object, it will case a [object Object] mistake when copy to clipboard.");const p=Object.assign({content:f,duration:3},typeof r=="object"?r:null);return I.createElement(Sd,Object.assign({},p,{forwardRef:this.copyRef}))}renderIcon(){const{icon:i,size:r}=this.props,o=r==="inherit"?this.context:r;if(!i)return null;const l=o==="small"?"small":"default";return I.createElement("span",{className:`${Xe}-icon`,"x-semi-prop":"icon"},FC(i)?I.cloneElement(i,{size:l}):i)}renderContent(){const i=this.props,{component:r,children:o,className:l,type:f,spacing:d,disabled:p,style:g,ellipsis:m,icon:_,size:C,link:b,heading:x,weight:A}=i,k=$E(i,["component","children","className","type","spacing","disabled","style","ellipsis","icon","size","link","heading","weight"]),R=Ta(k,["strong","editable","mark","copyable","underline","code","delete"]),z=C==="inherit"?this.context:C,H=this.renderIcon(),W=this.getEllipsisOpt(),{ellipsisCls:$,ellipsisStyle:Y}=this.getEllipsisStyle();let M=m?this.renderEllipsisText(W):o;const N=Le({[`${Xe}-link-text`]:b,[`${Xe}-link-underline`]:this.props.underline&&b});M=HE(this.props,I.createElement(I.Fragment,null,H,this.props.link?I.createElement("span",{className:N},M):M));const U=/^h[1-6]$/,X=$S(x)&&U.test(x),ee=Le(l,$,{[`${Xe}-${f}`]:f&&!b,[`${Xe}-${z}`]:z,[`${Xe}-link`]:b,[`${Xe}-disabled`]:p,[`${Xe}-${d}`]:d,[`${Xe}-${x}`]:X,[`${Xe}-${x}-weight-${A}`]:X&&A&&isNaN(Number(A))}),V=Object.assign(Object.assign({},isNaN(Number(A))?{}:{fontWeight:A}),g);return I.createElement(Oa,Object.assign({tooltipRef:this.wrapperRef,className:ee,style:Object.assign(Object.assign({},V),Y),component:r,forwardRef:this.wrapperRef},R),M,this.renderOperations())}renderTipWrapper(){const{children:i}=this.props,r=this.showTooltip(),o=this.renderContent();if(r){const{type:l,opts:f,renderTooltip:d}=r;return md(d)?d(i,o):l.toLowerCase()==="popover"?I.createElement(Fr,Object.assign({content:i,position:"top"},f),o):I.createElement(zn,Object.assign({content:i,position:"top"},f),o)}else return o}render(){var i=this;const{size:r}=this.props,o=r==="inherit"?this.context:r,l=I.createElement(V1.Provider,{value:o},I.createElement(qi,{componentName:"Typography"},f=>(this.expandStr=f.expand,this.collapseStr=f.collapse,this.renderTipWrapper())));return this.props.ellipsis?I.createElement(Cd,{onResize:function(){i.observerTakingEffect&&i.onResize(...arguments)},observeParent:!0,observerProperty:fa.Width},l):l}}dr.propTypes={children:v.node,copyable:v.oneOfType([v.shape({text:v.string,onCopy:v.func,successTip:v.node,copyTip:v.node}),v.bool]),delete:v.bool,disabled:v.bool,ellipsis:v.oneOfType([v.shape({rows:v.number,expandable:v.bool,expandText:v.string,onExpand:v.func,suffix:v.string,showTooltip:v.oneOfType([v.shape({type:v.string,opts:v.object}),v.bool]),collapsible:v.bool,collapseText:v.string,pos:v.oneOf(["end","middle"])}),v.bool]),mark:v.bool,underline:v.bool,link:v.oneOfType([v.object,v.bool]),spacing:v.oneOf(st.SPACING),strong:v.bool,size:v.oneOf(st.SIZE),type:v.oneOf(st.TYPE),style:v.object,className:v.string,icon:v.oneOfType([v.node,v.string]),heading:v.string,component:v.string};dr.defaultProps={children:null,copyable:!1,delete:!1,disabled:!1,ellipsis:!1,icon:"",mark:!1,underline:!1,strong:!1,link:!1,type:"primary",spacing:"normal",size:"normal",style:{},className:""};dr.contextType=V1;class Td extends Ee.PureComponent{render(){return I.createElement(dr,Object.assign({component:"span"},this.props))}}Td.propTypes={copyable:v.oneOfType([v.object,v.bool]),delete:v.bool,disabled:v.bool,icon:v.oneOfType([v.node,v.string]),ellipsis:v.oneOfType([v.object,v.bool]),mark:v.bool,underline:v.bool,link:v.oneOfType([v.object,v.bool]),strong:v.bool,type:v.oneOf(st.TYPE),size:v.oneOf(st.SIZE),style:v.object,className:v.string,code:v.bool,component:v.string,weight:v.number};Td.defaultProps={copyable:!1,delete:!1,disabled:!1,icon:"",ellipsis:!1,mark:!1,underline:!1,strong:!1,link:!1,type:"primary",style:{},size:"normal",className:""};var UE=function(s,i){var r={};for(var o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.indexOf(o)<0&&(r[o]=s[o]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,o=Object.getOwnPropertySymbols(s);l{const p=["B","KB","MB","GB","TB","PB","EB","ZB","YB"];let g=0;for(;d>=1e3;)d/=1e3,g++;return`${this.truncatePrecision(d)} ${p[g]}`},"bytes-binary":d=>{const p=["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"];let g=0;for(;d>=1024;)d/=1024,g++;return`${this.truncatePrecision(d)} ${p[g]}`},percentages:d=>`${this.truncatePrecision(d*100)}%`,exponential:d=>{const g=d.toExponential(this.precision+2).split("e");return`${this.truncatePrecision(Number(g[0]))}e${g[1]}`}},this.truncateMethods={ceil:Math.ceil,floor:Math.floor,round:Math.round},this.isDiyParser=typeof f<"u",this.content=i,this.rule=r,this.precision=o,this.truncate=l,this.parser=f}format(){return this.isDiyParser?this.parser(this.content):this.rule==="text"?Wf(this.content).map(i=>Vf(i)?this.truncatePrecision(i):i).join(""):this.rule==="numbers"?Wf(this.content).filter(i=>Vf(i)).map(i=>this.truncatePrecision(i)).join(","):Wf(this.content).map(i=>Vf(i)?this.ruleMethods[this.rule](Number(i)):i).join("")}truncatePrecision(i){const r=this.truncateMethods[this.truncate](Number(i)*Math.pow(10,this.precision))/Math.pow(10,this.precision),o=r.toString().split(".");if(o.length===1)return r.toFixed(this.precision);const l=o[1].length;return ltypeof r=="string"||typeof r=="number"?new VE(String(r),this.props.rule,this.props.precision,this.props.truncate,this.props.parser).format():typeof r=="function"?this.formatNodeDFS(r()):typeof r=="object"&&"children"in r.props?Object.assign(Object.assign({},r),{props:Object.assign(Object.assign({},r.props),{children:this.formatNodeDFS(r.props.children)})}):r),i.length===1?i[0]:i}render(){const i=Object.assign({},this.props);return delete i.rule,delete i.parser,i.children=this.formatNodeDFS(this.props.children),I.createElement(dr,Object.assign({component:"span"},i))}}Pd.propTypes={rule:v.oneOf(st.RULE),precision:v.number,truncate:v.oneOf(st.TRUNCATE),parser:v.func,copyable:v.oneOfType([v.object,v.bool]),delete:v.bool,disabled:v.bool,icon:v.oneOfType([v.node,v.string]),mark:v.bool,underline:v.bool,link:v.oneOfType([v.object,v.bool]),strong:v.bool,type:v.oneOf(st.TYPE),size:v.oneOf(st.SIZE),style:v.object,className:v.string,code:v.bool,component:v.string};Pd.defaultProps={rule:"text",precision:0,truncate:"round",parser:void 0,copyable:!1,delete:!1,icon:"",mark:!1,underline:!1,strong:!1,link:!1,type:"primary",style:{},size:"normal",className:""};const ka=Oa;ka.Text=Td;ka.Title=Ed;ka.Paragraph=Od;ka.Numeral=Pd;var KE=function(s,i){var r={};for(var o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.indexOf(o)<0&&(r[o]=s[o]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,o=Object.getOwnPropertySymbols(s);l0&&arguments[0]!==void 0?arguments[0]:{};const{id:i,className:r,customIconCls:o}=s,l=KE(s,["id","className","customIconCls"]),f=Te(sr,"config.overrideDefaultProps.Spin.indicator");if(f&&I.isValidElement(f))return I.cloneElement(f,{className:Le({[o]:o,[r]:r})});const d="linearGradient-semi-spin",[p,g]=Ee.useState(()=>ca(i)?d:`linearGradient-${i}`);return Ee.useEffect(()=>{if(!ca(i)){g(`linearGradient-${i}`);return}const m=vd({prefix:"semi-spin-gradient"});g(`linearGradient-${m}`)},[i]),I.createElement("svg",Object.assign({},l,{className:r,width:"48",height:"48",viewBox:"0 0 36 36",version:"1.1",xmlns:"http://www.w3.org/2000/svg","aria-hidden":!0,"data-icon":"spin"}),I.createElement("defs",null,I.createElement("linearGradient",{x1:"0%",y1:"100%",x2:"100%",y2:"100%",id:p},I.createElement("stop",{stopColor:"currentColor",stopOpacity:"0",offset:"0%"}),I.createElement("stop",{stopColor:"currentColor",stopOpacity:"0.50",offset:"39.9430698%"}),I.createElement("stop",{stopColor:"currentColor",offset:"100%"}))),I.createElement("g",{stroke:"none",strokeWidth:"1",fill:"none",fillRule:"evenodd"},I.createElement("rect",{fillOpacity:"0.01",fill:"none",x:"0",y:"0",width:"36",height:"36"}),I.createElement("path",{d:"M34,18 C34,9.163444 26.836556,2 18,2 C11.6597233,2 6.18078805,5.68784135 3.59122325,11.0354951",stroke:`url(#${p})`,strokeWidth:"4",strokeLinecap:"round"})))}var Kf,Xy;function GE(){if(Xy)return Kf;Xy=1;var s=id(),i=A1(),r=zr();function o(l,f,d){for(var p=-1,g=f.length,m={};++p"u"&&this._adapter.addActiveKey(d)}}class rO extends Bi{constructor(i){super(Object.assign({},i)),this.updateDOMInRenderTree=r=>{this._adapter.setDOMInRenderTree(r)},this.updateDOMHeight=r=>{this._adapter.setDOMHeight(r)},this.updateVisible=r=>{this._adapter.setVisible(r)},this.updateIsTransitioning=r=>{this._adapter.setIsTransitioning(r)}}}const n1={PREFIX:`${qn}-collapsible`};class ur extends $r{constructor(i){super(i),this.domRef=I.createRef(),this.hasBeenRendered=!1,this.handleResize=r=>{const o=r[0];if(o){const l=ur.getEntryInfo(o);this.foundation.updateDOMHeight(l.height),this.foundation.updateDOMInRenderTree(l.isShown)}},this.isChildrenInRenderTree=()=>this.domRef.current?this.domRef.current.offsetHeight>0:!1,this.state={domInRenderTree:!1,domHeight:0,visible:this.props.isOpen,isTransitioning:!1,cacheIsOpen:this.props.isOpen},this.foundation=new rO(this.adapter)}get adapter(){return Object.assign(Object.assign({},super.adapter),{setDOMInRenderTree:i=>{this.state.domInRenderTree!==i&&this.setState({domInRenderTree:i})},setDOMHeight:i=>{this.state.domHeight!==i&&this.setState({domHeight:i})},setVisible:i=>{this.state.visible!==i&&this.setState({visible:i})},setIsTransitioning:i=>{this.state.isTransitioning!==i&&this.setState({isTransitioning:i})}})}componentDidMount(){super.componentDidMount(),this.resizeObserver=new ResizeObserver(this.handleResize),this.resizeObserver.observe(this.domRef.current);const i=this.isChildrenInRenderTree();this.foundation.updateDOMInRenderTree(i),i&&this.foundation.updateDOMHeight(this.domRef.current.scrollHeight)}static getDerivedStateFromProps(i,r){const o={},l=i.isOpen!==r.cacheIsOpen;return l&&(i.isOpen||!i.motion)&&(o.visible=i.isOpen),i.motion&&l&&(o.isTransitioning=!0),o.cacheIsOpen=i.isOpen,o}componentDidUpdate(i,r,o){const l=Object.keys(t1(this.props,["reCalcKey"])).filter(d=>!Li(this.props[d],i[d])),f=Object.keys(t1(this.state,["domInRenderTree"])).filter(d=>!Li(this.state[d],r[d]));l.includes("reCalcKey")&&this.foundation.updateDOMHeight(this.domRef.current.scrollHeight),f.includes("domInRenderTree")&&this.state.domInRenderTree&&this.foundation.updateDOMHeight(this.domRef.current.scrollHeight)}componentWillUnmount(){super.componentWillUnmount(),this.resizeObserver.disconnect()}render(){const{isOpen:i,collapseHeight:r,collapseHeightAdaptive:o}=this.props,l=o?Math.min(this.state.domHeight,r):r,f=Object.assign({overflow:"hidden",height:i?this.state.domHeight:l,opacity:i||!this.props.fade||r!==0?1:0,transitionDuration:`${this.props.motion&&this.state.isTransitioning?this.props.duration:0}ms`},this.props.style),d=Le(`${n1.PREFIX}-wrapper`,{[`${n1.PREFIX}-transition`]:this.props.motion&&this.state.isTransitioning},this.props.className),p=this.props.keepDOM&&(this.props.lazyRender?this.hasBeenRendered:!0)||this.props.collapseHeight!==0||this.state.visible||this.props.isOpen;return p&&!this.hasBeenRendered&&(this.hasBeenRendered=!0),I.createElement("div",Object.assign({className:d,style:f,onTransitionEnd:()=>{var g,m;this.props.isOpen||this.foundation.updateVisible(!1),this.foundation.updateIsTransitioning(!1),(m=(g=this.props).onMotionEnd)===null||m===void 0||m.call(g)}},this.getDataAttr(this.props)),I.createElement("div",{"x-semi-prop":"children",ref:this.domRef,style:{overflow:"hidden"},id:this.props.id},p&&this.props.children))}}ur.__SemiComponentName__="Collapsible";ur.defaultProps=ba(ur.__SemiComponentName__,{isOpen:!1,duration:250,motion:!0,keepDOM:!1,lazyRender:!1,collapseHeight:0,collapseHeightAdaptive:!1,fade:!1});ur.getEntryInfo=s=>{let i;s.borderBoxSize?i=!(s.borderBoxSize[0].blockSize===0&&s.borderBoxSize[0].inlineSize===0):i=!(s.contentRect.height===0&&s.contentRect.width===0);let r=0;return s.borderBoxSize?r=Math.ceil(s.borderBoxSize[0].blockSize):r=s.target.clientHeight,{isShown:i,height:r}};const K1=I.createContext({});var iO=function(s,i){var r={};for(var o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.indexOf(o)<0&&(r[o]=s[o]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,o=Object.getOwnPropertySymbols(s);l{var o;(this.context.clickHeaderToExpand||!((o=this.headerExpandIconTriggerRef.current)===null||o===void 0)&&o.contains(r.target))&&this.context.onClick(i,r)}}componentDidMount(){this.ariaID=vd({})}renderHeader(i){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;const{showArrow:o,header:l,extra:f}=this.props;let{expandIcon:d,collapseIcon:p}=this.context;const{expandIconPosition:g}=this.context;typeof d>"u"&&(d=I.createElement(OE,null)),typeof p>"u"&&(p=I.createElement(bE,null));const m=I.createElement("span",{ref:this.headerExpandIconTriggerRef,"aria-hidden":"true",className:Le([`${Vt.PREFIX}-header-icon`,{[`${Vt.PREFIX}-header-iconDisabled`]:!r}])},r&&i?p:d),_=g==="left";return typeof l=="string"?I.createElement(I.Fragment,null,o&&(_?m:null),I.createElement("span",null,l),I.createElement("span",{className:`${Vt.PREFIX}-header-right`},I.createElement("span",null,f),o&&(_?null:m))):I.createElement(I.Fragment,null,o&&(_?m:null),l,o&&(_?null:m))}render(){const i=this.props,{className:r,children:o,itemKey:l,reCalcKey:f,header:d,extra:p,showArrow:g,disabled:m}=i,_=iO(i,["className","children","itemKey","reCalcKey","header","extra","showArrow","disabled"]),{keepDOM:C,expandIconPosition:b,activeSet:x,motion:A,lazyRender:k}=this.context,R=x.has(l),z=Le(r,{[`${Vt.PREFIX}-item`]:!0,[`${Vt.PREFIX}-item-active`]:R}),H=Le({[`${Vt.PREFIX}-header`]:!0,[`${Vt.PREFIX}-header-disabled`]:m,[`${Vt.PREFIX}-header-iconLeft`]:b==="left"}),W=Le({[`${Vt.PREFIX}-content`]:!0});return I.createElement("div",Object.assign({className:z},_),I.createElement("div",{role:"button",tabIndex:0,className:H,"aria-disabled":m,"aria-expanded":R?"true":"false","aria-owns":this.ariaID,onClick:$=>!m&&this.handleClick(l,$)},this.renderHeader(R,o!==void 0&&!m)),o&&I.createElement(ur,{lazyRender:k,isOpen:R,keepDOM:C,motion:A,onMotionEnd:this.props.onMotionEnd,reCalcKey:f},I.createElement("div",{className:W,"aria-hidden":!R,id:this.ariaID},I.createElement("div",{className:`${Vt.PREFIX}-content-wrapper`},o))))}}Ia.contextType=K1;Ia.propTypes={itemKey:v.string,extra:v.node,header:v.oneOfType([v.string,v.node]),className:v.string,reCalcKey:v.oneOfType([v.string,v.number]),showArrow:v.bool,disabled:v.bool};Ia.defaultProps={showArrow:!0,disabled:!1};var oO=function(s,i){var r={};for(var o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.indexOf(o)<0&&(r[o]=s[o]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,o=Object.getOwnPropertySymbols(s);l{this.foundation.handleChange(o,l)},this.foundation=new nO(this.adapter);const r=this.foundation.initActiveKey();this.state={activeSet:new Set(r)},this.onChange=this.onChange.bind(this)}get adapter(){return Object.assign(Object.assign({},super.adapter),{handleChange:(i,r)=>this.props.onChange(i,r),addActiveKey:i=>this.setState({activeSet:i})})}static getDerivedStateFromProps(i,r){if(i.activeKey){const o=Array.isArray(i.activeKey)?i.activeKey:[i.activeKey],l=new Set(o);return Li(l,r.activeSet)?r:Object.assign(Object.assign({},r),{activeSet:l})}return r}componentWillUnmount(){this.foundation.destroy()}render(){const i=this.props,{defaultActiveKey:r,lazyRender:o,accordion:l,style:f,motion:d,className:p,keepDOM:g,expandIconPosition:m,expandIcon:_,collapseIcon:C,children:b,clickHeaderToExpand:x}=i;oO(i,["defaultActiveKey","lazyRender","accordion","style","motion","className","keepDOM","expandIconPosition","expandIcon","collapseIcon","children","clickHeaderToExpand"]);const A=Le(Vt.PREFIX,p),{activeSet:k}=this.state;return I.createElement("div",Object.assign({className:A,style:f},this.getDataAttr(this.props)),I.createElement(K1.Provider,{value:{activeSet:k,expandIcon:_,collapseIcon:C,clickHeaderToExpand:x,keepDOM:g,expandIconPosition:m,onClick:this.onChange,motion:d,lazyRender:o}},b))}}zi.Panel=Ia;zi.propTypes={activeKey:v.oneOfType([v.string,v.array]),defaultActiveKey:v.oneOfType([v.string,v.array]),accordion:v.bool,clickHeaderToExpand:v.bool,onChange:v.func,expandIcon:v.node,collapseIcon:v.node,style:v.object,className:v.string,keepDOM:v.bool,motion:v.oneOfType([v.bool,v.func,v.object]),expandIconPosition:v.oneOf(tO.iconPosition),lazyRender:v.bool};zi.__SemiComponentName__="Collapse";zi.defaultProps=ba(zi.__SemiComponentName__,{defaultActiveKey:"",clickHeaderToExpand:!0,onChange:q1,expandIconPosition:"right",lazyRender:!1});class G1 extends Ee.Component{constructor(i){super(i),this.state={}}render(){const{children:i,locale:r}=this.props;return I.createElement(z1.Provider,{value:r},i)}}G1.propTypes={locale:v.object,children:v.node};G1.defaultProps={locale:ed};var sa={},r1;function aO(){if(r1)return sa;r1=1;var s=N1();return sa.createRoot=s.createRoot,sa.hydrateRoot=s.hydrateRoot,sa}var IO=aO();const AO={code:"en-US",dateFnsLocale:HT,currency:"USD",Pagination:{pageSize:"Items per page: ${pageSize}",total:"Total pages: ${total}",jumpTo:"Jump to",page:" page"},Modal:{confirm:"Confirm",cancel:"Cancel"},Tabs:{more:"More"},TimePicker:{placeholder:{time:"Select time",timeRange:"Select a time range"},begin:"Start Time",end:"End Time",hour:"",minute:"",second:"",AM:"AM",PM:"PM"},DatePicker:{placeholder:{date:"Select date",dateTime:"Select date and time",dateRange:["Start date","End date"],dateTimeRange:["Start date","End date"],monthRange:["Start month","End month"]},presets:"Presets",footer:{confirm:"Confirm",cancel:"Cancel"},selectDate:"Select Date",selectTime:"Select Time",year:"year",month:"month",day:"day",monthText:"${month} ${year}",months:{1:"Jan",2:"Feb",3:"Mar",4:"Apr",5:"May",6:"Jun",7:"Jul",8:"Aug",9:"Sep",10:"Oct",11:"Nov",12:"Dec"},fullMonths:{1:"January",2:"February",3:"March",4:"April",5:"May",6:"June",7:"July",8:"August",9:"September",10:"October",11:"November",12:"December"},weeks:{Mon:"Mon",Tue:"Tue",Wed:"Wed",Thu:"Thu",Fri:"Fri",Sat:"Sat",Sun:"Sun"},localeFormatToken:{FORMAT_SWITCH_DATE:"MM/dd/yyyy"}},Popconfirm:{confirm:"Confirm",cancel:"Cancel"},Navigation:{collapseText:"Collapse Sidebar",expandText:"Expand Sidebar"},Table:{emptyText:"No Result",pageText:"Showing ${currentStart} to ${currentEnd} of ${total}",descend:"Click to descend",ascend:"Click to ascend",cancelSort:"Cancel sorting",confirmFilter:"OK",resetFilter:"Reset"},Select:{emptyText:"No Result",createText:"Create"},Cascader:{emptyText:"No Result"},Tree:{emptyText:"No Result",searchPlaceholder:"Search"},List:{emptyText:"No Result"},Calendar:{allDay:"All Day",AM:"${time} AM",PM:"${time} PM",datestring:"",remaining:"${remained} more"},Upload:{mainText:"Click to Upload File or Drag File to here",illegalTips:"This type of file is not supported",legalTips:"Release and start uploading",retry:"Retry",replace:"Replace File",clear:"Clear",selectedFiles:"Selected Files",illegalSize:"Illegal file size",fail:"Upload fail",cropTitle:"Crop Image",cropOk:"OK",cropCancel:"Cancel"},TreeSelect:{searchPlaceholder:"Search"},Typography:{copy:"Copy",copied:"Copied",expand:"Expand",collapse:"Collapse"},Transfer:{emptyLeft:"No Data",emptySearch:"No search results",emptyRight:"No content, check from the left",placeholder:"Search",clear:"Clear",selectAll:"Select all",clearSelectAll:"Unselect all",total:"Total items: ${total}",selected:"Items selected: ${total}"},Form:{optional:"(optional)"},Image:{preview:"Preview",loading:"Loading",loadError:"Failed to load",prevTip:"Previous",nextTip:"Next",zoomInTip:"Zoom in",zoomOutTip:"Zoom out",rotateTip:"Rotate",downloadTip:"Download",adaptiveTip:"Adapt to the page",originTip:"Original size"},Chat:{deleteConfirm:"Are you sure you want to delete this session?",clearContext:"Context cleared",copySuccess:"Copy successful.",stop:"Stop",copy:"Copy",copied:"Copied",dropAreaText:"Put the file here"},UserGuide:{skip:"Skip",next:"Next",prev:"Prev",finish:"Finish"},InputNumber:{},JsonViewer:{search:"Search",replace:"Replace",replaceAll:"Replace All"},VideoPlayer:{rateChange:"Switch rate to ${rate}",qualityChange:"Switch quality to ${quality}",routeChange:"Switch route to ${route}",mirror:"Mirror",cancelMirror:"Cancel mirror",loading:"Loading...",stall:"Loading failed",noResource:"No resource",videoError:"Video load error"},AIChatDialogue:{delete:"Delete",deleteConfirm:"Are you sure you want to delete this message?",deleteContent:"This message will be permanently deleted and cannot be recovered.",copySuccess:"Copy successful.",loading:"Loading...",reasoning:{completed:"Reasoning completed",thinking:"Thinking..."},annotationText:"pieces of information"},Feedback:{submit:"Submit",cancel:"Cancel"},AIChatInput:{template:"Template",configure:"Configure",selected:"Selected ${count} items"},Sidebar:{linkAddSuccess:"Link added successfully",linkRemoveSuccess:"Link removed successfully",enterLinkAddress:"Enter link address",validateFailInfo:"Verification failed, please upload again",uploadFailInfo:"Upload failed, please try again",uploadImgInfo:"Click to upload image or drag image here",defaultMcpInfo:"Preset MCP, cannot be closed",searchPlaceholder:"Please enter",emptyCustomMcpInfo:"No custom MCP yet",newMcpAdd:"Custom MCP",mcpConfigure:"MCP Configuration",annotationTitle:"Reference Source",activeMCPNumber:"Number of activated MCPs:",copySuccess:"Copy successful."},AudioPlayer:{backward:"Backward ${skipDuration}s",forward:"Forward ${skipDuration}s",prev:"Previous",next:"Next",loop:"Loop",volume:"Volume",mediaError:"Audio load error"}};function sO(s){if(s instanceof Error)return s.message;if(typeof s=="string")return s;try{return JSON.stringify(s)}catch{return String(s)}}function NO(s,i){const r=sO(s).toLowerCase(),o=i.toLowerCase();return r.includes(o)?["not found","unknown command","does not exist","doesn't exist","not registered"].some(l=>r.includes(l)):!1}export{EO as $,h1 as A,qn as B,Et as C,da as D,NE as E,Cw as F,ya as G,Ew as H,QE as I,RO as J,KS as K,HS as L,Ni as M,Te as N,xa as O,v as P,OO as Q,I as R,xO as S,ka as T,bO as U,Ta as V,PO as W,qi as X,F1 as Y,Ra as Z,md as _,Nt as a,od as a$,Mi as a0,hO as a1,gO as a2,wO as a3,yO as a4,Pa as a5,_O as a6,pO as a7,vO as a8,mO as a9,wd as aA,fT as aB,cT as aC,Jf as aD,Ky as aE,pT as aF,HT as aG,Lr as aH,W1 as aI,cd as aJ,Xw as aK,Li as aL,Kw as aM,_C as aN,dO as aO,OC as aP,Fr as aQ,yS as aR,Hr as aS,qS as aT,OS as aU,gd as aV,sS as aW,G_ as aX,sC as aY,FS as aZ,H1 as a_,IE as aa,zn as ab,ar as ac,Aw as ad,ca as ae,bE as af,OE as ag,kC as ah,sr as ai,lO as aj,uO as ak,cO as al,_d as am,NO as an,sO as ao,zi as ap,G1 as aq,AO as ar,ed as as,IO as at,bw as au,RE as av,kO as aw,t1 as ax,hm as ay,Cd as az,Ee as b,fC as b0,Ow as b1,YE as b2,Z_ as b3,id as b4,yC as b5,GS as b6,wS as b7,E1 as b8,Fn as b9,EC as ba,qC as bb,zC as bc,Td as bd,iC as be,nS as bf,TC as bg,mS as bh,ZS as bi,T1 as bj,TO as bk,d1 as bl,Vi as bm,Tw as bn,td as bo,N1 as bp,zw as bq,CO as br,na as bs,Ur as c,cr as d,rn as e,Bi as f,He as g,Ze as h,$S as i,NC as j,$r as k,Le as l,FC as m,ra as n,vd as o,bC as p,q1 as q,Nw as r,ba as s,a1 as t,Ca as u,rC as v,Fi as w,ud as x,oC as y,CS as z}; diff --git a/frontends/desktop/dist/build-provenance.json b/frontends/desktop/dist/build-provenance.json new file mode 100644 index 000000000..1cb14ced3 --- /dev/null +++ b/frontends/desktop/dist/build-provenance.json @@ -0,0 +1,9 @@ +{ + "schemaVersion": 1, + "product": "GenericAgent React Desktop 2.0", + "version": "0.2.0", + "sourceRepository": "https://github.com/abraxas914/GenericAgent", + "sourceCommit": "21f12f6dfe57ada8572bb21fe6604caac230b1cf", + "generatedAssetCount": 98, + "generatedManifestSha256": "7ed4bd56d50919d1ea6f92f60658403f19a93f117612704252f6e154ba39f92e" +} diff --git a/frontends/desktop/dist/fallback.html b/frontends/desktop/dist/fallback.html new file mode 100644 index 000000000..31ac81134 --- /dev/null +++ b/frontends/desktop/dist/fallback.html @@ -0,0 +1,80 @@ + + + + + +Startup recovery + + + +
+

完成启动设置

+

恢复界面未能加载。你仍可选择应用运行所需的位置并继续启动。

+

此页面不依赖应用界面组件,可在前端资源损坏时独立运行。

+ +
应用文件夹
尚未选择应用文件夹
选择此前用于运行桌面版的应用文件夹。
+
Python 环境
选择应用文件夹后自动识别
应用会自动选择可用环境;如有需要,可以重新选择。
+

+ +
诊断信息
GenericAgent Desktop startup diagnostics

诊断信息由启动服务脱敏后提供,包含本机路径和错误日志,不包含 API Key、会话或记忆内容。

+
帮助与反馈

如果仍无法完成启动,可添加微信联系:

RoundSquisheen_Ashes_in_the_Snow_
+
+ + + diff --git a/frontends/desktop/dist/index.html b/frontends/desktop/dist/index.html new file mode 100644 index 000000000..619d62212 --- /dev/null +++ b/frontends/desktop/dist/index.html @@ -0,0 +1,38 @@ + + + + + + +GenericAgent + + + + + + + + + + + +
+ + diff --git a/frontends/desktop/dist/loading.html b/frontends/desktop/dist/loading.html new file mode 100644 index 000000000..e92b90726 --- /dev/null +++ b/frontends/desktop/dist/loading.html @@ -0,0 +1,36 @@ + + + + + +GenericAgent + + + + + + + + + + + + + +
+
+ +
+
+ + diff --git a/frontends/desktop/dist/setup.html b/frontends/desktop/dist/setup.html new file mode 100644 index 000000000..984f2f121 --- /dev/null +++ b/frontends/desktop/dist/setup.html @@ -0,0 +1,54 @@ + + + + + +GenericAgent — Fix startup + + + + + + + + + + + + + +
+
+ +
+
+ + diff --git a/frontends/desktop/package.json b/frontends/desktop/package.json index 49acb8f38..16d192184 100644 --- a/frontends/desktop/package.json +++ b/frontends/desktop/package.json @@ -1,10 +1,12 @@ { "name": "genericagent-web2", - "version": "0.1.8", + "version": "0.2.0", "scripts": { - "tauri": "tauri" + "tauri": "tauri", + "test:dist": "node scripts/verify-compiled-dist.mjs", + "build:dmg": "tauri build --bundles dmg && bash scripts/post-dmg.sh src-tauri/target/release/bundle/dmg/*.dmg" }, "devDependencies": { - "@tauri-apps/cli": "^2" + "@tauri-apps/cli": "2.11.4" } } diff --git a/frontends/desktop/packaging/dmg-build-requirements.txt b/frontends/desktop/packaging/dmg-build-requirements.txt new file mode 100644 index 000000000..677ed72bc --- /dev/null +++ b/frontends/desktop/packaging/dmg-build-requirements.txt @@ -0,0 +1,5 @@ +# Pure-Python tools used only to write the curated Finder layout. +ds-store==1.3.3 \ + --hash=sha256:b92a371efbf1b4ccce2a04d1ed13fceacc4736c81ba09cf5aefb74c088160a35 +mac-alias==2.2.3 \ + --hash=sha256:7362b521d2132ef92f606a37abfed5fcd849ceb2f28b6f9743e014b02af92f0d diff --git a/frontends/desktop/packaging/python-runtime-requirements.txt b/frontends/desktop/packaging/python-runtime-requirements.txt new file mode 100644 index 000000000..3fe5dd802 --- /dev/null +++ b/frontends/desktop/packaging/python-runtime-requirements.txt @@ -0,0 +1,37 @@ +# Desktop embedded-runtime lock for CPython 3.12.14. +# +# Direct and transitive versions are exact so all three builders resolve the same +# dependency graph. Wheel file hashes remain platform-specific and are not locked +# here; see README.md for that remaining reproducibility risk. +aiohappyeyeballs==2.7.1 +aiohttp==3.14.3 +aiosignal==1.4.0 +annotated-doc==0.0.5 +annotated-types==0.8.0 +anyio==4.14.2 +attrs==26.1.0 +beautifulsoup4==4.15.0 +bottle==0.13.4 +certifi==2026.7.22 +charset-normalizer==3.5.1 +click==8.4.2 +colorama==0.4.6 +fastapi==0.141.1 +frozenlist==1.8.0 +h11==0.16.0 +idna==3.19 +multidict==6.7.1 +propcache==0.5.2 +psutil==7.1.1 +pydantic==2.13.4 +pydantic-core==2.46.4 +requests==2.34.2 +simple-websocket-server==0.4.4 +soupsieve==2.9.2 +starlette==1.6.0 +typing-extensions==4.16.0 +typing-inspection==0.4.4 +urllib3==2.7.0 +uvicorn==0.52.1 +websockets==17.0.1 +yarl==1.24.5 diff --git a/frontends/desktop/packaging/scripts/linux/install_linux.sh b/frontends/desktop/packaging/scripts/linux/install_linux.sh index f8b14242c..1c4bf5812 100755 --- a/frontends/desktop/packaging/scripts/linux/install_linux.sh +++ b/frontends/desktop/packaging/scripts/linux/install_linux.sh @@ -5,6 +5,7 @@ set -euo pipefail # read-only mount, which breaks the bundled python ("No module named 'encodings'"). Always # run with a clean python env so the embedded interpreter uses its own stdlib/libs. unset PYTHONHOME PYTHONPATH LD_LIBRARY_PATH +export PYTHONDONTWRITEBYTECODE=1 # GenericAgent Desktop Linux installer. # Expected normal location: GenericAgent/frontends/install_linux.sh @@ -91,10 +92,20 @@ resolve_script_root() { } abs_path() { - python3 - "$1" <<'PY' -import os, sys -print(os.path.abspath(os.path.expanduser(sys.argv[1]))) -PY + local value="$1" + case "$value" in + "~") value="$HOME" ;; + "~/"*) value="$HOME/${value#~/}" ;; + esac + [[ "$value" == /* ]] || value="$PWD/$value" + if [[ -d "$value" ]]; then + (cd -P "$value" && pwd) + else + local directory base + directory="$(dirname "$value")" + base="$(basename "$value")" + printf '%s/%s\n' "$(cd -P "$directory" && pwd)" "$base" + fi } has_agentmain() { [[ -f "$1/agentmain.py" ]]; } @@ -199,23 +210,41 @@ install_dependencies() { if [[ -n "$WHEEL_DIR" ]]; then # Offline (portable bundle): install from local wheels only, no network, no pip self-upgrade. log_step "Install dependencies offline from $WHEEL_DIR" + local locked_requirements="$WHEEL_DIR/requirements.txt" + [[ -f "$locked_requirements" ]] || fail "Pinned offline requirements are missing: $locked_requirements" # Install deps directly (NOT an editable -e of the source): an editable install bakes the # project's absolute path into a .pth. Combined with --no-venv (deps go into the relocatable # embedded python) this keeps the portable bundle movable. The bridge adds the source to # sys.path itself (ensure_ga_import_path), so no install of the project is needed. # shellcheck disable=SC2086 - "$py" -m pip install --no-index --find-links "$WHEEL_DIR" \ - "requests>=2.28" "beautifulsoup4>=4.12" "bottle>=0.12" "simple-websocket-server>=0.4" "aiohttp>=3.9" psutil $EXTRA_PACKAGES \ + "$py" -m pip install --no-compile --no-index --find-links "$WHEEL_DIR" \ + --requirement "$locked_requirements" $EXTRA_PACKAGES \ || fail "Offline pip install failed (check wheel dir)." else log_step "Install/refresh minimal Python dependencies" - "$py" -m pip install --upgrade pip setuptools wheel || fail "pip bootstrap failed." + "$py" -m pip install --no-compile --upgrade pip setuptools wheel || fail "pip bootstrap failed." # shellcheck disable=SC2086 - "$py" -m pip install -e "$root" psutil $EXTRA_PACKAGES || fail "pip install failed." + "$py" -m pip install --no-compile -e "$root" psutil $EXTRA_PACKAGES || fail "pip install failed." fi printf 'GAPROGRESS|done\n' } +clean_portable_runtime_bytecode() { + local root="$1" + local py="$2" + [[ -n "$WHEEL_DIR" && "$NO_VENV" -eq 1 ]] || return + local runtime_root + runtime_root="$(cd "$root/.." && pwd -P)" + [[ -d "$runtime_root/python" && "$py" == "$runtime_root"/python/* ]] \ + || fail "Refusing to clean an unverified portable runtime: $runtime_root" + find "$runtime_root" -type d -name '__pycache__' -prune -exec rm -rf {} + + find "$runtime_root" -type f \( -name '*.pyc' -o -name '*.pyo' \) -delete + ! find "$runtime_root" -type d -name '__pycache__' -print -quit | grep -q . \ + || fail "Python bytecode cache directory remains in portable runtime" + ! find "$runtime_root" -type f \( -name '*.pyc' -o -name '*.pyo' \) -print -quit | grep -q . \ + || fail "Python bytecode remains in portable runtime" +} + ensure_mykey() { local root="$1" local mykey="$root/mykey.py" @@ -235,18 +264,16 @@ write_desktop_settings() { local py="$2" local bridge="$root/frontends/desktop_bridge.py" local settings_path="$HOME/.ga_desktop_settings.json" + local helper="$SCRIPT_ROOT/merge_desktop_settings.py" + [[ -f "$helper" ]] || helper="$SCRIPT_ROOT/../merge_desktop_settings.py" [[ -f "$bridge" ]] || fail "desktop_bridge.py not found: $bridge" + [[ -f "$helper" ]] || fail "Desktop settings merge helper not found: $helper" - "$py" - "$settings_path" "$py" "$root" "$bridge" <<'PY' -import json, pathlib, sys -settings_path, python_path, project_dir, bridge_script = sys.argv[1:5] -obj = { - "python_path": python_path, - "project_dir": project_dir, - "bridge_script": bridge_script, -} -pathlib.Path(settings_path).write_text(json.dumps(obj, indent=2), encoding="utf-8") -PY + "$py" "$helper" \ + --settings "$settings_path" \ + --python-path "$py" \ + --project-dir "$root" \ + --bridge-script "$bridge" log_ok "Wrote desktop settings: $settings_path" } @@ -296,10 +323,12 @@ find_icon() { } shell_quote() { - python3 - "$1" <<'PY' -import shlex, sys -print(shlex.quote(sys.argv[1])) -PY + local value="$1" + value="${value//\\/\\\\}" + value="${value//\"/\\\"}" + value="${value//\$/\\\$}" + value="${value//\`/\\\`}" + printf '"%s"\n' "$value" } write_desktop_file() { @@ -412,6 +441,7 @@ log_ok "Runtime Python: $PY" install_dependencies "$ROOT" "$PY" ensure_mykey "$ROOT" write_desktop_settings "$ROOT" "$PY" +clean_portable_runtime_bytecode "$ROOT" "$PY" if [[ "$PORTABLE_PREPARE" -eq 0 ]]; then install_desktop_launchers "$ROOT" "$APPIMAGE" fi diff --git a/frontends/desktop/packaging/scripts/linux/uninstall.sh b/frontends/desktop/packaging/scripts/linux/uninstall.sh index ed0c083c3..5da4c4aa8 100644 --- a/frontends/desktop/packaging/scripts/linux/uninstall.sh +++ b/frontends/desktop/packaging/scripts/linux/uninstall.sh @@ -8,8 +8,8 @@ # install on the same machine is left alone. # 2. Remove the desktop shortcut (GenericAgent.desktop) — only when its Exec # points into this bundle. -# 3. Remove ~/.ga_desktop_settings.json (shared settings; other bundles rebuild -# it on next launch). +# 3. Detach only settings paths owned by this bundle; keep preferences and any +# second bundle / external source selection. # 4. Remove the WebKitGTK data dir (~/.local/share + ~/.cache for the app id). # 5. Delete the bundle folder. set -u @@ -24,7 +24,7 @@ echo echo "This will completely remove GenericAgent from this computer:" echo " - stop its background services (bridge 14168 / conductor 8900)" echo " - delete the desktop shortcut" -echo " - delete settings (~/.ga_desktop_settings.json)" +echo " - detach this bundle from shared desktop settings (preferences are kept)" echo " - delete WebView data (~/.local/share/$APP_ID, ~/.cache/$APP_ID)" echo " - delete THIS folder and everything in it:" echo " $BUNDLE" @@ -39,8 +39,19 @@ esac echo echo "==> Stopping GenericAgent backend services" -# Best-effort graceful exit first. -curl -fsS -m 3 -X POST "http://127.0.0.1:14168/services/bridge/exit" >/dev/null 2>&1 || true +# Best-effort graceful exit only when the listener reports an app_dir inside +# this bundle. Never ask a second bundle or foreign listener to shut down. +RUNTIME_PY="$BUNDLE/runtime/python/bin/python3" +PROJECT_DIR="$BUNDLE/runtime/app" +SETTINGS_HELPER="$BUNDLE/runtime/merge_desktop_settings.py" +IDENTITY="$(curl -fsS -m 3 "http://127.0.0.1:14168/services/identity" 2>/dev/null || true)" +if [[ -x "$RUNTIME_PY" && -n "$IDENTITY" ]] && \ + BUNDLE="$BUNDLE" IDENTITY="$IDENTITY" "$RUNTIME_PY" -c \ + 'import json, os, pathlib; app=pathlib.Path(json.loads(os.environ["IDENTITY"])["app_dir"]).resolve(); bundle=pathlib.Path(os.environ["BUNDLE"]).resolve(); raise SystemExit(0 if app == bundle or bundle in app.parents else 1)'; then + curl -fsS -m 3 -X POST "http://127.0.0.1:14168/services/bridge/exit" >/dev/null 2>&1 || true +else + echo " bridge listener is not owned by this bundle; left running" +fi sleep 1 # Kill any process whose exe or command line lives inside this bundle — never touch @@ -70,11 +81,19 @@ for f in "$HOME/.local/share/applications/GenericAgent.desktop" \ done [ "$removed_shortcut" = 0 ] && echo " no desktop shortcut for this bundle found" -echo "==> Removing settings file" -if [ -f "$HOME/.ga_desktop_settings.json" ]; then - rm -f "$HOME/.ga_desktop_settings.json" && echo "[OK] removed ~/.ga_desktop_settings.json" +echo "==> Detaching bundle paths from shared settings" +if [[ -f "$HOME/.ga_desktop_settings.json" && -x "$RUNTIME_PY" \ + && -f "$SETTINGS_HELPER" && -f "$PROJECT_DIR/frontends/desktop_settings.py" ]]; then + if "$RUNTIME_PY" "$SETTINGS_HELPER" \ + --settings "$HOME/.ga_desktop_settings.json" \ + --project-dir "$PROJECT_DIR" \ + --remove-bundle "$BUNDLE"; then + echo "[OK] removed this bundle's path keys; preferences and overrides were kept" + else + echo " settings were invalid or locked; left unchanged" + fi else - echo " no settings file found" + echo " no owned settings paths could be detached" fi echo "==> Removing WebView data" diff --git a/frontends/desktop/packaging/scripts/macos/install_macos.sh b/frontends/desktop/packaging/scripts/macos/install_macos.sh index a03b74da7..f7e806155 100755 --- a/frontends/desktop/packaging/scripts/macos/install_macos.sh +++ b/frontends/desktop/packaging/scripts/macos/install_macos.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash set -euo pipefail +export PYTHONDONTWRITEBYTECODE=1 # GenericAgent Desktop macOS portable installer/preparer. # Intended bundle layout: @@ -108,7 +109,6 @@ install_deps() { [[ "$SKIP_PIP_INSTALL" == "1" ]] && return progress deps log_step "Install desktop bridge dependencies" - "$py" -m pip install --upgrade pip setuptools wheel local pkgs=( "requests>=2.28" "beautifulsoup4>=4.12" "bottle>=0.12" "simple-websocket-server>=0.4" "aiohttp>=3.9" psutil ) @@ -117,13 +117,34 @@ install_deps() { pkgs+=( $EXTRA_PACKAGES ) fi if [[ -n "$WHEEL_DIR" && -d "$WHEEL_DIR" ]]; then - "$py" -m pip install --no-index --find-links "$WHEEL_DIR" "${pkgs[@]}" + # A wheelhouse repair only needs pip itself. Keep the path fully offline and + # do not install setuptools/wheel into the prepared runtime. + local locked_requirements="$WHEEL_DIR/requirements.txt" + [[ -f "$locked_requirements" ]] || fail "Pinned offline requirements are missing: $locked_requirements" + "$py" -m pip install --no-compile --no-index --find-links "$WHEEL_DIR" \ + --requirement "$locked_requirements" "${pkgs[@]:6}" else log_warn "No wheel dir supplied; falling back to online pip install" - "$py" -m pip install "${pkgs[@]}" + "$py" -m pip install --no-compile --upgrade pip setuptools wheel + "$py" -m pip install --no-compile "${pkgs[@]}" fi } +clean_portable_runtime_bytecode() { + local py="$1" + [[ -n "$WHEEL_DIR" && "$NO_VENV" == "1" ]] || return + local runtime_root + runtime_root="$(cd "$PROJECT_DIR/.." && pwd -P)" + [[ -d "$runtime_root/python" && "$py" == "$runtime_root"/python/* ]] \ + || fail "Refusing to clean an unverified portable runtime: $runtime_root" + find "$runtime_root" -type d -name '__pycache__' -prune -exec rm -rf {} + + find "$runtime_root" -type f \( -name '*.pyc' -o -name '*.pyo' \) -delete + ! find "$runtime_root" -type d -name '__pycache__' -print -quit | grep -q . \ + || fail "Python bytecode cache directory remains in portable runtime" + ! find "$runtime_root" -type f \( -name '*.pyc' -o -name '*.pyo' \) -print -quit | grep -q . \ + || fail "Python bytecode remains in portable runtime" +} + ensure_mykey() { local mykey="$PROJECT_DIR/mykey.py" local tpl="$PROJECT_DIR/mykey_template.py" @@ -140,11 +161,16 @@ ensure_mykey() { write_settings() { local py="$1" local settings_path="$HOME/.ga_desktop_settings.json" - "$py" - "$settings_path" "$py" "$PROJECT_DIR" <<'PY' -import json, pathlib, sys -settings_path, python_path, project_dir = sys.argv[1:4] -pathlib.Path(settings_path).write_text(json.dumps({"python_path": python_path, "project_dir": project_dir}, indent=2), encoding="utf-8") -PY + local bridge="$PROJECT_DIR/frontends/desktop_bridge.py" + local helper="$SCRIPT_ROOT/merge_desktop_settings.py" + [[ -f "$helper" ]] || helper="$SCRIPT_ROOT/../merge_desktop_settings.py" + [[ -f "$bridge" ]] || fail "desktop_bridge.py not found: $bridge" + [[ -f "$helper" ]] || fail "Desktop settings merge helper not found: $helper" + "$py" "$helper" \ + --settings "$settings_path" \ + --python-path "$py" \ + --project-dir "$PROJECT_DIR" \ + --bridge-script "$bridge" log_ok "Wrote desktop settings: $settings_path" } @@ -172,6 +198,7 @@ if [[ "$NO_VENV" == "1" ]]; then RUNTIME_PY="$PYTHON_PATH"; fi install_deps "$RUNTIME_PY" ensure_mykey write_settings "$RUNTIME_PY" +clean_portable_runtime_bytecode "$RUNTIME_PY" progress done case "$MODE" in diff --git a/frontends/desktop/packaging/scripts/macos/uninstall.command b/frontends/desktop/packaging/scripts/macos/uninstall.command index 0898a03b6..cc640423c 100644 --- a/frontends/desktop/packaging/scripts/macos/uninstall.command +++ b/frontends/desktop/packaging/scripts/macos/uninstall.command @@ -7,7 +7,7 @@ # only processes whose command line lives inside this bundle. # 2. Remove the desktop alias (~/Desktop/GenericAgent.app) — only when it links # into this bundle. -# 3. Remove ~/.ga_desktop_settings.json (shared settings). +# 3. Detach only this bundle's path settings while keeping shared preferences. # 4. Remove the WKWebView data for the app id under ~/Library. # 5. Delete the bundle folder. set -u @@ -22,7 +22,7 @@ echo echo "This will completely remove GenericAgent from this computer:" echo " - stop its background services (bridge 14168 / conductor 8900)" echo " - delete the desktop alias" -echo " - delete settings (~/.ga_desktop_settings.json)" +echo " - detach this bundle from shared desktop settings (preferences are kept)" echo " - delete WebView data (~/Library/.../$APP_ID)" echo " - delete THIS folder and everything in it:" echo " $BUNDLE" @@ -37,7 +37,19 @@ esac echo echo "==> Stopping GenericAgent backend services" -curl -fsS -m 3 -X POST "http://127.0.0.1:14168/services/bridge/exit" >/dev/null 2>&1 || true +RUNTIME_ROOT="$BUNDLE/runtime" +[[ -d "$RUNTIME_ROOT/app" ]] || RUNTIME_ROOT="$BUNDLE/GenericAgent.app/Contents/Resources/runtime" +RUNTIME_PY="$RUNTIME_ROOT/python/bin/python3" +PROJECT_DIR="$RUNTIME_ROOT/app" +SETTINGS_HELPER="$RUNTIME_ROOT/merge_desktop_settings.py" +IDENTITY="$(curl -fsS -m 3 "http://127.0.0.1:14168/services/identity" 2>/dev/null || true)" +if [[ -x "$RUNTIME_PY" && -n "$IDENTITY" ]] && \ + BUNDLE="$BUNDLE" IDENTITY="$IDENTITY" "$RUNTIME_PY" -c \ + 'import json, os, pathlib; app=pathlib.Path(json.loads(os.environ["IDENTITY"])["app_dir"]).resolve(); bundle=pathlib.Path(os.environ["BUNDLE"]).resolve(); raise SystemExit(0 if app == bundle or bundle in app.parents else 1)'; then + curl -fsS -m 3 -X POST "http://127.0.0.1:14168/services/bridge/exit" >/dev/null 2>&1 || true +else + echo " bridge listener is not owned by this bundle; left running" +fi sleep 1 # Kill any process whose command line lives inside this bundle (no /proc on macOS, @@ -65,11 +77,19 @@ else echo " no desktop alias found" fi -echo "==> Removing settings file" -if [ -f "$HOME/.ga_desktop_settings.json" ]; then - rm -f "$HOME/.ga_desktop_settings.json" && echo "[OK] removed ~/.ga_desktop_settings.json" +echo "==> Detaching bundle paths from shared settings" +if [[ -f "$HOME/.ga_desktop_settings.json" && -x "$RUNTIME_PY" \ + && -f "$SETTINGS_HELPER" && -f "$PROJECT_DIR/frontends/desktop_settings.py" ]]; then + if "$RUNTIME_PY" "$SETTINGS_HELPER" \ + --settings "$HOME/.ga_desktop_settings.json" \ + --project-dir "$PROJECT_DIR" \ + --remove-bundle "$BUNDLE"; then + echo "[OK] removed this bundle's path keys; preferences and overrides were kept" + else + echo " settings were invalid or locked; left unchanged" + fi else - echo " no settings file found" + echo " no owned settings paths could be detached" fi echo "==> Removing WebView data" diff --git a/frontends/desktop/packaging/scripts/merge_desktop_settings.py b/frontends/desktop/packaging/scripts/merge_desktop_settings.py new file mode 100644 index 000000000..557f3496a --- /dev/null +++ b/frontends/desktop/packaging/scripts/merge_desktop_settings.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +"""Update or detach package-owned Desktop paths without dropping user settings.""" + +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("--settings", required=True, type=Path) + parser.add_argument("--project-dir", required=True) + parser.add_argument("--python-path") + parser.add_argument("--bridge-script") + parser.add_argument("--remove-bundle") + args = parser.parse_args() + + sys.path.insert(0, str(Path(args.project_dir).resolve() / "frontends")) + from desktop_settings import merge_package_paths, remove_bundle_paths + + if args.remove_bundle: + if args.python_path or args.bridge_script: + parser.error("--remove-bundle cannot be combined with path updates") + remove_bundle_paths(args.settings, args.remove_bundle) + return + if not args.python_path or not args.bridge_script: + parser.error("--python-path and --bridge-script are required when updating settings") + merge_package_paths( + args.settings, + python_path=args.python_path, + project_dir=args.project_dir, + bridge_script=args.bridge_script, + ) + + +if __name__ == "__main__": + main() diff --git a/frontends/desktop/packaging/scripts/windows/install_windows.ps1 b/frontends/desktop/packaging/scripts/windows/install_windows.ps1 index e501d5b30..b513f8528 100644 --- a/frontends/desktop/packaging/scripts/windows/install_windows.ps1 +++ b/frontends/desktop/packaging/scripts/windows/install_windows.ps1 @@ -52,6 +52,7 @@ param( ) $ErrorActionPreference = "Stop" +$env:PYTHONDONTWRITEBYTECODE = "1" function Write-Step([string]$msg) { Write-Host "`n==> $msg" -ForegroundColor Cyan } function Write-Ok([string]$msg) { Write-Host "[OK] $msg" -ForegroundColor Green } @@ -159,6 +160,10 @@ function Install-Dependencies([string]$root, [string]$py) { # Offline mode (portable bundle): install from local wheels only, no network, no pip self-upgrade. if ($WheelDir) { $wd = (Resolve-Path $WheelDir -ErrorAction Stop).Path + $lockedRequirements = Join-Path $wd "requirements.txt" + if (-not (Test-Path $lockedRequirements -PathType Leaf)) { + Fail "Pinned offline requirements are missing: $lockedRequirements" + } Write-Ok "offline wheels: $wd" if ($extra.Count) { Write-Ok "extra packages: $($extra -join ', ')" } Write-Host "GAPROGRESS|deps" @@ -167,7 +172,7 @@ function Install-Dependencies([string]$root, [string]$py) { # project's absolute path into a .pth. With -NoVenv (deps go into the relocatable embedded # python) this keeps the portable bundle movable. The bridge adds the source to sys.path # itself (ensure_ga_import_path), so the project itself need not be installed. - & $py -m pip install --no-index --find-links $wd "requests>=2.28" "beautifulsoup4>=4.12" "bottle>=0.12" "simple-websocket-server>=0.4" "aiohttp>=3.9" psutil @extra + & $py -m pip install --no-compile --no-index --find-links $wd --requirement $lockedRequirements @extra if ($LASTEXITCODE -ne 0) { Fail "offline pip install failed (check wheels dir)." } Write-Host "GAPROGRESS|done" return @@ -182,16 +187,40 @@ function Install-Dependencies([string]$root, [string]$py) { Write-Warn "No pip mirror set; using official PyPI." } Write-Step "Upgrade pip" - & $py -m pip install @pipIndexArgs --upgrade pip + & $py -m pip install --no-compile @pipIndexArgs --upgrade pip if ($LASTEXITCODE -ne 0) { Fail "pip upgrade failed." } Write-Step "Install GenericAgent minimal package and desktop bridge extras" # pyproject.toml already includes: requests, beautifulsoup4, bottle, simple-websocket-server, aiohttp. # desktop_bridge.py additionally imports psutil. - & $py -m pip install @pipIndexArgs -e $root psutil @extra + & $py -m pip install --no-compile @pipIndexArgs -e $root psutil @extra if ($LASTEXITCODE -ne 0) { Fail "pip install failed." } } +function Remove-PortableRuntimeBytecode([string]$root, [string]$py) { + if (-not $WheelDir -or -not $NoVenv) { return } + $runtimeRoot = [System.IO.Path]::GetFullPath((Split-Path $root -Parent)) + $pythonRoot = [System.IO.Path]::GetFullPath((Join-Path $runtimeRoot "python")) + $pythonPrefix = $pythonRoot.TrimEnd('\', '/') + [System.IO.Path]::DirectorySeparatorChar + $pythonPath = [System.IO.Path]::GetFullPath($py) + if (-not (Test-Path $pythonRoot -PathType Container) -or + -not $pythonPath.StartsWith($pythonPrefix, [System.StringComparison]::OrdinalIgnoreCase)) { + Fail "Refusing to clean an unverified portable runtime: $runtimeRoot" + } + Get-ChildItem -LiteralPath $runtimeRoot -Directory -Filter "__pycache__" -Recurse -Force | + Sort-Object { $_.FullName.Length } -Descending | + Remove-Item -Recurse -Force + Get-ChildItem -LiteralPath $runtimeRoot -File -Recurse -Force | + Where-Object { $_.Name -match '\.py[co]$' } | + Remove-Item -Force + $cacheDir = Get-ChildItem -LiteralPath $runtimeRoot -Directory -Filter "__pycache__" -Recurse -Force | + Select-Object -First 1 + $bytecode = Get-ChildItem -LiteralPath $runtimeRoot -File -Recurse -Force | + Where-Object { $_.Name -match '\.py[co]$' } | + Select-Object -First 1 + if ($cacheDir -or $bytecode) { Fail "Python bytecode remains in portable runtime" } +} + function Ensure-MyKey([string]$root) { $mykey = Join-Path $root "mykey.py" $tpl = Join-Path $root "mykey_template.py" @@ -209,17 +238,20 @@ function Ensure-MyKey([string]$root) { function Write-DesktopSettings([string]$root, [string]$py) { $settingsPath = Join-Path $env:USERPROFILE ".ga_desktop_settings.json" - $obj = [ordered]@{ - python_path = $py - project_dir = $root - bridge_script = (Join-Path $root "frontends\desktop_bridge.py") + $bridge = Join-Path $root "frontends\desktop_bridge.py" + $scriptRoot = Resolve-ScriptRoot + $helper = Join-Path $scriptRoot "merge_desktop_settings.py" + if (-not (Test-Path -LiteralPath $helper -PathType Leaf)) { + $helper = Join-Path (Split-Path $scriptRoot -Parent) "merge_desktop_settings.py" + } + if (-not (Test-Path -LiteralPath $bridge -PathType Leaf)) { + Fail "desktop_bridge.py not found: $bridge" + } + if (-not (Test-Path -LiteralPath $helper -PathType Leaf)) { + Fail "Desktop settings merge helper not found: $helper" } - $json = $obj | ConvertTo-Json -Depth 5 - # PowerShell 5.1 `Set-Content -Encoding UTF8` writes a UTF-8 BOM. - # Rust serde_json does not accept BOM at the beginning, causing the Tauri shell - # to ignore this settings file and auto-discover the wrong project directory. - $utf8NoBom = New-Object System.Text.UTF8Encoding($false) - [System.IO.File]::WriteAllText($settingsPath, $json, $utf8NoBom) + & $py $helper --settings $settingsPath --python-path $py --project-dir $root --bridge-script $bridge + if ($LASTEXITCODE -ne 0) { Fail "Desktop settings merge failed." } Write-Ok "Wrote desktop settings: $settingsPath" } @@ -269,7 +301,7 @@ function Install-DesktopNpm([string]$root) { Write-Step "Install Tauri desktop npm dependencies: $desktop" Push-Location $desktop try { - & cmd /c npm install @npmRegArgs + & cmd /c npm install --package-lock=false @npmRegArgs if ($LASTEXITCODE -ne 0) { Fail "npm install failed in $desktop" } & cmd /c npx tauri --version if ($LASTEXITCODE -ne 0) { Fail "npx tauri --version failed after npm install" } @@ -349,6 +381,7 @@ Write-Ok "Runtime Python: $py" Install-Dependencies $root $py Ensure-MyKey $root Write-DesktopSettings $root $py +Remove-PortableRuntimeBytecode $root $py Test-WebView2Installed if ($Mode -eq "PrepareOnly") { diff --git a/frontends/desktop/packaging/scripts/windows/uninstall.bat b/frontends/desktop/packaging/scripts/windows/uninstall.bat index 077652ec4..9df3809fc 100644 --- a/frontends/desktop/packaging/scripts/windows/uninstall.bat +++ b/frontends/desktop/packaging/scripts/windows/uninstall.bat @@ -9,7 +9,7 @@ echo. echo This will completely remove GenericAgent from this computer: echo - stop its background services (ports 14168 / 8900) echo - delete the desktop shortcut -echo - delete settings (%%USERPROFILE%%\.ga_desktop_settings.json) +echo - detach this bundle from shared settings; keep preferences and other installs echo - delete THIS folder and everything in it: echo "%~dp0" echo. diff --git a/frontends/desktop/packaging/scripts/windows/uninstall_windows.ps1 b/frontends/desktop/packaging/scripts/windows/uninstall_windows.ps1 index e2262585d..29179b19d 100644 --- a/frontends/desktop/packaging/scripts/windows/uninstall_windows.ps1 +++ b/frontends/desktop/packaging/scripts/windows/uninstall_windows.ps1 @@ -8,8 +8,8 @@ bundle folder itself: on the same machine are left alone. 2. Remove the desktop shortcut (GenericAgent.lnk) — only when it points into this bundle. - 3. Remove ~/.ga_desktop_settings.json (shared settings; other bundles rebuild it - automatically on next launch). + 3. Detach only path settings owned by this bundle while preserving preferences, + external source selection, and any second installed bundle. 4. Schedule deletion of the bundle folder after this script exits (a folder cannot delete itself while code runs inside it). @@ -44,11 +44,16 @@ function Path-IsInsideBundle([string]$p) { # ── 1. Graceful backend shutdown, then force-kill bundle-owned processes ────── Write-Step "Stopping GenericAgent backend services" -# Best-effort graceful exit: tell the bridge to stop its managed extras and quit. +# Best-effort graceful exit only when identity.app_dir belongs to this bundle. try { - Invoke-WebRequest -Uri "http://127.0.0.1:14168/services/bridge/exit" -Method Post ` - -TimeoutSec 3 -UseBasicParsing | Out-Null - Start-Sleep -Milliseconds 800 + $identity = Invoke-RestMethod -Uri "http://127.0.0.1:14168/services/identity" -Method Get -TimeoutSec 3 + if ($identity.app_dir -and (Path-IsInsideBundle ([string]$identity.app_dir))) { + Invoke-WebRequest -Uri "http://127.0.0.1:14168/services/bridge/exit" -Method Post ` + -TimeoutSec 3 -UseBasicParsing | Out-Null + Start-Sleep -Milliseconds 800 + } else { + Write-Info "bridge listener is not owned by this bundle; left running" + } } catch { } # Force-kill anything still listening on our ports, but ONLY if the owning process @@ -97,13 +102,23 @@ if (Test-Path -LiteralPath $lnk) { } # ── 3. Shared settings file ────────────────────────────────────────────────── -Write-Step "Removing settings file" +Write-Step "Detaching bundle paths from shared settings" $settings = Join-Path $env:USERPROFILE '.ga_desktop_settings.json' -if (Test-Path -LiteralPath $settings) { - Remove-Item -LiteralPath $settings -Force -ErrorAction SilentlyContinue - Write-Ok "removed $settings" +$runtimePy = Join-Path $bundle 'runtime\python\python.exe' +$projectDir = Join-Path $bundle 'runtime\app' +$settingsHelper = Join-Path $bundle 'runtime\merge_desktop_settings.py' +if ((Test-Path -LiteralPath $settings -PathType Leaf) -and + (Test-Path -LiteralPath $runtimePy -PathType Leaf) -and + (Test-Path -LiteralPath $settingsHelper -PathType Leaf) -and + (Test-Path -LiteralPath (Join-Path $projectDir 'frontends\desktop_settings.py') -PathType Leaf)) { + & $runtimePy $settingsHelper --settings $settings --project-dir $projectDir --remove-bundle $bundle + if ($LASTEXITCODE -eq 0) { + Write-Ok "removed this bundle's path keys; preferences and overrides were kept" + } else { + Write-Info "settings were invalid or locked; left unchanged" + } } else { - Write-Info "no settings file found" + Write-Info "no owned settings paths could be detached" } # ── 3b. WebView2 data dir (cache + localStorage) ───────────────────────────── diff --git a/frontends/desktop/scripts/gen_ds_store.py b/frontends/desktop/scripts/gen_ds_store.py new file mode 100644 index 000000000..e359434a9 --- /dev/null +++ b/frontends/desktop/scripts/gen_ds_store.py @@ -0,0 +1,68 @@ +"""Generate a .DS_Store file for DMG layout. + +Usage: python3 gen_ds_store.py + +Creates a .DS_Store that configures Finder to display: +- 540x380 window +- icon view, 128px icons +- at (140, 190), Applications at (400, 190) +""" +import sys +import struct +from ds_store import DSStore, DSStoreEntry +from mac_alias import Alias +import plistlib + +def main(): + output_path = sys.argv[1] + app_name = sys.argv[2] + + with DSStore.open(output_path, 'w+') as ds: + # Icon view properties for the folder + icvp = { + 'backgroundColorBlue': 1.0, + 'backgroundColorGreen': 1.0, + 'backgroundColorRed': 1.0, + 'backgroundType': 1, # 1 = solid color + 'gridOffsetX': 0.0, + 'gridOffsetY': 0.0, + 'gridSpacing': 100.0, + 'iconSize': 128.0, + 'labelOnBottom': True, + 'showIconPreview': True, + 'showItemInfo': False, + 'textSize': 13.0, + 'viewOptionsVersion': 1, + 'arrangeBy': 'none', + } + ds['.'] = DSStoreEntry('.', 'icvp', plistlib.dumps(icvp, fmt=plistlib.FMT_BINARY)) + + # Window bounds/settings + # vSrn = view style (icnv = icon view) + ds['.'] = DSStoreEntry('.', 'vSrn', 1) + + # bwsp = browser window settings plist + bwsp = { + 'WindowBounds': '{{100, 100}, {540, 380}}', + 'ShowPathbar': False, + 'ShowSidebar': False, + 'ShowStatusBar': False, + 'ShowToolbar': False, + 'ShowTabView': False, + 'SidebarWidth': 0, + } + ds['.'] = DSStoreEntry('.', 'bwsp', plistlib.dumps(bwsp, fmt=plistlib.FMT_BINARY)) + + # Icon positions (Iloc = icon location, 16 bytes: x(4) + y(4) + padding(8)) + # GenericAgent.app at (140, 190) + iloc_app = struct.pack('>II', 140, 190) + b'\xff\xff\xff\xff\xff\xff\x00\x00' + ds[app_name] = DSStoreEntry(app_name, 'Iloc', iloc_app) + + # Applications at (400, 190) + iloc_apps = struct.pack('>II', 400, 190) + b'\xff\xff\xff\xff\xff\xff\x00\x00' + ds['Applications'] = DSStoreEntry('Applications', 'Iloc', iloc_apps) + + print(f"Generated: {output_path}") + +if __name__ == '__main__': + main() diff --git a/frontends/desktop/scripts/post-dmg.sh b/frontends/desktop/scripts/post-dmg.sh new file mode 100644 index 000000000..50b58f0ea --- /dev/null +++ b/frontends/desktop/scripts/post-dmg.sh @@ -0,0 +1,153 @@ +#!/bin/bash +# Repackage a Tauri-bundled DMG into a clean DMG with proper Finder layout. +# Only contains .app + Applications symlink + .DS_Store for layout. +# No .VolumeIcon.icns, .background, .fseventsd or other debris. +# +# Usage: ./scripts/post-dmg.sh +# Requires: macOS (hdiutil), Python 3 with ds_store package + +set -euo pipefail + +DMG_PATH="${1:-}" +HDIUTIL_BIN="${HDIUTIL_BIN:-hdiutil}" +if [[ -z "$DMG_PATH" ]]; then + echo "Usage: $0 " >&2 + exit 1 +fi + +if [[ ! -f "$DMG_PATH" ]]; then + echo "Error: DMG not found: $DMG_PATH" >&2 + exit 1 +fi + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +DMG_DIR="$(cd "$(dirname "$DMG_PATH")" && pwd)" +DMG_NAME="$(basename "$DMG_PATH")" +STAGE_DIR="$(mktemp -d)" +RW_DMG="$(mktemp -u).dmg" + +cleanup() { + if [[ -n "${MOUNT_POINT:-}" ]] && mount | grep -q "$MOUNT_POINT"; then + "$HDIUTIL_BIN" detach "$MOUNT_POINT" -force 2>/dev/null || true + fi + rm -rf "$STAGE_DIR" "$RW_DMG" +} +trap cleanup EXIT + +# --- Step 1: Extract app from original DMG --- +echo "Mounting original DMG..." +MOUNT_OUTPUT="$("$HDIUTIL_BIN" attach "$DMG_PATH" -readonly -noverify -noautoopen -plist)" +MOUNT_POINT="$(echo "$MOUNT_OUTPUT" | grep -A1 'mount-point' | grep '' | sed 's/.*\(.*\)<\/string>.*/\1/' | head -1)" + +if [[ -z "$MOUNT_POINT" ]]; then + echo "Error: could not determine mount point" >&2 + exit 1 +fi + +APP_NAME="" +for item in "$MOUNT_POINT"/*.app; do + if [[ -d "$item" ]]; then + APP_NAME="$(basename "$item")" + ditto "$item" "$STAGE_DIR/$APP_NAME" + break + fi +done + +if [[ -z "$APP_NAME" ]]; then + echo "Error: no .app found in DMG" >&2 + exit 1 +fi + +"$HDIUTIL_BIN" detach "$MOUNT_POINT" -quiet +unset MOUNT_POINT + +# --- Step 2: Prepare stage directory --- +ln -s /Applications "$STAGE_DIR/Applications" + +# Generate .DS_Store with layout metadata +python3 -c " +import struct, plistlib, sys +sys.path.insert(0, '') +from ds_store import DSStore, DSStoreEntry + +app_name = '$APP_NAME' +output = '$STAGE_DIR/.DS_Store' + +entries = [] + +# Icon positions (Iloc: x(4) + y(4) + padding(8)) +iloc_app = struct.pack('>II', 140, 190) + b'\xff\xff\xff\xff\xff\xff\x00\x00' +entries.append(DSStoreEntry(app_name, 'Iloc', 'blob', iloc_app)) + +iloc_apps = struct.pack('>II', 400, 190) + b'\xff\xff\xff\xff\xff\xff\x00\x00' +entries.append(DSStoreEntry('Applications', 'Iloc', 'blob', iloc_apps)) + +# Icon view properties +icvp = { + 'backgroundColorBlue': 1.0, + 'backgroundColorGreen': 1.0, + 'backgroundColorRed': 1.0, + 'backgroundType': 1, + 'gridOffsetX': 0.0, + 'gridOffsetY': 0.0, + 'gridSpacing': 100.0, + 'iconSize': 128.0, + 'labelOnBottom': True, + 'showIconPreview': True, + 'showItemInfo': False, + 'textSize': 13.0, + 'viewOptionsVersion': 1, + 'arrangeBy': 'none', +} +entries.append(DSStoreEntry('.', 'icvp', 'blob', plistlib.dumps(icvp, fmt=plistlib.FMT_BINARY))) + +# View style (1 = icon view) +entries.append(DSStoreEntry('.', 'vSrn', 'long', 1)) + +# Browser window settings +bwsp = { + 'WindowBounds': '{{100, 100}, {540, 380}}', + 'ShowSidebar': False, + 'ShowStatusBar': False, + 'ShowToolbar': False, + 'ShowTabView': False, + 'SidebarWidth': 0, +} +entries.append(DSStoreEntry('.', 'bwsp', 'blob', plistlib.dumps(bwsp, fmt=plistlib.FMT_BINARY))) + +with DSStore.open(output, 'w+') as ds: + for e in entries: + ds.insert(e) +" + +echo " Stage: $APP_NAME + Applications + .DS_Store" + +# --- Step 3: Create final DMG --- +VOLNAME="${APP_NAME%.app}" +CREATE_STATUS=1 +for attempt in 1 2 3; do + rm -f "$DMG_DIR/$DMG_NAME" + if "$HDIUTIL_BIN" create \ + -volname "$VOLNAME" \ + -srcfolder "$STAGE_DIR" \ + -ov \ + -format UDZO \ + "$DMG_DIR/$DMG_NAME"; then + CREATE_STATUS=0 + break + else + CREATE_STATUS=$? + fi + + if [[ "$attempt" -lt 3 ]]; then + echo "hdiutil create failed (attempt $attempt/3, exit $CREATE_STATUS); retrying..." >&2 + sleep $((attempt * 2)) + fi +done + +if [[ "$CREATE_STATUS" -ne 0 ]]; then + echo "Error: hdiutil create failed after 3 attempts" >&2 + exit "$CREATE_STATUS" +fi + +echo "Done: $DMG_NAME ($(du -h "$DMG_DIR/$DMG_NAME" | cut -f1))" From f526f4ad5b28d56bbf88c197ce042dce26ee5413 Mon Sep 17 00:00:00 2001 From: abraxas914 Date: Sun, 23 Aug 2026 17:23:13 +0800 Subject: [PATCH 3/6] test(desktop): cover bridge, backup and package contracts --- .../e2e/linux/Invoke-LinuxUserJourney.sh | 72 + frontends/desktop/e2e/linux/README.md | 22 + .../e2e/macos/Invoke-macOSUserJourney.sh | 85 + frontends/desktop/e2e/macos/README.md | 27 + frontends/desktop/e2e/package/README.md | 28 + .../e2e/package/real_package_journey.py | 1031 ++++++++++++ .../e2e/package/verify_candidate_evidence.py | 192 +++ frontends/desktop/e2e/requirements.txt | 8 + .../e2e/windows/Invoke-WindowsUserJourney.ps1 | 662 ++++++++ frontends/desktop/e2e/windows/README.md | 62 + .../fixtures/foreign-port-listener.ps1 | 35 + .../desktop/scripts/verify-compiled-dist.mjs | 385 +++++ frontends/tests/test_bridge_e2e_controls.py | 117 ++ frontends/tests/test_bridge_model_switch.py | 173 +++ .../tests/test_bridge_origin_security.py | 194 +++ frontends/tests/test_bridge_sessions.py | 1384 +++++++++++++++++ frontends/tests/test_bridge_submit.py | 261 ++++ frontends/tests/test_bridge_uploads.py | 153 ++ frontends/tests/test_bridge_utils.py | 420 +++++ .../tests/test_conductor_model_routing.py | 411 +++++ frontends/tests/test_cost_tracker_ledger.py | 444 ++++++ frontends/tests/test_data_backup.py | 674 ++++++++ frontends/tests/test_ga_root_contract.py | 144 ++ frontends/tests/test_package_evidence.py | 556 +++++++ .../tests/test_tauri_security_contract.py | 125 ++ 25 files changed, 7665 insertions(+) create mode 100644 frontends/desktop/e2e/linux/Invoke-LinuxUserJourney.sh create mode 100644 frontends/desktop/e2e/linux/README.md create mode 100644 frontends/desktop/e2e/macos/Invoke-macOSUserJourney.sh create mode 100644 frontends/desktop/e2e/macos/README.md create mode 100644 frontends/desktop/e2e/package/README.md create mode 100644 frontends/desktop/e2e/package/real_package_journey.py create mode 100644 frontends/desktop/e2e/package/verify_candidate_evidence.py create mode 100644 frontends/desktop/e2e/requirements.txt create mode 100644 frontends/desktop/e2e/windows/Invoke-WindowsUserJourney.ps1 create mode 100644 frontends/desktop/e2e/windows/README.md create mode 100644 frontends/desktop/e2e/windows/fixtures/foreign-port-listener.ps1 create mode 100644 frontends/desktop/scripts/verify-compiled-dist.mjs create mode 100644 frontends/tests/test_bridge_e2e_controls.py create mode 100644 frontends/tests/test_bridge_model_switch.py create mode 100644 frontends/tests/test_bridge_origin_security.py create mode 100644 frontends/tests/test_bridge_sessions.py create mode 100644 frontends/tests/test_bridge_submit.py create mode 100644 frontends/tests/test_bridge_uploads.py create mode 100644 frontends/tests/test_bridge_utils.py create mode 100644 frontends/tests/test_conductor_model_routing.py create mode 100644 frontends/tests/test_cost_tracker_ledger.py create mode 100644 frontends/tests/test_data_backup.py create mode 100644 frontends/tests/test_ga_root_contract.py create mode 100644 frontends/tests/test_package_evidence.py create mode 100644 frontends/tests/test_tauri_security_contract.py diff --git a/frontends/desktop/e2e/linux/Invoke-LinuxUserJourney.sh b/frontends/desktop/e2e/linux/Invoke-LinuxUserJourney.sh new file mode 100644 index 000000000..b29e20bd4 --- /dev/null +++ b/frontends/desktop/e2e/linux/Invoke-LinuxUserJourney.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + echo "Usage: $0 --artifact --expected-commit [--work-dir ]" >&2 +} + +artifact="" +expected_commit="" +work_dir="" +keep_work_dir=0 +while [[ $# -gt 0 ]]; do + case "$1" in + --artifact) artifact="$2"; shift 2 ;; + --expected-commit) expected_commit="$2"; shift 2 ;; + --work-dir) work_dir="$2"; shift 2 ;; + --keep-work-dir) keep_work_dir=1; shift ;; + *) usage; exit 2 ;; + esac +done + +[[ -n "$artifact" && -n "$expected_commit" ]] || { usage; exit 2; } +artifact="$(realpath "$artifact")" +[[ -f "$artifact" ]] || { echo "Artifact not found: $artifact" >&2; exit 1; } +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +driver="$script_dir/../package/real_package_journey.py" +if [[ -z "$work_dir" ]]; then + work_dir="$(mktemp -d -t ga-linux-package-e2e.XXXXXX)" +else + mkdir -p "$work_dir" + work_dir="$(realpath "$work_dir")" +fi +extract_dir="$work_dir/extracted" +report_dir="$work_dir/report" +driver_work="$work_dir/driver-work" +mkdir -p "$extract_dir" "$report_dir" "$driver_work" + +cleanup() { + if [[ $keep_work_dir -eq 0 ]]; then + echo "Evidence kept at $report_dir; extracted package kept until the report is collected." + else + echo "Work directory kept at $work_dir" + fi +} +trap cleanup EXIT + +tar -xzf "$artifact" -C "$extract_dir" +package_root="$extract_dir/GenericAgent-Desktop-Linux-Portable" +if [[ ! -d "$package_root" ]]; then + mapfile -t roots < <(find "$extract_dir" -mindepth 1 -maxdepth 1 -type d) + [[ ${#roots[@]} -eq 1 ]] || { echo "Could not identify the portable package root" >&2; exit 1; } + package_root="${roots[0]}" +fi +chmod +x "$package_root/GenericAgent.AppImage" + +sidecar="$(dirname "$artifact")/SHA256SUMS-linux.txt" +[[ -f "$sidecar" ]] || { echo "Linux SHA-256 sidecar not found: $sidecar" >&2; exit 1; } +expected_hash="$(grep -Eo '[0-9a-fA-F]{64}' "$sidecar" | head -n 1 | tr '[:upper:]' '[:lower:]')" +actual_hash="$(sha256sum "$artifact" | awk '{print $1}')" +[[ "$actual_hash" == "$expected_hash" ]] || { echo "Artifact SHA-256 mismatch" >&2; exit 1; } + +python3 "$driver" \ + --platform linux \ + --artifact "$artifact" \ + --expected-commit "$expected_commit" \ + --package-root "$package_root" \ + --application-relative "GenericAgent.AppImage" \ + --runtime-relative "runtime" \ + --relocated-root "$work_dir/relocated/含 空格/GenericAgent 包" \ + --report-dir "$report_dir" \ + --work-dir "$driver_work" \ + --allow-user-settings-mutation diff --git a/frontends/desktop/e2e/linux/README.md b/frontends/desktop/e2e/linux/README.md new file mode 100644 index 000000000..8581f5b00 --- /dev/null +++ b/frontends/desktop/e2e/linux/README.md @@ -0,0 +1,22 @@ +# Ubuntu 24.04 release-package journey + +Run this on a real Ubuntu 24.04 x64 desktop in a dedicated test account. FUSE and a screenshot +tool (`gnome-screenshot`, `scrot`, or ImageMagick `import`) must be available. + +```bash +frontends/desktop/e2e/linux/Invoke-LinuxUserJourney.sh \ + --artifact /path/GenericAgent-Desktop-Linux-Portable.tar.gz \ + --expected-commit \ + --keep-work-dir +``` + +The wrapper verifies/extracts the tar, preserves the AppImage launch path, and runs the shared +production journey. The journey covers package shape, embedded Python, first launch, warm +restart, package-owned bridge plus external `GA_ROOT`, deterministic chat, upload, memory import, +foreign-port protection, recovery after release, relocation into a path containing spaces and +Chinese characters, stale-override fallback, optional P2P degradation, screenshots, and cleanup. + +After automation passes, edit `report/real-package-report.json` and mark the Linux manual items +`pass`: executable bit and desktop launcher, window dragging/close behavior, retry button after +port release, native directory picker, and visual/loading checks. P2 evidence is incomplete while +any manual item remains `pending`. diff --git a/frontends/desktop/e2e/macos/Invoke-macOSUserJourney.sh b/frontends/desktop/e2e/macos/Invoke-macOSUserJourney.sh new file mode 100644 index 000000000..231cd00fd --- /dev/null +++ b/frontends/desktop/e2e/macos/Invoke-macOSUserJourney.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + echo "Usage: $0 --artifact --expected-commit [--work-dir ]" >&2 +} + +artifact="" +expected_commit="" +work_dir="" +keep_work_dir=0 +while [[ $# -gt 0 ]]; do + case "$1" in + --artifact) artifact="$2"; shift 2 ;; + --expected-commit) expected_commit="$2"; shift 2 ;; + --work-dir) work_dir="$2"; shift 2 ;; + --keep-work-dir) keep_work_dir=1; shift ;; + *) usage; exit 2 ;; + esac +done + +[[ -n "$artifact" && -n "$expected_commit" ]] || { usage; exit 2; } +artifact="$(cd "$(dirname "$artifact")" && pwd)/$(basename "$artifact")" +[[ -f "$artifact" ]] || { echo "Artifact not found: $artifact" >&2; exit 1; } +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +driver="$script_dir/../package/real_package_journey.py" +if [[ -z "$work_dir" ]]; then + work_dir="$(mktemp -d -t ga-macos-package-e2e.XXXXXX)" +else + mkdir -p "$work_dir" + work_dir="$(cd "$work_dir" && pwd)" +fi +report_dir="$work_dir/report" +driver_work="$work_dir/driver-work" +mount_point="$work_dir/dmg" +install_app="/Applications/GenericAgent P2 E2E $$.app" +mounted=0 +mkdir -p "$report_dir" "$driver_work" "$mount_point" + +cleanup() { + if [[ $mounted -eq 1 ]]; then + hdiutil detach "$mount_point" -quiet || true + fi + if [[ -d "$install_app" ]]; then + rm -rf -- "$install_app" + fi + if [[ $keep_work_dir -eq 1 ]]; then + echo "Work directory kept at $work_dir" + else + echo "Evidence kept at $report_dir" + fi +} +trap cleanup EXIT + +[[ ! -e "$install_app" ]] || { echo "Refusing to replace existing app: $install_app" >&2; exit 1; } +sidecar="$artifact.sha256" +[[ -f "$sidecar" ]] || { echo "macOS SHA-256 sidecar not found: $sidecar" >&2; exit 1; } +expected_hash="$(grep -Eo '[0-9a-fA-F]{64}' "$sidecar" | head -n 1 | tr '[:upper:]' '[:lower:]')" +actual_hash="$(shasum -a 256 "$artifact" | awk '{print $1}')" +[[ "$actual_hash" == "$expected_hash" ]] || { echo "Artifact SHA-256 mismatch" >&2; exit 1; } + +hdiutil attach "$artifact" -mountpoint "$mount_point" -nobrowse -readonly -quiet +mounted=1 +source_app="$(find "$mount_point" -mindepth 1 -maxdepth 1 -type d -name '*.app' | head -n 1)" +[[ -n "$source_app" ]] || { echo "DMG does not contain an application" >&2; exit 1; } +ditto "$source_app" "$install_app" +hdiutil detach "$mount_point" -quiet +mounted=0 + +binary="$(find "$install_app/Contents/MacOS" -mindepth 1 -maxdepth 1 -type f -perm -111 | head -n 1)" +[[ -n "$binary" ]] || { echo "Installed application has no executable" >&2; exit 1; } +binary_relative="${binary#"$install_app"/}" + +python3 "$driver" \ + --platform macos \ + --artifact "$artifact" \ + --expected-commit "$expected_commit" \ + --package-root "$install_app" \ + --application-relative "$binary_relative" \ + --runtime-relative "Contents/Resources/runtime" \ + --relocated-root "$work_dir/relocated/含 空格/GenericAgent 已移动.app" \ + --report-dir "$report_dir" \ + --work-dir "$driver_work" \ + --allow-user-settings-mutation \ + --allow-external-package diff --git a/frontends/desktop/e2e/macos/README.md b/frontends/desktop/e2e/macos/README.md new file mode 100644 index 000000000..b43c03856 --- /dev/null +++ b/frontends/desktop/e2e/macos/README.md @@ -0,0 +1,27 @@ +# macOS 15 DMG release-package journey + +Run this on a real macOS 15 machine in a dedicated test account. The wrapper mounts the DMG, +copies its app into `/Applications` under a collision-safe E2E name, launches the production +binary, and later moves that exact app to a path containing spaces and Chinese characters. + +```bash +frontends/desktop/e2e/macos/Invoke-macOSUserJourney.sh \ + --artifact /path/GenericAgent-Desktop-macOS-aarch64.dmg \ + --expected-commit \ + --keep-work-dir +``` + +The release workflow builds this artifact on the explicit macOS 15 arm64 runner and names it +`aarch64`; it is not an Intel/universal binary. The app is ad-hoc signed only, not Developer ID +signed or notarized. + +In addition to the shared chat/data/port/relocation checks, this journey hard-fails if the DMG +does not contain the build-time `.prepared` marker or if any file inside the `.app` changes from +first launch through restart and relocation. It verifies the package bridge remains inside the +app while `GA_ROOT` points at an external core, then verifies a deleted override falls back to the +stable writable runtime at `~/Library/Application Support/GenericAgent/runtime/app`. + +After automation, mark the manual report items `pass`: Gatekeeper/open-anyway, traffic lights, +focus, retry button after port release, native directory picker, and visual/loading checks. The +wrapper restores the settings file exactly and removes its temporary `/Applications` copy; run it +only in a dedicated account because the normal Application Support runtime may be created. diff --git a/frontends/desktop/e2e/package/README.md b/frontends/desktop/e2e/package/README.md new file mode 100644 index 000000000..79c30f2e2 --- /dev/null +++ b/frontends/desktop/e2e/package/README.md @@ -0,0 +1,28 @@ +# P2 release-package evidence gate + +`real_package_journey.py` is the common L5 runner. Platform wrappers install or extract one +artifact produced from a candidate commit and invoke this runner against the production binary. +It temporarily uses the real per-user settings path, restores it byte-for-byte, and therefore +must run in a dedicated Windows/Linux/macOS test account. + +Every platform report records the candidate commit, artifact SHA-256, OS/architecture, bootstrap +snapshots, bridge identity/PIDs, package paths before and after relocation, screenshots, redacted +fake-model transcript, data results, cleanup status, and the short manual checklist. Automated +success does not imply P2 completion: testers must change every manual checklist value to `pass`. + +After all three reports and the Windows native retry report are complete, combine them: + +```bash +python3 frontends/desktop/e2e/package/verify_candidate_evidence.py \ + --expected-commit \ + --windows \ + --linux \ + --macos \ + --windows-native-report \ + --output +``` + +The verifier fails on a commit mismatch, missing artifact digest, failed automated scenario, +incomplete bootstrap evidence, missing macOS app immutability proof, unfinished manual checklist, +or unclean final process/port state. The manifest is evidence for the candidate SHA; it is not +intended to be committed to the repository. diff --git a/frontends/desktop/e2e/package/real_package_journey.py b/frontends/desktop/e2e/package/real_package_journey.py new file mode 100644 index 000000000..828350f04 --- /dev/null +++ b/frontends/desktop/e2e/package/real_package_journey.py @@ -0,0 +1,1031 @@ +#!/usr/bin/env python3 +"""Cross-platform release-package journey for GenericAgent Desktop 2.0. + +This runner deliberately exercises a production binary and its packaged runtime. It does +not import product code from the checkout and it does not require network access. The +platform wrappers are responsible for extracting/installing the artifact and then pass the +application/runtime paths here. + +The production binary uses the real per-user settings file, so the runner refuses to start +without an explicit acknowledgement. It backs up that file byte-for-byte and restores it in +``finally``. Run this only in a dedicated OS test account: macOS may also create its normal +stable writable runtime under Application Support during the stale-override fallback test. +""" + +from __future__ import annotations + +import argparse +import base64 +import contextlib +import hashlib +import http.server +import json +import os +import platform +import plistlib +import shutil +import socket +import subprocess +import sys +import threading +import time +import urllib.error +import urllib.request +from pathlib import Path +from typing import Any + + +BRIDGE_HOST = "127.0.0.1" +DEFAULT_BRIDGE_PORT = 14168 +BRIDGE_PORT = DEFAULT_BRIDGE_PORT +BRIDGE_BASE = f"http://{BRIDGE_HOST}:{BRIDGE_PORT}" +RELEASE_VERSION = "0.2.0" +CONDUCTOR_SERVICE_ID = "frontends/conductor.py" +DEFAULT_CONDUCTOR_PORT = 8900 +E2E_CONDUCTOR_PORT_ENV = "GA_DESKTOP_E2E_CONDUCTOR_PORT" + + +class JourneyFailure(RuntimeError): + pass + + +def utc_now() -> str: + return time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()) + + +def sha256(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as stream: + for chunk in iter(lambda: stream.read(1024 * 1024), b""): + digest.update(chunk) + return digest.hexdigest() + + +def canonical(path: Path | str) -> Path: + return Path(path).expanduser().resolve() + + +def is_within(child: Path | str, parent: Path | str) -> bool: + try: + canonical(child).relative_to(canonical(parent)) + return True + except (OSError, ValueError): + return False + + +def read_json(path: Path, default: Any = None) -> Any: + try: + return json.loads(path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError): + return default + + +def write_json(path: Path, value: Any) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(value, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + + +def read_macos_bundle_versions(package_root: Path) -> tuple[str, str]: + info_path = package_root / "Contents" / "Info.plist" + try: + with info_path.open("rb") as stream: + info = plistlib.load(stream) + except (OSError, plistlib.InvalidFileException, TypeError, ValueError) as error: + raise JourneyFailure(f"macOS application Info.plist is missing or invalid: {info_path}") from error + if not isinstance(info, dict): + raise JourneyFailure(f"macOS application Info.plist is missing or invalid: {info_path}") + + values = { + "CFBundleShortVersionString": info.get("CFBundleShortVersionString"), + "CFBundleVersion": info.get("CFBundleVersion"), + } + for key, value in values.items(): + if not isinstance(value, str) or value != RELEASE_VERSION: + raise JourneyFailure(f"macOS {key} is {value!r}; expected {RELEASE_VERSION!r}") + return values["CFBundleShortVersionString"], values["CFBundleVersion"] + + +def request_json(method: str, path: str, body: Any = None, timeout: float = 5.0) -> Any: + payload = None if body is None else json.dumps(body).encode("utf-8") + request = urllib.request.Request(f"{BRIDGE_BASE}{path}", data=payload, method=method) + if payload is not None: + request.add_header("Content-Type", "application/json") + with urllib.request.urlopen(request, timeout=timeout) as response: + return json.loads(response.read().decode("utf-8")) + + +def request_json_with_status( + method: str, + path: str, + body: Any = None, + timeout: float = 5.0, +) -> tuple[int, Any]: + """Return an intentional HTTP error as JSON without treating it as a retry signal.""" + payload = None if body is None else json.dumps(body).encode("utf-8") + request = urllib.request.Request(f"{BRIDGE_BASE}{path}", data=payload, method=method) + if payload is not None: + request.add_header("Content-Type", "application/json") + try: + with urllib.request.urlopen(request, timeout=timeout) as response: + status = int(response.status) + raw = response.read() + except urllib.error.HTTPError as error: + status = int(error.code) + raw = error.read() + error.close() + try: + value = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as error: + raise JourneyFailure(f"{method} {path} returned HTTP {status} without valid JSON") from error + return status, value + + +def completed_assistant_reply(snapshot: Any) -> str | None: + if not isinstance(snapshot, dict): + raise JourneyFailure("chat messages response is not an object") + status = snapshot.get("status") + if status in {"error", "cancelled"}: + detail = snapshot.get("lastError") or status + raise JourneyFailure(f"chat entered terminal state {status}: {detail}") + messages = snapshot.get("messages") + if not isinstance(messages, list): + raise JourneyFailure("chat messages response has no messages list") + reply = next( + ( + content + for message in reversed(messages) + if isinstance(message, dict) + and message.get("role") == "assistant" + and isinstance((content := message.get("content")), str) + and "Harness reply" in content + ), + None, + ) + if reply is None: + return None + if status != "idle" or snapshot.get("hasUnfinishedWork") is not False: + return None + return reply + + +def validate_import_maintenance_conflict(status: int, payload: Any) -> list[str]: + if status != 409 or not isinstance(payload, dict): + raise JourneyFailure(f"initial memory import was not the expected HTTP 409: {status} {payload}") + if payload.get("ok") is not False or payload.get("code") != "maintenance_conflict": + raise JourneyFailure(f"initial memory import returned the wrong conflict: {payload}") + if payload.get("runningSessions") != []: + raise JourneyFailure(f"memory import still saw unfinished Desktop sessions: {payload}") + running_extras = payload.get("runningExtras") + if ( + not isinstance(running_extras, list) + or not running_extras + or any(not isinstance(item, str) or not item for item in running_extras) + or len(running_extras) != len(set(running_extras)) + or CONDUCTOR_SERVICE_ID not in running_extras + ): + raise JourneyFailure(f"memory import did not identify the running conductor: {payload}") + return running_extras + + +def verified_stopped_extras_panel(payload: Any, expected_ids: list[str]) -> dict[str, Any] | None: + if not isinstance(payload, dict) or not expected_ids: + return None + services = payload.get("services") + if not isinstance(services, list): + return None + states: dict[str, dict[str, Any]] = {} + for item in services: + if not isinstance(item, dict) or not isinstance(item.get("id"), str): + continue + service_id = item["id"] + if service_id in states: + return None + states[service_id] = item + for service_id in expected_ids: + state = states.get(service_id) + if ( + state is None + or state.get("running") is not False + or state.get("status") != "offline" + ): + return None + return payload + + +def verified_owned_conductor( + payload: Any, + expected_port: int, + port_is_listening: bool, +) -> dict[str, Any] | None: + """Return the one live conductor owned by this bridge, never an external listener.""" + if port_is_listening is not True or not isinstance(payload, dict): + return None + services = payload.get("services") + if not isinstance(services, list): + return None + matches = [ + item + for item in services + if isinstance(item, dict) and item.get("id") == CONDUCTOR_SERVICE_ID + ] + if len(matches) != 1: + return None + state = matches[0] + pid = state.get("pid") + if ( + state.get("status") != "running" + or state.get("running") is not True + or state.get("owned") is not True + or state.get("external") is not False + or state.get("port") != expected_port + or not isinstance(pid, int) + or isinstance(pid, bool) + or pid <= 0 + ): + return None + return state + + +def wait_until(label: str, predicate, timeout: float, interval: float = 0.25) -> Any: + deadline = time.monotonic() + timeout + last_error: BaseException | None = None + while time.monotonic() < deadline: + try: + value = predicate() + if value: + return value + except (OSError, ValueError, urllib.error.URLError, json.JSONDecodeError) as error: + last_error = error + time.sleep(interval) + suffix = f": {last_error}" if last_error else "" + raise JourneyFailure(f"timed out waiting for {label}{suffix}") + + +def loopback_port_is_free(port: int) -> bool: + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as probe: + probe.settimeout(0.25) + return probe.connect_ex((BRIDGE_HOST, port)) != 0 + + +def port_is_free() -> bool: + return loopback_port_is_free(BRIDGE_PORT) + + +def allocate_isolated_conductor_port() -> int: + for _ in range(20): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as reservation: + reservation.bind((BRIDGE_HOST, 0)) + port = int(reservation.getsockname()[1]) + if port not in {BRIDGE_PORT, DEFAULT_BRIDGE_PORT, DEFAULT_CONDUCTOR_PORT}: + return port + raise JourneyFailure("could not allocate an isolated conductor port") + + +def pid_is_alive(pid: int) -> bool: + if pid <= 0: + return False + try: + os.kill(pid, 0) + except ProcessLookupError: + return False + except PermissionError: + return True + except OSError: + return False + return True + + +class FakeOpenAIHandler(http.server.BaseHTTPRequestHandler): + protocol_version = "HTTP/1.1" + + def log_message(self, _format: str, *_args: Any) -> None: + return + + def do_POST(self) -> None: # noqa: N802 - stdlib callback name + length = int(self.headers.get("Content-Length", "0")) + raw = self.rfile.read(length) + try: + body = json.loads(raw or b"{}") + except json.JSONDecodeError: + body = {} + self.server.transcript.append({ # type: ignore[attr-defined] + "path": self.path, + "model": body.get("model", ""), + "authorization": "[redacted]" if self.headers.get("Authorization") else "", + "at": utc_now(), + }) + events = [ + {"choices": [{"delta": {"content": "Harness reply"}}]}, + { + "choices": [], + "usage": { + "prompt_tokens": 101, + "completion_tokens": 17, + "prompt_tokens_details": {"cached_tokens": 11}, + }, + }, + ] + data = "".join(f"data: {json.dumps(event)}\n\n" for event in events) + data += "data: [DONE]\n\n" + encoded = data.encode("utf-8") + self.send_response(200) + self.send_header("Content-Type", "text/event-stream; charset=utf-8") + self.send_header("Content-Length", str(len(encoded))) + self.send_header("Connection", "close") + self.end_headers() + self.wfile.write(encoded) + + +class FakeOpenAI: + def __init__(self) -> None: + self.server = http.server.ThreadingHTTPServer((BRIDGE_HOST, 0), FakeOpenAIHandler) + self.server.transcript = [] # type: ignore[attr-defined] + self.thread = threading.Thread(target=self.server.serve_forever, daemon=True) + self.started = False + + @property + def base_url(self) -> str: + return f"http://{BRIDGE_HOST}:{self.server.server_port}" + + @property + def transcript(self) -> list[dict[str, Any]]: + return list(self.server.transcript) # type: ignore[attr-defined] + + def start(self) -> None: + self.thread.start() + self.started = True + + def stop(self) -> None: + if self.started: + self.server.shutdown() + self.server.server_close() + if self.started: + self.thread.join(timeout=5) + + +class ForeignIdentityHandler(http.server.BaseHTTPRequestHandler): + def log_message(self, _format: str, *_args: Any) -> None: + return + + def do_GET(self) -> None: # noqa: N802 - stdlib callback name + payload = json.dumps({"service": "foreign-p2-package-listener", "pid": os.getpid()}).encode() + self.send_response(200) + self.send_header("Content-Type", "application/json") + self.send_header("Content-Length", str(len(payload))) + self.end_headers() + self.wfile.write(payload) + + +def fake_mykey(base_url: str) -> str: + return "\n".join( + [ + "native_oai_config = {", + " 'name': 'GenericAgent package E2E',", + " 'apikey': 'e2e-dummy-key',", + f" 'apibase': {str(base_url + '/v1')!r},", + " 'model': 'e2e-model',", + " 'api_mode': 'chat_completions',", + " 'stream': True,", + " 'max_retries': 0,", + " 'connect_timeout': 2,", + " 'read_timeout': 30,", + "}", + "", + ] + ) + + +def tree_snapshot(root: Path) -> dict[str, tuple[int, int]]: + snapshot: dict[str, tuple[int, int]] = {} + for path in sorted(root.rglob("*")): + if path.is_file() and not path.is_symlink(): + stat = path.stat() + snapshot[path.relative_to(root).as_posix()] = (stat.st_size, stat.st_mtime_ns) + return snapshot + + +def capture_screenshot(target: Path) -> bool: + target.parent.mkdir(parents=True, exist_ok=True) + system = platform.system() + commands: list[list[str]] = [] + if system == "Darwin": + commands = [["screencapture", "-x", str(target)]] + elif system == "Linux": + commands = [ + ["gnome-screenshot", "-f", str(target)], + ["scrot", str(target)], + ["import", "-window", "root", str(target)], + ] + for command in commands: + if not shutil.which(command[0]): + continue + completed = subprocess.run(command, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + if completed.returncode == 0 and target.is_file() and target.stat().st_size > 0: + return True + return False + + +class Journey: + def __init__(self, args: argparse.Namespace) -> None: + self.args = args + self.package_root = canonical(args.package_root) + self.application_relative = Path(args.application_relative) + self.runtime_relative = Path(args.runtime_relative) + self.runtime_root = self.package_root / self.runtime_relative + self.application = self.package_root / self.application_relative + self.report_dir = canonical(args.report_dir) + self.work_dir = canonical(args.work_dir) + self.settings_path = Path.home() / ".ga_desktop_settings.json" + self.settings_existed = self.settings_path.exists() + self.settings_bytes = self.settings_path.read_bytes() if self.settings_existed else b"" + self.settings_mode = self.settings_path.stat().st_mode if self.settings_existed else None + self.conductor_port = allocate_isolated_conductor_port() + self.default_conductor_port_initially_free = loopback_port_is_free(DEFAULT_CONDUCTOR_PORT) + self.fake = FakeOpenAI() + self.external_root = self.work_dir / "external compatible core" + self.stale_root = self.work_dir / "external compatible core.removed" + self.process: subprocess.Popen[bytes] | None = None + self.process_log = None + self.foreign_server: http.server.ThreadingHTTPServer | None = None + self.foreign_thread: threading.Thread | None = None + self.screenshots: list[str] = [] + self.app_snapshot: dict[str, tuple[int, int]] | None = None + self.report: dict[str, Any] = { + "schemaVersion": 1, + "startedAt": utc_now(), + "expectedCommit": args.expected_commit, + "releaseVersion": RELEASE_VERSION, + "artifact": {}, + "environment": { + "system": platform.system(), + "release": platform.release(), + "version": platform.version(), + "architecture": platform.machine(), + "python": platform.python_version(), + "isolatedConductorPort": self.conductor_port, + "defaultConductorPortInitiallyFree": self.default_conductor_port_initially_free, + }, + "paths": {"before": str(self.package_root)}, + "checks": {}, + "bootstrap": {}, + "identities": {}, + "pids": [], + "screenshots": self.screenshots, + "manualChecklist": self.manual_checklist(args.platform), + "failures": [], + } + + @staticmethod + def manual_checklist(system: str) -> dict[str, str]: + common = { + "loadingFallbackAndMainRender": "pending", + "nativeDirectoryPicker": "pending", + "noVisualRegression": "pending", + } + platform_items = { + "windows": { + "framelessTitlebarAndThreeButtons": "pending", + "trayAndCloseHides": "pending", + "shortcutSelfHealsAfterMove": "pending", + }, + "linux": { + "appImageExecutableAndDesktopLauncher": "pending", + "windowDragAndCloseBehavior": "pending", + "retryButtonAfterPortRelease": "pending", + }, + "macos": { + "gatekeeperOrOpenAnyway": "pending", + "trafficLightsAndWindowFocus": "pending", + "retryButtonAfterPortRelease": "pending", + }, + } + return {**common, **platform_items[system]} + + def check_package_shape(self) -> None: + required = [ + self.application, + self.runtime_root / "app" / "agentmain.py", + self.runtime_root / "app" / "frontends" / "desktop_bridge.py", + self.runtime_root / "app" / "frontends" / "desktop" / "static" / "index.html", + ] + python = self.runtime_root / "python" / ("python.exe" if self.args.platform == "windows" else "bin/python3") + required.append(python) + missing = [str(path) for path in required if not path.exists()] + if missing: + raise JourneyFailure(f"package paths are missing: {missing}") + source_package_json = self.runtime_root / "app" / "frontends" / "desktop" / "package.json" + if source_package_json.exists(): + raise JourneyFailure(f"runtime contains excluded Desktop source metadata: {source_package_json}") + if self.args.platform == "macos" and not (self.runtime_root / ".prepared").is_file(): + raise JourneyFailure("macOS package has no build-time .prepared marker") + if self.args.platform == "macos": + short_version, bundle_version = read_macos_bundle_versions(self.package_root) + self.report["checks"]["packagedVersion"] = short_version + self.report["checks"]["packagedBundleVersion"] = bundle_version + self.report["checks"]["packageShape"] = True + + def prepare_external_root(self) -> None: + if self.external_root.exists() or self.stale_root.exists(): + raise JourneyFailure(f"test work directory is not clean: {self.work_dir}") + shutil.copytree(self.runtime_root / "app", self.external_root, symlinks=True) + (self.external_root / "mykey.py").write_text(fake_mykey(self.fake.base_url), encoding="utf-8") + write_json( + self.settings_path, + {"lang": "en", "ga_source_override": str(self.external_root), "ui": {"llmNo": 0}}, + ) + + def scenario_dir(self, name: str) -> Path: + path = self.report_dir / "bootstrap" / name + path.mkdir(parents=True, exist_ok=True) + return path + + def start_application(self, scenario: str) -> None: + if self.process is not None: + raise JourneyFailure("application is already running") + if not loopback_port_is_free(self.conductor_port): + raise JourneyFailure( + f"isolated conductor port {self.conductor_port} is occupied before {scenario}" + ) + report = self.scenario_dir(scenario) + log_path = self.report_dir / "logs" / f"{scenario}.log" + log_path.parent.mkdir(parents=True, exist_ok=True) + self.process_log = log_path.open("wb") + env = os.environ.copy() + env["GA_DESKTOP_E2E_REPORT_DIR"] = str(report) + env[E2E_CONDUCTOR_PORT_ENV] = str(self.conductor_port) + self.process = subprocess.Popen( + [str(self.application)], + cwd=str(self.package_root), + env=env, + stdout=self.process_log, + stderr=subprocess.STDOUT, + ) + self.report["pids"].append({"scenario": scenario, "app": self.process.pid}) + + def stop_application(self) -> None: + process_record = self.report["pids"][-1] if self.report["pids"] else None + with contextlib.suppress(Exception): + request_json("POST", "/services/bridge/exit", {}, timeout=2) + if self.process is not None: + with contextlib.suppress(subprocess.TimeoutExpired): + self.process.terminate() + self.process.wait(timeout=8) + if self.process.poll() is None: + self.process.kill() + self.process.wait(timeout=5) + self.process = None + if self.process_log is not None: + self.process_log.close() + self.process_log = None + wait_until("bridge port cleanup", port_is_free, 20) + wait_until( + "isolated conductor port cleanup", + lambda: loopback_port_is_free(self.conductor_port), + 20, + ) + if process_record is not None: + owned = { + kind: int(pid) + for kind in ("app", "bridge", "conductor") + if isinstance((pid := process_record.get(kind)), int) + and not isinstance(pid, bool) + and pid > 0 + } + wait_until( + f"{process_record.get('scenario', 'application')} owned processes to exit", + lambda: all(not pid_is_alive(pid) for pid in owned.values()), + 20, + ) + self.report["checks"].setdefault("ownedProcessStops", {})[ + str(process_record.get("scenario", "application")) + ] = owned + + def wait_ready(self, scenario: str, expected_root: Path | None) -> dict[str, Any]: + latest = self.scenario_dir(scenario) / "bootstrap-latest.json" + + def ready_snapshot() -> dict[str, Any] | None: + value = read_json(latest, {}) + if value.get("phase") == "failed": + raise JourneyFailure(f"bootstrap failed in {scenario}: {value.get('failure')}") + return value if value.get("phase") == "ready" else None + + snapshot = wait_until(f"{scenario} bootstrap ready", ready_snapshot, self.args.start_timeout) + + def expected_identity() -> dict[str, Any] | None: + value = request_json("GET", "/services/identity", timeout=2) + if not value.get("ga_root") or not value.get("app_dir") or not value.get("pid"): + return None + if expected_root is not None and canonical(value["ga_root"]) != canonical(expected_root): + return None + return value + + identity = wait_until(f"{scenario} bridge identity", expected_identity, 30) + if is_within(identity["app_dir"], self.external_root): + raise JourneyFailure("desktop bridge came from external GA_ROOT instead of the package") + expected_app_dir = self.runtime_root / "app" / "frontends" + if canonical(identity["app_dir"]) != canonical(expected_app_dir): + raise JourneyFailure( + f"package bridge app_dir mismatch: {identity['app_dir']} != {expected_app_dir}" + ) + build_id = str(identity.get("build_id", "")) + expected = self.args.expected_commit.strip().lower() + if expected and expected[:7] not in build_id.lower(): + raise JourneyFailure(f"bridge build_id {build_id!r} does not contain commit {expected[:7]}") + self.report["bootstrap"][scenario] = snapshot + self.report["identities"][scenario] = identity + self.report["pids"][-1]["bridge"] = identity["pid"] + conductor = wait_until( + f"{scenario} owned isolated conductor", + lambda: verified_owned_conductor( + request_json("GET", "/services/panel", timeout=5), + self.conductor_port, + not loopback_port_is_free(self.conductor_port), + ), + 30, + 0.25, + ) + self.report["pids"][-1]["conductor"] = conductor["pid"] + ownership = self.report["checks"].setdefault("isolatedConductorOwnership", {}) + ownership[scenario] = conductor + return identity + + def run_chat_upload_memory(self) -> None: + session = request_json("POST", "/session/new", {"cwd": str(self.external_root)}) + sid = session.get("sessionId") + if not sid: + raise JourneyFailure(f"session creation failed: {session}") + tiny_png = base64.b64encode( + b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01" + ).decode() + uploaded = request_json( + "POST", + "/upload", + {"name": "p2.png", "dataUrl": f"data:image/png;base64,{tiny_png}", "sid": sid}, + ) + upload_path = Path(str(uploaded.get("path", ""))) + if not uploaded.get("ok") or not upload_path.is_file() or not is_within(upload_path, self.external_root): + raise JourneyFailure(f"package upload did not stay under GA_ROOT: {uploaded}") + accepted = request_json( + "POST", + f"/session/{sid}/prompt", + {"prompt": "[E2E:normal] release package smoke", "display": "release package smoke"}, + ) + if not accepted.get("ok"): + raise JourneyFailure(f"chat prompt was rejected: {accepted}") + + def assistant_reply() -> str | None: + value = request_json("GET", f"/session/{sid}/messages?limit=20", timeout=3) + return completed_assistant_reply(value) + + wait_until("deterministic package chat reply", assistant_reply, 90, 0.5) + if not self.fake.transcript: + raise JourneyFailure("fake model received no request") + + source = self.work_dir / "memory import source" + source_memory = source / "memory" + source_responses = source / "temp" / "model_responses" + source_sessions = source / "temp" / "desktop_sessions" + destination_memory = self.external_root / "memory" + destination_responses = self.external_root / "temp" / "model_responses" + for directory in (source_memory, source_responses, source_sessions, destination_memory, destination_responses): + directory.mkdir(parents=True, exist_ok=True) + (destination_memory / "p2-package-memory.txt").write_text("before\n", encoding="utf-8") + (source_memory / "p2-package-memory.txt").write_text("after\n", encoding="utf-8") + (destination_responses / "shared.json").write_text("destination\n", encoding="utf-8") + (source_responses / "shared.json").write_text("source-must-not-win\n", encoding="utf-8") + (source_responses / "new.json").write_text("new\n", encoding="utf-8") + current_session_file = self.external_root / "temp" / "desktop_sessions" / f"{sid}.json" + wait_until("persisted package session", current_session_file.is_file, 10) + shutil.copy2(current_session_file, source_sessions / current_session_file.name) + imported_sid = "sess-p2-package-imported" + write_json( + source_sessions / f"{imported_sid}.json", + { + "id": imported_sid, + "title": "P2 imported", + "messages": [], + "msg_seq": 0, + "cwd": str(source), + "created_at": time.time(), + "updated_at": time.time(), + }, + ) + imported_session_file = self.external_root / "temp" / "desktop_sessions" / f"{imported_sid}.json" + backup_parent = self.external_root / "temp" + + def import_target_snapshot() -> dict[str, Any]: + files: dict[str, bytes] = {} + for data_root in ( + destination_memory, + destination_responses, + self.external_root / "temp" / "desktop_sessions", + ): + if not data_root.exists(): + continue + for path in sorted(data_root.rglob("*")): + if path.is_file() and not path.is_symlink(): + files[path.relative_to(self.external_root).as_posix()] = path.read_bytes() + return { + "files": files, + "importedSessionExists": imported_session_file.exists(), + "backupDirectories": sorted( + path.name for path in backup_parent.glob("memory_import_backup_*") + ), + } + + before_conflict = import_target_snapshot() + conflict_status, conflict_payload = request_json_with_status( + "POST", + "/memory/import", + {"sourceDir": str(source)}, + timeout=20, + ) + running_extras = validate_import_maintenance_conflict(conflict_status, conflict_payload) + if import_target_snapshot() != before_conflict: + raise JourneyFailure("rejected memory import changed target data") + + stopped = request_json("POST", "/services/stop-extras", {}, timeout=20) + if not isinstance(stopped, dict) or stopped.get("ok") is not True: + raise JourneyFailure(f"managed extras stop request failed: {stopped}") + + def stopped_extras_panel() -> dict[str, Any] | None: + panel = request_json("GET", "/services/panel", timeout=5) + return verified_stopped_extras_panel(panel, running_extras) + + stopped_panel = wait_until( + "managed extras to stop before memory import", + stopped_extras_panel, + 30, + 0.25, + ) + result = request_json("POST", "/memory/import", {"sourceDir": str(source)}, timeout=20) + required_fields = { + "memoryCopied", + "responsesCopied", + "responsesSkipped", + "sessionsAdded", + "backupDir", + } + if not result.get("ok") or not required_fields.issubset(result): + raise JourneyFailure(f"memory import response contract failed: {result}") + backup_file = Path(result["backupDir"]) / "memory" / "p2-package-memory.txt" + if backup_file.read_text(encoding="utf-8") != "before\n": + raise JourneyFailure("memory import did not preserve the pre-import backup") + if (destination_memory / "p2-package-memory.txt").read_text(encoding="utf-8") != "after\n": + raise JourneyFailure("memory import did not overwrite memory") + if (destination_responses / "shared.json").read_text(encoding="utf-8") != "destination\n": + raise JourneyFailure("memory import overwrote an existing response") + if not (destination_responses / "new.json").is_file() or result["sessionsAdded"] != 1: + raise JourneyFailure(f"memory response/session merge failed: {result}") + self.report["checks"].update( + { + "deterministicChat": True, + "uploadUnderExternalRoot": True, + "memoryImportMaintenanceGate": { + "code": conflict_payload["code"], + "runningSessions": conflict_payload["runningSessions"], + "runningExtras": running_extras, + "stoppedPanel": stopped_panel, + }, + "memoryImport": result, + "fakeModelRequests": self.fake.transcript, + } + ) + + def run_port_conflict(self) -> None: + if not port_is_free(): + raise JourneyFailure("bridge port was not released before foreign-port test") + self.foreign_server = http.server.ThreadingHTTPServer( + (BRIDGE_HOST, BRIDGE_PORT), ForeignIdentityHandler + ) + self.foreign_thread = threading.Thread(target=self.foreign_server.serve_forever, daemon=True) + self.foreign_thread.start() + self.start_application("foreign-port") + latest = self.scenario_dir("foreign-port") / "bootstrap-latest.json" + + def failed_snapshot() -> dict[str, Any] | None: + value = read_json(latest, {}) + return value if value.get("phase") == "failed" else None + + failed = wait_until("foreign port bootstrap failure", failed_snapshot, 90) + if failed.get("failure", {}).get("code") != "port_conflict": + raise JourneyFailure(f"foreign port produced the wrong failure: {failed}") + if self.foreign_thread is None or not self.foreign_thread.is_alive(): + raise JourneyFailure("desktop terminated the foreign listener") + self.report["bootstrap"]["foreign-port"] = failed + self.report["checks"]["foreignListenerSurvived"] = True + screenshot = self.report_dir / "screenshots" / "foreign-port.png" + if capture_screenshot(screenshot): + self.screenshots.append(str(screenshot)) + if self.process is not None: + self.process.terminate() + with contextlib.suppress(subprocess.TimeoutExpired): + self.process.wait(timeout=8) + if self.process.poll() is None: + self.process.kill() + self.process = None + if self.process_log is not None: + self.process_log.close() + self.process_log = None + self.foreign_server.shutdown() + self.foreign_server.server_close() + self.foreign_server = None + if self.foreign_thread: + self.foreign_thread.join(timeout=5) + self.foreign_thread = None + wait_until("foreign port release", port_is_free, 10) + self.start_application("after-port-release") + self.wait_ready("after-port-release", self.external_root) + self.report["checks"]["portRecovery"] = "release-then-production-restart" + + def relocate_package(self) -> None: + self.stop_application() + destination = canonical(self.args.relocated_root) + if destination.exists(): + raise JourneyFailure(f"relocation target already exists: {destination}") + destination.parent.mkdir(parents=True, exist_ok=True) + shutil.move(str(self.package_root), str(destination)) + self.package_root = destination + self.application = destination / self.application_relative + self.runtime_root = destination / self.runtime_relative + self.report["paths"]["after"] = str(destination) + self.start_application("relocated") + identity = self.wait_ready("relocated", self.external_root) + if not is_within(identity["app_dir"], destination): + raise JourneyFailure("relocated package still reported the previous package path") + self.report["checks"]["relocation"] = True + + def stale_override_fallback(self) -> None: + self.stop_application() + self.external_root.rename(self.stale_root) + self.start_application("stale-override") + identity = self.wait_ready("stale-override", None) + if canonical(identity["ga_root"]) == canonical(self.external_root): + raise JourneyFailure("deleted GA_ROOT override did not fall back") + fallback = canonical(identity["ga_root"]) + if not (fallback / "agentmain.py").is_file(): + raise JourneyFailure(f"fallback GA_ROOT is not a usable core: {fallback}") + panel = request_json("GET", "/services/panel", timeout=5) + if "services" not in panel: + raise JourneyFailure(f"service panel failed with optional P2P dependencies absent: {panel}") + self.report["checks"]["staleOverrideFallback"] = str(fallback) + self.report["checks"]["optionalP2PDoesNotBlockReady"] = True + + def restore_settings(self) -> None: + if self.settings_existed: + self.settings_path.write_bytes(self.settings_bytes) + if self.settings_mode is not None: + os.chmod(self.settings_path, self.settings_mode) + else: + with contextlib.suppress(FileNotFoundError): + self.settings_path.unlink() + + def cleanup(self) -> None: + with contextlib.suppress(Exception): + self.stop_application() + with contextlib.suppress(Exception): + if self.foreign_server is not None: + self.foreign_server.shutdown() + self.foreign_server.server_close() + with contextlib.suppress(Exception): + if self.foreign_thread is not None: + self.foreign_thread.join(timeout=5) + with contextlib.suppress(Exception): + self.fake.stop() + with contextlib.suppress(Exception): + if self.stale_root.exists() and not self.external_root.exists(): + self.stale_root.rename(self.external_root) + self.restore_settings() + self.report["checks"]["settingsRestored"] = ( + self.settings_path.read_bytes() == self.settings_bytes + if self.settings_existed + else not self.settings_path.exists() + ) + self.report["checks"]["finalPortFree"] = port_is_free() + self.report["checks"]["finalConductorPortFree"] = loopback_port_is_free( + self.conductor_port + ) + self.report["checks"]["defaultConductorPortPreserved"] = ( + loopback_port_is_free(DEFAULT_CONDUCTOR_PORT) + == self.default_conductor_port_initially_free + ) + owned_pids = { + int(pid) + for item in self.report["pids"] + for pid in (item.get("app"), item.get("bridge"), item.get("conductor")) + if isinstance(pid, int) and pid > 0 + } + deadline = time.monotonic() + 10 + while any(pid_is_alive(pid) for pid in owned_pids) and time.monotonic() < deadline: + time.sleep(0.2) + alive_pids = sorted(pid for pid in owned_pids if pid_is_alive(pid)) + self.report["checks"]["finalAliveOwnedPids"] = alive_pids + self.report["checks"]["finalOwnedProcessesExited"] = not alive_pids + + def save_report(self, success: bool) -> None: + self.report["success"] = success + self.report["manualComplete"] = all( + value == "pass" for value in self.report["manualChecklist"].values() + ) + self.report["completedAt"] = utc_now() + write_json(self.report_dir / "real-package-report.json", self.report) + + def run(self) -> None: + if not self.args.allow_user_settings_mutation: + raise JourneyFailure("pass --allow-user-settings-mutation in a dedicated OS test account") + if not port_is_free(): + raise JourneyFailure(f"{BRIDGE_HOST}:{BRIDGE_PORT} is already occupied before the test") + if not is_within(self.package_root, self.work_dir.parent) and not self.args.allow_external_package: + raise JourneyFailure("package root must be inside the test work area") + self.report_dir.mkdir(parents=True, exist_ok=True) + self.work_dir.mkdir(parents=True, exist_ok=True) + if self.args.artifact: + artifact = canonical(self.args.artifact) + self.report["artifact"] = { + "path": str(artifact), + "sha256": sha256(artifact), + "size": artifact.stat().st_size, + } + self.check_package_shape() + self.fake.start() + self.prepare_external_root() + if self.args.platform == "macos": + self.app_snapshot = tree_snapshot(self.package_root) + + self.start_application("first-launch") + self.wait_ready("first-launch", self.external_root) + ready_shot = self.report_dir / "screenshots" / "ready.png" + if capture_screenshot(ready_shot): + self.screenshots.append(str(ready_shot)) + self.run_chat_upload_memory() + + self.stop_application() + self.start_application("warm-restart") + self.wait_ready("warm-restart", self.external_root) + self.report["checks"]["warmRestart"] = True + + self.stop_application() + self.run_port_conflict() + self.relocate_package() + self.stale_override_fallback() + + if self.args.platform == "macos" and self.app_snapshot is not None: + after_snapshot = tree_snapshot(self.package_root) + if after_snapshot != self.app_snapshot: + changed = sorted(set(after_snapshot) ^ set(self.app_snapshot)) + changed += sorted( + key + for key in set(after_snapshot) & set(self.app_snapshot) + if after_snapshot[key] != self.app_snapshot[key] + ) + raise JourneyFailure(f"first launch modified the signed .app: {changed[:20]}") + self.report["checks"]["macAppImmutable"] = True + + if not self.args.screenshots_optional and len(self.screenshots) < 2: + raise JourneyFailure("real-package journey did not capture ready and failure screenshots") + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument("--platform", choices=("windows", "linux", "macos"), required=True) + parser.add_argument("--artifact", default="") + parser.add_argument("--expected-commit", required=True) + parser.add_argument("--package-root", required=True) + parser.add_argument("--application-relative", required=True) + parser.add_argument("--runtime-relative", required=True) + parser.add_argument("--relocated-root", required=True) + parser.add_argument("--report-dir", required=True) + parser.add_argument("--work-dir", required=True) + parser.add_argument("--start-timeout", type=float, default=300) + parser.add_argument("--allow-user-settings-mutation", action="store_true") + parser.add_argument("--allow-external-package", action="store_true") + parser.add_argument("--screenshots-optional", action="store_true") + return parser.parse_args() + + +def main() -> int: + args = parse_args() + journey = Journey(args) + success = False + try: + journey.run() + success = True + return 0 + except BaseException as error: # retain evidence for assertion and unexpected failures + journey.report["failures"].append(f"{type(error).__name__}: {error}") + print(f"real package journey failed: {error}", file=sys.stderr) + return 1 + finally: + with contextlib.suppress(BaseException): + journey.cleanup() + journey.save_report( + success + and journey.report["checks"].get("finalPortFree", False) + and journey.report["checks"].get("finalConductorPortFree", False) + and journey.report["checks"].get("defaultConductorPortPreserved", False) + ) + print(journey.report_dir / "real-package-report.json") + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/frontends/desktop/e2e/package/verify_candidate_evidence.py b/frontends/desktop/e2e/package/verify_candidate_evidence.py new file mode 100644 index 000000000..bf603a7a8 --- /dev/null +++ b/frontends/desktop/e2e/package/verify_candidate_evidence.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python3 +"""Combine three real-package reports and enforce the P2 candidate evidence gate.""" + +from __future__ import annotations + +import argparse +import json +import sys +from pathlib import Path +from typing import Any + + +COMMON_CHECKS = ( + "packageShape", + "deterministicChat", + "uploadUnderExternalRoot", + "isolatedConductorOwnership", + "memoryImport", + "warmRestart", + "foreignListenerSurvived", + "portRecovery", + "relocation", + "staleOverrideFallback", + "optionalP2PDoesNotBlockReady", + "settingsRestored", + "finalPortFree", + "finalConductorPortFree", + "defaultConductorPortPreserved", + "ownedProcessStops", + "finalOwnedProcessesExited", +) + +SUCCESSFUL_APPLICATION_SCENARIOS = { + "first-launch", + "warm-restart", + "after-port-release", + "relocated", + "stale-override", +} + + +def load(path: str) -> dict[str, Any]: + target = Path(path).expanduser().resolve() + try: + value = json.loads(target.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError) as error: + raise ValueError(f"cannot read {target}: {error}") from error + if not isinstance(value, dict): + raise ValueError(f"report is not an object: {target}") + value["_path"] = str(target) + return value + + +def assert_report(name: str, report: dict[str, Any], expected_commit: str) -> list[str]: + failures: list[str] = [] + actual_commit = str(report.get("expectedCommit", "")).lower() + if actual_commit != expected_commit.lower(): + failures.append(f"{name}: commit {actual_commit!r} != {expected_commit!r}") + if report.get("releaseVersion") != "0.2.0": + failures.append(f"{name}: release version is not 0.2.0") + if report.get("success") is not True: + failures.append(f"{name}: automated journey did not pass") + if not str(report.get("artifact", {}).get("sha256", "")): + failures.append(f"{name}: artifact SHA-256 is missing") + checks = report.get("checks", {}) + for check in COMMON_CHECKS: + if not checks.get(check): + failures.append(f"{name}: required check {check} did not pass") + environment = report.get("environment") + isolated_port = ( + environment.get("isolatedConductorPort") if isinstance(environment, dict) else None + ) + if ( + not isinstance(isolated_port, int) + or isinstance(isolated_port, bool) + or not 1 <= isolated_port <= 65535 + or isolated_port in {8900, 14168} + ): + failures.append(f"{name}: isolated conductor port is missing or invalid") + ownership = checks.get("isolatedConductorOwnership") + if not isinstance(ownership, dict) or set(ownership) != SUCCESSFUL_APPLICATION_SCENARIOS: + failures.append(f"{name}: conductor ownership does not cover every successful launch") + elif isinstance(isolated_port, int): + for scenario, state in ownership.items(): + pid = state.get("pid") if isinstance(state, dict) else None + if ( + not isinstance(state, dict) + or state.get("status") != "running" + or state.get("running") is not True + or state.get("owned") is not True + or state.get("external") is not False + or state.get("port") != isolated_port + or not isinstance(pid, int) + or isinstance(pid, bool) + or pid <= 0 + ): + failures.append(f"{name}: invalid conductor ownership evidence for {scenario}") + stops = checks.get("ownedProcessStops") + if not isinstance(stops, dict) or set(stops) != SUCCESSFUL_APPLICATION_SCENARIOS: + failures.append(f"{name}: owned process stops do not cover every successful launch") + else: + for scenario, pids in stops.items(): + expected_conductor_pid = ( + ownership.get(scenario, {}).get("pid") if isinstance(ownership, dict) else None + ) + if ( + not isinstance(pids, dict) + or set(pids) != {"app", "bridge", "conductor"} + or any( + not isinstance(pid, int) or isinstance(pid, bool) or pid <= 0 + for pid in pids.values() + ) + or len(set(pids.values())) != 3 + or pids.get("conductor") != expected_conductor_pid + ): + failures.append(f"{name}: invalid owned process stop evidence for {scenario}") + if name == "macos" and checks.get("macAppImmutable") is not True: + failures.append("macos: signed .app immutability did not pass") + required_bootstrap = SUCCESSFUL_APPLICATION_SCENARIOS | {"foreign-port"} + missing_bootstrap = sorted(required_bootstrap - set(report.get("bootstrap", {}))) + if missing_bootstrap: + failures.append(f"{name}: missing bootstrap evidence {missing_bootstrap}") + pending = [key for key, value in report.get("manualChecklist", {}).items() if value != "pass"] + if pending: + failures.append(f"{name}: manual checklist is incomplete: {pending}") + if len(report.get("screenshots", [])) < 2 and name != "windows": + failures.append(f"{name}: fewer than two screenshots were recorded") + return failures + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--expected-commit", required=True) + parser.add_argument("--windows", required=True) + parser.add_argument("--linux", required=True) + parser.add_argument("--macos", required=True) + parser.add_argument("--windows-native-report", required=True) + parser.add_argument("--output", required=True) + args = parser.parse_args() + + reports = { + "windows": load(args.windows), + "linux": load(args.linux), + "macos": load(args.macos), + } + failures: list[str] = [] + for name, report in reports.items(): + failures.extend(assert_report(name, report, args.expected_commit)) + + windows_native = load(args.windows_native_report) + if windows_native.get("success") is not True: + failures.append("windows native wrapper did not pass") + if windows_native.get("checks", {}).get("portConflictRecovery") is not True: + failures.append("windows native retry path did not pass") + if windows_native.get("checks", {}).get("settingsRestored") is not True: + failures.append("windows native wrapper did not restore the original settings file") + native_pending = [ + key for key, value in windows_native.get("manualChecklist", {}).items() if value != "pass" + ] + if native_pending: + failures.append(f"windows native manual checklist is incomplete: {native_pending}") + + manifest = { + "schemaVersion": 1, + "candidateCommit": args.expected_commit, + "releaseVersion": "0.2.0", + "platforms": { + name: { + "report": report["_path"], + "artifactSha256": report.get("artifact", {}).get("sha256"), + "environment": report.get("environment"), + "success": report.get("success"), + } + for name, report in reports.items() + }, + "windowsNativeReport": windows_native["_path"], + "gate": "pass" if not failures else "fail", + "failures": failures, + } + output = Path(args.output).expanduser().resolve() + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(manifest, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + if failures: + for failure in failures: + print(f"FAIL: {failure}", file=sys.stderr) + return 1 + print(output) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/frontends/desktop/e2e/requirements.txt b/frontends/desktop/e2e/requirements.txt new file mode 100644 index 000000000..62a15c16f --- /dev/null +++ b/frontends/desktop/e2e/requirements.txt @@ -0,0 +1,8 @@ +pytest +aiohttp>=3.9 +requests>=2.28 +psutil +fastapi +uvicorn +websockets +pydantic diff --git a/frontends/desktop/e2e/windows/Invoke-WindowsUserJourney.ps1 b/frontends/desktop/e2e/windows/Invoke-WindowsUserJourney.ps1 new file mode 100644 index 000000000..89958f750 --- /dev/null +++ b/frontends/desktop/e2e/windows/Invoke-WindowsUserJourney.ps1 @@ -0,0 +1,662 @@ +[CmdletBinding()] +param( + [string]$Repo = "abraxas914/GenericAgent", + [Parameter(Mandatory = $true)] + [string]$RunId, + [string]$ExpectedCommit = "", + [string]$PackageZip = "", + [string]$WorkDir = "", + [ValidateSet("Full", "Smoke", "FailureOnly")] + [string]$Mode = "Full", + [switch]$KeepWorkDir +) + +$ErrorActionPreference = "Stop" +Set-StrictMode -Version 2.0 + +if (-not $WorkDir) { + $WorkDir = Join-Path $env:TEMP ("ga-desktop-e2e\run-" + $RunId) +} + +$ScriptRoot = Split-Path -Parent $MyInvocation.MyCommand.Path +$WorkDir = [System.IO.Path]::GetFullPath($WorkDir) +$DownloadDir = Join-Path $WorkDir "download" +$ExtractDir = Join-Path $WorkDir "app" +$ReportDir = Join-Path $WorkDir "report" +$ScreensDir = Join-Path $ReportDir "screenshots" +$ReportPath = Join-Path $ReportDir "e2e-report.json" +$RunSucceeded = $false +$PortWasFreeAtStart = $false +$UserHome = [Environment]::GetFolderPath([Environment+SpecialFolder]::UserProfile) +$SettingsPath = Join-Path $UserHome ".ga_desktop_settings.json" +$SettingsExisted = Test-Path -LiteralPath $SettingsPath +[byte[]]$SettingsBackupBytes = @() +$SettingsAttributes = $null +if ($SettingsExisted) { + $SettingsBackupBytes = [System.IO.File]::ReadAllBytes($SettingsPath) + $SettingsAttributes = [System.IO.File]::GetAttributes($SettingsPath) +} + +$Report = [ordered]@{ + repo = $Repo + runId = $RunId + expectedCommit = $ExpectedCommit + mode = $Mode + package = [ordered]@{} + environment = [ordered]@{} + checks = [ordered]@{} + screenshots = @() + manualChecklist = [ordered]@{ + windowsTitlebarVisible = "manual" + exactlyThreeWindowButtons = "manual" + titlebarBlankAreaDrags = "manual" + buttonAreaDoesNotDrag = "manual" + minimizeWorks = "manual" + maximizeRestoreWorks = "manual" + closeHidesToTray = "manual" + sidebarNavHasNoBlankRow = "manual" + nativeDirectoryPicker = "manual" + shortcutSelfHealsAfterMove = "manual" + loadingFallbackAndMainRender = "manual" + } + failures = @() + startedAt = (Get-Date).ToUniversalTime().ToString("o") +} + +function Write-Step([string]$Message) { + Write-Host "" + Write-Host "==> $Message" +} + +function Add-Failure([string]$Message) { + $script:Report.failures += $Message +} + +function Save-Report { + $script:Report.completedAt = (Get-Date).ToUniversalTime().ToString("o") + $json = $script:Report | ConvertTo-Json -Depth 12 + [System.IO.Directory]::CreateDirectory($ReportDir) | Out-Null + [System.IO.File]::WriteAllText($ReportPath, $json, [System.Text.UTF8Encoding]::new($false)) +} + +function Fail([string]$Message) { + Add-Failure $Message + Save-Report + throw $Message +} + +function Ensure-Dir([string]$Path) { + [System.IO.Directory]::CreateDirectory($Path) | Out-Null +} + +function Test-Command([string]$Name) { + $cmd = Get-Command $Name -ErrorAction SilentlyContinue + return $null -ne $cmd +} + +function Normalize-Commit([string]$Commit) { + return ($Commit -replace "\s", "").ToLowerInvariant() +} + +function Test-CommitMatches([string]$Actual, [string]$Expected) { + if (-not $Expected) { return $true } + $actualNorm = Normalize-Commit $Actual + $expectedNorm = Normalize-Commit $Expected + return $actualNorm.StartsWith($expectedNorm) -or $expectedNorm.StartsWith($actualNorm) +} + +function Get-RunMetadata { + if (-not (Test-Command "gh")) { + Fail "GitHub CLI 'gh' is required when -PackageZip is not enough to skip run metadata." + } + $json = & gh run view $RunId --repo $Repo --json headSha,status,conclusion,event,name 2>&1 + if ($LASTEXITCODE -ne 0) { + Fail "gh run view failed: $json" + } + $meta = ($json | Out-String) | ConvertFrom-Json + $script:Report.run = $meta + if ($ExpectedCommit -and -not (Test-CommitMatches $meta.headSha $ExpectedCommit)) { + Fail "Run headSha $($meta.headSha) does not match expected commit $ExpectedCommit" + } + return $meta +} + +function Resolve-PackageZip { + Ensure-Dir $DownloadDir + if ($PackageZip) { + $zipPath = [System.IO.Path]::GetFullPath($PackageZip) + if (-not (Test-Path -LiteralPath $zipPath)) { + Fail "Package zip not found: $zipPath" + } + return $zipPath + } + + if (-not (Test-Command "gh")) { + Fail "GitHub CLI 'gh' is required to download artifacts." + } + + Write-Step "Download GitHub Actions artifact" + $downloadOutput = & gh run download $RunId --repo $Repo --dir $DownloadDir 2>&1 + if ($LASTEXITCODE -ne 0) { + Fail "gh run download failed: $downloadOutput" + } + + $zips = @(Get-ChildItem -LiteralPath $DownloadDir -Recurse -Filter "GenericAgent-Desktop-Windows-Portable.zip") + if ($zips.Count -ne 1) { + Fail "Expected exactly one GenericAgent-Desktop-Windows-Portable.zip under $DownloadDir, found $($zips.Count)" + } + return $zips[0].FullName +} + +function Test-Sha256([string]$ZipPath) { + Write-Step "Verify SHA-256" + $hash = (Get-FileHash -LiteralPath $ZipPath -Algorithm SHA256).Hash.ToLowerInvariant() + $shaFile = $ZipPath + ".sha256" + if (-not (Test-Path -LiteralPath $shaFile)) { + $matches = @(Get-ChildItem -LiteralPath (Split-Path -Parent $ZipPath) -Recurse -File | Where-Object { + $_.Name -like "*.sha256" -or $_.Name -like "SHA256SUMS*.txt" + }) + if ($matches.Count -eq 1) { + $shaFile = $matches[0].FullName + } + } + if (Test-Path -LiteralPath $shaFile) { + $expectedText = [System.IO.File]::ReadAllText($shaFile) + $expectedHash = ([regex]::Match($expectedText, "[A-Fa-f0-9]{64}")).Value.ToLowerInvariant() + if (-not $expectedHash) { + Fail "Could not parse SHA-256 from $shaFile" + } + if ($hash -ne $expectedHash) { + Fail "SHA-256 mismatch. actual=$hash expected=$expectedHash" + } + $script:Report.package.sha256File = $shaFile + $script:Report.package.expectedSha256 = $expectedHash + } else { + Fail "SHA-256 sidecar not found next to $ZipPath" + } + $script:Report.package.sha256 = $hash +} + +function Expand-Package([string]$ZipPath) { + Write-Step "Extract package" + if (Test-Path -LiteralPath $ExtractDir) { + Remove-Item -LiteralPath $ExtractDir -Recurse -Force + } + Ensure-Dir $ExtractDir + Expand-Archive -LiteralPath $ZipPath -DestinationPath $ExtractDir -Force + + $packageRoot = Join-Path $ExtractDir "GenericAgent-Desktop-Windows-Portable" + if (-not (Test-Path -LiteralPath $packageRoot)) { + $dirs = @(Get-ChildItem -LiteralPath $ExtractDir -Directory) + if ($dirs.Count -eq 1) { + $packageRoot = $dirs[0].FullName + } + } + if (-not (Test-Path -LiteralPath $packageRoot)) { + Fail "Could not find extracted package root under $ExtractDir" + } + return [System.IO.Path]::GetFullPath($packageRoot) +} + +function Assert-PackageShape([string]$PackageRoot) { + Write-Step "Validate package structure" + $required = @( + "GenericAgent.exe", + "runtime\install_windows.ps1", + "runtime\wheels", + "runtime\python", + "runtime\app\frontends\desktop_bridge.py" + ) + foreach ($rel in $required) { + $path = Join-Path $PackageRoot $rel + if (-not (Test-Path -LiteralPath $path)) { + Fail "Package is missing required path: $rel" + } + } + $script:Report.package.root = $PackageRoot + $script:Report.package.exe = Join-Path $PackageRoot "GenericAgent.exe" + $script:Report.package.form = "windows-portable-zip" +} + +function Get-WindowsEnvironment { + $os = Get-CimInstance Win32_OperatingSystem + $cpu = Get-CimInstance Win32_Processor | Select-Object -First 1 + $arch = if ($env:PROCESSOR_ARCHITECTURE) { $env:PROCESSOR_ARCHITECTURE } else { [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture.ToString() } + return [ordered]@{ + caption = $os.Caption + version = $os.Version + buildNumber = $os.BuildNumber + architecture = $arch + cpu = $cpu.Name + userInteractive = [Environment]::UserInteractive + webView2Installed = Test-WebView2Installed + } +} + +function Test-WebView2Installed { + $keys = @( + "HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}", + "HKLM:\SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}", + "HKCU:\SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" + ) + foreach ($key in $keys) { + if (Test-Path $key) { return $true } + } + return $false +} + +function Get-PortState { + try { + $connections = @(Get-NetTCPConnection -LocalAddress "127.0.0.1" -LocalPort 14168 -ErrorAction SilentlyContinue) + return @($connections | Select-Object LocalAddress, LocalPort, State, OwningProcess) + } catch { + return @() + } +} + +function Get-GaProcesses { + return @(Get-Process | Where-Object { + $_.ProcessName -like "GenericAgent*" -or $_.ProcessName -like "ga-desktop*" -or $_.ProcessName -like "python*" + } | Select-Object ProcessName, Id, Path) +} + +function Stop-ProcessTreeSafe([int]$ProcessId) { + try { + Stop-Process -Id $ProcessId -Force -ErrorAction SilentlyContinue + } catch {} +} + +function Capture-Screenshot([string]$Name) { + Ensure-Dir $ScreensDir + $path = Join-Path $ScreensDir $Name + try { + Add-Type -AssemblyName System.Windows.Forms + Add-Type -AssemblyName System.Drawing + $bounds = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds + $bitmap = [System.Drawing.Bitmap]::new($bounds.Width, $bounds.Height) + $graphics = [System.Drawing.Graphics]::FromImage($bitmap) + $graphics.CopyFromScreen($bounds.Location, [System.Drawing.Point]::Empty, $bounds.Size) + $bitmap.Save($path, [System.Drawing.Imaging.ImageFormat]::Png) + $graphics.Dispose() + $bitmap.Dispose() + $script:Report.screenshots += $path + return $path + } catch { + Add-Failure "Screenshot failed for ${Name}: $($_.Exception.Message)" + return $null + } +} + +function Wait-ForBootstrapPhase( + [string]$ReportDirectory, + [string]$Phase, + [int]$TimeoutSeconds, + [int]$AfterSequence = 0 +) { + $latest = Join-Path $ReportDirectory "bootstrap-latest.json" + $deadline = (Get-Date).AddSeconds($TimeoutSeconds) + while ((Get-Date) -lt $deadline) { + if (Test-Path -LiteralPath $latest) { + try { + $snapshot = [System.IO.File]::ReadAllText($latest) | ConvertFrom-Json + if ([int]$snapshot.seq -le $AfterSequence) { + Start-Sleep -Milliseconds 500 + continue + } + if ($snapshot.phase -eq $Phase) { + return $snapshot + } + if ($Phase -ne "failed" -and $snapshot.phase -eq "failed") { + return $snapshot + } + } catch {} + } + Start-Sleep -Milliseconds 500 + } + return $null +} + +function Wait-ForBootstrapAnyPhase([string]$ReportDirectory, [string[]]$Phases, [int]$TimeoutSeconds) { + $latest = Join-Path $ReportDirectory "bootstrap-latest.json" + $deadline = (Get-Date).AddSeconds($TimeoutSeconds) + while ((Get-Date) -lt $deadline) { + if (Test-Path -LiteralPath $latest) { + try { + $snapshot = [System.IO.File]::ReadAllText($latest) | ConvertFrom-Json + if ($Phases -contains [string]$snapshot.phase) { + return $snapshot + } + } catch {} + } + Start-Sleep -Milliseconds 500 + } + return $null +} + +function Wait-ForBridgeIdentity([string]$ExpectedRoot, [int]$TimeoutSeconds) { + $deadline = (Get-Date).AddSeconds($TimeoutSeconds) + while ((Get-Date) -lt $deadline) { + try { + $identity = Invoke-RestMethod -Uri "http://127.0.0.1:14168/services/identity" -TimeoutSec 2 + if ($identity.ga_root) { + $reported = [System.IO.Path]::GetFullPath([string]$identity.ga_root).TrimEnd('\') + $expected = [System.IO.Path]::GetFullPath($ExpectedRoot).TrimEnd('\') + if ($reported.Equals($expected, [System.StringComparison]::OrdinalIgnoreCase)) { + return $identity + } + } + } catch {} + Start-Sleep -Milliseconds 700 + } + return $null +} + +function Start-GenericAgent([string]$PackageRoot, [string]$Scenario) { + $exe = Join-Path $PackageRoot "GenericAgent.exe" + $scenarioReportDir = Join-Path $ReportDir $Scenario + Ensure-Dir $scenarioReportDir + $env:GA_DESKTOP_E2E_REPORT_DIR = $scenarioReportDir + try { + return Start-Process -FilePath $exe -WorkingDirectory $PackageRoot -PassThru + } finally { + Remove-Item Env:\GA_DESKTOP_E2E_REPORT_DIR -ErrorAction SilentlyContinue + } +} + +function Stop-GenericAgent { + foreach ($proc in @(Get-Process GenericAgent -ErrorAction SilentlyContinue)) { + Stop-Process -Id $proc.Id -Force -ErrorAction SilentlyContinue + } + foreach ($proc in @(Get-Process ga-desktop -ErrorAction SilentlyContinue)) { + Stop-Process -Id $proc.Id -Force -ErrorAction SilentlyContinue + } +} + +function Stop-BridgeOnPort { + foreach ($conn in @(Get-PortState)) { + if ($conn.OwningProcess) { + try { + $proc = Get-Process -Id $conn.OwningProcess -ErrorAction Stop + if ($proc.ProcessName -like "python*" -or $proc.ProcessName -like "GenericAgent*" -or $proc.ProcessName -like "ga-desktop*") { + Stop-Process -Id $proc.Id -Force -ErrorAction SilentlyContinue + } + } catch {} + } + } +} + +function Invoke-FreshLaunch([string]$PackageRoot) { + Write-Step "Fresh launch and first-run prepare" + $marker = Join-Path $PackageRoot "runtime\.prepared" + if (Test-Path -LiteralPath $marker) { + Fail "Fresh package already has runtime\\.prepared before launch" + } + + $proc = Start-GenericAgent $PackageRoot "fresh" + $script:Report.checks.freshProcessId = $proc.Id + Start-Sleep -Seconds 2 + Capture-Screenshot "loading-first.png" | Out-Null + $prepSnapshot = Wait-ForBootstrapAnyPhase (Join-Path $ReportDir "fresh") @("preparing", "ready", "failed") 30 + if ($prepSnapshot -and $prepSnapshot.phase -eq "preparing") { + Capture-Screenshot "preparing.png" | Out-Null + } else { + $prepPhase = if ($prepSnapshot) { [string]$prepSnapshot.phase } else { "unavailable" } + $script:Report.checks.preparingScreenshot = "not captured; phase was $prepPhase" + } + + $snapshot = Wait-ForBootstrapPhase (Join-Path $ReportDir "fresh") "ready" 240 + if (-not $snapshot -or $snapshot.phase -ne "ready") { + Capture-Screenshot "fresh-failed.png" | Out-Null + Fail "Fresh launch did not reach bootstrap ready" + } + + if (-not (Test-Path -LiteralPath $marker)) { + Fail "Fresh launch reached ready but runtime\\.prepared was not created" + } + $identity = Wait-ForBridgeIdentity (Join-Path $PackageRoot "runtime\app") 30 + if (-not $identity) { + Fail "Bridge identity did not match extracted runtime app" + } + Capture-Screenshot "main-ready.png" | Out-Null + $script:Report.checks.freshReady = $true + $script:Report.checks.bridgeIdentity = $identity +} + +function Start-ForeignPortListener { + Write-Step "Start unknown foreign listener on 127.0.0.1:14168" + $ready = Join-Path $WorkDir "foreign-listener.ready" + Remove-Item -LiteralPath $ready -Force -ErrorAction SilentlyContinue + $fixture = Join-Path $ScriptRoot "fixtures\foreign-port-listener.ps1" + $proc = Start-Process -FilePath "powershell.exe" -ArgumentList @( + "-NoProfile", + "-ExecutionPolicy", "Bypass", + "-File", $fixture, + "-Port", "14168", + "-ReadyFile", $ready + ) -WindowStyle Hidden -PassThru + $deadline = (Get-Date).AddSeconds(20) + while ((Get-Date) -lt $deadline) { + if ((Test-Path -LiteralPath $ready) -and (Get-PortState).Count -gt 0) { + return $proc + } + Start-Sleep -Milliseconds 250 + } + Stop-ProcessTreeSafe $proc.Id + Fail "Foreign listener did not bind 127.0.0.1:14168" +} + +function Invoke-SetupRetry( + [System.Diagnostics.Process]$AppProcess, + [int]$TimeoutSeconds, + [int]$AfterSequence +) { + Add-Type -AssemblyName System.Windows.Forms + $sig = @" +using System; +using System.Runtime.InteropServices; +public static class Win32Focus { + [DllImport("user32.dll")] public static extern bool SetForegroundWindow(IntPtr hWnd); + [DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); +} +"@ + Add-Type -TypeDefinition $sig -ErrorAction SilentlyContinue + try { + $AppProcess.Refresh() + if ($AppProcess.MainWindowHandle -ne [IntPtr]::Zero) { + [Win32Focus]::ShowWindow($AppProcess.MainWindowHandle, 9) | Out-Null + [Win32Focus]::SetForegroundWindow($AppProcess.MainWindowHandle) | Out-Null + Start-Sleep -Milliseconds 500 + [System.Windows.Forms.SendKeys]::SendWait("{TAB}{TAB}{ENTER}") + } + } catch { + Add-Failure "Automatic setup retry keypress failed: $($_.Exception.Message)" + } + + $snapshot = Wait-ForBootstrapPhase ` + (Join-Path $ReportDir "port-conflict") "ready" $TimeoutSeconds $AfterSequence + if ($snapshot -and $snapshot.phase -eq "ready") { + $script:Report.checks.setupRetry = "automatic" + return $true + } + + Write-Host "" + Write-Host "Manual action required: click 'Retry startup' in the setup window." + $snapshot = Wait-ForBootstrapPhase ` + (Join-Path $ReportDir "port-conflict") "ready" 180 $AfterSequence + if ($snapshot -and $snapshot.phase -eq "ready") { + $script:Report.checks.setupRetry = "manual" + return $true + } + return $false +} + +function Invoke-PortConflictScenario([string]$PackageRoot) { + Write-Step "Port conflict recovery scenario" + Stop-GenericAgent + Stop-BridgeOnPort + Start-Sleep -Seconds 2 + + $listener = Start-ForeignPortListener + $script:Report.checks.foreignListenerPid = $listener.Id + $appProc = Start-GenericAgent $PackageRoot "port-conflict" + Start-Sleep -Seconds 2 + + $failed = Wait-ForBootstrapPhase (Join-Path $ReportDir "port-conflict") "failed" 80 + if (-not $failed -or $failed.phase -ne "failed") { + Stop-ProcessTreeSafe $listener.Id + Fail "Port conflict scenario did not reach failed phase" + } + if ($failed.failure.code -ne "port_conflict") { + Stop-ProcessTreeSafe $listener.Id + Fail "Expected port_conflict, got $($failed.failure.code)" + } + try { + Get-Process -Id $listener.Id -ErrorAction Stop | Out-Null + $script:Report.checks.foreignListenerSurvived = $true + } catch { + Fail "Foreign listener was not alive after port_conflict" + } + Capture-Screenshot "setup-failure.png" | Out-Null + + Stop-ProcessTreeSafe $listener.Id + Start-Sleep -Seconds 2 + if (-not (Invoke-SetupRetry $appProc 40 ([int]$failed.seq))) { + Fail "Setup retry did not reach ready after releasing port" + } + Capture-Screenshot "setup-retry-ready.png" | Out-Null + $script:Report.checks.portConflictRecovery = $true +} + +function Invoke-ProductionContractJourney( + [string]$PackageRoot, + [string]$ZipPath +) { + Write-Step "Run production package chat, data, relocation, and fallback journey" + if (-not $ExpectedCommit) { + Fail "Full mode requires -ExpectedCommit for the production build identity assertion" + } + Stop-GenericAgent + Stop-BridgeOnPort + Start-Sleep -Seconds 2 + + # The package itself must be movable while the journey is running. Running the driver + # with runtime\python\python.exe would keep that executable open and make Windows reject + # the relocation, so copy the already-prepared embedded interpreter outside the package. + $driverPythonRoot = Join-Path $WorkDir "production-contract-python" + if (Test-Path -LiteralPath $driverPythonRoot) { + Remove-Item -LiteralPath $driverPythonRoot -Recurse -Force + } + Copy-Item -LiteralPath (Join-Path $PackageRoot "runtime\python") ` + -Destination $driverPythonRoot -Recurse -Force + $python = Join-Path $driverPythonRoot "python.exe" + if (-not (Test-Path -LiteralPath $python)) { + Fail "Could not create an out-of-package Python for the relocation journey" + } + $driver = [System.IO.Path]::GetFullPath((Join-Path $ScriptRoot "..\package\real_package_journey.py")) + $contractReport = Join-Path $ReportDir "production-contract" + $contractWork = Join-Path $WorkDir "production-contract-work" + $relocated = Join-Path $ExtractDir "relocated\含 空格\GenericAgent 包" + & $python $driver ` + --platform windows ` + --artifact $ZipPath ` + --expected-commit $ExpectedCommit ` + --package-root $PackageRoot ` + --application-relative "GenericAgent.exe" ` + --runtime-relative "runtime" ` + --relocated-root $relocated ` + --report-dir $contractReport ` + --work-dir $contractWork ` + --allow-user-settings-mutation ` + --screenshots-optional + if ($LASTEXITCODE -ne 0) { + Fail "Production package contract journey failed; see $contractReport" + } + $script:Report.checks.productionContract = [System.IO.File]::ReadAllText( + (Join-Path $contractReport "real-package-report.json") + ) | ConvertFrom-Json +} + +try { + Ensure-Dir $WorkDir + Ensure-Dir $ReportDir + Ensure-Dir $ScreensDir + $Report.environment = Get-WindowsEnvironment + + if (-not $PackageZip) { + Write-Step "Read GitHub Actions run metadata" + Get-RunMetadata | Out-Null + } elseif ($ExpectedCommit) { + $Report.run = [ordered]@{ headSha = $ExpectedCommit; source = "local-package" } + } + + $zip = Resolve-PackageZip + $Report.package.zip = $zip + Test-Sha256 $zip + $packageRoot = Expand-Package $zip + Assert-PackageShape $packageRoot + $Report.environment.initialPortState = @(Get-PortState) + $Report.environment.initialProcesses = @(Get-GaProcesses) + if ($Report.environment.initialPortState.Count -gt 0) { + Fail "127.0.0.1:14168 was already occupied before the package journey" + } + $script:PortWasFreeAtStart = $true + + if ($Mode -eq "Smoke" -or $Mode -eq "Full") { + Invoke-FreshLaunch $packageRoot + } + if ($Mode -eq "FailureOnly" -or $Mode -eq "Full") { + Invoke-PortConflictScenario $packageRoot + } + if ($Mode -eq "Full") { + Invoke-ProductionContractJourney $packageRoot $zip + } + + Stop-GenericAgent + Stop-BridgeOnPort + Start-Sleep -Seconds 2 + $Report.environment.finalPortState = @(Get-PortState) + $Report.environment.finalProcesses = @(Get-GaProcesses) + if ($Report.environment.finalPortState.Count -gt 0) { + Fail "Package journey left a listener on 127.0.0.1:14168" + } + $Report.success = $true + $script:RunSucceeded = $true + Save-Report + Write-Host "" + Write-Host "E2E report: $ReportPath" +} catch { + $Report.success = $false + Add-Failure $_.Exception.Message + $Report.environment.finalPortState = @(Get-PortState) + $Report.environment.finalProcesses = @(Get-GaProcesses) + Save-Report + Write-Error $_.Exception.Message + exit 1 +} finally { + if ($script:PortWasFreeAtStart) { + Stop-GenericAgent + Stop-BridgeOnPort + } + if ($SettingsExisted) { + [System.IO.File]::WriteAllBytes($SettingsPath, $SettingsBackupBytes) + if ($null -ne $SettingsAttributes) { + [System.IO.File]::SetAttributes($SettingsPath, $SettingsAttributes) + } + } else { + Remove-Item -LiteralPath $SettingsPath -Force -ErrorAction SilentlyContinue + } + $script:Report.checks.settingsRestored = if ($SettingsExisted) { + [Convert]::ToBase64String([System.IO.File]::ReadAllBytes($SettingsPath)) -eq ` + [Convert]::ToBase64String($SettingsBackupBytes) + } else { + -not (Test-Path -LiteralPath $SettingsPath) + } + Save-Report + if ($script:RunSucceeded -and -not $KeepWorkDir) { + Remove-Item -LiteralPath $ExtractDir -Recurse -Force -ErrorAction SilentlyContinue + Remove-Item -LiteralPath $DownloadDir -Recurse -Force -ErrorAction SilentlyContinue + Write-Host "Report kept at: $ReportDir" + } else { + Write-Host "WorkDir kept for diagnostics: $WorkDir" + } +} diff --git a/frontends/desktop/e2e/windows/README.md b/frontends/desktop/e2e/windows/README.md new file mode 100644 index 000000000..87970b66d --- /dev/null +++ b/frontends/desktop/e2e/windows/README.md @@ -0,0 +1,62 @@ +# Windows Desktop E2E + +This folder contains the Windows validation harness for the portable desktop package. It simulates the user path: + +1. Download a GitHub Actions artifact, or use a local zip. +2. Verify commit, SHA-256, and required package files. +3. Extract to a clean directory. +4. Launch `GenericAgent.exe` directly. +5. Wait for first-run prepare, bridge identity, and bootstrap `ready`. +6. In `Full` mode, inject an unknown process on port `14168`, verify `port_conflict`, release it, and retry from setup. +7. Run the shared production-package contract with the embedded Python: package-owned bridge plus + external `GA_ROOT`, fake-model chat, upload, memory import, warm restart, a second foreign-port + assertion, relocation into a path with spaces and Chinese characters, stale override fallback, + optional P2P degradation, and process/settings cleanup. + +## Full Run + +```powershell +.\frontends\desktop\e2e\windows\Invoke-WindowsUserJourney.ps1 ` + -Repo abraxas914/GenericAgent ` + -RunId 29071095889 ` + -ExpectedCommit 696ddfc ` + -Mode Full +``` + +Use `-PackageZip C:\path\GenericAgent-Desktop-Windows-Portable.zip` when the artifact has expired or has already been downloaded. + +## Modes + +- `Smoke`: package verification, extraction, first launch, prepare marker, bridge identity, bootstrap ready. +- `FailureOnly`: assumes the package can be extracted and focuses on the unknown port conflict and setup retry path. +- `Full`: runs `Smoke`, the native retry failure path, and the complete production package journey. + It requires `-ExpectedCommit` so the bridge build identity is tied to the candidate SHA. + +## Manual Checks + +The script collects screenshots and writes these checklist items to the report for the tester to mark externally: + +- Loading, prepare, setup, and main windows always show the Windows titlebar. +- Right side has exactly minimize, maximize, and close. +- Blank titlebar area drags the window; button area does not. +- Minimize works. +- Maximize and restore work. +- Close hides to tray instead of exiting. +- Sidebar nav sits directly below the custom titlebar with no blank row. +- The native directory picker opens and returns a real directory. +- The shortcut self-heals after the portable folder is moved. +- Loading, fallback, and main React pages render through the Tauri resource protocol. + +## Report + +Reports are written under `\report`: + +- `e2e-report.json` +- `bootstrap-events.jsonl` +- `bootstrap-latest.json` +- screenshots such as `loading-first.png`, `main-ready.png`, and `setup-failure.png` +- `production-contract/real-package-report.json`, including artifact SHA-256, OS/architecture, + bootstrap phases, bridge identities, PIDs/ports, before/after paths, deterministic data results, + and cleanup state + +Failures exit non-zero and keep diagnostics unless `-KeepWorkDir` is omitted and cleanup succeeds. diff --git a/frontends/desktop/e2e/windows/fixtures/foreign-port-listener.ps1 b/frontends/desktop/e2e/windows/fixtures/foreign-port-listener.ps1 new file mode 100644 index 000000000..fe90a8a7c --- /dev/null +++ b/frontends/desktop/e2e/windows/fixtures/foreign-port-listener.ps1 @@ -0,0 +1,35 @@ +param( + [int]$Port = 14168, + [string]$ReadyFile = "" +) + +$ErrorActionPreference = "Stop" +Set-StrictMode -Version 2.0 + +$listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Parse("127.0.0.1"), $Port) +$listener.Start() + +if ($ReadyFile) { + $dir = Split-Path -Parent $ReadyFile + if ($dir) { + [System.IO.Directory]::CreateDirectory($dir) | Out-Null + } + [System.IO.File]::WriteAllText($ReadyFile, "ready", [System.Text.Encoding]::ASCII) +} + +try { + while ($true) { + $client = $listener.AcceptTcpClient() + try { + $stream = $client.GetStream() + $body = "foreign listener" + $response = "HTTP/1.1 404 Not Found`r`nContent-Type: text/plain`r`nContent-Length: $($body.Length)`r`nConnection: close`r`n`r`n$body" + $bytes = [System.Text.Encoding]::ASCII.GetBytes($response) + $stream.Write($bytes, 0, $bytes.Length) + } finally { + $client.Close() + } + } +} finally { + $listener.Stop() +} diff --git a/frontends/desktop/scripts/verify-compiled-dist.mjs b/frontends/desktop/scripts/verify-compiled-dist.mjs new file mode 100644 index 000000000..2744ddee1 --- /dev/null +++ b/frontends/desktop/scripts/verify-compiled-dist.mjs @@ -0,0 +1,385 @@ +import { createHash } from 'node:crypto'; +import { execFileSync } from 'node:child_process'; +import { access, readFile, readdir } from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const desktopDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const repoRoot = path.resolve(desktopDir, '..', '..'); +const distDir = path.join(desktopDir, 'dist'); +const expectedVersion = '0.2.0'; +const expectedSourceCommit = '21f12f6dfe57ada8572bb21fe6604caac230b1cf'; +const expectedNoticeSha256 = '2acf865e87e59090121369aac0575467067fdd7999923a70d785a46ceae3330f'; +const noticeAttributeRules = [ + 'frontends/desktop/public/THIRD_PARTY_NOTICES.txt text eol=lf', + 'frontends/desktop/dist/THIRD_PARTY_NOTICES.txt text eol=lf', +]; +const excludedManifestFiles = new Set(['README.md', 'build-provenance.json']); +const removedLegacyAssets = [ + 'styles.css', + 'i18n.js', + 'phosphor-icons.js', + 'vendor/marked.min.js', + 'assets/fonts/fonts.css', + 'assets/fonts/README.md', + 'assets/fonts/azonix-wordmark.woff2', + 'assets/fonts/jetbrains-mono-latin.woff2', + 'assets/fonts/lexend-latin.woff2', + 'assets/fonts/noto-sans-latin.woff2', +]; +const semiPackages = [ + '@douyinfe/semi-animation', + '@douyinfe/semi-animation-react', + '@douyinfe/semi-animation-styled', + '@douyinfe/semi-foundation', + '@douyinfe/semi-icons', + '@douyinfe/semi-illustrations', + '@douyinfe/semi-json-viewer-core', + '@douyinfe/semi-theme-default', + '@douyinfe/semi-ui', +]; + +function fail(message) { + throw new Error(message); +} + +async function exists(file) { + try { + await access(file); + return true; + } catch { + return false; + } +} + +async function readJson(file) { + return JSON.parse(await readFile(file, 'utf8')); +} + +async function walk(dir) { + const entries = await readdir(dir, { withFileTypes: true }); + const files = []; + for (const entry of entries) { + const fullPath = path.join(dir, entry.name); + if (entry.isDirectory()) files.push(...await walk(fullPath)); + if (entry.isFile()) files.push(fullPath); + } + return files; +} + +function sha256(contents) { + return createHash('sha256').update(contents).digest('hex'); +} + +function relativeToDist(file) { + return path.relative(distDir, file).split(path.sep).join('/'); +} + +async function assertExists(relativePath) { + if (!await exists(path.join(distDir, relativePath))) { + fail(`missing compiled asset: ${relativePath}`); + } +} + +function workflowJob(workflow, name) { + const match = new RegExp(`^ ${name}:\\s*$`, 'm').exec(workflow); + if (!match) return ''; + const remainder = workflow.slice(match.index + match[0].length); + const nextJob = /^ [a-zA-Z0-9_-]+:\s*$/m.exec(remainder); + return nextJob ? remainder.slice(0, nextJob.index) : remainder; +} + +async function verifyHtmlReferences(relativePath) { + const html = await readFile(path.join(distDir, relativePath), 'utf8'); + const references = [...html.matchAll(/\b(?:src|href)=["']([^"']+)["']/g)].map((match) => match[1]); + for (const reference of references) { + if (/^(?:[a-z]+:|#|\/\/)/i.test(reference)) continue; + const cleanReference = reference.split(/[?#]/, 1)[0].replace(/^\//, ''); + if (cleanReference) await assertExists(cleanReference); + } +} + +function verifyTrackedSourceBoundary() { + const tracked = execFileSync('git', ['ls-files'], { cwd: repoRoot, encoding: 'utf8' }) + .split('\n') + .filter(Boolean); + const forbidden = tracked.filter((file) => ( + file.startsWith('frontends/desktop/src/') + || file.startsWith('frontends/desktop/public/') + || (file.startsWith('frontends/desktop/e2e/') + && file !== 'frontends/desktop/e2e/requirements.txt' + && !file.startsWith('frontends/desktop/e2e/package/') + && !file.startsWith('frontends/desktop/e2e/linux/') + && !file.startsWith('frontends/desktop/e2e/macos/') + && !file.startsWith('frontends/desktop/e2e/windows/')) + || /^frontends\/desktop\/(?:index|loading|setup)\.html$/.test(file) + || /^frontends\/desktop\/(?:vite\.config\.[^/]+|tsconfig(?:\.[^/]+)?\.json|package-lock\.json)$/.test(file) + )); + if (forbidden.length > 0) { + fail(`tracked React development files crossed the compiled-only boundary: ${forbidden.join(', ')}`); + } +} + +async function verifyNoticeAttributes() { + const attributes = await readFile(path.join(repoRoot, '.gitattributes'), 'utf8'); + const lines = attributes.split(/\r?\n/); + for (const rule of noticeAttributeRules) { + const noticePath = rule.split(/\s+/, 1)[0]; + const matchingRules = lines.filter((line) => line.trim().split(/\s+/, 1)[0] === noticePath); + if (matchingRules.length !== 1 || matchingRules[0] !== rule) { + fail(`third-party notice must have one exact LF attribute rule: ${rule}`); + } + } +} + +async function verifyVersionsRendererAndEntry() { + const packageJson = await readJson(path.join(desktopDir, 'package.json')); + const tauriConfig = await readJson(path.join(desktopDir, 'src-tauri', 'tauri.conf.json')); + const tauriE2eConfig = await readJson(path.join(desktopDir, 'src-tauri', 'tauri.e2e.conf.json')); + const cargoToml = await readFile(path.join(desktopDir, 'src-tauri', 'Cargo.toml'), 'utf8'); + const cargoLock = await readFile(path.join(desktopDir, 'src-tauri', 'Cargo.lock'), 'utf8'); + const desktopShell = await readFile(path.join(desktopDir, 'src-tauri', 'src', 'lib.rs'), 'utf8'); + + if (packageJson.version !== expectedVersion) fail(`package.json version must be ${expectedVersion}`); + if (tauriConfig.version !== expectedVersion) fail(`tauri.conf.json version must be ${expectedVersion}`); + if (tauriConfig.build?.frontendDist !== '../dist') fail('Tauri frontendDist must be ../dist'); + for (const sourceBuildKey of ['beforeBuildCommand', 'beforeDevCommand', 'devUrl']) { + if (sourceBuildKey in tauriConfig.build) fail(`compiled-only Tauri config must not require ${sourceBuildKey}`); + } + if (!/^\[package\][\s\S]*?^name = "ga-desktop"$[\s\S]*?^version = "0\.2\.0"$/m.test(cargoToml)) { + fail(`Cargo.toml ga-desktop version must be ${expectedVersion}`); + } + if (!/^\[\[package\]\][\s\S]*?^name = "ga-desktop"$\nversion = "0\.2\.0"$/m.test(cargoLock)) { + fail(`Cargo.lock ga-desktop version must be ${expectedVersion}`); + } + + const productionSecurity = tauriConfig.app?.security; + if (!productionSecurity?.csp || typeof productionSecurity.csp !== 'object') { + fail('production renderer must use an explicit CSP'); + } + if (String(productionSecurity.csp['script-src']).includes('unsafe-eval')) { + fail('production CSP must not enable unsafe-eval'); + } + if (!String(productionSecurity.csp['connect-src']).includes('127.0.0.1:14168')) { + fail('production CSP must retain the Desktop loopback bridge'); + } + if (JSON.stringify(productionSecurity).includes('wdio:')) { + fail('production Tauri security config must not grant WebDriver permissions'); + } + if (!JSON.stringify(tauriE2eConfig).includes('wdio:default')) { + fail('E2E-only Tauri config must retain its isolated WebDriver capability'); + } + if (!desktopShell.includes('fn main_ui_url_from_current')) { + fail('desktop shell must resolve index.html from the active Tauri asset origin'); + } + if (/tauri::Url::parse\("http:\/\/127\.0\.0\.1:14168\/?"\)/.test(desktopShell)) { + fail('desktop shell must not navigate the renderer to the legacy bridge root'); + } +} + +async function verifyReleaseContract() { + const workflow = await readFile( + path.join(repoRoot, '.github', 'workflows', 'desktop-release-package.yml'), + 'utf8', + ); + const buildJobs = ['build-windows', 'build-linux', 'build-macos']; + const tauriCommands = { + 'build-windows': 'npm run tauri build -- --bundles nsis', + 'build-linux': 'npm run tauri build -- --bundles appimage', + 'build-macos': 'npm run tauri build -- --bundles app', + }; + const jobNames = [...workflow.slice(workflow.search(/^jobs:\s*$/m)).matchAll(/^ ([a-zA-Z0-9_-]+):\s*$/gm)] + .map((match) => match[1]); + if (JSON.stringify(jobNames) !== JSON.stringify([...buildJobs, 'publish-release'])) { + fail('release workflow must contain exactly three builders and one publisher'); + } + if (!/^permissions:\n contents: read\s*$/m.test(workflow)) { + fail('release workflow must default to contents: read'); + } + if ((workflow.match(/^ contents: write\s*$/gm) ?? []).length !== 1) { + fail('release workflow must grant contents: write exactly once'); + } + if ((workflow.match(/^ run: npm run test:dist$/gm) ?? []).length !== 3) { + fail('all three builders must run the compiled renderer byte contract'); + } + if (/\bnpm ci\b|\bnpm run build\b|\b(?:npx|npm exec)\s+vite\b/.test(workflow)) { + fail('compiled-only release workflow must not require the React source toolchain'); + } + + for (const job of buildJobs) { + const body = workflowJob(workflow, job); + if (!body) fail(`missing release builder: ${job}`); + if (!/^ permissions:\n contents: read\s*$/m.test(body) || body.includes('contents: write')) { + fail(`${job} must have read-only repository permission`); + } + if (!/uses: actions\/checkout@[0-9a-f]{40}[^\n]*\n with:\n persist-credentials: false/.test(body)) { + fail(`${job} checkout must use a full SHA and disable persisted credentials`); + } + if (body.includes('secrets.GITHUB_TOKEN') || /\bgh release\b/.test(body)) { + fail(`${job} must not receive a release token or publish`); + } + if (!body.includes('npm install --package-lock=false') + || !body.includes("if(v!=='2.11.4')") + || !body.includes('test ! -e package-lock.json') + || body.includes('npm ci')) { + fail(`${job} must install only the submitted minimal Tauri package manifest`); + } + const adjacentGate = new RegExp( + ' - name: Verify tracked compiled renderer bytes\\n' + + ' working-directory: frontends/desktop\\n' + + ' run: npm run test:dist\\n\\n' + + ' - name: [^\\n]+\\n' + + ' working-directory: frontends/desktop\\n' + + ` run: ${tauriCommands[job].replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}`, + ); + if (!adjacentGate.test(body)) { + fail(`${job} must validate notice bytes immediately before Tauri embeds dist`); + } + if (!(body.includes("--exclude='./frontends/desktop/dist'") + || body.includes("--exclude='frontends/desktop/dist'"))) { + fail(`${job} must not duplicate Tauri-embedded dist inside runtime/app`); + } + if (!(body.includes('test ! -e "$RUNTIME/app/frontends/desktop/dist"') + || body.includes('test ! -e "$RUNTIME_SRC/app/frontends/desktop/dist"'))) { + fail(`${job} must verify dist is not duplicated inside runtime/app`); + } + } + + const windows = workflowJob(workflow, 'build-windows'); + if (!windows.includes('cygpath -u "$RUNNER_TEMP"') + || !windows.includes('PBS_ARCHIVE="${RUNNER_TEMP_POSIX}/pbs-windows-x86_64.tar.gz"')) { + fail('Windows packaging must convert RUNNER_TEMP with cygpath before POSIX tools use it'); + } + const macos = workflowJob(workflow, 'build-macos'); + if (!macos.includes('runs-on: macos-15') + || !macos.includes('test "$(uname -m)" = arm64') + || !workflow.includes('MACOS_PACKAGING_PYTHON_VERSION: "3.12.10"') + || !workflow.includes('PBS_PYTHON_VERSION: "3.12.14"')) { + fail('macOS packaging must use the pinned arm64 host and separate Python inputs'); + } + const linux = workflowJob(workflow, 'build-linux'); + if (!linux.includes('runs-on: ubuntu-22.04') + || !linux.includes('prefix-key: "v1-rust-release-ubuntu-22.04-glibc-2.35"') + || linux.includes('prefix-key: "v0-rust"') + || !linux.includes('cache-targets: "false"') + || !linux.includes('cache-bin: "false"')) { + fail('Linux packaging must isolate its Ubuntu 22.04/glibc 2.35 Rust cache ABI'); + } + + const publisher = workflowJob(workflow, 'publish-release'); + if (!publisher.includes('needs: [build-windows, build-linux, build-macos]') + || !publisher.includes("github.event_name == 'push'") + || !publisher.includes('refs/tags/desktop-portable-') + || !/^ permissions:\n contents: write\s*$/m.test(publisher)) { + fail('publisher must be the sole tag-only writer after all three builders'); + } + const publisherRun = publisher.slice(publisher.indexOf(' run: |')); + if (!publisher.includes('TAG_NAME: ${{ github.ref_name }}') + || publisherRun.includes('${{ github.ref_name }}') + || !publisherRun.includes('^desktop-portable-[A-Za-z0-9._-]+$')) { + fail('publisher must pass the tag through env and validate it before shell use'); + } + if ((publisher.match(/actions\/download-artifact@/g) ?? []).length !== 3 + || (publisher.match(/\bgh release create\b/g) ?? []).length !== 1 + || publisher.includes('gh release upload') + || !publisher.includes('--draft') + || !publisher.includes('gh release edit "$TAG_NAME" --draft=false --prerelease')) { + fail('publisher must aggregate three artifacts as a verified draft, then expose one prerelease'); + } + for (const file of [ + 'GenericAgent-Desktop-Windows-Portable.zip', + 'SHA256SUMS-windows.txt', + 'GenericAgent-Desktop-Linux-Portable.tar.gz', + 'SHA256SUMS-linux.txt', + 'GenericAgent-Desktop-macOS-aarch64.dmg', + 'GenericAgent-Desktop-macOS-aarch64.dmg.sha256', + ]) { + if (!publisher.includes(file)) fail(`publisher does not require release asset: ${file}`); + } +} + +async function verifyGeneratedManifest(files) { + const provenance = await readJson(path.join(distDir, 'build-provenance.json')); + const generatedFiles = files + .map((file) => ({ file, relativePath: relativeToDist(file) })) + .filter(({ relativePath }) => !excludedManifestFiles.has(relativePath)) + .sort((left, right) => left.relativePath.localeCompare(right.relativePath, 'en')); + + const manifestLines = []; + for (const { file, relativePath } of generatedFiles) { + manifestLines.push(`${sha256(await readFile(file))} ${relativePath}\n`); + } + const manifestDigest = sha256(manifestLines.join('')); + + if (provenance.version !== expectedVersion) fail(`provenance version must be ${expectedVersion}`); + if (provenance.sourceRepository !== 'https://github.com/abraxas914/GenericAgent') { + fail('provenance source repository is incorrect'); + } + if (provenance.sourceCommit !== expectedSourceCommit) fail('provenance source commit is incorrect'); + if (provenance.generatedAssetCount !== generatedFiles.length) { + fail(`provenance asset count mismatch: expected ${provenance.generatedAssetCount}, found ${generatedFiles.length}`); + } + if (provenance.generatedManifestSha256 !== manifestDigest) { + fail(`provenance manifest mismatch: expected ${provenance.generatedManifestSha256}, found ${manifestDigest}`); + } +} + +async function main() { + const requiredFiles = [ + 'index.html', + 'loading.html', + 'setup.html', + 'fallback.html', + 'assets/ga-logo.svg', + 'THIRD_PARTY_NOTICES.txt', + 'README.md', + 'build-provenance.json', + ]; + await Promise.all(requiredFiles.map(assertExists)); + for (const deadAsset of removedLegacyAssets) { + if (await exists(path.join(distDir, deadAsset))) { + fail(`dead legacy React asset remains in compiled output: ${deadAsset}`); + } + } + + verifyTrackedSourceBoundary(); + await verifyNoticeAttributes(); + const files = await walk(distDir); + const forbiddenSource = files.map(relativeToDist).filter((file) => /(?:\.map|\.tsx?|\.jsx)$/i.test(file)); + if (forbiddenSource.length > 0) fail(`compiled distribution contains source files: ${forbiddenSource.join(', ')}`); + + const searchableFiles = files.filter((file) => /\.(?:html|js|css)$/i.test(file)); + for (const file of searchableFiles) { + const contents = await readFile(file, 'utf8'); + if (/(?:webdriverio|__GA_E2E__|wdio:|sourceMappingURL|webpack:\/\/|\/Users\/)/i.test(contents)) { + fail(`compiled distribution leaks source/E2E material: ${relativeToDist(file)}`); + } + } + + const notice = await readFile(path.join(distDir, 'THIRD_PARTY_NOTICES.txt')); + if (sha256(notice) !== expectedNoticeSha256) fail('Semi Design third-party notice hash is incorrect'); + const readme = await readFile(path.join(distDir, 'README.md'), 'utf8'); + for (const value of [ + expectedSourceCommit, + ...semiPackages, + 'https://github.com/DouyinFE/semi-design', + 'https://semi.design', + 'Copyright (c) 2021 DouyinFE', + 'License: MIT', + 'THIRD_PARTY_NOTICES.txt', + '5ddf03bb152666637bdfcfa44f1fac3cff5a66b6', + '2fb55d944e4444b08cb9ad76c13aef7a5788186b', + '3e7ca6a2b20eefdb3ee335dc0d520c3b6d9d57f8', + 'not a claim that later builds are bit-for-bit reproducible', + ]) { + if (!readme.includes(value)) fail(`compiled README is missing required provenance/license text: ${value}`); + } + + await Promise.all(['index.html', 'loading.html', 'setup.html'].map(verifyHtmlReferences)); + await verifyVersionsRendererAndEntry(); + await verifyReleaseContract(); + await verifyGeneratedManifest(files); + console.log('Compiled React Desktop 2.0 distribution contracts passed.'); +} + +await main(); diff --git a/frontends/tests/test_bridge_e2e_controls.py b/frontends/tests/test_bridge_e2e_controls.py new file mode 100644 index 000000000..8fe89a11f --- /dev/null +++ b/frontends/tests/test_bridge_e2e_controls.py @@ -0,0 +1,117 @@ +"""Security and one-shot semantics for the bridge E2E control plane.""" +from __future__ import annotations + +import ast +import os +import threading +from pathlib import Path + +import pytest + + +ROOT = Path(__file__).resolve().parent.parent.parent +SOURCE = (ROOT / "frontends" / "desktop_bridge.py").read_text(encoding="utf-8") +TREE = ast.parse(SOURCE) + + +def _function_node(name: str) -> ast.FunctionDef | ast.AsyncFunctionDef: + return next( + node + for node in TREE.body + if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)) and node.name == name + ) + + +def _load_helpers(): + wanted = { + "_E2E_NEXT_TURN", + "_E2E_CONTROL_LOCK", + "_e2e_control_token", + "_set_e2e_next_turn", + "_consume_e2e_next_turn", + } + nodes = [] + for node in TREE.body: + if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)) and node.name in wanted: + nodes.append(node) + elif isinstance(node, (ast.Assign, ast.AnnAssign)): + targets = node.targets if isinstance(node, ast.Assign) else [node.target] + names = {target.id for target in targets if isinstance(target, ast.Name)} + if names & wanted: + nodes.append(node) + namespace = {"os": os, "threading": threading} + exec(compile(ast.Module(body=nodes, type_ignores=[]), "desktop_bridge.py", "exec"), namespace) + return namespace + + +def test_control_requires_explicit_e2e_flag_and_random_token(monkeypatch): + helpers = _load_helpers() + monkeypatch.delenv("GA_E2E", raising=False) + monkeypatch.setenv("GA_E2E_CONTROL_TOKEN", "secret") + assert helpers["_e2e_control_token"]() is None + + monkeypatch.setenv("GA_E2E", "1") + monkeypatch.delenv("GA_E2E_CONTROL_TOKEN", raising=False) + assert helpers["_e2e_control_token"]() is None + + monkeypatch.setenv("GA_E2E_CONTROL_TOKEN", "secret") + assert helpers["_e2e_control_token"]() == "secret" + + +def test_next_turn_override_is_validated_and_consumed_once(): + helpers = _load_helpers() + with pytest.raises(ValueError, match="empty"): + helpers["_set_e2e_next_turn"]("crash") + + helpers["_set_e2e_next_turn"]("empty") + assert helpers["_consume_e2e_next_turn"]() == "empty" + assert helpers["_consume_e2e_next_turn"]() is None + + +def test_e2e_route_is_not_registered_without_the_control_gate(): + create_app = _function_node("create_app") + registrations = [ + node + for node in ast.walk(create_app) + if isinstance(node, ast.Call) + and any( + isinstance(arg, ast.Constant) and arg.value == "/__e2e__/next-turn" + for arg in node.args + ) + ] + assert len(registrations) == 1 + + registration = registrations[0] + gate = next( + node + for node in ast.walk(create_app) + if isinstance(node, ast.If) and registration in list(ast.walk(node)) + ) + assert isinstance(gate.test, ast.Compare) + assert isinstance(gate.test.left, ast.Call) + assert isinstance(gate.test.left.func, ast.Name) + assert gate.test.left.func.id == "_e2e_control_token" + + +def test_e2e_handler_requires_loopback_and_secret_header(): + handler = _function_node("e2e_next_turn_handler") + called_names = { + node.func.id + for node in ast.walk(handler) + if isinstance(node, ast.Call) and isinstance(node.func, ast.Name) + } + constants = { + node.value + for node in ast.walk(handler) + if isinstance(node, ast.Constant) and isinstance(node.value, str) + } + assert "_e2e_control_token" in called_names + assert "_is_local_peer" in called_names + assert "X-GA-E2E-Token" in constants + assert any( + isinstance(node, ast.Attribute) + and isinstance(node.value, ast.Name) + and node.value.id == "web" + and node.attr == "HTTPNotFound" + for node in ast.walk(handler) + ) diff --git a/frontends/tests/test_bridge_model_switch.py b/frontends/tests/test_bridge_model_switch.py new file mode 100644 index 000000000..2eec9a43b --- /dev/null +++ b/frontends/tests/test_bridge_model_switch.py @@ -0,0 +1,173 @@ +"""Unit tests for model hot-switching within a session. + +Tests the contract: set_session_model changes llm_no without destroying session +state. Idle agents switch immediately; running turns defer the new client. +Run: pytest frontends/tests/test_bridge_model_switch.py -v +""" + + +class FakeAgent: + """Minimal mock of an agent object with next_llm capability.""" + def __init__(self): + self.current_llm = 0 + self.next_llm_calls = [] + + def next_llm(self, llm_no: int): + self.next_llm_calls.append(llm_no) + self.current_llm = llm_no + + +class FakeSession: + """Minimal mock of desktop_bridge.Session for model switch tests.""" + def __init__(self, sid="test-session", llm_no=0, messages=None, agent=None): + self.id = sid + self.llm_no = llm_no + self.messages = messages or [ + {"id": 1, "role": "user", "content": "Hello"}, + {"id": 2, "role": "assistant", "content": "Hi there"}, + {"id": 3, "role": "user", "content": "Switch model now"}, + ] + self.agent = agent + self.status = "idle" + self.updated_at = 0.0 + + +def simulate_set_session_model(sess: FakeSession, llm_no: int) -> dict: + """Replicate set_session_model logic from desktop_bridge.py:1105-1118.""" + import time + sess.llm_no = int(llm_no) + if sess.status != "running" and sess.agent is not None and hasattr(sess.agent, "next_llm"): + try: + sess.agent.next_llm(int(llm_no)) + except Exception: + pass + sess.updated_at = time.time() + return {"ok": True, "sessionId": sess.id, "llmNo": sess.llm_no} + + +class TestModelHotSwitch: + """Core contract: model switch preserves session state.""" + + def test_llm_no_updated(self): + sess = FakeSession(llm_no=0) + result = simulate_set_session_model(sess, 2) + assert sess.llm_no == 2 + assert result["llmNo"] == 2 + assert result["ok"] is True + + def test_messages_preserved(self): + original_messages = [ + {"id": 1, "role": "user", "content": "Hello"}, + {"id": 2, "role": "assistant", "content": "World"}, + ] + sess = FakeSession(messages=list(original_messages)) + simulate_set_session_model(sess, 3) + assert sess.messages == original_messages + assert len(sess.messages) == 2 + + def test_agent_next_llm_called(self): + agent = FakeAgent() + sess = FakeSession(agent=agent) + simulate_set_session_model(sess, 5) + assert agent.next_llm_calls == [5] + assert agent.current_llm == 5 + + def test_agent_none_no_error(self): + sess = FakeSession(agent=None) + result = simulate_set_session_model(sess, 1) + assert result["ok"] is True + assert sess.llm_no == 1 + + def test_agent_without_next_llm_no_error(self): + class LegacyAgent: + pass + sess = FakeSession(agent=LegacyAgent()) + result = simulate_set_session_model(sess, 4) + assert result["ok"] is True + assert sess.llm_no == 4 + + def test_updated_at_changed(self): + sess = FakeSession() + sess.updated_at = 0.0 + simulate_set_session_model(sess, 1) + assert sess.updated_at > 0.0 + + def test_status_not_changed(self): + sess = FakeSession() + sess.status = "idle" + simulate_set_session_model(sess, 2) + assert sess.status == "idle" + + def test_switch_during_running_preserves_status(self): + agent = FakeAgent() + sess = FakeSession(agent=agent) + sess.status = "running" + simulate_set_session_model(sess, 3) + assert sess.status == "running" + assert sess.llm_no == 3 + assert agent.next_llm_calls == [] + + def test_multiple_switches(self): + agent = FakeAgent() + sess = FakeSession(agent=agent, llm_no=0) + simulate_set_session_model(sess, 1) + simulate_set_session_model(sess, 2) + simulate_set_session_model(sess, 0) + assert sess.llm_no == 0 + assert agent.next_llm_calls == [1, 2, 0] + + def test_switch_back_to_same_model(self): + agent = FakeAgent() + sess = FakeSession(agent=agent, llm_no=3) + simulate_set_session_model(sess, 3) + assert sess.llm_no == 3 + assert agent.next_llm_calls == [3] + + +class TestModelSwitchFrontendContract: + """Frontend side: sendPrompt uses current selectedModelNo.""" + + def test_llm_no_passed_to_send_prompt(self): + """sendPrompt reads selectedModelNo at call time, not at session creation.""" + selectedModelNo = 0 + calls = [] + + def mock_send_prompt(sid, prompt, llm_no, files=None, images=None): + calls.append({"sid": sid, "llm_no": llm_no}) + + # First message with model 0 + mock_send_prompt("s1", "hello", selectedModelNo) + # User switches model + selectedModelNo = 2 + # Second message with model 2 + mock_send_prompt("s1", "world", selectedModelNo) + + assert calls[0]["llm_no"] == 0 + assert calls[1]["llm_no"] == 2 + # Same session ID — context preserved + assert calls[0]["sid"] == calls[1]["sid"] + + def test_model_change_does_not_create_new_session(self): + """Switching model mid-session does not call createSession.""" + session_creates = [] + + def mock_create(): + session_creates.append(1) + return "new-session" + + # Simulate: active session exists, user switches model + active_session_id = "existing-session" + # selectModel only updates selectedModelNo + calls legacy bridge + # It does NOT create a new session + assert len(session_creates) == 0 + + def test_live_model_cleared_on_switch(self): + """selectModel sets liveModel to null (re-fetched from bridge on next poll).""" + state = {"selectedModelNo": 0, "liveModel": {"isMixin": False, "current": "gpt-4"}} + + # Simulate selectModel logic + state["selectedModelNo"] = 2 + state["liveModel"] = None # cleared + + assert state["liveModel"] is None + assert state["selectedModelNo"] == 2 diff --git a/frontends/tests/test_bridge_origin_security.py b/frontends/tests/test_bridge_origin_security.py new file mode 100644 index 000000000..2164ece9e --- /dev/null +++ b/frontends/tests/test_bridge_origin_security.py @@ -0,0 +1,194 @@ +"""Origin enforcement for the local Desktop bridge transport.""" +from __future__ import annotations + +import asyncio +from pathlib import Path + +import pytest +from aiohttp import WSServerHandshakeError, web +from aiohttp.test_utils import TestClient, TestServer + +from frontends.tests.test_bridge_sessions import _mod as bridge + + +PROTECTED_PATHS = ( + "/status", + "/memory/export", + "/memory/import/inspect", + "/upload", + "/upload/raw", +) + + +async def _with_client(callback, tmp_path: Path): + side_effect = tmp_path / "request-reached-handler" + + async def protected_handler(_request): + side_effect.write_text("reached", encoding="utf-8") + return web.Response(text="protected-secret") + + async def http_error(_request): + raise web.HTTPBadRequest(text="bad request") + + async def internal_error(_request): + raise RuntimeError("secret failure detail") + + app = web.Application(middlewares=[bridge.cors_middleware]) + for path in PROTECTED_PATHS: + app.router.add_route("*", path, protected_handler) + app.router.add_get("/ws", bridge.ws_handler) + app.router.add_get("/http-error", http_error) + app.router.add_get("/internal-error", internal_error) + client = TestClient(TestServer(app)) + await client.start_server() + try: + await callback(client, side_effect) + finally: + await client.close() + + +def test_evil_origins_are_rejected_before_sensitive_handlers( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +): + monkeypatch.setenv("BRIDGE_PORT", "14168") + monkeypatch.delenv("GA_E2E", raising=False) + monkeypatch.delenv("VITE_PORT", raising=False) + evil_origins = ( + "null", + "https://localhost:5173", + "http://localhost:5174", + "http://127.0.0.1:5173", + "http://127.0.0.1:14169", + "http://localhost:5173.evil.example", + "http://tauri.localhost.evil.example", + "tauri://evil", + ) + + async def scenario(client: TestClient, side_effect: Path): + for origin in evil_origins: + for path in PROTECTED_PATHS: + for method in ("GET", "POST", "OPTIONS"): + response = await client.request(method, path, headers={"Origin": origin}) + assert response.status == 403, (origin, method, path, await response.text()) + assert response.headers.get("Access-Control-Allow-Origin") is None + assert "protected-secret" not in await response.text() + assert not side_effect.exists() + + asyncio.run(_with_client(scenario, tmp_path)) + + +def test_allowed_origins_are_reflected_exactly_without_credentials( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +): + monkeypatch.setenv("BRIDGE_PORT", "15168") + monkeypatch.setenv("GA_E2E", "1") + monkeypatch.setenv("VITE_PORT", "5273") + allowed = ( + "tauri://localhost", + "http://tauri.localhost", + "http://localhost:5173", + "http://127.0.0.1:15168", + "http://localhost:15168", + "http://[::1]:15168", + "http://127.0.0.1:5273", + ) + + async def scenario(client: TestClient, side_effect: Path): + for origin in allowed: + response = await client.get("/status", headers={"Origin": origin}) + assert response.status == 200 + assert response.headers["Access-Control-Allow-Origin"] == origin + assert "origin" in response.headers.get("Vary", "").lower() + assert "Access-Control-Allow-Credentials" not in response.headers + assert response.headers["Access-Control-Allow-Origin"] != "*" + + preflight = await client.options("/memory/export", headers={"Origin": origin}) + assert preflight.status == 204 + assert preflight.headers["Access-Control-Allow-Origin"] == origin + assert side_effect.exists() + + asyncio.run(_with_client(scenario, tmp_path)) + + +def test_no_origin_cli_is_allowed_but_cross_site_navigation_is_rejected( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +): + monkeypatch.delenv("GA_E2E", raising=False) + + async def scenario(client: TestClient, side_effect: Path): + response = await client.get("/status") + assert response.status == 200 + assert "Access-Control-Allow-Origin" not in response.headers + assert await response.text() == "protected-secret" + + side_effect.unlink() + rejected = await client.get( + "/status", headers={"Sec-Fetch-Site": "cross-site"} + ) + assert rejected.status == 403 + assert not side_effect.exists() + + asyncio.run(_with_client(scenario, tmp_path)) + + +def test_e2e_origin_requires_explicit_mode_and_a_strict_valid_port( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +): + async def scenario(client: TestClient, side_effect: Path): + origin = "http://127.0.0.1:5273" + response = await client.get("/status", headers={"Origin": origin}) + assert response.status == 403 + assert not side_effect.exists() + + monkeypatch.setenv("GA_E2E", "1") + for invalid in ("", "0", "65536", "52x73", "5273/path"): + monkeypatch.setenv("VITE_PORT", invalid) + asyncio.run(_with_client(scenario, tmp_path)) + monkeypatch.setenv("VITE_PORT", "5273") + monkeypatch.delenv("GA_E2E") + asyncio.run(_with_client(scenario, tmp_path)) + + +def test_allowed_origin_headers_cover_http_errors_and_internal_errors( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +): + origin = "tauri://localhost" + + async def scenario(client: TestClient, _side_effect: Path): + bad = await client.get("/http-error", headers={"Origin": origin}) + assert bad.status == 400 + assert bad.headers["Access-Control-Allow-Origin"] == origin + failed = await client.get("/internal-error", headers={"Origin": origin}) + assert failed.status == 500 + assert failed.headers["Access-Control-Allow-Origin"] == origin + assert "secret failure detail" not in await failed.text() + + asyncio.run(_with_client(scenario, tmp_path)) + + +def test_websocket_evil_origin_fails_before_prepare( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +): + monkeypatch.delenv("GA_E2E", raising=False) + + async def scenario(client: TestClient, side_effect: Path): + with pytest.raises(WSServerHandshakeError) as raised: + await client.ws_connect("/ws", headers={"Origin": "http://evil.example"}) + assert raised.value.status == 403 + assert not side_effect.exists() + + asyncio.run(_with_client(scenario, tmp_path)) + + +def test_bridge_source_has_no_wildcard_cors_and_checks_ws_before_prepare(): + source = Path(bridge.__file__).read_text(encoding="utf-8") + assert 'Access-Control-Allow-Origin": "*"' not in source + assert "cors_headers" not in source + ws_start = source.index("async def ws_handler") + ws_end = source.index( + "# ---------------------------------------------------------------------------\n# Transport layer", + ws_start, + ) + ws_source = source[ws_start:ws_end] + assert ws_source.index("_request_origin_error(request)") < ws_source.index("WebSocketResponse") + assert ws_source.index("_request_origin_error(request)") < ws_source.index("await ws.prepare(request)") diff --git a/frontends/tests/test_bridge_sessions.py b/frontends/tests/test_bridge_sessions.py new file mode 100644 index 000000000..de1a65251 --- /dev/null +++ b/frontends/tests/test_bridge_sessions.py @@ -0,0 +1,1384 @@ +"""Tests for session persistence: race conditions, corruption resilience, and reload.""" +from __future__ import annotations + +import copy +import json +import os +import socket +import sys +import tempfile +import threading +import time +from pathlib import Path +from typing import Any +from unittest.mock import patch + +import pytest + +# Add the frontend and project roots so direct bridge imports resolve sibling helpers. +BRIDGE_PATH = Path(__file__).resolve().parent.parent / "desktop_bridge.py" +PROJECT_ROOT = BRIDGE_PATH.parent.parent +sys.path.insert(0, str(BRIDGE_PATH.parent)) +sys.path.insert(0, str(PROJECT_ROOT)) + +# We need a lightweight extraction of AgentManager without starting the full server. +# Import the module to get access to _load_plan_baseline, _sanitize_desktop_plan_path, Session, etc. +import importlib.util + +_spec = importlib.util.spec_from_file_location("desktop_bridge", str(BRIDGE_PATH)) +_mod = importlib.util.module_from_spec(_spec) +sys.modules["desktop_bridge"] = _mod + +# Patch heavy imports that desktop_bridge may pull in. +import types as _types + +def _make_stub(name, attrs=None): + m = _types.ModuleType(name) + if attrs: + for k, v in attrs.items(): + setattr(m, k, v) + return m + +_plan_state_stub = _make_stub("plan_state", { + "is_session_scoped_plan_path": lambda p, sid: True, + "is_plan_preset_prompt": lambda prompt: False, + "PLAN_PRESETS": {}, +}) + +for _name in ("agentmain", "llmcore", "agent_loop", "plugins", "reflect", + "frontends.plan_state", "cost_tracker"): + sys.modules.setdefault(_name, _make_stub(_name)) +sys.modules["plan_state"] = _plan_state_stub + +# Attempt import; if it fails due to missing deps, skip. +try: + _spec.loader.exec_module(_mod) +except Exception as exc: + pytest.skip(f"Cannot import desktop_bridge: {exc}", allow_module_level=True) + +Session = _mod.Session +AgentManager = _mod.AgentManager +MaintenanceConflict = _mod.MaintenanceConflict +ServiceManager = _mod.ServiceManager + + +@pytest.fixture +def tmp_ga_root(tmp_path: Path): + """Create a minimal GA root with temp/desktop_sessions/ directory.""" + sessions_dir = tmp_path / "temp" / "desktop_sessions" + sessions_dir.mkdir(parents=True) + # Provide a dummy mykey_template so AgentManager.__init__ doesn't break. + (tmp_path / "mykey_template.py").write_text("", encoding="utf-8") + return tmp_path + + +@pytest.fixture +def manager(tmp_ga_root: Path): + """Create an AgentManager using the tmp root.""" + with patch.object(AgentManager, "__init__", lambda self: None): + mgr = AgentManager.__new__(AgentManager) + mgr.lock = threading.RLock() + mgr.ga_root = str(tmp_ga_root) + mgr.config = {} + mgr.sessions = {} + mgr._retired_sessions = {} + mgr._maintenance_token = None + mgr._maintenance_kind = None + mgr._shutdown_requested = False + mgr.active_session_id = None + mgr._sessions_dir = tmp_ga_root / "temp" / "desktop_sessions" + mgr._sessions_file = tmp_ga_root / "temp" / "desktop_sessions.json" + return mgr + + +def _make_session(sid: str = "sess-test-1", messages: list | None = None) -> Session: + return Session( + id=sid, + title="Test", + cwd="/tmp", + created_at=time.time(), + updated_at=time.time(), + messages=messages if messages is not None else [{"role": "user", "content": "hello"}], + msg_seq=1, + pinned=False, + untitled=False, + plan_scan_baseline=0, + plan_path="", + status="idle", + agent=None, + llm_history=[{"role": "user", "content": "hello"}], + llm_no=None, + ) + + +class TestPersistSessionConcurrentMutation: + """Verify that concurrent mutations to messages during _persist_session don't corrupt data.""" + + def test_concurrent_append_no_crash(self, manager: AgentManager): + """Appending messages from another thread during persist must not raise.""" + sess = _make_session(messages=[{"role": "user", "content": f"msg-{i}"} for i in range(50)]) + manager.sessions[sess.id] = sess + + errors = [] + stop = threading.Event() + + def mutator(): + i = 100 + while not stop.is_set(): + sess.messages.append({"role": "assistant", "content": f"resp-{i}"}) + i += 1 + time.sleep(0.001) + + t = threading.Thread(target=mutator, daemon=True) + t.start() + try: + for _ in range(20): + try: + manager._persist_session(sess) + except Exception as e: + errors.append(e) + time.sleep(0.005) + finally: + stop.set() + t.join(timeout=2) + + assert not errors, f"persist raised: {errors}" + # Verify the file is valid JSON. + f = manager._session_file(sess.id) + data = json.loads(f.read_text(encoding="utf-8")) + assert data["id"] == sess.id + assert isinstance(data["messages"], list) + + def test_concurrent_mutation_llm_history(self, manager: AgentManager): + """Mutating llm_history from another thread during persist must not corrupt.""" + sess = _make_session() + sess.llm_history = [{"role": "user", "content": "hi"}] + manager.sessions[sess.id] = sess + + stop = threading.Event() + + def mutator(): + i = 0 + while not stop.is_set(): + sess.llm_history.append({"role": "assistant", "content": f"turn-{i}"}) + i += 1 + time.sleep(0.001) + + t = threading.Thread(target=mutator, daemon=True) + t.start() + try: + for _ in range(15): + manager._persist_session(sess) + time.sleep(0.005) + finally: + stop.set() + t.join(timeout=2) + + f = manager._session_file(sess.id) + data = json.loads(f.read_text(encoding="utf-8")) + assert isinstance(data["llm_history"], list) + + +class TestTransactionalDataImport: + def test_import_commits_new_session_file_and_in_memory_object_together( + self, manager: AgentManager, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + source = tmp_path / "import-source" + (source / "memory").mkdir(parents=True) + (source / "memory" / "imported.md").write_text("new", encoding="utf-8") + sessions = source / "temp" / "desktop_sessions" + sessions.mkdir(parents=True) + sessions.joinpath("sess-imported.json").write_text( + json.dumps( + { + "id": "sess-imported", + "title": "Imported", + "messages": [], + "msg_seq": 0, + } + ), + encoding="utf-8", + ) + monkeypatch.setattr(_mod, "manager", manager) + monkeypatch.setattr(_mod.services, "running_managed_ids", lambda: []) + + result = _mod._import_data_source(str(source)) + + assert result["ok"] is True + assert result["sessionsAdded"] == 1 + assert "_preparedSessions" not in result + assert manager.sessions["sess-imported"].title == "Imported" + persisted = Path(manager.ga_root) / "temp" / "desktop_sessions" / "sess-imported.json" + assert json.loads(persisted.read_text(encoding="utf-8"))["id"] == "sess-imported" + assert (Path(manager.ga_root) / "memory" / "imported.md").read_text( + encoding="utf-8" + ) == "new" + + +class TestLoadSessionsCorruptFile: + """Verify that one corrupt file does not prevent loading others.""" + + def test_corrupt_file_skipped(self, manager: AgentManager): + """A corrupt JSON file should be skipped; valid sessions still load.""" + sessions_dir = manager._sessions_dir + # Write 2 valid sessions. + for i in range(2): + sid = f"sess-valid-{i}" + data = {"id": sid, "title": f"Valid {i}", "messages": [], "msg_seq": 0, + "cwd": "/tmp", "created_at": time.time(), "updated_at": time.time()} + (sessions_dir / f"{sid}.json").write_text(json.dumps(data), encoding="utf-8") + # Write 1 corrupt file. + (sessions_dir / "sess-corrupt.json").write_text("{invalid json !!!", encoding="utf-8") + + manager._load_sessions() + + assert len(manager.sessions) == 2 + assert "sess-valid-0" in manager.sessions + assert "sess-valid-1" in manager.sessions + assert "sess-corrupt" not in manager.sessions + + def test_empty_file_skipped(self, manager: AgentManager): + """An empty file should be skipped without crash.""" + sessions_dir = manager._sessions_dir + (sessions_dir / "sess-empty.json").write_text("", encoding="utf-8") + (sessions_dir / "sess-ok.json").write_text( + json.dumps({"id": "sess-ok", "title": "OK", "messages": [], "msg_seq": 0, + "cwd": "/tmp", "created_at": time.time(), "updated_at": time.time()}), + encoding="utf-8") + + manager._load_sessions() + assert "sess-ok" in manager.sessions + assert len(manager.sessions) == 1 + + def test_internal_tui_sessions_are_not_loaded(self, manager: AgentManager): + """Conductor/TUI worker artifacts must not enter the desktop session registry.""" + sessions_dir = manager._sessions_dir + for sid in ("sess-visible", "tui_worker_hidden"): + (sessions_dir / f"{sid}.json").write_text( + json.dumps({ + "id": sid, + "title": sid, + "messages": [], + "msg_seq": 0, + "cwd": "/tmp", + "created_at": time.time(), + "updated_at": time.time(), + }), + encoding="utf-8", + ) + + manager._load_sessions() + + assert set(manager.sessions) == {"sess-visible"} + + +class TestLoadSessionsMissingDir: + """Verify graceful handling when sessions directory does not exist.""" + + def test_missing_dir_returns_empty(self, tmp_ga_root: Path): + """If temp/desktop_sessions/ doesn't exist, load returns empty without crash.""" + import shutil + sessions_dir = tmp_ga_root / "temp" / "desktop_sessions" + shutil.rmtree(sessions_dir) + + with patch.object(AgentManager, "__init__", lambda self: None): + mgr = AgentManager.__new__(AgentManager) + mgr.lock = threading.RLock() + mgr.ga_root = str(tmp_ga_root) + mgr.config = {} + mgr.sessions = {} + mgr._retired_sessions = {} + mgr._maintenance_token = None + mgr._maintenance_kind = None + mgr.active_session_id = None + mgr._sessions_dir = sessions_dir + mgr._sessions_file = tmp_ga_root / "temp" / "desktop_sessions.json" + + mgr._load_sessions() + assert mgr.sessions == {} + + +class TestImportSessionsFiltersInternalArtifacts: + def test_import_skips_tui_sessions(self, manager: AgentManager, tmp_path: Path): + source = tmp_path / "source" + sessions_dir = source / "temp" / "desktop_sessions" + sessions_dir.mkdir(parents=True) + for sid in ("sess-imported", "tui_internal"): + (sessions_dir / f"{sid}.json").write_text( + json.dumps({ + "id": sid, + "title": sid, + "messages": [], + "msg_seq": 0, + "cwd": "/tmp", + "created_at": time.time(), + "updated_at": time.time(), + }), + encoding="utf-8", + ) + + result = manager.import_sessions(str(source)) + + assert set(manager.sessions) == {"sess-imported"} + assert result["sessionsAdded"] == 1 + assert result["sessionsSkipped"] == 1 + + def test_import_rejects_session_ids_that_could_escape_storage(self, manager: AgentManager, tmp_path: Path): + source = tmp_path / "source" + sessions_dir = source / "temp" / "desktop_sessions" + sessions_dir.mkdir(parents=True) + (sessions_dir / "malicious.json").write_text( + json.dumps({ + "id": "../../outside", + "title": "unsafe", + "messages": [], + "msg_seq": 0, + }), + encoding="utf-8", + ) + + result = manager.import_sessions(str(source)) + + assert result["sessionsAdded"] == 0 + assert result["sessionsSkipped"] == 1 + assert manager.sessions == {} + assert not (manager._sessions_dir.parent.parent / "outside.json").exists() + + +class TestPersistAtomicNoDataLoss: + """Verify that a failed write does not destroy the existing session file.""" + + def test_write_failure_preserves_original(self, manager: AgentManager): + """If write_text raises mid-write, the original .json file is untouched.""" + sess = _make_session(sid="sess-atomic-test", messages=[{"role": "user", "content": "original"}]) + manager.sessions[sess.id] = sess + # Persist once successfully. + manager._persist_session(sess) + original_content = manager._session_file(sess.id).read_text(encoding="utf-8") + + # Now make the session have new content and make tmp write fail. + sess.messages.append({"role": "assistant", "content": "new content"}) + with patch("pathlib.Path.write_text", side_effect=OSError("disk full")): + manager._persist_session(sess) + + # Original file should be untouched (os.replace never ran because tmp write failed). + current_content = manager._session_file(sess.id).read_text(encoding="utf-8") + assert current_content == original_content + + def test_replace_failure_preserves_original(self, manager: AgentManager): + """If os.replace raises, the original file is untouched.""" + sess = _make_session(sid="sess-replace-test", messages=[{"role": "user", "content": "original"}]) + manager.sessions[sess.id] = sess + manager._persist_session(sess) + original_content = manager._session_file(sess.id).read_text(encoding="utf-8") + + sess.messages.append({"role": "assistant", "content": "new"}) + with patch("os.replace", side_effect=OSError("permission denied")): + manager._persist_session(sess) + + current_content = manager._session_file(sess.id).read_text(encoding="utf-8") + assert current_content == original_content + + +class TestSessionContinuityAfterRestart: + """Verify that llm_history is injected when agent is recreated (simulates bridge restart).""" + + def test_stale_turn_cannot_mutate_a_reused_session(self, manager: AgentManager): + sess = _make_session(sid="sess-stale-turn", messages=[]) + sess.active_turn_id = "new-turn" + manager.sessions[sess.id] = sess + + with patch.object(manager, "make_agent") as make_agent: + manager.run_agent_turn(sess, "old work", turn_id="old-turn") + + make_agent.assert_not_called() + assert sess.status == "idle" + assert sess.messages == [] + + def test_run_agent_turn_injects_history(self, manager: AgentManager): + """After bridge restart (agent=None, llm_history populated), run_agent_turn + should inject persisted llm_history into the newly created agent.""" + history = [ + {"role": "user", "content": [{"type": "text", "text": "hello"}]}, + {"role": "assistant", "content": [{"type": "text", "text": "hi there"}]}, + {"role": "user", "content": [{"type": "text", "text": "what did I just say?"}]}, + ] + sess = _make_session(sid="sess-continuity-1", messages=[ + {"role": "user", "content": "hello"}, + {"role": "assistant", "content": "hi there"}, + ]) + sess.llm_history = history + sess.agent = None + manager.sessions[sess.id] = sess + + class FakeBackend: + def __init__(self): + self.history = [] + self.name = "test-backend" + + class FakeLLMClient: + def __init__(self): + self.backend = FakeBackend() + + class FakeAgent: + def __init__(self): + self.llmclient = FakeLLMClient() + self.llm_no = 0 + self.inc_out = True + self.verbose = True + + def next_llm(self, n): + self.llm_no = n + + fake_agent = FakeAgent() + with patch.object(manager, "make_agent", return_value=fake_agent): + if sess.agent is None: + sess.agent = manager.make_agent(sess) + if sess.llm_history: + try: + sess.agent.llmclient.backend.history = sess.llm_history + except Exception: + pass + + assert sess.agent.llmclient.backend.history == history + assert len(sess.agent.llmclient.backend.history) == 3 + + def test_no_history_no_crash(self, manager: AgentManager): + """New session with no llm_history should not crash on agent creation.""" + sess = _make_session(sid="sess-continuity-2") + sess.llm_history = None + sess.agent = None + manager.sessions[sess.id] = sess + + class FakeBackend: + def __init__(self): + self.history = [] + self.name = "test" + + class FakeLLMClient: + def __init__(self): + self.backend = FakeBackend() + + class FakeAgent: + def __init__(self): + self.llmclient = FakeLLMClient() + self.llm_no = 0 + + def next_llm(self, n): + self.llm_no = n + + fake_agent = FakeAgent() + with patch.object(manager, "make_agent", return_value=fake_agent): + if sess.agent is None: + sess.agent = manager.make_agent(sess) + if sess.llm_history: + try: + sess.agent.llmclient.backend.history = sess.llm_history + except Exception: + pass + + assert sess.agent.llmclient.backend.history == [] + + def test_empty_history_list_no_inject(self, manager: AgentManager): + """Empty llm_history list should not overwrite agent's default state.""" + sess = _make_session(sid="sess-continuity-3") + sess.llm_history = [] + sess.agent = None + manager.sessions[sess.id] = sess + + class FakeBackend: + def __init__(self): + self.history = [{"role": "system", "content": "default"}] + self.name = "test" + + class FakeLLMClient: + def __init__(self): + self.backend = FakeBackend() + + class FakeAgent: + def __init__(self): + self.llmclient = FakeLLMClient() + self.llm_no = 0 + + def next_llm(self, n): + self.llm_no = n + + fake_agent = FakeAgent() + with patch.object(manager, "make_agent", return_value=fake_agent): + if sess.agent is None: + sess.agent = manager.make_agent(sess) + if sess.llm_history: + try: + sess.agent.llmclient.backend.history = sess.llm_history + except Exception: + pass + + assert sess.agent.llmclient.backend.history == [{"role": "system", "content": "default"}] + + def test_model_preserved_after_restart(self, manager: AgentManager): + """sess.llm_no should be applied to recreated agent via next_llm.""" + sess = _make_session(sid="sess-continuity-4") + sess.llm_no = 3 + sess.llm_history = [{"role": "user", "content": [{"type": "text", "text": "test"}]}] + sess.agent = None + manager.sessions[sess.id] = sess + + class FakeBackend: + def __init__(self): + self.history = [] + self.name = "test" + + class FakeLLMClient: + def __init__(self): + self.backend = FakeBackend() + + class FakeAgent: + def __init__(self): + self.llmclient = FakeLLMClient() + self.llm_no = 0 + self.next_llm_calls = [] + + def next_llm(self, n): + self.llm_no = n + self.next_llm_calls.append(n) + + fake_agent = FakeAgent() + with patch.object(manager, "make_agent", return_value=fake_agent): + if sess.agent is None: + sess.agent = manager.make_agent(sess) + if sess.llm_history: + try: + sess.agent.llmclient.backend.history = sess.llm_history + except Exception: + pass + agent = sess.agent + no = sess.llm_no + if no is not None and hasattr(agent, "next_llm"): + agent.next_llm(int(no)) + + assert fake_agent.llm_no == 3 + assert fake_agent.next_llm_calls == [3] + assert fake_agent.llmclient.backend.history == sess.llm_history + + def test_persist_and_reload_preserves_llm_no(self, manager: AgentManager): + """Full cycle: persist session with llm_no, reload, verify llm_no survives.""" + sess = _make_session(sid="sess-roundtrip") + sess.llm_no = 5 + sess.llm_history = [{"role": "user", "content": [{"type": "text", "text": "hi"}]}] + manager.sessions[sess.id] = sess + manager._persist_session(sess) + + manager.sessions = {} + manager._load_sessions() + + reloaded = manager.sessions.get("sess-roundtrip") + assert reloaded is not None + assert reloaded.llm_no == 5 + assert reloaded.llm_history == [{"role": "user", "content": [{"type": "text", "text": "hi"}]}] + assert reloaded.agent is None + + +class TestDeferredSessionModelSwitch: + class FakeBackend: + name = "model-a" + history = [] + + class FakeClient: + backend = None + + def __init__(self): + self.backend = TestDeferredSessionModelSwitch.FakeBackend() + + class FakeAgent: + def __init__(self): + self.llm_no = 0 + self.llmclient = TestDeferredSessionModelSwitch.FakeClient() + self.next_llm_calls: list[int] = [] + + def next_llm(self, no: int): + self.next_llm_calls.append(no) + self.llm_no = no + self.llmclient.backend.name = f"model-{no}" + + def test_running_turn_keeps_current_client_and_defers_new_binding(self, manager: AgentManager): + sess = _make_session("sess-running-switch") + sess.status = "running" + sess.llm_no = 0 + sess.running_llm_no = 0 + sess.running_model = "model-a" + sess.agent = self.FakeAgent() + manager.sessions[sess.id] = sess + + result = manager.set_session_model(sess.id, 2) + + assert sess.llm_no == 2 + assert sess.agent.next_llm_calls == [] + assert result["model"]["llmNo"] == 2 + assert result["model"]["runningLlmNo"] == 0 + assert result["model"]["runningModel"] == "model-a" + + def test_idle_session_switches_live_client_immediately(self, manager: AgentManager): + sess = _make_session("sess-idle-switch") + sess.status = "idle" + sess.llm_no = 0 + sess.agent = self.FakeAgent() + manager.sessions[sess.id] = sess + + manager.set_session_model(sess.id, 2) + + assert sess.agent.next_llm_calls == [2] + + def test_turn_captures_and_clears_running_model(self, manager: AgentManager): + import queue + + sess = _make_session("sess-running-snapshot") + sess.llm_no = 2 + fake_agent = self.FakeAgent() + observed: list[tuple[int | None, str | None]] = [] + + def put_task(_prompt, images=None): + observed.append((sess.running_llm_no, sess.running_model)) + q = queue.Queue() + q.put({"done": "ok", "outputs": ["ok"]}) + return q + + fake_agent.put_task = put_task + fake_agent.inc_out = True + sess.agent = fake_agent + manager.sessions[sess.id] = sess + plan_state = sys.modules["plan_state"] + with patch.object(plan_state, "sync_plan_path_from_text", lambda *args: None, create=True): + manager.run_agent_turn(sess, "hello") + + assert observed == [(2, "model-2")] + assert sess.running_llm_no is None + assert sess.running_model is None + assert sess.status == "idle" + + def test_concurrent_sessions_keep_independent_next_model_bindings(self, manager: AgentManager): + sessions = [] + for i in range(10): + sess = _make_session(f"sess-concurrent-{i}") + sess.status = "running" + sess.llm_no = 0 + sess.agent = self.FakeAgent() + manager.sessions[sess.id] = sess + sessions.append(sess) + + threads = [ + threading.Thread(target=manager.set_session_model, args=(sess.id, i + 1)) + for i, sess in enumerate(sessions) + ] + for thread in threads: + thread.start() + for thread in threads: + thread.join(timeout=2) + + assert [sess.llm_no for sess in sessions] == list(range(1, 11)) + assert all(sess.agent.next_llm_calls == [] for sess in sessions) + + +class TestConductorModelConfigResolution: + def test_configured_model_wins(self): + state = _mod._resolve_conductor_model_state( + {"conductor": {"llmNo": 2}, "ui": {"llmNo": 1}}, + profile_count=4, + ) + assert state == {"configured": 2, "effective": 2, "fallbackReason": None} + + def test_missing_config_uses_ui_default(self): + state = _mod._resolve_conductor_model_state( + {"ui": {"llmNo": 1}}, + profile_count=4, + ) + assert state == {"configured": None, "effective": 1, "fallbackReason": "ui_default"} + + def test_out_of_range_config_never_wraps(self): + state = _mod._resolve_conductor_model_state( + {"conductor": {"llmNo": 99}, "ui": {"llmNo": 1}}, + profile_count=4, + ) + assert state == {"configured": 99, "effective": 1, "fallbackReason": "invalid_configured"} + + def test_no_valid_config_falls_back_to_first_profile(self): + state = _mod._resolve_conductor_model_state( + {"conductor": {"llmNo": "bad"}, "ui": {"llmNo": 99}}, + profile_count=4, + ) + assert state == {"configured": None, "effective": 0, "fallbackReason": "first_available"} + + def test_no_profiles_has_no_effective_model(self): + state = _mod._resolve_conductor_model_state({}, profile_count=0) + assert state == {"configured": None, "effective": None, "fallbackReason": "no_models"} + + +class TestConductorModelHandlers: + class Request: + def __init__(self, body: dict): + self._body = body + self.can_read_body = True + + async def json(self): + return self._body + + def test_post_rejects_out_of_range_without_writing(self, manager: AgentManager, tmp_path: Path): + import asyncio + + settings = tmp_path / "settings.json" + settings.write_text(json.dumps({"ui": {"llmNo": 1}}), encoding="utf-8") + manager.list_model_profiles = lambda: [{"id": i} for i in range(4)] + with patch.object(_mod, "manager", manager), patch.object(_mod, "_SETTINGS", settings): + response = asyncio.run(_mod.conductor_model_save_handler(self.Request({"llmNo": 99}))) + + assert response.status == 400 + assert json.loads(response.text)["error"] == "model_out_of_range" + assert json.loads(settings.read_text(encoding="utf-8")) == {"ui": {"llmNo": 1}} + + +class TestMaintenanceGate: + class FakeQueue: + def __init__(self, unfinished: int): + self.unfinished_tasks = unfinished + + class FakeAgent: + def __init__(self, unfinished: int = 0, *, running: bool = False): + self.task_queue = TestMaintenanceGate.FakeQueue(unfinished) + self.is_running = running + self.abort_calls = 0 + + def abort(self): + self.abort_calls += 1 + + def test_rejects_running_sessions_and_managed_extras(self, manager: AgentManager): + active = _make_session("sess-active") + active.status = "running" + manager.sessions[active.id] = active + + with pytest.raises(MaintenanceConflict) as raised: + manager.begin_maintenance("import", lambda: ["reflect/scheduler.py"]) + + assert raised.value.running_sessions == ["sess-active"] + assert raised.value.running_extras == ["reflect/scheduler.py"] + assert manager._maintenance_token is None + + def test_cancelled_but_unfinished_queue_still_blocks(self, manager: AgentManager): + queued = _make_session("sess-queued") + queued.status = "cancelled" + queued.agent = self.FakeAgent(unfinished=1) + manager.sessions[queued.id] = queued + + with pytest.raises(MaintenanceConflict) as raised: + manager.begin_maintenance("import", lambda: []) + + assert raised.value.running_sessions == ["sess-queued"] + + def test_messages_reports_idle_live_thread_as_unfinished_until_joined( + self, manager: AgentManager, monkeypatch: pytest.MonkeyPatch + ): + release = threading.Event() + worker = threading.Thread(target=release.wait) + session = _make_session("sess-idle-live-thread") + session.thread = worker + manager.sessions[session.id] = session + monkeypatch.setattr( + _plan_state_stub, + "desktop_plan_payload_from_session", + lambda *_args, **_kwargs: {}, + raising=False, + ) + + worker.start() + try: + snapshot = manager.messages(session.id) + assert snapshot["status"] == "idle" + assert snapshot["hasUnfinishedWork"] is True + finally: + release.set() + worker.join(timeout=2) + + assert worker.is_alive() is False + assert manager.messages(session.id)["hasUnfinishedWork"] is False + + def test_deleted_running_session_remains_registered_until_done( + self, manager: AgentManager, monkeypatch: pytest.MonkeyPatch + ): + queued = _make_session("sess-retired") + queued.status = "cancelled" + queued.agent = self.FakeAgent(unfinished=1) + manager.sessions[queued.id] = queued + monkeypatch.setattr(_mod, "_purge_session_uploads", lambda _sid: None) + + manager.delete_session(queued.id) + assert queued.cancel_requested is True + assert queued.active_turn_id == "" + assert queued.status == "cancelled" + with pytest.raises(MaintenanceConflict) as raised: + manager.begin_maintenance("export", lambda: []) + assert raised.value.running_sessions == ["sess-retired"] + + queued.agent.task_queue.unfinished_tasks = 0 + token = manager.begin_maintenance("export", lambda: []) + assert manager._retired_sessions == {} + manager.end_maintenance(token) + + def test_gate_rejects_prompt_and_service_start( + self, manager: AgentManager, monkeypatch: pytest.MonkeyPatch + ): + session = _make_session("sess-blocked") + manager.sessions[session.id] = session + monkeypatch.setattr(_mod, "manager", manager) + token = manager.begin_maintenance("import", lambda: []) + try: + with pytest.raises(MaintenanceConflict): + manager.submit_prompt(session.id, "blocked") + with pytest.raises(MaintenanceConflict): + _mod.services.start_service("missing-service") + finally: + manager.end_maintenance(token) + + def test_gate_rejects_cancel_without_mutating_session_or_disk( + self, manager: AgentManager + ): + session = _make_session("sess-cancel-blocked") + session.partial = {"content": "unfinished"} + manager.sessions[session.id] = session + manager._persist_session(session, strict=True) + session_path = manager._session_file(session.id) + before_bytes = session_path.read_bytes() + before_messages = copy.deepcopy(session.messages) + token = manager.begin_maintenance("import", lambda: []) + try: + with pytest.raises(MaintenanceConflict): + manager.cancel(session.id) + finally: + manager.end_maintenance(token) + + assert session.cancel_requested is False + assert session.status == "idle" + assert session.partial == {"content": "unfinished"} + assert session.messages == before_messages + assert session_path.read_bytes() == before_bytes + + def test_accepted_exit_irreversibly_blocks_new_mutation_and_maintenance( + self, manager: AgentManager, monkeypatch: pytest.MonkeyPatch + ): + import asyncio + + class Request: + remote = "127.0.0.1" + + exit_calls: list[bool] = [] + session = _make_session("sess-before-exit") + manager.sessions[session.id] = session + manager._persist_session(session, strict=True) + session_path = manager._session_file(session.id) + before_bytes = session_path.read_bytes() + monkeypatch.setattr(_mod, "manager", manager) + monkeypatch.setattr(_mod, "_exit_bridge", lambda: exit_calls.append(True)) + + response = asyncio.run(_mod.bridge_exit_handler(Request())) + + assert response.status == 200 + assert exit_calls == [True] + assert manager._shutdown_requested is True + with pytest.raises(MaintenanceConflict) as maintenance_error: + manager.begin_maintenance("import", lambda: []) + assert maintenance_error.value.code == "shutdown_in_progress" + with pytest.raises(MaintenanceConflict) as mutation_error: + with manager.mutation(): + session.title = "must not happen" + manager._persist_session(session, strict=True) + assert mutation_error.value.code == "shutdown_in_progress" + assert session.title == "Test" + assert session_path.read_bytes() == before_bytes + + def test_active_maintenance_refuses_exit_with_409_and_keeps_bridge_alive( + self, manager: AgentManager, monkeypatch: pytest.MonkeyPatch + ): + import asyncio + + class Request: + remote = "127.0.0.1" + headers: dict[str, str] = {} + method = "POST" + + exit_calls: list[bool] = [] + monkeypatch.setattr(_mod, "manager", manager) + monkeypatch.setattr(_mod, "_exit_bridge", lambda: exit_calls.append(True)) + token = manager.begin_maintenance("import", lambda: []) + try: + response = asyncio.run( + _mod.cors_middleware(Request(), _mod.bridge_exit_handler) + ) + finally: + manager.end_maintenance(token) + + assert response.status == 409 + assert json.loads(response.text)["code"] == "maintenance_conflict" + assert exit_calls == [] + assert manager._shutdown_requested is False + + def test_import_failure_releases_gate( + self, manager: AgentManager, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + source = tmp_path / "source" + (source / "memory").mkdir(parents=True) + (source / "memory" / "one.md").write_text("one", encoding="utf-8") + monkeypatch.setattr(_mod, "manager", manager) + monkeypatch.setattr(_mod.services, "running_managed_ids", lambda: []) + monkeypatch.setattr( + _mod, "merge_data_files", lambda *_args, **_kwargs: (_ for _ in ()).throw(OSError("merge failed")) + ) + + with pytest.raises(OSError, match="merge failed"): + _mod._import_data_source(str(source)) + + assert manager._maintenance_token is None + token = manager.begin_maintenance("export", lambda: []) + manager.end_maintenance(token) + + def test_export_flush_failure_preserves_existing_destination( + self, manager: AgentManager, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + root = Path(manager.ga_root) + (root / "memory").mkdir() + (root / "memory" / "one.md").write_text("one", encoding="utf-8") + session = _make_session("sess-flush-failure") + manager.sessions[session.id] = session + destination = tmp_path / "backup.zip" + destination.write_bytes(b"old backup") + monkeypatch.setattr(_mod, "manager", manager) + monkeypatch.setattr(_mod.services, "running_managed_ids", lambda: []) + monkeypatch.setattr( + manager, + "_persist_session", + lambda *_args, **_kwargs: (_ for _ in ()).throw(OSError("disk full")), + ) + + with pytest.raises(OSError, match="disk full"): + _mod._export_data_source(str(destination), "included") + + assert destination.read_bytes() == b"old backup" + assert manager._maintenance_token is None + + def test_cancelled_http_task_waits_for_worker_owned_gate( + self, manager: AgentManager, monkeypatch: pytest.MonkeyPatch + ): + import asyncio + + started = threading.Event() + release = threading.Event() + monkeypatch.setattr(_mod, "manager", manager) + + def worker(): + token = manager.begin_maintenance("import", lambda: []) + started.set() + try: + assert release.wait(timeout=5) + finally: + manager.end_maintenance(token) + + async def scenario(): + task = asyncio.create_task(_mod._run_worker_to_completion(worker)) + assert await asyncio.to_thread(started.wait, 2) + task.cancel() + await asyncio.sleep(0.02) + assert manager._maintenance_token is not None + release.set() + with pytest.raises(asyncio.CancelledError): + await task + assert manager._maintenance_token is None + + asyncio.run(scenario()) + + def test_service_start_race_cannot_pass_maintenance_admission( + self, manager: AgentManager, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + class FakeProcess: + pid = 43210 + stdout = () + returncode = None + + def poll(self): + return None + + service_manager = ServiceManager.__new__(ServiceManager) + service_manager.lock = threading.RLock() + service_manager.ga_root = tmp_path + service_manager.procs = {} + service_manager.buffers = {} + service_manager._emit = lambda _event: None + service_manager._im_catalog = {} + service_manager._catalog = {"worker": {"id": "worker", "cmd": ["worker"], "port": None}} + service_manager._stopping = set() + entered_start = threading.Event() + release_start = threading.Event() + start_result: list[dict] = [] + admission_result: list[object] = [] + + monkeypatch.setattr(_mod, "manager", manager) + monkeypatch.setattr(_mod.subprocess, "Popen", lambda *_args, **_kwargs: FakeProcess()) + monkeypatch.setattr(service_manager, "_is_configured", lambda _sid: True) + + def wait_started(_proc): + entered_start.set() + assert release_start.wait(timeout=5) + + monkeypatch.setattr(service_manager, "_wait_started", wait_started) + + start_thread = threading.Thread( + target=lambda: start_result.append(service_manager.start_service("worker")) + ) + + def admit(): + try: + admission_result.append( + manager.begin_maintenance("import", service_manager.running_managed_ids) + ) + except Exception as error: + admission_result.append(error) + + start_thread.start() + assert entered_start.wait(timeout=2) + admission_thread = threading.Thread(target=admit) + admission_thread.start() + time.sleep(0.03) + assert admission_result == [] + release_start.set() + start_thread.join(timeout=2) + admission_thread.join(timeout=2) + + assert start_result[0]["ok"] is True + assert start_result[0]["service"]["managed"] is True + assert isinstance(admission_result[0], MaintenanceConflict) + assert admission_result[0].running_extras == ["worker"] + + def test_managed_service_state_keeps_ui_maintenance_metadata( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + service_manager = ServiceManager.__new__(ServiceManager) + service_manager.lock = threading.RLock() + service_manager.ga_root = tmp_path + service_manager.procs = {} + service_manager.buffers = {} + service_manager._im_catalog = {} + service_manager._catalog = { + "reflect/scheduler.py": { + "id": "reflect/scheduler.py", + "port": None, + } + } + service_manager._stopping = set() + monkeypatch.setattr(_mod, "_port_alive", lambda _port: False) + + state = service_manager.list_panel_state()[1] + + assert state["id"] == "reflect/scheduler.py" + assert state["name"] == "reflect/scheduler.py" + assert state["managed"] is True + assert state["running"] is False + assert "memMb" in state + assert "cpuPct" in state + + +class TestManagedServiceOwnership: + @staticmethod + def service_manager(tmp_path: Path, port: int = 8900) -> ServiceManager: + service_manager = ServiceManager.__new__(ServiceManager) + service_manager.lock = threading.RLock() + service_manager.ga_root = tmp_path + service_manager.procs = {} + service_manager.buffers = {} + service_manager._emit = lambda _event: None + service_manager._im_catalog = {} + service_manager._catalog = { + "frontends/conductor.py": { + "id": "frontends/conductor.py", + "cmd": ["python", "conductor.py", "--no-browser", "--port", str(port)], + "port": port, + } + } + service_manager._stopping = set() + return service_manager + + def test_foreign_listener_is_external_not_owned_or_running( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + service_manager = self.service_manager(tmp_path) + monkeypatch.setattr(_mod, "_port_alive", lambda port: port == 8900) + + state = service_manager.list_panel_state()[1] + + assert state == { + **state, + "id": "frontends/conductor.py", + "status": "error", + "running": False, + "owned": False, + "external": True, + "portConflict": True, + "port": 8900, + "pid": None, + "errorKey": "err.portBusy", + } + assert service_manager.running_managed_ids() == [] + + def test_foreign_listener_prevents_spawn_and_stop_never_touches_it( + self, + manager: AgentManager, + tmp_path: Path, + monkeypatch: pytest.MonkeyPatch, + ): + service_manager = self.service_manager(tmp_path) + spawn_calls: list[object] = [] + monkeypatch.setattr(_mod, "manager", manager) + monkeypatch.setattr(_mod, "_port_alive", lambda port: port == 8900) + monkeypatch.setattr(service_manager, "_is_configured", lambda _sid: True) + monkeypatch.setattr( + _mod.subprocess, + "Popen", + lambda *_args, **_kwargs: spawn_calls.append(object()), + ) + + started = service_manager.start_service("frontends/conductor.py") + stopped = service_manager.stop_service("frontends/conductor.py") + + assert started["ok"] is False + assert started["error"] == "port_conflict" + assert started["service"]["status"] == "error" + assert stopped["ok"] is False + assert stopped["error"] == "not_owned" + assert stopped["service"]["status"] == "error" + assert spawn_calls == [] + assert service_manager.procs == {} + + def test_dead_owned_child_with_foreign_port_is_port_conflict( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + class DeadProcess: + pid = 41001 + returncode = 1 + + @staticmethod + def poll(): + return 1 + + service_manager = self.service_manager(tmp_path) + service_manager.procs["frontends/conductor.py"] = DeadProcess() + monkeypatch.setattr(_mod, "_port_alive", lambda _port: True) + + state = service_manager.list_panel_state()[1] + + assert state["status"] == "error" + assert state["running"] is False + assert state["owned"] is False + assert state["external"] is True + assert state["pid"] is None + assert service_manager.running_managed_ids() == [] + + def test_stop_terminates_only_the_tracked_owned_process_with_a_bound( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + class OwnedProcess: + pid = 41002 + returncode = None + terminate_calls = 0 + kill_calls = 0 + waits: list[float | None] = [] + + def poll(self): + return self.returncode + + def terminate(self): + self.terminate_calls += 1 + + def wait(self, timeout=None): + self.waits.append(timeout) + if len(self.waits) == 1: + raise _mod.subprocess.TimeoutExpired("conductor", timeout) + self.returncode = -9 + return self.returncode + + def kill(self): + self.kill_calls += 1 + + service_manager = self.service_manager(tmp_path, 29890) + owned = OwnedProcess() + service_manager.procs["frontends/conductor.py"] = owned + monkeypatch.setattr( + _mod, + "_port_alive", + lambda _port: owned.poll() is None, + ) + + before = service_manager.list_panel_state()[1] + result = service_manager.stop_service("frontends/conductor.py") + + assert before["status"] == "running" + assert before["running"] is True + assert before["owned"] is True + assert before["external"] is False + assert before["pid"] == owned.pid + assert result["ok"] is True + assert result["service"]["status"] == "offline" + assert owned.terminate_calls == 1 + assert owned.kill_calls == 1 + assert owned.waits == [5.0, 2.0] + assert service_manager.procs == {} + + def test_real_foreign_socket_survives_panel_start_and_stop( + self, + manager: AgentManager, + tmp_path: Path, + monkeypatch: pytest.MonkeyPatch, + ): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as foreign: + foreign.bind(("127.0.0.1", 0)) + foreign.listen() + port = int(foreign.getsockname()[1]) + service_manager = self.service_manager(tmp_path, port) + monkeypatch.setattr(_mod, "manager", manager) + monkeypatch.setattr(service_manager, "_is_configured", lambda _sid: True) + monkeypatch.setattr( + _mod.subprocess, + "Popen", + lambda *_args, **_kwargs: pytest.fail("foreign listener must prevent spawn"), + ) + + assert service_manager.list_panel_state()[1]["status"] == "error" + assert service_manager.start_service("frontends/conductor.py")["error"] == "port_conflict" + stopped = service_manager.stop_service("frontends/conductor.py") + assert stopped["ok"] is False + assert stopped["error"] == "not_owned" + assert stopped["service"]["status"] == "error" + assert foreign.getsockname()[1] == port + + +class TestConductorPortIsolation: + def test_production_ignores_e2e_port_without_report_marker( + self, monkeypatch: pytest.MonkeyPatch + ): + monkeypatch.delenv(_mod.E2E_REPORT_DIR_ENV, raising=False) + monkeypatch.setenv(_mod.E2E_CONDUCTOR_PORT_ENV, "29890") + assert _mod._configured_conductor_port() == 8900 + + def test_e2e_catalog_and_explicit_child_argv_share_the_validated_port( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + monkeypatch.setenv(_mod.E2E_REPORT_DIR_ENV, str(tmp_path / "report")) + monkeypatch.setenv(_mod.E2E_CONDUCTOR_PORT_ENV, "29890") + + services = _mod.discover_extra_services(tmp_path) + conductor = next(item for item in services if item["id"] == "frontends/conductor.py") + + assert conductor["port"] == 29890 + assert conductor["cmd"][-2:] == ["--port", "29890"] + + @pytest.mark.parametrize("value", ["", "0", "65536", "2.5", "-1", "1234"]) + def test_invalid_e2e_conductor_port_fails_closed( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch, value: str + ): + monkeypatch.setenv(_mod.E2E_REPORT_DIR_ENV, str(tmp_path / "report")) + monkeypatch.setenv(_mod.E2E_CONDUCTOR_PORT_ENV, value) + with pytest.raises(RuntimeError, match="between 1 and 65535"): + _mod._configured_conductor_port() + + +class TestCanonicalSessionRestart: + def test_invalid_imported_records_are_skipped_and_valid_record_reloads( + self, manager: AgentManager + ): + records = { + "int-id.json": {"id": 9, "messages": [], "msg_seq": 0}, + "nan.json": { + "id": "sess-nan", + "messages": [], + "msg_seq": 0, + "updated_at": float("nan"), + }, + "bad-list.json": { + "id": "sess-bad-list", + "messages": ["bad"], + "msg_seq": 0, + }, + "valid.json": { + "id": "sess-canonical", + "title": "Canonical", + "messages": [{"role": "user", "content": "hi"}], + "msg_seq": 1, + "created_at": 10, + "updated_at": 11, + "unknown": "ignored", + }, + } + for name, record in records.items(): + (manager._sessions_dir / name).write_text(json.dumps(record), encoding="utf-8") + + manager._load_sessions() + + assert set(manager.sessions) == {"sess-canonical"} + assert manager.active_session_id == "sess-canonical" + assert manager.sessions["sess-canonical"].updated_at == 11 + + +class TestBridgeSettingsWrites: + class Request: + can_read_body = True + + def __init__(self, body: dict): + self.body = body + + async def json(self): + return self.body + + def test_ui_save_preserves_sibling_keys_with_atomic_update( + self, manager: AgentManager, tmp_path: Path + ): + import asyncio + + settings = tmp_path / "settings.json" + settings.write_text( + json.dumps({ + "ga_source_override": "/external/source", + "conductor": {"llmNo": 3}, + "unknown": {"keep": True}, + }), + encoding="utf-8", + ) + with patch.object(_mod, "manager", manager), patch.object(_mod, "_SETTINGS", settings): + response = asyncio.run( + _mod.save_config_handler(self.Request({"config": {"lang": "en"}})) + ) + + assert response.status == 200 + assert json.loads(settings.read_text(encoding="utf-8")) == { + "ga_source_override": "/external/source", + "conductor": {"llmNo": 3}, + "unknown": {"keep": True}, + "ui": {"lang": "en"}, + } + + def test_ui_save_failure_returns_500_and_does_not_claim_success( + self, manager: AgentManager, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + import asyncio + + settings = tmp_path / "settings.json" + original = '{"unknown":{"keep":true}}' + settings.write_text(original, encoding="utf-8") + monkeypatch.setattr( + _mod, + "_update_settings_doc", + lambda _mutate: (_ for _ in ()).throw( + _mod.DesktopSettingsError("atomic replace failed") + ), + ) + with patch.object(_mod, "manager", manager), patch.object(_mod, "_SETTINGS", settings): + response = asyncio.run( + _mod.save_config_handler(self.Request({"config": {"lang": "en"}})) + ) + + assert response.status == 500 + assert json.loads(response.text)["error"] == "atomic replace failed" + assert settings.read_text(encoding="utf-8") == original + assert manager.config == {} diff --git a/frontends/tests/test_bridge_submit.py b/frontends/tests/test_bridge_submit.py new file mode 100644 index 000000000..630c06b10 --- /dev/null +++ b/frontends/tests/test_bridge_submit.py @@ -0,0 +1,261 @@ +"""Unit tests for desktop_bridge.py submit_prompt path-prepend logic and add_message. + +Tests the core file-attachment contract: files_meta → agent_prompt path prepend. +Run: pytest frontends/tests/test_bridge_submit.py -v +""" +import json + + +class TestPathPrepend: + """Test the agent_prompt construction logic from submit_prompt.""" + + @staticmethod + def _build_agent_prompt(prompt: str, files_meta: list | None) -> str: + """Replicate the path prepend logic from desktop_bridge.py submit_prompt.""" + agent_prompt = prompt + if files_meta: + paths = [f["path"] for f in files_meta if f.get("path")] + if paths: + agent_prompt = " ".join(paths) + "\n" + prompt + return agent_prompt + + def test_single_file_prepend(self): + prompt = "Analyze this file" + files = [{"name": "data.csv", "path": "/tmp/uploads/data.csv", "size": 1024}] + result = self._build_agent_prompt(prompt, files) + assert result == "/tmp/uploads/data.csv\nAnalyze this file" + + def test_multiple_files_prepend(self): + prompt = "Compare these" + files = [ + {"name": "a.py", "path": "/tmp/a.py", "size": 100}, + {"name": "b.py", "path": "/tmp/b.py", "size": 200}, + {"name": "c.py", "path": "/tmp/c.py", "size": 300}, + ] + result = self._build_agent_prompt(prompt, files) + assert result == "/tmp/a.py /tmp/b.py /tmp/c.py\nCompare these" + + def test_no_files_meta_unchanged(self): + prompt = "Just a question" + assert self._build_agent_prompt(prompt, None) == prompt + assert self._build_agent_prompt(prompt, []) == prompt + + def test_files_without_path_skipped(self): + prompt = "Check files" + files = [ + {"name": "good.txt", "path": "/tmp/good.txt"}, + {"name": "bad.txt"}, # no path + {"name": "empty.txt", "path": ""}, # empty path + ] + result = self._build_agent_prompt(prompt, files) + assert result == "/tmp/good.txt\nCheck files" + + def test_path_with_spaces(self): + prompt = "Read it" + files = [{"name": "my report.txt", "path": "/tmp/desktop_uploads/my report.txt"}] + result = self._build_agent_prompt(prompt, files) + assert "/tmp/desktop_uploads/my report.txt" in result + + def test_path_with_cjk(self): + prompt = "分析这个" + files = [{"name": "报告.csv", "path": "/tmp/desktop_uploads/报告.csv"}] + result = self._build_agent_prompt(prompt, files) + assert result.startswith("/tmp/desktop_uploads/报告.csv\n") + + def test_empty_prompt_with_files(self): + prompt = "" + files = [{"name": "f.txt", "path": "/tmp/f.txt"}] + result = self._build_agent_prompt(prompt, files) + assert result == "/tmp/f.txt\n" + + +class TestAddMessageExtra: + """Test that add_message stores extra fields correctly.""" + + @staticmethod + def _simulate_add_message(role: str, content: str, **extra) -> dict: + """Replicate add_message logic from AgentManager.""" + msg = { + "id": 1, + "role": role, + "content": content, + "ts": 1000.0, + } + msg.update(extra) + return msg + + def test_files_stored_in_message(self): + files_meta = [{"name": "x.py", "path": "/tmp/x.py", "size": 512}] + msg = self._simulate_add_message("user", "hello", files=files_meta) + assert msg["files"] == files_meta + + def test_images_stored_in_message(self): + image_metas = [{"name": "pic.png", "path": "/tmp/pic.png"}] + msg = self._simulate_add_message("user", "see this", images=image_metas) + assert msg["images"] == image_metas + + def test_display_stored_separately(self): + msg = self._simulate_add_message("user", "full prompt with paths", display="clean display text") + assert msg["display"] == "clean display text" + assert msg["content"] == "full prompt with paths" + + def test_no_extra_fields_minimal(self): + msg = self._simulate_add_message("assistant", "response") + assert "files" not in msg + assert "images" not in msg + assert "display" not in msg + + def test_combined_files_and_images(self): + msg = self._simulate_add_message( + "user", "both", + files=[{"name": "f.txt", "path": "/tmp/f.txt"}], + images=[{"name": "i.png", "path": "/tmp/i.png"}], + ) + assert len(msg["files"]) == 1 + assert len(msg["images"]) == 1 + + +class TestImagePathExtraction: + """Test image_paths extraction from image_metas (used for _patch_chat_for_images).""" + + def test_extracts_paths(self): + image_metas = [ + {"name": "a.png", "path": "/tmp/a.png"}, + {"name": "b.jpg", "path": "/tmp/b.jpg"}, + ] + image_paths = [m["path"] for m in (image_metas or []) if m.get("path")] + assert image_paths == ["/tmp/a.png", "/tmp/b.jpg"] + + def test_none_metas(self): + image_metas = None + image_paths = [m["path"] for m in (image_metas or []) if m.get("path")] + assert image_paths == [] + + def test_skips_entries_without_path(self): + image_metas = [ + {"name": "a.png", "path": "/tmp/a.png"}, + {"name": "broken.png"}, + ] + image_paths = [m["path"] for m in (image_metas or []) if m.get("path")] + assert image_paths == ["/tmp/a.png"] + + +class TestSessionFiltering: + """Test the tui_ prefix filter for conductor sessions.""" + + def test_filters_tui_prefix(self): + sessions = [ + {"id": "abc123", "title": "Chat"}, + {"id": "tui_worker_1", "title": "Worker"}, + {"id": "def456", "title": "Another"}, + {"id": "tui_conductor_main", "title": "Main"}, + ] + filtered = [s for s in sessions if not s["id"].startswith("tui_")] + assert len(filtered) == 2 + assert all(not s["id"].startswith("tui_") for s in filtered) + + def test_no_tui_sessions_unchanged(self): + sessions = [{"id": "a"}, {"id": "b"}] + filtered = [s for s in sessions if not s["id"].startswith("tui_")] + assert len(filtered) == 2 + + def test_all_tui_sessions_empty_result(self): + sessions = [{"id": "tui_x"}, {"id": "tui_y"}] + filtered = [s for s in sessions if not s["id"].startswith("tui_")] + assert len(filtered) == 0 + + +class TestRunAgentTurnScope: + """Guard tests: run_agent_turn must NOT reference variables from submit_prompt's scope. + + These tests parse the actual bridge source to catch NameError regressions + (e.g. referencing 'sid' inside run_agent_turn which runs in a different thread). + """ + + @staticmethod + def _get_bridge_source() -> str: + from pathlib import Path + candidates = [ + Path(__file__).parent.parent / "desktop_bridge.py", + Path(__file__).parent.parent.parent / "frontends" / "desktop_bridge.py", + ] + for p in candidates: + if p.exists(): + return p.read_text(encoding="utf-8") + raise FileNotFoundError("desktop_bridge.py not found") + + @staticmethod + def _extract_method_body(source: str, method_name: str) -> str: + """Extract a method with Python's parser so multiline signatures remain supported.""" + import ast + tree = ast.parse(source) + method = next( + ( + node + for node in ast.walk(tree) + if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)) + and node.name == method_name + ), + None, + ) + return ast.get_source_segment(source, method) if method is not None else "" + + def test_run_agent_turn_does_not_reference_bare_sid(self): + """run_agent_turn must use sess.id, never bare 'sid' (which is out of scope).""" + import re + source = self._get_bridge_source() + body = self._extract_method_body(source, "run_agent_turn") + assert body, "Could not extract run_agent_turn body" + # Find bare 'sid' references that are NOT part of 'sess.id' or string literals + bare_sid_refs = re.findall(r'(? str: + s = re.sub(r"[^A-Za-z0-9_-]", "", str(sid or "")) + return s or "_misc" + + +# Mirrors desktop_bridge._session_upload_dir +def _session_upload_dir(upload_root: Path, sid: str) -> Path: + return upload_root / _safe_session_dir(sid) + + +# Mirrors the upload_handler naming/path rules. +def _build_upload_path(upload_root: Path, sid: str, name: str, token: str) -> Path: + safe_name = (name or "file").strip().replace("/", "_").replace("\\", "_") or "file" + return _session_upload_dir(upload_root, sid) / f"{token}__{safe_name}" + + +# Mirrors upload_handler decode logic. +def _decode_upload_data(data_url: str) -> bytes: + if "," in data_url: + b64 = data_url.split(",", 1)[1] + else: + b64 = data_url + return base64.b64decode(b64) + + +# Mirrors upload_delete_handler path whitelist. +def _delete_allowed(upload_root: Path, raw_path: str) -> bool: + target = Path(raw_path).resolve() + root = upload_root.resolve() + return root in target.parents + + +# Mirrors upload_raw_handler path whitelist. +def _raw_allowed(upload_root: Path, raw_path: str) -> bool: + target = Path(raw_path).resolve() + try: + target.relative_to(upload_root.resolve()) + return True + except (ValueError, OSError): + return False + + +# Mirrors upload_raw_handler original filename recovery. +def _original_upload_name(path: Path) -> str: + return path.name.split("__", 1)[-1] + + +class TestSafeSessionDir: + def test_keeps_safe_ascii_chars(self): + assert _safe_session_dir("abc-DEF_123") == "abc-DEF_123" + + def test_strips_path_traversal_and_spaces(self): + assert _safe_session_dir(" ../../team notes ") == "teamnotes" + + def test_empty_or_none_falls_back_to_misc(self): + assert _safe_session_dir("") == "_misc" + assert _safe_session_dir(None) == "_misc" + + def test_non_ascii_only_sid_falls_back_to_misc(self): + assert _safe_session_dir("报告/会议") == "_misc" + + +class TestSessionUploadDir: + def test_scopes_uploads_under_sanitized_sid(self, tmp_path: Path): + root = tmp_path / "desktop_uploads" + actual = _session_upload_dir(root, "../../tui_worker") + assert actual == root / "tui_worker" + + def test_files_bucket_stays_isolated(self, tmp_path: Path): + root = tmp_path / "desktop_uploads" + actual = _session_upload_dir(root, "_files") + assert actual == root / "_files" + + +class TestUploadPathConstruction: + def test_replaces_slashes_in_uploaded_name(self, tmp_path: Path): + root = tmp_path / "desktop_uploads" + path = _build_upload_path(root, "session-1", "dir/sub\\name.txt", "abc123def456") + assert path == root / "session-1" / "abc123def456__dir_sub_name.txt" + + def test_uses_file_when_name_empty(self, tmp_path: Path): + root = tmp_path / "desktop_uploads" + path = _build_upload_path(root, "session-1", " ", "abc123def456") + assert path.name == "abc123def456__file" + + +class TestUploadDecode: + def test_decodes_data_url_payload(self): + payload = "hello,world".encode("utf-8") + data_url = "data:text/plain;base64," + base64.b64encode(payload).decode("ascii") + assert _decode_upload_data(data_url) == payload + + def test_decodes_raw_base64_payload(self): + payload = b"abc123" + raw = base64.b64encode(payload).decode("ascii") + assert _decode_upload_data(raw) == payload + + +class TestUploadPathSafety: + def test_delete_allows_file_inside_upload_root(self, tmp_path: Path): + root = tmp_path / "desktop_uploads" + target = root / "session-1" / "abc__note.txt" + target.parent.mkdir(parents=True) + target.write_text("ok", encoding="utf-8") + assert _delete_allowed(root, str(target)) is True + + def test_delete_rejects_file_outside_upload_root(self, tmp_path: Path): + root = tmp_path / "desktop_uploads" + outside = tmp_path / "outside.txt" + outside.write_text("nope", encoding="utf-8") + assert _delete_allowed(root, str(outside)) is False + + def test_raw_allows_file_inside_upload_root(self, tmp_path: Path): + root = tmp_path / "desktop_uploads" + target = root / "session-1" / "abc__report.csv" + target.parent.mkdir(parents=True) + target.write_text("x,y", encoding="utf-8") + assert _raw_allowed(root, str(target)) is True + + def test_raw_rejects_path_traversal_outside_upload_root(self, tmp_path: Path): + root = tmp_path / "desktop_uploads" + outside = tmp_path / "secret.txt" + outside.write_text("top secret", encoding="utf-8") + assert _raw_allowed(root, str(outside)) is False + + +class TestOriginalUploadName: + def test_strips_uuid_prefix_from_uploaded_file(self): + path = Path("/tmp/desktop_uploads/session-1/abc123def456__my report.txt") + assert _original_upload_name(path) == "my report.txt" + + def test_preserves_cjk_filename(self): + path = Path("/tmp/desktop_uploads/session-1/abc123def456__报告.csv") + assert _original_upload_name(path) == "报告.csv" + + def test_filename_without_prefix_returns_name_as_is(self): + path = Path("/tmp/desktop_uploads/session-1/plain.txt") + assert _original_upload_name(path) == "plain.txt" diff --git a/frontends/tests/test_bridge_utils.py b/frontends/tests/test_bridge_utils.py new file mode 100644 index 000000000..69541514f --- /dev/null +++ b/frontends/tests/test_bridge_utils.py @@ -0,0 +1,420 @@ +"""Unit tests for desktop_bridge.py utility functions. + +Tests pure functions that don't require agent/session infrastructure. +Run: pytest frontends/tests/test_bridge_utils.py -v +""" +import ast +import json +import os +import sys +import re +from pathlib import Path +from types import SimpleNamespace + +# Add project root so we can import bridge helpers +ROOT = Path(__file__).resolve().parent.parent.parent +sys.path.insert(0, str(ROOT / "frontends")) +from data_backup import materialize_import_source, merge_data_files + +# Import the functions under test (module-level helpers) +import importlib.util +spec = importlib.util.spec_from_file_location("desktop_bridge", ROOT / "frontends" / "desktop_bridge.py") + +# We can't import the whole module (it starts aiohttp etc.) so we extract functions manually +_bridge_source = (ROOT / "frontends" / "desktop_bridge.py").read_text(encoding="utf-8") + + +def _load_named_helpers(names, namespace): + tree = ast.parse(_bridge_source) + nodes = [ + node + for node in tree.body + if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)) and node.name in names + ] + exec(compile(ast.Module(body=nodes, type_ignores=[]), "desktop_bridge.py", "exec"), namespace) + return namespace + + +class TestGaRootBoundary: + def test_external_core_override_needs_only_agentmain(self, tmp_path, monkeypatch): + external = tmp_path / "external core" + external.mkdir() + (external / "agentmain.py").write_text("# core\n", encoding="utf-8") + monkeypatch.setenv("GA_ROOT", str(external)) + monkeypatch.setattr(sys, "argv", ["desktop_bridge.py"]) + + helpers = _load_named_helpers( + {"_ga_root_override"}, + {"os": os, "sys": sys, "Path": Path, "Optional": __import__("typing").Optional}, + ) + + assert helpers["_ga_root_override"]() == external.resolve() + + def test_invalid_override_falls_back_instead_of_becoming_app_dir(self, tmp_path, monkeypatch): + missing = tmp_path / "deleted-core" + monkeypatch.setenv("GA_ROOT", str(missing)) + monkeypatch.setattr(sys, "argv", ["desktop_bridge.py"]) + helpers = _load_named_helpers( + {"_ga_root_override"}, + {"os": os, "sys": sys, "Path": Path, "Optional": __import__("typing").Optional}, + ) + + assert helpers["_ga_root_override"]() is None + + +class TestMemoryImport: + def test_source_memory_wins_while_current_responses_remain_add_only(self, tmp_path): + source = tmp_path / "source" + target = tmp_path / "target" + (source / "memory").mkdir(parents=True) + (source / "memory" / "same.md").write_text("new", encoding="utf-8") + (source / "memory" / "added.md").write_text("added", encoding="utf-8") + (source / "temp" / "model_responses").mkdir(parents=True) + (source / "temp" / "model_responses" / "same.json").write_text("new", encoding="utf-8") + (source / "temp" / "model_responses" / "added.json").write_text("added", encoding="utf-8") + (target / "memory").mkdir(parents=True) + (target / "memory" / "same.md").write_text("old", encoding="utf-8") + (target / "temp" / "model_responses").mkdir(parents=True) + (target / "temp" / "model_responses" / "same.json").write_text("old", encoding="utf-8") + + result = merge_data_files(str(source), str(target)) + + assert result["memoryCopied"] == 2 + assert result["memorySkipped"] == 0 + assert result["responsesCopied"] == 1 + assert result["responsesSkipped"] == 1 + assert (target / "memory" / "same.md").read_text(encoding="utf-8") == "new" + assert (target / "memory" / "added.md").read_text(encoding="utf-8") == "added" + assert (target / "temp" / "model_responses" / "same.json").read_text(encoding="utf-8") == "old" + assert (Path(result["backupDir"]) / "memory" / "same.md").read_text(encoding="utf-8") == "old" + + def test_bridge_adopts_only_sessions_committed_by_transaction(self, tmp_path): + source = tmp_path / "source" + target = tmp_path / "target" + (source / "memory").mkdir(parents=True) + (source / "memory" / "imported.md").write_text("new", encoding="utf-8") + source_sessions = source / "temp" / "desktop_sessions" + source_sessions.mkdir(parents=True) + source_sessions.joinpath("sess-imported.json").write_text( + json.dumps({"id": "sess-imported", "title": "Imported", "messages": []}), + encoding="utf-8", + ) + target.mkdir() + + class Lock: + def __enter__(self): + return self + + def __exit__(self, *_args): + return False + + class Manager: + ga_root = str(target) + lock = Lock() + sessions = {} + + @staticmethod + def begin_maintenance(kind, running_extras_fn): + assert kind == "import" + assert running_extras_fn() == [] + return "test-token" + + @staticmethod + def end_maintenance(token): + assert token == "test-token" + + @staticmethod + def _session_from_item(item): + return SimpleNamespace(id=item["id"], title=item.get("title", "")) + + helpers = _load_named_helpers( + {"_import_data_source"}, + { + "manager": Manager(), + "services": SimpleNamespace(running_managed_ids=lambda: []), + "materialize_import_source": materialize_import_source, + "merge_data_files": merge_data_files, + }, + ) + + result = helpers["_import_data_source"](str(source)) + + manager = helpers["manager"] + assert result["sessionsAdded"] == 1 + assert "_preparedSessions" not in result + assert manager.sessions["sess-imported"].title == "Imported" + persisted = target / "temp" / "desktop_sessions" / "sess-imported.json" + assert json.loads(persisted.read_text(encoding="utf-8"))["id"] == "sess-imported" + + +def _load_empty_turn_helpers(): + tree = ast.parse(_bridge_source) + wanted = {"_EMPTY_TURN_MICROCOPY", "_get_ui_lang", "empty_turn_fallback"} + nodes = [] + for node in tree.body: + if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)) and node.name in wanted: + nodes.append(node) + elif isinstance(node, ast.Assign): + names = {target.id for target in node.targets if isinstance(target, ast.Name)} + if names & wanted: + nodes.append(node) + namespace = {"Path": Path, "json": json} + exec(compile(ast.Module(body=nodes, type_ignores=[]), "desktop_bridge.py", "exec"), namespace) + return namespace + + +class TestEmptyTurnFallback: + def test_uses_english_microcopy(self, tmp_path, monkeypatch): + (tmp_path / ".ga_desktop_settings.json").write_text( + '{"ui":{"lang":"en"},"lang":"zh"}', encoding="utf-8" + ) + monkeypatch.setattr(Path, "home", lambda: tmp_path) + + helpers = _load_empty_turn_helpers() + + assert helpers["empty_turn_fallback"]() == ( + '⚠️ This turn ended without a visible response. You can send "continue" to retry.' + ) + + def test_supports_legacy_top_level_language(self, tmp_path, monkeypatch): + (tmp_path / ".ga_desktop_settings.json").write_text('{"lang":"en"}', encoding="utf-8") + monkeypatch.setattr(Path, "home", lambda: tmp_path) + + helpers = _load_empty_turn_helpers() + + assert helpers["empty_turn_fallback"]() == ( + '⚠️ This turn ended without a visible response. You can send "continue" to retry.' + ) + + def test_defaults_to_chinese_for_missing_or_invalid_settings(self, tmp_path, monkeypatch): + monkeypatch.setattr(Path, "home", lambda: tmp_path) + helpers = _load_empty_turn_helpers() + expected = '⚠️ 这一轮结束了,但没有产出可见回复。你可以发送"继续"重试。' + assert helpers["empty_turn_fallback"]() == expected + + (tmp_path / ".ga_desktop_settings.json").write_text("not-json", encoding="utf-8") + assert helpers["empty_turn_fallback"]() == expected + + def test_defaults_to_chinese_for_non_string_language(self, tmp_path, monkeypatch): + (tmp_path / ".ga_desktop_settings.json").write_text( + '{"ui":{"lang":[]},"lang":[]}', encoding="utf-8" + ) + monkeypatch.setattr(Path, "home", lambda: tmp_path) + + helpers = _load_empty_turn_helpers() + + assert helpers["empty_turn_fallback"]() == ( + '⚠️ 这一轮结束了,但没有产出可见回复。你可以发送"继续"重试。' + ) + + +# === strip_final_info_marker === + +_FINAL_INFO_RE = re.compile(r'\n*`{5}\n*\[Info\] Final response to user\.\n*`{5}\s*$') + +def strip_final_info_marker(text): + return _FINAL_INFO_RE.sub('', str(text or '')) + + +class TestStripFinalInfoMarker: + def test_removes_marker_at_end(self): + text = "Hello world\n`````\n[Info] Final response to user.\n`````" + assert strip_final_info_marker(text) == "Hello world" + + def test_no_marker_unchanged(self): + text = "Just normal text" + assert strip_final_info_marker(text) == "Just normal text" + + def test_empty_string(self): + assert strip_final_info_marker("") == "" + + def test_none_becomes_empty(self): + # str(None or '') → '' since `or` short-circuits + assert strip_final_info_marker(None) == "" + + def test_marker_only_in_middle_not_removed(self): + text = "Before\n`````\n[Info] Final response to user.\n`````\nAfter" + assert strip_final_info_marker(text) == text + + +# === normalize_final_turn_segs === + +def normalize_final_turn_segs(full, outputs): + if not outputs or not isinstance(outputs, (list, tuple)): + return None + segs = [strip_final_info_marker(s) for s in outputs] + full_text = strip_final_info_marker(full) + if not segs: + return None + joined = "".join(segs) + if full_text.strip() == joined.strip(): + return segs + if joined and full_text.startswith(joined): + suffix = full_text[len(joined):] + if suffix.strip(): + segs[-1] = segs[-1] + suffix + return segs + return None + + +class TestNormalizeFinalTurnSegs: + def test_exact_match(self): + segs = normalize_final_turn_segs("AB", ["A", "B"]) + assert segs == ["A", "B"] + + def test_suffix_appended_to_last_seg(self): + segs = normalize_final_turn_segs("ABC_extra", ["A", "BC"]) + assert segs is not None + assert segs[-1] == "BC_extra" + + def test_no_match_returns_none(self): + segs = normalize_final_turn_segs("XYZ", ["A", "B"]) + assert segs is None + + def test_none_outputs_returns_none(self): + assert normalize_final_turn_segs("text", None) is None + + def test_empty_outputs_returns_none(self): + assert normalize_final_turn_segs("text", []) is None + + def test_string_outputs_returns_none(self): + assert normalize_final_turn_segs("text", "not a list") is None + + def test_whitespace_match(self): + segs = normalize_final_turn_segs("A B ", ["A B "]) + assert segs == ["A B "] + + +# === _extract_first_timestamp === + +def _extract_first_timestamp(content): + m = re.search(r'^=== Prompt === (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})', content, re.MULTILINE) + if m: + try: + from datetime import datetime + return datetime.strptime(m.group(1), "%Y-%m-%d %H:%M:%S").timestamp() + except Exception: + pass + return 0.0 + + +class TestExtractFirstTimestamp: + def test_extracts_valid_timestamp(self): + content = "=== Prompt === 2024-06-15 14:30:00\nSome prompt text" + ts = _extract_first_timestamp(content) + assert ts > 0 + from datetime import datetime + expected = datetime(2024, 6, 15, 14, 30, 0).timestamp() + assert ts == expected + + def test_no_match_returns_zero(self): + assert _extract_first_timestamp("No timestamp here") == 0.0 + + def test_empty_string(self): + assert _extract_first_timestamp("") == 0.0 + + def test_multiline_finds_first(self): + content = "Some header\n=== Prompt === 2024-01-01 00:00:00\n=== Response === 2024-01-01 00:01:00" + ts = _extract_first_timestamp(content) + from datetime import datetime + assert ts == datetime(2024, 1, 1, 0, 0, 0).timestamp() + + +# === _next_native_var === + +def _next_native_var(text, protocol): + proto = str(protocol or "").strip().lower() + if proto == "claude": + prefix = "native_claude_config" + elif proto in ("oai", "openai"): + prefix = "native_oai_config" + else: + raise ValueError("protocol is required: choose 'oai' or 'claude'") + nums = [0] + if re.search(rf"^{prefix}\s*=", text, re.M): + nums.append(0) + nums.extend(int(m.group(1)) for m in re.finditer(rf"^{prefix}(\d+)\s*=", text, re.M)) + n = max(nums) + 1 + return prefix if n == 1 and not re.search(rf"^{prefix}\s*=", text, re.M) else f"{prefix}{n}" + + +class TestNextNativeVar: + def test_first_oai_config(self): + assert _next_native_var("", "oai") == "native_oai_config" + + def test_first_claude_config(self): + assert _next_native_var("", "claude") == "native_claude_config" + + def test_increments_when_one_exists(self): + text = "native_oai_config = {'key': 'xxx'}" + result = _next_native_var(text, "oai") + # When base var exists: nums=[0,0], max=0, n=1, but base already exists → prefix1 + assert result == "native_oai_config1" + + def test_increments_past_existing_numbered(self): + text = "native_claude_config = {}\nnative_claude_config2 = {}\nnative_claude_config3 = {}" + result = _next_native_var(text, "claude") + assert result == "native_claude_config4" + + def test_raises_on_invalid_protocol(self): + import pytest + with pytest.raises(ValueError, match="protocol is required"): + _next_native_var("", "gemini") + + def test_openai_alias(self): + assert _next_native_var("", "openai") == "native_oai_config" + + +# === _format_py_dict === + +def _format_py_dict(d): + lines = [f" '{k}': {json.dumps(v, ensure_ascii=False)}," if isinstance(v, str) else f" '{k}': {v}," for k, v in d.items()] + return "{\n" + "\n".join(lines) + "\n}" + + +class TestFormatPyDict: + def test_simple_dict(self): + result = _format_py_dict({"key": "sk-xxx", "model": "gpt-4"}) + assert "'key': \"sk-xxx\"" in result + assert "'model': \"gpt-4\"" in result + assert result.startswith("{") + assert result.endswith("}") + + def test_non_string_values(self): + result = _format_py_dict({"timeout": 30, "stream": True}) + assert "'timeout': 30," in result + assert "'stream': True," in result + + def test_empty_dict(self): + result = _format_py_dict({}) + assert result == "{\n\n}" + + def test_chinese_values_preserved(self): + result = _format_py_dict({"name": "模型一"}) + assert "模型一" in result + + +# === _load_plan_baseline === + +def _load_plan_baseline(item, msgs): + base = int(item.get("plan_scan_baseline", 0) or 0) + if base >= len(msgs): + return 0 + return max(0, base) + + +class TestLoadPlanBaseline: + def test_valid_baseline(self): + assert _load_plan_baseline({"plan_scan_baseline": 5}, list(range(10))) == 5 + + def test_baseline_exceeds_messages_returns_zero(self): + assert _load_plan_baseline({"plan_scan_baseline": 20}, list(range(5))) == 0 + + def test_missing_key_returns_zero(self): + assert _load_plan_baseline({}, list(range(10))) == 0 + + def test_none_value_returns_zero(self): + assert _load_plan_baseline({"plan_scan_baseline": None}, list(range(10))) == 0 + + def test_negative_clamped_to_zero(self): + assert _load_plan_baseline({"plan_scan_baseline": -5}, list(range(10))) == 0 diff --git a/frontends/tests/test_conductor_model_routing.py b/frontends/tests/test_conductor_model_routing.py new file mode 100644 index 000000000..e0fa335bb --- /dev/null +++ b/frontends/tests/test_conductor_model_routing.py @@ -0,0 +1,411 @@ +"""Runtime model-routing tests for the isolated Conductor process.""" +from __future__ import annotations + +import importlib.util +import argparse +import os +import queue +import sys +import threading +import types +from pathlib import Path + +import pytest + + +ROOT = Path(__file__).resolve().parent.parent.parent +CONDUCTOR_PATH = ROOT / "frontends" / "conductor.py" + + +class StubGenericAgent: + pass + + +agentmain_stub = types.ModuleType("agentmain") +agentmain_stub.GenericAgent = StubGenericAgent +previous_agentmain = sys.modules.get("agentmain") +sys.modules["agentmain"] = agentmain_stub + +spec = importlib.util.spec_from_file_location("conductor_model_under_test", CONDUCTOR_PATH) +conductor = importlib.util.module_from_spec(spec) +assert spec.loader is not None +_argv = sys.argv +try: + sys.argv = [str(CONDUCTOR_PATH), "--no-browser"] + spec.loader.exec_module(conductor) +finally: + sys.argv = _argv +if previous_agentmain is None: + del sys.modules["agentmain"] +else: + sys.modules["agentmain"] = previous_agentmain + + +class Backend: + def __init__(self, name: str): + self.name = name + self.model = name + + +class Client: + def __init__(self, name: str | None): + if name is not None: + self.backend = Backend(name) + + +class FakeAgent: + def __init__(self, names: list[str | None], failing: set[int] | None = None): + self.llmclients = [Client(name) for name in names] + self.llm_no = 0 + self.llmclient = self.llmclients[0] + self.next_llm_calls: list[int] = [] + self.reloads = 0 + self.failing = failing or set() + + def load_llm_sessions(self): + self.reloads += 1 + + def next_llm(self, no: int): + # Deliberately mirrors GenericAgent's modulo behavior. The Conductor + # resolver must validate before calling this method. + self.next_llm_calls.append(no) + if no in self.failing: + raise RuntimeError("broken client") + self.llm_no = no % len(self.llmclients) + self.llmclient = self.llmclients[self.llm_no] + + def get_llm_name(self, client=None, model=False): + client = client or self.llmclient + return client.backend.model if model else client.backend.name + + +def test_out_of_range_config_falls_back_without_modulo(monkeypatch): + agent = FakeAgent(["zero", "one", "two", "three"]) + monkeypatch.setattr( + conductor, + "_settings_doc", + lambda: {"conductor": {"llmNo": 99}, "ui": {"llmNo": 1}}, + ) + + state = conductor._apply_desktop_model(agent) + + assert agent.next_llm_calls == [1] + assert state["effective"] == 1 + assert state["fallbackReason"] == "invalid_configured" + + +def test_conductor_default_port_override_is_e2e_scoped(monkeypatch): + monkeypatch.delenv(conductor.E2E_REPORT_DIR_ENV, raising=False) + monkeypatch.setenv(conductor.E2E_CONDUCTOR_PORT_ENV, "29890") + assert conductor._default_conductor_port() == 8900 + + monkeypatch.setenv(conductor.E2E_REPORT_DIR_ENV, "/tmp/package-evidence") + assert conductor._default_conductor_port() == 29890 + + +@pytest.mark.parametrize("value", ["1", "8900", "65535"]) +def test_conductor_port_parser_accepts_full_valid_range(value): + assert conductor._parse_conductor_port(value) == int(value) + + +@pytest.mark.parametrize("value", ["", "0", "65536", "2.5", "-1", "1234"]) +def test_conductor_port_parser_rejects_invalid_values(value): + with pytest.raises(argparse.ArgumentTypeError, match="between 1 and 65535"): + conductor._parse_conductor_port(value) + + +def test_unusable_configured_client_falls_back_to_ui_default(monkeypatch): + agent = FakeAgent(["zero", "one", None, "three"]) + monkeypatch.setattr( + conductor, + "_settings_doc", + lambda: {"conductor": {"llmNo": 2}, "ui": {"llmNo": 1}}, + ) + + state = conductor._apply_desktop_model(agent) + + assert agent.next_llm_calls == [1] + assert state["effective"] == 1 + assert state["fallbackReason"] == "configured_unavailable" + + +def test_configured_activation_failure_falls_back_to_ui_default(monkeypatch): + agent = FakeAgent(["zero", "one", "two"], failing={2}) + monkeypatch.setattr( + conductor, + "_settings_doc", + lambda: {"conductor": {"llmNo": 2}, "ui": {"llmNo": 1}}, + ) + + state = conductor._apply_desktop_model(agent) + + assert agent.next_llm_calls == [2, 1] + assert state["effective"] == 1 + assert state["fallbackReason"] == "configured_unavailable" + + +def test_missing_config_uses_first_usable_when_ui_is_invalid(monkeypatch): + agent = FakeAgent([None, None, "two", "three"]) + monkeypatch.setattr(conductor, "_settings_doc", lambda: {"ui": {"llmNo": 99}}) + + state = conductor._apply_desktop_model(agent) + + assert agent.next_llm_calls == [2] + assert state["effective"] == 2 + assert state["fallbackReason"] == "first_available" + + +def test_explicit_numeric_worker_model_rejects_out_of_range(): + agent = FakeAgent(["zero", "one"]) + + with pytest.raises(ValueError, match="out of range"): + conductor._select_llm(agent, 99) + + assert agent.next_llm_calls == [] + + +def test_runtime_model_snapshot_is_broadcast_with_running_state(monkeypatch): + instance = conductor.Conductor() + payloads: list[dict] = [] + monkeypatch.setattr(conductor, "schedule_broadcast", payloads.append) + state = { + "configured": 2, + "effective": 1, + "fallbackReason": "configured_unavailable", + "current": "model-one", + } + + instance._publish_model_state(state, running=True) + + assert instance.model_snapshot() == {**state, "running": True} + assert payloads == [{"type": "model", "model": {**state, "running": True}}] + + +def test_long_lived_conductor_refreshes_model_between_tasks(monkeypatch): + """A saved binding waits for task cleanup, then affects the next task.""" + + class EndOfInbox(Exception): + pass + + second_boundary_entered = threading.Event() + + class BoundaryInbox: + def __init__(self): + self.events = [ + {"type": "user_message", "id": "first"}, + {"type": "user_message", "id": "second"}, + ] + + def get(self): + if not self.events: + raise EndOfInbox + if len(self.events) == 1: + second_boundary_entered.set() + return self.events.pop(0) + + def task_done(self): + pass + + def empty(self): + # Keep each event as a separate task boundary for this regression. + return True + + selected = {"llmNo": 1} + timeline: list[tuple[str, int]] = [] + allow_first_cleanup = threading.Event() + first_cleanup_done = threading.Event() + + class TaskAgent(FakeAgent): + def __init__(self): + super().__init__(["zero", "one", "two"]) + self.inc_out = False + self.task_models: list[int] = [] + self.task_queue: queue.Queue = queue.Queue() + self.cleanup_threads: list[threading.Thread] = [] + + def next_llm(self, no: int): + super().next_llm(no) + timeline.append(("select", self.llm_no)) + + def put_task(self, _prompt: str, source: str): + assert source == "conductor" + self.task_models.append(self.llm_no) + timeline.append(("submit", self.llm_no)) + if len(self.task_models) == 1: + # Simulate save_config while task one is already submitted. The + # display queue reports done before the agent runner persists its + # final state and calls task_done(). + selected["llmNo"] = 2 + assert self.llm_no == 1 + self.task_queue.put("first") + + def finish_first_task(): + assert allow_first_cleanup.wait(timeout=2) + assert self.task_queue.get_nowait() == "first" + self.task_queue.task_done() + first_cleanup_done.set() + + cleanup = threading.Thread(target=finish_first_task) + cleanup.start() + self.cleanup_threads.append(cleanup) + else: + self.task_queue.put("second") + assert self.task_queue.get_nowait() == "second" + self.task_queue.task_done() + output: queue.Queue = queue.Queue() + output.put({"done": True, "turn": len(self.task_models)}) + return output + + instance = conductor.Conductor() + instance.agent = TaskAgent() + instance.inbox = BoundaryInbox() + payloads: list[dict] = [] + monkeypatch.setattr( + conductor, + "_settings_doc", + lambda: {"conductor": {"llmNo": selected["llmNo"]}}, + ) + monkeypatch.setattr(conductor, "schedule_broadcast", payloads.append) + monkeypatch.setattr(conductor, "start_agent_runner", lambda *_args: None) + monkeypatch.setattr(conductor.time, "sleep", lambda _seconds: None) + monkeypatch.setattr(instance, "_build_prompt", lambda events: events[0]["id"]) + + run_errors: list[BaseException] = [] + + def run_loop(): + try: + instance._run() + except EndOfInbox: + pass + except BaseException as error: # surfaced below in the test thread + run_errors.append(error) + + runner = threading.Thread(target=run_loop) + runner.start() + assert second_boundary_entered.wait(timeout=2) + + # The display `done` marker has already arrived, but queue cleanup is still + # blocked. Model two must not be applied or submitted yet. + assert instance.agent.task_models == [1] + assert timeline == [("select", 1), ("submit", 1)] + + allow_first_cleanup.set() + assert first_cleanup_done.wait(timeout=2) + runner.join(timeout=2) + for cleanup in instance.agent.cleanup_threads: + cleanup.join(timeout=2) + + assert not runner.is_alive() + assert run_errors == [] + + assert instance.agent.task_models == [1, 2] + assert timeline == [ + ("select", 1), + ("submit", 1), + ("select", 2), + ("submit", 2), + ] + assert instance.model_snapshot() == { + "configured": 2, + "effective": 2, + "fallbackReason": None, + "current": "two", + "running": False, + } + assert [item["model"]["effective"] for item in payloads] == [1, 1, 2, 2] + assert [item["model"]["running"] for item in payloads] == [True, False, True, False] + + +def test_conductor_defers_events_without_models_and_recovers(monkeypatch): + class EndOfInbox(Exception): + pass + + ready = {"value": False} + + class BoundaryInbox: + def __init__(self): + self.events = [ + {"type": "user_message", "id": "deferred"}, + {"type": "user_message", "id": "recovery"}, + ] + + def get(self): + if not self.events: + raise EndOfInbox + if len(self.events) == 1: + ready["value"] = True + return self.events.pop(0) + + def task_done(self): + pass + + def empty(self): + return True + + class RecoveringAgent: + def __init__(self): + self.inc_out = False + self.llmclients: list[Client] = [] + self.llm_no = 0 + self.task_queue: queue.Queue = queue.Queue() + self.submissions: list[str] = [] + + def load_llm_sessions(self): + if ready["value"] and not self.llmclients: + self.llmclients = [Client("recovered")] + + def next_llm(self, no: int): + self.llm_no = no + self.llmclient = self.llmclients[no] + + def get_llm_name(self, client=None, model=False): + client = client or self.llmclient + return client.backend.model if model else client.backend.name + + def put_task(self, prompt: str, source: str): + assert source == "conductor" + self.submissions.append(prompt) + output: queue.Queue = queue.Queue() + output.put({"done": True, "turn": 1}) + return output + + instance = conductor.Conductor() + instance.agent = RecoveringAgent() + instance.inbox = BoundaryInbox() + payloads: list[dict] = [] + monkeypatch.setattr(conductor, "_settings_doc", lambda: {}) + monkeypatch.setattr(conductor, "schedule_broadcast", payloads.append) + monkeypatch.setattr(conductor, "start_agent_runner", lambda *_args: None) + monkeypatch.setattr(conductor.time, "sleep", lambda _seconds: None) + monkeypatch.setattr(instance, "_build_prompt", lambda events: ",".join(e["id"] for e in events)) + + with pytest.raises(EndOfInbox): + instance._run() + + assert instance.agent.submissions == ["deferred,recovery"] + model_payloads = [item["model"] for item in payloads if item["type"] == "model"] + assert model_payloads[0]["effective"] is None + assert model_payloads[0]["fallbackReason"] == "no_models" + assert model_payloads[0]["running"] is False + assert [model["running"] for model in model_payloads[1:]] == [True, False] + assert any( + item["item"]["text"].startswith("Conductor paused: no usable model") + for item in payloads + if item["type"] == "log" + ) + + +def test_parallel_worker_model_selection_keeps_agents_isolated(): + from concurrent.futures import ThreadPoolExecutor + + agents = [FakeAgent(["zero", "one", "two", "three"]) for _ in range(10)] + requested = [i % 4 for i in range(10)] + with ThreadPoolExecutor(max_workers=10) as executor: + selected = list(executor.map( + lambda pair: conductor._select_llm(pair[0], pair[1]), + zip(agents, requested), + )) + + assert selected == [True] * 10 + assert [agent.llm_no for agent in agents] == requested + assert [agent.next_llm_calls for agent in agents] == [[no] for no in requested] diff --git a/frontends/tests/test_cost_tracker_ledger.py b/frontends/tests/test_cost_tracker_ledger.py new file mode 100644 index 000000000..36b059adf --- /dev/null +++ b/frontends/tests/test_cost_tracker_ledger.py @@ -0,0 +1,444 @@ +"""Regression tests for the per-call token ledger.""" + +from __future__ import annotations + +import importlib.util +import json +import sys +import threading +import time +import types +from pathlib import Path + +import pytest + +ROOT = Path(__file__).resolve().parent.parent.parent +_SPEC = importlib.util.spec_from_file_location( + "desktop_cost_tracker_under_test", ROOT / "frontends" / "cost_tracker.py" +) +assert _SPEC and _SPEC.loader +cost_tracker = importlib.util.module_from_spec(_SPEC) +sys.modules[_SPEC.name] = cost_tracker +_SPEC.loader.exec_module(cost_tracker) + + +def _close_ledger() -> None: + fd = cost_tracker._ledger_fd + if fd is not None: + fd.close() + cost_tracker._ledger_fd = None + cost_tracker._ledger_path = None + + +def setup_function() -> None: + _close_ledger() + + +def teardown_function() -> None: + _close_ledger() + + +def test_uninitialized_append_returns_before_clock_json_and_lock(monkeypatch): + class ForbiddenLock: + def __enter__(self): + raise AssertionError("uninitialized TUI path acquired the ledger lock") + + def __exit__(self, *_args): + return False + + monkeypatch.setattr( + cost_tracker.json, + "dumps", + lambda *_args, **_kwargs: (_ for _ in ()).throw( + AssertionError("uninitialized TUI path serialized JSON") + ), + ) + monkeypatch.setattr( + cost_tracker.time, + "time", + lambda: (_ for _ in ()).throw( + AssertionError("uninitialized TUI path read the clock") + ), + ) + monkeypatch.setattr(cost_tracker, "_ledger_lock", ForbiddenLock()) + + cost_tracker._append_ledger("tui-main", 1, 2, 3, 4) + + +def test_public_tracker_and_context_interfaces_keep_tui_semantics(monkeypatch): + cost_tracker._trackers.clear() + tracker = cost_tracker.get("tui-main") + assert tracker is cost_tracker.get("tui-main") + tracker.requests = 2 + tracker.input = 10 + tracker.output = 4 + tracker.cache_create = 3 + tracker.cache_read = 5 + tracker.started_at = 100.0 + monkeypatch.setattr(cost_tracker.time, "time", lambda: 106.5) + + assert tracker.total_input_side() == 18 + assert tracker.total_tokens() == 22 + assert tracker.cache_hit_rate() == pytest.approx(5 / 18 * 100) + assert tracker.elapsed_seconds() == 6.5 + snapshot = cost_tracker.all_trackers() + assert snapshot == {"tui-main": tracker} + snapshot.clear() + assert cost_tracker.all_trackers() == {"tui-main": tracker} + + backend = types.SimpleNamespace( + context_win="200", + history=[{"role": "user", "content": "你好"}], + ) + assert cost_tracker.context_window_chars(backend) == 600 + assert cost_tracker.current_input_chars(backend) == len( + json.dumps(backend.history[0], ensure_ascii=False) + ) + assert cost_tracker.context_window_chars(types.SimpleNamespace(context_win="bad")) == 0 + + +def test_install_remains_idempotent_without_desktop_ledger(monkeypatch): + original_calls = [] + printed = [] + fake_llmcore = types.ModuleType("llmcore") + fake_llmcore._record_usage = lambda value, mode: original_calls.append((value, mode)) + monkeypatch.setitem(sys.modules, "llmcore", fake_llmcore) + monkeypatch.setattr(cost_tracker, "_INSTALLED", False) + monkeypatch.setattr(cost_tracker, "_trackers", {}) + monkeypatch.setattr("builtins.print", lambda *args, **_kwargs: printed.append(args)) + + cost_tracker.install() + wrapped_record = fake_llmcore._record_usage + wrapped_print = fake_llmcore.print + cost_tracker.install() + + assert fake_llmcore._record_usage is wrapped_record + assert fake_llmcore.print is wrapped_print + fake_llmcore._record_usage( + {"prompt_tokens": 7, "prompt_tokens_details": {"cached_tokens": 2}}, + "chat_completions", + ) + fake_llmcore.print("[Output] tokens=3") + tracker = cost_tracker.get(threading.current_thread().name) + assert (tracker.requests, tracker.input, tracker.output, tracker.cache_read) == (1, 5, 3, 2) + assert original_calls and printed == [("[Output] tokens=3",)] + assert cost_tracker._ledger_path is None + + +def test_append_persists_and_aggregates_per_session(tmp_path): + cost_tracker.init_ledger(str(tmp_path)) + + cost_tracker._append_ledger("GA-sess-1", 10, 0, 2, 3) + cost_tracker._append_ledger("GA-sess-1", 0, 7, 0, 0) + cost_tracker._append_ledger("GA-sess-2", 4, 5, 0, 1) + + entries = cost_tracker.read_ledger() + assert len(entries) == 3 + aggregate = cost_tracker.aggregate_ledger() + by_id = {entry["sessionId"]: entry for entry in aggregate["history"]} + assert by_id["sess-1"]["input"] == 10 + assert by_id["sess-1"]["output"] == 7 + assert by_id["sess-1"]["cacheCreate"] == 2 + assert by_id["sess-1"]["cacheRead"] == 3 + assert aggregate["snap"]["GA-sess-2"] == { + "input": 4, + "output": 5, + "cacheCreate": 0, + "cacheRead": 1, + } + + +def test_concurrent_appends_are_serialized(tmp_path, monkeypatch): + cost_tracker.init_ledger(str(tmp_path)) + real_fd = cost_tracker._ledger_fd + + class DetectConcurrentWrites: + def __init__(self): + self.active = 0 + self.overlapped = False + + def write(self, value): + self.active += 1 + if self.active > 1: + self.overlapped = True + time.sleep(0.01) + result = real_fd.write(value) + self.active -= 1 + return result + + def flush(self): + real_fd.flush() + + def close(self): + real_fd.close() + + detector = DetectConcurrentWrites() + monkeypatch.setattr(cost_tracker, "_ledger_fd", detector) + threads = [ + threading.Thread(target=cost_tracker._append_ledger, args=(f"GA-{i}", 1, 0, 0, 0)) + for i in range(12) + ] + + for thread in threads: + thread.start() + for thread in threads: + thread.join() + + assert detector.overlapped is False + assert len(cost_tracker.read_ledger()) == 12 + + +def test_threshold_compaction_runs_during_process_lifetime(tmp_path, monkeypatch): + monkeypatch.setattr(cost_tracker, "_COMPACT_THRESHOLD", 1) + cost_tracker.init_ledger(str(tmp_path)) + + cost_tracker._append_ledger("GA-sess-1", 10, 7, 2, 3) + + entries = cost_tracker.read_ledger() + assert len(entries) == 1 + assert entries[0]["_compacted"] is True + + +def test_compaction_preserves_last_activity_timestamp(tmp_path): + cost_tracker.init_ledger(str(tmp_path)) + ledger_path = tmp_path / "temp" / "token_ledger.jsonl" + first_ts = 1_700_000_000.0 + second_ts = 1_700_000_100.0 + cost_tracker._ledger_fd.close() + cost_tracker._ledger_fd = None + ledger_path.write_text( + "\n".join( + [ + json.dumps({"t": first_ts, "k": "GA-sess-1", "i": 10, "o": 0, "cc": 0, "cr": 0}), + json.dumps({"t": second_ts, "k": "GA-sess-1", "i": 0, "o": 7, "cc": 0, "cr": 0}), + ] + ) + + "\n", + encoding="utf-8", + ) + cost_tracker._ledger_fd = ledger_path.open("a", encoding="utf-8") + + cost_tracker._compact_ledger() + + history = cost_tracker.aggregate_ledger()["history"] + assert history[0]["ts"] == second_ts + + +def test_reinitializing_closes_the_previous_descriptor(tmp_path): + cost_tracker.init_ledger(str(tmp_path / "one")) + previous_fd = cost_tracker._ledger_fd + + cost_tracker.init_ledger(str(tmp_path / "two")) + + assert previous_fd.closed is True + + +def test_init_migrates_legacy_snapshot_when_ledger_is_empty(tmp_path): + temp_dir = tmp_path / "temp" + temp_dir.mkdir() + (temp_dir / "desktop_token_history.json").write_text( + json.dumps( + { + "history": [ + { + "sessionId": "sess-legacy", + "title": "Legacy session", + "input": 3, + "output": 4, + "cacheCreate": 5, + "cacheRead": 6, + "model": "legacy-model", + "ts": 1_700_000_000.0, + } + ], + "snap": { + "GA-sess-legacy": { + "input": 30, + "output": 40, + "cacheCreate": 50, + "cacheRead": 60, + } + }, + } + ), + encoding="utf-8", + ) + + cost_tracker.init_ledger(str(tmp_path)) + + aggregate = cost_tracker.aggregate_ledger() + assert aggregate["snap"]["GA-sess-legacy"] == { + "input": 30, + "output": 40, + "cacheCreate": 50, + "cacheRead": 60, + } + assert aggregate["history"][0]["title"] == "Legacy session" + assert aggregate["history"][0]["model"] == "legacy-model" + assert aggregate["history"][0]["ts"] == 1_700_000_000.0 + + +def test_init_does_not_migrate_legacy_snapshot_into_nonempty_ledger(tmp_path): + temp_dir = tmp_path / "temp" + temp_dir.mkdir() + (temp_dir / "token_ledger.jsonl").write_text( + json.dumps({"t": 2.0, "k": "GA-current", "i": 1, "o": 0, "cc": 0, "cr": 0}) + "\n", + encoding="utf-8", + ) + (temp_dir / "desktop_token_history.json").write_text( + json.dumps({"snap": {"GA-legacy": {"input": 99, "output": 0, "cacheCreate": 0, "cacheRead": 0}}}), + encoding="utf-8", + ) + + cost_tracker.init_ledger(str(tmp_path)) + + assert set(cost_tracker.aggregate_ledger()["snap"]) == {"GA-current"} + + +@pytest.mark.parametrize( + ("api_mode", "usage", "expected"), + [ + ( + "messages", + { + "input_tokens": 10, + "output_tokens": 1, + "cache_creation_input_tokens": 2, + "cache_read_input_tokens": 3, + }, + {"input": 10, "output": 7, "cacheCreate": 2, "cacheRead": 3}, + ), + ( + "chat_completions", + {"prompt_tokens": 13, "prompt_tokens_details": {"cached_tokens": 3}}, + {"input": 10, "output": 7, "cacheCreate": 0, "cacheRead": 3}, + ), + ( + "responses", + {"input_tokens": 13, "input_tokens_details": {"cached_tokens": 3}}, + {"input": 10, "output": 7, "cacheCreate": 0, "cacheRead": 3}, + ), + ], +) +def test_install_hooks_append_each_api_mode(tmp_path, monkeypatch, api_mode, usage, expected): + original_calls = [] + fake_llmcore = types.ModuleType("llmcore") + fake_llmcore._record_usage = lambda value, mode: original_calls.append((value, mode)) + monkeypatch.setitem(sys.modules, "llmcore", fake_llmcore) + monkeypatch.setattr(cost_tracker, "_INSTALLED", False) + cost_tracker._trackers.clear() + cost_tracker.init_ledger(str(tmp_path)) + + cost_tracker.install() + fake_llmcore._record_usage(usage, api_mode) + fake_llmcore.print("[Output] tokens=7") + + snapshot = next(iter(cost_tracker.aggregate_ledger()["snap"].values())) + assert snapshot == expected + assert original_calls == [(usage, api_mode)] + + +def test_concurrent_appends_remain_exact_across_compactions(tmp_path, monkeypatch): + monkeypatch.setattr(cost_tracker, "_COMPACT_THRESHOLD", 1_000) + cost_tracker.init_ledger(str(tmp_path)) + per_thread = 20 + + def append_session(key: str) -> None: + for _ in range(per_thread): + cost_tracker._append_ledger(key, 1, 2, 3, 4) + + threads = [ + threading.Thread(target=append_session, args=(key,)) + for key in (f"GA-sess-{i}" for i in range(8)) + ] + + for thread in threads: + thread.start() + for thread in threads: + thread.join() + + aggregate = cost_tracker.aggregate_ledger() + assert len(aggregate["snap"]) == 8 + for snapshot in aggregate["snap"].values(): + assert snapshot == { + "input": per_thread, + "output": per_thread * 2, + "cacheCreate": per_thread * 3, + "cacheRead": per_thread * 4, + } + + +def test_corrupt_and_truncated_lines_are_skipped(tmp_path): + cost_tracker.init_ledger(str(tmp_path)) + cost_tracker._append_ledger("GA-valid", 3, 4, 5, 6) + ledger_path = tmp_path / "temp" / "token_ledger.jsonl" + cost_tracker._ledger_fd.write("not-json\n{\"truncated\":\n") + cost_tracker._ledger_fd.flush() + + assert cost_tracker.aggregate_ledger()["snap"] == { + "GA-valid": {"input": 3, "output": 4, "cacheCreate": 5, "cacheRead": 6} + } + + +def test_compaction_uses_atomic_replace_and_keeps_descriptor_writable(tmp_path, monkeypatch): + cost_tracker.init_ledger(str(tmp_path)) + cost_tracker._append_ledger("GA-valid", 3, 4, 0, 0) + real_replace = cost_tracker.os.replace + replacements = [] + + def observe_replace(source, target): + replacements.append((Path(source), Path(target))) + assert Path(source).name == "token_ledger.jsonl.tmp" + assert Path(target).name == "token_ledger.jsonl" + real_replace(source, target) + + monkeypatch.setattr(cost_tracker.os, "replace", observe_replace) + cost_tracker._compact_ledger() + cost_tracker._append_ledger("GA-valid", 0, 2, 0, 0) + + assert len(replacements) == 1 + assert cost_tracker.aggregate_ledger()["snap"]["GA-valid"]["output"] == 6 + + +def test_real_10mb_threshold_compacts_on_init(tmp_path): + temp_dir = tmp_path / "temp" + temp_dir.mkdir() + ledger_path = temp_dir / "token_ledger.jsonl" + valid = json.dumps({"t": 1, "k": "GA-valid", "i": 3, "o": 4, "cc": 0, "cr": 0}) + "\n" + with ledger_path.open("wb") as ledger: + ledger.write(valid.encode("utf-8")) + ledger.truncate(cost_tracker._COMPACT_THRESHOLD) + + cost_tracker.init_ledger(str(tmp_path)) + + assert ledger_path.stat().st_size < 1_000 + assert cost_tracker.aggregate_ledger()["snap"]["GA-valid"] == { + "input": 3, + "output": 4, + "cacheCreate": 0, + "cacheRead": 0, + } + + +def test_repeated_init_migrates_legacy_snapshot_only_once(tmp_path): + temp_dir = tmp_path / "temp" + temp_dir.mkdir() + (temp_dir / "desktop_token_history.json").write_text( + json.dumps({ + "snap": { + "GA-legacy": {"input": 7, "output": 8, "cacheCreate": 9, "cacheRead": 10} + } + }), + encoding="utf-8", + ) + + cost_tracker.init_ledger(str(tmp_path)) + cost_tracker.init_ledger(str(tmp_path)) + + assert cost_tracker.aggregate_ledger()["snap"]["GA-legacy"] == { + "input": 7, + "output": 8, + "cacheCreate": 9, + "cacheRead": 10, + } + assert len(cost_tracker.read_ledger()) == 1 diff --git a/frontends/tests/test_data_backup.py b/frontends/tests/test_data_backup.py new file mode 100644 index 000000000..6afd309c8 --- /dev/null +++ b/frontends/tests/test_data_backup.py @@ -0,0 +1,674 @@ +from __future__ import annotations + +import json +import stat +import zipfile +from pathlib import Path + +import pytest + +import frontends.data_backup as data_backup +from frontends.data_backup import ( + BACKUP_FORMAT_VERSION, + BACKUP_SCHEMA, + BackupFormatError, + export_data_backup, + inspect_import_source, + materialize_import_source, + merge_data_files, +) + + +def _seed_data(root: Path) -> None: + (root / "memory" / "nested").mkdir(parents=True) + (root / "memory" / "notes.md").write_text("memory", encoding="utf-8") + (root / "memory" / "nested" / "facts.json").write_text("{}", encoding="utf-8") + (root / "temp" / "model_responses").mkdir(parents=True) + (root / "temp" / "model_responses" / "response.json").write_text("{}", encoding="utf-8") + (root / "temp" / "desktop_sessions").mkdir(parents=True) + (root / "temp" / "desktop_sessions" / "sess-one.json").write_text( + json.dumps({"id": "sess-one", "title": "One", "messages": []}), + encoding="utf-8", + ) + (root / "mykey.py").write_text("secret", encoding="utf-8") + (root / "agentmain.py").write_text("code", encoding="utf-8") + (root / "logs").mkdir() + (root / "logs" / "bridge.log").write_text("private log", encoding="utf-8") + + +class TestDataBackupExport: + def test_exports_only_allowed_data_and_private_manifest(self, tmp_path: Path): + source = tmp_path / "source" + source.mkdir() + _seed_data(source) + destination = tmp_path / "GenericAgent-data-backup.zip" + + result = export_data_backup(str(source), str(destination), "localRepository") + + assert result["content"] == {"memory": 2, "responses": 1, "sessions": 1} + with zipfile.ZipFile(destination) as archive: + names = set(archive.namelist()) + assert names == { + "manifest.json", + "memory/notes.md", + "memory/nested/facts.json", + "temp/model_responses/response.json", + "temp/desktop_sessions/sess-one.json", + } + manifest = json.loads(archive.read("manifest.json")) + assert manifest["schema"] == BACKUP_SCHEMA + assert manifest["formatVersion"] == BACKUP_FORMAT_VERSION + assert manifest["sourceMode"] == "localRepository" + assert str(source) not in json.dumps(manifest) + assert "mykey.py" not in names + assert "agentmain.py" not in names + assert "logs/bridge.log" not in names + + def test_rejects_symlinks_instead_of_reading_through_them(self, tmp_path: Path): + source = tmp_path / "source" + (source / "memory").mkdir(parents=True) + secret = tmp_path / "outside-secret.txt" + secret.write_text("secret", encoding="utf-8") + (source / "memory" / "linked.txt").symlink_to(secret) + destination = tmp_path / "backup.zip" + + with pytest.raises(ValueError, match="link or reparse point"): + export_data_backup(str(source), str(destination), "included") + + assert not destination.exists() + + def test_rejects_destination_inside_exported_data_before_replacing_it( + self, tmp_path: Path + ): + source = tmp_path / "source" + (source / "memory").mkdir(parents=True) + destination = source / "memory" / "nested-backup.zip" + destination.write_bytes(b"old-destination") + + with pytest.raises(ValueError, match="protected application data"): + export_data_backup(str(source), str(destination), "included") + + assert destination.read_bytes() == b"old-destination" + + def test_rejects_http_readable_destination_before_creating_it(self, tmp_path: Path): + source = tmp_path / "source" + (source / "memory").mkdir(parents=True) + (source / "memory" / "one.md").write_text("one", encoding="utf-8") + upload_root = source / "temp" / "desktop_uploads" + upload_root.mkdir(parents=True) + destination = upload_root / "exfil.zip" + + with pytest.raises(ValueError, match="protected application data"): + export_data_backup( + str(source), str(destination), "included", forbidden_roots=(upload_root,) + ) + + assert not destination.exists() + + def test_export_enforces_the_same_entry_limit_as_import( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + source = tmp_path / "source" + (source / "memory").mkdir(parents=True) + (source / "memory" / "one.md").write_text("one", encoding="utf-8") + destination = tmp_path / "backup.zip" + destination.write_bytes(b"old") + monkeypatch.setattr(data_backup, "MAX_ARCHIVE_ENTRIES", 1) + + with pytest.raises(BackupFormatError, match="too many files"): + export_data_backup(str(source), str(destination), "included") + + assert destination.read_bytes() == b"old" + + def test_export_enforces_the_same_size_limit_as_import( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + source = tmp_path / "source" + (source / "memory").mkdir(parents=True) + (source / "memory" / "one.md").write_text("one", encoding="utf-8") + destination = tmp_path / "backup.zip" + destination.write_bytes(b"old") + monkeypatch.setattr(data_backup, "MAX_ARCHIVE_UNCOMPRESSED_BYTES", 1) + + with pytest.raises(BackupFormatError, match="too large"): + export_data_backup(str(source), str(destination), "included") + + assert destination.read_bytes() == b"old" + + def test_export_revalidates_written_zip_before_replacing_destination( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + source = tmp_path / "source" + (source / "memory").mkdir(parents=True) + data_file = source / "memory" / "one.md" + data_file.write_text("one", encoding="utf-8") + destination = tmp_path / "backup.zip" + destination.write_bytes(b"old") + monkeypatch.setattr(data_backup, "MAX_ARCHIVE_UNCOMPRESSED_BYTES", 10_000) + original_write = zipfile.ZipFile.write + + def grow_then_write(archive, filename, arcname=None, *args, **kwargs): + path = Path(filename) + if path == data_file: + path.write_bytes(b"x" * 20_000) + return original_write(archive, filename, arcname, *args, **kwargs) + + monkeypatch.setattr(zipfile.ZipFile, "write", grow_then_write) + + with pytest.raises(BackupFormatError, match="too large"): + export_data_backup(str(source), str(destination), "included") + + assert destination.read_bytes() == b"old" + assert not list(tmp_path.glob(".backup.*.tmp")) + + +class TestDataBackupInspection: + def test_inspects_generated_backup(self, tmp_path: Path): + source = tmp_path / "source" + source.mkdir() + _seed_data(source) + destination = tmp_path / "backup.zip" + export_data_backup(str(source), str(destination), "included") + + result = inspect_import_source(str(destination)) + + assert result["sourceType"] == "backupZip" + assert result["sourceMode"] == "included" + assert result["content"]["sessions"] == 1 + + def test_rejects_traversal_before_extraction(self, tmp_path: Path): + destination = tmp_path / "traversal.zip" + manifest = { + "schema": BACKUP_SCHEMA, + "formatVersion": BACKUP_FORMAT_VERSION, + "exportedAt": "2026-08-22T00:00:00Z", + "sourceMode": "included", + "content": {"memory": 0, "responses": 0, "sessions": 0}, + } + with zipfile.ZipFile(destination, "w") as archive: + archive.writestr("manifest.json", json.dumps(manifest)) + archive.writestr("../outside.txt", "escape") + + with pytest.raises(BackupFormatError, match="invalid backup entry path"): + inspect_import_source(str(destination)) + + def test_rejects_symlink_entries(self, tmp_path: Path): + destination = tmp_path / "link.zip" + manifest = { + "schema": BACKUP_SCHEMA, + "formatVersion": BACKUP_FORMAT_VERSION, + "exportedAt": "2026-08-22T00:00:00Z", + "sourceMode": "included", + "content": {"memory": 1, "responses": 0, "sessions": 0}, + } + link = zipfile.ZipInfo("memory/link") + link.create_system = 3 + link.external_attr = (stat.S_IFLNK | 0o777) << 16 + with zipfile.ZipFile(destination, "w") as archive: + archive.writestr("manifest.json", json.dumps(manifest)) + archive.writestr(link, "../../secret") + + with pytest.raises(BackupFormatError, match="contains links"): + inspect_import_source(str(destination)) + + def test_rejects_manifest_count_mismatch(self, tmp_path: Path): + destination = tmp_path / "mismatch.zip" + manifest = { + "schema": BACKUP_SCHEMA, + "formatVersion": BACKUP_FORMAT_VERSION, + "exportedAt": "2026-08-22T00:00:00Z", + "sourceMode": "included", + "content": {"memory": 2, "responses": 0, "sessions": 0}, + } + with zipfile.ZipFile(destination, "w") as archive: + archive.writestr("manifest.json", json.dumps(manifest)) + archive.writestr("memory/one.md", "one") + + with pytest.raises(BackupFormatError, match="summary"): + inspect_import_source(str(destination)) + + def test_rejects_duplicate_paths_even_when_case_differs(self, tmp_path: Path): + destination = tmp_path / "duplicates.zip" + manifest = { + "schema": BACKUP_SCHEMA, + "formatVersion": BACKUP_FORMAT_VERSION, + "exportedAt": "2026-08-22T00:00:00Z", + "sourceMode": "included", + "content": {"memory": 2, "responses": 0, "sessions": 0}, + } + with zipfile.ZipFile(destination, "w") as archive: + archive.writestr("manifest.json", json.dumps(manifest)) + archive.writestr("memory/Note.md", "one") + archive.writestr("memory/note.md", "two") + + with pytest.raises(BackupFormatError, match="duplicate"): + inspect_import_source(str(destination)) + + def test_accepts_session_only_legacy_folder(self, tmp_path: Path): + source = tmp_path / "legacy" + (source / "temp").mkdir(parents=True) + (source / "temp" / "desktop_sessions.json").write_text( + json.dumps([{"id": "sess-only", "messages": [], "msg_seq": 0}]), + encoding="utf-8", + ) + + result = inspect_import_source(str(source)) + + assert result["sourceType"] == "legacyFolder" + assert result["content"] == {"memory": 0, "responses": 0, "sessions": 1} + + def test_rejects_empty_legacy_folder_and_empty_backup(self, tmp_path: Path): + source = tmp_path / "legacy" + (source / "temp").mkdir(parents=True) + (source / "temp" / "desktop_sessions.json").write_text("[]", encoding="utf-8") + with pytest.raises(BackupFormatError, match="no importable data"): + inspect_import_source(str(source)) + + backup = tmp_path / "empty.zip" + manifest = { + "schema": BACKUP_SCHEMA, + "formatVersion": BACKUP_FORMAT_VERSION, + "exportedAt": "2026-08-22T00:00:00Z", + "sourceMode": "included", + "content": {"memory": 0, "responses": 0, "sessions": 0}, + } + with zipfile.ZipFile(backup, "w") as archive: + archive.writestr("manifest.json", json.dumps(manifest)) + with pytest.raises(BackupFormatError, match="no importable data"): + inspect_import_source(str(backup)) + + def test_accepts_generated_sessions_only_zip(self, tmp_path: Path): + source = tmp_path / "source" + sessions = source / "temp" / "desktop_sessions" + sessions.mkdir(parents=True) + (sessions / "sess-only.json").write_text( + json.dumps({"id": "sess-only", "messages": [], "msg_seq": 0}), + encoding="utf-8", + ) + backup = tmp_path / "sessions-only.zip" + + export_data_backup(str(source), str(backup), "included") + inspection = inspect_import_source(str(backup)) + + assert inspection["content"] == {"memory": 0, "responses": 0, "sessions": 1} + + +class TestDataBackupImport: + def test_sessions_only_backup_round_trips(self, tmp_path: Path): + source = tmp_path / "source" + sessions = source / "temp" / "desktop_sessions" + sessions.mkdir(parents=True) + (sessions / "sess-only.json").write_text( + json.dumps({"id": "sess-only", "messages": [], "msg_seq": 0}), + encoding="utf-8", + ) + backup = tmp_path / "sessions-only.zip" + export_data_backup(str(source), str(backup), "included") + target = tmp_path / "target" + target.mkdir() + + with materialize_import_source(str(backup)) as extracted: + result = merge_data_files(str(extracted), str(target)) + + assert result["sessionsAdded"] == 1 + assert result["memoryCopied"] == 0 + assert (target / "temp" / "desktop_sessions" / "sess-only.json").is_file() + + def test_materializes_backup_and_applies_the_full_merge_contract(self, tmp_path: Path): + source = tmp_path / "source" + source.mkdir() + _seed_data(source) + backup = tmp_path / "backup.zip" + export_data_backup(str(source), str(backup), "included") + + target = tmp_path / "target" + (target / "memory").mkdir(parents=True) + (target / "memory" / "notes.md").write_text("current", encoding="utf-8") + with materialize_import_source(str(backup)) as extracted: + result = merge_data_files(str(extracted), str(target)) + assert (extracted / "temp" / "desktop_sessions" / "sess-one.json").is_file() + + assert result.keys() >= { + "ok", + "memoryCopied", + "responsesCopied", + "responsesSkipped", + "sessionsAdded", + "sessionsSkipped", + "sessionsFileFound", + "backupDir", + } + assert result["memoryCopied"] == 2 + assert result["memorySkipped"] == 0 + assert result["responsesCopied"] == 1 + assert result["sessionsAdded"] == 1 + assert result["sessionsSkipped"] == 0 + assert result["sessionsFileFound"] is True + assert (target / "memory" / "notes.md").read_text(encoding="utf-8") == "memory" + assert (target / "memory" / "nested" / "facts.json").is_file() + assert (target / "temp" / "desktop_sessions" / "sess-one.json").is_file() + backup_dir = Path(result["backupDir"]) + assert backup_dir.is_dir() + assert (backup_dir / "memory" / "notes.md").read_text(encoding="utf-8") == "current" + + def test_memory_is_source_wins_responses_are_add_only(self, tmp_path: Path): + source = tmp_path / "source" + target = tmp_path / "target" + (source / "memory").mkdir(parents=True) + (source / "memory" / "same.md").write_text("new", encoding="utf-8") + (source / "memory" / "added.md").write_text("added", encoding="utf-8") + (source / "temp" / "model_responses").mkdir(parents=True) + (source / "temp" / "model_responses" / "same.json").write_text("new", encoding="utf-8") + (source / "temp" / "model_responses" / "added.json").write_text("added", encoding="utf-8") + (target / "memory").mkdir(parents=True) + (target / "memory" / "same.md").write_text("old", encoding="utf-8") + (target / "temp" / "model_responses").mkdir(parents=True) + (target / "temp" / "model_responses" / "same.json").write_text("old", encoding="utf-8") + + result = merge_data_files(str(source), str(target)) + + assert result["memoryCopied"] == 2 + assert result["responsesCopied"] == 1 + assert result["responsesSkipped"] == 1 + assert (target / "memory" / "same.md").read_text(encoding="utf-8") == "new" + assert (target / "memory" / "added.md").read_text(encoding="utf-8") == "added" + assert (target / "temp" / "model_responses" / "same.json").read_text(encoding="utf-8") == "old" + assert (target / "temp" / "model_responses" / "added.json").read_text(encoding="utf-8") == "added" + assert (Path(result["backupDir"]) / "memory" / "same.md").read_text(encoding="utf-8") == "old" + + def test_sessions_dedupe_by_desktop_id_across_new_and_legacy_stores(self, tmp_path: Path): + source = tmp_path / "source" + target = tmp_path / "target" + (source / "memory").mkdir(parents=True) + source_sessions = source / "temp" / "desktop_sessions" + source_sessions.mkdir(parents=True) + (source_sessions / "existing.json").write_text( + json.dumps({"id": "sess-existing", "messages": []}), encoding="utf-8" + ) + (source_sessions / "new.json").write_text( + json.dumps({"id": "sess-new", "messages": []}), encoding="utf-8" + ) + (source_sessions / "tui.json").write_text( + json.dumps({"id": "tui_worker", "messages": []}), encoding="utf-8" + ) + (source_sessions / "corrupt.json").write_text("{bad", encoding="utf-8") + (source / "temp" / "desktop_sessions.json").write_text( + json.dumps([ + {"id": "sess-new", "messages": []}, + {"id": "sess-legacy", "messages": []}, + {"id": "../../escape", "messages": []}, + ]), + encoding="utf-8", + ) + target_sessions = target / "temp" / "desktop_sessions" + target_sessions.mkdir(parents=True) + (target_sessions / "different-name.json").write_text( + json.dumps({"id": "sess-existing", "messages": []}), encoding="utf-8" + ) + + result = merge_data_files( + str(source), str(target), existing_session_ids={"sess-in-memory"} + ) + + assert result["sessionsAdded"] == 2 + assert result["sessionsSkipped"] == 5 + assert result["sessionsFileFound"] is True + assert (target_sessions / "sess-new.json").is_file() + assert (target_sessions / "sess-legacy.json").is_file() + assert not (tmp_path / "escape.json").exists() + + def test_invalid_session_schema_is_skipped_and_valid_record_is_canonical( + self, tmp_path: Path + ): + source = tmp_path / "source" + sessions = source / "temp" / "desktop_sessions" + sessions.mkdir(parents=True) + records = { + "int-id.json": {"id": 7, "messages": [], "msg_seq": 0}, + "nan-time.json": { + "id": "sess-nan", + "messages": [], + "msg_seq": 0, + "updated_at": float("nan"), + }, + "bad-seq.json": {"id": "sess-seq", "messages": [], "msg_seq": -1}, + "bad-messages.json": { + "id": "sess-msg", + "messages": ["not-an-object"], + "msg_seq": 0, + }, + "valid.json": { + "id": "sess-valid", + "title": "Valid", + "messages": [{"id": 1, "role": "user", "content": "hi"}], + "msg_seq": 1, + "created_at": 10, + "updated_at": 11.5, + "llm_history": [{"role": "user", "content": "hi"}], + "unknown": "drop-me", + }, + } + for name, record in records.items(): + (sessions / name).write_text(json.dumps(record), encoding="utf-8") + target = tmp_path / "target" + target.mkdir() + + result = merge_data_files(str(source), str(target)) + + assert result["sessionsAdded"] == 1 + assert result["sessionsSkipped"] == 4 + document = json.loads( + (target / "temp" / "desktop_sessions" / "sess-valid.json").read_text( + encoding="utf-8" + ) + ) + assert document["id"] == "sess-valid" + assert document["updated_at"] == 11.5 + assert document["messages"][0]["role"] == "user" + assert "unknown" not in document + + def test_mocked_windows_reparse_source_is_rejected_before_read( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + source = tmp_path / "source" + memory = source / "memory" + memory.mkdir(parents=True) + (memory / "secret.md").write_text("secret", encoding="utf-8") + destination = tmp_path / "backup.zip" + real_check = data_backup._is_link_or_reparse + + monkeypatch.setattr( + data_backup, + "_is_link_or_reparse", + lambda path: Path(path) == memory or real_check(Path(path)), + ) + + with pytest.raises(ValueError, match="safe directory"): + export_data_backup(str(source), str(destination), "included") + assert not destination.exists() + + def test_mocked_windows_reparse_target_ancestor_is_rejected_before_write( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + source = tmp_path / "source" + target = tmp_path / "target" + (source / "memory").mkdir(parents=True) + (source / "memory" / "new.md").write_text("new", encoding="utf-8") + target_memory = target / "memory" + target_memory.mkdir(parents=True) + (target_memory / "old.md").write_text("old", encoding="utf-8") + real_check = data_backup._is_link_or_reparse + + monkeypatch.setattr( + data_backup, + "_is_link_or_reparse", + lambda path: Path(path) == target_memory or real_check(Path(path)), + ) + + with pytest.raises(ValueError, match="safe directory"): + merge_data_files(str(source), str(target)) + assert (target_memory / "old.md").read_text(encoding="utf-8") == "old" + assert not (target_memory / "new.md").exists() + + def test_empty_target_needs_no_backup_and_reports_missing_sessions(self, tmp_path: Path): + source = tmp_path / "source" + target = tmp_path / "target" + (source / "memory").mkdir(parents=True) + (source / "memory" / "one.md").write_text("one", encoding="utf-8") + target.mkdir() + + result = merge_data_files(str(source), str(target)) + + assert result["backupDir"] == "" + assert result["sessionsAdded"] == 0 + assert result["sessionsSkipped"] == 0 + assert result["sessionsFileFound"] is False + + def test_backup_failure_never_writes_the_destination( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + source = tmp_path / "source" + target = tmp_path / "target" + (source / "memory").mkdir(parents=True) + (source / "memory" / "same.md").write_text("new", encoding="utf-8") + (source / "temp" / "model_responses").mkdir(parents=True) + (source / "temp" / "model_responses" / "added.json").write_text("new", encoding="utf-8") + (target / "memory").mkdir(parents=True) + (target / "memory" / "same.md").write_text("old", encoding="utf-8") + + def fail_backup(*_args, **_kwargs): + raise OSError("backup disk full") + + monkeypatch.setattr(data_backup, "_create_memory_backup", fail_backup) + + with pytest.raises(OSError, match="backup disk full"): + merge_data_files(str(source), str(target)) + + assert (target / "memory" / "same.md").read_text(encoding="utf-8") == "old" + assert not (target / "temp" / "model_responses" / "added.json").exists() + + def test_staging_copy_failure_cleans_up_without_partial_writes( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + source = tmp_path / "source" + target = tmp_path / "target" + responses = source / "temp" / "model_responses" + responses.mkdir(parents=True) + (responses / "a-ok.json").write_text("ok", encoding="utf-8") + (responses / "z-fail.json").write_text("fail", encoding="utf-8") + target.mkdir() + real_copy2 = data_backup.shutil.copy2 + + def fail_second_copy(source_path, destination_path, *args, **kwargs): + if Path(source_path).name == "z-fail.json": + raise OSError("copy failed") + return real_copy2(source_path, destination_path, *args, **kwargs) + + monkeypatch.setattr(data_backup.shutil, "copy2", fail_second_copy) + + with pytest.raises(OSError, match="copy failed"): + merge_data_files(str(source), str(target)) + + assert not (target / "temp" / "model_responses" / "a-ok.json").exists() + assert not list(target.glob(".genericagent-memory-import-*")) + + def test_activation_partial_failure_rolls_memory_and_added_files_back( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + source = tmp_path / "source" + target = tmp_path / "target" + (source / "memory").mkdir(parents=True) + (source / "memory" / "same.md").write_text("new", encoding="utf-8") + (source / "temp" / "model_responses").mkdir(parents=True) + (source / "temp" / "model_responses" / "fail.json").write_text("new", encoding="utf-8") + (target / "memory").mkdir(parents=True) + (target / "memory" / "same.md").write_text("old", encoding="utf-8") + failing_target = target / "temp" / "model_responses" / "fail.json" + + real_install = data_backup._install_file_add_only + + def fail_response_activation(source_path, destination_path): + if Path(destination_path) == failing_target: + raise OSError("activation failed") + return real_install(source_path, destination_path) + + monkeypatch.setattr( + data_backup, "_install_file_add_only", fail_response_activation + ) + + with pytest.raises(OSError, match="activation failed"): + merge_data_files(str(source), str(target)) + + assert (target / "memory" / "same.md").read_text(encoding="utf-8") == "old" + assert not failing_target.exists() + backups = list((target / "temp").glob("memory_import_backup_*")) + assert len(backups) == 1 + assert (backups[0] / "memory" / "same.md").read_text(encoding="utf-8") == "old" + + def test_add_only_install_falls_back_on_filesystems_without_hard_links( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + source = tmp_path / "source" + target = tmp_path / "target" + responses = source / "temp" / "model_responses" + responses.mkdir(parents=True) + (responses / "portable.json").write_text("portable", encoding="utf-8") + target.mkdir() + + def unsupported_link(*_args, **_kwargs): + raise OSError(data_backup.errno.EOPNOTSUPP, "hard links unsupported") + + monkeypatch.setattr(data_backup.os, "link", unsupported_link) + + result = merge_data_files(str(source), str(target)) + + assert result["responsesCopied"] == 1 + assert ( + target / "temp" / "model_responses" / "portable.json" + ).read_text(encoding="utf-8") == "portable" + + def test_concurrent_response_creation_is_never_overwritten( + self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch + ): + source = tmp_path / "source" + target = tmp_path / "target" + (source / "memory").mkdir(parents=True) + (source / "memory" / "same.md").write_text("new", encoding="utf-8") + responses = source / "temp" / "model_responses" + responses.mkdir(parents=True) + (responses / "race.json").write_text("import", encoding="utf-8") + (target / "memory").mkdir(parents=True) + (target / "memory" / "same.md").write_text("old", encoding="utf-8") + racing_target = target / "temp" / "model_responses" / "race.json" + real_link = data_backup.os.link + + def collide_then_link(source_path, destination_path, **kwargs): + destination = Path(destination_path) + if destination == racing_target: + destination.write_text("concurrent", encoding="utf-8") + return real_link(source_path, destination_path, **kwargs) + + monkeypatch.setattr(data_backup.os, "link", collide_then_link) + + with pytest.raises(FileExistsError): + merge_data_files(str(source), str(target)) + + assert racing_target.read_text(encoding="utf-8") == "concurrent" + assert (target / "memory" / "same.md").read_text(encoding="utf-8") == "old" + + def test_memory_backup_refuses_symlinked_temp_directory(self, tmp_path: Path): + source = tmp_path / "source" + target = tmp_path / "target" + outside = tmp_path / "outside" + (source / "memory").mkdir(parents=True) + (source / "memory" / "same.md").write_text("new", encoding="utf-8") + (target / "memory").mkdir(parents=True) + (target / "memory" / "same.md").write_text("old", encoding="utf-8") + outside.mkdir() + (target / "temp").symlink_to(outside, target_is_directory=True) + + with pytest.raises(ValueError, match="backup destination"): + merge_data_files(str(source), str(target)) + + assert (target / "memory" / "same.md").read_text(encoding="utf-8") == "old" + assert list(outside.iterdir()) == [] diff --git a/frontends/tests/test_ga_root_contract.py b/frontends/tests/test_ga_root_contract.py new file mode 100644 index 000000000..f1154fabd --- /dev/null +++ b/frontends/tests/test_ga_root_contract.py @@ -0,0 +1,144 @@ +"""Contracts for the package-owned bridge/conductor plus external GA_ROOT architecture.""" +from __future__ import annotations + +import ast +import json +import os +import subprocess +import sys +from pathlib import Path + + +ROOT = Path(__file__).resolve().parent.parent.parent +BRIDGE_SOURCE = (ROOT / "frontends" / "desktop_bridge.py").read_text(encoding="utf-8") +CONDUCTOR_SOURCE = (ROOT / "frontends" / "conductor.py").read_text(encoding="utf-8") +HUB_SOURCE = (ROOT / "frontends" / "hub.py").read_text(encoding="utf-8") +PROBE = ROOT / "frontends" / "ga_contract_probe.py" + + +def _load_function(source: str, name: str, namespace: dict): + tree = ast.parse(source) + node = next(item for item in tree.body if isinstance(item, ast.FunctionDef) and item.name == name) + exec(compile(ast.Module(body=[node], type_ignores=[]), "contract.py", "exec"), namespace) + return namespace[name] + + +def test_conductor_prefers_a_valid_external_ga_root(tmp_path, monkeypatch): + external = tmp_path / "external" + external.mkdir() + (external / "agentmain.py").write_text("# core\n", encoding="utf-8") + monkeypatch.setenv("GA_ROOT", str(external)) + resolve = _load_function(CONDUCTOR_SOURCE, "_resolve_ga_root", {"os": os}) + + assert resolve() == str(external.resolve()) + + +def test_bridge_discovers_package_conductor_but_external_scheduler(tmp_path): + external = tmp_path / "external" + (external / "reflect").mkdir(parents=True) + (external / "reflect" / "scheduler.py").write_text("# scheduler\n", encoding="utf-8") + bundle_frontends = tmp_path / "bundle" / "frontends" + bundle_frontends.mkdir(parents=True) + bundled_conductor = bundle_frontends / "conductor.py" + bundled_conductor.write_text("# conductor\n", encoding="utf-8") + discover = _load_function( + BRIDGE_SOURCE, + "discover_extra_services", + { + "Path": Path, + "List": list, + "APP_DIR": bundle_frontends, + "sys": sys, + "_configured_conductor_port": lambda: 29890, + }, + ) + + catalog = {item["id"]: item for item in discover(external)} + + assert catalog["frontends/conductor.py"]["cmd"][1] == str(bundled_conductor) + assert catalog["frontends/conductor.py"]["cmd"][-2:] == ["--port", "29890"] + assert catalog["frontends/conductor.py"]["port"] == 29890 + assert catalog["reflect/scheduler.py"]["cmd"][-1] == "reflect/scheduler.py" + + +def test_service_spawn_injects_effective_ga_root(): + tree = ast.parse(BRIDGE_SOURCE) + service_manager = next( + item for item in tree.body if isinstance(item, ast.ClassDef) and item.name == "ServiceManager" + ) + start_service = next( + item for item in service_manager.body + if isinstance(item, ast.FunctionDef) and item.name == "start_service" + ) + string_constants = { + node.value for node in ast.walk(start_service) + if isinstance(node, ast.Constant) and isinstance(node.value, str) + } + + assert "GA_ROOT" in string_constants + + +def test_missing_optional_p2p_dependencies_cannot_abort_hub_setup(): + tree = ast.parse(HUB_SOURCE) + p2p_import = next( + node + for node in ast.walk(tree) + if isinstance(node, ast.ImportFrom) and node.module == "hub_p2p" + ) + guard = next( + node + for node in ast.walk(tree) + if isinstance(node, ast.Try) and p2p_import in set(ast.walk(node)) + ) + + assert any( + handler.type is None + or (isinstance(handler.type, ast.Name) and handler.type.id == "Exception") + for handler in guard.handlers + ) + + +def _run_probe(core: Path) -> tuple[subprocess.CompletedProcess[str], dict]: + completed = subprocess.run( + [sys.executable, str(PROBE), str(core)], + check=False, + capture_output=True, + text=True, + ) + return completed, json.loads(completed.stdout.strip().splitlines()[-1]) + + +def test_compatibility_probe_rejects_a_core_missing_generic_agent(tmp_path): + (tmp_path / "agentmain.py").write_text("# no GenericAgent\n", encoding="utf-8") + (tmp_path / "llmcore.py").write_text( + "def reload_mykeys(): pass\ndef _record_usage(usage, api_mode): pass\n", + encoding="utf-8", + ) + + completed, verdict = _run_probe(tmp_path) + + assert completed.returncode == 1 + assert verdict == {"ok": False, "missing": ["agentmain.GenericAgent"], "error": ""} + + +def test_compatibility_probe_accepts_the_desktop_core_contract(tmp_path): + (tmp_path / "agentmain.py").write_text( + """class GenericAgent: + def run(self): pass + def put_task(self, prompt, images=None, source=None): pass + def next_llm(self): pass + def load_llm_sessions(self): pass + def get_llm_name(self, model=None): pass + def abort(self): pass +""", + encoding="utf-8", + ) + (tmp_path / "llmcore.py").write_text( + "def reload_mykeys(): pass\ndef _record_usage(usage, api_mode): pass\n", + encoding="utf-8", + ) + + completed, verdict = _run_probe(tmp_path) + + assert completed.returncode == 0 + assert verdict == {"ok": True, "missing": [], "error": ""} diff --git a/frontends/tests/test_package_evidence.py b/frontends/tests/test_package_evidence.py new file mode 100644 index 000000000..e50f3aeb5 --- /dev/null +++ b/frontends/tests/test_package_evidence.py @@ -0,0 +1,556 @@ +import importlib.util +import io +import json +import plistlib +import urllib.error +import urllib.request +from pathlib import Path +from types import SimpleNamespace + +import pytest + + +ROOT = Path(__file__).resolve().parents[2] + + +def load_module(name: str, relative: str): + path = ROOT / relative + spec = importlib.util.spec_from_file_location(name, path) + module = importlib.util.module_from_spec(spec) + assert spec.loader is not None + spec.loader.exec_module(module) + return module + + +journey = load_module( + "real_package_journey", + "frontends/desktop/e2e/package/real_package_journey.py", +) +evidence = load_module( + "verify_candidate_evidence", + "frontends/desktop/e2e/package/verify_candidate_evidence.py", +) + + +def complete_report(platform: str = "linux"): + checks = {name: True for name in evidence.COMMON_CHECKS} + isolated_port = 29890 + ownership = { + scenario: owned_conductor(port=isolated_port, pid=44120 + index) + for index, scenario in enumerate(sorted(evidence.SUCCESSFUL_APPLICATION_SCENARIOS)) + } + checks["isolatedConductorOwnership"] = ownership + checks["ownedProcessStops"] = { + scenario: { + "app": 45120 + index * 3, + "bridge": 45121 + index * 3, + "conductor": ownership[scenario]["pid"], + } + for index, scenario in enumerate(sorted(evidence.SUCCESSFUL_APPLICATION_SCENARIOS)) + } + checks["portRecovery"] = "release-then-production-restart" + if platform == "macos": + checks["macAppImmutable"] = True + bootstrap = { + name: {"phase": "failed" if name == "foreign-port" else "ready"} + for name in ( + "first-launch", + "warm-restart", + "foreign-port", + "after-port-release", + "relocated", + "stale-override", + ) + } + return { + "expectedCommit": "abc1234", + "releaseVersion": "0.2.0", + "artifact": {"sha256": "f" * 64}, + "environment": {"isolatedConductorPort": isolated_port}, + "success": True, + "checks": checks, + "bootstrap": bootstrap, + "manualChecklist": {"nativeVisuals": "pass"}, + "screenshots": ["ready.png", "foreign.png"], + } + + +def test_candidate_report_contract_accepts_complete_platform_evidence(): + assert evidence.assert_report("linux", complete_report(), "abc1234") == [] + assert evidence.assert_report("macos", complete_report("macos"), "abc1234") == [] + + +def test_candidate_report_contract_rejects_incomplete_manual_and_commit_evidence(): + report = complete_report() + report["expectedCommit"] = "different" + report["manualChecklist"]["nativeVisuals"] = "pending" + failures = evidence.assert_report("linux", report, "abc1234") + assert any("commit" in failure for failure in failures) + assert any("manual checklist" in failure for failure in failures) + + +def test_candidate_report_contract_rejects_partial_or_unowned_conductor_evidence(): + report = complete_report() + report["checks"]["isolatedConductorOwnership"].pop("relocated") + report["checks"]["ownedProcessStops"]["warm-restart"].pop("conductor") + + failures = evidence.assert_report("linux", report, "abc1234") + + assert any("ownership does not cover every successful launch" in item for item in failures) + assert any("invalid owned process stop evidence for warm-restart" in item for item in failures) + + +def test_stdlib_fake_model_emits_sse_and_redacts_auth_in_transcript(): + fake = journey.FakeOpenAI() + fake.start() + try: + request = urllib.request.Request( + fake.base_url + "/v1/chat/completions", + data=json.dumps({"model": "e2e-model"}).encode(), + headers={"Authorization": "Bearer secret", "Content-Type": "application/json"}, + method="POST", + ) + with urllib.request.urlopen(request, timeout=5) as response: + body = response.read().decode() + assert "Harness reply" in body + assert "[DONE]" in body + assert fake.transcript == [ + { + "path": "/v1/chat/completions", + "model": "e2e-model", + "authorization": "[redacted]", + "at": fake.transcript[0]["at"], + } + ] + finally: + fake.stop() + + +def write_info_plist(root: Path, **overrides): + contents = root / "Contents" + contents.mkdir(parents=True, exist_ok=True) + values = { + "CFBundleShortVersionString": "0.2.0", + "CFBundleVersion": "0.2.0", + **overrides, + } + with (contents / "Info.plist").open("wb") as stream: + plistlib.dump(values, stream) + + +def test_macos_package_version_comes_from_both_native_bundle_keys(tmp_path): + write_info_plist(tmp_path) + assert journey.read_macos_bundle_versions(tmp_path) == ("0.2.0", "0.2.0") + + +@pytest.mark.parametrize("key", ["CFBundleShortVersionString", "CFBundleVersion"]) +@pytest.mark.parametrize("value", ["0.2.1", 200]) +def test_macos_package_version_rejects_wrong_or_non_string_keys(tmp_path, key, value): + write_info_plist(tmp_path, **{key: value}) + with pytest.raises(journey.JourneyFailure, match=key): + journey.read_macos_bundle_versions(tmp_path) + + +@pytest.mark.parametrize("key", ["CFBundleShortVersionString", "CFBundleVersion"]) +def test_macos_package_version_rejects_missing_keys(tmp_path, key): + write_info_plist(tmp_path) + path = tmp_path / "Contents" / "Info.plist" + with path.open("rb") as stream: + values = plistlib.load(stream) + del values[key] + with path.open("wb") as stream: + plistlib.dump(values, stream) + with pytest.raises(journey.JourneyFailure, match=key): + journey.read_macos_bundle_versions(tmp_path) + + +@pytest.mark.parametrize("payload", [b"not a plist", b"", plistlib.dumps([])]) +def test_macos_package_version_rejects_invalid_or_empty_plist(tmp_path, payload): + contents = tmp_path / "Contents" + contents.mkdir() + (contents / "Info.plist").write_bytes(payload) + with pytest.raises(journey.JourneyFailure, match="missing or invalid"): + journey.read_macos_bundle_versions(tmp_path) + + +def test_macos_package_version_rejects_missing_plist(tmp_path): + with pytest.raises(journey.JourneyFailure, match="missing or invalid"): + journey.read_macos_bundle_versions(tmp_path) + + +def test_package_shape_rejects_excluded_source_package_json(tmp_path): + package_root = tmp_path / "GenericAgent.app" + runtime_root = package_root / "Contents" / "Resources" / "runtime" + application = package_root / "Contents" / "MacOS" / "GenericAgent" + for path in [ + application, + runtime_root / "app" / "agentmain.py", + runtime_root / "app" / "frontends" / "desktop_bridge.py", + runtime_root / "app" / "frontends" / "desktop" / "static" / "index.html", + runtime_root / "python" / "bin" / "python3", + runtime_root / ".prepared", + runtime_root / "app" / "frontends" / "desktop" / "package.json", + ]: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text("{}", encoding="utf-8") + write_info_plist(package_root) + + candidate = object.__new__(journey.Journey) + candidate.args = type("Args", (), {"platform": "macos"})() + candidate.package_root = package_root + candidate.runtime_root = runtime_root + candidate.application = application + candidate.report = {"checks": {}} + + with pytest.raises(journey.JourneyFailure, match="excluded Desktop source metadata"): + candidate.check_package_shape() + + (runtime_root / "app" / "frontends" / "desktop" / "package.json").unlink() + candidate.check_package_shape() + assert candidate.report["checks"] == { + "packagedVersion": "0.2.0", + "packagedBundleVersion": "0.2.0", + "packageShape": True, + } + + +def chat_snapshot(*, status="idle", unfinished=False): + return { + "status": status, + "hasUnfinishedWork": unfinished, + "messages": [{"role": "assistant", "content": "Harness reply"}], + "lastError": "model failed" if status == "error" else "", + } + + +def test_package_chat_waits_for_the_live_turn_thread_after_reply_and_idle_status(): + assert journey.completed_assistant_reply(chat_snapshot(status="running", unfinished=True)) is None + assert journey.completed_assistant_reply(chat_snapshot(unfinished=True)) is None + assert journey.completed_assistant_reply(chat_snapshot()) == "Harness reply" + + missing_barrier = chat_snapshot() + missing_barrier.pop("hasUnfinishedWork") + assert journey.completed_assistant_reply(missing_barrier) is None + + +@pytest.mark.parametrize("status", ["error", "cancelled"]) +def test_package_chat_fails_immediately_on_terminal_session_state(status): + with pytest.raises(journey.JourneyFailure, match=f"terminal state {status}"): + journey.completed_assistant_reply(chat_snapshot(status=status)) + + +def valid_import_conflict(): + return { + "ok": False, + "error": "managed Desktop services are running", + "code": "maintenance_conflict", + "runningSessions": [], + "runningExtras": ["frontends/conductor.py", "reflect/scheduler.py"], + } + + +def test_package_import_requires_the_exact_running_extras_conflict(): + assert journey.validate_import_maintenance_conflict(409, valid_import_conflict()) == [ + "frontends/conductor.py", + "reflect/scheduler.py", + ] + + +def test_package_request_reads_the_expected_http_error_json(monkeypatch): + payload = {**valid_import_conflict(), "runningExtras": ["frontends/conductor.py"]} + error = urllib.error.HTTPError( + "http://127.0.0.1:14168/memory/import", + 409, + "Conflict", + {}, + io.BytesIO(json.dumps(payload).encode("utf-8")), + ) + + def reject(*_args, **_kwargs): + raise error + + monkeypatch.setattr(urllib.request, "urlopen", reject) + status, response = journey.request_json_with_status( + "POST", + "/memory/import", + {"sourceDir": "/source"}, + ) + + assert status == 409 + assert response == payload + + +@pytest.mark.parametrize( + ("status", "payload"), + [ + (200, valid_import_conflict()), + (409, {**valid_import_conflict(), "ok": True}), + (409, {**valid_import_conflict(), "code": "other_conflict"}), + (409, {**valid_import_conflict(), "runningSessions": ["sess-live"]}), + (409, {**valid_import_conflict(), "runningExtras": []}), + (409, {**valid_import_conflict(), "runningExtras": ["reflect/scheduler.py"]}), + (409, {**valid_import_conflict(), "runningExtras": ["frontends/conductor.py"] * 2}), + ], +) +def test_package_import_rejects_inexact_maintenance_conflicts(status, payload): + with pytest.raises(journey.JourneyFailure): + journey.validate_import_maintenance_conflict(status, payload) + + +def stopped_panel(*services): + return {"services": list(services)} + + +def owned_conductor(port=29890, pid=44123): + return { + "id": "frontends/conductor.py", + "status": "running", + "running": True, + "owned": True, + "external": False, + "port": port, + "pid": pid, + } + + +def test_package_journey_requires_exact_owned_isolated_conductor_state(): + state = owned_conductor() + payload = stopped_panel(state) + assert journey.verified_owned_conductor(payload, 29890, True) is state + assert journey.verified_owned_conductor(payload, 29890, False) is None + + mutations = [ + {**state, "status": "error"}, + {**state, "running": False}, + {**state, "owned": False}, + {**state, "external": True}, + {**state, "port": 8900}, + {**state, "pid": None}, + ] + for mutation in mutations: + assert journey.verified_owned_conductor(stopped_panel(mutation), 29890, True) is None + assert journey.verified_owned_conductor(stopped_panel(state, state), 29890, True) is None + + +def test_package_start_injects_only_the_isolated_e2e_conductor_port(tmp_path, monkeypatch): + candidate = object.__new__(journey.Journey) + candidate.process = None + candidate.package_root = tmp_path + candidate.application = tmp_path / "GenericAgent" + candidate.report_dir = tmp_path / "reports" + candidate.conductor_port = 29890 + candidate.process_log = None + candidate.report = {"pids": []} + captured = {} + + class FakeProcess: + pid = 44120 + + def fake_popen(command, **kwargs): + captured["command"] = command + captured.update(kwargs) + return FakeProcess() + + monkeypatch.setattr(journey, "loopback_port_is_free", lambda port: port == 29890) + monkeypatch.setattr(journey.subprocess, "Popen", fake_popen) + + candidate.start_application("first-launch") + candidate.process_log.close() + + assert captured["env"]["GA_DESKTOP_E2E_CONDUCTOR_PORT"] == "29890" + assert captured["env"]["GA_DESKTOP_E2E_REPORT_DIR"].endswith( + "bootstrap/first-launch" + ) + assert candidate.report["pids"] == [{"scenario": "first-launch", "app": 44120}] + + +def test_isolated_conductor_allocator_rejects_active_and_default_product_ports(monkeypatch): + candidates = iter([24170, 14168, 8900, 29890]) + + class FakeReservation: + def __enter__(self): + return self + + def __exit__(self, *_args): + return False + + def bind(self, _address): + return None + + def getsockname(self): + return ("127.0.0.1", next(candidates)) + + monkeypatch.setattr(journey, "BRIDGE_PORT", 24170) + monkeypatch.setattr(journey.socket, "socket", lambda *_args, **_kwargs: FakeReservation()) + + assert journey.allocate_isolated_conductor_port() == 29890 + + +def test_every_successful_ready_snapshot_records_its_owned_conductor_pid( + tmp_path, monkeypatch +): + candidate = object.__new__(journey.Journey) + candidate.args = SimpleNamespace(start_timeout=1, expected_commit="abc1234") + candidate.report_dir = tmp_path / "report" + candidate.external_root = tmp_path / "external" + candidate.runtime_root = tmp_path / "package" / "runtime" + candidate.conductor_port = 29890 + candidate.report = { + "bootstrap": {}, + "identities": {}, + "pids": [{"scenario": "warm-restart", "app": 44120}], + "checks": {}, + } + expected_app_dir = candidate.runtime_root / "app" / "frontends" + latest = candidate.scenario_dir("warm-restart") / "bootstrap-latest.json" + journey.write_json(latest, {"phase": "ready"}) + + def fake_request(_method, path, body=None, timeout=5.0): + del body, timeout + if path == "/services/identity": + return { + "ga_root": str(candidate.external_root), + "app_dir": str(expected_app_dir), + "pid": 44121, + "build_id": "desktop-abc1234", + } + if path == "/services/panel": + return stopped_panel(owned_conductor(pid=44122)) + raise AssertionError(path) + + monkeypatch.setattr(journey, "request_json", fake_request) + monkeypatch.setattr( + journey, + "loopback_port_is_free", + lambda port: False if port == 29890 else True, + ) + + candidate.wait_ready("warm-restart", candidate.external_root) + + assert candidate.report["pids"][-1]["bridge"] == 44121 + assert candidate.report["pids"][-1]["conductor"] == 44122 + assert candidate.report["checks"]["isolatedConductorOwnership"] == { + "warm-restart": owned_conductor(pid=44122) + } + + +def test_package_import_waits_until_every_reported_extra_is_offline(): + ids = ["frontends/conductor.py", "reflect/scheduler.py"] + complete = stopped_panel( + {"id": "frontends/conductor.py", "running": False, "status": "offline"}, + {"id": "reflect/scheduler.py", "running": False, "status": "offline"}, + ) + assert journey.verified_stopped_extras_panel(complete, ids) is complete + assert journey.verified_stopped_extras_panel( + stopped_panel({"id": ids[0], "running": False, "status": "offline"}), + ids, + ) is None + assert journey.verified_stopped_extras_panel( + stopped_panel( + {"id": ids[0], "running": False, "status": "offline"}, + {"id": ids[1], "running": True, "status": "running"}, + ), + ids, + ) is None + assert journey.verified_stopped_extras_panel( + stopped_panel( + {"id": ids[0], "running": False, "status": "offline"}, + {"id": ids[1], "running": False, "status": "error"}, + ), + ids, + ) is None + + +def test_real_package_memory_import_stops_reported_extras_before_one_successful_import( + tmp_path, monkeypatch +): + candidate = object.__new__(journey.Journey) + candidate.external_root = tmp_path / "external" + candidate.work_dir = tmp_path / "work" + candidate.fake = SimpleNamespace(transcript=[{"model": "e2e-model"}]) + candidate.report = {"checks": {}} + sid = "sess-package-test" + session_file = candidate.external_root / "temp" / "desktop_sessions" / f"{sid}.json" + imported_sid = "sess-p2-package-imported" + stopped = False + calls = [] + + def fake_request(method, path, body=None, timeout=5.0): + nonlocal stopped + calls.append((method, path)) + if path == "/session/new": + session_file.parent.mkdir(parents=True, exist_ok=True) + session_file.write_text('{"id":"sess-package-test"}\n', encoding="utf-8") + return {"sessionId": sid} + if path == "/upload": + upload = candidate.external_root / "temp" / "desktop_uploads" / "p2.png" + upload.parent.mkdir(parents=True, exist_ok=True) + upload.write_bytes(b"png") + return {"ok": True, "path": str(upload)} + if path.endswith("/prompt"): + return {"ok": True} + if path.endswith("/messages?limit=20"): + return chat_snapshot() + if path == "/services/stop-extras": + stopped = True + return {"ok": True} + if path == "/services/panel": + assert stopped is True + return stopped_panel( + {"id": "frontends/conductor.py", "running": False, "status": "offline"} + ) + if path == "/memory/import": + assert stopped is True + source = Path(body["sourceDir"]) + memory = candidate.external_root / "memory" / "p2-package-memory.txt" + responses = candidate.external_root / "temp" / "model_responses" + backup = candidate.external_root / "temp" / "memory_import_backup_test" + (backup / "memory").mkdir(parents=True) + (backup / "memory" / memory.name).write_bytes(memory.read_bytes()) + memory.write_bytes((source / "memory" / memory.name).read_bytes()) + (responses / "new.json").write_bytes( + (source / "temp" / "model_responses" / "new.json").read_bytes() + ) + imported = candidate.external_root / "temp" / "desktop_sessions" / f"{imported_sid}.json" + imported.write_bytes( + (source / "temp" / "desktop_sessions" / imported.name).read_bytes() + ) + return { + "ok": True, + "memoryCopied": 1, + "responsesCopied": 1, + "responsesSkipped": 1, + "sessionsAdded": 1, + "backupDir": str(backup), + } + raise AssertionError(f"unexpected request: {method} {path}") + + def fake_conflict(method, path, body=None, timeout=5.0): + calls.append((method, f"{path}:expected-conflict")) + memory = candidate.external_root / "memory" / "p2-package-memory.txt" + responses = candidate.external_root / "temp" / "model_responses" + assert memory.read_text(encoding="utf-8") == "before\n" + assert (responses / "shared.json").read_text(encoding="utf-8") == "destination\n" + assert not (responses / "new.json").exists() + assert session_file.read_text(encoding="utf-8") == '{"id":"sess-package-test"}\n' + return 409, {**valid_import_conflict(), "runningExtras": ["frontends/conductor.py"]} + + monkeypatch.setattr(journey, "request_json", fake_request) + monkeypatch.setattr(journey, "request_json_with_status", fake_conflict) + + candidate.run_chat_upload_memory() + + assert calls == [ + ("POST", "/session/new"), + ("POST", "/upload"), + ("POST", f"/session/{sid}/prompt"), + ("GET", f"/session/{sid}/messages?limit=20"), + ("POST", "/memory/import:expected-conflict"), + ("POST", "/services/stop-extras"), + ("GET", "/services/panel"), + ("POST", "/memory/import"), + ] + gate = candidate.report["checks"]["memoryImportMaintenanceGate"] + assert gate["runningSessions"] == [] + assert gate["runningExtras"] == ["frontends/conductor.py"] + assert candidate.report["checks"]["memoryImport"]["ok"] is True diff --git a/frontends/tests/test_tauri_security_contract.py b/frontends/tests/test_tauri_security_contract.py new file mode 100644 index 000000000..ccaa8227c --- /dev/null +++ b/frontends/tests/test_tauri_security_contract.py @@ -0,0 +1,125 @@ +"""Security contracts for the packaged Tauri shell.""" + +from __future__ import annotations + +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parent.parent.parent +TAURI_ROOT = ROOT / "frontends" / "desktop" / "src-tauri" + + +def _json(path: Path) -> dict: + return json.loads(path.read_text(encoding="utf-8")) + + +def test_production_csp_is_local_and_keeps_required_tauri_ipc_and_services(): + config = _json(TAURI_ROOT / "tauri.conf.json") + security = config["app"]["security"] + csp = security["csp"] + + assert isinstance(csp, dict) + assert csp["object-src"] == "'none'" + assert csp["base-uri"] == "'self'" + assert csp["form-action"] == "'none'" + assert csp["frame-src"] == "'none'" + assert csp["frame-ancestors"] == "'none'" + assert "'unsafe-inline'" not in csp["script-src"] + assert "'unsafe-eval'" not in csp["script-src"] + + connect_sources = set(csp["connect-src"].split()) + assert { + "'self'", + "ipc:", + "http://ipc.localhost", + "http://127.0.0.1:14168", + "ws://127.0.0.1:14168", + "http://127.0.0.1:8900", + "ws://127.0.0.1:8900", + } <= connect_sources + assert not any("*" in source for source in connect_sources) + assert not any(source.startswith("https://") for source in connect_sources) + + +def test_global_tauri_remains_only_because_compiled_compatibility_page_uses_it(): + config = _json(TAURI_ROOT / "tauri.conf.json") + fallback = (ROOT / "frontends" / "desktop" / "dist" / "fallback.html").read_text( + encoding="utf-8" + ) + + assert config["app"]["withGlobalTauri"] is True + assert "window.__TAURI__" in fallback + + +def test_main_and_setup_capabilities_are_window_scoped_without_remote_ipc_access(): + config = _json(TAURI_ROOT / "tauri.conf.json") + main = _json(TAURI_ROOT / "capabilities" / "default.json") + setup = _json(TAURI_ROOT / "capabilities" / "setup.json") + + assert config["app"]["security"]["capabilities"] == ["default", "setup"] + assert main["windows"] == ["main"] + assert setup["windows"] == ["setup"] + assert "remote" not in main + assert "remote" not in setup + + main_permissions = set(main["permissions"]) + setup_permissions = set(setup["permissions"]) + assert "core:default" not in main_permissions + assert "core:window:default" not in main_permissions + assert "core:webview:default" not in main_permissions + assert "opener:default" not in main_permissions + assert { + "core:window:allow-minimize", + "core:window:allow-toggle-maximize", + "core:window:allow-close", + "core:window:allow-start-dragging", + "opener:allow-open-url", + "opener:allow-default-urls", + } <= main_permissions + + assert { + "allow-start-bridge-with-config", + "allow-retry-bootstrap", + "allow-get-bootstrap-snapshot", + "allow-get-config", + "allow-discover-python-for-project", + "allow-pick-directory", + "allow-pick-python-interpreter", + } <= setup_permissions + assert not setup_permissions.intersection( + { + "allow-export-mykey", + "allow-pick-data-export-path", + "allow-reveal-in-file-manager", + "allow-set-ga-source", + "allow-clear-ga-source", + "opener:allow-open-url", + } + ) + + +def test_e2e_config_only_adds_test_driver_and_dynamic_loopback_connectivity(): + e2e = _json(TAURI_ROOT / "tauri.e2e.conf.json") + security = e2e["app"]["security"] + capabilities = security["capabilities"] + assert capabilities[:2] == ["default", "setup"] + capability = capabilities[2] + + assert capability["identifier"] == "e2e" + assert capability["permissions"] == ["wdio:default"] + + assert set(security["csp"]) == {"connect-src"} + connect_sources = set(security["csp"]["connect-src"].split()) + assert { + "'self'", + "ipc:", + "http://ipc.localhost", + "http://127.0.0.1:*", + "ws://127.0.0.1:*", + } <= connect_sources + assert {source for source in connect_sources if "*" in source} == { + "http://127.0.0.1:*", + "ws://127.0.0.1:*", + } + assert not any(source.startswith("https://") for source in connect_sources) From bbc410b47b366f91bdd3e27c875ae9ebc3f79297 Mon Sep 17 00:00:00 2001 From: abraxas914 Date: Sun, 23 Aug 2026 17:53:07 +0800 Subject: [PATCH 4/6] ci(desktop): add Desktop 2.0 quality gates --- .github/workflows/desktop-ci.yml | 163 +++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 .github/workflows/desktop-ci.yml diff --git a/.github/workflows/desktop-ci.yml b/.github/workflows/desktop-ci.yml new file mode 100644 index 000000000..0faca7b4d --- /dev/null +++ b/.github/workflows/desktop-ci.yml @@ -0,0 +1,163 @@ +name: Desktop 2.0 Quality Gates + +on: + push: + branches: [main] + paths: + - "agentmain.py" + - "llmcore.py" + - "llmcore/**" + - "frontends/conductor.py" + - "frontends/cost_tracker.py" + - "frontends/data_backup.py" + - "frontends/desktop_bridge.py" + - "frontends/desktop_settings.py" + - "frontends/ga_contract_probe.py" + - "frontends/tests/**" + - "frontends/desktop/**" + - ".gitattributes" + - ".github/workflows/desktop-ci.yml" + - ".github/workflows/desktop-release-package.yml" + pull_request: + branches: [main] + paths: + - "agentmain.py" + - "llmcore.py" + - "llmcore/**" + - "frontends/conductor.py" + - "frontends/cost_tracker.py" + - "frontends/data_backup.py" + - "frontends/desktop_bridge.py" + - "frontends/desktop_settings.py" + - "frontends/ga_contract_probe.py" + - "frontends/tests/**" + - "frontends/desktop/**" + - ".gitattributes" + - ".github/workflows/desktop-ci.yml" + - ".github/workflows/desktop-release-package.yml" + workflow_dispatch: + +concurrency: + group: desktop-v2-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +env: + PYTHONUNBUFFERED: "1" + CARGO_TERM_COLOR: always + +jobs: + distribution-contract: + name: Compiled distribution contract + runs-on: ubuntu-24.04 + timeout-minutes: 10 + steps: + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 + with: + node-version: 22 + - name: Verify tracked React distribution and package metadata + working-directory: frontends/desktop + run: npm run test:dist + - name: Verify packaging helper syntax + run: | + bash -n frontends/desktop/packaging/scripts/macos/install_macos.sh + bash -n frontends/desktop/scripts/post-dmg.sh + python3 -m py_compile frontends/desktop/scripts/gen_ds_store.py + - name: Reject source and local-development leakage + run: | + test -z "$(git ls-files -- \ + 'frontends/desktop/src/**' \ + 'frontends/desktop/public/**' \ + 'frontends/desktop/vite.config.*' \ + 'frontends/desktop/tsconfig*.json' \ + '.agents/**' '.codex/**' '.trellis/**')" + test -z "$(find frontends/desktop/dist -type f \ + \( -name '*.map' -o -name '*.ts' -o -name '*.tsx' -o -name '*.jsx' \) -print)" + ! git grep -nE '^(<<<<<<<|=======|>>>>>>>)' -- .github frontends + + python-contracts: + name: Python ${{ matrix.python-version }} + needs: distribution-contract + runs-on: ubuntu-24.04 + timeout-minutes: 15 + strategy: + fail-fast: false + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13"] + steps: + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + with: + python-version: ${{ matrix.python-version }} + cache: pip + cache-dependency-path: frontends/desktop/e2e/requirements.txt + - name: Install Desktop test dependencies + run: python -m pip install -r frontends/desktop/e2e/requirements.txt + - name: Run bridge, conductor, cost and backup contracts + run: python -m pytest frontends/tests -q + + rust-contracts: + name: Rust ${{ matrix.feature.name }} + needs: distribution-contract + runs-on: ubuntu-24.04 + timeout-minutes: 35 + strategy: + fail-fast: false + matrix: + feature: + - name: production + args: "" + - name: e2e + args: "--features e2e" + steps: + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + - name: Install Tauri system dependencies + run: >- + sudo apt-get update && sudo apt-get install -y + libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf + - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable action snapshot + with: + toolchain: "1.95.0" + components: clippy, rustfmt + - uses: Swatinem/rust-cache@63fed3e2fecf6f7b51dc6f043341b79ef82a9ae7 # v2.9.2 + with: + workspaces: frontends/desktop/src-tauri -> target + - name: Verify Rust formatting + run: cargo fmt --manifest-path frontends/desktop/src-tauri/Cargo.toml --check + - name: Lint Tauri shell + run: cargo clippy --manifest-path frontends/desktop/src-tauri/Cargo.toml --all-targets ${{ matrix.feature.args }} -- -D warnings + - name: Run Tauri shell contracts + run: cargo test --manifest-path frontends/desktop/src-tauri/Cargo.toml ${{ matrix.feature.args }} + + linux-tauri-build: + name: Linux Tauri build smoke + needs: [distribution-contract, python-contracts, rust-contracts] + runs-on: ubuntu-24.04 + timeout-minutes: 45 + steps: + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + - name: Install Tauri system dependencies + run: >- + sudo apt-get update && sudo apt-get install -y + libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf + - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 + with: + node-version: 22 + - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable action snapshot + with: + toolchain: "1.95.0" + - uses: Swatinem/rust-cache@63fed3e2fecf6f7b51dc6f043341b79ef82a9ae7 # v2.9.2 + with: + workspaces: frontends/desktop/src-tauri -> target + - name: Install Tauri CLI only + working-directory: frontends/desktop + run: | + npm install --package-lock=false + node -e "const v=require('./node_modules/@tauri-apps/cli/package.json').version; if(v!=='2.11.4') throw new Error('unexpected Tauri CLI '+v)" + test ! -e package-lock.json + - name: Build tracked Desktop 2.0 distribution into the native shell + working-directory: frontends/desktop + run: npm run tauri build -- --no-bundle From dbdc63c368d143fbefedfa1c82ffe4b01e0694d6 Mon Sep 17 00:00:00 2001 From: abraxas914 Date: Sun, 23 Aug 2026 17:57:23 +0800 Subject: [PATCH 5/6] docs(desktop): document source provenance and runtime boundaries --- frontends/desktop/DESIGN.md | 96 +++++++++++++++++++++ frontends/desktop/packaging/README.md | 117 +++++++++++++++++++++----- 2 files changed, 194 insertions(+), 19 deletions(-) create mode 100644 frontends/desktop/DESIGN.md diff --git a/frontends/desktop/DESIGN.md b/frontends/desktop/DESIGN.md new file mode 100644 index 000000000..9bd6a1509 --- /dev/null +++ b/frontends/desktop/DESIGN.md @@ -0,0 +1,96 @@ +# GenericAgent Desktop 2.0 integration boundary + +GenericAgent Desktop 2.0 is a packaged Tauri desktop application with a generated React renderer and +Desktop-specific Python services. The React source is intentionally developed outside this upstream tree; +the generated distribution and all runtime interfaces required to execute it are tracked here. + +## Renderer ownership + +- `frontends/desktop/dist/**` contains the generated Desktop 2.0 HTML, JavaScript, CSS, fonts, and images. +- `frontends/desktop/static/**` is the independent Desktop v1 implementation and remains available unchanged. +- Tauri packages `dist/**`; it does not compile React during an upstream build. +- The public React source, issue tracker, and contribution home is + . +- The exact fork commit and generated-file content manifest are recorded in + `dist/build-provenance.json`. + +Generated files must not be edited by hand. Renderer changes are made and tested in the fork, rebuilt from an +accepted fork `main` commit, and submitted upstream as a refreshed `dist/**` tree with matching provenance. +The manifest identifies the submitted bytes; it is not a claim that later builds are bit-for-bit reproducible. + +The production Tauri configuration loads only the tracked asset origin and applies an explicit Content Security +Policy. React source tooling is absent from the upstream package path, while WebDriver permission remains isolated +to `tauri.e2e.conf.json` and is not granted by the production configuration. + +## Desktop runtime ownership + +Desktop 2.0 uses these repository-owned integration layers: + +- `frontends/desktop_bridge.py`: local HTTP/WebSocket API, model/session/upload/data routes, service control, + identity, and Desktop diagnostics. +- `frontends/conductor.py`: Desktop collaboration and model-routing integration. +- `frontends/cost_tracker.py`: Desktop usage and cost ledger. +- `frontends/data_backup.py`: validated Desktop data export, inspection, and import/merge behavior. +- `frontends/desktop_settings.py`: locked, atomic read/modify/write updates for shared Desktop preferences. +- `frontends/desktop/src-tauri/**`: native bootstrap, permissions, file pickers, runtime/source switching, + process/port recovery, window behavior, and package resource resolution. + +The package-owned bridge remains the executable service boundary. `GA_ROOT` can point it at a compatible +external GenericAgent repository, but does not replace the package-owned bridge or Tauri shell. + +Desktop data import first backs up the complete destination `memory/**` tree, then applies source-wins memory +files. Model responses remain add-only, and Desktop sessions are de-duplicated by session ID. Activation is staged +and rolled back on failure. Import is rejected while a managed session or Desktop extra has unfinished work; users +must also stop any independent TUI, CLI, or automation process before importing because those external processes +are outside the bridge's maintenance gate. The persistent cost ledger is initialized by the Desktop bridge only; +existing TUI and conductor processes retain their previous in-memory accounting hot path. + +Browser-origin requests are accepted only from the production Tauri origins, the fixed development origin, the +explicit E2E origin, or the bridge's own same origin. Native clients without an Origin remain supported, while +cross-site, null, lookalike, wrong-port, preflight, and WebSocket requests are rejected before route handling. +Backup exports cannot be written into any managed data or HTTP-readable directory. + +Managed-service state is based on the bridge-owned live child process, not merely a listener on the configured +port. A foreign conductor on production port `8900` is reported as an external port conflict and is never stopped +or counted as an owned running extra. The alternate conductor port is available only to the isolated package E2E +journey; production renderer and CSP contracts remain fixed to `8900`. + +On macOS, the package runtime uses a stable writable root and is refreshed through a package/build/source marker +with staged atomic activation. A previously shipped versioned runtime is migrated into that stable root. User +configuration, memory, responses, sessions, and token ledger data are preserved; a failed migration or activation +restores the previous runtime and marker. Matching markers keep the hot-start copy untouched. + +## Core runtime boundary + +Desktop 2.0 does not own or modify GenericAgent's Agent/LLM/Harness business runtime. In particular, the +integration does not change `agentmain.py`, LLM execution, Harness/Agent execution, inference, tool-calling, +or memory-scheduling semantics. Desktop bridge and conductor changes translate Desktop requests onto those +existing core contracts. + +## Version and release contract + +Desktop package metadata is `0.2.0` across npm, Cargo, Tauri, and generated provenance. Upstream packages consume +the tracked `dist/**` tree, so an upstream maintainer can build official Windows, Linux, and macOS artifacts +without the React source. A `desktop-portable-*` tag starts three read-only platform builders. One separate +publisher receives write permission only after all three succeed, validates the six expected files and checksums, +creates an invisible draft with all assets, and then exposes that single entry as a prerelease. Manual +`workflow_dispatch` runs produce candidate artifacts only and skip the publisher. + +The Linux builder runs on Ubuntu 22.04, isolates Rust target/bin caches from newer runner ABIs, and rejects any +ELF requiring a GLIBC version newer than 2.35. Windows remains unsigned and documents SmartScreen plus checksum +verification; macOS remains ad-hoc signed and unnotarized. + +The renderer still uses the existing local loopback bridge contract. This integration neither treats that inherited +platform requirement as a new release blocker nor claims to have changed operating-system loopback policy. + +## Validation layers + +- Compiled distribution contract: required entries, asset references, source-map/source leakage, E2E markers, + version consistency, exact provenance manifest, and the `dist` package entry. +- Python contracts: bridge, conductor, model routing, sessions, uploads, cost ledger, `GA_ROOT`, and data backup. +- Rust contracts: formatting, clippy, production and E2E feature tests, and + path/identity/port/diagnostic/bootstrap behavior. +- Native package contract: Linux Tauri build smoke plus the platform release workflow. + +The richer React unit/browser/native E2E suites remain in the fork and run before its accepted `main` SHA is +used to refresh the generated upstream distribution. diff --git a/frontends/desktop/packaging/README.md b/frontends/desktop/packaging/README.md index 89e2a038b..0f0125592 100644 --- a/frontends/desktop/packaging/README.md +++ b/frontends/desktop/packaging/README.md @@ -1,20 +1,37 @@ -# packaging +# Desktop packaging -桌面端发布相关材料。本目录的内容**不会**整体打进发布包——CI -(`.github/workflows/desktop-release-package.yml`)只从这里挑选 `scripts/` 下的 -安装/卸载脚本拷进各平台的发布产物,其余文件对构建打包过程是只读参考。 +This directory contains the scripts and locked Python inputs used to assemble GenericAgent Desktop packages. +The directory is not copied wholesale into a release; the workflow selects only the platform scripts and +requirements files required by each package. -## 目录结构 +## Submitted renderer boundary -``` +Official upstream package jobs consume the tracked `frontends/desktop/dist/**` renderer directly. They install +only the minimal submitted Tauri CLI manifest and do not run Vite, TypeScript, React tests, or any other renderer +source command. Tauri embeds `dist/**` in the native application. The portable `runtime/app` copy deliberately +excludes `dist/**` so the same renderer is not duplicated as loose runtime data. + +The React source, issue tracker, and contribution home is +. The exact accepted fork commit and generated content manifest are +recorded in `dist/build-provenance.json`. `frontends/desktop/static/**` remains the independent Desktop v1 and is +unchanged by Desktop 2.0 packaging. + +The Semi Design MIT text is tracked as `dist/THIRD_PARTY_NOTICES.txt`. Root attributes force the source notice and +compiled notice to LF on every platform, and all three package builders verify the locked notice SHA-256 before +building. + +## Inputs + +```text frontends/desktop/packaging/ -├── README.md # 本说明 -├── CHECKLIST.md # 发布前功能测试清单(测试协调用,不参与打包) -├── TODO.md # 各平台测试分工与计划(测试协调用,不参与打包) -└── scripts/ # ← 唯一被 CI 消费的内容 +├── README.md +├── dmg-build-requirements.txt +├── python-runtime-requirements.txt +└── scripts/ + ├── merge_desktop_settings.py ├── windows/ - │ ├── install_windows.ps1 # 环境准备脚本 - │ ├── uninstall.bat # 卸载入口(向用户确认后调用 ps1) + │ ├── install_windows.ps1 + │ ├── uninstall.bat │ └── uninstall_windows.ps1 ├── linux/ │ ├── install_linux.sh @@ -24,12 +41,74 @@ frontends/desktop/packaging/ └── uninstall.command ``` -## CI 如何使用这些脚本 +- Node is fixed at `22.23.2`; the compiled-only jobs install exactly `@tauri-apps/cli` `2.11.4` with + `npm install --package-lock=false`, assert that no source lockfile was created, and never invoke Vite. Rust is + fixed at `1.95.0` and crates are locked by `Cargo.lock`. +- Root `.gitattributes` pins both the source `public/THIRD_PARTY_NOTICES.txt` path and the delivered + `dist/THIRD_PARTY_NOTICES.txt` path to LF; the source file itself stays outside this compiled-only PR. Each of + the three builders runs the cross-platform compiled-distribution contract immediately before Tauri embeds the + tracked `dist`, locking the notice SHA-256 to + `2acf865e87e59090121369aac0575467067fdd7999923a70d785a46ceae3330f` and failing on any byte drift. +- python-build-standalone is fixed at release `20260814`, CPython `3.12.14`, an explicit architecture, and an + archive SHA-256 on each platform. +- The macOS builder runs on the Apple-silicon `macos-15` host and uses host CPython `3.12.10` only for the + hash-locked DMG layout tools. That host interpreter is separate from the embedded `3.12.14` runtime. +- Windows converts `RUNNER_TEMP` with `cygpath -u` before passing its archive path to POSIX tools. +- Linux builds on Ubuntu 22.04, uses a dedicated glibc-2.35 Rust cache prefix with target/bin caching disabled, + and scans every packaged ELF to reject a maximum GLIBC requirement above 2.35. +- Runtime direct and transitive dependencies use exact versions in `python-runtime-requirements.txt`; downloads + require binary wheels. The DMG layout requirements use exact versions and wheel hashes. +- Preparation disables Python bytecode writes and removes `__pycache__`, `.pyc`, and `.pyo` files across the + complete bundled runtime without removing vendored Python packages. +- Checkout, Node/Python setup, artifact upload/download, Rust toolchain, and Rust cache actions use full commit + SHA pins and disable persisted checkout credentials. + +These controls do not make the packages bit-for-bit reproducible. Runner images, Ubuntu packages, the Windows +SDK/UCRT input, platform wheels, and native packaging metadata can change or contain timestamps. Candidate +artifact SHA-256 values and real-package journeys remain the evidence for a particular build. + +## Candidate artifacts and publication + +Manual `workflow_dispatch` runs build the selected platform or all three platforms as downloadable Actions +artifacts. They never create or edit a GitHub Release. + +A maintainer-created `desktop-portable-*` tag starts this publication graph: + +```text +Windows builder (contents: read) ─┐ +Linux builder (contents: read) ─┼─ verified Actions artifacts ─┐ +macOS builder (contents: read) ─┘ │ + ▼ + publisher (contents: write) + validate six files/checksums + create one invisible draft + verify uploaded asset set + expose one prerelease +``` + +The three builders do not receive a write token and do not call the GitHub Release API. The publisher runs only +for a matching tag push after all three builders succeed; it does not check out source or run package tooling. +It refuses to overwrite an existing Release for the tag. + +The prerelease contains exactly: + +- `GenericAgent-Desktop-Windows-Portable.zip` +- `SHA256SUMS-windows.txt` +- `GenericAgent-Desktop-Linux-Portable.tar.gz` +- `SHA256SUMS-linux.txt` +- `GenericAgent-Desktop-macOS-aarch64.dmg` +- `GenericAgent-Desktop-macOS-aarch64.dmg.sha256` + +The macOS application is ad-hoc signed only. It is not Developer ID signed or notarized, and the published notes +retain the documented context-menu / Privacy & Security opening path. -`desktop-release-package.yml` 在打各平台 portable 包时,把对应平台的脚本 -`cp` 进发布目录(例如 Windows 包里放 `install_windows.ps1` / -`uninstall.bat` / `uninstall_windows.ps1`)。**修改安装/卸载行为只需改 -`scripts/` 下的文件,不需要动 workflow。** +## Validation -> 说明:实际的桌面壳二进制(`GenericAgent.exe` / `.AppImage` / `.app`)由 CI -> 构建生成并发布到 GitHub Release,不在本仓库内提交,也不在本目录占位。 +- `npm run test:dist` verifies required compiled entries, references, source leakage, dead assets, the notice hash, + version/CSP/E2E isolation, source provenance, and the atomic release contract. +- `python -m pytest frontends/tests` verifies Desktop bridge, conductor, model/session/upload behavior, the + Desktop-only cost ledger, transactional data import, package-evidence parsing, owned service/port behavior, + `GA_ROOT`, and Tauri security contracts. +- Rust formatting, clippy, production/E2E tests, and a Tauri `--no-bundle` build validate the native shell against + the tracked renderer. +- Shell, Python, PowerShell, YAML, action pinning, boundary diff, and conflict checks run before delivery. From dd99c5c3acf61a4fa2a29579dcb22831408873bd Mon Sep 17 00:00:00 2001 From: abraxas914 Date: Mon, 24 Aug 2026 01:07:43 +0800 Subject: [PATCH 6/6] refactor(desktop): streamline release qualification tooling --- .github/workflows/desktop-ci.yml | 11 +++- .github/workflows/desktop-release-package.yml | 6 +- frontends/desktop/DESIGN.md | 4 ++ frontends/desktop/e2e/linux/README.md | 22 ------- frontends/desktop/packaging/README.md | 6 +- .../README.md | 19 +++--- .../release_qualification/linux/README.md | 23 +++++++ .../linux/run_linux_release_qualification.sh} | 4 +- .../macos/README.md | 17 ++--- .../macos/run_macos_release_qualification.sh} | 6 +- .../run_release_qualification.py} | 10 +-- .../verify_release_evidence.py} | 15 +---- .../Invoke-WindowsReleaseQualification.ps1} | 11 ++-- .../windows/README.md | 15 +++-- .../fixtures/foreign-port-listener.ps1 | 0 .../desktop/scripts/verify-compiled-dist.mjs | 10 ++- .../{desktop/e2e => tests}/requirements.txt | 0 ...dence.py => test_release_qualification.py} | 64 +++++++++++++++++-- 18 files changed, 145 insertions(+), 98 deletions(-) delete mode 100644 frontends/desktop/e2e/linux/README.md rename frontends/desktop/{e2e/package => release_qualification}/README.md (53%) create mode 100644 frontends/desktop/release_qualification/linux/README.md rename frontends/desktop/{e2e/linux/Invoke-LinuxUserJourney.sh => release_qualification/linux/run_linux_release_qualification.sh} (95%) mode change 100644 => 100755 rename frontends/desktop/{e2e => release_qualification}/macos/README.md (56%) rename frontends/desktop/{e2e/macos/Invoke-macOSUserJourney.sh => release_qualification/macos/run_macos_release_qualification.sh} (93%) mode change 100644 => 100755 rename frontends/desktop/{e2e/package/real_package_journey.py => release_qualification/run_release_qualification.py} (99%) rename frontends/desktop/{e2e/package/verify_candidate_evidence.py => release_qualification/verify_release_evidence.py} (90%) rename frontends/desktop/{e2e/windows/Invoke-WindowsUserJourney.ps1 => release_qualification/windows/Invoke-WindowsReleaseQualification.ps1} (98%) rename frontends/desktop/{e2e => release_qualification}/windows/README.md (80%) rename frontends/desktop/{e2e => release_qualification}/windows/fixtures/foreign-port-listener.ps1 (100%) rename frontends/{desktop/e2e => tests}/requirements.txt (100%) rename frontends/tests/{test_package_evidence.py => test_release_qualification.py} (91%) diff --git a/.github/workflows/desktop-ci.yml b/.github/workflows/desktop-ci.yml index 0faca7b4d..9706d3f4a 100644 --- a/.github/workflows/desktop-ci.yml +++ b/.github/workflows/desktop-ci.yml @@ -93,11 +93,16 @@ jobs: with: python-version: ${{ matrix.python-version }} cache: pip - cache-dependency-path: frontends/desktop/e2e/requirements.txt + cache-dependency-path: frontends/tests/requirements.txt - name: Install Desktop test dependencies - run: python -m pip install -r frontends/desktop/e2e/requirements.txt + run: python -m pip install -r frontends/tests/requirements.txt - name: Run bridge, conductor, cost and backup contracts - run: python -m pytest frontends/tests -q + run: >- + python -m pytest frontends/tests -q + --ignore=frontends/tests/test_release_qualification.py + - name: Run release qualification tooling contracts + if: matrix.python-version == '3.12' + run: python -m pytest frontends/tests/test_release_qualification.py -q rust-contracts: name: Rust ${{ matrix.feature.name }} diff --git a/.github/workflows/desktop-release-package.yml b/.github/workflows/desktop-release-package.yml index 54a714df4..90dfdbe49 100644 --- a/.github/workflows/desktop-release-package.yml +++ b/.github/workflows/desktop-release-package.yml @@ -154,7 +154,7 @@ jobs: --exclude='./frontends/desktop/src' \ --exclude='./frontends/desktop/public' \ --exclude='./frontends/desktop/scripts' \ - --exclude='./frontends/desktop/e2e' \ + --exclude='./frontends/desktop/release_qualification' \ --exclude='./frontends/desktop/tests' \ --exclude='./frontends/desktop/testing' \ --exclude='./frontends/desktop/spec' \ @@ -386,7 +386,7 @@ jobs: --exclude='./frontends/desktop/src' \ --exclude='./frontends/desktop/public' \ --exclude='./frontends/desktop/scripts' \ - --exclude='./frontends/desktop/e2e' \ + --exclude='./frontends/desktop/release_qualification' \ --exclude='./frontends/desktop/tests' \ --exclude='./frontends/desktop/testing' \ --exclude='./frontends/desktop/spec' \ @@ -667,7 +667,7 @@ jobs: --exclude='frontends/desktop/src' \ --exclude='frontends/desktop/public' \ --exclude='frontends/desktop/scripts' \ - --exclude='frontends/desktop/e2e' \ + --exclude='frontends/desktop/release_qualification' \ --exclude='frontends/desktop/tests' \ --exclude='frontends/desktop/testing' \ --exclude='frontends/desktop/spec' \ diff --git a/frontends/desktop/DESIGN.md b/frontends/desktop/DESIGN.md index 9bd6a1509..8be94dc64 100644 --- a/frontends/desktop/DESIGN.md +++ b/frontends/desktop/DESIGN.md @@ -92,5 +92,9 @@ platform requirement as a new release blocker nor claims to have changed operati path/identity/port/diagnostic/bootstrap behavior. - Native package contract: Linux Tauri build smoke plus the platform release workflow. +Optional platform release qualification lives under `frontends/desktop/release_qualification/**`. +Its automated evidence gate validates package behavior and cleanup; screenshots and manual visual checklists +remain separate release-owner review material rather than CI pass/fail inputs. + The richer React unit/browser/native E2E suites remain in the fork and run before its accepted `main` SHA is used to refresh the generated upstream distribution. diff --git a/frontends/desktop/e2e/linux/README.md b/frontends/desktop/e2e/linux/README.md deleted file mode 100644 index 8581f5b00..000000000 --- a/frontends/desktop/e2e/linux/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Ubuntu 24.04 release-package journey - -Run this on a real Ubuntu 24.04 x64 desktop in a dedicated test account. FUSE and a screenshot -tool (`gnome-screenshot`, `scrot`, or ImageMagick `import`) must be available. - -```bash -frontends/desktop/e2e/linux/Invoke-LinuxUserJourney.sh \ - --artifact /path/GenericAgent-Desktop-Linux-Portable.tar.gz \ - --expected-commit \ - --keep-work-dir -``` - -The wrapper verifies/extracts the tar, preserves the AppImage launch path, and runs the shared -production journey. The journey covers package shape, embedded Python, first launch, warm -restart, package-owned bridge plus external `GA_ROOT`, deterministic chat, upload, memory import, -foreign-port protection, recovery after release, relocation into a path containing spaces and -Chinese characters, stale-override fallback, optional P2P degradation, screenshots, and cleanup. - -After automation passes, edit `report/real-package-report.json` and mark the Linux manual items -`pass`: executable bit and desktop launcher, window dragging/close behavior, retry button after -port release, native directory picker, and visual/loading checks. P2 evidence is incomplete while -any manual item remains `pending`. diff --git a/frontends/desktop/packaging/README.md b/frontends/desktop/packaging/README.md index 0f0125592..f68c0569a 100644 --- a/frontends/desktop/packaging/README.md +++ b/frontends/desktop/packaging/README.md @@ -65,7 +65,7 @@ frontends/desktop/packaging/ These controls do not make the packages bit-for-bit reproducible. Runner images, Ubuntu packages, the Windows SDK/UCRT input, platform wheels, and native packaging metadata can change or contain timestamps. Candidate -artifact SHA-256 values and real-package journeys remain the evidence for a particular build. +artifact SHA-256 values and release-qualification reports remain the evidence for a particular build. ## Candidate artifacts and publication @@ -107,8 +107,8 @@ retain the documented context-menu / Privacy & Security opening path. - `npm run test:dist` verifies required compiled entries, references, source leakage, dead assets, the notice hash, version/CSP/E2E isolation, source provenance, and the atomic release contract. - `python -m pytest frontends/tests` verifies Desktop bridge, conductor, model/session/upload behavior, the - Desktop-only cost ledger, transactional data import, package-evidence parsing, owned service/port behavior, - `GA_ROOT`, and Tauri security contracts. + Desktop-only cost ledger, transactional data import, release-qualification tooling, owned service/port + behavior, `GA_ROOT`, and Tauri security contracts. - Rust formatting, clippy, production/E2E tests, and a Tauri `--no-bundle` build validate the native shell against the tracked renderer. - Shell, Python, PowerShell, YAML, action pinning, boundary diff, and conflict checks run before delivery. diff --git a/frontends/desktop/e2e/package/README.md b/frontends/desktop/release_qualification/README.md similarity index 53% rename from frontends/desktop/e2e/package/README.md rename to frontends/desktop/release_qualification/README.md index 79c30f2e2..c2e253cb1 100644 --- a/frontends/desktop/e2e/package/README.md +++ b/frontends/desktop/release_qualification/README.md @@ -1,19 +1,20 @@ -# P2 release-package evidence gate +# Desktop release qualification -`real_package_journey.py` is the common L5 runner. Platform wrappers install or extract one -artifact produced from a candidate commit and invoke this runner against the production binary. +`run_release_qualification.py` is the common production-package runner. Platform wrappers install +or extract one artifact produced from a candidate commit and invoke it against the production binary. It temporarily uses the real per-user settings path, restores it byte-for-byte, and therefore must run in a dedicated Windows/Linux/macOS test account. Every platform report records the candidate commit, artifact SHA-256, OS/architecture, bootstrap snapshots, bridge identity/PIDs, package paths before and after relocation, screenshots, redacted -fake-model transcript, data results, cleanup status, and the short manual checklist. Automated -success does not imply P2 completion: testers must change every manual checklist value to `pass`. +fake-model transcript, data results, cleanup status, and a short manual checklist. Screenshots and +manual checklist values are supporting material for the release owner; they do not determine the +automated evidence gate result. After all three reports and the Windows native retry report are complete, combine them: ```bash -python3 frontends/desktop/e2e/package/verify_candidate_evidence.py \ +python3 frontends/desktop/release_qualification/verify_release_evidence.py \ --expected-commit \ --windows \ --linux \ @@ -23,6 +24,6 @@ python3 frontends/desktop/e2e/package/verify_candidate_evidence.py \ ``` The verifier fails on a commit mismatch, missing artifact digest, failed automated scenario, -incomplete bootstrap evidence, missing macOS app immutability proof, unfinished manual checklist, -or unclean final process/port state. The manifest is evidence for the candidate SHA; it is not -intended to be committed to the repository. +incomplete bootstrap evidence, missing macOS app immutability proof, or unclean final process/port +state. The release owner still reviews the screenshots and platform checklists separately before +publishing. The manifest is evidence for the candidate SHA; it is not committed to the repository. diff --git a/frontends/desktop/release_qualification/linux/README.md b/frontends/desktop/release_qualification/linux/README.md new file mode 100644 index 000000000..5526db46e --- /dev/null +++ b/frontends/desktop/release_qualification/linux/README.md @@ -0,0 +1,23 @@ +# Ubuntu 24.04 release qualification + +Run this on a real Ubuntu 24.04 x64 desktop in a dedicated test account. FUSE must be available. +A screenshot tool (`gnome-screenshot`, `scrot`, or ImageMagick `import`) supplies optional review +evidence when present. + +```bash +frontends/desktop/release_qualification/linux/run_linux_release_qualification.sh \ + --artifact /path/GenericAgent-Desktop-Linux-Portable.tar.gz \ + --expected-commit \ + --keep-work-dir +``` + +The wrapper verifies/extracts the tar, preserves the AppImage launch path, and runs the shared +production qualification. It covers package shape, embedded Python, first launch, warm +restart, package-owned bridge plus external `GA_ROOT`, deterministic chat, upload, memory import, +foreign-port protection, recovery after release, relocation into a path containing spaces and +Chinese characters, stale-override fallback, optional P2P degradation, screenshots, and cleanup. + +After automation passes, review the Linux manual items: executable bit and desktop launcher, +window dragging/close behavior, retry button after port release, native directory picker, and +visual/loading behavior. The report retains these checklist values for notes, but the automated +evidence verifier does not require them to be edited to `pass`. diff --git a/frontends/desktop/e2e/linux/Invoke-LinuxUserJourney.sh b/frontends/desktop/release_qualification/linux/run_linux_release_qualification.sh old mode 100644 new mode 100755 similarity index 95% rename from frontends/desktop/e2e/linux/Invoke-LinuxUserJourney.sh rename to frontends/desktop/release_qualification/linux/run_linux_release_qualification.sh index b29e20bd4..b9e162dc5 --- a/frontends/desktop/e2e/linux/Invoke-LinuxUserJourney.sh +++ b/frontends/desktop/release_qualification/linux/run_linux_release_qualification.sh @@ -23,9 +23,9 @@ done artifact="$(realpath "$artifact")" [[ -f "$artifact" ]] || { echo "Artifact not found: $artifact" >&2; exit 1; } script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -driver="$script_dir/../package/real_package_journey.py" +driver="$script_dir/../run_release_qualification.py" if [[ -z "$work_dir" ]]; then - work_dir="$(mktemp -d -t ga-linux-package-e2e.XXXXXX)" + work_dir="$(mktemp -d -t ga-linux-release-qualification.XXXXXX)" else mkdir -p "$work_dir" work_dir="$(realpath "$work_dir")" diff --git a/frontends/desktop/e2e/macos/README.md b/frontends/desktop/release_qualification/macos/README.md similarity index 56% rename from frontends/desktop/e2e/macos/README.md rename to frontends/desktop/release_qualification/macos/README.md index b43c03856..e002613ad 100644 --- a/frontends/desktop/e2e/macos/README.md +++ b/frontends/desktop/release_qualification/macos/README.md @@ -1,11 +1,11 @@ -# macOS 15 DMG release-package journey +# macOS 15 DMG release qualification Run this on a real macOS 15 machine in a dedicated test account. The wrapper mounts the DMG, -copies its app into `/Applications` under a collision-safe E2E name, launches the production +copies its app into `/Applications` under a collision-safe qualification name, launches the production binary, and later moves that exact app to a path containing spaces and Chinese characters. ```bash -frontends/desktop/e2e/macos/Invoke-macOSUserJourney.sh \ +frontends/desktop/release_qualification/macos/run_macos_release_qualification.sh \ --artifact /path/GenericAgent-Desktop-macOS-aarch64.dmg \ --expected-commit \ --keep-work-dir @@ -15,13 +15,14 @@ The release workflow builds this artifact on the explicit macOS 15 arm64 runner `aarch64`; it is not an Intel/universal binary. The app is ad-hoc signed only, not Developer ID signed or notarized. -In addition to the shared chat/data/port/relocation checks, this journey hard-fails if the DMG +In addition to the shared chat/data/port/relocation checks, this qualification hard-fails if the DMG does not contain the build-time `.prepared` marker or if any file inside the `.app` changes from first launch through restart and relocation. It verifies the package bridge remains inside the app while `GA_ROOT` points at an external core, then verifies a deleted override falls back to the stable writable runtime at `~/Library/Application Support/GenericAgent/runtime/app`. -After automation, mark the manual report items `pass`: Gatekeeper/open-anyway, traffic lights, -focus, retry button after port release, native directory picker, and visual/loading checks. The -wrapper restores the settings file exactly and removes its temporary `/Applications` copy; run it -only in a dedicated account because the normal Application Support runtime may be created. +After automation, review Gatekeeper/open-anyway, traffic lights, focus, retry behavior, the native +directory picker, and visual/loading behavior. The report keeps those checklist values as supporting +notes, but the automated verifier does not require them to be edited to `pass`. The wrapper restores +the settings file exactly and removes its temporary `/Applications` copy; run it only in a dedicated +account because the normal Application Support runtime may be created. diff --git a/frontends/desktop/e2e/macos/Invoke-macOSUserJourney.sh b/frontends/desktop/release_qualification/macos/run_macos_release_qualification.sh old mode 100644 new mode 100755 similarity index 93% rename from frontends/desktop/e2e/macos/Invoke-macOSUserJourney.sh rename to frontends/desktop/release_qualification/macos/run_macos_release_qualification.sh index 231cd00fd..594bcdaf5 --- a/frontends/desktop/e2e/macos/Invoke-macOSUserJourney.sh +++ b/frontends/desktop/release_qualification/macos/run_macos_release_qualification.sh @@ -23,9 +23,9 @@ done artifact="$(cd "$(dirname "$artifact")" && pwd)/$(basename "$artifact")" [[ -f "$artifact" ]] || { echo "Artifact not found: $artifact" >&2; exit 1; } script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -driver="$script_dir/../package/real_package_journey.py" +driver="$script_dir/../run_release_qualification.py" if [[ -z "$work_dir" ]]; then - work_dir="$(mktemp -d -t ga-macos-package-e2e.XXXXXX)" + work_dir="$(mktemp -d -t ga-macos-release-qualification.XXXXXX)" else mkdir -p "$work_dir" work_dir="$(cd "$work_dir" && pwd)" @@ -33,7 +33,7 @@ fi report_dir="$work_dir/report" driver_work="$work_dir/driver-work" mount_point="$work_dir/dmg" -install_app="/Applications/GenericAgent P2 E2E $$.app" +install_app="/Applications/GenericAgent Release Qualification $$.app" mounted=0 mkdir -p "$report_dir" "$driver_work" "$mount_point" diff --git a/frontends/desktop/e2e/package/real_package_journey.py b/frontends/desktop/release_qualification/run_release_qualification.py similarity index 99% rename from frontends/desktop/e2e/package/real_package_journey.py rename to frontends/desktop/release_qualification/run_release_qualification.py index 828350f04..2ee319960 100644 --- a/frontends/desktop/e2e/package/real_package_journey.py +++ b/frontends/desktop/release_qualification/run_release_qualification.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Cross-platform release-package journey for GenericAgent Desktop 2.0. +"""Cross-platform release qualification for GenericAgent Desktop 2.0. This runner deliberately exercises a production binary and its packaged runtime. It does not import product code from the checkout and it does not require network access. The @@ -702,7 +702,7 @@ def assistant_reply() -> str | None: source_sessions / f"{imported_sid}.json", { "id": imported_sid, - "title": "P2 imported", + "title": "Qualification imported", "messages": [], "msg_seq": 0, "cwd": str(source), @@ -981,9 +981,6 @@ def run(self) -> None: raise JourneyFailure(f"first launch modified the signed .app: {changed[:20]}") self.report["checks"]["macAppImmutable"] = True - if not self.args.screenshots_optional and len(self.screenshots) < 2: - raise JourneyFailure("real-package journey did not capture ready and failure screenshots") - def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser() @@ -999,7 +996,6 @@ def parse_args() -> argparse.Namespace: parser.add_argument("--start-timeout", type=float, default=300) parser.add_argument("--allow-user-settings-mutation", action="store_true") parser.add_argument("--allow-external-package", action="store_true") - parser.add_argument("--screenshots-optional", action="store_true") return parser.parse_args() @@ -1013,7 +1009,7 @@ def main() -> int: return 0 except BaseException as error: # retain evidence for assertion and unexpected failures journey.report["failures"].append(f"{type(error).__name__}: {error}") - print(f"real package journey failed: {error}", file=sys.stderr) + print(f"release qualification failed: {error}", file=sys.stderr) return 1 finally: with contextlib.suppress(BaseException): diff --git a/frontends/desktop/e2e/package/verify_candidate_evidence.py b/frontends/desktop/release_qualification/verify_release_evidence.py similarity index 90% rename from frontends/desktop/e2e/package/verify_candidate_evidence.py rename to frontends/desktop/release_qualification/verify_release_evidence.py index bf603a7a8..b3d42d620 100644 --- a/frontends/desktop/e2e/package/verify_candidate_evidence.py +++ b/frontends/desktop/release_qualification/verify_release_evidence.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Combine three real-package reports and enforce the P2 candidate evidence gate.""" +"""Combine three package reports and enforce the automated release evidence gate.""" from __future__ import annotations @@ -59,7 +59,7 @@ def assert_report(name: str, report: dict[str, Any], expected_commit: str) -> li if report.get("releaseVersion") != "0.2.0": failures.append(f"{name}: release version is not 0.2.0") if report.get("success") is not True: - failures.append(f"{name}: automated journey did not pass") + failures.append(f"{name}: automated qualification did not pass") if not str(report.get("artifact", {}).get("sha256", "")): failures.append(f"{name}: artifact SHA-256 is missing") checks = report.get("checks", {}) @@ -120,11 +120,6 @@ def assert_report(name: str, report: dict[str, Any], expected_commit: str) -> li missing_bootstrap = sorted(required_bootstrap - set(report.get("bootstrap", {}))) if missing_bootstrap: failures.append(f"{name}: missing bootstrap evidence {missing_bootstrap}") - pending = [key for key, value in report.get("manualChecklist", {}).items() if value != "pass"] - if pending: - failures.append(f"{name}: manual checklist is incomplete: {pending}") - if len(report.get("screenshots", [])) < 2 and name != "windows": - failures.append(f"{name}: fewer than two screenshots were recorded") return failures @@ -154,12 +149,6 @@ def main() -> int: failures.append("windows native retry path did not pass") if windows_native.get("checks", {}).get("settingsRestored") is not True: failures.append("windows native wrapper did not restore the original settings file") - native_pending = [ - key for key, value in windows_native.get("manualChecklist", {}).items() if value != "pass" - ] - if native_pending: - failures.append(f"windows native manual checklist is incomplete: {native_pending}") - manifest = { "schemaVersion": 1, "candidateCommit": args.expected_commit, diff --git a/frontends/desktop/e2e/windows/Invoke-WindowsUserJourney.ps1 b/frontends/desktop/release_qualification/windows/Invoke-WindowsReleaseQualification.ps1 similarity index 98% rename from frontends/desktop/e2e/windows/Invoke-WindowsUserJourney.ps1 rename to frontends/desktop/release_qualification/windows/Invoke-WindowsReleaseQualification.ps1 index 89958f750..f50afaca0 100644 --- a/frontends/desktop/e2e/windows/Invoke-WindowsUserJourney.ps1 +++ b/frontends/desktop/release_qualification/windows/Invoke-WindowsReleaseQualification.ps1 @@ -15,7 +15,7 @@ $ErrorActionPreference = "Stop" Set-StrictMode -Version 2.0 if (-not $WorkDir) { - $WorkDir = Join-Path $env:TEMP ("ga-desktop-e2e\run-" + $RunId) + $WorkDir = Join-Path $env:TEMP ("ga-desktop-release-qualification\run-" + $RunId) } $ScriptRoot = Split-Path -Parent $MyInvocation.MyCommand.Path @@ -552,7 +552,7 @@ function Invoke-ProductionContractJourney( if (-not (Test-Path -LiteralPath $python)) { Fail "Could not create an out-of-package Python for the relocation journey" } - $driver = [System.IO.Path]::GetFullPath((Join-Path $ScriptRoot "..\package\real_package_journey.py")) + $driver = [System.IO.Path]::GetFullPath((Join-Path $ScriptRoot "..\run_release_qualification.py")) $contractReport = Join-Path $ReportDir "production-contract" $contractWork = Join-Path $WorkDir "production-contract-work" $relocated = Join-Path $ExtractDir "relocated\含 空格\GenericAgent 包" @@ -566,8 +566,7 @@ function Invoke-ProductionContractJourney( --relocated-root $relocated ` --report-dir $contractReport ` --work-dir $contractWork ` - --allow-user-settings-mutation ` - --screenshots-optional + --allow-user-settings-mutation if ($LASTEXITCODE -ne 0) { Fail "Production package contract journey failed; see $contractReport" } @@ -597,7 +596,7 @@ try { $Report.environment.initialPortState = @(Get-PortState) $Report.environment.initialProcesses = @(Get-GaProcesses) if ($Report.environment.initialPortState.Count -gt 0) { - Fail "127.0.0.1:14168 was already occupied before the package journey" + Fail "127.0.0.1:14168 was already occupied before release qualification" } $script:PortWasFreeAtStart = $true @@ -623,7 +622,7 @@ try { $script:RunSucceeded = $true Save-Report Write-Host "" - Write-Host "E2E report: $ReportPath" + Write-Host "Release qualification report: $ReportPath" } catch { $Report.success = $false Add-Failure $_.Exception.Message diff --git a/frontends/desktop/e2e/windows/README.md b/frontends/desktop/release_qualification/windows/README.md similarity index 80% rename from frontends/desktop/e2e/windows/README.md rename to frontends/desktop/release_qualification/windows/README.md index 87970b66d..613b6947d 100644 --- a/frontends/desktop/e2e/windows/README.md +++ b/frontends/desktop/release_qualification/windows/README.md @@ -1,6 +1,6 @@ -# Windows Desktop E2E +# Windows Desktop release qualification -This folder contains the Windows validation harness for the portable desktop package. It simulates the user path: +This folder contains the Windows qualification runner for the portable desktop package. It exercises: 1. Download a GitHub Actions artifact, or use a local zip. 2. Verify commit, SHA-256, and required package files. @@ -8,7 +8,7 @@ This folder contains the Windows validation harness for the portable desktop pac 4. Launch `GenericAgent.exe` directly. 5. Wait for first-run prepare, bridge identity, and bootstrap `ready`. 6. In `Full` mode, inject an unknown process on port `14168`, verify `port_conflict`, release it, and retry from setup. -7. Run the shared production-package contract with the embedded Python: package-owned bridge plus +7. Run the shared production-package qualification with the embedded Python: package-owned bridge plus external `GA_ROOT`, fake-model chat, upload, memory import, warm restart, a second foreign-port assertion, relocation into a path with spaces and Chinese characters, stale override fallback, optional P2P degradation, and process/settings cleanup. @@ -16,7 +16,7 @@ This folder contains the Windows validation harness for the portable desktop pac ## Full Run ```powershell -.\frontends\desktop\e2e\windows\Invoke-WindowsUserJourney.ps1 ` +.\frontends\desktop\release_qualification\windows\Invoke-WindowsReleaseQualification.ps1 ` -Repo abraxas914/GenericAgent ` -RunId 29071095889 ` -ExpectedCommit 696ddfc ` @@ -29,12 +29,12 @@ Use `-PackageZip C:\path\GenericAgent-Desktop-Windows-Portable.zip` when the art - `Smoke`: package verification, extraction, first launch, prepare marker, bridge identity, bootstrap ready. - `FailureOnly`: assumes the package can be extracted and focuses on the unknown port conflict and setup retry path. -- `Full`: runs `Smoke`, the native retry failure path, and the complete production package journey. +- `Full`: runs `Smoke`, the native retry failure path, and the complete production package qualification. It requires `-ExpectedCommit` so the bridge build identity is tied to the candidate SHA. ## Manual Checks -The script collects screenshots and writes these checklist items to the report for the tester to mark externally: +The script collects screenshots and writes these checklist items to the report for separate human review: - Loading, prepare, setup, and main windows always show the Windows titlebar. - Right side has exactly minimize, maximize, and close. @@ -47,6 +47,9 @@ The script collects screenshots and writes these checklist items to the report f - The shortcut self-heals after the portable folder is moved. - Loading, fallback, and main React pages render through the Tauri resource protocol. +Screenshot capture and checklist values are supporting evidence. They do not determine the automated +qualification result or need to be edited to `pass` before the evidence verifier runs. + ## Report Reports are written under `\report`: diff --git a/frontends/desktop/e2e/windows/fixtures/foreign-port-listener.ps1 b/frontends/desktop/release_qualification/windows/fixtures/foreign-port-listener.ps1 similarity index 100% rename from frontends/desktop/e2e/windows/fixtures/foreign-port-listener.ps1 rename to frontends/desktop/release_qualification/windows/fixtures/foreign-port-listener.ps1 diff --git a/frontends/desktop/scripts/verify-compiled-dist.mjs b/frontends/desktop/scripts/verify-compiled-dist.mjs index 2744ddee1..8c9bbfe43 100644 --- a/frontends/desktop/scripts/verify-compiled-dist.mjs +++ b/frontends/desktop/scripts/verify-compiled-dist.mjs @@ -106,12 +106,7 @@ function verifyTrackedSourceBoundary() { const forbidden = tracked.filter((file) => ( file.startsWith('frontends/desktop/src/') || file.startsWith('frontends/desktop/public/') - || (file.startsWith('frontends/desktop/e2e/') - && file !== 'frontends/desktop/e2e/requirements.txt' - && !file.startsWith('frontends/desktop/e2e/package/') - && !file.startsWith('frontends/desktop/e2e/linux/') - && !file.startsWith('frontends/desktop/e2e/macos/') - && !file.startsWith('frontends/desktop/e2e/windows/')) + || file.startsWith('frontends/desktop/e2e/') || /^frontends\/desktop\/(?:index|loading|setup)\.html$/.test(file) || /^frontends\/desktop\/(?:vite\.config\.[^/]+|tsconfig(?:\.[^/]+)?\.json|package-lock\.json)$/.test(file) )); @@ -239,6 +234,9 @@ async function verifyReleaseContract() { || body.includes("--exclude='frontends/desktop/dist'"))) { fail(`${job} must not duplicate Tauri-embedded dist inside runtime/app`); } + if (!/--exclude='(?:\.\/)?frontends\/desktop\/release_qualification'/.test(body)) { + fail(`${job} must not package release qualification tooling inside runtime/app`); + } if (!(body.includes('test ! -e "$RUNTIME/app/frontends/desktop/dist"') || body.includes('test ! -e "$RUNTIME_SRC/app/frontends/desktop/dist"'))) { fail(`${job} must verify dist is not duplicated inside runtime/app`); diff --git a/frontends/desktop/e2e/requirements.txt b/frontends/tests/requirements.txt similarity index 100% rename from frontends/desktop/e2e/requirements.txt rename to frontends/tests/requirements.txt diff --git a/frontends/tests/test_package_evidence.py b/frontends/tests/test_release_qualification.py similarity index 91% rename from frontends/tests/test_package_evidence.py rename to frontends/tests/test_release_qualification.py index e50f3aeb5..8f65dbf63 100644 --- a/frontends/tests/test_package_evidence.py +++ b/frontends/tests/test_release_qualification.py @@ -23,12 +23,12 @@ def load_module(name: str, relative: str): journey = load_module( - "real_package_journey", - "frontends/desktop/e2e/package/real_package_journey.py", + "run_release_qualification", + "frontends/desktop/release_qualification/run_release_qualification.py", ) evidence = load_module( - "verify_candidate_evidence", - "frontends/desktop/e2e/package/verify_candidate_evidence.py", + "verify_release_evidence", + "frontends/desktop/release_qualification/verify_release_evidence.py", ) @@ -80,13 +80,63 @@ def test_candidate_report_contract_accepts_complete_platform_evidence(): assert evidence.assert_report("macos", complete_report("macos"), "abc1234") == [] -def test_candidate_report_contract_rejects_incomplete_manual_and_commit_evidence(): +def test_automated_gate_ignores_manual_evidence_but_rejects_commit_mismatch(): report = complete_report() - report["expectedCommit"] = "different" report["manualChecklist"]["nativeVisuals"] = "pending" + report["screenshots"] = [] + assert evidence.assert_report("linux", report, "abc1234") == [] + + report["expectedCommit"] = "different" failures = evidence.assert_report("linux", report, "abc1234") assert any("commit" in failure for failure in failures) - assert any("manual checklist" in failure for failure in failures) + + +def test_combined_gate_ignores_platform_and_windows_native_manual_review( + tmp_path, monkeypatch +): + report_paths = {} + for platform in ("windows", "linux", "macos"): + report = complete_report(platform) + report["manualChecklist"] = {"nativeVisuals": "pending"} + report["screenshots"] = [] + path = tmp_path / f"{platform}.json" + path.write_text(json.dumps(report), encoding="utf-8") + report_paths[platform] = path + + windows_native = tmp_path / "windows-native.json" + windows_native.write_text( + json.dumps( + { + "success": True, + "checks": {"portConflictRecovery": True, "settingsRestored": True}, + "manualChecklist": {"nativeVisuals": "manual"}, + } + ), + encoding="utf-8", + ) + output = tmp_path / "manifest.json" + monkeypatch.setattr( + evidence.sys, + "argv", + [ + "verify_release_evidence.py", + "--expected-commit", + "abc1234", + "--windows", + str(report_paths["windows"]), + "--linux", + str(report_paths["linux"]), + "--macos", + str(report_paths["macos"]), + "--windows-native-report", + str(windows_native), + "--output", + str(output), + ], + ) + + assert evidence.main() == 0 + assert json.loads(output.read_text(encoding="utf-8"))["gate"] == "pass" def test_candidate_report_contract_rejects_partial_or_unowned_conductor_evidence():