From aa2eb8dd3704d3f57415173c3bd4660aa3c1fdce Mon Sep 17 00:00:00 2001 From: Macky Date: Sat, 8 Aug 2026 14:34:34 +0700 Subject: [PATCH] =?UTF-8?q?feat(chat):=20persona=20decides=20to=20buy/walk?= =?UTF-8?q?=20=E2=80=94=20auto-finish=20+=20tolerance=20(temper)=20+=20res?= =?UTF-8?q?ume?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The conversation now ENDS when the persona makes a decision (option C), not when the trainee clicks a button: - persona_id replies carry {reply, decision(none/buy/walk), mood}; when decision is buy/walk the session auto-finishes (won/lost) with a debrief that reveals latent details + per-turn 'turning points'. - personas have a tolerance (1-5, 'temper'): impatient personas walk away fast after poor answers (fed via internal.misses on mood<=-1); tough 'wrong text' cases can still be won by a strong, gentle response (judge realism). - trainee 'Finish' button removed; if they leave mid-chat an active session is resumed via /chat/resume (continue, not restart). One-shot lock still enforced once decided. - mock/tests updated: persona deciding buy -> send auto-finishes won. Rebuilt dist. --- backend/app/api/chat_routes.py | 91 ++++++++++++++++++- backend/app/services/persona_prompts.py | 8 +- backend/app/services/simulator.py | 48 ++++++---- backend/app/services/store.py | 1 + backend/scripts/mock_llm.py | 9 +- backend/scripts/test_e2e.py | 17 ++-- ...ers-Bpsek0Me.js => AdminUsers-da8uxtrm.js} | 2 +- ...tics-Ca8FcnIo.js => Analytics-DpJ0uaAA.js} | 2 +- frontend/dist/assets/Chat-BPfrVhz_.css | 1 - frontend/dist/assets/Chat-D8HchzhD.css | 1 + frontend/dist/assets/Chat-fU4aRozx.js | 6 -- frontend/dist/assets/Chat-o6rfEiwI.js | 6 ++ ...r-4jGJS7rQ.js => GroupBuilder-5J7CyUbw.js} | 2 +- ...Edit-BzqeiR8Z.js => GroupEdit-C8F_eu_z.js} | 2 +- .../{Login-BvMoAa9d.js => Login-DM1SnTQg.js} | 2 +- ...yBoard-CdXG-0Ii.js => MyBoard-DnLYF8gv.js} | 2 +- ...sonas-BXejtBr0.js => Personas-Cngg_FjC.js} | 2 +- ...tings-D5LYPIGh.js => Settings-Bdlfb6I_.js} | 2 +- .../{Setup-_cGdJHOE.js => Setup-DdJ4ptKX.js} | 2 +- ...ining-CHRTy9x1.js => Training-D4koaEpE.js} | 2 +- ...eft-C_e4n_39.js => arrow-left-haz-8IhO.js} | 2 +- .../{index-tI5UDFg-.js => index-Dv9XjhnS.js} | 16 ++-- .../{plus-DCrJlDOb.js => plus-Dg6sDA5g.js} | 2 +- ...{target-CylhW5SK.js => target-Do-370k4.js} | 2 +- .../{users-qicnhyDs.js => users-CFr5Kj99.js} | 2 +- frontend/dist/index.html | 2 +- frontend/src/api/index.js | 1 + frontend/src/views/Chat.vue | 48 ++++++---- 28 files changed, 199 insertions(+), 84 deletions(-) rename frontend/dist/assets/{AdminUsers-Bpsek0Me.js => AdminUsers-da8uxtrm.js} (98%) rename frontend/dist/assets/{Analytics-Ca8FcnIo.js => Analytics-DpJ0uaAA.js} (97%) delete mode 100644 frontend/dist/assets/Chat-BPfrVhz_.css create mode 100644 frontend/dist/assets/Chat-D8HchzhD.css delete mode 100644 frontend/dist/assets/Chat-fU4aRozx.js create mode 100644 frontend/dist/assets/Chat-o6rfEiwI.js rename frontend/dist/assets/{GroupBuilder-4jGJS7rQ.js => GroupBuilder-5J7CyUbw.js} (98%) rename frontend/dist/assets/{GroupEdit-BzqeiR8Z.js => GroupEdit-C8F_eu_z.js} (99%) rename frontend/dist/assets/{Login-BvMoAa9d.js => Login-DM1SnTQg.js} (92%) rename frontend/dist/assets/{MyBoard-CdXG-0Ii.js => MyBoard-DnLYF8gv.js} (98%) rename frontend/dist/assets/{Personas-BXejtBr0.js => Personas-Cngg_FjC.js} (95%) rename frontend/dist/assets/{Settings-D5LYPIGh.js => Settings-Bdlfb6I_.js} (99%) rename frontend/dist/assets/{Setup-_cGdJHOE.js => Setup-DdJ4ptKX.js} (96%) rename frontend/dist/assets/{Training-CHRTy9x1.js => Training-D4koaEpE.js} (95%) rename frontend/dist/assets/{arrow-left-C_e4n_39.js => arrow-left-haz-8IhO.js} (86%) rename frontend/dist/assets/{index-tI5UDFg-.js => index-Dv9XjhnS.js} (76%) rename frontend/dist/assets/{plus-DCrJlDOb.js => plus-Dg6sDA5g.js} (86%) rename frontend/dist/assets/{target-CylhW5SK.js => target-Do-370k4.js} (88%) rename frontend/dist/assets/{users-qicnhyDs.js => users-CFr5Kj99.js} (90%) diff --git a/backend/app/api/chat_routes.py b/backend/app/api/chat_routes.py index 39ba61f..f94f409 100644 --- a/backend/app/api/chat_routes.py +++ b/backend/app/api/chat_routes.py @@ -51,11 +51,48 @@ SCENARIOS = { def _scenario_config(scenario: str, persona: dict): cfg = SCENARIOS.get(scenario, SCENARIOS["social"]) - # OR with persona's own initiation preference: f2f/call forces seller-first unless persona - # is strongly customer-initiated (we let scenario win, but keep persona special handling). return cfg, cfg["init"] +def _build_abbrev_debrief(outcome: str, persona: dict, internal: dict) -> dict: + """Build a lightweight debrief from the persona's own decision + per-turn signals + (no extra LLM judge call needed since the persona chose to buy/walk).""" + signals = internal.get("signals", []) + turning_points = [ + f"รอบที่ {sig['turn']}: ลูกค้า{'เริ่มใจขึ้น' if sig['mood'] > 0 else 'เริ่มหงุดหงิด/ลังเล'}" + for sig in signals if sig.get("type") in ("annoy", "warm") + ] + why = ( + "ลูกค้าตัดสินใจซื้อ (แก้ปัญหาและยอมรับข้อเสนอแล้ว)" + if outcome == "won" + else "ลูกค้าตัดสินใจไม่ซื้อ — ยังไม่เห็นคุณค่าพอ หรือการตอบไม่ตรงความต้องการ" + ) + return { + "outcome": outcome, + "score": 60 if outcome == "won" else 25, + "pain": (persona.get("pains") or [{}])[0].get("description", "") if persona.get("pains") else "", + "why": why, + "failurePoints": [] if outcome == "won" else ["ปิดการขายไม่สำเร็จ", "ลูกค้าถอยก่อนตัดสินใจซื้อ"], + "coaching": ( + ["ทำได้ดีมาก — ลูกค้าปิดการขายกับคุณ"] + if outcome == "won" + else turning_points + ["ลองถามความต้องการให้ลึกกว่าเดิม", "รับมือข้อโต้แย้งให้ตรงจุด"] + ), + "turning_points": turning_points, + "signals": signals, + "revealed_persona": { + "pains": persona.get("pains", []), + "income": persona.get("income", ""), + "personality": persona.get("personality", ""), + "budget": persona.get("budget", ""), + "negotiation_levers": persona.get("negotiation_levers", []), + "opener": persona.get("opener", ""), + "background": persona.get("background", ""), + "tolerance": persona.get("tolerance", 3), + }, + } + + def _get_ready_group(s, gid: str) -> dict: """Org-scoped group access for trainees + require ready status (IDOR defense).""" group = s["groups"].get_or_none(gid) @@ -154,7 +191,7 @@ def send_message(gid: str, pid: str): sim = _sim(group, persona) try: - reply = sim.persona_reply( + reply, meta = sim.persona_reply( persona=persona, sales_kit=group.get("sales_kit") or {}, messages=messages, @@ -166,10 +203,43 @@ def send_message(gid: str, pid: str): raise ApiError(f"LLM error: {exc}", 500) messages.append({"role": "customer", "text": reply}) - # Per-turn tracking: count exchanged turns + nudge score down as the chat drags. + # Update internal state: track misses (poor answers) and mood trend. internal = session.get("internal", {}) or {} internal.setdefault("turns", 0) internal["turns"] = internal.get("turns", 0) + 1 + internal["signals"] = internal.get("signals", []) + try: + mood = int(meta.get("mood", 0)) + except (TypeError, ValueError): + mood = 0 + # A clearly annoyed customer is a "miss" against the seller. + if mood <= -1: + internal["misses"] = internal.get("misses", 0) + 1 + internal["signals"].append({"turn": internal["turns"], "mood": mood, "type": "annoy"}) + elif mood >= 1: + internal["signals"].append({"turn": internal["turns"], "mood": mood, "type": "warm"}) + + # Decision by the persona ends the session (one-shot lock). + decision = meta.get("decision") + if decision in ("buy", "walk"): + outcome = "won" if decision == "buy" else "lost" + debrief = _build_abbrev_debrief(outcome, persona, internal) + s["sessions"].update( + session["id"], + status="finished", + outcome=outcome, + messages=messages, + internal=internal, + debrief=debrief, + ) + return jsonify({ + "reply": reply, + "messages": messages, + "finished": True, + "outcome": outcome, + "debrief": debrief, + "session": s["sessions"].get(session["id"]), + }) s["sessions"].update(session["id"], messages=messages, internal=internal) return jsonify({"reply": reply, "messages": messages}) @@ -238,3 +308,16 @@ def get_session(sid: str): if not session or session.get("user_id") != current_user()["id"]: raise ApiError("session not found", 404) return jsonify({"session": session}) + + +@chat_bp.get("//personas//chat/resume") +@require_auth +@require_roles("user") +def resume_session(gid: str, pid: str): + """Resume an active (unfinished) session for this persona so the trainee can continue.""" + s = _stores() + actor = current_user() + session = s["sessions"].active_for_persona(actor["id"], pid) + if not session or session.get("group_id") != gid: + raise ApiError("no active session for this persona", 404) + return jsonify({"session": session, "scenario": session.get("scenario", "social")}) diff --git a/backend/app/services/persona_prompts.py b/backend/app/services/persona_prompts.py index 1873acb..5220149 100644 --- a/backend/app/services/persona_prompts.py +++ b/backend/app/services/persona_prompts.py @@ -22,6 +22,9 @@ EACH persona MUST include ALL of these fields: - pains[] (LATENT) - negotiation_levers[] (LATENT) - opener, special, difficulty, notes +- tolerance (1-5): how many irritant/poor answers you tolerate before you walk away ("heart"). IMPORTANT: + a temperamental/impatient persona has LOW tolerance (1-2, walks away fast after poor answers); a patient + one has HIGH (4-5). Avg is 3. Match tolerance to personality (e.g. a busy owner / abrupt personality = low). RULES: 1. DIVERSITY: 15 distinct people across age groups, occupations, incomes, lifestyles, @@ -32,8 +35,9 @@ RULES: (what the seller must satisfy to resolve it). 3. NEGOTIATION: every persona negotiates. negotiation_levers[] lists what they push on (price reduction, freebies, delivery time for made-to-order, scope, payment terms, guarantee). -4. INITIATION MODE: pick per persona "customer" (they message first) or "seller" (seller must open - the sale - e.g. insurance/proactive). You may mix, but every persona picks one. +4. DECISION BEHAVIOR: when the persona decides to buy (after their pain is resolved + price accepted) + OR to walk away (after too many misses / rude / pushy / wrong), the persona STATES the decision in + ordinary dialogue (e.g. "ok I'll go with it" / "no thanks, forget it") — it does NOT announce it as meta. 5. CHANNEL: "facebook" or "line". 6. ONE SPECIAL TIER-C PERSONA: special="wrong_text". They open looking ready to buy, then instantly lose interest and want to end the chat (open='never mind, forget it'), yet still have a live pain. diff --git a/backend/app/services/simulator.py b/backend/app/services/simulator.py index 6b87e4c..eee5bfd 100644 --- a/backend/app/services/simulator.py +++ b/backend/app/services/simulator.py @@ -24,19 +24,27 @@ naturally and it makes sense for a real customer to reveal them): - Your pains (some may be product-solvable, some NOT): {pains} - Your negotiation levers: {levers} - Your goal/mood: {goal} +- Your tolerance (TOLERANCE): you walk away after about {tolerance} irritating/off-point/pushy + answers. If the seller is repeatedly wrong, ignores your need, or is pushy, you feel fed up. Initiation mode: {init_mode}. {special_instr} BEHAVIOR RULES: -1. You do NOT buy easily. You stall, ask questions, compare, and negotiate (price, freebies, - delivery time, scope, payment). -2. If the seller is rude, pushy, ignores your need, or mis-diagnoses your pain, your trust drops - and you may refuse to continue / walk away — even if you wanted the product. -3. You reveal pains only when the seller asks good questions or builds trust. Do not dump your - pains unprompted. -4. Respond in natural, in-character chat style ({channel} style, casual for LINE). -5. Stay in character; never mention that you are a simulation or an AI persona. +1. You do NOT buy easily. You stall, ask questions, compare, and negotiate. +2. If the seller is rude, pushy, ignores your need, or mis-diagnoses your pain, your trust drops. + Past your tolerance, you SAY so plainly and end the chat (e.g. "Never mind, forget it" / "I'll + think about it elsewhere" / "ok, bye"). +3. When the seller genuinely resolves your real pain AND you accept the price, you DECIDE and SAY + plainly you'll take it (e.g. "ok, let's go with it" / "fine, send me the order"). +4. You reveal pains only when the seller asks good questions or builds trust. +5. Respond in natural, in-character style. +6. Stay in character; never mention this is a simulation. When you decide (buy OR walk away), say it + naturally in-dialogue; do not narrate as meta. -Reply with a JSON object: {{"reply": ""}} +Reply ONLY with a JSON object: +{{"reply": "", "decision": "none" | "buy" | "walk", "mood": -2..2}} +- "decision": set "buy" ONLY when you clearly decided to purchase; "walk" ONLY when you clearly + decided NOT to purchase and are ending the chat; otherwise "none". +- "mood": -2 (very annoyed) .. +2 (very receptive), current feel about the seller. Only output that JSON. """ @@ -87,13 +95,15 @@ class Simulator: internal: dict[str, Any], scenario: str = "social", scenario_adapt: str = "", - ) -> str: + ) -> tuple[str, dict[str, Any]]: + """Return (reply_text, meta) where meta includes decision/mood from the persona.""" pains_txt = self._describe_pains(persona.get("pains", [])) adapt = scenario_adapt or { "social": "Chat style: short, casual, quick social-messaging replies.", "f2f_call": "Style: natural, conversational like a live face-to-face or phone talk.", "recontact": "Style: casual messaging; you already know the product from 1-3 months ago.", }.get(scenario, "") + tolerance = int(persona.get("tolerance", 3) or 3) system = CHAT_SYSTEM.format( name=persona.get("name", "Customer"), tone=persona.get("communication_style", "natural, casual"), @@ -109,20 +119,18 @@ class Simulator: pains=pains_txt, levers=", ".join(persona.get("negotiation_levers", [])) or "price, delivery time", goal=persona.get("goal", ""), + tolerance=tolerance, init_mode="you contacted the seller first (customer-initiated)" if persona.get("initiation_mode") == "customer" else "the seller opened the sale to you (you are a lead)", special_instr=self._special_instr(persona) + "\n" + adapt, ) msgs = [{"role": "system", "content": system}] - # send a compact recap of internal state to the persona ad - # (doesn't leak to trainee) msgs.append({ "role": "system", "content": "Internal state (for your role-play only): " + json.dumps(internal, ensure_ascii=False), }) - # Translate role 'system' transcript entries into a hidden system note for the LLM. for m in messages[-30:]: role = m.get("role") if role == "system": @@ -133,13 +141,19 @@ class Simulator: resp = self.llm.complete_conversation(msgs, temperature=0.7, max_tokens=400) except LLMError as exc: raise - # extract {reply: ...} + # extract {reply, decision, mood} + meta: dict[str, Any] = {"decision": "none", "mood": 0} try: data = json.loads(self._extract_json(resp)) - reply = data.get("reply") or data.get("response") or str(resp) + reply = (data.get("reply") or data.get("response") or str(resp)).strip() + meta["decision"] = data.get("decision", "none") + try: + meta["mood"] = int(float(data.get("mood", 0))) + except (TypeError, ValueError): + meta["mood"] = 0 except Exception: - reply = resp - return reply.strip() + reply = resp.strip() + return reply, meta # ── judge ────────────────────────────────────────────────────────── def judge( diff --git a/backend/app/services/store.py b/backend/app/services/store.py index 3114924..e583261 100644 --- a/backend/app/services/store.py +++ b/backend/app/services/store.py @@ -44,6 +44,7 @@ def ensure_persona_shape(p: dict[str, Any]) -> dict[str, Any]: "opener": p.get("opener", ""), "special": p.get("special", ""), # e.g. "wrong_text" | "" "difficulty": p.get("difficulty", 1), # 1..5 + "tolerance": p.get("tolerance", 3), # misses before this persona walks away (temper) "notes": p.get("notes", ""), } # validate diff --git a/backend/scripts/mock_llm.py b/backend/scripts/mock_llm.py index aadfe8c..0ba4e78 100644 --- a/backend/scripts/mock_llm.py +++ b/backend/scripts/mock_llm.py @@ -107,5 +107,10 @@ class MockLLM: return {} def complete_conversation(self, messages, **kw) -> str: - # persona chat: echo a short in-character reply - return json.dumps({"reply": "I see. Tell me more about the price then."}, ensure_ascii=False) + # persona chat: echo a short in-character reply with a decision. + # On the first send, the persona decides to buy (so E2E auto-finishes as won). + return json.dumps({ + "reply": "I see. Tell me more about the price then.", + "decision": "buy", + "mood": 1, + }, ensure_ascii=False) diff --git a/backend/scripts/test_e2e.py b/backend/scripts/test_e2e.py index 6e66179..111da7b 100644 --- a/backend/scripts/test_e2e.py +++ b/backend/scripts/test_e2e.py @@ -87,16 +87,15 @@ def main(): r = client.post(f"/api/chat/{gid}/personas/{pid}/chat/send", json={"text": "Hi, I run a small noodle shop. Tell me about pricing."}, headers=UH) assert r.status_code == 200, r.get_json() - assert r.get_json()["reply"] - print("[ok] send message -> persona replies") - - # finish -> debrief reveals latent + outcome won - r = client.post(f"/api/chat/{gid}/personas/{pid}/chat/finish", headers=UH) - assert r.status_code == 200, r.get_json() - debrief = r.get_json()["debrief"] - assert debrief["outcome"] == "won" + body = r.get_json() + assert body["reply"] + # Mock persona decides to buy on this send -> session auto-finishes as won. + assert body.get("finished") is True, body + assert body.get("outcome") == "won", body + debrief = body.get("debrief") or {} + assert debrief.get("outcome") == "won" assert "revealed_persona" in debrief and "pains" in debrief["revealed_persona"] - print("[ok] finish -> debrief with latent reveal + outcome") + print("[ok] send -> persona decides (buy) -> session auto-finishes won with debrief") # ONE-SHOT: cannot start again on same persona r = client.post(f"/api/chat/{gid}/personas/{pid}/chat/start", headers=UH) diff --git a/frontend/dist/assets/AdminUsers-Bpsek0Me.js b/frontend/dist/assets/AdminUsers-da8uxtrm.js similarity index 98% rename from frontend/dist/assets/AdminUsers-Bpsek0Me.js rename to frontend/dist/assets/AdminUsers-da8uxtrm.js index d720a23..714dfe9 100644 --- a/frontend/dist/assets/AdminUsers-Bpsek0Me.js +++ b/frontend/dist/assets/AdminUsers-da8uxtrm.js @@ -1,4 +1,4 @@ -import{k as w,_ as h,l as U,c as r,a as e,m,u as o,j as l,t as n,i as u,w as p,v,D as b,e as f,F as V,q as M,s as k,r as y,o as i,A as C}from"./index-tI5UDFg-.js";import{U as z}from"./users-qicnhyDs.js";/** +import{k as w,_ as h,l as U,c as r,a as e,m,u as o,j as l,t as n,i as u,w as p,v,D as b,e as f,F as V,q as M,s as k,r as y,o as i,A as C}from"./index-Dv9XjhnS.js";import{U as z}from"./users-CFr5Kj99.js";/** * @license lucide-vue-next v1.0.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/Analytics-Ca8FcnIo.js b/frontend/dist/assets/Analytics-DpJ0uaAA.js similarity index 97% rename from frontend/dist/assets/Analytics-Ca8FcnIo.js rename to frontend/dist/assets/Analytics-DpJ0uaAA.js index 40de8cf..ac85841 100644 --- a/frontend/dist/assets/Analytics-Ca8FcnIo.js +++ b/frontend/dist/assets/Analytics-DpJ0uaAA.js @@ -1,4 +1,4 @@ -import{k,_ as C,l as V,c as u,a as s,m as i,u as a,j as m,t,i as l,n as h,w as f,v as w,p as z,e as M,F as N,q as L,s as P,x as U,r as v,o as _}from"./index-tI5UDFg-.js";import{U as j}from"./users-qicnhyDs.js";import{P as A}from"./plus-DCrJlDOb.js";/** +import{k,_ as C,l as V,c as u,a as s,m as i,u as a,j as m,t,i as l,n as h,w as f,v as w,p as z,e as M,F as N,q as L,s as P,x as U,r as v,o as _}from"./index-Dv9XjhnS.js";import{U as j}from"./users-CFr5Kj99.js";import{P as A}from"./plus-Dg6sDA5g.js";/** * @license lucide-vue-next v1.0.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/Chat-BPfrVhz_.css b/frontend/dist/assets/Chat-BPfrVhz_.css deleted file mode 100644 index 603acd7..0000000 --- a/frontend/dist/assets/Chat-BPfrVhz_.css +++ /dev/null @@ -1 +0,0 @@ -.thread[data-v-310aef08]{background:#eceff4;border:1px solid var(--border);border-radius:var(--radius);padding:16px;min-height:320px;max-height:52vh;overflow-y:auto;display:flex;flex-direction:column;gap:8px}.bubble[data-v-310aef08]{max-width:72%;padding:10px 14px;white-space:pre-wrap;word-break:break-word}.msg-system[data-v-310aef08]{align-self:center;background:#fef3c7;color:#92400e;font-size:12px;max-width:88%;border-radius:999px}.composer[data-v-310aef08]{display:flex;gap:8px;margin-top:12px}.task[data-v-310aef08]{margin-bottom:12px;background:#fff7ed;border-color:#fed7aa}.debrief[data-v-310aef08]{margin-top:16px}button.danger[data-v-310aef08]{background:var(--red);color:#fff;border:none}.guide[data-v-310aef08]{background:#eef2ff;border-color:#c7d2fe;margin-bottom:12px}.scenario[data-v-310aef08]{border:2px solid var(--border);border-radius:12px;padding:12px 14px;margin:10px 0;cursor:pointer;transition:border-color .15s ease,background .15s ease}.scenario[data-v-310aef08]:hover{border-color:var(--accent)}.scenario.sel[data-v-310aef08]{border-color:var(--accent);background:#eef2ff}.reveal-grid[data-v-310aef08]{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}.rev[data-v-310aef08]{display:flex;flex-direction:column;background:#f8fafc;border:1px solid var(--border);border-radius:8px;padding:8px 10px}.rk[data-v-310aef08]{font-size:12px;color:var(--muted)}.rv[data-v-310aef08]{font-size:13px;color:var(--ink);margin-top:2px}@media (max-width: 640px){.reveal-grid[data-v-310aef08]{grid-template-columns:1fr}} diff --git a/frontend/dist/assets/Chat-D8HchzhD.css b/frontend/dist/assets/Chat-D8HchzhD.css new file mode 100644 index 0000000..0fd9744 --- /dev/null +++ b/frontend/dist/assets/Chat-D8HchzhD.css @@ -0,0 +1 @@ +.thread[data-v-4da228fb]{background:#eceff4;border:1px solid var(--border);border-radius:var(--radius);padding:16px;min-height:320px;max-height:52vh;overflow-y:auto;display:flex;flex-direction:column;gap:8px}.bubble[data-v-4da228fb]{max-width:72%;padding:10px 14px;white-space:pre-wrap;word-break:break-word}.msg-system[data-v-4da228fb]{align-self:center;background:#fef3c7;color:#92400e;font-size:12px;max-width:88%;border-radius:999px}.composer[data-v-4da228fb]{display:flex;gap:8px;margin-top:12px}.task[data-v-4da228fb]{margin-bottom:12px;background:#fff7ed;border-color:#fed7aa}.debrief[data-v-4da228fb]{margin-top:16px}button.danger[data-v-4da228fb]{background:var(--red);color:#fff;border:none}.guide[data-v-4da228fb]{background:#eef2ff;border-color:#c7d2fe;margin-bottom:12px}.scenario[data-v-4da228fb]{border:2px solid var(--border);border-radius:12px;padding:12px 14px;margin:10px 0;cursor:pointer;transition:border-color .15s ease,background .15s ease}.scenario[data-v-4da228fb]:hover{border-color:var(--accent)}.scenario.sel[data-v-4da228fb]{border-color:var(--accent);background:#eef2ff}.reveal-grid[data-v-4da228fb]{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}.rev[data-v-4da228fb]{display:flex;flex-direction:column;background:#f8fafc;border:1px solid var(--border);border-radius:8px;padding:8px 10px}.rk[data-v-4da228fb]{font-size:12px;color:var(--muted)}.rv[data-v-4da228fb]{font-size:13px;color:var(--ink);margin-top:2px}@media (max-width: 640px){.reveal-grid[data-v-4da228fb]{grid-template-columns:1fr}} diff --git a/frontend/dist/assets/Chat-fU4aRozx.js b/frontend/dist/assets/Chat-fU4aRozx.js deleted file mode 100644 index 57a6768..0000000 --- a/frontend/dist/assets/Chat-fU4aRozx.js +++ /dev/null @@ -1,6 +0,0 @@ -import{k as P,_ as $,l as q,s as C,c as l,m as b,n as z,u as a,a as e,t as s,i,F as j,q as S,j as p,A as T,e as m,w as H,v as J,b as O,h as R,r as u,x as U,o as n,C as Q}from"./index-tI5UDFg-.js";import{T as W}from"./target-CylhW5SK.js";import{A as X}from"./arrow-left-C_e4n_39.js";/** - * @license lucide-vue-next v1.0.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Y=P("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]),Z={key:0,class:"card"},ee={style:{"margin-top":"0"}},se=["onClick"],te={class:"row",style:{"align-items":"center"}},ae={key:0,class:"badge line"},le={key:1,class:"badge facebook"},ne={class:"muted",style:{"margin-top":"6px"}},oe=["disabled"],ie={key:1},re={class:"card guide"},ce={style:{margin:"6px 0 0","line-height":"1.7"}},ue={class:"row",style:{"align-items":"center","margin-bottom":"12px"}},de={style:{margin:"0"}},ve={key:0,class:"muted"},pe=["disabled"],me={key:0,class:"spinner",style:{"margin-right":"4px"}},_e={key:0,class:"bubble msg-customer muted"},he={key:0,class:"composer"},ge=["disabled","placeholder"],ye=["disabled"],fe={key:1,class:"card debrief"},be={key:0},ke={key:0,class:"reveal-grid"},xe={class:"rk"},we={class:"rv"},Ce={class:"primary",style:{"margin-top":"12px"}},je={__name:"Chat",setup(Se){const L=R(),f=L.params.gid,k=L.params.pid,c=u(null),_=u("pick"),h=u([]),g=u(""),d=u(!1),r=u(null),B=u(""),D=u(null),x=u("social"),F=[{id:"social",emoji:"💬",init:"customer",label:"Social Media (แชท)",desc:"ลูกค้าทักมาหาคุณก่อน — โทนสั้น ทักๆ ตามสไตล์แชท"},{id:"f2f_call",emoji:"📞",init:"seller",label:"พบหน้า / โทรศัพท์",desc:"คุณต้องเป็นฝ่ายเปิดการสนทนาเชิงรุกกับลีด (ผู้ฝึกทักก่อน)"},{id:"recontact",emoji:"⏳",init:"customer",label:"ลูกค้ากลับมาติดต่อ (1-3 เดือน)",desc:"เคยได้รับข้อมูลไปแล้ว ตอนนี้กลับมาติดต่อ พร้อมตัดสินใจมากขึ้น"}];function A(){Q(()=>{w.value&&(w.value.scrollTop=w.value.scrollHeight)})}const w=u(null);async function I(){_.value="chat";const t=await C.chatStart(f,k,{scenario:x.value});D.value=t.session.id,t.session.task&&(B.value=t.session.task),h.value=t.session.messages||[],h.value.length&&A()}q(async()=>{c.value=(await C.getPersona(f,k)).persona});async function N(){if(g.value.trim()){d.value=!0;try{const t=await C.chatSend(f,k,g.value.trim());h.value=t.messages,g.value="",A()}catch(t){alert(t.message)}finally{d.value=!1}}}async function E(){if(confirm(i.t("finish")+"?")){d.value=!0;try{const t=await C.chatFinish(f,k);r.value=t.debrief,h.value=t.session.messages,_.value="done"}catch(t){alert(t.message)}finally{d.value=!1}}}const M={name:"ชื่อ",tier:"ระดับ",difficulty:"ความยาก",profession:"อาชีพ",age_group:"ช่วงอายุ",location:"พื้นที่",income:"รายได้",budget:"งบประมาณ",lifestyle:"ไลฟ์สไตล์",background:"ภูมิหลัง",personality:"บุคลิก",communication_style:"สไตล์การสื่อสาร",goal:"เป้าหมาย",decision_timeline:"กรอบตัดสินใจ",pains:"ปัญหา (Pain)",objections:"ข้อโต้แย้ง",negotiation_levers:"สิ่งที่ใช้ต่อรอง",opener:"บทเปิดบทสนทนา",channel:"ช่องทาง",initiation_mode:"ใครเริ่มก่อน",product_context:"บริบทสินค้า"};function G(t){return M[t]||t}function K(t){return Array.isArray(t)?t.join(", "):t&&typeof t=="object"?JSON.stringify(t):String(t??"—")}return(t,y)=>{const V=U("router-link");return n(),l("div",null,[b(V,{to:`/groups/${a(f)}/personas`,class:"btn-back"},{default:z(()=>[b(a(X),{size:16,"stroke-width":2}),p(" "+s(a(i).t("personas")),1)]),_:1},8,["to"]),_.value==="pick"?(n(),l("div",Z,[e("h3",ee,"🎬 "+s(a(i).t("chooseScenario")),1),y[1]||(y[1]=e("p",{class:"muted",style:{"margin-top":"0"}},"เลือกสถานการณ์ที่อยากฝึกการขาย — แต่ละแบบกำหนดว่าใครทักก่อน และโทนการสนทนา",-1)),(n(),l(j,null,S(F,o=>e("div",{key:o.id,class:T(["scenario",{sel:x.value===o.id}]),onClick:v=>x.value=o.id},[e("div",te,[e("strong",null,s(o.emoji)+" "+s(o.label),1),o.init==="customer"?(n(),l("span",ae,"ลูกค้าทักก่อน")):(n(),l("span",le,"คุณต้องทักก่อน (เชิงรุก)"))]),e("div",ne,s(o.desc),1)],10,se)),64)),e("button",{class:"primary",style:{"margin-top":"16px",width:"100%"},disabled:!x.value,onClick:I}," ▶ "+s(a(i).t("start")),9,oe)])):(n(),l("div",ie,[e("div",re,[e("strong",null,[b(a(W),{size:17,"stroke-width":1.8,style:{"vertical-align":"-3px"}}),p(" "+s(a(i).t("chatGuideTitle")),1)]),e("p",ce,s(a(i).t("chatGuideText")),1)]),e("div",ue,[e("h2",de,s(c.value?c.value.name:"..."),1),e("span",{class:T(["badge",c.value&&c.value.channel])},s(c.value?c.value.channel:""),3),c.value?(n(),l("span",ve,s(c.value.profession)+" · "+s(c.value.age_group),1)):m("",!0),e("button",{class:"danger",style:{"margin-left":"auto"},onClick:E,disabled:h.value.length===0||_.value==="done"},[d.value?(n(),l("span",me)):m("",!0),p(s(a(i).t("finish")),1)],8,pe)]),e("div",{class:"thread",ref_key:"thread",ref:w},[(n(!0),l(j,null,S(h.value,(o,v)=>(n(),l("div",{key:v,class:T(["bubble",o.role==="seller"?"msg-seller":o.role==="system"?"msg-system":"msg-customer"])},s(o.text),3))),128)),d.value?(n(),l("div",_e,"...")):m("",!0)],512),_.value==="chat"?(n(),l("div",he,[H(e("input",{"onUpdate:modelValue":y[0]||(y[0]=o=>g.value=o),onKeyup:O(N,["enter"]),disabled:d.value,placeholder:a(i).t("send")},null,40,ge),[[J,g.value]]),e("button",{class:"primary",onClick:N,disabled:d.value||!g.value.trim()},s(a(i).t("send")),9,ye)])):m("",!0),_.value==="done"&&r.value?(n(),l("div",fe,[e("h3",null,s(a(i).t("debrief")),1),e("p",null,[e("span",{class:T(["badge",r.value.outcome])},s(r.value.outcome==="won"?a(i).t("won"):a(i).t("lost")),3),p(" — "+s(a(i).t("score"))+": ",1),e("strong",null,s(r.value.score),1)]),e("p",null,[e("strong",null,s(a(i).t("pain"))+":",1),p(" "+s(r.value.pain||"—"),1)]),e("p",null,[e("strong",null,s(a(i).t("why"))+":",1),p(" "+s(r.value.why),1)]),r.value.coaching&&r.value.coaching.length?(n(),l("div",be,[y[2]||(y[2]=e("strong",null,"Coaching:",-1)),e("ul",null,[(n(!0),l(j,null,S(r.value.coaching,(o,v)=>(n(),l("li",{key:v},s(o),1))),128))])])):m("",!0),e("details",null,[e("summary",null,[b(a(Y),{size:15,"stroke-width":1.8,style:{"vertical-align":"-2px"}}),p(" "+s(a(i).t("reveal")),1)]),r.value.revealed_persona?(n(),l("div",ke,[(n(!0),l(j,null,S(r.value.revealed_persona,(o,v)=>(n(),l("div",{key:v,class:"rev"},[e("span",xe,s(G(v)),1),e("span",we,s(K(o)),1)]))),128))])):m("",!0)]),b(V,{to:"/"},{default:z(()=>[e("button",Ce,s(a(i).t("dashboard")),1)]),_:1})])):m("",!0)]))])}}},Ne=$(je,[["__scopeId","data-v-310aef08"]]);export{Ne as default}; diff --git a/frontend/dist/assets/Chat-o6rfEiwI.js b/frontend/dist/assets/Chat-o6rfEiwI.js new file mode 100644 index 0000000..0e8c2a6 --- /dev/null +++ b/frontend/dist/assets/Chat-o6rfEiwI.js @@ -0,0 +1,6 @@ +import{k as G,_ as K,l as P,s as S,c as l,m as k,n as D,u as a,a as e,t,i as r,F as T,q as L,j as g,A as w,e as _,w as R,v as $,b as q,h as H,r as d,C as J,x as O,o as n}from"./index-Dv9XjhnS.js";import{T as U}from"./target-Do-370k4.js";import{A as Q}from"./arrow-left-haz-8IhO.js";/** + * @license lucide-vue-next v1.0.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W=G("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]),X={key:0,class:"card"},Y={style:{"margin-top":"0"}},Z=["onClick"],ee={class:"row",style:{"align-items":"center"}},se={key:0,class:"badge line"},te={key:1,class:"badge facebook"},ae={class:"muted",style:{"margin-top":"6px"}},le=["disabled"],ne={key:1},oe={class:"card guide"},ie={style:{margin:"6px 0 0","line-height":"1.7"}},re={class:"row",style:{"align-items":"center","margin-bottom":"12px"}},ce={style:{margin:"0"}},ue={key:0,class:"muted"},de={key:0,class:"bubble msg-customer muted"},ve={key:0,class:"composer"},pe=["disabled","placeholder"],me=["disabled"],_e={key:1,class:"card debrief"},he={key:0},ge={key:0,class:"reveal-grid"},ye={class:"rk"},fe={class:"rv"},be={class:"primary",style:{"margin-top":"12px"}},ke={__name:"Chat",setup(we){const N=H(),y=N.params.gid,x=N.params.pid,c=d(null),u=d("pick"),v=d([]),h=d(""),f=d(!1),o=d(null),V=d(null),b=d("social"),z=[{id:"social",emoji:"💬",init:"customer",label:"Social Media (แชท)",desc:"ลูกค้าทักมาหาคุณก่อน — โทนสั้น ทักๆ ตามสไตล์แชท"},{id:"f2f_call",emoji:"📞",init:"seller",label:"พบหน้า / โทรศัพท์",desc:"คุณต้องเป็นฝ่ายเปิดการสนทนาเชิงรุกกับลีด (ผู้ฝึกทักก่อน)"},{id:"recontact",emoji:"⏳",init:"customer",label:"ลูกค้ากลับมาติดต่อ (1-3 เดือน)",desc:"เคยได้รับข้อมูลไปแล้ว ตอนนี้กลับมาติดต่อ พร้อมตัดสินใจมากขึ้น"}];function A(){J(()=>{C.value&&(C.value.scrollTop=C.value.scrollHeight)})}const C=d(null);async function I(){u.value="chat";const s=await S.chatStart(y,x,{scenario:b.value});V.value=s.session.id,v.value=s.session.messages||[],v.value.length&&A()}P(async()=>{c.value=(await S.getPersona(y,x)).persona;try{const s=await S.chatResume(y,x);V.value=s.session.id,v.value=s.session.messages||[],v.value.length&&!s.session.debrief?(u.value="chat",z.find(j=>j.id===s.scenario)&&(b.value=s.scenario)):s.session.debrief&&(o.value=s.session.debrief,v.value=s.session.messages||[],u.value="done"),v.value.length&&A()}catch{u.value="pick"}});async function B(){if(h.value.trim()){f.value=!0;try{const s=await S.chatSend(y,x,h.value.trim());v.value=s.messages,h.value="",s.finished&&(o.value=s.debrief||null,u.value="done"),A()}catch(s){alert(s.message)}finally{f.value=!1}}}const E={name:"ชื่อ",tier:"ระดับ",difficulty:"ความยาก",profession:"อาชีพ",age_group:"ช่วงอายุ",location:"พื้นที่",income:"รายได้",budget:"งบประมาณ",lifestyle:"ไลฟ์สไตล์",background:"ภูมิหลัง",personality:"บุคลิก",communication_style:"สไตล์การสื่อสาร",goal:"เป้าหมาย",decision_timeline:"กรอบตัดสินใจ",pains:"ปัญหา (Pain)",objections:"ข้อโต้แย้ง",negotiation_levers:"สิ่งที่ใช้ต่อรอง",opener:"บทเปิดบทสนทนา",channel:"ช่องทาง",initiation_mode:"ใครเริ่มก่อน",product_context:"บริบทสินค้า"};function F(s){return E[s]||s}function M(s){return Array.isArray(s)?s.join(", "):s&&typeof s=="object"?JSON.stringify(s):String(s??"—")}return(s,p)=>{const j=O("router-link");return n(),l("div",null,[k(j,{to:`/groups/${a(y)}/personas`,class:"btn-back"},{default:D(()=>[k(a(Q),{size:16,"stroke-width":2}),g(" "+t(a(r).t("personas")),1)]),_:1},8,["to"]),u.value==="pick"?(n(),l("div",X,[e("h3",Y,"🎬 "+t(a(r).t("chooseScenario")),1),p[1]||(p[1]=e("p",{class:"muted",style:{"margin-top":"0"}},"เลือกสถานการณ์ที่อยากฝึกการขาย — แต่ละแบบกำหนดว่าใครทักก่อน และโทนการสนทนา",-1)),(n(),l(T,null,L(z,i=>e("div",{key:i.id,class:w(["scenario",{sel:b.value===i.id}]),onClick:m=>b.value=i.id},[e("div",ee,[e("strong",null,t(i.emoji)+" "+t(i.label),1),i.init==="customer"?(n(),l("span",se,"ลูกค้าทักก่อน")):(n(),l("span",te,"คุณต้องทักก่อน (เชิงรุก)"))]),e("div",ae,t(i.desc),1)],10,Z)),64)),e("button",{class:"primary",style:{"margin-top":"16px",width:"100%"},disabled:!b.value,onClick:I}," ▶ "+t(a(r).t("start")),9,le)])):(n(),l("div",ne,[e("div",oe,[e("strong",null,[k(a(U),{size:17,"stroke-width":1.8,style:{"vertical-align":"-3px"}}),g(" "+t(a(r).t("chatGuideTitle")),1)]),e("p",ie,t(a(r).t("chatGuideText")),1)]),e("div",re,[e("h2",ce,t(c.value?c.value.name:"..."),1),e("span",{class:w(["badge",c.value&&c.value.channel])},t(c.value?c.value.channel:""),3),c.value?(n(),l("span",ue,t(c.value.profession)+" · "+t(c.value.age_group),1)):_("",!0),u.value==="done"?(n(),l("span",{key:1,class:w(["badge",o.value&&o.value.outcome])},t(o.value&&o.value.outcome==="won"?a(r).t("won"):a(r).t("lost")),3)):_("",!0)]),e("div",{class:"thread",ref_key:"thread",ref:C},[(n(!0),l(T,null,L(v.value,(i,m)=>(n(),l("div",{key:m,class:w(["bubble",i.role==="seller"?"msg-seller":i.role==="system"?"msg-system":"msg-customer"])},t(i.text),3))),128)),f.value?(n(),l("div",de,"...")):_("",!0)],512),u.value==="chat"?(n(),l("div",ve,[R(e("input",{"onUpdate:modelValue":p[0]||(p[0]=i=>h.value=i),onKeyup:q(B,["enter"]),disabled:f.value,placeholder:a(r).t("send")},null,40,pe),[[$,h.value]]),e("button",{class:"primary",onClick:B,disabled:f.value||!h.value.trim()},t(a(r).t("send")),9,me)])):_("",!0),u.value==="done"&&o.value?(n(),l("div",_e,[e("h3",null,t(a(r).t("debrief")),1),e("p",null,[e("span",{class:w(["badge",o.value.outcome])},t(o.value.outcome==="won"?a(r).t("won"):a(r).t("lost")),3),g(" — "+t(a(r).t("score"))+": ",1),e("strong",null,t(o.value.score),1)]),e("p",null,[e("strong",null,t(a(r).t("pain"))+":",1),g(" "+t(o.value.pain||"—"),1)]),e("p",null,[e("strong",null,t(a(r).t("why"))+":",1),g(" "+t(o.value.why),1)]),o.value.coaching&&o.value.coaching.length?(n(),l("div",he,[p[2]||(p[2]=e("strong",null,"Coaching:",-1)),e("ul",null,[(n(!0),l(T,null,L(o.value.coaching,(i,m)=>(n(),l("li",{key:m},t(i),1))),128))])])):_("",!0),e("details",null,[e("summary",null,[k(a(W),{size:15,"stroke-width":1.8,style:{"vertical-align":"-2px"}}),g(" "+t(a(r).t("reveal")),1)]),o.value.revealed_persona?(n(),l("div",ge,[(n(!0),l(T,null,L(o.value.revealed_persona,(i,m)=>(n(),l("div",{key:m,class:"rev"},[e("span",ye,t(F(m)),1),e("span",fe,t(M(i)),1)]))),128))])):_("",!0)]),k(j,{to:"/"},{default:D(()=>[e("button",be,t(a(r).t("dashboard")),1)]),_:1})])):_("",!0)]))])}}},Se=K(ke,[["__scopeId","data-v-4da228fb"]]);export{Se as default}; diff --git a/frontend/dist/assets/GroupBuilder-4jGJS7rQ.js b/frontend/dist/assets/GroupBuilder-5J7CyUbw.js similarity index 98% rename from frontend/dist/assets/GroupBuilder-4jGJS7rQ.js rename to frontend/dist/assets/GroupBuilder-5J7CyUbw.js index 6ad67d2..d5db9be 100644 --- a/frontend/dist/assets/GroupBuilder-4jGJS7rQ.js +++ b/frontend/dist/assets/GroupBuilder-5J7CyUbw.js @@ -1,4 +1,4 @@ -import{k as g,_ as M,c as f,m as d,n as V,a as e,u as l,j as r,t as s,i as o,w as u,v as y,D as k,e as C,x as z,r as v,s as B,g as A,o as x}from"./index-tI5UDFg-.js";import{A as P}from"./arrow-left-C_e4n_39.js";/** +import{k as g,_ as M,c as f,m as d,n as V,a as e,u as l,j as r,t as s,i as o,w as u,v as y,D as k,e as C,x as z,r as v,s as B,g as A,o as x}from"./index-Dv9XjhnS.js";import{A as P}from"./arrow-left-haz-8IhO.js";/** * @license lucide-vue-next v1.0.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/GroupEdit-BzqeiR8Z.js b/frontend/dist/assets/GroupEdit-C8F_eu_z.js similarity index 99% rename from frontend/dist/assets/GroupEdit-BzqeiR8Z.js rename to frontend/dist/assets/GroupEdit-C8F_eu_z.js index 9f917ad..b9b0604 100644 --- a/frontend/dist/assets/GroupEdit-BzqeiR8Z.js +++ b/frontend/dist/assets/GroupEdit-C8F_eu_z.js @@ -1,4 +1,4 @@ -import{k as T,_ as F,E as O,o as m,c as f,a as e,t as i,w as o,v as u,D as M,e as _,G as I,r as k,l as q,m as j,n as D,u as c,j as y,i as B,B as J,F as N,q as P,H,h as R,s as z,x as K,A as E}from"./index-tI5UDFg-.js";import{U as Q}from"./users-qicnhyDs.js";/** +import{k as T,_ as F,E as O,o as m,c as f,a as e,t as i,w as o,v as u,D as M,e as _,G as I,r as k,l as q,m as j,n as D,u as c,j as y,i as B,B as J,F as N,q as P,H,h as R,s as z,x as K,A as E}from"./index-Dv9XjhnS.js";import{U as Q}from"./users-CFr5Kj99.js";/** * @license lucide-vue-next v1.0.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/Login-BvMoAa9d.js b/frontend/dist/assets/Login-DM1SnTQg.js similarity index 92% rename from frontend/dist/assets/Login-BvMoAa9d.js rename to frontend/dist/assets/Login-DM1SnTQg.js index 55f677a..da0c063 100644 --- a/frontend/dist/assets/Login-BvMoAa9d.js +++ b/frontend/dist/assets/Login-DM1SnTQg.js @@ -1 +1 @@ -import{_ as b,c as d,a as e,t as s,u as c,i as o,w as y,v as x,b as w,d as k,e as S,r as l,f,g as V,h as B,o as v}from"./index-tI5UDFg-.js";const C={class:"login-wrap"},D={class:"card login-card"},K={class:"pw-wrap"},E=["type"],L=["aria-label"],M={key:0,class:"error",role:"alert"},N=["disabled"],R={key:0,class:"spinner"},U={key:1},q={__name:"Login",setup(H){const g=B(),_=V(),n=l(""),u=l(""),a=l(!1),r=l(""),i=l(!1);async function m(){r.value="",i.value=!0;try{await f.login(n.value.trim(),u.value),f.mustSetup?_.push({path:"/setup"}):_.push(g.query.redirect||"/")}catch{r.value=o.t("loginError")}finally{i.value=!1}}return(h,t)=>(v(),d("div",C,[e("div",D,[e("h1",null,"🎯 "+s(c(o).t("app")),1),t[3]||(t[3]=e("p",{class:"muted",style:{"margin-top":"-8px"}},"Sales training simulator",-1)),e("label",null,s(c(o).t("username")),1),y(e("input",{"onUpdate:modelValue":t[0]||(t[0]=p=>n.value=p),type:"text",autocomplete:"username",onKeyup:w(m,["enter"])},null,544),[[x,n.value]]),e("label",null,s(c(o).t("password")),1),e("div",K,[y(e("input",{"onUpdate:modelValue":t[1]||(t[1]=p=>u.value=p),type:a.value?"text":"password",autocomplete:"current-password",onKeyup:w(m,["enter"])},null,40,E),[[k,u.value]]),e("button",{type:"button",class:"pw-toggle",onClick:t[2]||(t[2]=p=>a.value=!a.value),"aria-label":a.value?"Hide password":"Show password"},s(a.value?"🙈":"👁"),9,L)]),r.value?(v(),d("div",M,s(r.value),1)):S("",!0),e("button",{class:"primary",style:{width:"100%","margin-top":"16px"},disabled:i.value||!n.value||!u.value,onClick:m},[i.value?(v(),d("span",R)):(v(),d("span",U,s(c(o).t("login")),1))],8,N)])]))}},P=b(q,[["__scopeId","data-v-f7904d9f"]]);export{P as default}; +import{_ as b,c as d,a as e,t as s,u as c,i as o,w as y,v as x,b as w,d as k,e as S,r as l,f,g as V,h as B,o as v}from"./index-Dv9XjhnS.js";const C={class:"login-wrap"},D={class:"card login-card"},K={class:"pw-wrap"},E=["type"],L=["aria-label"],M={key:0,class:"error",role:"alert"},N=["disabled"],R={key:0,class:"spinner"},U={key:1},q={__name:"Login",setup(H){const g=B(),_=V(),n=l(""),u=l(""),a=l(!1),r=l(""),i=l(!1);async function m(){r.value="",i.value=!0;try{await f.login(n.value.trim(),u.value),f.mustSetup?_.push({path:"/setup"}):_.push(g.query.redirect||"/")}catch{r.value=o.t("loginError")}finally{i.value=!1}}return(h,t)=>(v(),d("div",C,[e("div",D,[e("h1",null,"🎯 "+s(c(o).t("app")),1),t[3]||(t[3]=e("p",{class:"muted",style:{"margin-top":"-8px"}},"Sales training simulator",-1)),e("label",null,s(c(o).t("username")),1),y(e("input",{"onUpdate:modelValue":t[0]||(t[0]=p=>n.value=p),type:"text",autocomplete:"username",onKeyup:w(m,["enter"])},null,544),[[x,n.value]]),e("label",null,s(c(o).t("password")),1),e("div",K,[y(e("input",{"onUpdate:modelValue":t[1]||(t[1]=p=>u.value=p),type:a.value?"text":"password",autocomplete:"current-password",onKeyup:w(m,["enter"])},null,40,E),[[k,u.value]]),e("button",{type:"button",class:"pw-toggle",onClick:t[2]||(t[2]=p=>a.value=!a.value),"aria-label":a.value?"Hide password":"Show password"},s(a.value?"🙈":"👁"),9,L)]),r.value?(v(),d("div",M,s(r.value),1)):S("",!0),e("button",{class:"primary",style:{width:"100%","margin-top":"16px"},disabled:i.value||!n.value||!u.value,onClick:m},[i.value?(v(),d("span",R)):(v(),d("span",U,s(c(o).t("login")),1))],8,N)])]))}},P=b(q,[["__scopeId","data-v-f7904d9f"]]);export{P as default}; diff --git a/frontend/dist/assets/MyBoard-CdXG-0Ii.js b/frontend/dist/assets/MyBoard-DnLYF8gv.js similarity index 98% rename from frontend/dist/assets/MyBoard-CdXG-0Ii.js rename to frontend/dist/assets/MyBoard-DnLYF8gv.js index 3784819..e0745df 100644 --- a/frontend/dist/assets/MyBoard-CdXG-0Ii.js +++ b/frontend/dist/assets/MyBoard-DnLYF8gv.js @@ -1,4 +1,4 @@ -import{k as x,_ as f,l as k,s as p,c as r,a as t,m as b,u as e,j as B,t as s,i as a,e as v,w as N,y as D,F as S,q as T,r as h,z as c,o as i,A as V}from"./index-tI5UDFg-.js";/** +import{k as x,_ as f,l as k,s as p,c as r,a as t,m as b,u as e,j as B,t as s,i as a,e as v,w as N,y as D,F as S,q as T,r as h,z as c,o as i,A as V}from"./index-Dv9XjhnS.js";/** * @license lucide-vue-next v1.0.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/Personas-BXejtBr0.js b/frontend/dist/assets/Personas-Cngg_FjC.js similarity index 95% rename from frontend/dist/assets/Personas-BXejtBr0.js rename to frontend/dist/assets/Personas-Cngg_FjC.js index 5f9c514..8d48bb3 100644 --- a/frontend/dist/assets/Personas-BXejtBr0.js +++ b/frontend/dist/assets/Personas-Cngg_FjC.js @@ -1 +1 @@ -import{_ as T,l as $,c as r,m as d,n as m,a as t,t as s,u as e,i as n,f as g,j as _,e as w,F as y,q as p,h as L,s as N,x as V,r as b,o as a,S as I,A as h,B as A}from"./index-tI5UDFg-.js";import{T as S}from"./target-CylhW5SK.js";import{A as j}from"./arrow-left-C_e4n_39.js";const F={class:"row",style:{"align-items":"center"}},q={style:{margin:"0"}},D={class:"muted",style:{"margin-left":"auto"}},E={key:0,class:"card guide"},M={key:1,class:"row",style:{margin:"12px 0",gap:"10px"}},R={class:"primary"},G={class:"grid"},H={class:"row",style:{"justify-content":"space-between"}},J={class:"diff"},K={class:"muted"},O={class:"muted"},Q={class:"muted"},U={class:"muted",style:{"margin-top":"6px"}},W={class:"primary",style:{width:"100%"}},X={class:"primary",style:{width:"100%"}},Y={key:1,class:"muted",style:{"margin-top":"auto","font-size":"12px"}},Z={__name:"Personas",setup(tt){const c=L().params.gid,k=b([]),B=b(!0);async function C(){try{k.value=(await N.listPersonas(c)).personas}finally{B.value=!1}}function z(l){return k.value.filter(i=>i.tier===l)}function P(l){return n.t(l==="A"?"tierA":l==="B"?"tierB":"tierC")}function v(l){return l==="won"?n.t("won"):l==="lost"?n.t("lost"):n.t("notTried")}return $(C),(l,i)=>{const u=V("router-link");return a(),r("div",null,[d(u,{to:"/training",class:"btn-back"},{default:m(()=>[d(e(j),{size:16,"stroke-width":2}),_(" "+s(e(n).t("training")),1)]),_:1}),t("div",F,[t("h2",q,s(e(n).t("personas")),1),t("span",D,s(e(n).t("selectPersona")),1)]),e(g).isAdmin?w("",!0):(a(),r("div",E,[t("strong",null,[d(e(S),{size:17,"stroke-width":1.8,style:{"vertical-align":"-3px"}}),i[0]||(i[0]=_(" วิธีฝึก",-1))]),i[1]||(i[1]=t("ol",{style:{margin:"8px 0 0","padding-left":"20px","line-height":"1.8"}},[t("li",null,"เลือกลูกค้าจำลอง (บุคคลต้นแบบ) คนหนึ่งที่อยากฝึกด้วย"),t("li",null,"ระดับ A ง่ายสุด → ระดับ C ยากสุด (ดูจากดาว ★ ความยาก)"),t("li",null,"กดปุ่มสำหรับฝึกแชทกับลูกค้าคนนั้น (ฝึกได้คนละครั้งเท่านั้น)")],-1))])),e(g).isAdmin?(a(),r("div",M,[d(u,{to:`/admin/groups/${e(c)}/edit`},{default:m(()=>[t("button",R,[d(e(I),{size:18,"stroke-width":1.8}),_(" "+s(e(n).t("managePersonas")),1)])]),_:1},8,["to"]),i[2]||(i[2]=t("span",{class:"muted"},"Admin: จัดการรายละเอียดบุคคลต้นแบบได้ที่นี่",-1))])):w("",!0),(a(),r(y,null,p(["A","B","C"],f=>t("div",{key:f,style:{margin:"20px 0"}},[t("h4",null,s(P(f)),1),t("div",G,[(a(!0),r(y,null,p(z(f),o=>(a(),r("div",{key:o.id,class:"card pcard lift"},[t("div",H,[t("strong",null,s(o.name),1),t("span",{class:h(["badge",o.my_outcome])},s(v(o.my_outcome)),3)]),t("div",J,[(a(),r(y,null,p(5,x=>t("span",{key:x,class:h(["star",{on:x<=(o.difficulty||1)}])},"★",2)),64)),t("span",K,s(e(n).t("difficulty"))+" "+s(o.difficulty||1)+"/5",1)]),t("div",O,[_(s(o.profession)+" · "+s(o.age_group)+" · "+s(o.location),1),i[3]||(i[3]=t("br",null,null,-1)),t("span",{class:h(["badge",o.channel])},s(o.channel),3),t("span",Q," · "+s(o.initiation_mode==="seller"?e(n).t("sellerInitiated"):e(n).t("customerInitiated")),1)]),t("div",U,s(o.product_context),1),e(g).isAdmin?(a(),A(u,{key:0,to:`/groups/${e(c)}/chat/${o.id}`,style:{"margin-top":"auto"}},{default:m(()=>[t("button",W,s(e(n).t("chat")),1)]),_:1},8,["to"])):(a(),r(y,{key:1},[o.my_outcome==="not_tried"?(a(),A(u,{key:0,to:`/groups/${e(c)}/chat/${o.id}`,style:{"margin-top":"auto"}},{default:m(()=>[t("button",X,s(e(n).t("chat")),1)]),_:1},8,["to"])):(a(),r("div",Y,"✓ "+s(e(n).t("trained"))+" ("+s(v(o.my_outcome))+")",1))],64))]))),128))])])),64))])}}},at=T(Z,[["__scopeId","data-v-46d50c99"]]);export{at as default}; +import{_ as T,l as $,c as r,m as d,n as m,a as t,t as s,u as e,i as n,f as g,j as _,e as w,F as y,q as p,h as L,s as N,x as V,r as b,o as a,S as I,A as h,B as A}from"./index-Dv9XjhnS.js";import{T as S}from"./target-Do-370k4.js";import{A as j}from"./arrow-left-haz-8IhO.js";const F={class:"row",style:{"align-items":"center"}},q={style:{margin:"0"}},D={class:"muted",style:{"margin-left":"auto"}},E={key:0,class:"card guide"},M={key:1,class:"row",style:{margin:"12px 0",gap:"10px"}},R={class:"primary"},G={class:"grid"},H={class:"row",style:{"justify-content":"space-between"}},J={class:"diff"},K={class:"muted"},O={class:"muted"},Q={class:"muted"},U={class:"muted",style:{"margin-top":"6px"}},W={class:"primary",style:{width:"100%"}},X={class:"primary",style:{width:"100%"}},Y={key:1,class:"muted",style:{"margin-top":"auto","font-size":"12px"}},Z={__name:"Personas",setup(tt){const c=L().params.gid,k=b([]),B=b(!0);async function C(){try{k.value=(await N.listPersonas(c)).personas}finally{B.value=!1}}function z(l){return k.value.filter(i=>i.tier===l)}function P(l){return n.t(l==="A"?"tierA":l==="B"?"tierB":"tierC")}function v(l){return l==="won"?n.t("won"):l==="lost"?n.t("lost"):n.t("notTried")}return $(C),(l,i)=>{const u=V("router-link");return a(),r("div",null,[d(u,{to:"/training",class:"btn-back"},{default:m(()=>[d(e(j),{size:16,"stroke-width":2}),_(" "+s(e(n).t("training")),1)]),_:1}),t("div",F,[t("h2",q,s(e(n).t("personas")),1),t("span",D,s(e(n).t("selectPersona")),1)]),e(g).isAdmin?w("",!0):(a(),r("div",E,[t("strong",null,[d(e(S),{size:17,"stroke-width":1.8,style:{"vertical-align":"-3px"}}),i[0]||(i[0]=_(" วิธีฝึก",-1))]),i[1]||(i[1]=t("ol",{style:{margin:"8px 0 0","padding-left":"20px","line-height":"1.8"}},[t("li",null,"เลือกลูกค้าจำลอง (บุคคลต้นแบบ) คนหนึ่งที่อยากฝึกด้วย"),t("li",null,"ระดับ A ง่ายสุด → ระดับ C ยากสุด (ดูจากดาว ★ ความยาก)"),t("li",null,"กดปุ่มสำหรับฝึกแชทกับลูกค้าคนนั้น (ฝึกได้คนละครั้งเท่านั้น)")],-1))])),e(g).isAdmin?(a(),r("div",M,[d(u,{to:`/admin/groups/${e(c)}/edit`},{default:m(()=>[t("button",R,[d(e(I),{size:18,"stroke-width":1.8}),_(" "+s(e(n).t("managePersonas")),1)])]),_:1},8,["to"]),i[2]||(i[2]=t("span",{class:"muted"},"Admin: จัดการรายละเอียดบุคคลต้นแบบได้ที่นี่",-1))])):w("",!0),(a(),r(y,null,p(["A","B","C"],f=>t("div",{key:f,style:{margin:"20px 0"}},[t("h4",null,s(P(f)),1),t("div",G,[(a(!0),r(y,null,p(z(f),o=>(a(),r("div",{key:o.id,class:"card pcard lift"},[t("div",H,[t("strong",null,s(o.name),1),t("span",{class:h(["badge",o.my_outcome])},s(v(o.my_outcome)),3)]),t("div",J,[(a(),r(y,null,p(5,x=>t("span",{key:x,class:h(["star",{on:x<=(o.difficulty||1)}])},"★",2)),64)),t("span",K,s(e(n).t("difficulty"))+" "+s(o.difficulty||1)+"/5",1)]),t("div",O,[_(s(o.profession)+" · "+s(o.age_group)+" · "+s(o.location),1),i[3]||(i[3]=t("br",null,null,-1)),t("span",{class:h(["badge",o.channel])},s(o.channel),3),t("span",Q," · "+s(o.initiation_mode==="seller"?e(n).t("sellerInitiated"):e(n).t("customerInitiated")),1)]),t("div",U,s(o.product_context),1),e(g).isAdmin?(a(),A(u,{key:0,to:`/groups/${e(c)}/chat/${o.id}`,style:{"margin-top":"auto"}},{default:m(()=>[t("button",W,s(e(n).t("chat")),1)]),_:1},8,["to"])):(a(),r(y,{key:1},[o.my_outcome==="not_tried"?(a(),A(u,{key:0,to:`/groups/${e(c)}/chat/${o.id}`,style:{"margin-top":"auto"}},{default:m(()=>[t("button",X,s(e(n).t("chat")),1)]),_:1},8,["to"])):(a(),r("div",Y,"✓ "+s(e(n).t("trained"))+" ("+s(v(o.my_outcome))+")",1))],64))]))),128))])])),64))])}}},at=T(Z,[["__scopeId","data-v-46d50c99"]]);export{at as default}; diff --git a/frontend/dist/assets/Settings-D5LYPIGh.js b/frontend/dist/assets/Settings-Bdlfb6I_.js similarity index 99% rename from frontend/dist/assets/Settings-D5LYPIGh.js rename to frontend/dist/assets/Settings-Bdlfb6I_.js index 3be3435..b5a8007 100644 --- a/frontend/dist/assets/Settings-D5LYPIGh.js +++ b/frontend/dist/assets/Settings-Bdlfb6I_.js @@ -1,4 +1,4 @@ -import{k as z,_ as T,r as c,f as i,c as h,a as e,m as k,u as a,S as $,j as v,t as o,i as s,w as x,v as b,e as V,A as S,s as U,o as w}from"./index-tI5UDFg-.js";/** +import{k as z,_ as T,r as c,f as i,c as h,a as e,m as k,u as a,S as $,j as v,t as o,i as s,w as x,v as b,e as V,A as S,s as U,o as w}from"./index-Dv9XjhnS.js";/** * @license lucide-vue-next v1.0.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/Setup-_cGdJHOE.js b/frontend/dist/assets/Setup-DdJ4ptKX.js similarity index 96% rename from frontend/dist/assets/Setup-_cGdJHOE.js rename to frontend/dist/assets/Setup-DdJ4ptKX.js index 796b2e4..1ed16bc 100644 --- a/frontend/dist/assets/Setup-_cGdJHOE.js +++ b/frontend/dist/assets/Setup-DdJ4ptKX.js @@ -1 +1 @@ -import{_ as x,c as v,a as e,t,u as s,i as a,j as S,f as _,w,v as f,b as y,e as V,r,g as K,o as m}from"./index-tI5UDFg-.js";const T={class:"setup-wrap"},B={class:"card setup-card"},N={class:"muted"},U={key:0,class:"error",role:"alert"},C=["disabled"],D={key:0,class:"spinner"},M={key:1},P={__name:"Setup",setup(j){const k=K(),i=r(""),l=r(""),p=r(""),o=r(""),d=r(!1);async function c(){if(o.value="",l.value.length<4){o.value=a.t("passwordTooShort");return}if(l.value!==p.value){o.value=a.t("passwordMismatch");return}d.value=!0;try{await _.finishSetup(i.value.trim(),l.value),k.push("/")}catch(h){o.value=h.message}finally{d.value=!1}}return(h,u)=>{var b,g;return m(),v("div",T,[e("div",B,[e("h1",null,"🔐 "+t(s(a).t("setupTitle")),1),e("p",N,[S(t(s(a).t("setupSubtitle"))+" ",1),e("strong",null,t(((b=s(_).user)==null?void 0:b.name)||((g=s(_).user)==null?void 0:g.username)),1)]),e("label",null,t(s(a).t("email")),1),w(e("input",{"onUpdate:modelValue":u[0]||(u[0]=n=>i.value=n),type:"email",autocomplete:"email",onKeyup:y(c,["enter"])},null,544),[[f,i.value]]),e("label",null,t(s(a).t("newPassword")),1),w(e("input",{"onUpdate:modelValue":u[1]||(u[1]=n=>l.value=n),type:"password",autocomplete:"new-password",onKeyup:y(c,["enter"])},null,544),[[f,l.value]]),e("label",null,t(s(a).t("confirmPassword")),1),w(e("input",{"onUpdate:modelValue":u[2]||(u[2]=n=>p.value=n),type:"password",autocomplete:"new-password",onKeyup:y(c,["enter"])},null,544),[[f,p.value]]),o.value?(m(),v("div",U,t(o.value),1)):V("",!0),e("button",{class:"primary",style:{width:"100%","margin-top":"16px"},disabled:d.value||!i.value||!l.value||l.value!==p.value,onClick:c},[d.value?(m(),v("span",D)):(m(),v("span",M,t(s(a).t("save")),1))],8,C)])])}}},I=x(P,[["__scopeId","data-v-f190e120"]]);export{I as default}; +import{_ as x,c as v,a as e,t,u as s,i as a,j as S,f as _,w,v as f,b as y,e as V,r,g as K,o as m}from"./index-Dv9XjhnS.js";const T={class:"setup-wrap"},B={class:"card setup-card"},N={class:"muted"},U={key:0,class:"error",role:"alert"},C=["disabled"],D={key:0,class:"spinner"},M={key:1},P={__name:"Setup",setup(j){const k=K(),i=r(""),l=r(""),p=r(""),o=r(""),d=r(!1);async function c(){if(o.value="",l.value.length<4){o.value=a.t("passwordTooShort");return}if(l.value!==p.value){o.value=a.t("passwordMismatch");return}d.value=!0;try{await _.finishSetup(i.value.trim(),l.value),k.push("/")}catch(h){o.value=h.message}finally{d.value=!1}}return(h,u)=>{var b,g;return m(),v("div",T,[e("div",B,[e("h1",null,"🔐 "+t(s(a).t("setupTitle")),1),e("p",N,[S(t(s(a).t("setupSubtitle"))+" ",1),e("strong",null,t(((b=s(_).user)==null?void 0:b.name)||((g=s(_).user)==null?void 0:g.username)),1)]),e("label",null,t(s(a).t("email")),1),w(e("input",{"onUpdate:modelValue":u[0]||(u[0]=n=>i.value=n),type:"email",autocomplete:"email",onKeyup:y(c,["enter"])},null,544),[[f,i.value]]),e("label",null,t(s(a).t("newPassword")),1),w(e("input",{"onUpdate:modelValue":u[1]||(u[1]=n=>l.value=n),type:"password",autocomplete:"new-password",onKeyup:y(c,["enter"])},null,544),[[f,l.value]]),e("label",null,t(s(a).t("confirmPassword")),1),w(e("input",{"onUpdate:modelValue":u[2]||(u[2]=n=>p.value=n),type:"password",autocomplete:"new-password",onKeyup:y(c,["enter"])},null,544),[[f,p.value]]),o.value?(m(),v("div",U,t(o.value),1)):V("",!0),e("button",{class:"primary",style:{width:"100%","margin-top":"16px"},disabled:d.value||!i.value||!l.value||l.value!==p.value,onClick:c},[d.value?(m(),v("span",D)):(m(),v("span",M,t(s(a).t("save")),1))],8,C)])])}}},I=x(P,[["__scopeId","data-v-f190e120"]]);export{I as default}; diff --git a/frontend/dist/assets/Training-CHRTy9x1.js b/frontend/dist/assets/Training-D4koaEpE.js similarity index 95% rename from frontend/dist/assets/Training-CHRTy9x1.js rename to frontend/dist/assets/Training-D4koaEpE.js index 4197604..da86b9c 100644 --- a/frontend/dist/assets/Training-CHRTy9x1.js +++ b/frontend/dist/assets/Training-D4koaEpE.js @@ -1 +1 @@ -import{_ as w,l as b,s as A,f as l,c as r,a as t,m as _,u as s,j as m,t as e,i as o,B as y,n as h,e as f,F as C,q as N,r as g,x as P,o as i,A as v}from"./index-tI5UDFg-.js";import{T}from"./target-CylhW5SK.js";import{P as B}from"./plus-DCrJlDOb.js";const z={class:"row",style:{"align-items":"center","margin-bottom":"16px"}},V={style:{margin:"0"}},j={style:{"margin-left":"auto"}},F={class:"primary"},L={class:"muted"},S={key:0,class:"card",style:{"min-height":"80px"}},$={key:1,class:"card empty-state"},q={key:0},D={key:1},E={class:"grid"},G={class:"card lift train-card"},I={class:"row",style:{"justify-content":"space-between"}},M={class:"muted",style:{margin:"6px 0 12px"}},H={class:"row",style:{gap:"8px"}},J={class:"muted"},K={class:"primary",style:{width:"100%","margin-top":"12px"}},O={__name:"Training",setup(Q){const c=g([]),u=g(!0);function k(a){return a.sales_kit&&a.sales_kit.productName||a.input&&a.input.product||""}function x(a){return a.personas||a.persona_count||0}return b(async()=>{try{const a=(await A.listGroups()).groups||[];c.value=l.isAdmin?a:a.filter(d=>d.status==="ready")}finally{u.value=!1}}),(a,d)=>{const p=P("router-link");return i(),r("div",null,[t("div",z,[t("h2",V,[_(s(T),{size:22,"stroke-width":1.8,style:{"vertical-align":"-4px"}}),m(" "+e(s(o).t("training")),1)]),t("div",j,[s(l).isAdmin?(i(),y(p,{key:0,to:"/admin/new-group"},{default:h(()=>[t("button",F,[_(s(B),{size:18,"stroke-width":2}),m(" "+e(s(o).t("addProduct")),1)])]),_:1})):f("",!0)])]),t("p",L,e(s(o).t("trainingSubtitle")),1),u.value?(i(),r("div",S,[...d[0]||(d[0]=[t("div",{class:"skeleton",style:{height:"50px"}},null,-1)])])):c.value.length===0?(i(),r("div",$,[t("strong",null,e(s(o).t("noTraining")),1),s(l).isAdmin?(i(),r("span",q,'Click "'+e(s(o).t("addProduct"))+'" to create a persona group.',1)):(i(),r("span",D,"Ask an admin to create a persona group first."))])):f("",!0),t("div",E,[(i(!0),r(C,null,N(c.value,n=>(i(),y(p,{key:n.id,to:s(l).isAdmin?`/admin/groups/${n.id}/edit`:`/groups/${n.id}/personas`,style:{"text-decoration":"none"}},{default:h(()=>[t("div",G,[t("div",I,[t("strong",null,e(n.title),1),t("span",{class:v(["badge",n.status==="ready"?"ready":"draft"])},e(n.status),3)]),t("div",M,e(k(n)),1),t("div",H,[t("span",{class:v(["badge",n.channel||"line"])},e(n.channel||"line"),3),t("span",J,e(x(n))+" "+e(s(o).t("personas").toLowerCase()),1)]),t("button",K,e(s(l).isAdmin?n.status==="ready"?s(o).t("managePersonas"):s(o).t("analyze"):s(o).t("selectPersona")),1)])]),_:2},1032,["to"]))),128))])])}}},X=w(O,[["__scopeId","data-v-1e5bd92b"]]);export{X as default}; +import{_ as w,l as b,s as A,f as l,c as r,a as t,m as _,u as s,j as m,t as e,i as o,B as y,n as h,e as f,F as C,q as N,r as g,x as P,o as i,A as v}from"./index-Dv9XjhnS.js";import{T}from"./target-Do-370k4.js";import{P as B}from"./plus-Dg6sDA5g.js";const z={class:"row",style:{"align-items":"center","margin-bottom":"16px"}},V={style:{margin:"0"}},j={style:{"margin-left":"auto"}},F={class:"primary"},L={class:"muted"},S={key:0,class:"card",style:{"min-height":"80px"}},$={key:1,class:"card empty-state"},q={key:0},D={key:1},E={class:"grid"},G={class:"card lift train-card"},I={class:"row",style:{"justify-content":"space-between"}},M={class:"muted",style:{margin:"6px 0 12px"}},H={class:"row",style:{gap:"8px"}},J={class:"muted"},K={class:"primary",style:{width:"100%","margin-top":"12px"}},O={__name:"Training",setup(Q){const c=g([]),u=g(!0);function k(a){return a.sales_kit&&a.sales_kit.productName||a.input&&a.input.product||""}function x(a){return a.personas||a.persona_count||0}return b(async()=>{try{const a=(await A.listGroups()).groups||[];c.value=l.isAdmin?a:a.filter(d=>d.status==="ready")}finally{u.value=!1}}),(a,d)=>{const p=P("router-link");return i(),r("div",null,[t("div",z,[t("h2",V,[_(s(T),{size:22,"stroke-width":1.8,style:{"vertical-align":"-4px"}}),m(" "+e(s(o).t("training")),1)]),t("div",j,[s(l).isAdmin?(i(),y(p,{key:0,to:"/admin/new-group"},{default:h(()=>[t("button",F,[_(s(B),{size:18,"stroke-width":2}),m(" "+e(s(o).t("addProduct")),1)])]),_:1})):f("",!0)])]),t("p",L,e(s(o).t("trainingSubtitle")),1),u.value?(i(),r("div",S,[...d[0]||(d[0]=[t("div",{class:"skeleton",style:{height:"50px"}},null,-1)])])):c.value.length===0?(i(),r("div",$,[t("strong",null,e(s(o).t("noTraining")),1),s(l).isAdmin?(i(),r("span",q,'Click "'+e(s(o).t("addProduct"))+'" to create a persona group.',1)):(i(),r("span",D,"Ask an admin to create a persona group first."))])):f("",!0),t("div",E,[(i(!0),r(C,null,N(c.value,n=>(i(),y(p,{key:n.id,to:s(l).isAdmin?`/admin/groups/${n.id}/edit`:`/groups/${n.id}/personas`,style:{"text-decoration":"none"}},{default:h(()=>[t("div",G,[t("div",I,[t("strong",null,e(n.title),1),t("span",{class:v(["badge",n.status==="ready"?"ready":"draft"])},e(n.status),3)]),t("div",M,e(k(n)),1),t("div",H,[t("span",{class:v(["badge",n.channel||"line"])},e(n.channel||"line"),3),t("span",J,e(x(n))+" "+e(s(o).t("personas").toLowerCase()),1)]),t("button",K,e(s(l).isAdmin?n.status==="ready"?s(o).t("managePersonas"):s(o).t("analyze"):s(o).t("selectPersona")),1)])]),_:2},1032,["to"]))),128))])])}}},X=w(O,[["__scopeId","data-v-1e5bd92b"]]);export{X as default}; diff --git a/frontend/dist/assets/arrow-left-C_e4n_39.js b/frontend/dist/assets/arrow-left-haz-8IhO.js similarity index 86% rename from frontend/dist/assets/arrow-left-C_e4n_39.js rename to frontend/dist/assets/arrow-left-haz-8IhO.js index 9ab2310..e693baa 100644 --- a/frontend/dist/assets/arrow-left-C_e4n_39.js +++ b/frontend/dist/assets/arrow-left-haz-8IhO.js @@ -1,4 +1,4 @@ -import{k as e}from"./index-tI5UDFg-.js";/** +import{k as e}from"./index-Dv9XjhnS.js";/** * @license lucide-vue-next v1.0.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/index-tI5UDFg-.js b/frontend/dist/assets/index-Dv9XjhnS.js similarity index 76% rename from frontend/dist/assets/index-tI5UDFg-.js rename to frontend/dist/assets/index-Dv9XjhnS.js index 4a71c86..1b7d56d 100644 --- a/frontend/dist/assets/index-tI5UDFg-.js +++ b/frontend/dist/assets/index-Dv9XjhnS.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Login-BvMoAa9d.js","assets/Login-D3svPLnW.css","assets/Setup-_cGdJHOE.js","assets/Setup-BdS_6JlN.css","assets/Analytics-Ca8FcnIo.js","assets/users-qicnhyDs.js","assets/plus-DCrJlDOb.js","assets/Analytics-D5VrZMJ0.css","assets/MyBoard-CdXG-0Ii.js","assets/MyBoard-B7ypQ1JT.css","assets/Training-CHRTy9x1.js","assets/target-CylhW5SK.js","assets/Training-CeWRER6W.css","assets/Personas-BXejtBr0.js","assets/arrow-left-C_e4n_39.js","assets/Personas-CskAUbZv.css","assets/Chat-fU4aRozx.js","assets/Chat-BPfrVhz_.css","assets/Settings-D5LYPIGh.js","assets/Settings-BCN2EZQ5.css","assets/GroupBuilder-4jGJS7rQ.js","assets/GroupBuilder-CpbMByEC.css","assets/GroupEdit-BzqeiR8Z.js","assets/GroupEdit-D9lmggXK.css","assets/AdminUsers-Bpsek0Me.js","assets/AdminUsers-B0sl0uHS.css"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Login-DM1SnTQg.js","assets/Login-D3svPLnW.css","assets/Setup-DdJ4ptKX.js","assets/Setup-BdS_6JlN.css","assets/Analytics-DpJ0uaAA.js","assets/users-CFr5Kj99.js","assets/plus-Dg6sDA5g.js","assets/Analytics-D5VrZMJ0.css","assets/MyBoard-DnLYF8gv.js","assets/MyBoard-B7ypQ1JT.css","assets/Training-D4koaEpE.js","assets/target-Do-370k4.js","assets/Training-CeWRER6W.css","assets/Personas-Cngg_FjC.js","assets/arrow-left-haz-8IhO.js","assets/Personas-CskAUbZv.css","assets/Chat-o6rfEiwI.js","assets/Chat-D8HchzhD.css","assets/Settings-Bdlfb6I_.js","assets/Settings-BCN2EZQ5.css","assets/GroupBuilder-5J7CyUbw.js","assets/GroupBuilder-CpbMByEC.css","assets/GroupEdit-C8F_eu_z.js","assets/GroupEdit-D9lmggXK.css","assets/AdminUsers-da8uxtrm.js","assets/AdminUsers-B0sl0uHS.css"])))=>i.map(i=>d[i]); (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(r){if(r.ep)return;r.ep=!0;const i=n(r);fetch(r.href,i)}})();/** * @vue/shared v3.5.41 * (c) 2018-present Yuxi (Evan) You and Vue contributors @@ -7,24 +7,24 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Login-BvMoAa9d. * @vue/reactivity v3.5.41 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let fe;class Wo{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&fe&&(fe.active?(this.parent=fe,this.index=(fe.scopes||(fe.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const s=this.scopes.slice();for(t=0,n=s.length;t0&&--this._on===0){if(fe===this)fe=this.prevScope;else{let t=fe;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(un){let t=un;for(un=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;an;){let t=an;for(an=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Ei(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function wi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),zs(s),zo(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function xs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Si(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Si(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===gn)||(e.globalVersion=gn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!xs(e))))return;e.flags|=2;const t=e.dep,n=Z,s=Ie;Z=e,Ie=!0;try{Ei(e);const r=e.fn(e._value);(t.version===0||ze(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{Z=n,Ie=s,wi(e),e.flags&=-3}}function zs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)zs(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function zo(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ie=!0;const Ai=[];function ot(){Ai.push(Ie),Ie=!1}function lt(){const e=Ai.pop();Ie=e===void 0?!0:e}function dr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Z;Z=void 0;try{t()}finally{Z=n}}}let gn=0;class Yo{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Ys{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Z||!Ie||Z===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Z)n=this.activeLink=new Yo(Z,this),Z.deps?(n.prevDep=Z.depsTail,Z.depsTail.nextDep=n,Z.depsTail=n):Z.deps=Z.depsTail=n,xi(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=Z.depsTail,n.nextDep=void 0,Z.depsTail.nextDep=n,Z.depsTail=n,Z.deps===n&&(Z.deps=s)}return n}trigger(t){this.version++,gn++,this.notify(t)}notify(t){Ws();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{qs()}}}function xi(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)xi(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Rs=new WeakMap,Ct=Symbol(""),Ts=Symbol(""),mn=Symbol("");function he(e,t,n){if(Ie&&Z){let s=Rs.get(e);s||Rs.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Ys),r.map=s,r.key=n),r.track()}}function st(e,t,n,s,r,i){const o=Rs.get(e);if(!o){gn++;return}const l=c=>{c&&c.trigger()};if(Ws(),t==="clear")o.forEach(l);else{const c=V(e),f=c&&Gs(n);if(c&&n==="length"){const u=Number(s);o.forEach((h,g)=>{(g==="length"||g===mn||!Je(g)&&g>=u)&&l(h)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),f&&l(o.get(mn)),t){case"add":c?f&&l(o.get("length")):(l(o.get(Ct)),Bt(e)&&l(o.get(Ts)));break;case"delete":c||(l(o.get(Ct)),Bt(e)&&l(o.get(Ts)));break;case"set":Bt(e)&&l(o.get(Ct));break}}qs()}function Dt(e){const t=$(e);return t===e?t:(he(t,"iterate",mn),Pe(e)?t:t.map(Me))}function Qn(e){return he(e=$(e),"iterate",mn),e}function We(e,t){return ct(e)?Kt(Pt(e)?Me(t):t):Me(t)}const Jo={__proto__:null,[Symbol.iterator](){return as(this,Symbol.iterator,e=>We(this,e))},concat(...e){return Dt(this).concat(...e.map(t=>V(t)?Dt(t):t))},entries(){return as(this,"entries",e=>(e[1]=We(this,e[1]),e))},every(e,t){return Xe(this,"every",e,t,void 0,arguments)},filter(e,t){return Xe(this,"filter",e,t,n=>n.map(s=>We(this,s)),arguments)},find(e,t){return Xe(this,"find",e,t,n=>We(this,n),arguments)},findIndex(e,t){return Xe(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Xe(this,"findLast",e,t,n=>We(this,n),arguments)},findLastIndex(e,t){return Xe(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Xe(this,"forEach",e,t,void 0,arguments)},includes(...e){return us(this,"includes",e)},indexOf(...e){return us(this,"indexOf",e)},join(e){return Dt(this).join(e)},lastIndexOf(...e){return us(this,"lastIndexOf",e)},map(e,t){return Xe(this,"map",e,t,void 0,arguments)},pop(){return Zt(this,"pop")},push(...e){return Zt(this,"push",e)},reduce(e,...t){return hr(this,"reduce",e,t)},reduceRight(e,...t){return hr(this,"reduceRight",e,t)},shift(){return Zt(this,"shift")},some(e,t){return Xe(this,"some",e,t,void 0,arguments)},splice(...e){return Zt(this,"splice",e)},toReversed(){return Dt(this).toReversed()},toSorted(e){return Dt(this).toSorted(e)},toSpliced(...e){return Dt(this).toSpliced(...e)},unshift(...e){return Zt(this,"unshift",e)},values(){return as(this,"values",e=>We(this,e))}};function as(e,t,n){const s=Qn(e),r=s[t]();return s!==e&&!Pe(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const Qo=Array.prototype;function Xe(e,t,n,s,r,i){const o=Qn(e),l=o!==e&&!Pe(e),c=o[t];if(c!==Qo[t]){const h=c.apply(e,i);return l?Me(h):h}let f=n;o!==e&&(l?f=function(h,g){return n.call(this,We(e,h),g,e)}:n.length>2&&(f=function(h,g){return n.call(this,h,g,e)}));const u=c.call(o,f,s);return l&&r?r(u):u}function hr(e,t,n,s){const r=Qn(e),i=r!==e&&!Pe(e);let o=n,l=!1;r!==e&&(i?(l=s.length===0,o=function(f,u,h){return l&&(l=!1,f=We(e,f)),n.call(this,f,We(e,u),h,e)}):n.length>3&&(o=function(f,u,h){return n.call(this,f,u,h,e)}));const c=r[t](o,...s);return l?We(e,c):c}function us(e,t,n){const s=$(e);he(s,"iterate",mn);const r=s[t](...n);return(r===-1||r===!1)&&Xs(n[0])?(n[0]=$(n[0]),s[t](...n)):r}function Zt(e,t,n=[]){ot(),Ws();const s=$(e)[t].apply(e,n);return qs(),lt(),s}const Xo=js("__proto__,__v_isRef,__isVue"),Ri=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Je));function Zo(e){Je(e)||(e=String(e));const t=$(this);return he(t,"has",e),t.hasOwnProperty(e)}class Ti{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?al:Ii:i?Oi:Pi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=V(t);if(!r){let c;if(o&&(c=Jo[n]))return c;if(n==="hasOwnProperty")return Zo}const l=Reflect.get(t,n,ge(t)?t:s);if((Je(n)?Ri.has(n):Xo(n))||(r||he(t,"get",n),i))return l;if(ge(l)){const c=o&&Gs(n)?l:l.value;return r&&q(c)?Ps(c):c}return q(l)?r?Ps(l):Jt(l):l}}class Ci extends Ti{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];const o=V(t)&&Gs(n);if(!this._isShallow){const f=ct(i);if(!Pe(s)&&!ct(s)&&(i=$(i),s=$(s)),!o&&ge(i)&&!ge(s))return f||(i.value=s),!0}const l=o?Number(n)e,Rn=e=>Reflect.getPrototypeOf(e);function rl(e,t,n){return function(...s){const r=this.__v_raw,i=$(r),o=Bt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=r[e](...s),u=n?Cs:t?Kt:Me;return!t&&he(i,"iterate",c?Ts:Ct),de(Object.create(f),{next(){const{value:h,done:g}=f.next();return g?{value:h,done:g}:{value:l?[u(h[0]),u(h[1])]:u(h),done:g}}})}}function Tn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function il(e,t){const n={get(r){const i=this.__v_raw,o=$(i),l=$(r);e||(ze(r,l)&&he(o,"get",r),he(o,"get",l));const{has:c}=Rn(o),f=t?Cs:e?Kt:Me;if(c.call(o,r))return f(i.get(r));if(c.call(o,l))return f(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&he($(r),"iterate",Ct),r.size},has(r){const i=this.__v_raw,o=$(i),l=$(r);return e||(ze(r,l)&&he(o,"has",r),he(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=$(l),f=t?Cs:e?Kt:Me;return!e&&he(c,"iterate",Ct),l.forEach((u,h)=>r.call(i,f(u),f(h),o))}};return de(n,e?{add:Tn("add"),set:Tn("set"),delete:Tn("delete"),clear:Tn("clear")}:{add(r){const i=$(this),o=Rn(i),l=$(r),c=!t&&!Pe(r)&&!ct(r)?l:r;return o.has.call(i,c)||ze(r,c)&&o.has.call(i,r)||ze(l,c)&&o.has.call(i,l)||(i.add(c),st(i,"add",c,c)),this},set(r,i){!t&&!Pe(i)&&!ct(i)&&(i=$(i));const o=$(this),{has:l,get:c}=Rn(o);let f=l.call(o,r);f||(r=$(r),f=l.call(o,r));const u=c.call(o,r);return o.set(r,i),f?ze(i,u)&&st(o,"set",r,i):st(o,"add",r,i),this},delete(r){const i=$(this),{has:o,get:l}=Rn(i);let c=o.call(i,r);c||(r=$(r),c=o.call(i,r)),l&&l.call(i,r);const f=i.delete(r);return c&&st(i,"delete",r,void 0),f},clear(){const r=$(this),i=r.size!==0,o=r.clear();return i&&st(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=rl(r,e,t)}),n}function Js(e,t){const n=il(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(W(n,r)&&r in s?n:s,r,i)}const ol={get:Js(!1,!1)},ll={get:Js(!1,!0)},cl={get:Js(!0,!1)};const Pi=new WeakMap,Oi=new WeakMap,Ii=new WeakMap,al=new WeakMap;function ul(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Jt(e){return ct(e)?e:Qs(e,!1,tl,ol,Pi)}function Ni(e){return Qs(e,!1,sl,ll,Oi)}function Ps(e){return Qs(e,!0,nl,cl,Ii)}function Qs(e,t,n,s,r){if(!q(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const i=r.get(e);if(i)return i;const o=ul(Vo(e));if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function Pt(e){return ct(e)?Pt(e.__v_raw):!!(e&&e.__v_isReactive)}function ct(e){return!!(e&&e.__v_isReadonly)}function Pe(e){return!!(e&&e.__v_isShallow)}function Xs(e){return e?!!e.__v_raw:!1}function $(e){const t=e&&e.__v_raw;return t?$(t):e}function fl(e){return!W(e,"__v_skip")&&Object.isExtensible(e)&&pi(e,"__v_skip",!0),e}const Me=e=>q(e)?Jt(e):e,Kt=e=>q(e)?Ps(e):e;function ge(e){return e?e.__v_isRef===!0:!1}function dl(e){return Mi(e,!1)}function hl(e){return Mi(e,!0)}function Mi(e,t){return ge(e)?e:new pl(e,t)}class pl{constructor(t,n){this.dep=new Ys,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:$(t),this._value=n?t:Me(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Pe(t)||ct(t);t=s?t:$(t),ze(t,n)&&(this._rawValue=t,this._value=s?t:Me(t),this.dep.trigger())}}function ae(e){return ge(e)?e.value:e}const gl={get:(e,t,n)=>t==="__v_raw"?e:ae(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ge(r)&&!ge(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Di(e){return Pt(e)?e:new Proxy(e,gl)}class ml{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Ys(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=gn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&Z!==this)return bi(this,!0),!0}get value(){const t=this.dep.track();return Si(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function _l(e,t,n=!1){let s,r;return B(e)?s=e:(s=e.get,r=e.set),new ml(s,r,n)}const Cn={},Ln=new WeakMap;let xt;function yl(e,t=!1,n=xt){if(n){let s=Ln.get(n);s||Ln.set(n,s=[]),s.push(e)}}function vl(e,t,n=X){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,f=O=>r?O:Pe(O)||r===!1||r===0?rt(O,1):rt(O);let u,h,g,m,I=!1,x=!1;if(ge(e)?(h=()=>e.value,I=Pe(e)):Pt(e)?(h=()=>f(e),I=!0):V(e)?(x=!0,I=e.some(O=>Pt(O)||Pe(O)),h=()=>e.map(O=>{if(ge(O))return O.value;if(Pt(O))return f(O);if(B(O))return c?c(O,2):O()})):B(e)?t?h=c?()=>c(e,2):e:h=()=>{if(g){ot();try{g()}finally{lt()}}const O=xt;xt=u;try{return c?c(e,3,[m]):e(m)}finally{xt=O}}:h=Ye,t&&r){const O=h,J=r===!0?1/0:r;h=()=>rt(O(),J)}const U=qo(),F=()=>{u.stop(),U&&U.active&&ks(U.effects,u)};if(i&&t){const O=t;t=(...J)=>{const ie=O(...J);return F(),ie}}let C=x?new Array(e.length).fill(Cn):Cn;const N=O=>{if(!(!(u.flags&1)||!u.dirty&&!O))if(t){const J=u.run();if(O||r||I||(x?J.some((ie,ee)=>ze(ie,C[ee])):ze(J,C))){g&&g();const ie=xt;xt=u;try{const ee=[J,C===Cn?void 0:x&&C[0]===Cn?[]:C,m];C=J,c?c(t,3,ee):t(...ee)}finally{xt=ie}}}else u.run()};return l&&l(N),u=new yi(h),u.scheduler=o?()=>o(N,!1):N,m=O=>yl(O,!1,u),g=u.onStop=()=>{const O=Ln.get(u);if(O){if(c)c(O,4);else for(const J of O)J();Ln.delete(u)}},t?s?N(!0):C=u.run():o?o(N.bind(null,!0),!0):u.run(),F.pause=u.pause.bind(u),F.resume=u.resume.bind(u),F.stop=F,F}function rt(e,t=1/0,n){if(t<=0||!q(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,ge(e))rt(e.value,t,n);else if(V(e))for(let s=0;s{rt(s,t,n)});else if(hi(e)){for(const s in e)rt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&rt(e[s],t,n)}return e}/** +**/let fe;class Wo{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&fe&&(fe.active?(this.parent=fe,this.index=(fe.scopes||(fe.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const s=this.scopes.slice();for(t=0,n=s.length;t0&&--this._on===0){if(fe===this)fe=this.prevScope;else{let t=fe;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(un){let t=un;for(un=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;an;){let t=an;for(an=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Ei(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function wi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),zs(s),zo(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Rs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Si(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Si(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===gn)||(e.globalVersion=gn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Rs(e))))return;e.flags|=2;const t=e.dep,n=Z,s=Ie;Z=e,Ie=!0;try{Ei(e);const r=e.fn(e._value);(t.version===0||ze(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{Z=n,Ie=s,wi(e),e.flags&=-3}}function zs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)zs(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function zo(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ie=!0;const Ai=[];function ot(){Ai.push(Ie),Ie=!1}function lt(){const e=Ai.pop();Ie=e===void 0?!0:e}function dr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Z;Z=void 0;try{t()}finally{Z=n}}}let gn=0;class Yo{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Ys{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Z||!Ie||Z===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Z)n=this.activeLink=new Yo(Z,this),Z.deps?(n.prevDep=Z.depsTail,Z.depsTail.nextDep=n,Z.depsTail=n):Z.deps=Z.depsTail=n,Ri(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=Z.depsTail,n.nextDep=void 0,Z.depsTail.nextDep=n,Z.depsTail=n,Z.deps===n&&(Z.deps=s)}return n}trigger(t){this.version++,gn++,this.notify(t)}notify(t){Ws();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{qs()}}}function Ri(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Ri(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const xs=new WeakMap,Ct=Symbol(""),Ts=Symbol(""),mn=Symbol("");function he(e,t,n){if(Ie&&Z){let s=xs.get(e);s||xs.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Ys),r.map=s,r.key=n),r.track()}}function st(e,t,n,s,r,i){const o=xs.get(e);if(!o){gn++;return}const l=c=>{c&&c.trigger()};if(Ws(),t==="clear")o.forEach(l);else{const c=V(e),f=c&&Gs(n);if(c&&n==="length"){const u=Number(s);o.forEach((h,g)=>{(g==="length"||g===mn||!Je(g)&&g>=u)&&l(h)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),f&&l(o.get(mn)),t){case"add":c?f&&l(o.get("length")):(l(o.get(Ct)),Bt(e)&&l(o.get(Ts)));break;case"delete":c||(l(o.get(Ct)),Bt(e)&&l(o.get(Ts)));break;case"set":Bt(e)&&l(o.get(Ct));break}}qs()}function Dt(e){const t=$(e);return t===e?t:(he(t,"iterate",mn),Pe(e)?t:t.map(Me))}function Qn(e){return he(e=$(e),"iterate",mn),e}function We(e,t){return ct(e)?Kt(Pt(e)?Me(t):t):Me(t)}const Jo={__proto__:null,[Symbol.iterator](){return as(this,Symbol.iterator,e=>We(this,e))},concat(...e){return Dt(this).concat(...e.map(t=>V(t)?Dt(t):t))},entries(){return as(this,"entries",e=>(e[1]=We(this,e[1]),e))},every(e,t){return Xe(this,"every",e,t,void 0,arguments)},filter(e,t){return Xe(this,"filter",e,t,n=>n.map(s=>We(this,s)),arguments)},find(e,t){return Xe(this,"find",e,t,n=>We(this,n),arguments)},findIndex(e,t){return Xe(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Xe(this,"findLast",e,t,n=>We(this,n),arguments)},findLastIndex(e,t){return Xe(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Xe(this,"forEach",e,t,void 0,arguments)},includes(...e){return us(this,"includes",e)},indexOf(...e){return us(this,"indexOf",e)},join(e){return Dt(this).join(e)},lastIndexOf(...e){return us(this,"lastIndexOf",e)},map(e,t){return Xe(this,"map",e,t,void 0,arguments)},pop(){return Zt(this,"pop")},push(...e){return Zt(this,"push",e)},reduce(e,...t){return hr(this,"reduce",e,t)},reduceRight(e,...t){return hr(this,"reduceRight",e,t)},shift(){return Zt(this,"shift")},some(e,t){return Xe(this,"some",e,t,void 0,arguments)},splice(...e){return Zt(this,"splice",e)},toReversed(){return Dt(this).toReversed()},toSorted(e){return Dt(this).toSorted(e)},toSpliced(...e){return Dt(this).toSpliced(...e)},unshift(...e){return Zt(this,"unshift",e)},values(){return as(this,"values",e=>We(this,e))}};function as(e,t,n){const s=Qn(e),r=s[t]();return s!==e&&!Pe(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const Qo=Array.prototype;function Xe(e,t,n,s,r,i){const o=Qn(e),l=o!==e&&!Pe(e),c=o[t];if(c!==Qo[t]){const h=c.apply(e,i);return l?Me(h):h}let f=n;o!==e&&(l?f=function(h,g){return n.call(this,We(e,h),g,e)}:n.length>2&&(f=function(h,g){return n.call(this,h,g,e)}));const u=c.call(o,f,s);return l&&r?r(u):u}function hr(e,t,n,s){const r=Qn(e),i=r!==e&&!Pe(e);let o=n,l=!1;r!==e&&(i?(l=s.length===0,o=function(f,u,h){return l&&(l=!1,f=We(e,f)),n.call(this,f,We(e,u),h,e)}):n.length>3&&(o=function(f,u,h){return n.call(this,f,u,h,e)}));const c=r[t](o,...s);return l?We(e,c):c}function us(e,t,n){const s=$(e);he(s,"iterate",mn);const r=s[t](...n);return(r===-1||r===!1)&&Xs(n[0])?(n[0]=$(n[0]),s[t](...n)):r}function Zt(e,t,n=[]){ot(),Ws();const s=$(e)[t].apply(e,n);return qs(),lt(),s}const Xo=js("__proto__,__v_isRef,__isVue"),xi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Je));function Zo(e){Je(e)||(e=String(e));const t=$(this);return he(t,"has",e),t.hasOwnProperty(e)}class Ti{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?al:Ii:i?Oi:Pi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=V(t);if(!r){let c;if(o&&(c=Jo[n]))return c;if(n==="hasOwnProperty")return Zo}const l=Reflect.get(t,n,ge(t)?t:s);if((Je(n)?xi.has(n):Xo(n))||(r||he(t,"get",n),i))return l;if(ge(l)){const c=o&&Gs(n)?l:l.value;return r&&q(c)?Ps(c):c}return q(l)?r?Ps(l):Jt(l):l}}class Ci extends Ti{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];const o=V(t)&&Gs(n);if(!this._isShallow){const f=ct(i);if(!Pe(s)&&!ct(s)&&(i=$(i),s=$(s)),!o&&ge(i)&&!ge(s))return f||(i.value=s),!0}const l=o?Number(n)e,xn=e=>Reflect.getPrototypeOf(e);function rl(e,t,n){return function(...s){const r=this.__v_raw,i=$(r),o=Bt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=r[e](...s),u=n?Cs:t?Kt:Me;return!t&&he(i,"iterate",c?Ts:Ct),de(Object.create(f),{next(){const{value:h,done:g}=f.next();return g?{value:h,done:g}:{value:l?[u(h[0]),u(h[1])]:u(h),done:g}}})}}function Tn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function il(e,t){const n={get(r){const i=this.__v_raw,o=$(i),l=$(r);e||(ze(r,l)&&he(o,"get",r),he(o,"get",l));const{has:c}=xn(o),f=t?Cs:e?Kt:Me;if(c.call(o,r))return f(i.get(r));if(c.call(o,l))return f(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&he($(r),"iterate",Ct),r.size},has(r){const i=this.__v_raw,o=$(i),l=$(r);return e||(ze(r,l)&&he(o,"has",r),he(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=$(l),f=t?Cs:e?Kt:Me;return!e&&he(c,"iterate",Ct),l.forEach((u,h)=>r.call(i,f(u),f(h),o))}};return de(n,e?{add:Tn("add"),set:Tn("set"),delete:Tn("delete"),clear:Tn("clear")}:{add(r){const i=$(this),o=xn(i),l=$(r),c=!t&&!Pe(r)&&!ct(r)?l:r;return o.has.call(i,c)||ze(r,c)&&o.has.call(i,r)||ze(l,c)&&o.has.call(i,l)||(i.add(c),st(i,"add",c,c)),this},set(r,i){!t&&!Pe(i)&&!ct(i)&&(i=$(i));const o=$(this),{has:l,get:c}=xn(o);let f=l.call(o,r);f||(r=$(r),f=l.call(o,r));const u=c.call(o,r);return o.set(r,i),f?ze(i,u)&&st(o,"set",r,i):st(o,"add",r,i),this},delete(r){const i=$(this),{has:o,get:l}=xn(i);let c=o.call(i,r);c||(r=$(r),c=o.call(i,r)),l&&l.call(i,r);const f=i.delete(r);return c&&st(i,"delete",r,void 0),f},clear(){const r=$(this),i=r.size!==0,o=r.clear();return i&&st(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=rl(r,e,t)}),n}function Js(e,t){const n=il(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(W(n,r)&&r in s?n:s,r,i)}const ol={get:Js(!1,!1)},ll={get:Js(!1,!0)},cl={get:Js(!0,!1)};const Pi=new WeakMap,Oi=new WeakMap,Ii=new WeakMap,al=new WeakMap;function ul(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Jt(e){return ct(e)?e:Qs(e,!1,tl,ol,Pi)}function Ni(e){return Qs(e,!1,sl,ll,Oi)}function Ps(e){return Qs(e,!0,nl,cl,Ii)}function Qs(e,t,n,s,r){if(!q(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const i=r.get(e);if(i)return i;const o=ul(Vo(e));if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function Pt(e){return ct(e)?Pt(e.__v_raw):!!(e&&e.__v_isReactive)}function ct(e){return!!(e&&e.__v_isReadonly)}function Pe(e){return!!(e&&e.__v_isShallow)}function Xs(e){return e?!!e.__v_raw:!1}function $(e){const t=e&&e.__v_raw;return t?$(t):e}function fl(e){return!W(e,"__v_skip")&&Object.isExtensible(e)&&pi(e,"__v_skip",!0),e}const Me=e=>q(e)?Jt(e):e,Kt=e=>q(e)?Ps(e):e;function ge(e){return e?e.__v_isRef===!0:!1}function dl(e){return Mi(e,!1)}function hl(e){return Mi(e,!0)}function Mi(e,t){return ge(e)?e:new pl(e,t)}class pl{constructor(t,n){this.dep=new Ys,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:$(t),this._value=n?t:Me(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Pe(t)||ct(t);t=s?t:$(t),ze(t,n)&&(this._rawValue=t,this._value=s?t:Me(t),this.dep.trigger())}}function ae(e){return ge(e)?e.value:e}const gl={get:(e,t,n)=>t==="__v_raw"?e:ae(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ge(r)&&!ge(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Di(e){return Pt(e)?e:new Proxy(e,gl)}class ml{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Ys(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=gn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&Z!==this)return bi(this,!0),!0}get value(){const t=this.dep.track();return Si(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function _l(e,t,n=!1){let s,r;return B(e)?s=e:(s=e.get,r=e.set),new ml(s,r,n)}const Cn={},Ln=new WeakMap;let Rt;function yl(e,t=!1,n=Rt){if(n){let s=Ln.get(n);s||Ln.set(n,s=[]),s.push(e)}}function vl(e,t,n=X){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,f=O=>r?O:Pe(O)||r===!1||r===0?rt(O,1):rt(O);let u,h,g,m,I=!1,R=!1;if(ge(e)?(h=()=>e.value,I=Pe(e)):Pt(e)?(h=()=>f(e),I=!0):V(e)?(R=!0,I=e.some(O=>Pt(O)||Pe(O)),h=()=>e.map(O=>{if(ge(O))return O.value;if(Pt(O))return f(O);if(B(O))return c?c(O,2):O()})):B(e)?t?h=c?()=>c(e,2):e:h=()=>{if(g){ot();try{g()}finally{lt()}}const O=Rt;Rt=u;try{return c?c(e,3,[m]):e(m)}finally{Rt=O}}:h=Ye,t&&r){const O=h,J=r===!0?1/0:r;h=()=>rt(O(),J)}const U=qo(),F=()=>{u.stop(),U&&U.active&&ks(U.effects,u)};if(i&&t){const O=t;t=(...J)=>{const ie=O(...J);return F(),ie}}let C=R?new Array(e.length).fill(Cn):Cn;const N=O=>{if(!(!(u.flags&1)||!u.dirty&&!O))if(t){const J=u.run();if(O||r||I||(R?J.some((ie,te)=>ze(ie,C[te])):ze(J,C))){g&&g();const ie=Rt;Rt=u;try{const te=[J,C===Cn?void 0:R&&C[0]===Cn?[]:C,m];C=J,c?c(t,3,te):t(...te)}finally{Rt=ie}}}else u.run()};return l&&l(N),u=new yi(h),u.scheduler=o?()=>o(N,!1):N,m=O=>yl(O,!1,u),g=u.onStop=()=>{const O=Ln.get(u);if(O){if(c)c(O,4);else for(const J of O)J();Ln.delete(u)}},t?s?N(!0):C=u.run():o?o(N.bind(null,!0),!0):u.run(),F.pause=u.pause.bind(u),F.resume=u.resume.bind(u),F.stop=F,F}function rt(e,t=1/0,n){if(t<=0||!q(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,ge(e))rt(e.value,t,n);else if(V(e))for(let s=0;s{rt(s,t,n)});else if(hi(e)){for(const s in e)rt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&rt(e[s],t,n)}return e}/** * @vue/runtime-core v3.5.41 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/function An(e,t,n,s){try{return s?e(...s):e()}catch(r){Xn(r,t,n)}}function De(e,t,n,s){if(B(e)){const r=An(e,t,n,s);return r&&fi(r)&&r.catch(i=>{Xn(i,t,n)}),r}if(V(e)){const r=[];for(let i=0;i>>1,r=ye[s],i=_n(r);i=_n(n)?ye.push(e):ye.splice(El(t),0,e),e.flags|=1,Vi()}}function Vi(){Vn||(Vn=Li.then(Hi))}function wl(e){if(!V(e))gt&&e.id===-1?gt.splice(Lt+1,0,e):e.flags&1||(kt.push(e),e.flags|=1);else for(let t=0;t_n(n)-_n(s));if(kt.length=0,gt){for(let n=0;ne.id==null?e.flags&2?-1:1/0:e.id;function Hi(e){try{for($e=0;$e{s._d&&Bn(-1);const i=Fn(t),o=Ot.length;let l;try{l=e(...r)}finally{for(let c=Ot.length;c>o;c--)fo();Fn(i),s._d&&Bn(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function Mu(e,t){if(Se===null)return e;const n=ss(Se),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&B(t)?t.call(s&&s.proxy):t}}const Sl=Symbol.for("v-scx"),Al=()=>Ne(Sl);function Mn(e,t,n){return Bi(e,t,n)}function Bi(e,t,n=X){const{immediate:s,deep:r,flush:i,once:o}=n,l=de({},n),c=t&&s||!t&&i!=="post";let f;if(bn){if(i==="sync"){const m=Al();f=m.__watcherHandles||(m.__watcherHandles=[])}else if(!c){const m=()=>{};return m.stop=Ye,m.resume=Ye,m.pause=Ye,m}}const u=pe;l.call=(m,I,x)=>De(m,u,I,x);let h=!1;i==="post"?l.scheduler=m=>{Ee(m,u&&u.suspense)}:i!=="sync"&&(h=!0,l.scheduler=(m,I)=>{I?m():er(m)}),l.augmentJob=m=>{t&&(m.flags|=4),h&&(m.flags|=2,u&&(m.id=u.uid,m.i=u))};const g=vl(e,t,l);return bn&&(f?f.push(g):c&&g()),g}function xl(e,t,n){const s=this.proxy,r=se(e)?e.includes(".")?ji(s,e):()=>s[e]:e.bind(s,s);let i;B(t)?i=t:(i=t.handler,n=t);const o=xn(this),l=Bi(r,i.bind(s),n);return o(),l}function ji(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,fs=Symbol("_leaveCb");function Tl(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==at){t=n;break}}return t}function ki(e){if(!nr(e))return Zn(e.type)&&e.children?Tl(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&B(n.default))return n.default()}}function tr(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const n=e.component.subTree;tr(Zn(n.type)&&ki(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Gi(e,t){return B(e)?de({name:e.name},t,{setup:e}):e}function Ki(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function gr(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const Hn=new WeakMap;function fn(e,t,n,s,r=!1){if(V(e)){e.forEach((x,U)=>fn(x,t&&(V(t)?t[U]:t),n,s,r));return}if(dn(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&fn(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?ss(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,u=l.refs===X?l.refs={}:l.refs,h=l.setupState,g=$(h),m=h===X?ui:x=>gr(u,x)?!1:W(g,x),I=(x,U)=>!(U&&gr(u,U));if(f!=null&&f!==c){if(mr(t),se(f))u[f]=null,m(f)&&(h[f]=null);else if(ge(f)){const x=t;I(f,x.k)&&(f.value=null),x.k&&(u[x.k]=null)}}if(B(c))An(c,l,12,[o,u]);else{const x=se(c),U=ge(c);if(x||U){const F=()=>{if(e.f){const C=x?m(c)?h[c]:u[c]:I()||!e.k?c.value:u[e.k];if(r)V(C)&&ks(C,i);else if(V(C))C.includes(i)||C.push(i);else if(x)u[c]=[i],m(c)&&(h[c]=u[c]);else{const N=[i];I(c,e.k)&&(c.value=N),e.k&&(u[e.k]=N)}}else x?(u[c]=o,m(c)&&(h[c]=o)):U&&(I(c,e.k)&&(c.value=o),e.k&&(u[e.k]=o))};if(o){const C=()=>{F(),Hn.delete(e)};C.id=-1,Hn.set(e,C),Ee(C,n)}else mr(e),F()}}}function mr(e){const t=Hn.get(e);t&&(t.flags|=8,Hn.delete(e))}Jn().requestIdleCallback;Jn().cancelIdleCallback;const dn=e=>!!e.type.__asyncLoader,nr=e=>e.type.__isKeepAlive;function Cl(e,t){$i(e,"a",t)}function Pl(e,t){$i(e,"da",t)}function $i(e,t,n=pe){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(es(t,s,n),n){let r=n.parent;for(;r&&r.parent;)nr(r.parent.vnode)&&Ol(s,t,n,r),r=r.parent}}function Ol(e,t,n,s){const r=es(t,e,s,!0);qi(()=>{ks(s[t],r)},n)}function es(e,t,n=pe,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{ot();const l=xn(n),c=De(t,n,e,o);return l(),lt(),c});return s?r.unshift(i):r.push(i),i}}const ut=e=>(t,n=pe)=>{(!bn||e==="sp")&&es(e,(...s)=>t(...s),n)},Il=ut("bm"),Wi=ut("m"),Nl=ut("bu"),Ml=ut("u"),Dl=ut("bum"),qi=ut("um"),Ll=ut("sp"),Vl=ut("rtg"),Fl=ut("rtc");function Hl(e,t=pe){es("ec",e,t)}const Ul="components";function _r(e,t){return jl(Ul,e,!0,t)||e}const Bl=Symbol.for("v-ndc");function jl(e,t,n=!0,s=!1){const r=Se||pe;if(r){const i=r.type;{const l=xc(i,!1);if(l&&(l===t||l===ve(t)||l===zn(ve(t))))return i}const o=yr(r[e]||i[e],t)||yr(r.appContext[e],t);return!o&&s?i:o}}function yr(e,t){return e&&(e[t]||e[ve(t)]||e[zn(ve(t))])}function Du(e,t,n,s){let r;const i=n,o=V(e);if(o||se(e)){const l=o&&Pt(e);let c=!1,f=!1;l&&(c=!Pe(e),f=ct(e),e=Qn(e)),r=new Array(e.length);for(let u=0,h=e.length;ut(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;ce?go(e)?ss(e):Os(e.parent):null,hn=de(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Os(e.parent),$root:e=>Os(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Yi(e),$forceUpdate:e=>e.f||(e.f=()=>{er(e.update)}),$nextTick:e=>e.n||(e.n=Zs.bind(e.proxy)),$watch:e=>xl.bind(e)}),ds=(e,t)=>e!==X&&!e.__isScriptSetup&&W(e,t),kl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;if(t[0]!=="$"){const g=o[t];if(g!==void 0)switch(g){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(ds(s,t))return o[t]=1,s[t];if(r!==X&&W(r,t))return o[t]=2,r[t];if(W(i,t))return o[t]=3,i[t];if(n!==X&&W(n,t))return o[t]=4,n[t];Is&&(o[t]=0)}}const f=hn[t];let u,h;if(f)return t==="$attrs"&&he(e.attrs,"get",""),f(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(n!==X&&W(n,t))return o[t]=4,n[t];if(h=c.config.globalProperties,W(h,t))return h[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return ds(r,t)?(r[t]=n,!0):s!==X&&W(s,t)?(s[t]=n,!0):W(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:i,type:o}},l){let c;return!!(n[l]||e!==X&&l[0]!=="$"&&W(e,l)||ds(t,l)||W(i,l)||W(s,l)||W(hn,l)||W(r.config.globalProperties,l)||(c=o.__cssModules)&&c[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:W(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function vr(e){return V(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Is=!0;function Gl(e){const t=Yi(e),n=e.proxy,s=e.ctx;Is=!1,t.beforeCreate&&br(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:u,beforeMount:h,mounted:g,beforeUpdate:m,updated:I,activated:x,deactivated:U,beforeDestroy:F,beforeUnmount:C,destroyed:N,unmounted:O,render:J,renderTracked:ie,renderTriggered:ee,errorCaptured:Ve,serverPrefetch:ft,expose:Fe,inheritAttrs:dt,components:bt,directives:He,filters:Qt}=t;if(f&&Kl(f,s,null),o)for(const z in o){const G=o[z];B(G)&&(s[z]=G.bind(n))}if(r){const z=r.call(n,n);q(z)&&(e.data=Jt(z))}if(Is=!0,i)for(const z in i){const G=i[z],Qe=B(G)?G.bind(n,n):B(G.get)?G.get.bind(n,n):Ye,ht=!B(G)&&B(G.set)?G.set.bind(n):Ye,Ue=Oe({get:Qe,set:ht});Object.defineProperty(s,z,{enumerable:!0,configurable:!0,get:()=>Ue.value,set:be=>Ue.value=be})}if(l)for(const z in l)zi(l[z],s,n,z);if(c){const z=B(c)?c.call(n):c;Reflect.ownKeys(z).forEach(G=>{Nn(G,z[G])})}u&&br(u,e,"c");function ce(z,G){V(G)?G.forEach(Qe=>z(Qe.bind(n))):G&&z(G.bind(n))}if(ce(Il,h),ce(Wi,g),ce(Nl,m),ce(Ml,I),ce(Cl,x),ce(Pl,U),ce(Hl,Ve),ce(Fl,ie),ce(Vl,ee),ce(Dl,C),ce(qi,O),ce(Ll,ft),V(Fe))if(Fe.length){const z=e.exposed||(e.exposed={});Fe.forEach(G=>{Object.defineProperty(z,G,{get:()=>n[G],set:Qe=>n[G]=Qe,enumerable:!0})})}else e.exposed||(e.exposed={});J&&e.render===Ye&&(e.render=J),dt!=null&&(e.inheritAttrs=dt),bt&&(e.components=bt),He&&(e.directives=He),ft&&Ki(e)}function Kl(e,t,n=Ye){V(e)&&(e=Ns(e));for(const s in e){const r=e[s];let i;q(r)?"default"in r?i=Ne(r.from||s,r.default,!0):i=Ne(r.from||s):i=Ne(r),ge(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function br(e,t,n){De(V(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function zi(e,t,n,s){let r=s.includes(".")?ji(n,s):()=>n[s];if(se(e)){const i=t[e];B(i)&&Mn(r,i)}else if(B(e))Mn(r,e.bind(n));else if(q(e))if(V(e))e.forEach(i=>zi(i,t,n,s));else{const i=B(e.handler)?e.handler.bind(n):t[e.handler];B(i)&&Mn(r,i,e)}}function Yi(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Un(c,f,o,!0)),Un(c,t,o)),q(t)&&i.set(t,c),c}function Un(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Un(e,i,n,!0),r&&r.forEach(o=>Un(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=$l[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const $l={data:Er,props:wr,emits:wr,methods:rn,computed:rn,beforeCreate:me,created:me,beforeMount:me,mounted:me,beforeUpdate:me,updated:me,beforeDestroy:me,beforeUnmount:me,destroyed:me,unmounted:me,activated:me,deactivated:me,errorCaptured:me,serverPrefetch:me,components:rn,directives:rn,watch:ql,provide:Er,inject:Wl};function Er(e,t){return t?e?function(){return de(B(e)?e.call(this,this):e,B(t)?t.call(this,this):t)}:t:e}function Wl(e,t){return rn(Ns(e),Ns(t))}function Ns(e){if(V(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ve(t)}Modifiers`]||e[`${vt(t)}Modifiers`];function Ql(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||X;let r=n;const i=t.startsWith("update:"),o=i&&Jl(s,t.slice(7));o&&(o.trim&&(r=n.map(u=>se(u)?u.trim():u)),o.number&&(r=n.map(Yn)));let l,c=s[l=os(t)]||s[l=os(ve(t))];!c&&i&&(c=s[l=os(vt(t))]),c&&De(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,De(f,e,6,r)}}const Xl=new WeakMap;function Qi(e,t,n=!1){const s=n?Xl:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!B(e)){const c=f=>{const u=Qi(f,t,!0);u&&(l=!0,de(o,u))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(q(e)&&s.set(e,null),null):(V(i)?i.forEach(c=>o[c]=null):de(o,i),q(e)&&s.set(e,o),o)}function ts(e,t){return!e||!$n(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),W(e,t[0].toLowerCase()+t.slice(1))||W(e,vt(t))||W(e,t))}function Sr(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:u,props:h,data:g,setupState:m,ctx:I,inheritAttrs:x}=e,U=Fn(e);let F,C;try{if(n.shapeFlag&4){const O=r||s,J=O;F=qe(f.call(J,O,u,h,m,g,I)),C=l}else{const O=t;F=qe(O.length>1?O(h,{attrs:l,slots:o,emit:c}):O(h,null)),C=t.props?l:Zl(l)}}catch(O){Ot.length=0,Xn(O,e,1),F=le(at)}let N=F;if(C&&x!==!1){const O=Object.keys(C),{shapeFlag:J}=N;O.length&&J&7&&(i&&O.some(Wn)&&(C=ec(C,i)),N=$t(N,C,!1,!0))}if(n.dirs&&(N=$t(N,null,!1,!0),N.dirs=N.dirs?N.dirs.concat(n.dirs):n.dirs),n.transition){const O=Zn(N.type)&&ki(N)||N;tr(O,n.transition)}return F=N,Fn(U),F}const Zl=e=>{let t;for(const n in e)(n==="class"||n==="style"||$n(n))&&((t||(t={}))[n]=e[n]);return t},ec=(e,t)=>{const n={};for(const s in e)(!Wn(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function tc(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Ar(s,o,f):!!o;if(c&8){const u=t.dynamicProps;for(let h=0;hObject.create(Zi),to=e=>Object.getPrototypeOf(e)===Zi;function sc(e,t,n,s=!1){const r={},i=eo();e.propsDefaults=Object.create(null),no(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Ni(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function rc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=$(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const u=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[g,m]=so(h,t,!0);de(o,g),m&&l.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!i&&!c)return q(e)&&s.set(e,Ut),Ut;if(V(i))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",rr=e=>V(e)?e.map(qe):[qe(e)],oc=(e,t,n)=>{if(t._n)return t;const s=Vt((...r)=>rr(t(...r)),n);return s._c=!1,s},ro=(e,t,n)=>{const s=e._ctx;for(const r in e){if(sr(r))continue;const i=e[r];if(B(i))t[r]=oc(r,i,s);else if(i!=null){const o=rr(i);t[r]=()=>o}}},io=(e,t)=>{const n=rr(t);e.slots.default=()=>n},oo=(e,t,n)=>{for(const s in t)(n||!sr(s))&&(e[s]=t[s])},lc=(e,t,n)=>{const s=e.slots=eo();if(e.vnode.shapeFlag&32){const r=t._;r?(oo(s,t,n),n&&pi(s,"_",r,!0)):ro(t,s)}else t&&io(e,t)},cc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=X;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:oo(r,t,n):(i=!t.$stable,ro(t,r)),o=t}else t&&(io(e,t),o={default:1});if(i)for(const l in r)!sr(l)&&o[l]==null&&delete r[l]},Ee=hc;function ac(e){return uc(e)}function uc(e,t){const n=Jn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:u,parentNode:h,nextSibling:g,setScopeId:m=Ye,insertStaticContent:I}=e,x=(a,d,p,y=null,b=null,_=null,A=void 0,S=null,w=!!d.dynamicChildren)=>{if(a===d)return;a&&!en(a,d)&&(y=v(a),be(a,b,_,!0),a=null),d.patchFlag===-2&&(w=!1,d.dynamicChildren=null);const{type:E,ref:L,shapeFlag:T}=d;switch(E){case ns:U(a,d,p,y);break;case at:F(a,d,p,y);break;case ps:a==null&&C(d,p,y,A);break;case tt:bt(a,d,p,y,b,_,A,S,w);break;default:T&1?J(a,d,p,y,b,_,A,S,w):T&6?He(a,d,p,y,b,_,A,S,w):(T&64||T&128)&&E.process(a,d,p,y,b,_,A,S,w,M)}L!=null&&b?fn(L,a&&a.ref,_,d||a,!d):L==null&&a&&a.ref!=null&&fn(a.ref,null,_,a,!0)},U=(a,d,p,y)=>{if(a==null)s(d.el=l(d.children),p,y);else{const b=d.el=a.el;d.children!==a.children&&f(b,d.children)}},F=(a,d,p,y)=>{a==null?s(d.el=c(d.children||""),p,y):d.el=a.el},C=(a,d,p,y)=>{[a.el,a.anchor]=I(a.children,d,p,y,a.el,a.anchor)},N=({el:a,anchor:d},p,y)=>{let b;for(;a&&a!==d;)b=g(a),s(a,p,y),a=b;s(d,p,y)},O=({el:a,anchor:d})=>{let p;for(;a&&a!==d;)p=g(a),r(a),a=p;r(d)},J=(a,d,p,y,b,_,A,S,w)=>{if(d.type==="svg"?A="svg":d.type==="math"&&(A="mathml"),a==null)ie(d,p,y,b,_,A,S,w);else{const E=a.el&&a.el._isVueCE?a.el:null;try{E&&E._beginPatch(),ft(a,d,b,_,A,S,w)}finally{E&&E._endPatch()}}},ie=(a,d,p,y,b,_,A,S)=>{let w,E;const{props:L,shapeFlag:T,transition:D,dirs:H}=a;if(w=a.el=o(a.type,_,L&&L.is,L),T&8?u(w,a.children):T&16&&Ve(a.children,w,null,y,b,hs(a,_),A,S),H&&wt(a,null,y,"created"),ee(w,a,a.scopeId,A,y),L){for(const Q in L)Q!=="value"&&!cn(Q)&&i(w,Q,null,L[Q],_,y);"value"in L&&i(w,"value",null,L.value,_),(E=L.onVnodeBeforeMount)&&Ge(E,y,a)}H&&wt(a,null,y,"beforeMount");const k=fc(b,D);k&&D.beforeEnter(w),s(w,d,p),((E=L&&L.onVnodeMounted)||k||H)&&Ee(()=>{try{E&&Ge(E,y,a),k&&D.enter(w),H&&wt(a,null,y,"mounted")}finally{}},b)},ee=(a,d,p,y,b)=>{if(p&&m(a,p),y)for(let _=0;_{for(let E=w;E{const S=d.el=a.el;let{patchFlag:w,dynamicChildren:E,dirs:L}=d;w|=a.patchFlag&16;const T=a.props||X,D=d.props||X;let H;if(p&&St(p,!1),(H=D.onVnodeBeforeUpdate)&&Ge(H,p,d,a),L&&wt(d,a,p,"beforeUpdate"),p&&St(p,!0),E&&(!a.dynamicChildren||a.dynamicChildren.length!==E.length)&&(w=0,A=!1,E=null),(T.innerHTML&&D.innerHTML==null||T.textContent&&D.textContent==null)&&u(S,""),E?Fe(a.dynamicChildren,E,S,p,y,hs(d,b),_):A||G(a,d,S,null,p,y,hs(d,b),_,!1),w>0){if(w&16)dt(S,T,D,p,b);else if(w&2&&T.class!==D.class&&i(S,"class",null,D.class,b),w&4&&i(S,"style",T.style,D.style,b),w&8){const k=d.dynamicProps;for(let Q=0;Q{H&&Ge(H,p,d,a),L&&wt(d,a,p,"updated")},y)},Fe=(a,d,p,y,b,_,A)=>{for(let S=0;S{if(d!==p){if(d!==X)for(const _ in d)!cn(_)&&!(_ in p)&&i(a,_,d[_],null,b,y);for(const _ in p){if(cn(_))continue;const A=p[_],S=d[_];A!==S&&_!=="value"&&i(a,_,S,A,b,y)}"value"in p&&i(a,"value",d.value,p.value,b)}},bt=(a,d,p,y,b,_,A,S,w)=>{const E=d.el=a?a.el:l(""),L=d.anchor=a?a.anchor:l("");let{patchFlag:T,dynamicChildren:D,slotScopeIds:H}=d;H&&(S=S?S.concat(H):H),a==null?(s(E,p,y),s(L,p,y),Ve(d.children||[],p,L,b,_,A,S,w)):T>0&&T&64&&D&&a.dynamicChildren&&a.dynamicChildren.length===D.length?(Fe(a.dynamicChildren,D,p,b,_,A,S),(d.key!=null||b&&d===b.subTree)&&lo(a,d,!0)):G(a,d,p,L,b,_,A,S,w)},He=(a,d,p,y,b,_,A,S,w)=>{d.slotScopeIds=S,a==null?d.shapeFlag&512?b.ctx.activate(d,p,y,A,w):Qt(d,p,y,b,_,A,w):It(a,d,w)},Qt=(a,d,p,y,b,_,A)=>{const S=a.component=vc(a,y,b);if(nr(a)&&(S.ctx.renderer=M),Ec(S,!1,A),S.asyncDep){if(b&&b.registerDep(S,ce,A),!a.el){const w=S.subTree=le(at);F(null,w,d,p),a.placeholder=w.el}}else ce(S,a,d,p,b,_,A)},It=(a,d,p)=>{const y=d.component=a.component;if(tc(a,d,p))if(y.asyncDep&&!y.asyncResolved){z(y,d,p);return}else y.next=d,y.update();else d.el=a.el,y.vnode=d},ce=(a,d,p,y,b,_,A)=>{const S=()=>{if(a.isMounted){let{next:T,bu:D,u:H,parent:k,vnode:Q}=a;{const je=co(a);if(je){T&&(T.el=Q.el,z(a,T,A)),je.asyncDep.then(()=>{Ee(()=>{a.isUnmounted||E()},b)});return}}let Y=T,re;St(a,!1),T?(T.el=Q.el,z(a,T,A)):T=Q,D&&In(D),(re=T.props&&T.props.onVnodeBeforeUpdate)&&Ge(re,k,T,Q),St(a,!0);const ue=Sr(a),Be=a.subTree;a.subTree=ue,x(Be,ue,h(Be.el),v(Be),a,b,_),T.el=ue.el,Y===null&&nc(a,ue.el),H&&Ee(H,b),(re=T.props&&T.props.onVnodeUpdated)&&Ee(()=>Ge(re,k,T,Q),b)}else{let T;const{el:D,props:H}=d,{bm:k,m:Q,parent:Y,root:re,type:ue}=a,Be=dn(d);St(a,!1),k&&In(k),!Be&&(T=H&&H.onVnodeBeforeMount)&&Ge(T,Y,d),St(a,!0);{re.ce&&re.ce._hasShadowRoot()&&re.ce._injectChildStyle(ue,a.parent?a.parent.type:void 0);const je=a.subTree=Sr(a);x(null,je,p,y,a,b,_),d.el=je.el}if(Q&&Ee(Q,b),!Be&&(T=H&&H.onVnodeMounted)){const je=d;Ee(()=>Ge(T,Y,je),b)}(d.shapeFlag&256||Y&&dn(Y.vnode)&&Y.vnode.shapeFlag&256)&&a.a&&Ee(a.a,b),a.isMounted=!0,d=p=y=null}};a.scope.on();const w=a.effect=new yi(S);a.scope.off();const E=a.update=w.run.bind(w),L=a.job=w.runIfDirty.bind(w);L.i=a,L.id=a.uid,w.scheduler=()=>er(L),St(a,!0),E()},z=(a,d,p)=>{d.component=a;const y=a.vnode.props;a.vnode=d,a.next=null,rc(a,d.props,y,p),cc(a,d.children,p),ot(),pr(a),lt()},G=(a,d,p,y,b,_,A,S,w=!1)=>{const E=a&&a.children,L=a?a.shapeFlag:0,T=d.children,{patchFlag:D,shapeFlag:H}=d;if(D>0){if(D&128){ht(E,T,p,y,b,_,A,S,w);return}else if(D&256){Qe(E,T,p,y,b,_,A,S,w);return}}H&8?(L&16&&Re(E,b,_),T!==E&&u(p,T)):L&16?H&16?ht(E,T,p,y,b,_,A,S,w):Re(E,b,_,!0):(L&8&&u(p,""),H&16&&Ve(T,p,y,b,_,A,S,w))},Qe=(a,d,p,y,b,_,A,S,w)=>{a=a||Ut,d=d||Ut;const E=a.length,L=d.length,T=Math.min(E,L);let D;for(D=0;DL?Re(a,b,_,!0,!1,T):Ve(d,p,y,b,_,A,S,w,T)},ht=(a,d,p,y,b,_,A,S,w)=>{let E=0;const L=d.length;let T=a.length-1,D=L-1;for(;E<=T&&E<=D;){const H=a[E],k=d[E]=w?nt(d[E]):qe(d[E]);if(en(H,k))x(H,k,p,null,b,_,A,S,w);else break;E++}for(;E<=T&&E<=D;){const H=a[T],k=d[D]=w?nt(d[D]):qe(d[D]);if(en(H,k))x(H,k,p,null,b,_,A,S,w);else break;T--,D--}if(E>T){if(E<=D){const H=D+1,k=HD)for(;E<=T;)be(a[E],b,_,!0),E++;else{const H=E,k=E,Q=new Map;for(E=k;E<=D;E++){const we=d[E]=w?nt(d[E]):qe(d[E]);we.key!=null&&Q.set(we.key,E)}let Y,re=0;const ue=D-k+1;let Be=!1,je=0;const Xt=new Array(ue);for(E=0;E=ue){be(we,b,_,!0);continue}let ke;if(we.key!=null)ke=Q.get(we.key);else for(Y=k;Y<=D;Y++)if(Xt[Y-k]===0&&en(we,d[Y])){ke=Y;break}ke===void 0?be(we,b,_,!0):(Xt[ke-k]=E+1,ke>=je?je=ke:Be=!0,x(we,d[ke],p,null,b,_,A,S,w),re++)}const lr=Be?dc(Xt):Ut;for(Y=lr.length-1,E=ue-1;E>=0;E--){const we=k+E,ke=d[we],cr=d[we+1],ar=we+1{const{el:_,type:A,transition:S,children:w,shapeFlag:E}=a;if(E&6){Ue(a.component.subTree,d,p,y);return}if(E&128){a.suspense.move(d,p,y);return}if(E&64){A.move(a,d,p,M);return}if(A===tt){s(_,d,p);for(let T=0;TS.enter(_),b));else{const{leave:T,delayLeave:D,afterLeave:H}=S,k=()=>{a.ctx.isUnmounted?r(_):s(_,d,p)},Q=()=>{const Y=_._isLeaving||!!_[fs];_._isLeaving&&_[fs](!0),S.persisted&&!Y?k():T(_,()=>{k(),H&&H()})};D?D(_,k,Q):Q()}else s(_,d,p)},be=(a,d,p,y=!1,b=!1)=>{const{type:_,props:A,ref:S,children:w,dynamicChildren:E,shapeFlag:L,patchFlag:T,dirs:D,cacheIndex:H,memo:k}=a;if(T===-2&&(b=!1),S!=null&&(ot(),fn(S,null,p,a,!0),lt()),H!=null&&(d.renderCache[H]=void 0),L&256){d.ctx.deactivate(a);return}const Q=L&1&&D,Y=!dn(a);let re;if(Y&&(re=A&&A.onVnodeBeforeUnmount)&&Ge(re,d,a),L&6)Et(a.component,p,y);else{if(L&128){a.suspense.unmount(p,y);return}Q&&wt(a,null,d,"beforeUnmount"),L&64?a.type.remove(a,d,p,M,y):E&&!E.hasOnce&&(_!==tt||T>0&&T&64)?Re(E,d,p,!1,!0):(_===tt&&T&384||!b&&L&16)&&Re(w,d,p),y&&Nt(a)}const ue=k!=null&&H==null;(Y&&(re=A&&A.onVnodeUnmounted)||Q||ue)&&Ee(()=>{re&&Ge(re,d,a),Q&&wt(a,null,d,"unmounted"),ue&&(a.el=null)},p)},Nt=a=>{const{type:d,el:p,anchor:y,transition:b}=a;if(d===tt){Mt(p,y);return}if(d===ps){O(a);return}const _=()=>{r(p),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(a.shapeFlag&1&&b&&!b.persisted){const{leave:A,delayLeave:S}=b,w=()=>A(p,_);S?S(a.el,_,w):w()}else _()},Mt=(a,d)=>{let p;for(;a!==d;)p=g(a),r(a),a=p;r(d)},Et=(a,d,p)=>{const{bum:y,scope:b,job:_,subTree:A,um:S,m:w,a:E}=a;Rr(w),Rr(E),y&&In(y),b.stop(),_&&(_.flags|=8,be(A,a,d,p)),S&&Ee(S,d),Ee(()=>{a.isUnmounted=!0},d)},Re=(a,d,p,y=!1,b=!1,_=0)=>{for(let A=_;A{if(a.shapeFlag&6)return v(a.component.subTree);if(a.shapeFlag&128)return a.suspense.next();const d=g(a.anchor||a.el),p=d&&d[Rl];return p?g(p):d};let P=!1;const R=(a,d,p)=>{let y;a==null?d._vnode&&(be(d._vnode,null,null,!0),y=d._vnode.component):x(d._vnode||null,a,d,null,null,null,p),d._vnode=a,P||(P=!0,pr(y),Fi(),P=!1)},M={p:x,um:be,m:Ue,r:Nt,mt:Qt,mc:Ve,pc:G,pbc:Fe,n:v,o:e};return{render:R,hydrate:void 0,createApp:Yl(R)}}function hs({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function St({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function fc(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function lo(e,t,n=!1){const s=e.children,r=t.children;if(V(s)&&V(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function co(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:co(t)}function Rr(e){if(e)for(let t=0;te.__isSuspense;function hc(e,t){t&&t.pendingBranch?V(e)?t.effects.push(...e):t.effects.push(e):wl(e)}const tt=Symbol.for("v-fgt"),ns=Symbol.for("v-txt"),at=Symbol.for("v-cmt"),ps=Symbol.for("v-stc"),Ot=[];let Ae=null;function on(e=!1){Ot.push(Ae=e?null:[])}function fo(){Ot.pop(),Ae=Ot[Ot.length-1]||null}let yn=1;function Bn(e,t=!1){yn+=e,e<0&&Ae&&t&&(Ae.hasOnce=!0)}function ho(e){return e.dynamicChildren=yn>0?Ae||Ut:null,fo(),yn>0&&Ae&&Ae.push(e),e}function Tr(e,t,n,s,r,i){return ho(Rt(e,t,n,s,r,i,!0))}function Ds(e,t,n,s,r){return ho(le(e,t,n,s,r,!0))}function jn(e){return e?e.__v_isVNode===!0:!1}function en(e,t){return e.type===t.type&&e.key===t.key}const po=({key:e})=>e??null,Dn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?se(e)||ge(e)||B(e)?{i:Se,r:e,k:t,f:!!n}:e:null);function Rt(e,t=null,n=null,s=0,r=null,i=e===tt?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&po(t),ref:t&&Dn(t),scopeId:Ui,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Se};return l?(kn(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=se(n)?8:16),yn>0&&!o&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const le=pc;function pc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Bl)&&(e=at),jn(e)){const l=$t(e,t,!0);return n&&kn(l,n),yn>0&&!i&&Ae&&(l.shapeFlag&6?Ae[Ae.indexOf(e)]=l:Ae.push(l)),l.patchFlag=-2,l}if(Rc(e)&&(e=e.__vccOpts),t){t=gc(t);let{class:l,style:c}=t;l&&!se(l)&&(t.class=jt(l)),q(c)&&(Xs(c)&&!V(c)&&(c=de({},c)),t.style=Ks(c))}const o=se(e)?1:uo(e)?128:Zn(e)?64:q(e)?4:B(e)?2:0;return Rt(e,t,n,s,r,o,i,!0)}function gc(e){return e?Xs(e)||to(e)?de({},e):e:null}function $t(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?mc(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&po(f),ref:t&&t.ref?n&&i?V(i)?i.concat(Dn(t)):[i,Dn(t)]:Dn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==tt?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&$t(e.ssContent),ssFallback:e.ssFallback&&$t(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&tr(u,c.clone(u)),u}function Ft(e=" ",t=0){return le(ns,null,e,t)}function Cr(e="",t=!1){return t?(on(),Ds(at,null,e)):le(at,null,e)}function qe(e){return e==null||typeof e=="boolean"?le(at):V(e)?le(tt,null,e.slice()):jn(e)?nt(e):le(ns,null,String(e))}function nt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:$t(e)}function kn(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(V(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),kn(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!to(t)?t._ctx=Se:r===3&&Se&&(Se.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(B(t)){if(s&65){kn(e,{default:t});return}t={default:t,_ctx:Se},n=32}else t=String(t),s&64?(n=16,t=[Ft(t)]):n=8;e.children=t,e.shapeFlag|=n}function mc(...e){const t={};for(let n=0;npe||Se;let Gn,vn;{const e=Jn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Gn=t("__VUE_INSTANCE_SETTERS__",n=>pe=n),vn=t("__VUE_SSR_SETTERS__",n=>bn=n)}const xn=e=>{const t=pe;return Gn(e),e.scope.on(),()=>{e.scope.off(),Gn(t)}},Pr=()=>{pe&&pe.scope.off(),Gn(null)};function go(e){return e.vnode.shapeFlag&4}let bn=!1;function Ec(e,t=!1,n=!1){t&&vn(t);const{props:s,children:r}=e.vnode,i=go(e);sc(e,s,i,t),lc(e,r,n||t);const o=i?wc(e,t):void 0;return t&&vn(!1),o}function wc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,kl);const{setup:s}=n;if(s){ot();const r=e.setupContext=s.length>1?Ac(e):null,i=xn(e),o=An(s,e,0,[e.props,r]),l=fi(o);if(lt(),i(),(l||e.sp)&&!dn(e)&&Ki(e),l){if(o.then(Pr,Pr),t)return o.then(c=>{vn(!0);try{Or(e,c,t)}finally{vn(!1)}}).catch(c=>{Xn(c,e,0)});e.asyncDep=o}else Or(e,o)}else mo(e)}function Or(e,t,n){B(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:q(t)&&(e.setupState=Di(t)),mo(e)}function mo(e,t,n){const s=e.type;e.render||(e.render=s.render||Ye);{const r=xn(e);ot();try{Gl(e)}finally{lt(),r()}}}const Sc={get(e,t){return he(e,"get",""),e[t]}};function Ac(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Sc),slots:e.slots,emit:e.emit,expose:t}}function ss(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Di(fl(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in hn)return hn[n](e)},has(t,n){return n in t||n in hn}})):e.proxy}function xc(e,t=!0){return B(e)?e.displayName||e.name:e.name||t&&e.__name}function Rc(e){return B(e)&&"__vccOpts"in e}const Oe=(e,t)=>_l(e,t,bn);function En(e,t,n){try{Bn(-1);const s=arguments.length;return s===2?q(t)&&!V(t)?jn(t)?le(e,null,[t]):le(e,t):le(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&jn(n)&&(n=[n]),le(e,t,n))}finally{Bn(1)}}const Tc="3.5.41";/** +**/function An(e,t,n,s){try{return s?e(...s):e()}catch(r){Xn(r,t,n)}}function De(e,t,n,s){if(B(e)){const r=An(e,t,n,s);return r&&fi(r)&&r.catch(i=>{Xn(i,t,n)}),r}if(V(e)){const r=[];for(let i=0;i>>1,r=ye[s],i=_n(r);i=_n(n)?ye.push(e):ye.splice(El(t),0,e),e.flags|=1,Vi()}}function Vi(){Vn||(Vn=Li.then(Hi))}function wl(e){if(!V(e))gt&&e.id===-1?gt.splice(Lt+1,0,e):e.flags&1||(kt.push(e),e.flags|=1);else for(let t=0;t_n(n)-_n(s));if(kt.length=0,gt){for(let n=0;ne.id==null?e.flags&2?-1:1/0:e.id;function Hi(e){try{for($e=0;$e{s._d&&Bn(-1);const i=Fn(t),o=Ot.length;let l;try{l=e(...r)}finally{for(let c=Ot.length;c>o;c--)fo();Fn(i),s._d&&Bn(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function Mu(e,t){if(Se===null)return e;const n=ss(Se),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&B(t)?t.call(s&&s.proxy):t}}const Sl=Symbol.for("v-scx"),Al=()=>Ne(Sl);function Mn(e,t,n){return Bi(e,t,n)}function Bi(e,t,n=X){const{immediate:s,deep:r,flush:i,once:o}=n,l=de({},n),c=t&&s||!t&&i!=="post";let f;if(bn){if(i==="sync"){const m=Al();f=m.__watcherHandles||(m.__watcherHandles=[])}else if(!c){const m=()=>{};return m.stop=Ye,m.resume=Ye,m.pause=Ye,m}}const u=pe;l.call=(m,I,R)=>De(m,u,I,R);let h=!1;i==="post"?l.scheduler=m=>{Ee(m,u&&u.suspense)}:i!=="sync"&&(h=!0,l.scheduler=(m,I)=>{I?m():er(m)}),l.augmentJob=m=>{t&&(m.flags|=4),h&&(m.flags|=2,u&&(m.id=u.uid,m.i=u))};const g=vl(e,t,l);return bn&&(f?f.push(g):c&&g()),g}function Rl(e,t,n){const s=this.proxy,r=se(e)?e.includes(".")?ji(s,e):()=>s[e]:e.bind(s,s);let i;B(t)?i=t:(i=t.handler,n=t);const o=Rn(this),l=Bi(r,i.bind(s),n);return o(),l}function ji(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,fs=Symbol("_leaveCb");function Tl(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==at){t=n;break}}return t}function ki(e){if(!nr(e))return Zn(e.type)&&e.children?Tl(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&B(n.default))return n.default()}}function tr(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const n=e.component.subTree;tr(Zn(n.type)&&ki(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Gi(e,t){return B(e)?de({name:e.name},t,{setup:e}):e}function Ki(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function gr(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const Hn=new WeakMap;function fn(e,t,n,s,r=!1){if(V(e)){e.forEach((R,U)=>fn(R,t&&(V(t)?t[U]:t),n,s,r));return}if(dn(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&fn(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?ss(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,u=l.refs===X?l.refs={}:l.refs,h=l.setupState,g=$(h),m=h===X?ui:R=>gr(u,R)?!1:W(g,R),I=(R,U)=>!(U&&gr(u,U));if(f!=null&&f!==c){if(mr(t),se(f))u[f]=null,m(f)&&(h[f]=null);else if(ge(f)){const R=t;I(f,R.k)&&(f.value=null),R.k&&(u[R.k]=null)}}if(B(c))An(c,l,12,[o,u]);else{const R=se(c),U=ge(c);if(R||U){const F=()=>{if(e.f){const C=R?m(c)?h[c]:u[c]:I()||!e.k?c.value:u[e.k];if(r)V(C)&&ks(C,i);else if(V(C))C.includes(i)||C.push(i);else if(R)u[c]=[i],m(c)&&(h[c]=u[c]);else{const N=[i];I(c,e.k)&&(c.value=N),e.k&&(u[e.k]=N)}}else R?(u[c]=o,m(c)&&(h[c]=o)):U&&(I(c,e.k)&&(c.value=o),e.k&&(u[e.k]=o))};if(o){const C=()=>{F(),Hn.delete(e)};C.id=-1,Hn.set(e,C),Ee(C,n)}else mr(e),F()}}}function mr(e){const t=Hn.get(e);t&&(t.flags|=8,Hn.delete(e))}Jn().requestIdleCallback;Jn().cancelIdleCallback;const dn=e=>!!e.type.__asyncLoader,nr=e=>e.type.__isKeepAlive;function Cl(e,t){$i(e,"a",t)}function Pl(e,t){$i(e,"da",t)}function $i(e,t,n=pe){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(es(t,s,n),n){let r=n.parent;for(;r&&r.parent;)nr(r.parent.vnode)&&Ol(s,t,n,r),r=r.parent}}function Ol(e,t,n,s){const r=es(t,e,s,!0);qi(()=>{ks(s[t],r)},n)}function es(e,t,n=pe,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{ot();const l=Rn(n),c=De(t,n,e,o);return l(),lt(),c});return s?r.unshift(i):r.push(i),i}}const ut=e=>(t,n=pe)=>{(!bn||e==="sp")&&es(e,(...s)=>t(...s),n)},Il=ut("bm"),Wi=ut("m"),Nl=ut("bu"),Ml=ut("u"),Dl=ut("bum"),qi=ut("um"),Ll=ut("sp"),Vl=ut("rtg"),Fl=ut("rtc");function Hl(e,t=pe){es("ec",e,t)}const Ul="components";function _r(e,t){return jl(Ul,e,!0,t)||e}const Bl=Symbol.for("v-ndc");function jl(e,t,n=!0,s=!1){const r=Se||pe;if(r){const i=r.type;{const l=Rc(i,!1);if(l&&(l===t||l===ve(t)||l===zn(ve(t))))return i}const o=yr(r[e]||i[e],t)||yr(r.appContext[e],t);return!o&&s?i:o}}function yr(e,t){return e&&(e[t]||e[ve(t)]||e[zn(ve(t))])}function Du(e,t,n,s){let r;const i=n,o=V(e);if(o||se(e)){const l=o&&Pt(e);let c=!1,f=!1;l&&(c=!Pe(e),f=ct(e),e=Qn(e)),r=new Array(e.length);for(let u=0,h=e.length;ut(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;ce?go(e)?ss(e):Os(e.parent):null,hn=de(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Os(e.parent),$root:e=>Os(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Yi(e),$forceUpdate:e=>e.f||(e.f=()=>{er(e.update)}),$nextTick:e=>e.n||(e.n=Zs.bind(e.proxy)),$watch:e=>Rl.bind(e)}),ds=(e,t)=>e!==X&&!e.__isScriptSetup&&W(e,t),kl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;if(t[0]!=="$"){const g=o[t];if(g!==void 0)switch(g){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(ds(s,t))return o[t]=1,s[t];if(r!==X&&W(r,t))return o[t]=2,r[t];if(W(i,t))return o[t]=3,i[t];if(n!==X&&W(n,t))return o[t]=4,n[t];Is&&(o[t]=0)}}const f=hn[t];let u,h;if(f)return t==="$attrs"&&he(e.attrs,"get",""),f(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(n!==X&&W(n,t))return o[t]=4,n[t];if(h=c.config.globalProperties,W(h,t))return h[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return ds(r,t)?(r[t]=n,!0):s!==X&&W(s,t)?(s[t]=n,!0):W(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:i,type:o}},l){let c;return!!(n[l]||e!==X&&l[0]!=="$"&&W(e,l)||ds(t,l)||W(i,l)||W(s,l)||W(hn,l)||W(r.config.globalProperties,l)||(c=o.__cssModules)&&c[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:W(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function vr(e){return V(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Is=!0;function Gl(e){const t=Yi(e),n=e.proxy,s=e.ctx;Is=!1,t.beforeCreate&&br(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:u,beforeMount:h,mounted:g,beforeUpdate:m,updated:I,activated:R,deactivated:U,beforeDestroy:F,beforeUnmount:C,destroyed:N,unmounted:O,render:J,renderTracked:ie,renderTriggered:te,errorCaptured:Ve,serverPrefetch:ft,expose:Fe,inheritAttrs:dt,components:bt,directives:He,filters:Qt}=t;if(f&&Kl(f,s,null),o)for(const z in o){const G=o[z];B(G)&&(s[z]=G.bind(n))}if(r){const z=r.call(n,n);q(z)&&(e.data=Jt(z))}if(Is=!0,i)for(const z in i){const G=i[z],Qe=B(G)?G.bind(n,n):B(G.get)?G.get.bind(n,n):Ye,ht=!B(G)&&B(G.set)?G.set.bind(n):Ye,Ue=Oe({get:Qe,set:ht});Object.defineProperty(s,z,{enumerable:!0,configurable:!0,get:()=>Ue.value,set:be=>Ue.value=be})}if(l)for(const z in l)zi(l[z],s,n,z);if(c){const z=B(c)?c.call(n):c;Reflect.ownKeys(z).forEach(G=>{Nn(G,z[G])})}u&&br(u,e,"c");function ce(z,G){V(G)?G.forEach(Qe=>z(Qe.bind(n))):G&&z(G.bind(n))}if(ce(Il,h),ce(Wi,g),ce(Nl,m),ce(Ml,I),ce(Cl,R),ce(Pl,U),ce(Hl,Ve),ce(Fl,ie),ce(Vl,te),ce(Dl,C),ce(qi,O),ce(Ll,ft),V(Fe))if(Fe.length){const z=e.exposed||(e.exposed={});Fe.forEach(G=>{Object.defineProperty(z,G,{get:()=>n[G],set:Qe=>n[G]=Qe,enumerable:!0})})}else e.exposed||(e.exposed={});J&&e.render===Ye&&(e.render=J),dt!=null&&(e.inheritAttrs=dt),bt&&(e.components=bt),He&&(e.directives=He),ft&&Ki(e)}function Kl(e,t,n=Ye){V(e)&&(e=Ns(e));for(const s in e){const r=e[s];let i;q(r)?"default"in r?i=Ne(r.from||s,r.default,!0):i=Ne(r.from||s):i=Ne(r),ge(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function br(e,t,n){De(V(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function zi(e,t,n,s){let r=s.includes(".")?ji(n,s):()=>n[s];if(se(e)){const i=t[e];B(i)&&Mn(r,i)}else if(B(e))Mn(r,e.bind(n));else if(q(e))if(V(e))e.forEach(i=>zi(i,t,n,s));else{const i=B(e.handler)?e.handler.bind(n):t[e.handler];B(i)&&Mn(r,i,e)}}function Yi(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Un(c,f,o,!0)),Un(c,t,o)),q(t)&&i.set(t,c),c}function Un(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Un(e,i,n,!0),r&&r.forEach(o=>Un(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=$l[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const $l={data:Er,props:wr,emits:wr,methods:rn,computed:rn,beforeCreate:me,created:me,beforeMount:me,mounted:me,beforeUpdate:me,updated:me,beforeDestroy:me,beforeUnmount:me,destroyed:me,unmounted:me,activated:me,deactivated:me,errorCaptured:me,serverPrefetch:me,components:rn,directives:rn,watch:ql,provide:Er,inject:Wl};function Er(e,t){return t?e?function(){return de(B(e)?e.call(this,this):e,B(t)?t.call(this,this):t)}:t:e}function Wl(e,t){return rn(Ns(e),Ns(t))}function Ns(e){if(V(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ve(t)}Modifiers`]||e[`${vt(t)}Modifiers`];function Ql(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||X;let r=n;const i=t.startsWith("update:"),o=i&&Jl(s,t.slice(7));o&&(o.trim&&(r=n.map(u=>se(u)?u.trim():u)),o.number&&(r=n.map(Yn)));let l,c=s[l=os(t)]||s[l=os(ve(t))];!c&&i&&(c=s[l=os(vt(t))]),c&&De(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,De(f,e,6,r)}}const Xl=new WeakMap;function Qi(e,t,n=!1){const s=n?Xl:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!B(e)){const c=f=>{const u=Qi(f,t,!0);u&&(l=!0,de(o,u))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(q(e)&&s.set(e,null),null):(V(i)?i.forEach(c=>o[c]=null):de(o,i),q(e)&&s.set(e,o),o)}function ts(e,t){return!e||!$n(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),W(e,t[0].toLowerCase()+t.slice(1))||W(e,vt(t))||W(e,t))}function Sr(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:u,props:h,data:g,setupState:m,ctx:I,inheritAttrs:R}=e,U=Fn(e);let F,C;try{if(n.shapeFlag&4){const O=r||s,J=O;F=qe(f.call(J,O,u,h,m,g,I)),C=l}else{const O=t;F=qe(O.length>1?O(h,{attrs:l,slots:o,emit:c}):O(h,null)),C=t.props?l:Zl(l)}}catch(O){Ot.length=0,Xn(O,e,1),F=le(at)}let N=F;if(C&&R!==!1){const O=Object.keys(C),{shapeFlag:J}=N;O.length&&J&7&&(i&&O.some(Wn)&&(C=ec(C,i)),N=$t(N,C,!1,!0))}if(n.dirs&&(N=$t(N,null,!1,!0),N.dirs=N.dirs?N.dirs.concat(n.dirs):n.dirs),n.transition){const O=Zn(N.type)&&ki(N)||N;tr(O,n.transition)}return F=N,Fn(U),F}const Zl=e=>{let t;for(const n in e)(n==="class"||n==="style"||$n(n))&&((t||(t={}))[n]=e[n]);return t},ec=(e,t)=>{const n={};for(const s in e)(!Wn(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function tc(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Ar(s,o,f):!!o;if(c&8){const u=t.dynamicProps;for(let h=0;hObject.create(Zi),to=e=>Object.getPrototypeOf(e)===Zi;function sc(e,t,n,s=!1){const r={},i=eo();e.propsDefaults=Object.create(null),no(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Ni(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function rc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=$(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const u=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[g,m]=so(h,t,!0);de(o,g),m&&l.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!i&&!c)return q(e)&&s.set(e,Ut),Ut;if(V(i))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",rr=e=>V(e)?e.map(qe):[qe(e)],oc=(e,t,n)=>{if(t._n)return t;const s=Vt((...r)=>rr(t(...r)),n);return s._c=!1,s},ro=(e,t,n)=>{const s=e._ctx;for(const r in e){if(sr(r))continue;const i=e[r];if(B(i))t[r]=oc(r,i,s);else if(i!=null){const o=rr(i);t[r]=()=>o}}},io=(e,t)=>{const n=rr(t);e.slots.default=()=>n},oo=(e,t,n)=>{for(const s in t)(n||!sr(s))&&(e[s]=t[s])},lc=(e,t,n)=>{const s=e.slots=eo();if(e.vnode.shapeFlag&32){const r=t._;r?(oo(s,t,n),n&&pi(s,"_",r,!0)):ro(t,s)}else t&&io(e,t)},cc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=X;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:oo(r,t,n):(i=!t.$stable,ro(t,r)),o=t}else t&&(io(e,t),o={default:1});if(i)for(const l in r)!sr(l)&&o[l]==null&&delete r[l]},Ee=hc;function ac(e){return uc(e)}function uc(e,t){const n=Jn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:u,parentNode:h,nextSibling:g,setScopeId:m=Ye,insertStaticContent:I}=e,R=(a,d,p,y=null,b=null,_=null,A=void 0,S=null,w=!!d.dynamicChildren)=>{if(a===d)return;a&&!en(a,d)&&(y=v(a),be(a,b,_,!0),a=null),d.patchFlag===-2&&(w=!1,d.dynamicChildren=null);const{type:E,ref:L,shapeFlag:T}=d;switch(E){case ns:U(a,d,p,y);break;case at:F(a,d,p,y);break;case ps:a==null&&C(d,p,y,A);break;case tt:bt(a,d,p,y,b,_,A,S,w);break;default:T&1?J(a,d,p,y,b,_,A,S,w):T&6?He(a,d,p,y,b,_,A,S,w):(T&64||T&128)&&E.process(a,d,p,y,b,_,A,S,w,M)}L!=null&&b?fn(L,a&&a.ref,_,d||a,!d):L==null&&a&&a.ref!=null&&fn(a.ref,null,_,a,!0)},U=(a,d,p,y)=>{if(a==null)s(d.el=l(d.children),p,y);else{const b=d.el=a.el;d.children!==a.children&&f(b,d.children)}},F=(a,d,p,y)=>{a==null?s(d.el=c(d.children||""),p,y):d.el=a.el},C=(a,d,p,y)=>{[a.el,a.anchor]=I(a.children,d,p,y,a.el,a.anchor)},N=({el:a,anchor:d},p,y)=>{let b;for(;a&&a!==d;)b=g(a),s(a,p,y),a=b;s(d,p,y)},O=({el:a,anchor:d})=>{let p;for(;a&&a!==d;)p=g(a),r(a),a=p;r(d)},J=(a,d,p,y,b,_,A,S,w)=>{if(d.type==="svg"?A="svg":d.type==="math"&&(A="mathml"),a==null)ie(d,p,y,b,_,A,S,w);else{const E=a.el&&a.el._isVueCE?a.el:null;try{E&&E._beginPatch(),ft(a,d,b,_,A,S,w)}finally{E&&E._endPatch()}}},ie=(a,d,p,y,b,_,A,S)=>{let w,E;const{props:L,shapeFlag:T,transition:D,dirs:H}=a;if(w=a.el=o(a.type,_,L&&L.is,L),T&8?u(w,a.children):T&16&&Ve(a.children,w,null,y,b,hs(a,_),A,S),H&&wt(a,null,y,"created"),te(w,a,a.scopeId,A,y),L){for(const Q in L)Q!=="value"&&!cn(Q)&&i(w,Q,null,L[Q],_,y);"value"in L&&i(w,"value",null,L.value,_),(E=L.onVnodeBeforeMount)&&Ge(E,y,a)}H&&wt(a,null,y,"beforeMount");const k=fc(b,D);k&&D.beforeEnter(w),s(w,d,p),((E=L&&L.onVnodeMounted)||k||H)&&Ee(()=>{try{E&&Ge(E,y,a),k&&D.enter(w),H&&wt(a,null,y,"mounted")}finally{}},b)},te=(a,d,p,y,b)=>{if(p&&m(a,p),y)for(let _=0;_{for(let E=w;E{const S=d.el=a.el;let{patchFlag:w,dynamicChildren:E,dirs:L}=d;w|=a.patchFlag&16;const T=a.props||X,D=d.props||X;let H;if(p&&St(p,!1),(H=D.onVnodeBeforeUpdate)&&Ge(H,p,d,a),L&&wt(d,a,p,"beforeUpdate"),p&&St(p,!0),E&&(!a.dynamicChildren||a.dynamicChildren.length!==E.length)&&(w=0,A=!1,E=null),(T.innerHTML&&D.innerHTML==null||T.textContent&&D.textContent==null)&&u(S,""),E?Fe(a.dynamicChildren,E,S,p,y,hs(d,b),_):A||G(a,d,S,null,p,y,hs(d,b),_,!1),w>0){if(w&16)dt(S,T,D,p,b);else if(w&2&&T.class!==D.class&&i(S,"class",null,D.class,b),w&4&&i(S,"style",T.style,D.style,b),w&8){const k=d.dynamicProps;for(let Q=0;Q{H&&Ge(H,p,d,a),L&&wt(d,a,p,"updated")},y)},Fe=(a,d,p,y,b,_,A)=>{for(let S=0;S{if(d!==p){if(d!==X)for(const _ in d)!cn(_)&&!(_ in p)&&i(a,_,d[_],null,b,y);for(const _ in p){if(cn(_))continue;const A=p[_],S=d[_];A!==S&&_!=="value"&&i(a,_,S,A,b,y)}"value"in p&&i(a,"value",d.value,p.value,b)}},bt=(a,d,p,y,b,_,A,S,w)=>{const E=d.el=a?a.el:l(""),L=d.anchor=a?a.anchor:l("");let{patchFlag:T,dynamicChildren:D,slotScopeIds:H}=d;H&&(S=S?S.concat(H):H),a==null?(s(E,p,y),s(L,p,y),Ve(d.children||[],p,L,b,_,A,S,w)):T>0&&T&64&&D&&a.dynamicChildren&&a.dynamicChildren.length===D.length?(Fe(a.dynamicChildren,D,p,b,_,A,S),(d.key!=null||b&&d===b.subTree)&&lo(a,d,!0)):G(a,d,p,L,b,_,A,S,w)},He=(a,d,p,y,b,_,A,S,w)=>{d.slotScopeIds=S,a==null?d.shapeFlag&512?b.ctx.activate(d,p,y,A,w):Qt(d,p,y,b,_,A,w):It(a,d,w)},Qt=(a,d,p,y,b,_,A)=>{const S=a.component=vc(a,y,b);if(nr(a)&&(S.ctx.renderer=M),Ec(S,!1,A),S.asyncDep){if(b&&b.registerDep(S,ce,A),!a.el){const w=S.subTree=le(at);F(null,w,d,p),a.placeholder=w.el}}else ce(S,a,d,p,b,_,A)},It=(a,d,p)=>{const y=d.component=a.component;if(tc(a,d,p))if(y.asyncDep&&!y.asyncResolved){z(y,d,p);return}else y.next=d,y.update();else d.el=a.el,y.vnode=d},ce=(a,d,p,y,b,_,A)=>{const S=()=>{if(a.isMounted){let{next:T,bu:D,u:H,parent:k,vnode:Q}=a;{const je=co(a);if(je){T&&(T.el=Q.el,z(a,T,A)),je.asyncDep.then(()=>{Ee(()=>{a.isUnmounted||E()},b)});return}}let Y=T,re;St(a,!1),T?(T.el=Q.el,z(a,T,A)):T=Q,D&&In(D),(re=T.props&&T.props.onVnodeBeforeUpdate)&&Ge(re,k,T,Q),St(a,!0);const ue=Sr(a),Be=a.subTree;a.subTree=ue,R(Be,ue,h(Be.el),v(Be),a,b,_),T.el=ue.el,Y===null&&nc(a,ue.el),H&&Ee(H,b),(re=T.props&&T.props.onVnodeUpdated)&&Ee(()=>Ge(re,k,T,Q),b)}else{let T;const{el:D,props:H}=d,{bm:k,m:Q,parent:Y,root:re,type:ue}=a,Be=dn(d);St(a,!1),k&&In(k),!Be&&(T=H&&H.onVnodeBeforeMount)&&Ge(T,Y,d),St(a,!0);{re.ce&&re.ce._hasShadowRoot()&&re.ce._injectChildStyle(ue,a.parent?a.parent.type:void 0);const je=a.subTree=Sr(a);R(null,je,p,y,a,b,_),d.el=je.el}if(Q&&Ee(Q,b),!Be&&(T=H&&H.onVnodeMounted)){const je=d;Ee(()=>Ge(T,Y,je),b)}(d.shapeFlag&256||Y&&dn(Y.vnode)&&Y.vnode.shapeFlag&256)&&a.a&&Ee(a.a,b),a.isMounted=!0,d=p=y=null}};a.scope.on();const w=a.effect=new yi(S);a.scope.off();const E=a.update=w.run.bind(w),L=a.job=w.runIfDirty.bind(w);L.i=a,L.id=a.uid,w.scheduler=()=>er(L),St(a,!0),E()},z=(a,d,p)=>{d.component=a;const y=a.vnode.props;a.vnode=d,a.next=null,rc(a,d.props,y,p),cc(a,d.children,p),ot(),pr(a),lt()},G=(a,d,p,y,b,_,A,S,w=!1)=>{const E=a&&a.children,L=a?a.shapeFlag:0,T=d.children,{patchFlag:D,shapeFlag:H}=d;if(D>0){if(D&128){ht(E,T,p,y,b,_,A,S,w);return}else if(D&256){Qe(E,T,p,y,b,_,A,S,w);return}}H&8?(L&16&&xe(E,b,_),T!==E&&u(p,T)):L&16?H&16?ht(E,T,p,y,b,_,A,S,w):xe(E,b,_,!0):(L&8&&u(p,""),H&16&&Ve(T,p,y,b,_,A,S,w))},Qe=(a,d,p,y,b,_,A,S,w)=>{a=a||Ut,d=d||Ut;const E=a.length,L=d.length,T=Math.min(E,L);let D;for(D=0;DL?xe(a,b,_,!0,!1,T):Ve(d,p,y,b,_,A,S,w,T)},ht=(a,d,p,y,b,_,A,S,w)=>{let E=0;const L=d.length;let T=a.length-1,D=L-1;for(;E<=T&&E<=D;){const H=a[E],k=d[E]=w?nt(d[E]):qe(d[E]);if(en(H,k))R(H,k,p,null,b,_,A,S,w);else break;E++}for(;E<=T&&E<=D;){const H=a[T],k=d[D]=w?nt(d[D]):qe(d[D]);if(en(H,k))R(H,k,p,null,b,_,A,S,w);else break;T--,D--}if(E>T){if(E<=D){const H=D+1,k=HD)for(;E<=T;)be(a[E],b,_,!0),E++;else{const H=E,k=E,Q=new Map;for(E=k;E<=D;E++){const we=d[E]=w?nt(d[E]):qe(d[E]);we.key!=null&&Q.set(we.key,E)}let Y,re=0;const ue=D-k+1;let Be=!1,je=0;const Xt=new Array(ue);for(E=0;E=ue){be(we,b,_,!0);continue}let ke;if(we.key!=null)ke=Q.get(we.key);else for(Y=k;Y<=D;Y++)if(Xt[Y-k]===0&&en(we,d[Y])){ke=Y;break}ke===void 0?be(we,b,_,!0):(Xt[ke-k]=E+1,ke>=je?je=ke:Be=!0,R(we,d[ke],p,null,b,_,A,S,w),re++)}const lr=Be?dc(Xt):Ut;for(Y=lr.length-1,E=ue-1;E>=0;E--){const we=k+E,ke=d[we],cr=d[we+1],ar=we+1{const{el:_,type:A,transition:S,children:w,shapeFlag:E}=a;if(E&6){Ue(a.component.subTree,d,p,y);return}if(E&128){a.suspense.move(d,p,y);return}if(E&64){A.move(a,d,p,M);return}if(A===tt){s(_,d,p);for(let T=0;TS.enter(_),b));else{const{leave:T,delayLeave:D,afterLeave:H}=S,k=()=>{a.ctx.isUnmounted?r(_):s(_,d,p)},Q=()=>{const Y=_._isLeaving||!!_[fs];_._isLeaving&&_[fs](!0),S.persisted&&!Y?k():T(_,()=>{k(),H&&H()})};D?D(_,k,Q):Q()}else s(_,d,p)},be=(a,d,p,y=!1,b=!1)=>{const{type:_,props:A,ref:S,children:w,dynamicChildren:E,shapeFlag:L,patchFlag:T,dirs:D,cacheIndex:H,memo:k}=a;if(T===-2&&(b=!1),S!=null&&(ot(),fn(S,null,p,a,!0),lt()),H!=null&&(d.renderCache[H]=void 0),L&256){d.ctx.deactivate(a);return}const Q=L&1&&D,Y=!dn(a);let re;if(Y&&(re=A&&A.onVnodeBeforeUnmount)&&Ge(re,d,a),L&6)Et(a.component,p,y);else{if(L&128){a.suspense.unmount(p,y);return}Q&&wt(a,null,d,"beforeUnmount"),L&64?a.type.remove(a,d,p,M,y):E&&!E.hasOnce&&(_!==tt||T>0&&T&64)?xe(E,d,p,!1,!0):(_===tt&&T&384||!b&&L&16)&&xe(w,d,p),y&&Nt(a)}const ue=k!=null&&H==null;(Y&&(re=A&&A.onVnodeUnmounted)||Q||ue)&&Ee(()=>{re&&Ge(re,d,a),Q&&wt(a,null,d,"unmounted"),ue&&(a.el=null)},p)},Nt=a=>{const{type:d,el:p,anchor:y,transition:b}=a;if(d===tt){Mt(p,y);return}if(d===ps){O(a);return}const _=()=>{r(p),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(a.shapeFlag&1&&b&&!b.persisted){const{leave:A,delayLeave:S}=b,w=()=>A(p,_);S?S(a.el,_,w):w()}else _()},Mt=(a,d)=>{let p;for(;a!==d;)p=g(a),r(a),a=p;r(d)},Et=(a,d,p)=>{const{bum:y,scope:b,job:_,subTree:A,um:S,m:w,a:E}=a;xr(w),xr(E),y&&In(y),b.stop(),_&&(_.flags|=8,be(A,a,d,p)),S&&Ee(S,d),Ee(()=>{a.isUnmounted=!0},d)},xe=(a,d,p,y=!1,b=!1,_=0)=>{for(let A=_;A{if(a.shapeFlag&6)return v(a.component.subTree);if(a.shapeFlag&128)return a.suspense.next();const d=g(a.anchor||a.el),p=d&&d[xl];return p?g(p):d};let P=!1;const x=(a,d,p)=>{let y;a==null?d._vnode&&(be(d._vnode,null,null,!0),y=d._vnode.component):R(d._vnode||null,a,d,null,null,null,p),d._vnode=a,P||(P=!0,pr(y),Fi(),P=!1)},M={p:R,um:be,m:Ue,r:Nt,mt:Qt,mc:Ve,pc:G,pbc:Fe,n:v,o:e};return{render:x,hydrate:void 0,createApp:Yl(x)}}function hs({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function St({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function fc(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function lo(e,t,n=!1){const s=e.children,r=t.children;if(V(s)&&V(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function co(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:co(t)}function xr(e){if(e)for(let t=0;te.__isSuspense;function hc(e,t){t&&t.pendingBranch?V(e)?t.effects.push(...e):t.effects.push(e):wl(e)}const tt=Symbol.for("v-fgt"),ns=Symbol.for("v-txt"),at=Symbol.for("v-cmt"),ps=Symbol.for("v-stc"),Ot=[];let Ae=null;function on(e=!1){Ot.push(Ae=e?null:[])}function fo(){Ot.pop(),Ae=Ot[Ot.length-1]||null}let yn=1;function Bn(e,t=!1){yn+=e,e<0&&Ae&&t&&(Ae.hasOnce=!0)}function ho(e){return e.dynamicChildren=yn>0?Ae||Ut:null,fo(),yn>0&&Ae&&Ae.push(e),e}function Tr(e,t,n,s,r,i){return ho(xt(e,t,n,s,r,i,!0))}function Ds(e,t,n,s,r){return ho(le(e,t,n,s,r,!0))}function jn(e){return e?e.__v_isVNode===!0:!1}function en(e,t){return e.type===t.type&&e.key===t.key}const po=({key:e})=>e??null,Dn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?se(e)||ge(e)||B(e)?{i:Se,r:e,k:t,f:!!n}:e:null);function xt(e,t=null,n=null,s=0,r=null,i=e===tt?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&po(t),ref:t&&Dn(t),scopeId:Ui,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Se};return l?(kn(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=se(n)?8:16),yn>0&&!o&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const le=pc;function pc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Bl)&&(e=at),jn(e)){const l=$t(e,t,!0);return n&&kn(l,n),yn>0&&!i&&Ae&&(l.shapeFlag&6?Ae[Ae.indexOf(e)]=l:Ae.push(l)),l.patchFlag=-2,l}if(xc(e)&&(e=e.__vccOpts),t){t=gc(t);let{class:l,style:c}=t;l&&!se(l)&&(t.class=jt(l)),q(c)&&(Xs(c)&&!V(c)&&(c=de({},c)),t.style=Ks(c))}const o=se(e)?1:uo(e)?128:Zn(e)?64:q(e)?4:B(e)?2:0;return xt(e,t,n,s,r,o,i,!0)}function gc(e){return e?Xs(e)||to(e)?de({},e):e:null}function $t(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?mc(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&po(f),ref:t&&t.ref?n&&i?V(i)?i.concat(Dn(t)):[i,Dn(t)]:Dn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==tt?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&$t(e.ssContent),ssFallback:e.ssFallback&&$t(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&tr(u,c.clone(u)),u}function Ft(e=" ",t=0){return le(ns,null,e,t)}function Cr(e="",t=!1){return t?(on(),Ds(at,null,e)):le(at,null,e)}function qe(e){return e==null||typeof e=="boolean"?le(at):V(e)?le(tt,null,e.slice()):jn(e)?nt(e):le(ns,null,String(e))}function nt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:$t(e)}function kn(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(V(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),kn(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!to(t)?t._ctx=Se:r===3&&Se&&(Se.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(B(t)){if(s&65){kn(e,{default:t});return}t={default:t,_ctx:Se},n=32}else t=String(t),s&64?(n=16,t=[Ft(t)]):n=8;e.children=t,e.shapeFlag|=n}function mc(...e){const t={};for(let n=0;npe||Se;let Gn,vn;{const e=Jn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Gn=t("__VUE_INSTANCE_SETTERS__",n=>pe=n),vn=t("__VUE_SSR_SETTERS__",n=>bn=n)}const Rn=e=>{const t=pe;return Gn(e),e.scope.on(),()=>{e.scope.off(),Gn(t)}},Pr=()=>{pe&&pe.scope.off(),Gn(null)};function go(e){return e.vnode.shapeFlag&4}let bn=!1;function Ec(e,t=!1,n=!1){t&&vn(t);const{props:s,children:r}=e.vnode,i=go(e);sc(e,s,i,t),lc(e,r,n||t);const o=i?wc(e,t):void 0;return t&&vn(!1),o}function wc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,kl);const{setup:s}=n;if(s){ot();const r=e.setupContext=s.length>1?Ac(e):null,i=Rn(e),o=An(s,e,0,[e.props,r]),l=fi(o);if(lt(),i(),(l||e.sp)&&!dn(e)&&Ki(e),l){if(o.then(Pr,Pr),t)return o.then(c=>{vn(!0);try{Or(e,c,t)}finally{vn(!1)}}).catch(c=>{Xn(c,e,0)});e.asyncDep=o}else Or(e,o)}else mo(e)}function Or(e,t,n){B(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:q(t)&&(e.setupState=Di(t)),mo(e)}function mo(e,t,n){const s=e.type;e.render||(e.render=s.render||Ye);{const r=Rn(e);ot();try{Gl(e)}finally{lt(),r()}}}const Sc={get(e,t){return he(e,"get",""),e[t]}};function Ac(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Sc),slots:e.slots,emit:e.emit,expose:t}}function ss(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Di(fl(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in hn)return hn[n](e)},has(t,n){return n in t||n in hn}})):e.proxy}function Rc(e,t=!0){return B(e)?e.displayName||e.name:e.name||t&&e.__name}function xc(e){return B(e)&&"__vccOpts"in e}const Oe=(e,t)=>_l(e,t,bn);function En(e,t,n){try{Bn(-1);const s=arguments.length;return s===2?q(t)&&!V(t)?jn(t)?le(e,null,[t]):le(e,t):le(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&jn(n)&&(n=[n]),le(e,t,n))}finally{Bn(1)}}const Tc="3.5.41";/** * @vue/runtime-dom v3.5.41 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let Ls;const Ir=typeof window<"u"&&window.trustedTypes;if(Ir)try{Ls=Ir.createPolicy("vue",{createHTML:e=>e})}catch{}const _o=Ls?e=>Ls.createHTML(e):e=>e,Cc="http://www.w3.org/2000/svg",Pc="http://www.w3.org/1998/Math/MathML",et=typeof document<"u"?document:null,Nr=et&&et.createElement("template"),Oc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?et.createElementNS(Cc,e):t==="mathml"?et.createElementNS(Pc,e):n?et.createElement(e,{is:n}):et.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>et.createTextNode(e),createComment:e=>et.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>et.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Nr.innerHTML=_o(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Nr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ic=Symbol("_vtc");function Nc(e,t,n){const s=e[Ic];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Kn=Symbol("_vod"),yo=Symbol("_vsh"),Lu={name:"show",beforeMount(e,{value:t},{transition:n}){e[Kn]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):tn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),tn(e,!0),s.enter(e)):s.leave(e,()=>{tn(e,!1)}):tn(e,t))},beforeUnmount(e,{value:t}){tn(e,t)}};function tn(e,t){e.style.display=t?e[Kn]:"none",e[yo]=!t}const Mc=Symbol(""),Dc=/(?:^|;)\s*display\s*:/;function Lc(e,t,n){const s=e.style,r=se(n);let i=!1;if(n&&!r){if(t)if(se(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&ln(s,l,"")}else for(const o in t)n[o]==null&&ln(s,o,"");for(const o in n){o==="display"&&(i=!0);const l=n[o];l!=null?Fc(e,o,!se(t)&&t?t[o]:void 0,l)||ln(s,o,l):ln(s,o,"")}}else if(r){if(t!==n){const o=s[Mc];o&&(n+=";"+o),s.cssText=n,i=Dc.test(n)}}else t&&e.removeAttribute("style");Kn in e&&(e[Kn]=i?s.display:"",e[yo]&&(s.display="none"))}const Mr=/\s*!important$/;function ln(e,t,n){if(V(n))n.forEach(s=>ln(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Vc(e,t);Mr.test(n)?e.setProperty(vt(s),n.replace(Mr,""),"important"):e[s]=n}}const Dr=["Webkit","Moz","ms"],gs={};function Vc(e,t){const n=gs[t];if(n)return n;let s=ve(t);if(s!=="filter"&&s in e)return gs[t]=s;s=zn(s);for(let r=0;rms||(Gc.then(()=>ms=0),ms=Date.now());function $c(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const r=n.value;if(V(r)){const i=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{i.call(s),s._stopped=!0};const o=r.slice(),l=[s];for(let c=0;ce.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Wc=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?Nc(e,s,o):t==="style"?Lc(e,n,s):$n(t)?Wn(t)||Uc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):qc(e,t,s,o))?(Fr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Vr(e,t,s,o,i,t!=="value")):e._isVueCE&&(zc(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!se(s)))?Fr(e,ve(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Vr(e,t,s,o))};function qc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ur(t)&&B(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Ur(t)&&se(n)?!1:t in e}function zc(e,t){const n=e._def.props;if(!n)return!1;const s=ve(t);return Array.isArray(n)?n.some(r=>ve(r)===s):Object.keys(n).some(r=>ve(r)===s)}const yt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return V(t)?n=>In(t,n):t};function Yc(e){e.target.composing=!0}function Br(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const xe=Symbol("_assign"),Pn=Symbol("_initialValue");function _s(e,t,n){return t&&(e=e.trim()),n&&(e=Yn(e)),e}const jr={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e.parentNode&&(e.type==="text"?e[Pn]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[Pn]=e.defaultValue.replace(/\r\n?/g,` -`))),e[xe]=yt(r);const i=s||r.props&&r.props.type==="number";it(e,t?"change":"input",o=>{o.target.composing||e[xe](_s(e.value,n,i))}),(n||i)&&it(e,"change",()=>{e.value=_s(e.value,n,i)}),t||(it(e,"compositionstart",Yc),it(e,"compositionend",Br),it(e,"change",Br))},mounted(e,{value:t,modifiers:{trim:n,number:s}}){const r=t??"",i=e[Pn];delete e[Pn],i!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==i?e[xe](_s(e.value,n,s)):e.value=r},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[xe]=yt(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Yn(e.value):e.value,c=t??"";if(l===c)return;const f=e.getRootNode();(f instanceof Document||f instanceof ShadowRoot)&&f.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c)}},Jc={deep:!0,created(e,t,n){e[xe]=yt(n),it(e,"change",()=>{const s=e._modelValue,r=Wt(e),i=e.checked,o=e[xe];if(V(s)){const l=$s(s,r),c=l!==-1;if(i&&!c)o(s.concat(r));else if(!i&&c){const f=[...s];f.splice(l,1),o(f)}}else if(Yt(s)){const l=new Set(s);i?l.add(r):l.delete(r),o(l)}else o(vo(e,i))})},mounted:kr,beforeUpdate(e,t,n){e[xe]=yt(n),kr(e,t,n)}};function kr(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(V(t))r=$s(t,s.props.value)>-1;else if(Yt(t))r=t.has(s.props.value);else{if(t===n)return;r=_t(t,vo(e,!0))}e.checked!==r&&(e.checked=r)}const Qc={created(e,{value:t},n){e.checked=_t(t,n.props.value),e[xe]=yt(n),it(e,"change",()=>{e[xe](Wt(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[xe]=yt(s),t!==n&&(e.checked=_t(t,s.props.value))}},Xc={deep:!0,created(e,{value:t,modifiers:{number:n}},s){e._modelValue=t,it(e,"change",()=>{const r=Array.prototype.filter.call(e.options,i=>i.selected).map(i=>n?Yn(Wt(i)):Wt(i));e[xe](e.multiple?Yt(e._modelValue)?new Set(r):r:r[0]),e._assigning=!0,Zs(()=>{e._assigning=!1})}),e[xe]=yt(s)},mounted(e,{value:t}){Gr(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[xe]=yt(n)},updated(e,{value:t}){e._assigning||Gr(e,t)}};function Gr(e,t){const n=e.multiple,s=V(t);if(!(n&&!s&&!Yt(t))){for(let r=0,i=e.options.length;rString(f)===String(l)):o.selected=$s(t,l)>-1}else o.selected=t.has(l);else if(_t(Wt(o),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Wt(e){return"_value"in e?e._value:e.value}function vo(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Vu={created(e,t,n){On(e,t,n,null,"created")},mounted(e,t,n){On(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){On(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){On(e,t,n,s,"updated")}};function Zc(e,t){switch(e){case"SELECT":return Xc;case"TEXTAREA":return jr;default:switch(t){case"checkbox":return Jc;case"radio":return Qc;default:return jr}}}function On(e,t,n,s,r){const o=Zc(e.tagName,n.props&&n.props.type)[r];o&&o(e,t,n,s)}const ea=["ctrl","shift","alt","meta"],ta={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ea.some(n=>e[`${n}Key`]&&!t.includes(n))},Fu=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=vt(r.key);if(t.some(o=>o===i||na[o]===i))return e(r)})},sa=de({patchProp:Wc},Oc);let Kr;function ra(){return Kr||(Kr=ac(sa))}const ia=(...e)=>{const t=ra().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=la(s);if(!r)return;const i=t._component;!B(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,oa(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function oa(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function la(e){return se(e)?document.querySelector(e):e}/*! +**/let Ls;const Ir=typeof window<"u"&&window.trustedTypes;if(Ir)try{Ls=Ir.createPolicy("vue",{createHTML:e=>e})}catch{}const _o=Ls?e=>Ls.createHTML(e):e=>e,Cc="http://www.w3.org/2000/svg",Pc="http://www.w3.org/1998/Math/MathML",et=typeof document<"u"?document:null,Nr=et&&et.createElement("template"),Oc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?et.createElementNS(Cc,e):t==="mathml"?et.createElementNS(Pc,e):n?et.createElement(e,{is:n}):et.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>et.createTextNode(e),createComment:e=>et.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>et.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Nr.innerHTML=_o(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Nr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ic=Symbol("_vtc");function Nc(e,t,n){const s=e[Ic];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Kn=Symbol("_vod"),yo=Symbol("_vsh"),Lu={name:"show",beforeMount(e,{value:t},{transition:n}){e[Kn]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):tn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),tn(e,!0),s.enter(e)):s.leave(e,()=>{tn(e,!1)}):tn(e,t))},beforeUnmount(e,{value:t}){tn(e,t)}};function tn(e,t){e.style.display=t?e[Kn]:"none",e[yo]=!t}const Mc=Symbol(""),Dc=/(?:^|;)\s*display\s*:/;function Lc(e,t,n){const s=e.style,r=se(n);let i=!1;if(n&&!r){if(t)if(se(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&ln(s,l,"")}else for(const o in t)n[o]==null&&ln(s,o,"");for(const o in n){o==="display"&&(i=!0);const l=n[o];l!=null?Fc(e,o,!se(t)&&t?t[o]:void 0,l)||ln(s,o,l):ln(s,o,"")}}else if(r){if(t!==n){const o=s[Mc];o&&(n+=";"+o),s.cssText=n,i=Dc.test(n)}}else t&&e.removeAttribute("style");Kn in e&&(e[Kn]=i?s.display:"",e[yo]&&(s.display="none"))}const Mr=/\s*!important$/;function ln(e,t,n){if(V(n))n.forEach(s=>ln(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Vc(e,t);Mr.test(n)?e.setProperty(vt(s),n.replace(Mr,""),"important"):e[s]=n}}const Dr=["Webkit","Moz","ms"],gs={};function Vc(e,t){const n=gs[t];if(n)return n;let s=ve(t);if(s!=="filter"&&s in e)return gs[t]=s;s=zn(s);for(let r=0;rms||(Gc.then(()=>ms=0),ms=Date.now());function $c(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const r=n.value;if(V(r)){const i=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{i.call(s),s._stopped=!0};const o=r.slice(),l=[s];for(let c=0;ce.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Wc=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?Nc(e,s,o):t==="style"?Lc(e,n,s):$n(t)?Wn(t)||Uc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):qc(e,t,s,o))?(Fr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Vr(e,t,s,o,i,t!=="value")):e._isVueCE&&(zc(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!se(s)))?Fr(e,ve(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Vr(e,t,s,o))};function qc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ur(t)&&B(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Ur(t)&&se(n)?!1:t in e}function zc(e,t){const n=e._def.props;if(!n)return!1;const s=ve(t);return Array.isArray(n)?n.some(r=>ve(r)===s):Object.keys(n).some(r=>ve(r)===s)}const yt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return V(t)?n=>In(t,n):t};function Yc(e){e.target.composing=!0}function Br(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Re=Symbol("_assign"),Pn=Symbol("_initialValue");function _s(e,t,n){return t&&(e=e.trim()),n&&(e=Yn(e)),e}const jr={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e.parentNode&&(e.type==="text"?e[Pn]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[Pn]=e.defaultValue.replace(/\r\n?/g,` +`))),e[Re]=yt(r);const i=s||r.props&&r.props.type==="number";it(e,t?"change":"input",o=>{o.target.composing||e[Re](_s(e.value,n,i))}),(n||i)&&it(e,"change",()=>{e.value=_s(e.value,n,i)}),t||(it(e,"compositionstart",Yc),it(e,"compositionend",Br),it(e,"change",Br))},mounted(e,{value:t,modifiers:{trim:n,number:s}}){const r=t??"",i=e[Pn];delete e[Pn],i!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==i?e[Re](_s(e.value,n,s)):e.value=r},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[Re]=yt(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Yn(e.value):e.value,c=t??"";if(l===c)return;const f=e.getRootNode();(f instanceof Document||f instanceof ShadowRoot)&&f.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c)}},Jc={deep:!0,created(e,t,n){e[Re]=yt(n),it(e,"change",()=>{const s=e._modelValue,r=Wt(e),i=e.checked,o=e[Re];if(V(s)){const l=$s(s,r),c=l!==-1;if(i&&!c)o(s.concat(r));else if(!i&&c){const f=[...s];f.splice(l,1),o(f)}}else if(Yt(s)){const l=new Set(s);i?l.add(r):l.delete(r),o(l)}else o(vo(e,i))})},mounted:kr,beforeUpdate(e,t,n){e[Re]=yt(n),kr(e,t,n)}};function kr(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(V(t))r=$s(t,s.props.value)>-1;else if(Yt(t))r=t.has(s.props.value);else{if(t===n)return;r=_t(t,vo(e,!0))}e.checked!==r&&(e.checked=r)}const Qc={created(e,{value:t},n){e.checked=_t(t,n.props.value),e[Re]=yt(n),it(e,"change",()=>{e[Re](Wt(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[Re]=yt(s),t!==n&&(e.checked=_t(t,s.props.value))}},Xc={deep:!0,created(e,{value:t,modifiers:{number:n}},s){e._modelValue=t,it(e,"change",()=>{const r=Array.prototype.filter.call(e.options,i=>i.selected).map(i=>n?Yn(Wt(i)):Wt(i));e[Re](e.multiple?Yt(e._modelValue)?new Set(r):r:r[0]),e._assigning=!0,Zs(()=>{e._assigning=!1})}),e[Re]=yt(s)},mounted(e,{value:t}){Gr(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[Re]=yt(n)},updated(e,{value:t}){e._assigning||Gr(e,t)}};function Gr(e,t){const n=e.multiple,s=V(t);if(!(n&&!s&&!Yt(t))){for(let r=0,i=e.options.length;rString(f)===String(l)):o.selected=$s(t,l)>-1}else o.selected=t.has(l);else if(_t(Wt(o),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Wt(e){return"_value"in e?e._value:e.value}function vo(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Vu={created(e,t,n){On(e,t,n,null,"created")},mounted(e,t,n){On(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){On(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){On(e,t,n,s,"updated")}};function Zc(e,t){switch(e){case"SELECT":return Xc;case"TEXTAREA":return jr;default:switch(t){case"checkbox":return Jc;case"radio":return Qc;default:return jr}}}function On(e,t,n,s,r){const o=Zc(e.tagName,n.props&&n.props.type)[r];o&&o(e,t,n,s)}const ea=["ctrl","shift","alt","meta"],ta={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ea.some(n=>e[`${n}Key`]&&!t.includes(n))},Fu=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=vt(r.key);if(t.some(o=>o===i||na[o]===i))return e(r)})},sa=de({patchProp:Wc},Oc);let Kr;function ra(){return Kr||(Kr=ac(sa))}const ia=(...e)=>{const t=ra().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=la(s);if(!r)return;const i=t._component;!B(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,oa(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function oa(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function la(e){return se(e)?document.querySelector(e):e}/*! * vue-router v4.6.4 * (c) 2025 Eduardo San Martin Morote * @license MIT - */const Ht=typeof document<"u";function bo(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function ca(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&bo(e.default)}const K=Object.assign;function ys(e,t){const n={};for(const s in t){const r=t[s];n[s]=Le(r)?r.map(e):e(r)}return n}const pn=()=>{},Le=Array.isArray;function $r(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const Eo=/#/g,aa=/&/g,ua=/\//g,fa=/=/g,da=/\?/g,wo=/\+/g,ha=/%5B/g,pa=/%5D/g,So=/%5E/g,ga=/%60/g,Ao=/%7B/g,ma=/%7C/g,xo=/%7D/g,_a=/%20/g;function ir(e){return e==null?"":encodeURI(""+e).replace(ma,"|").replace(ha,"[").replace(pa,"]")}function ya(e){return ir(e).replace(Ao,"{").replace(xo,"}").replace(So,"^")}function Vs(e){return ir(e).replace(wo,"%2B").replace(_a,"+").replace(Eo,"%23").replace(aa,"%26").replace(ga,"`").replace(Ao,"{").replace(xo,"}").replace(So,"^")}function va(e){return Vs(e).replace(fa,"%3D")}function ba(e){return ir(e).replace(Eo,"%23").replace(da,"%3F")}function Ea(e){return ba(e).replace(ua,"%2F")}function wn(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const wa=/\/$/,Sa=e=>e.replace(wa,"");function vs(e,t,n="/"){let s,r={},i="",o="";const l=t.indexOf("#");let c=t.indexOf("?");return c=l>=0&&c>l?-1:c,c>=0&&(s=t.slice(0,c),i=t.slice(c,l>0?l:t.length),r=e(i.slice(1))),l>=0&&(s=s||t.slice(0,l),o=t.slice(l,t.length)),s=Ta(s??t,n),{fullPath:s+i+o,path:s,query:r,hash:wn(o)}}function Aa(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Wr(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function xa(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&qt(t.matched[s],n.matched[r])&&Ro(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function qt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Ro(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Ra(e[n],t[n]))return!1;return!0}function Ra(e,t){return Le(e)?qr(e,t):Le(t)?qr(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function qr(e,t){return Le(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Ta(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let i=n.length-1,o,l;for(o=0;o1&&i--;else break;return n.slice(0,i).join("/")+"/"+s.slice(o).join("/")}const pt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let Fs=function(e){return e.pop="pop",e.push="push",e}({}),bs=function(e){return e.back="back",e.forward="forward",e.unknown="",e}({});function Ca(e){if(!e)if(Ht){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Sa(e)}const Pa=/^[^#]+#/;function Oa(e,t){return e.replace(Pa,"#")+t}function Ia(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const rs=()=>({left:window.scrollX,top:window.scrollY});function Na(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Ia(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function zr(e,t){return(history.state?history.state.position-t:-1)+e}const Hs=new Map;function Ma(e,t){Hs.set(e,t)}function Da(e){const t=Hs.get(e);return Hs.delete(e),t}function La(e){return typeof e=="string"||e&&typeof e=="object"}function To(e){return typeof e=="string"||typeof e=="symbol"}let ne=function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e}({});const Co=Symbol("");ne.MATCHER_NOT_FOUND+"",ne.NAVIGATION_GUARD_REDIRECT+"",ne.NAVIGATION_ABORTED+"",ne.NAVIGATION_CANCELLED+"",ne.NAVIGATION_DUPLICATED+"";function zt(e,t){return K(new Error,{type:e,[Co]:!0},t)}function Ze(e,t){return e instanceof Error&&Co in e&&(t==null||!!(e.type&t))}const Va=["params","query","hash"];function Fa(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of Va)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Ha(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;sr&&Vs(r)):[s&&Vs(s)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+n,r!=null&&(t+="="+r))})}return t}function Ua(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=Le(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const Ba=Symbol(""),Jr=Symbol(""),is=Symbol(""),or=Symbol(""),Us=Symbol("");function nn(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function mt(e,t,n,s,r,i=o=>o()){const o=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,c)=>{const f=g=>{g===!1?c(zt(ne.NAVIGATION_ABORTED,{from:n,to:t})):g instanceof Error?c(g):La(g)?c(zt(ne.NAVIGATION_GUARD_REDIRECT,{from:t,to:g})):(o&&s.enterCallbacks[r]===o&&typeof g=="function"&&o.push(g),l())},u=i(()=>e.call(s&&s.instances[r],t,n,f));let h=Promise.resolve(u);e.length<3&&(h=h.then(f)),h.catch(g=>c(g))})}function Es(e,t,n,s,r=i=>i()){const i=[];for(const o of e)for(const l in o.components){let c=o.components[l];if(!(t!=="beforeRouteEnter"&&!o.instances[l]))if(bo(c)){const f=(c.__vccOpts||c)[t];f&&i.push(mt(f,n,s,o,l,r))}else{let f=c();i.push(()=>f.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${l}" at "${o.path}"`);const h=ca(u)?u.default:u;o.mods[l]=u,o.components[l]=h;const g=(h.__vccOpts||h)[t];return g&&mt(g,n,s,o,l,r)()}))}}return i}function ja(e,t){const n=[],s=[],r=[],i=Math.max(t.matched.length,e.matched.length);for(let o=0;oqt(f,l))?s.push(l):n.push(l));const c=e.matched[o];c&&(t.matched.find(f=>qt(f,c))||r.push(c))}return[n,s,r]}/*! + */const Ht=typeof document<"u";function bo(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function ca(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&bo(e.default)}const K=Object.assign;function ys(e,t){const n={};for(const s in t){const r=t[s];n[s]=Le(r)?r.map(e):e(r)}return n}const pn=()=>{},Le=Array.isArray;function $r(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const Eo=/#/g,aa=/&/g,ua=/\//g,fa=/=/g,da=/\?/g,wo=/\+/g,ha=/%5B/g,pa=/%5D/g,So=/%5E/g,ga=/%60/g,Ao=/%7B/g,ma=/%7C/g,Ro=/%7D/g,_a=/%20/g;function ir(e){return e==null?"":encodeURI(""+e).replace(ma,"|").replace(ha,"[").replace(pa,"]")}function ya(e){return ir(e).replace(Ao,"{").replace(Ro,"}").replace(So,"^")}function Vs(e){return ir(e).replace(wo,"%2B").replace(_a,"+").replace(Eo,"%23").replace(aa,"%26").replace(ga,"`").replace(Ao,"{").replace(Ro,"}").replace(So,"^")}function va(e){return Vs(e).replace(fa,"%3D")}function ba(e){return ir(e).replace(Eo,"%23").replace(da,"%3F")}function Ea(e){return ba(e).replace(ua,"%2F")}function wn(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const wa=/\/$/,Sa=e=>e.replace(wa,"");function vs(e,t,n="/"){let s,r={},i="",o="";const l=t.indexOf("#");let c=t.indexOf("?");return c=l>=0&&c>l?-1:c,c>=0&&(s=t.slice(0,c),i=t.slice(c,l>0?l:t.length),r=e(i.slice(1))),l>=0&&(s=s||t.slice(0,l),o=t.slice(l,t.length)),s=Ta(s??t,n),{fullPath:s+i+o,path:s,query:r,hash:wn(o)}}function Aa(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Wr(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Ra(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&qt(t.matched[s],n.matched[r])&&xo(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function qt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function xo(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!xa(e[n],t[n]))return!1;return!0}function xa(e,t){return Le(e)?qr(e,t):Le(t)?qr(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function qr(e,t){return Le(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Ta(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let i=n.length-1,o,l;for(o=0;o1&&i--;else break;return n.slice(0,i).join("/")+"/"+s.slice(o).join("/")}const pt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let Fs=function(e){return e.pop="pop",e.push="push",e}({}),bs=function(e){return e.back="back",e.forward="forward",e.unknown="",e}({});function Ca(e){if(!e)if(Ht){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Sa(e)}const Pa=/^[^#]+#/;function Oa(e,t){return e.replace(Pa,"#")+t}function Ia(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const rs=()=>({left:window.scrollX,top:window.scrollY});function Na(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Ia(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function zr(e,t){return(history.state?history.state.position-t:-1)+e}const Hs=new Map;function Ma(e,t){Hs.set(e,t)}function Da(e){const t=Hs.get(e);return Hs.delete(e),t}function La(e){return typeof e=="string"||e&&typeof e=="object"}function To(e){return typeof e=="string"||typeof e=="symbol"}let ne=function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e}({});const Co=Symbol("");ne.MATCHER_NOT_FOUND+"",ne.NAVIGATION_GUARD_REDIRECT+"",ne.NAVIGATION_ABORTED+"",ne.NAVIGATION_CANCELLED+"",ne.NAVIGATION_DUPLICATED+"";function zt(e,t){return K(new Error,{type:e,[Co]:!0},t)}function Ze(e,t){return e instanceof Error&&Co in e&&(t==null||!!(e.type&t))}const Va=["params","query","hash"];function Fa(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of Va)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Ha(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;sr&&Vs(r)):[s&&Vs(s)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+n,r!=null&&(t+="="+r))})}return t}function Ua(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=Le(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const Ba=Symbol(""),Jr=Symbol(""),is=Symbol(""),or=Symbol(""),Us=Symbol("");function nn(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function mt(e,t,n,s,r,i=o=>o()){const o=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,c)=>{const f=g=>{g===!1?c(zt(ne.NAVIGATION_ABORTED,{from:n,to:t})):g instanceof Error?c(g):La(g)?c(zt(ne.NAVIGATION_GUARD_REDIRECT,{from:t,to:g})):(o&&s.enterCallbacks[r]===o&&typeof g=="function"&&o.push(g),l())},u=i(()=>e.call(s&&s.instances[r],t,n,f));let h=Promise.resolve(u);e.length<3&&(h=h.then(f)),h.catch(g=>c(g))})}function Es(e,t,n,s,r=i=>i()){const i=[];for(const o of e)for(const l in o.components){let c=o.components[l];if(!(t!=="beforeRouteEnter"&&!o.instances[l]))if(bo(c)){const f=(c.__vccOpts||c)[t];f&&i.push(mt(f,n,s,o,l,r))}else{let f=c();i.push(()=>f.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${l}" at "${o.path}"`);const h=ca(u)?u.default:u;o.mods[l]=u,o.components[l]=h;const g=(h.__vccOpts||h)[t];return g&&mt(g,n,s,o,l,r)()}))}}return i}function ja(e,t){const n=[],s=[],r=[],i=Math.max(t.matched.length,e.matched.length);for(let o=0;oqt(f,l))?s.push(l):n.push(l));const c=e.matched[o];c&&(t.matched.find(f=>qt(f,c))||r.push(c))}return[n,s,r]}/*! * vue-router v4.6.4 * (c) 2025 Eduardo San Martin Morote * @license MIT - */let ka=()=>location.protocol+"//"+location.host;function Po(e,t){const{pathname:n,search:s,hash:r}=t,i=e.indexOf("#");if(i>-1){let o=r.includes(e.slice(i))?e.slice(i).length:1,l=r.slice(o);return l[0]!=="/"&&(l="/"+l),Wr(l,"")}return Wr(n,e)+s+r}function Ga(e,t,n,s){let r=[],i=[],o=null;const l=({state:g})=>{const m=Po(e,location),I=n.value,x=t.value;let U=0;if(g){if(n.value=m,t.value=g,o&&o===I){o=null;return}U=x?g.position-x.position:0}else s(m);r.forEach(F=>{F(n.value,I,{delta:U,type:Fs.pop,direction:U?U>0?bs.forward:bs.back:bs.unknown})})};function c(){o=n.value}function f(g){r.push(g);const m=()=>{const I=r.indexOf(g);I>-1&&r.splice(I,1)};return i.push(m),m}function u(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(K({},g.state,{scroll:rs()}),"")}}function h(){for(const g of i)g();i=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:c,listen:f,destroy:h}}function Qr(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?rs():null}}function Ka(e){const{history:t,location:n}=window,s={value:Po(e,n)},r={value:t.state};r.value||i(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(c,f,u){const h=e.indexOf("#"),g=h>-1?(n.host&&document.querySelector("base")?e:e.slice(h))+c:ka()+e+c;try{t[u?"replaceState":"pushState"](f,"",g),r.value=f}catch(m){console.error(m),n[u?"replace":"assign"](g)}}function o(c,f){i(c,K({},t.state,Qr(r.value.back,c,r.value.forward,!0),f,{position:r.value.position}),!0),s.value=c}function l(c,f){const u=K({},r.value,t.state,{forward:c,scroll:rs()});i(u.current,u,!0),i(c,K({},Qr(s.value,c,null),{position:u.position+1},f),!1),s.value=c}return{location:s,state:r,push:l,replace:o}}function $a(e){e=Ca(e);const t=Ka(e),n=Ga(e,t.state,t.location,t.replace);function s(i,o=!0){o||n.pauseListeners(),history.go(i)}const r=K({location:"",base:e,go:s,createHref:Oa.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let Tt=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e}({});var oe=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e}(oe||{});const Wa={type:Tt.Static,value:""},qa=/[a-zA-Z0-9_]/;function za(e){if(!e)return[[]];if(e==="/")return[[Wa]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${f}": ${m}`)}let n=oe.Static,s=n;const r=[];let i;function o(){i&&r.push(i),i=[]}let l=0,c,f="",u="";function h(){f&&(n===oe.Static?i.push({type:Tt.Static,value:f}):n===oe.Param||n===oe.ParamRegExp||n===oe.ParamRegExpEnd?(i.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${f}) must be alone in its segment. eg: '/:ids+.`),i.push({type:Tt.Param,value:f,regexp:u,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),f="")}function g(){f+=c}for(;lt.length?t.length===1&&t[0]===_e.Static+_e.Segment?1:-1:0}function Oo(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Za={strict:!1,end:!0,sensitive:!1};function eu(e,t,n){const s=Qa(za(e.path),n),r=K(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function tu(e,t){const n=[],s=new Map;t=$r(Za,t);function r(h){return s.get(h)}function i(h,g,m){const I=!m,x=ti(h);x.aliasOf=m&&m.record;const U=$r(t,h),F=[x];if("alias"in h){const O=typeof h.alias=="string"?[h.alias]:h.alias;for(const J of O)F.push(ti(K({},x,{components:m?m.record.components:x.components,path:J,aliasOf:m?m.record:x})))}let C,N;for(const O of F){const{path:J}=O;if(g&&J[0]!=="/"){const ie=g.record.path,ee=ie[ie.length-1]==="/"?"":"/";O.path=g.record.path+(J&&ee+J)}if(C=eu(O,g,U),m?m.alias.push(C):(N=N||C,N!==C&&N.alias.push(C),I&&h.name&&!ni(C)&&o(h.name)),Io(C)&&c(C),x.children){const ie=x.children;for(let ee=0;ee{o(N)}:pn}function o(h){if(To(h)){const g=s.get(h);g&&(s.delete(h),n.splice(n.indexOf(g),1),g.children.forEach(o),g.alias.forEach(o))}else{const g=n.indexOf(h);g>-1&&(n.splice(g,1),h.record.name&&s.delete(h.record.name),h.children.forEach(o),h.alias.forEach(o))}}function l(){return n}function c(h){const g=ru(h,n);n.splice(g,0,h),h.record.name&&!ni(h)&&s.set(h.record.name,h)}function f(h,g){let m,I={},x,U;if("name"in h&&h.name){if(m=s.get(h.name),!m)throw zt(ne.MATCHER_NOT_FOUND,{location:h});U=m.record.name,I=K(ei(g.params,m.keys.filter(N=>!N.optional).concat(m.parent?m.parent.keys.filter(N=>N.optional):[]).map(N=>N.name)),h.params&&ei(h.params,m.keys.map(N=>N.name))),x=m.stringify(I)}else if(h.path!=null)x=h.path,m=n.find(N=>N.re.test(x)),m&&(I=m.parse(x),U=m.record.name);else{if(m=g.name?s.get(g.name):n.find(N=>N.re.test(g.path)),!m)throw zt(ne.MATCHER_NOT_FOUND,{location:h,currentLocation:g});U=m.record.name,I=K({},g.params,h.params),x=m.stringify(I)}const F=[];let C=m;for(;C;)F.unshift(C.record),C=C.parent;return{name:U,path:x,params:I,matched:F,meta:su(F)}}e.forEach(h=>i(h));function u(){n.length=0,s.clear()}return{addRoute:i,resolve:f,removeRoute:o,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function ei(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function ti(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:nu(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function nu(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function ni(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function su(e){return e.reduce((t,n)=>K(t,n.meta),{})}function ru(e,t){let n=0,s=t.length;for(;n!==s;){const i=n+s>>1;Oo(e,t[i])<0?s=i:n=i+1}const r=iu(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function iu(e){let t=e;for(;t=t.parent;)if(Io(t)&&Oo(e,t)===0)return t}function Io({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function si(e){const t=Ne(is),n=Ne(or),s=Oe(()=>{const c=ae(e.to);return t.resolve(c)}),r=Oe(()=>{const{matched:c}=s.value,{length:f}=c,u=c[f-1],h=n.matched;if(!u||!h.length)return-1;const g=h.findIndex(qt.bind(null,u));if(g>-1)return g;const m=ri(c[f-2]);return f>1&&ri(u)===m&&h[h.length-1].path!==m?h.findIndex(qt.bind(null,c[f-2])):g}),i=Oe(()=>r.value>-1&&uu(n.params,s.value.params)),o=Oe(()=>r.value>-1&&r.value===n.matched.length-1&&Ro(n.params,s.value.params));function l(c={}){if(au(c)){const f=t[ae(e.replace)?"replace":"push"](ae(e.to)).catch(pn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>f),f}return Promise.resolve()}return{route:s,href:Oe(()=>s.value.href),isActive:i,isExactActive:o,navigate:l}}function ou(e){return e.length===1?e[0]:e}const lu=Gi({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:si,setup(e,{slots:t}){const n=Jt(si(e)),{options:s}=Ne(is),r=Oe(()=>({[ii(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[ii(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&ou(t.default(n));return e.custom?i:En("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),cu=lu;function au(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function uu(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!Le(r)||r.length!==s.length||s.some((i,o)=>i.valueOf()!==r[o].valueOf()))return!1}return!0}function ri(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const ii=(e,t,n)=>e??t??n,fu=Gi({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=Ne(Us),r=Oe(()=>e.route||s.value),i=Ne(Jr,0),o=Oe(()=>{let f=ae(i);const{matched:u}=r.value;let h;for(;(h=u[f])&&!h.components;)f++;return f}),l=Oe(()=>r.value.matched[o.value]);Nn(Jr,Oe(()=>o.value+1)),Nn(Ba,l),Nn(Us,r);const c=dl();return Mn(()=>[c.value,l.value,e.name],([f,u,h],[g,m,I])=>{u&&(u.instances[h]=f,m&&m!==u&&f&&f===g&&(u.leaveGuards.size||(u.leaveGuards=m.leaveGuards),u.updateGuards.size||(u.updateGuards=m.updateGuards))),f&&u&&(!m||!qt(u,m)||!g)&&(u.enterCallbacks[h]||[]).forEach(x=>x(f))},{flush:"post"}),()=>{const f=r.value,u=e.name,h=l.value,g=h&&h.components[u];if(!g)return oi(n.default,{Component:g,route:f});const m=h.props[u],I=m?m===!0?f.params:typeof m=="function"?m(f):m:null,U=En(g,K({},I,t,{onVnodeUnmounted:F=>{F.component.isUnmounted&&(h.instances[u]=null)},ref:c}));return oi(n.default,{Component:U,route:f})||U}}});function oi(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const du=fu;function hu(e){const t=tu(e.routes,e),n=e.parseQuery||Ha,s=e.stringifyQuery||Yr,r=e.history,i=nn(),o=nn(),l=nn(),c=hl(pt);let f=pt;Ht&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=ys.bind(null,v=>""+v),h=ys.bind(null,Ea),g=ys.bind(null,wn);function m(v,P){let R,M;return To(v)?(R=t.getRecordMatcher(v),M=P):M=v,t.addRoute(M,R)}function I(v){const P=t.getRecordMatcher(v);P&&t.removeRoute(P)}function x(){return t.getRoutes().map(v=>v.record)}function U(v){return!!t.getRecordMatcher(v)}function F(v,P){if(P=K({},P||c.value),typeof v=="string"){const p=vs(n,v,P.path),y=t.resolve({path:p.path},P),b=r.createHref(p.fullPath);return K(p,y,{params:g(y.params),hash:wn(p.hash),redirectedFrom:void 0,href:b})}let R;if(v.path!=null)R=K({},v,{path:vs(n,v.path,P.path).path});else{const p=K({},v.params);for(const y in p)p[y]==null&&delete p[y];R=K({},v,{params:h(p)}),P.params=h(P.params)}const M=t.resolve(R,P),j=v.hash||"";M.params=u(g(M.params));const a=Aa(s,K({},v,{hash:ya(j),path:M.path})),d=r.createHref(a);return K({fullPath:a,hash:j,query:s===Yr?Ua(v.query):v.query||{}},M,{redirectedFrom:void 0,href:d})}function C(v){return typeof v=="string"?vs(n,v,c.value.path):K({},v)}function N(v,P){if(f!==v)return zt(ne.NAVIGATION_CANCELLED,{from:P,to:v})}function O(v){return ee(v)}function J(v){return O(K(C(v),{replace:!0}))}function ie(v,P){const R=v.matched[v.matched.length-1];if(R&&R.redirect){const{redirect:M}=R;let j=typeof M=="function"?M(v,P):M;return typeof j=="string"&&(j=j.includes("?")||j.includes("#")?j=C(j):{path:j},j.params={}),K({query:v.query,hash:v.hash,params:j.path!=null?{}:v.params},j)}}function ee(v,P){const R=f=F(v),M=c.value,j=v.state,a=v.force,d=v.replace===!0,p=ie(R,M);if(p)return ee(K(C(p),{state:typeof p=="object"?K({},j,p.state):j,force:a,replace:d}),P||R);const y=R;y.redirectedFrom=P;let b;return!a&&xa(s,M,R)&&(b=zt(ne.NAVIGATION_DUPLICATED,{to:y,from:M}),Ue(M,M,!0,!1)),(b?Promise.resolve(b):Fe(y,M)).catch(_=>Ze(_)?Ze(_,ne.NAVIGATION_GUARD_REDIRECT)?_:ht(_):G(_,y,M)).then(_=>{if(_){if(Ze(_,ne.NAVIGATION_GUARD_REDIRECT))return ee(K({replace:d},C(_.to),{state:typeof _.to=="object"?K({},j,_.to.state):j,force:a}),P||y)}else _=bt(y,M,!0,d,j);return dt(y,M,_),_})}function Ve(v,P){const R=N(v,P);return R?Promise.reject(R):Promise.resolve()}function ft(v){const P=Mt.values().next().value;return P&&typeof P.runWithContext=="function"?P.runWithContext(v):v()}function Fe(v,P){let R;const[M,j,a]=ja(v,P);R=Es(M.reverse(),"beforeRouteLeave",v,P);for(const p of M)p.leaveGuards.forEach(y=>{R.push(mt(y,v,P))});const d=Ve.bind(null,v,P);return R.push(d),Re(R).then(()=>{R=[];for(const p of i.list())R.push(mt(p,v,P));return R.push(d),Re(R)}).then(()=>{R=Es(j,"beforeRouteUpdate",v,P);for(const p of j)p.updateGuards.forEach(y=>{R.push(mt(y,v,P))});return R.push(d),Re(R)}).then(()=>{R=[];for(const p of a)if(p.beforeEnter)if(Le(p.beforeEnter))for(const y of p.beforeEnter)R.push(mt(y,v,P));else R.push(mt(p.beforeEnter,v,P));return R.push(d),Re(R)}).then(()=>(v.matched.forEach(p=>p.enterCallbacks={}),R=Es(a,"beforeRouteEnter",v,P,ft),R.push(d),Re(R))).then(()=>{R=[];for(const p of o.list())R.push(mt(p,v,P));return R.push(d),Re(R)}).catch(p=>Ze(p,ne.NAVIGATION_CANCELLED)?p:Promise.reject(p))}function dt(v,P,R){l.list().forEach(M=>ft(()=>M(v,P,R)))}function bt(v,P,R,M,j){const a=N(v,P);if(a)return a;const d=P===pt,p=Ht?history.state:{};R&&(M||d?r.replace(v.fullPath,K({scroll:d&&p&&p.scroll},j)):r.push(v.fullPath,j)),c.value=v,Ue(v,P,R,d),ht()}let He;function Qt(){He||(He=r.listen((v,P,R)=>{if(!Et.listening)return;const M=F(v),j=ie(M,Et.currentRoute.value);if(j){ee(K(j,{replace:!0,force:!0}),M).catch(pn);return}f=M;const a=c.value;Ht&&Ma(zr(a.fullPath,R.delta),rs()),Fe(M,a).catch(d=>Ze(d,ne.NAVIGATION_ABORTED|ne.NAVIGATION_CANCELLED)?d:Ze(d,ne.NAVIGATION_GUARD_REDIRECT)?(ee(K(C(d.to),{force:!0}),M).then(p=>{Ze(p,ne.NAVIGATION_ABORTED|ne.NAVIGATION_DUPLICATED)&&!R.delta&&R.type===Fs.pop&&r.go(-1,!1)}).catch(pn),Promise.reject()):(R.delta&&r.go(-R.delta,!1),G(d,M,a))).then(d=>{d=d||bt(M,a,!1),d&&(R.delta&&!Ze(d,ne.NAVIGATION_CANCELLED)?r.go(-R.delta,!1):R.type===Fs.pop&&Ze(d,ne.NAVIGATION_ABORTED|ne.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),dt(M,a,d)}).catch(pn)}))}let It=nn(),ce=nn(),z;function G(v,P,R){ht(v);const M=ce.list();return M.length?M.forEach(j=>j(v,P,R)):console.error(v),Promise.reject(v)}function Qe(){return z&&c.value!==pt?Promise.resolve():new Promise((v,P)=>{It.add([v,P])})}function ht(v){return z||(z=!v,Qt(),It.list().forEach(([P,R])=>v?R(v):P()),It.reset()),v}function Ue(v,P,R,M){const{scrollBehavior:j}=e;if(!Ht||!j)return Promise.resolve();const a=!R&&Da(zr(v.fullPath,0))||(M||!R)&&history.state&&history.state.scroll||null;return Zs().then(()=>j(v,P,a)).then(d=>d&&Na(d)).catch(d=>G(d,v,P))}const be=v=>r.go(v);let Nt;const Mt=new Set,Et={currentRoute:c,listening:!0,addRoute:m,removeRoute:I,clearRoutes:t.clearRoutes,hasRoute:U,getRoutes:x,resolve:F,options:e,push:O,replace:J,go:be,back:()=>be(-1),forward:()=>be(1),beforeEach:i.add,beforeResolve:o.add,afterEach:l.add,onError:ce.add,isReady:Qe,install(v){v.component("RouterLink",cu),v.component("RouterView",du),v.config.globalProperties.$router=Et,Object.defineProperty(v.config.globalProperties,"$route",{enumerable:!0,get:()=>ae(c)}),Ht&&!Nt&&c.value===pt&&(Nt=!0,O(r.location).catch(M=>{}));const P={};for(const M in pt)Object.defineProperty(P,M,{get:()=>c.value[M],enumerable:!0});v.provide(is,Et),v.provide(or,Ni(P)),v.provide(Us,c);const R=v.unmount;Mt.add(v),v.unmount=function(){Mt.delete(v),Mt.size<1&&(f=pt,He&&He(),He=null,c.value=pt,Nt=!1,z=!1),R()}}};function Re(v){return v.reduce((P,R)=>P.then(()=>ft(R)),Promise.resolve())}return Et}function pu(){return Ne(is)}function Uu(e){return Ne(or)}/** + */let ka=()=>location.protocol+"//"+location.host;function Po(e,t){const{pathname:n,search:s,hash:r}=t,i=e.indexOf("#");if(i>-1){let o=r.includes(e.slice(i))?e.slice(i).length:1,l=r.slice(o);return l[0]!=="/"&&(l="/"+l),Wr(l,"")}return Wr(n,e)+s+r}function Ga(e,t,n,s){let r=[],i=[],o=null;const l=({state:g})=>{const m=Po(e,location),I=n.value,R=t.value;let U=0;if(g){if(n.value=m,t.value=g,o&&o===I){o=null;return}U=R?g.position-R.position:0}else s(m);r.forEach(F=>{F(n.value,I,{delta:U,type:Fs.pop,direction:U?U>0?bs.forward:bs.back:bs.unknown})})};function c(){o=n.value}function f(g){r.push(g);const m=()=>{const I=r.indexOf(g);I>-1&&r.splice(I,1)};return i.push(m),m}function u(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(K({},g.state,{scroll:rs()}),"")}}function h(){for(const g of i)g();i=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:c,listen:f,destroy:h}}function Qr(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?rs():null}}function Ka(e){const{history:t,location:n}=window,s={value:Po(e,n)},r={value:t.state};r.value||i(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(c,f,u){const h=e.indexOf("#"),g=h>-1?(n.host&&document.querySelector("base")?e:e.slice(h))+c:ka()+e+c;try{t[u?"replaceState":"pushState"](f,"",g),r.value=f}catch(m){console.error(m),n[u?"replace":"assign"](g)}}function o(c,f){i(c,K({},t.state,Qr(r.value.back,c,r.value.forward,!0),f,{position:r.value.position}),!0),s.value=c}function l(c,f){const u=K({},r.value,t.state,{forward:c,scroll:rs()});i(u.current,u,!0),i(c,K({},Qr(s.value,c,null),{position:u.position+1},f),!1),s.value=c}return{location:s,state:r,push:l,replace:o}}function $a(e){e=Ca(e);const t=Ka(e),n=Ga(e,t.state,t.location,t.replace);function s(i,o=!0){o||n.pauseListeners(),history.go(i)}const r=K({location:"",base:e,go:s,createHref:Oa.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let Tt=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e}({});var oe=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e}(oe||{});const Wa={type:Tt.Static,value:""},qa=/[a-zA-Z0-9_]/;function za(e){if(!e)return[[]];if(e==="/")return[[Wa]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${f}": ${m}`)}let n=oe.Static,s=n;const r=[];let i;function o(){i&&r.push(i),i=[]}let l=0,c,f="",u="";function h(){f&&(n===oe.Static?i.push({type:Tt.Static,value:f}):n===oe.Param||n===oe.ParamRegExp||n===oe.ParamRegExpEnd?(i.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${f}) must be alone in its segment. eg: '/:ids+.`),i.push({type:Tt.Param,value:f,regexp:u,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),f="")}function g(){f+=c}for(;lt.length?t.length===1&&t[0]===_e.Static+_e.Segment?1:-1:0}function Oo(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Za={strict:!1,end:!0,sensitive:!1};function eu(e,t,n){const s=Qa(za(e.path),n),r=K(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function tu(e,t){const n=[],s=new Map;t=$r(Za,t);function r(h){return s.get(h)}function i(h,g,m){const I=!m,R=ti(h);R.aliasOf=m&&m.record;const U=$r(t,h),F=[R];if("alias"in h){const O=typeof h.alias=="string"?[h.alias]:h.alias;for(const J of O)F.push(ti(K({},R,{components:m?m.record.components:R.components,path:J,aliasOf:m?m.record:R})))}let C,N;for(const O of F){const{path:J}=O;if(g&&J[0]!=="/"){const ie=g.record.path,te=ie[ie.length-1]==="/"?"":"/";O.path=g.record.path+(J&&te+J)}if(C=eu(O,g,U),m?m.alias.push(C):(N=N||C,N!==C&&N.alias.push(C),I&&h.name&&!ni(C)&&o(h.name)),Io(C)&&c(C),R.children){const ie=R.children;for(let te=0;te{o(N)}:pn}function o(h){if(To(h)){const g=s.get(h);g&&(s.delete(h),n.splice(n.indexOf(g),1),g.children.forEach(o),g.alias.forEach(o))}else{const g=n.indexOf(h);g>-1&&(n.splice(g,1),h.record.name&&s.delete(h.record.name),h.children.forEach(o),h.alias.forEach(o))}}function l(){return n}function c(h){const g=ru(h,n);n.splice(g,0,h),h.record.name&&!ni(h)&&s.set(h.record.name,h)}function f(h,g){let m,I={},R,U;if("name"in h&&h.name){if(m=s.get(h.name),!m)throw zt(ne.MATCHER_NOT_FOUND,{location:h});U=m.record.name,I=K(ei(g.params,m.keys.filter(N=>!N.optional).concat(m.parent?m.parent.keys.filter(N=>N.optional):[]).map(N=>N.name)),h.params&&ei(h.params,m.keys.map(N=>N.name))),R=m.stringify(I)}else if(h.path!=null)R=h.path,m=n.find(N=>N.re.test(R)),m&&(I=m.parse(R),U=m.record.name);else{if(m=g.name?s.get(g.name):n.find(N=>N.re.test(g.path)),!m)throw zt(ne.MATCHER_NOT_FOUND,{location:h,currentLocation:g});U=m.record.name,I=K({},g.params,h.params),R=m.stringify(I)}const F=[];let C=m;for(;C;)F.unshift(C.record),C=C.parent;return{name:U,path:R,params:I,matched:F,meta:su(F)}}e.forEach(h=>i(h));function u(){n.length=0,s.clear()}return{addRoute:i,resolve:f,removeRoute:o,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function ei(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function ti(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:nu(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function nu(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function ni(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function su(e){return e.reduce((t,n)=>K(t,n.meta),{})}function ru(e,t){let n=0,s=t.length;for(;n!==s;){const i=n+s>>1;Oo(e,t[i])<0?s=i:n=i+1}const r=iu(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function iu(e){let t=e;for(;t=t.parent;)if(Io(t)&&Oo(e,t)===0)return t}function Io({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function si(e){const t=Ne(is),n=Ne(or),s=Oe(()=>{const c=ae(e.to);return t.resolve(c)}),r=Oe(()=>{const{matched:c}=s.value,{length:f}=c,u=c[f-1],h=n.matched;if(!u||!h.length)return-1;const g=h.findIndex(qt.bind(null,u));if(g>-1)return g;const m=ri(c[f-2]);return f>1&&ri(u)===m&&h[h.length-1].path!==m?h.findIndex(qt.bind(null,c[f-2])):g}),i=Oe(()=>r.value>-1&&uu(n.params,s.value.params)),o=Oe(()=>r.value>-1&&r.value===n.matched.length-1&&xo(n.params,s.value.params));function l(c={}){if(au(c)){const f=t[ae(e.replace)?"replace":"push"](ae(e.to)).catch(pn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>f),f}return Promise.resolve()}return{route:s,href:Oe(()=>s.value.href),isActive:i,isExactActive:o,navigate:l}}function ou(e){return e.length===1?e[0]:e}const lu=Gi({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:si,setup(e,{slots:t}){const n=Jt(si(e)),{options:s}=Ne(is),r=Oe(()=>({[ii(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[ii(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&ou(t.default(n));return e.custom?i:En("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),cu=lu;function au(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function uu(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!Le(r)||r.length!==s.length||s.some((i,o)=>i.valueOf()!==r[o].valueOf()))return!1}return!0}function ri(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const ii=(e,t,n)=>e??t??n,fu=Gi({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=Ne(Us),r=Oe(()=>e.route||s.value),i=Ne(Jr,0),o=Oe(()=>{let f=ae(i);const{matched:u}=r.value;let h;for(;(h=u[f])&&!h.components;)f++;return f}),l=Oe(()=>r.value.matched[o.value]);Nn(Jr,Oe(()=>o.value+1)),Nn(Ba,l),Nn(Us,r);const c=dl();return Mn(()=>[c.value,l.value,e.name],([f,u,h],[g,m,I])=>{u&&(u.instances[h]=f,m&&m!==u&&f&&f===g&&(u.leaveGuards.size||(u.leaveGuards=m.leaveGuards),u.updateGuards.size||(u.updateGuards=m.updateGuards))),f&&u&&(!m||!qt(u,m)||!g)&&(u.enterCallbacks[h]||[]).forEach(R=>R(f))},{flush:"post"}),()=>{const f=r.value,u=e.name,h=l.value,g=h&&h.components[u];if(!g)return oi(n.default,{Component:g,route:f});const m=h.props[u],I=m?m===!0?f.params:typeof m=="function"?m(f):m:null,U=En(g,K({},I,t,{onVnodeUnmounted:F=>{F.component.isUnmounted&&(h.instances[u]=null)},ref:c}));return oi(n.default,{Component:U,route:f})||U}}});function oi(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const du=fu;function hu(e){const t=tu(e.routes,e),n=e.parseQuery||Ha,s=e.stringifyQuery||Yr,r=e.history,i=nn(),o=nn(),l=nn(),c=hl(pt);let f=pt;Ht&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=ys.bind(null,v=>""+v),h=ys.bind(null,Ea),g=ys.bind(null,wn);function m(v,P){let x,M;return To(v)?(x=t.getRecordMatcher(v),M=P):M=v,t.addRoute(M,x)}function I(v){const P=t.getRecordMatcher(v);P&&t.removeRoute(P)}function R(){return t.getRoutes().map(v=>v.record)}function U(v){return!!t.getRecordMatcher(v)}function F(v,P){if(P=K({},P||c.value),typeof v=="string"){const p=vs(n,v,P.path),y=t.resolve({path:p.path},P),b=r.createHref(p.fullPath);return K(p,y,{params:g(y.params),hash:wn(p.hash),redirectedFrom:void 0,href:b})}let x;if(v.path!=null)x=K({},v,{path:vs(n,v.path,P.path).path});else{const p=K({},v.params);for(const y in p)p[y]==null&&delete p[y];x=K({},v,{params:h(p)}),P.params=h(P.params)}const M=t.resolve(x,P),j=v.hash||"";M.params=u(g(M.params));const a=Aa(s,K({},v,{hash:ya(j),path:M.path})),d=r.createHref(a);return K({fullPath:a,hash:j,query:s===Yr?Ua(v.query):v.query||{}},M,{redirectedFrom:void 0,href:d})}function C(v){return typeof v=="string"?vs(n,v,c.value.path):K({},v)}function N(v,P){if(f!==v)return zt(ne.NAVIGATION_CANCELLED,{from:P,to:v})}function O(v){return te(v)}function J(v){return O(K(C(v),{replace:!0}))}function ie(v,P){const x=v.matched[v.matched.length-1];if(x&&x.redirect){const{redirect:M}=x;let j=typeof M=="function"?M(v,P):M;return typeof j=="string"&&(j=j.includes("?")||j.includes("#")?j=C(j):{path:j},j.params={}),K({query:v.query,hash:v.hash,params:j.path!=null?{}:v.params},j)}}function te(v,P){const x=f=F(v),M=c.value,j=v.state,a=v.force,d=v.replace===!0,p=ie(x,M);if(p)return te(K(C(p),{state:typeof p=="object"?K({},j,p.state):j,force:a,replace:d}),P||x);const y=x;y.redirectedFrom=P;let b;return!a&&Ra(s,M,x)&&(b=zt(ne.NAVIGATION_DUPLICATED,{to:y,from:M}),Ue(M,M,!0,!1)),(b?Promise.resolve(b):Fe(y,M)).catch(_=>Ze(_)?Ze(_,ne.NAVIGATION_GUARD_REDIRECT)?_:ht(_):G(_,y,M)).then(_=>{if(_){if(Ze(_,ne.NAVIGATION_GUARD_REDIRECT))return te(K({replace:d},C(_.to),{state:typeof _.to=="object"?K({},j,_.to.state):j,force:a}),P||y)}else _=bt(y,M,!0,d,j);return dt(y,M,_),_})}function Ve(v,P){const x=N(v,P);return x?Promise.reject(x):Promise.resolve()}function ft(v){const P=Mt.values().next().value;return P&&typeof P.runWithContext=="function"?P.runWithContext(v):v()}function Fe(v,P){let x;const[M,j,a]=ja(v,P);x=Es(M.reverse(),"beforeRouteLeave",v,P);for(const p of M)p.leaveGuards.forEach(y=>{x.push(mt(y,v,P))});const d=Ve.bind(null,v,P);return x.push(d),xe(x).then(()=>{x=[];for(const p of i.list())x.push(mt(p,v,P));return x.push(d),xe(x)}).then(()=>{x=Es(j,"beforeRouteUpdate",v,P);for(const p of j)p.updateGuards.forEach(y=>{x.push(mt(y,v,P))});return x.push(d),xe(x)}).then(()=>{x=[];for(const p of a)if(p.beforeEnter)if(Le(p.beforeEnter))for(const y of p.beforeEnter)x.push(mt(y,v,P));else x.push(mt(p.beforeEnter,v,P));return x.push(d),xe(x)}).then(()=>(v.matched.forEach(p=>p.enterCallbacks={}),x=Es(a,"beforeRouteEnter",v,P,ft),x.push(d),xe(x))).then(()=>{x=[];for(const p of o.list())x.push(mt(p,v,P));return x.push(d),xe(x)}).catch(p=>Ze(p,ne.NAVIGATION_CANCELLED)?p:Promise.reject(p))}function dt(v,P,x){l.list().forEach(M=>ft(()=>M(v,P,x)))}function bt(v,P,x,M,j){const a=N(v,P);if(a)return a;const d=P===pt,p=Ht?history.state:{};x&&(M||d?r.replace(v.fullPath,K({scroll:d&&p&&p.scroll},j)):r.push(v.fullPath,j)),c.value=v,Ue(v,P,x,d),ht()}let He;function Qt(){He||(He=r.listen((v,P,x)=>{if(!Et.listening)return;const M=F(v),j=ie(M,Et.currentRoute.value);if(j){te(K(j,{replace:!0,force:!0}),M).catch(pn);return}f=M;const a=c.value;Ht&&Ma(zr(a.fullPath,x.delta),rs()),Fe(M,a).catch(d=>Ze(d,ne.NAVIGATION_ABORTED|ne.NAVIGATION_CANCELLED)?d:Ze(d,ne.NAVIGATION_GUARD_REDIRECT)?(te(K(C(d.to),{force:!0}),M).then(p=>{Ze(p,ne.NAVIGATION_ABORTED|ne.NAVIGATION_DUPLICATED)&&!x.delta&&x.type===Fs.pop&&r.go(-1,!1)}).catch(pn),Promise.reject()):(x.delta&&r.go(-x.delta,!1),G(d,M,a))).then(d=>{d=d||bt(M,a,!1),d&&(x.delta&&!Ze(d,ne.NAVIGATION_CANCELLED)?r.go(-x.delta,!1):x.type===Fs.pop&&Ze(d,ne.NAVIGATION_ABORTED|ne.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),dt(M,a,d)}).catch(pn)}))}let It=nn(),ce=nn(),z;function G(v,P,x){ht(v);const M=ce.list();return M.length?M.forEach(j=>j(v,P,x)):console.error(v),Promise.reject(v)}function Qe(){return z&&c.value!==pt?Promise.resolve():new Promise((v,P)=>{It.add([v,P])})}function ht(v){return z||(z=!v,Qt(),It.list().forEach(([P,x])=>v?x(v):P()),It.reset()),v}function Ue(v,P,x,M){const{scrollBehavior:j}=e;if(!Ht||!j)return Promise.resolve();const a=!x&&Da(zr(v.fullPath,0))||(M||!x)&&history.state&&history.state.scroll||null;return Zs().then(()=>j(v,P,a)).then(d=>d&&Na(d)).catch(d=>G(d,v,P))}const be=v=>r.go(v);let Nt;const Mt=new Set,Et={currentRoute:c,listening:!0,addRoute:m,removeRoute:I,clearRoutes:t.clearRoutes,hasRoute:U,getRoutes:R,resolve:F,options:e,push:O,replace:J,go:be,back:()=>be(-1),forward:()=>be(1),beforeEach:i.add,beforeResolve:o.add,afterEach:l.add,onError:ce.add,isReady:Qe,install(v){v.component("RouterLink",cu),v.component("RouterView",du),v.config.globalProperties.$router=Et,Object.defineProperty(v.config.globalProperties,"$route",{enumerable:!0,get:()=>ae(c)}),Ht&&!Nt&&c.value===pt&&(Nt=!0,O(r.location).catch(M=>{}));const P={};for(const M in pt)Object.defineProperty(P,M,{get:()=>c.value[M],enumerable:!0});v.provide(is,Et),v.provide(or,Ni(P)),v.provide(Us,c);const x=v.unmount;Mt.add(v),v.unmount=function(){Mt.delete(v),Mt.size<1&&(f=pt,He&&He(),He=null,c.value=pt,Nt=!1,z=!1),x()}}};function xe(v){return v.reduce((P,x)=>P.then(()=>ft(x)),Promise.resolve())}return Et}function pu(){return Ne(is)}function Uu(e){return Ne(or)}/** * @license lucide-vue-next v1.0.0 - ISC * * This source code is licensed under the ISC license. @@ -79,4 +79,4 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Login-BvMoAa9d. * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Eu=No("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),Bs="st_token";function Mo(){return localStorage.getItem(Bs)}function ws(e){e?localStorage.setItem(Bs,e):localStorage.removeItem(Bs)}async function te(e,t,n,s=!1){const r={},i=Mo();i&&(r.Authorization=`Bearer ${i}`);let o=n;!s&&n!==void 0&&n!==null&&(r["Content-Type"]="application/json",o=JSON.stringify(n));const l=await fetch(t,{method:e,headers:r,body:o});let c=null;try{c=await l.json()}catch{}if(!l.ok){const f=c&&(c.error||c.message)||`HTTP ${l.status}`;throw new Error(f)}return c}const Ss={login:(e,t)=>te("POST","/api/auth/login",{username:e,password:t}),me:()=>te("GET","/api/auth/me"),setup:e=>te("POST","/api/auth/setup",e),updateProfile:e=>te("PATCH","/api/auth/profile",e),adminCreateUser:e=>te("POST","/api/admin/users",e),adminListUsers:()=>te("GET","/api/admin/users"),adminUpdateUser:(e,t)=>te("PUT",`/api/admin/users/${e}`,t),createGroup:e=>te("POST","/api/groups",e,!0),listGroups:()=>te("GET","/api/groups"),getGroup:e=>te("GET",`/api/groups/${e}`),analyzeGroup:e=>te("POST",`/api/groups/${e}/analyze`),listPersonas:e=>te("GET",`/api/groups/${e}/personas`),getPersona:(e,t)=>te("GET",`/api/groups/${e}/personas/${t}`),updatePersona:(e,t,n)=>te("PUT",`/api/groups/${e}/personas/${t}`,n),chatStart:(e,t,n)=>te("POST",`/api/chat/${e}/personas/${t}/chat/start`,n||{}),chatSend:(e,t,n)=>te("POST",`/api/chat/${e}/personas/${t}/chat/send`,{text:n}),chatFinish:(e,t)=>te("POST",`/api/chat/${e}/personas/${t}/chat/finish`),mySessions:()=>te("GET","/api/chat/sessions"),myBoard:()=>te("GET","/api/me/board"),weakAreas:()=>te("GET","/api/me/weak-areas"),myPersonas:()=>te("GET","/api/me/personas"),generatePersona:e=>te("POST","/api/me/personas/generate",e),analytics:(e={})=>{const t=new URLSearchParams;e.from&&t.set("from",e.from),e.to&&t.set("to",e.to);const n=t.toString();return te("GET",`/api/analytics${n?`?${n}`:""}`)}},Ce=Jt({user:null,token:Mo(),mustSetup:!1,get role(){return this.user?this.user.role:null},get isAdmin(){return this.role==="admin"||this.role==="super_admin"},async load(){var e;if(!this.token)return null;try{const t=await Ss.me();return this.user=t.user,this.mustSetup=!!((e=t.user)!=null&&e.must_setup),this.user}catch{return this.user=null,this.mustSetup=!1,ws(null),null}},async login(e,t){const n=await Ss.login(e,t);return this.token=n.token,ws(n.token),this.user=n.user,this.mustSetup=!!n.must_setup,n.user},async finishSetup(e,t){const n=await Ss.setup({username:this.user.username||this.user.id,email:e,password:t});return this.user=n.user,this.mustSetup=!1,n.user},logout(){this.user=null,this.token=null,this.mustSetup=!1,ws(null)}}),As={en:{app:"Sales Trainer",login:"Login",logout:"Logout",username:"Username",email:"Email",password:"Password",newPassword:"New password",confirmPassword:"Confirm password",save:"Save",passwordTooShort:"Password must be at least 4 characters",passwordMismatch:"Passwords do not match",setupTitle:"Set up your account",setupSubtitle:"First login for ",loginError:"Invalid credentials",dashboard:"Dashboard",training:"Training",myDashboard:"My dashboard",adminOverview:"Admin overview",settings:"Settings",account:"Account",profile:"Profile",readonly:"read-only",name:"Display name",saveProfile:"Save profile",changePassword:"Change password",optional:"optional",saved:"Saved",total:"Total",dateRange:"Date range",apply:"Apply",clear:"Clear",hardestPersonas:"Hardest personas",closeRate:"Close rate",managePersonas:"Manage personas",difficulty:"Difficulty",trained:"Trained",addProduct:"Add product",trainingSubtitle:"Pick a product group, then choose a persona to practice closing the sale.",noTraining:"No training groups available",groups:"Persona Groups",myTraining:"My Training",adminTools:"Admin Tools",users:"Users",analytics:"Analytics",groupBuilder:"Group Builder",create:"Create",analyze:"Analyze",manual:"Manual",edit:"Edit",product:"Product",segment:"Initial customer segment (optional)",description:"Additional description / scenario (optional)",channel:"Channel",facebook:"Facebook",line:"LINE",language:"Language",thai:"Thai",english:"English",personas:"Personas",tierA:"Tier A — Ready to buy",tierB:"Tier B — Unsure",tierC:"Tier C — Not interested but has pain",selectPersona:"Select a persona to practice",chooseScenario:"Choose a scenario",chatGuideTitle:"How to practice",chatGuideText:'You are playing the salesperson. Chat with this customer and try to close the sale. Ask about their needs, solve their pain, and handle their objections. When you are done, press "Finish & get result" to see your score and coaching.',chat:"Chat",start:"Start",send:"Send",finish:"Finish & get result",debrief:"Result & Coaching",won:"Won",lost:"Lost",notTried:"Not tried",score:"Score",pain:"Pain",why:"Reason",reveal:"Revealed persona details",generatePersona:"Generate my persona",weakAreas:"My weak areas",mySessions:"My sessions",openSaleTask:"The customer did NOT message first. You must open the sale.",sellerInitiated:"You must open the sale (outbound)",customerInitiated:"The customer will message you first"},th:{app:"ระบบฝึกทักษะการขาย",login:"เข้าสู่ระบบ",logout:"ออกจากระบบ",username:"ชื่อผู้ใช้",email:"อีเมล",password:"รหัสผ่าน",newPassword:"รหัสผ่านใหม่",confirmPassword:"ยืนยันรหัสผ่าน",save:"บันทึก",passwordTooShort:"รหัสผ่านต้องมีความยาวอย่างน้อย 4 ตัวอักษร",passwordMismatch:"รหัสผ่านที่ยืนยันไม่ตรงกัน",setupTitle:"ตั้งค่าบัญชีของคุณ",setupSubtitle:"เข้าสู่ระบบครั้งแรกสำหรับ ",loginError:"ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง กรุณาลองอีกครั้ง",dashboard:"หน้าหลัก",training:"การฝึก",myDashboard:"ภาพรวมผลการฝึก",adminOverview:"ภาพรวมผู้ดูแล",settings:"การตั้งค่า",account:"บัญชี",profile:"ข้อมูลส่วนตัว",readonly:"อ่านอย่างเดียว",name:"ชื่อที่แสดง",saveProfile:"บันทึกข้อมูล",changePassword:"เปลี่ยนรหัสผ่าน",optional:"ไม่บังคับ",saved:"บันทึกเรียบร้อย",total:"ทั้งหมด",dateRange:"ช่วงเวลา",apply:"กรอง",clear:"ล้าง",hardestPersonas:"บุคคลต้นแบบที่ขายยากที่สุด",closeRate:"อัตราปิดการขาย",managePersonas:"จัดการบุคคลต้นแบบ",difficulty:"ระดับความยาก",trained:"ฝึกแล้ว",addProduct:"เพิ่มสินค้า",trainingSubtitle:"เลือกกลุ่มสินค้า แล้วเลือกบุคคลต้นแบบเพื่อฝึกปิดการขาย",noTraining:"ยังไม่มีกลุ่มฝึก",groups:"กลุ่มบุคคลต้นแบบลูกค้า (Persona)",myTraining:"ประวัติการฝึก",adminTools:"เครื่องมือผู้ดูแลระบบ",users:"ผู้ใช้งาน",analytics:"สถิติ",groupBuilder:"สร้างกลุ่มบุคคลต้นแบบ",create:"สร้าง",analyze:"วิเคราะห์",manual:"ระบุเอง",edit:"แก้ไข",product:"สินค้า/บริการ",segment:"กลุ่มลูกค้าเป้าหมายเบื้องต้น (ไม่บังคับ)",description:"คำอธิบายหรือรายละเอียดเพิ่มเติม (ไม่บังคับ)",channel:"ช่องทางติดต่อ",facebook:"Facebook",line:"LINE",language:"ภาษา",thai:"ไทย",english:"อังกฤษ",personas:"บุคคลต้นแบบ",tierA:"ระดับ A — พร้อมตัดสินใจซื้อ",tierB:"ระดับ B — ยังไม่แน่ใจ",tierC:"ระดับ C — ไม่สนใจแต่มีปัญหา",selectPersona:"เลือกบุคคลต้นแบบเพื่อฝึก",chooseScenario:"เลือกสถานการณ์",chatGuideTitle:"วิธีฝึก",chatGuideText:'คุณรับบทเป็นพนักงานขาย พูดคุยกับลูกค้าคนนี้เพื่อพยายามปิดการขายให้ได้ สอบถามความต้องการ แก้ไขปัญหาของลูกค้า และรับมือกับข้อโต้แย้ง เมื่อพอใจแล้วกด "สรุปผล" เพื่อดูคะแนนและข้อเสนอแนะ',chat:"แชท",start:"เริ่มต้น",send:"ส่ง",finish:"สรุปผล",debrief:"ผลลัพธ์และข้อเสนอแนะ",won:"ปิดการขายได้",lost:"ปิดการขายไม่ได้",notTried:"ยังไม่ได้ฝึก",score:"คะแนน",pain:"ปัญหาของลูกค้า",why:"เหตุผล",reveal:"รายละเอียดบุคคลต้นแบบที่ถูกซ่อนไว้",generatePersona:"สร้างบุคคลต้นแบบเพิ่มเติม",weakAreas:"จุดอ่อนที่ควรฝึกเพิ่มเติม",mySessions:"ประวัติการฝึกของฉัน",openSaleTask:"ลูกค้ายังไม่ได้ทักเข้ามา คุณต้องเป็นฝ่ายเริ่มบทสนทนาการขายเอง",sellerInitiated:"คุณต้องเริ่มการขายในเชิงรุก",customerInitiated:"ลูกค้าจะติดต่อเข้ามาก่อน"}},Ke=Jt({locale:localStorage.getItem("locale")||"th",t(e){return As[this.locale]&&As[this.locale][e]||As.en[e]||e},set(e){this.locale=e,localStorage.setItem("locale",e)}}),wu=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Su={class:"app"},Au={key:0,class:"topnav"},xu={class:"tabs"},Ru={class:"nav-right"},Tu={class:"main"},Cu={__name:"App",setup(e){const t=pu();function n(){Ke.set(Ke.locale==="th"?"en":"th")}function s(){Ce.logout(),t.push("/login")}return Wi(()=>{Ce.token&&!Ce.user&&Ce.load()}),(r,i)=>{const o=_r("router-link"),l=_r("router-view");return on(),Tr("div",Su,[ae(Ce).user?(on(),Tr("nav",Au,[le(o,{to:"/",class:"brand"},{default:Vt(()=>[Ft(At(ae(Ke).t("app")),1)]),_:1}),Rt("div",xu,[ae(Ce).isAdmin?(on(),Ds(o,{key:0,to:"/",class:jt(["tab",{active:r.$route.path==="/"}])},{default:Vt(()=>[Ft(At(ae(Ke).t("adminOverview")),1)]),_:1},8,["class"])):Cr("",!0),le(o,{to:"/my/board",class:jt(["tab",{active:r.$route.path==="/my/board"}])},{default:Vt(()=>[Ft(At(ae(Ke).t("myDashboard")),1)]),_:1},8,["class"]),le(o,{to:"/training",class:jt(["tab",{active:r.$route.path==="/training"}])},{default:Vt(()=>[Ft(At(ae(Ke).t("training")),1)]),_:1},8,["class"])]),Rt("div",Ru,[Rt("button",{onClick:n,class:"lang"},At(ae(Ke).locale==="th"?"EN":"TH"),1),le(o,{to:"/settings",class:"icon-btn",title:ae(Ke).t("settings")},{default:Vt(()=>[le(ae(Eu),{size:20,"stroke-width":1.8})]),_:1},8,["title"]),Rt("button",{onClick:s,class:"logout-btn"},[le(ae(bu),{size:18,"stroke-width":1.8}),Ft(" "+At(ae(Ke).t("logout")),1)])])])):Cr("",!0),Rt("main",Tu,[(on(),Ds(l,{key:ae(Ke).locale}))])])}}},Pu=wu(Cu,[["__scopeId","data-v-25816f6a"]]),Ou="modulepreload",Iu=function(e){return"/"+e},ai={},Te=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=Iu(c),c in ai)return;ai[c]=!0;const f=c.endsWith(".css"),u=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${u}`))return;const h=document.createElement("link");if(h.rel=f?"stylesheet":Ou,f||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),f)return new Promise((g,m)=>{h.addEventListener("load",g),h.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},Nu=[{path:"/login",component:()=>Te(()=>import("./Login-BvMoAa9d.js"),__vite__mapDeps([0,1])),meta:{public:!0}},{path:"/setup",component:()=>Te(()=>import("./Setup-_cGdJHOE.js"),__vite__mapDeps([2,3]))},{path:"/",component:()=>Te(()=>import("./Analytics-Ca8FcnIo.js"),__vite__mapDeps([4,5,6,7])),meta:{admin:!0}},{path:"/my/board",component:()=>Te(()=>import("./MyBoard-CdXG-0Ii.js"),__vite__mapDeps([8,9]))},{path:"/training",component:()=>Te(()=>import("./Training-CHRTy9x1.js"),__vite__mapDeps([10,11,6,12]))},{path:"/groups/:gid/personas",component:()=>Te(()=>import("./Personas-BXejtBr0.js"),__vite__mapDeps([13,11,14,15]))},{path:"/groups/:gid/chat/:pid",component:()=>Te(()=>import("./Chat-fU4aRozx.js"),__vite__mapDeps([16,11,14,17]))},{path:"/settings",component:()=>Te(()=>import("./Settings-D5LYPIGh.js"),__vite__mapDeps([18,19]))},{path:"/admin/new-group",component:()=>Te(()=>import("./GroupBuilder-4jGJS7rQ.js"),__vite__mapDeps([20,14,21])),meta:{admin:!0}},{path:"/admin/groups/:gid/edit",component:()=>Te(()=>import("./GroupEdit-BzqeiR8Z.js"),__vite__mapDeps([22,5,23])),meta:{admin:!0}},{path:"/admin/users",component:()=>Te(()=>import("./AdminUsers-Bpsek0Me.js"),__vite__mapDeps([24,5,25])),meta:{admin:!0}},{path:"/admin/analytics",component:()=>Te(()=>import("./Analytics-Ca8FcnIo.js"),__vite__mapDeps([4,5,6,7])),meta:{admin:!0}}],Do=hu({history:$a(),routes:Nu});Do.beforeEach(async e=>e.meta.public?!0:(Ce.user||await Ce.load(),Ce.user?Ce.mustSetup&&e.path!=="/setup"?{path:"/setup"}:e.path==="/"&&!Ce.isAdmin?{path:"/my/board"}:e.meta.admin&&!Ce.isAdmin?{path:"/my/board"}:!0:{path:"/login",query:{redirect:e.fullPath}}));ia(Pu).use(Do).mount("#app");export{jt as A,Ds as B,Zs as C,Xc as D,Mn as E,tt as F,Jt as G,Fu as H,Eu as S,wu as _,Rt as a,Hu as b,Tr as c,Vu as d,Cr as e,Ce as f,pu as g,Uu as h,Ke as i,Ft as j,No as k,Wi as l,le as m,Vt as n,on as o,Ks as p,Du as q,dl as r,Ss as s,At as t,ae as u,jr as v,Mu as w,_r as x,Lu as y,Oe as z}; + */const Eu=No("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),Bs="st_token";function Mo(){return localStorage.getItem(Bs)}function ws(e){e?localStorage.setItem(Bs,e):localStorage.removeItem(Bs)}async function ee(e,t,n,s=!1){const r={},i=Mo();i&&(r.Authorization=`Bearer ${i}`);let o=n;!s&&n!==void 0&&n!==null&&(r["Content-Type"]="application/json",o=JSON.stringify(n));const l=await fetch(t,{method:e,headers:r,body:o});let c=null;try{c=await l.json()}catch{}if(!l.ok){const f=c&&(c.error||c.message)||`HTTP ${l.status}`;throw new Error(f)}return c}const Ss={login:(e,t)=>ee("POST","/api/auth/login",{username:e,password:t}),me:()=>ee("GET","/api/auth/me"),setup:e=>ee("POST","/api/auth/setup",e),updateProfile:e=>ee("PATCH","/api/auth/profile",e),adminCreateUser:e=>ee("POST","/api/admin/users",e),adminListUsers:()=>ee("GET","/api/admin/users"),adminUpdateUser:(e,t)=>ee("PUT",`/api/admin/users/${e}`,t),createGroup:e=>ee("POST","/api/groups",e,!0),listGroups:()=>ee("GET","/api/groups"),getGroup:e=>ee("GET",`/api/groups/${e}`),analyzeGroup:e=>ee("POST",`/api/groups/${e}/analyze`),listPersonas:e=>ee("GET",`/api/groups/${e}/personas`),getPersona:(e,t)=>ee("GET",`/api/groups/${e}/personas/${t}`),updatePersona:(e,t,n)=>ee("PUT",`/api/groups/${e}/personas/${t}`,n),chatStart:(e,t,n)=>ee("POST",`/api/chat/${e}/personas/${t}/chat/start`,n||{}),chatResume:(e,t)=>ee("GET",`/api/chat/${e}/personas/${t}/chat/resume`),chatSend:(e,t,n)=>ee("POST",`/api/chat/${e}/personas/${t}/chat/send`,{text:n}),chatFinish:(e,t)=>ee("POST",`/api/chat/${e}/personas/${t}/chat/finish`),mySessions:()=>ee("GET","/api/chat/sessions"),myBoard:()=>ee("GET","/api/me/board"),weakAreas:()=>ee("GET","/api/me/weak-areas"),myPersonas:()=>ee("GET","/api/me/personas"),generatePersona:e=>ee("POST","/api/me/personas/generate",e),analytics:(e={})=>{const t=new URLSearchParams;e.from&&t.set("from",e.from),e.to&&t.set("to",e.to);const n=t.toString();return ee("GET",`/api/analytics${n?`?${n}`:""}`)}},Ce=Jt({user:null,token:Mo(),mustSetup:!1,get role(){return this.user?this.user.role:null},get isAdmin(){return this.role==="admin"||this.role==="super_admin"},async load(){var e;if(!this.token)return null;try{const t=await Ss.me();return this.user=t.user,this.mustSetup=!!((e=t.user)!=null&&e.must_setup),this.user}catch{return this.user=null,this.mustSetup=!1,ws(null),null}},async login(e,t){const n=await Ss.login(e,t);return this.token=n.token,ws(n.token),this.user=n.user,this.mustSetup=!!n.must_setup,n.user},async finishSetup(e,t){const n=await Ss.setup({username:this.user.username||this.user.id,email:e,password:t});return this.user=n.user,this.mustSetup=!1,n.user},logout(){this.user=null,this.token=null,this.mustSetup=!1,ws(null)}}),As={en:{app:"Sales Trainer",login:"Login",logout:"Logout",username:"Username",email:"Email",password:"Password",newPassword:"New password",confirmPassword:"Confirm password",save:"Save",passwordTooShort:"Password must be at least 4 characters",passwordMismatch:"Passwords do not match",setupTitle:"Set up your account",setupSubtitle:"First login for ",loginError:"Invalid credentials",dashboard:"Dashboard",training:"Training",myDashboard:"My dashboard",adminOverview:"Admin overview",settings:"Settings",account:"Account",profile:"Profile",readonly:"read-only",name:"Display name",saveProfile:"Save profile",changePassword:"Change password",optional:"optional",saved:"Saved",total:"Total",dateRange:"Date range",apply:"Apply",clear:"Clear",hardestPersonas:"Hardest personas",closeRate:"Close rate",managePersonas:"Manage personas",difficulty:"Difficulty",trained:"Trained",addProduct:"Add product",trainingSubtitle:"Pick a product group, then choose a persona to practice closing the sale.",noTraining:"No training groups available",groups:"Persona Groups",myTraining:"My Training",adminTools:"Admin Tools",users:"Users",analytics:"Analytics",groupBuilder:"Group Builder",create:"Create",analyze:"Analyze",manual:"Manual",edit:"Edit",product:"Product",segment:"Initial customer segment (optional)",description:"Additional description / scenario (optional)",channel:"Channel",facebook:"Facebook",line:"LINE",language:"Language",thai:"Thai",english:"English",personas:"Personas",tierA:"Tier A — Ready to buy",tierB:"Tier B — Unsure",tierC:"Tier C — Not interested but has pain",selectPersona:"Select a persona to practice",chooseScenario:"Choose a scenario",chatGuideTitle:"How to practice",chatGuideText:'You are playing the salesperson. Chat with this customer and try to close the sale. Ask about their needs, solve their pain, and handle their objections. When you are done, press "Finish & get result" to see your score and coaching.',chat:"Chat",start:"Start",send:"Send",finish:"Finish & get result",debrief:"Result & Coaching",won:"Won",lost:"Lost",notTried:"Not tried",score:"Score",pain:"Pain",why:"Reason",reveal:"Revealed persona details",generatePersona:"Generate my persona",weakAreas:"My weak areas",mySessions:"My sessions",openSaleTask:"The customer did NOT message first. You must open the sale.",sellerInitiated:"You must open the sale (outbound)",customerInitiated:"The customer will message you first"},th:{app:"ระบบฝึกทักษะการขาย",login:"เข้าสู่ระบบ",logout:"ออกจากระบบ",username:"ชื่อผู้ใช้",email:"อีเมล",password:"รหัสผ่าน",newPassword:"รหัสผ่านใหม่",confirmPassword:"ยืนยันรหัสผ่าน",save:"บันทึก",passwordTooShort:"รหัสผ่านต้องมีความยาวอย่างน้อย 4 ตัวอักษร",passwordMismatch:"รหัสผ่านที่ยืนยันไม่ตรงกัน",setupTitle:"ตั้งค่าบัญชีของคุณ",setupSubtitle:"เข้าสู่ระบบครั้งแรกสำหรับ ",loginError:"ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง กรุณาลองอีกครั้ง",dashboard:"หน้าหลัก",training:"การฝึก",myDashboard:"ภาพรวมผลการฝึก",adminOverview:"ภาพรวมผู้ดูแล",settings:"การตั้งค่า",account:"บัญชี",profile:"ข้อมูลส่วนตัว",readonly:"อ่านอย่างเดียว",name:"ชื่อที่แสดง",saveProfile:"บันทึกข้อมูล",changePassword:"เปลี่ยนรหัสผ่าน",optional:"ไม่บังคับ",saved:"บันทึกเรียบร้อย",total:"ทั้งหมด",dateRange:"ช่วงเวลา",apply:"กรอง",clear:"ล้าง",hardestPersonas:"บุคคลต้นแบบที่ขายยากที่สุด",closeRate:"อัตราปิดการขาย",managePersonas:"จัดการบุคคลต้นแบบ",difficulty:"ระดับความยาก",trained:"ฝึกแล้ว",addProduct:"เพิ่มสินค้า",trainingSubtitle:"เลือกกลุ่มสินค้า แล้วเลือกบุคคลต้นแบบเพื่อฝึกปิดการขาย",noTraining:"ยังไม่มีกลุ่มฝึก",groups:"กลุ่มบุคคลต้นแบบลูกค้า (Persona)",myTraining:"ประวัติการฝึก",adminTools:"เครื่องมือผู้ดูแลระบบ",users:"ผู้ใช้งาน",analytics:"สถิติ",groupBuilder:"สร้างกลุ่มบุคคลต้นแบบ",create:"สร้าง",analyze:"วิเคราะห์",manual:"ระบุเอง",edit:"แก้ไข",product:"สินค้า/บริการ",segment:"กลุ่มลูกค้าเป้าหมายเบื้องต้น (ไม่บังคับ)",description:"คำอธิบายหรือรายละเอียดเพิ่มเติม (ไม่บังคับ)",channel:"ช่องทางติดต่อ",facebook:"Facebook",line:"LINE",language:"ภาษา",thai:"ไทย",english:"อังกฤษ",personas:"บุคคลต้นแบบ",tierA:"ระดับ A — พร้อมตัดสินใจซื้อ",tierB:"ระดับ B — ยังไม่แน่ใจ",tierC:"ระดับ C — ไม่สนใจแต่มีปัญหา",selectPersona:"เลือกบุคคลต้นแบบเพื่อฝึก",chooseScenario:"เลือกสถานการณ์",chatGuideTitle:"วิธีฝึก",chatGuideText:'คุณรับบทเป็นพนักงานขาย พูดคุยกับลูกค้าคนนี้เพื่อพยายามปิดการขายให้ได้ สอบถามความต้องการ แก้ไขปัญหาของลูกค้า และรับมือกับข้อโต้แย้ง เมื่อพอใจแล้วกด "สรุปผล" เพื่อดูคะแนนและข้อเสนอแนะ',chat:"แชท",start:"เริ่มต้น",send:"ส่ง",finish:"สรุปผล",debrief:"ผลลัพธ์และข้อเสนอแนะ",won:"ปิดการขายได้",lost:"ปิดการขายไม่ได้",notTried:"ยังไม่ได้ฝึก",score:"คะแนน",pain:"ปัญหาของลูกค้า",why:"เหตุผล",reveal:"รายละเอียดบุคคลต้นแบบที่ถูกซ่อนไว้",generatePersona:"สร้างบุคคลต้นแบบเพิ่มเติม",weakAreas:"จุดอ่อนที่ควรฝึกเพิ่มเติม",mySessions:"ประวัติการฝึกของฉัน",openSaleTask:"ลูกค้ายังไม่ได้ทักเข้ามา คุณต้องเป็นฝ่ายเริ่มบทสนทนาการขายเอง",sellerInitiated:"คุณต้องเริ่มการขายในเชิงรุก",customerInitiated:"ลูกค้าจะติดต่อเข้ามาก่อน"}},Ke=Jt({locale:localStorage.getItem("locale")||"th",t(e){return As[this.locale]&&As[this.locale][e]||As.en[e]||e},set(e){this.locale=e,localStorage.setItem("locale",e)}}),wu=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Su={class:"app"},Au={key:0,class:"topnav"},Ru={class:"tabs"},xu={class:"nav-right"},Tu={class:"main"},Cu={__name:"App",setup(e){const t=pu();function n(){Ke.set(Ke.locale==="th"?"en":"th")}function s(){Ce.logout(),t.push("/login")}return Wi(()=>{Ce.token&&!Ce.user&&Ce.load()}),(r,i)=>{const o=_r("router-link"),l=_r("router-view");return on(),Tr("div",Su,[ae(Ce).user?(on(),Tr("nav",Au,[le(o,{to:"/",class:"brand"},{default:Vt(()=>[Ft(At(ae(Ke).t("app")),1)]),_:1}),xt("div",Ru,[ae(Ce).isAdmin?(on(),Ds(o,{key:0,to:"/",class:jt(["tab",{active:r.$route.path==="/"}])},{default:Vt(()=>[Ft(At(ae(Ke).t("adminOverview")),1)]),_:1},8,["class"])):Cr("",!0),le(o,{to:"/my/board",class:jt(["tab",{active:r.$route.path==="/my/board"}])},{default:Vt(()=>[Ft(At(ae(Ke).t("myDashboard")),1)]),_:1},8,["class"]),le(o,{to:"/training",class:jt(["tab",{active:r.$route.path==="/training"}])},{default:Vt(()=>[Ft(At(ae(Ke).t("training")),1)]),_:1},8,["class"])]),xt("div",xu,[xt("button",{onClick:n,class:"lang"},At(ae(Ke).locale==="th"?"EN":"TH"),1),le(o,{to:"/settings",class:"icon-btn",title:ae(Ke).t("settings")},{default:Vt(()=>[le(ae(Eu),{size:20,"stroke-width":1.8})]),_:1},8,["title"]),xt("button",{onClick:s,class:"logout-btn"},[le(ae(bu),{size:18,"stroke-width":1.8}),Ft(" "+At(ae(Ke).t("logout")),1)])])])):Cr("",!0),xt("main",Tu,[(on(),Ds(l,{key:ae(Ke).locale}))])])}}},Pu=wu(Cu,[["__scopeId","data-v-25816f6a"]]),Ou="modulepreload",Iu=function(e){return"/"+e},ai={},Te=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=Iu(c),c in ai)return;ai[c]=!0;const f=c.endsWith(".css"),u=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${u}`))return;const h=document.createElement("link");if(h.rel=f?"stylesheet":Ou,f||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),f)return new Promise((g,m)=>{h.addEventListener("load",g),h.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},Nu=[{path:"/login",component:()=>Te(()=>import("./Login-DM1SnTQg.js"),__vite__mapDeps([0,1])),meta:{public:!0}},{path:"/setup",component:()=>Te(()=>import("./Setup-DdJ4ptKX.js"),__vite__mapDeps([2,3]))},{path:"/",component:()=>Te(()=>import("./Analytics-DpJ0uaAA.js"),__vite__mapDeps([4,5,6,7])),meta:{admin:!0}},{path:"/my/board",component:()=>Te(()=>import("./MyBoard-DnLYF8gv.js"),__vite__mapDeps([8,9]))},{path:"/training",component:()=>Te(()=>import("./Training-D4koaEpE.js"),__vite__mapDeps([10,11,6,12]))},{path:"/groups/:gid/personas",component:()=>Te(()=>import("./Personas-Cngg_FjC.js"),__vite__mapDeps([13,11,14,15]))},{path:"/groups/:gid/chat/:pid",component:()=>Te(()=>import("./Chat-o6rfEiwI.js"),__vite__mapDeps([16,11,14,17]))},{path:"/settings",component:()=>Te(()=>import("./Settings-Bdlfb6I_.js"),__vite__mapDeps([18,19]))},{path:"/admin/new-group",component:()=>Te(()=>import("./GroupBuilder-5J7CyUbw.js"),__vite__mapDeps([20,14,21])),meta:{admin:!0}},{path:"/admin/groups/:gid/edit",component:()=>Te(()=>import("./GroupEdit-C8F_eu_z.js"),__vite__mapDeps([22,5,23])),meta:{admin:!0}},{path:"/admin/users",component:()=>Te(()=>import("./AdminUsers-da8uxtrm.js"),__vite__mapDeps([24,5,25])),meta:{admin:!0}},{path:"/admin/analytics",component:()=>Te(()=>import("./Analytics-DpJ0uaAA.js"),__vite__mapDeps([4,5,6,7])),meta:{admin:!0}}],Do=hu({history:$a(),routes:Nu});Do.beforeEach(async e=>e.meta.public?!0:(Ce.user||await Ce.load(),Ce.user?Ce.mustSetup&&e.path!=="/setup"?{path:"/setup"}:e.path==="/"&&!Ce.isAdmin?{path:"/my/board"}:e.meta.admin&&!Ce.isAdmin?{path:"/my/board"}:!0:{path:"/login",query:{redirect:e.fullPath}}));ia(Pu).use(Do).mount("#app");export{jt as A,Ds as B,Zs as C,Xc as D,Mn as E,tt as F,Jt as G,Fu as H,Eu as S,wu as _,xt as a,Hu as b,Tr as c,Vu as d,Cr as e,Ce as f,pu as g,Uu as h,Ke as i,Ft as j,No as k,Wi as l,le as m,Vt as n,on as o,Ks as p,Du as q,dl as r,Ss as s,At as t,ae as u,jr as v,Mu as w,_r as x,Lu as y,Oe as z}; diff --git a/frontend/dist/assets/plus-DCrJlDOb.js b/frontend/dist/assets/plus-Dg6sDA5g.js similarity index 86% rename from frontend/dist/assets/plus-DCrJlDOb.js rename to frontend/dist/assets/plus-Dg6sDA5g.js index a8ab728..aac5bbb 100644 --- a/frontend/dist/assets/plus-DCrJlDOb.js +++ b/frontend/dist/assets/plus-Dg6sDA5g.js @@ -1,4 +1,4 @@ -import{k as e}from"./index-tI5UDFg-.js";/** +import{k as e}from"./index-Dv9XjhnS.js";/** * @license lucide-vue-next v1.0.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/target-CylhW5SK.js b/frontend/dist/assets/target-Do-370k4.js similarity index 88% rename from frontend/dist/assets/target-CylhW5SK.js rename to frontend/dist/assets/target-Do-370k4.js index 7c028e8..f105cbc 100644 --- a/frontend/dist/assets/target-CylhW5SK.js +++ b/frontend/dist/assets/target-Do-370k4.js @@ -1,4 +1,4 @@ -import{k as c}from"./index-tI5UDFg-.js";/** +import{k as c}from"./index-Dv9XjhnS.js";/** * @license lucide-vue-next v1.0.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/users-qicnhyDs.js b/frontend/dist/assets/users-CFr5Kj99.js similarity index 90% rename from frontend/dist/assets/users-qicnhyDs.js rename to frontend/dist/assets/users-CFr5Kj99.js index 0028c4e..331d786 100644 --- a/frontend/dist/assets/users-qicnhyDs.js +++ b/frontend/dist/assets/users-CFr5Kj99.js @@ -1,4 +1,4 @@ -import{k as e}from"./index-tI5UDFg-.js";/** +import{k as e}from"./index-Dv9XjhnS.js";/** * @license lucide-vue-next v1.0.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/index.html b/frontend/dist/index.html index fc43073..83b31ab 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -4,7 +4,7 @@ Sales Trainer - + diff --git a/frontend/src/api/index.js b/frontend/src/api/index.js index 2a85b74..1298dac 100644 --- a/frontend/src/api/index.js +++ b/frontend/src/api/index.js @@ -48,6 +48,7 @@ export const api = { getPersona: (gid, pid) => request('GET', `/api/groups/${gid}/personas/${pid}`), updatePersona: (gid, pid, b) => request('PUT', `/api/groups/${gid}/personas/${pid}`, b), chatStart: (gid, pid, scenario) => request('POST', `/api/chat/${gid}/personas/${pid}/chat/start`, scenario || {}), + chatResume: (gid, pid) => request('GET', `/api/chat/${gid}/personas/${pid}/chat/resume`), chatSend: (gid, pid, text) => request('POST', `/api/chat/${gid}/personas/${pid}/chat/send`, { text }), chatFinish: (gid, pid) => request('POST', `/api/chat/${gid}/personas/${pid}/chat/finish`), mySessions: () => request('GET', '/api/chat/sessions'), diff --git a/frontend/src/views/Chat.vue b/frontend/src/views/Chat.vue index a93a2a9..3559fe1 100644 --- a/frontend/src/views/Chat.vue +++ b/frontend/src/views/Chat.vue @@ -37,9 +37,9 @@

{{ persona ? persona.name : '...' }}

{{ persona ? persona.channel : '' }} {{ persona.profession }} · {{ persona.age_group }} - + + {{ debrief && debrief.outcome === 'won' ? i18n.t('won') : i18n.t('lost') }} + @@ -102,7 +102,6 @@ const messages = ref([]) const text = ref('') const sending = ref(false) const debrief = ref(null) -const taskText = ref('') const sessionId = ref(null) const picked = ref('social') @@ -123,13 +122,33 @@ async function begin() { phase.value = 'chat' const res = await api.chatStart(gid, pid, { scenario: picked.value }) sessionId.value = res.session.id - if (res.session.task) taskText.value = res.session.task messages.value = res.session.messages || [] if (messages.value.length) scrollDown() } onMounted(async () => { persona.value = (await api.getPersona(gid, pid)).persona + // Resume: if there's an unfinished session for this persona, continue it instead of restarting. + try { + const r = await api.chatResume(gid, pid) + sessionId.value = r.session.id + messages.value = r.session.messages || [] + if (messages.value.length && !r.session.debrief) { + phase.value = 'chat' + // re-derive which scenario was active + const sc = scenarios.find((s) => s.id === r.scenario) + if (sc) picked.value = r.scenario + // if session has a debrief already, it's done + } else if (r.session.debrief) { + debrief.value = r.session.debrief + messages.value = r.session.messages || [] + phase.value = 'done' + } + if (messages.value.length) scrollDown() + } catch (e) { + // no active session -> show the scenario picker + phase.value = 'pick' + } }) async function send() { @@ -139,6 +158,10 @@ async function send() { const res = await api.chatSend(gid, pid, text.value.trim()) messages.value = res.messages text.value = '' + if (res.finished) { + debrief.value = res.debrief || null + phase.value = 'done' + } scrollDown() } catch (e) { alert(e.message) @@ -147,21 +170,6 @@ async function send() { } } -async function finish() { - if (!confirm(i18n.t('finish') + '?')) return - sending.value = true - try { - const res = await api.chatFinish(gid, pid) - debrief.value = res.debrief - messages.value = res.session.messages - phase.value = 'done' - } catch (e) { - alert(e.message) - } finally { - sending.value = false - } -} - const FIELD_LABELS = { name: 'ชื่อ', tier: 'ระดับ', difficulty: 'ความยาก', profession: 'อาชีพ', age_group: 'ช่วงอายุ', location: 'พื้นที่', income: 'รายได้', budget: 'งบประมาณ',