From ae24cad458f4208d230797395a5a4738823cc89b Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 15 Jul 2026 06:31:25 +0200 Subject: [PATCH] build(frontend): deploy inventory search redesign Co-Authored-By: Claude Fable 5 --- frontend/tsconfig.tsbuildinfo | 2 +- ...IU-wul.js => AdminUsersWindow-DT6JGS-P.js} | 2 +- ...ow-8k8-gwjm.js => AgentWindow-D_dwVTgP.js} | 2 +- ...b3SdkAU.js => CharacterWindow-CVYGQ3Kf.js} | 2 +- ...-27F.js => CombatPickerWindow-DqQoZIr1.js} | 2 +- ...ZxNVt.js => CombatStatsWindow-CL4bPDdu.js} | 2 +- ...Hmmmlat.js => InventoryWindow-C9tBB4ai.js} | 2 +- ...w-BaiYHihK.js => IssuesWindow-RD9J2Lzz.js} | 2 +- ...lXaE5.js => QuestStatusWindow-1bRYpy_f.js} | 2 +- ...ow-DOYDpoy6.js => RadarWindow-CjHETj1t.js} | 2 +- ...ow-C2s91wbD.js => StatsWindow-mORPbi1c.js} | 2 +- ...fun8.js => VitalSharingWindow-DWxCoItf.js} | 2 +- ...{index-1RR6uoxX.css => index-Dj1_Fy8n.css} | 2 +- static/assets/index-DlaI7zTK.js | 34 ------------------- static/assets/index-DtA97zvw.js | 34 +++++++++++++++++++ static/index.html | 4 +-- 16 files changed, 49 insertions(+), 49 deletions(-) rename static/assets/{AdminUsersWindow-BcIU-wul.js => AdminUsersWindow-DT6JGS-P.js} (98%) rename static/assets/{AgentWindow-8k8-gwjm.js => AgentWindow-D_dwVTgP.js} (96%) rename static/assets/{CharacterWindow-Bb3SdkAU.js => CharacterWindow-CVYGQ3Kf.js} (99%) rename static/assets/{CombatPickerWindow-d0qw-27F.js => CombatPickerWindow-DqQoZIr1.js} (92%) rename static/assets/{CombatStatsWindow-DXMZxNVt.js => CombatStatsWindow-CL4bPDdu.js} (99%) rename static/assets/{InventoryWindow-JHmmmlat.js => InventoryWindow-C9tBB4ai.js} (99%) rename static/assets/{IssuesWindow-BaiYHihK.js => IssuesWindow-RD9J2Lzz.js} (99%) rename static/assets/{QuestStatusWindow-DwtlXaE5.js => QuestStatusWindow-1bRYpy_f.js} (96%) rename static/assets/{RadarWindow-DOYDpoy6.js => RadarWindow-CjHETj1t.js} (99%) rename static/assets/{StatsWindow-C2s91wbD.js => StatsWindow-mORPbi1c.js} (93%) rename static/assets/{VitalSharingWindow-Br70fun8.js => VitalSharingWindow-DWxCoItf.js} (97%) rename static/assets/{index-1RR6uoxX.css => index-Dj1_Fy8n.css} (76%) delete mode 100644 static/assets/index-DlaI7zTK.js create mode 100644 static/assets/index-DtA97zvw.js diff --git a/frontend/tsconfig.tsbuildinfo b/frontend/tsconfig.tsbuildinfo index fdc1b89e..ff29b318 100644 --- a/frontend/tsconfig.tsbuildinfo +++ b/frontend/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/app.tsx","./src/main.tsx","./src/api/client.ts","./src/api/endpoints.ts","./src/components/effects/deathnotification.tsx","./src/components/effects/rarenotification.tsx","./src/components/map/heatmapcanvas.tsx","./src/components/map/maplayout.tsx","./src/components/map/mapview.tsx","./src/components/map/playerdots.tsx","./src/components/map/portalmarkers.tsx","./src/components/map/sidebar.tsx","./src/components/map/trailssvg.tsx","./src/components/sidebar/playerlist.tsx","./src/components/sidebar/playerrow.tsx","./src/components/sidebar/sidebarwindowbuttons.tsx","./src/components/sidebar/sortbuttons.tsx","./src/components/windows/characterwindow.tsx","./src/components/windows/chatwindow.tsx","./src/components/windows/combatpickerwindow.tsx","./src/components/windows/combatstatswindow.tsx","./src/components/windows/draggablewindow.tsx","./src/components/windows/inventorywindow.tsx","./src/components/windows/issueswindow.tsx","./src/components/windows/playerdashboardwindow.tsx","./src/components/windows/queststatuswindow.tsx","./src/components/windows/radarwindow.tsx","./src/components/windows/statswindow.tsx","./src/components/windows/vitalsharingwindow.tsx","./src/components/windows/windowrenderer.tsx","./src/contexts/windowmanagercontext.tsx","./src/hooks/uselivedata.ts","./src/hooks/useplayercolors.ts","./src/hooks/usewebsocket.ts","./src/types/index.ts","./src/utils/coordinates.ts"],"version":"5.8.3"} \ No newline at end of file +{"root":["./src/app.tsx","./src/main.tsx","./src/api/client.ts","./src/api/endpoints.ts","./src/components/playerdashboardfullpage.tsx","./src/components/effects/deathnotification.tsx","./src/components/effects/rarenotification.tsx","./src/components/inventory/activechips.tsx","./src/components/inventory/cantripfilter.tsx","./src/components/inventory/characterfilter.tsx","./src/components/inventory/detailpanel.tsx","./src/components/inventory/filtersidebar.tsx","./src/components/inventory/inventorysearchpage.tsx","./src/components/inventory/resultstable.tsx","./src/components/inventory/constants.ts","./src/components/inventory/types.ts","./src/components/inventory/useinventorysearch.ts","./src/components/map/heatmapcanvas.tsx","./src/components/map/maplayout.tsx","./src/components/map/mapview.tsx","./src/components/map/playerdots.tsx","./src/components/map/portalmarkers.tsx","./src/components/map/sidebar.tsx","./src/components/map/trailssvg.tsx","./src/components/midsummer/frogtoggle.tsx","./src/components/midsummer/maypole.tsx","./src/components/midsummer/midsummerbanner.tsx","./src/components/midsummer/midsummerrain.tsx","./src/components/sidebar/playerlist.tsx","./src/components/sidebar/playerrow.tsx","./src/components/sidebar/sidebarwindowbuttons.tsx","./src/components/sidebar/sortbuttons.tsx","./src/components/windows/adminuserswindow.tsx","./src/components/windows/agentwindow.tsx","./src/components/windows/characterwindow.tsx","./src/components/windows/chatwindow.tsx","./src/components/windows/combatpickerwindow.tsx","./src/components/windows/combatstatswindow.tsx","./src/components/windows/draggablewindow.tsx","./src/components/windows/inventorywindow.tsx","./src/components/windows/issueswindow.tsx","./src/components/windows/playerdashboardwindow.tsx","./src/components/windows/queststatuswindow.tsx","./src/components/windows/radarwindow.tsx","./src/components/windows/statswindow.tsx","./src/components/windows/vitalsharingwindow.tsx","./src/components/windows/windowrenderer.tsx","./src/contexts/windowmanagercontext.tsx","./src/hooks/usecurrentuser.ts","./src/hooks/uselivedata.ts","./src/hooks/usemidsummer.tsx","./src/hooks/useplayercolors.ts","./src/hooks/usewebsocket.ts","./src/types/index.ts","./src/utils/coordinates.ts"],"version":"5.8.3"} \ No newline at end of file diff --git a/static/assets/AdminUsersWindow-BcIU-wul.js b/static/assets/AdminUsersWindow-DT6JGS-P.js similarity index 98% rename from static/assets/AdminUsersWindow-BcIU-wul.js rename to static/assets/AdminUsersWindow-DT6JGS-P.js index 3c0f7b51..e6b4c8f6 100644 --- a/static/assets/AdminUsersWindow-BcIU-wul.js +++ b/static/assets/AdminUsersWindow-DT6JGS-P.js @@ -1 +1 @@ -import{e as I,r as t,l as _,f as L,g as N,h as W,j as e,D as F}from"./index-DlaI7zTK.js";import"./react-yfL0ty4i.js";function R(c){try{return new Date(c).toISOString().slice(0,10)}catch{return c}}const q=({id:c,zIndex:x})=>{const{user:j}=I(),[g,k]=t.useState([]),[w,p]=t.useState(!0),[b,n]=t.useState(null),[l,C]=t.useState(""),[i,f]=t.useState(""),[h,y]=t.useState(!1),[d,S]=t.useState(!1),[A,u]=t.useState(null),[o,m]=t.useState(""),r=t.useCallback(async()=>{p(!0),n(null);try{const s=await _();k(s.users??[])}catch(s){n(String(s))}finally{p(!1)}},[]);t.useEffect(()=>{r()},[r]);const U=t.useCallback(async s=>{if(s.preventDefault(),!l.trim()||i.length<4){n("Username required and password must be at least 4 chars");return}S(!0),n(null);try{await L(l.trim(),i,h),C(""),f(""),y(!1),await r()}catch(a){n(String(a))}finally{S(!1)}},[l,i,h,r]),v=t.useCallback(async s=>{n(null);try{await N(s.id,{is_admin:!s.is_admin}),await r()}catch(a){n(String(a))}},[r]),D=t.useCallback(async s=>{if(o.length<4){n("Password must be at least 4 characters");return}n(null);try{await N(s,{password:o}),u(null),m("")}catch(a){n(String(a))}},[o]),P=t.useCallback(async s=>{if(confirm(`Delete user "${s.username}"? This cannot be undone.`)){n(null);try{await W(s.id),await r()}catch(a){n(String(a))}}},[r]);return e.jsx(F,{id:c,title:"🛡️ Admin · Users",zIndex:x,width:620,height:540,children:e.jsxs("div",{className:"ml-admin",children:[b&&e.jsx("div",{className:"ml-admin-error",children:b}),e.jsxs("section",{className:"ml-admin-section",children:[e.jsx("h3",{children:"Add user"}),e.jsxs("form",{onSubmit:U,className:"ml-admin-create",children:[e.jsx("input",{type:"text",placeholder:"Username",value:l,onChange:s=>C(s.target.value),disabled:d,autoComplete:"off"}),e.jsx("input",{type:"password",placeholder:"Password (min 4)",value:i,onChange:s=>f(s.target.value),disabled:d,autoComplete:"new-password"}),e.jsxs("label",{children:[e.jsx("input",{type:"checkbox",checked:h,onChange:s=>y(s.target.checked),disabled:d}),"admin"]}),e.jsx("button",{type:"submit",disabled:d||!l.trim()||i.length<4,children:d?"Adding…":"Add"})]})]}),e.jsxs("section",{className:"ml-admin-section",children:[e.jsxs("h3",{children:["Users ",w&&e.jsx("span",{className:"ml-admin-muted",children:"(loading…)"})]}),e.jsxs("table",{className:"ml-admin-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"ID"}),e.jsx("th",{children:"Username"}),e.jsx("th",{children:"Admin"}),e.jsx("th",{children:"Created"}),e.jsx("th",{children:"Actions"})]})}),e.jsxs("tbody",{children:[g.map(s=>{const a=j!=null&&j.username.toLowerCase()===s.username.toLowerCase();return e.jsxs("tr",{children:[e.jsx("td",{children:s.id}),e.jsxs("td",{children:[s.username,a&&e.jsx("span",{className:"ml-admin-muted",children:" (you)"})]}),e.jsx("td",{children:e.jsx("button",{className:"ml-admin-toggle",onClick:()=>v(s),title:"Click to toggle admin",children:s.is_admin?"✓":"–"})}),e.jsx("td",{children:R(s.created_at)}),e.jsx("td",{children:A===s.id?e.jsxs("span",{className:"ml-admin-pw-edit",children:[e.jsx("input",{type:"text",placeholder:"New password",value:o,onChange:E=>m(E.target.value),autoFocus:!0}),e.jsx("button",{onClick:()=>D(s.id),children:"Save"}),e.jsx("button",{onClick:()=>{u(null),m("")},children:"Cancel"})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:()=>{u(s.id),m("")},children:"Reset PW"}),!a&&e.jsx("button",{className:"ml-admin-danger",onClick:()=>P(s),children:"Delete"})]})})]},s.id)}),g.length===0&&!w&&e.jsx("tr",{children:e.jsx("td",{colSpan:5,className:"ml-admin-muted",children:"No users."})})]})]})]})]})})};export{q as AdminUsersWindow}; +import{e as I,r as t,l as _,f as L,g as N,h as W,j as e,D as F}from"./index-DtA97zvw.js";import"./react-yfL0ty4i.js";function R(c){try{return new Date(c).toISOString().slice(0,10)}catch{return c}}const q=({id:c,zIndex:x})=>{const{user:j}=I(),[g,k]=t.useState([]),[w,p]=t.useState(!0),[b,n]=t.useState(null),[l,C]=t.useState(""),[i,f]=t.useState(""),[h,y]=t.useState(!1),[d,S]=t.useState(!1),[A,u]=t.useState(null),[o,m]=t.useState(""),r=t.useCallback(async()=>{p(!0),n(null);try{const s=await _();k(s.users??[])}catch(s){n(String(s))}finally{p(!1)}},[]);t.useEffect(()=>{r()},[r]);const U=t.useCallback(async s=>{if(s.preventDefault(),!l.trim()||i.length<4){n("Username required and password must be at least 4 chars");return}S(!0),n(null);try{await L(l.trim(),i,h),C(""),f(""),y(!1),await r()}catch(a){n(String(a))}finally{S(!1)}},[l,i,h,r]),v=t.useCallback(async s=>{n(null);try{await N(s.id,{is_admin:!s.is_admin}),await r()}catch(a){n(String(a))}},[r]),D=t.useCallback(async s=>{if(o.length<4){n("Password must be at least 4 characters");return}n(null);try{await N(s,{password:o}),u(null),m("")}catch(a){n(String(a))}},[o]),P=t.useCallback(async s=>{if(confirm(`Delete user "${s.username}"? This cannot be undone.`)){n(null);try{await W(s.id),await r()}catch(a){n(String(a))}}},[r]);return e.jsx(F,{id:c,title:"🛡️ Admin · Users",zIndex:x,width:620,height:540,children:e.jsxs("div",{className:"ml-admin",children:[b&&e.jsx("div",{className:"ml-admin-error",children:b}),e.jsxs("section",{className:"ml-admin-section",children:[e.jsx("h3",{children:"Add user"}),e.jsxs("form",{onSubmit:U,className:"ml-admin-create",children:[e.jsx("input",{type:"text",placeholder:"Username",value:l,onChange:s=>C(s.target.value),disabled:d,autoComplete:"off"}),e.jsx("input",{type:"password",placeholder:"Password (min 4)",value:i,onChange:s=>f(s.target.value),disabled:d,autoComplete:"new-password"}),e.jsxs("label",{children:[e.jsx("input",{type:"checkbox",checked:h,onChange:s=>y(s.target.checked),disabled:d}),"admin"]}),e.jsx("button",{type:"submit",disabled:d||!l.trim()||i.length<4,children:d?"Adding…":"Add"})]})]}),e.jsxs("section",{className:"ml-admin-section",children:[e.jsxs("h3",{children:["Users ",w&&e.jsx("span",{className:"ml-admin-muted",children:"(loading…)"})]}),e.jsxs("table",{className:"ml-admin-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"ID"}),e.jsx("th",{children:"Username"}),e.jsx("th",{children:"Admin"}),e.jsx("th",{children:"Created"}),e.jsx("th",{children:"Actions"})]})}),e.jsxs("tbody",{children:[g.map(s=>{const a=j!=null&&j.username.toLowerCase()===s.username.toLowerCase();return e.jsxs("tr",{children:[e.jsx("td",{children:s.id}),e.jsxs("td",{children:[s.username,a&&e.jsx("span",{className:"ml-admin-muted",children:" (you)"})]}),e.jsx("td",{children:e.jsx("button",{className:"ml-admin-toggle",onClick:()=>v(s),title:"Click to toggle admin",children:s.is_admin?"✓":"–"})}),e.jsx("td",{children:R(s.created_at)}),e.jsx("td",{children:A===s.id?e.jsxs("span",{className:"ml-admin-pw-edit",children:[e.jsx("input",{type:"text",placeholder:"New password",value:o,onChange:E=>m(E.target.value),autoFocus:!0}),e.jsx("button",{onClick:()=>D(s.id),children:"Save"}),e.jsx("button",{onClick:()=>{u(null),m("")},children:"Cancel"})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:()=>{u(s.id),m("")},children:"Reset PW"}),!a&&e.jsx("button",{className:"ml-admin-danger",onClick:()=>P(s),children:"Delete"})]})})]},s.id)}),g.length===0&&!w&&e.jsx("tr",{children:e.jsx("td",{colSpan:5,className:"ml-admin-muted",children:"No users."})})]})]})]})]})})};export{q as AdminUsersWindow}; diff --git a/static/assets/AgentWindow-8k8-gwjm.js b/static/assets/AgentWindow-D_dwVTgP.js similarity index 96% rename from static/assets/AgentWindow-8k8-gwjm.js rename to static/assets/AgentWindow-D_dwVTgP.js index 08846e84..3e4709f5 100644 --- a/static/assets/AgentWindow-8k8-gwjm.js +++ b/static/assets/AgentWindow-D_dwVTgP.js @@ -1 +1 @@ -import{r as n,b as w,c as k,d as E,j as t,D as I}from"./index-DlaI7zTK.js";import"./react-yfL0ty4i.js";const h="overlord_agent_session_id";function v(){if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID();const s=l=>Math.floor(Math.random()*l);return`${s(4294967296).toString(16).padStart(8,"0")}-${s(65536).toString(16).padStart(4,"0")}-4${s(4096).toString(16).padStart(3,"0")}-${(8+s(4)).toString(16)}${s(4096).toString(16).padStart(3,"0")}-${s(281474976710656).toString(16).padStart(12,"0")}`}function $(){try{const l=localStorage.getItem(h);if(l)return l}catch{}const s=v();try{localStorage.setItem(h,s)}catch{}return s}const _=({id:s,zIndex:l})=>{const[o,j]=n.useState(()=>$()),[d,i]=n.useState([]),[g,m]=n.useState(""),[r,f]=n.useState(!1),[p,x]=n.useState(!0),S=n.useRef(null);n.useEffect(()=>{let e=!1;return x(!0),w(o).then(a=>{if(e)return;const c=(a.messages??[]).map(y=>({role:y.role,text:y.text}));i(c)}).catch(()=>{e||i([])}).finally(()=>{e||x(!1)}),()=>{e=!0}},[o]),n.useEffect(()=>{const e=S.current;e&&(e.scrollTop=e.scrollHeight)},[d.length,r]);const u=n.useCallback(async()=>{const e=g.trim();if(!(!e||r)){m(""),i(a=>[...a,{role:"user",text:e}]),f(!0);try{const a=await k(e,o);i(c=>[...c,{role:a.is_error?"error":"assistant",text:a.result||"(no response)"}])}catch(a){i(c=>[...c,{role:"error",text:`Request failed: ${String(a)}`}])}finally{f(!1)}}},[g,r,o]),N=n.useCallback(async()=>{if(r)return;let e="";try{e=(await E()).session_id}catch{e=v()}try{localStorage.setItem(h,e)}catch{}j(e),i([]),m("")},[r]),b=n.useCallback(e=>{e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),u())},[u]);return t.jsx(I,{id:s,title:"🤖 Overlord Assistant",zIndex:l,width:520,height:620,children:t.jsxs("div",{className:"ml-agent",children:[t.jsxs("div",{className:"ml-agent-toolbar",children:[t.jsx("button",{className:"ml-agent-btn",onClick:N,disabled:r,children:"+ New Chat"}),t.jsxs("span",{className:"ml-agent-session",title:o,children:[o.slice(0,8),"…"]})]}),t.jsxs("div",{className:"ml-agent-messages",ref:S,children:[p&&d.length===0&&t.jsx("div",{className:"ml-agent-empty",children:"Loading conversation…"}),!p&&d.length===0&&t.jsx("div",{className:"ml-agent-empty",children:"Ask anything about the live game state — players, kills, inventory, suitbuilder, recent rares, etc."}),d.map((e,a)=>t.jsxs("div",{className:`ml-agent-msg ml-agent-${e.role}`,children:[t.jsx("div",{className:"ml-agent-role",children:e.role==="user"?"You":e.role==="assistant"?"Overlord":"Error"}),t.jsx("div",{className:"ml-agent-text",children:e.text})]},a)),r&&t.jsxs("div",{className:"ml-agent-msg ml-agent-assistant",children:[t.jsx("div",{className:"ml-agent-role",children:"Overlord"}),t.jsx("div",{className:"ml-agent-text ml-agent-thinking",children:"Thinking…"})]})]}),t.jsxs("form",{className:"ml-agent-form",onSubmit:e=>{e.preventDefault(),u()},children:[t.jsx("textarea",{className:"ml-agent-input",value:g,onChange:e=>m(e.target.value),onKeyDown:b,placeholder:r?"Waiting for response…":"Type a message — Enter to send, Shift+Enter for newline",disabled:r,rows:2}),t.jsx("button",{type:"submit",className:"ml-agent-send",disabled:r||!g.trim(),children:"Send"})]})]})})};export{_ as AgentWindow}; +import{r as n,b as w,c as k,d as E,j as t,D as I}from"./index-DtA97zvw.js";import"./react-yfL0ty4i.js";const h="overlord_agent_session_id";function v(){if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID();const s=l=>Math.floor(Math.random()*l);return`${s(4294967296).toString(16).padStart(8,"0")}-${s(65536).toString(16).padStart(4,"0")}-4${s(4096).toString(16).padStart(3,"0")}-${(8+s(4)).toString(16)}${s(4096).toString(16).padStart(3,"0")}-${s(281474976710656).toString(16).padStart(12,"0")}`}function $(){try{const l=localStorage.getItem(h);if(l)return l}catch{}const s=v();try{localStorage.setItem(h,s)}catch{}return s}const _=({id:s,zIndex:l})=>{const[o,j]=n.useState(()=>$()),[d,i]=n.useState([]),[g,m]=n.useState(""),[r,f]=n.useState(!1),[p,x]=n.useState(!0),S=n.useRef(null);n.useEffect(()=>{let e=!1;return x(!0),w(o).then(a=>{if(e)return;const c=(a.messages??[]).map(y=>({role:y.role,text:y.text}));i(c)}).catch(()=>{e||i([])}).finally(()=>{e||x(!1)}),()=>{e=!0}},[o]),n.useEffect(()=>{const e=S.current;e&&(e.scrollTop=e.scrollHeight)},[d.length,r]);const u=n.useCallback(async()=>{const e=g.trim();if(!(!e||r)){m(""),i(a=>[...a,{role:"user",text:e}]),f(!0);try{const a=await k(e,o);i(c=>[...c,{role:a.is_error?"error":"assistant",text:a.result||"(no response)"}])}catch(a){i(c=>[...c,{role:"error",text:`Request failed: ${String(a)}`}])}finally{f(!1)}}},[g,r,o]),N=n.useCallback(async()=>{if(r)return;let e="";try{e=(await E()).session_id}catch{e=v()}try{localStorage.setItem(h,e)}catch{}j(e),i([]),m("")},[r]),b=n.useCallback(e=>{e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),u())},[u]);return t.jsx(I,{id:s,title:"🤖 Overlord Assistant",zIndex:l,width:520,height:620,children:t.jsxs("div",{className:"ml-agent",children:[t.jsxs("div",{className:"ml-agent-toolbar",children:[t.jsx("button",{className:"ml-agent-btn",onClick:N,disabled:r,children:"+ New Chat"}),t.jsxs("span",{className:"ml-agent-session",title:o,children:[o.slice(0,8),"…"]})]}),t.jsxs("div",{className:"ml-agent-messages",ref:S,children:[p&&d.length===0&&t.jsx("div",{className:"ml-agent-empty",children:"Loading conversation…"}),!p&&d.length===0&&t.jsx("div",{className:"ml-agent-empty",children:"Ask anything about the live game state — players, kills, inventory, suitbuilder, recent rares, etc."}),d.map((e,a)=>t.jsxs("div",{className:`ml-agent-msg ml-agent-${e.role}`,children:[t.jsx("div",{className:"ml-agent-role",children:e.role==="user"?"You":e.role==="assistant"?"Overlord":"Error"}),t.jsx("div",{className:"ml-agent-text",children:e.text})]},a)),r&&t.jsxs("div",{className:"ml-agent-msg ml-agent-assistant",children:[t.jsx("div",{className:"ml-agent-role",children:"Overlord"}),t.jsx("div",{className:"ml-agent-text ml-agent-thinking",children:"Thinking…"})]})]}),t.jsxs("form",{className:"ml-agent-form",onSubmit:e=>{e.preventDefault(),u()},children:[t.jsx("textarea",{className:"ml-agent-input",value:g,onChange:e=>m(e.target.value),onKeyDown:b,placeholder:r?"Waiting for response…":"Type a message — Enter to send, Shift+Enter for newline",disabled:r,rows:2}),t.jsx("button",{type:"submit",className:"ml-agent-send",disabled:r||!g.trim(),children:"Send"})]})]})})};export{_ as AgentWindow}; diff --git a/static/assets/CharacterWindow-Bb3SdkAU.js b/static/assets/CharacterWindow-CVYGQ3Kf.js similarity index 99% rename from static/assets/CharacterWindow-Bb3SdkAU.js rename to static/assets/CharacterWindow-CVYGQ3Kf.js index 3896e8cf..951b154c 100644 --- a/static/assets/CharacterWindow-Bb3SdkAU.js +++ b/static/assets/CharacterWindow-CVYGQ3Kf.js @@ -1 +1 @@ -import{r as f,a as J,j as e,D as K}from"./index-DlaI7zTK.js";import"./react-yfL0ty4i.js";const F={218:"Reinforcement of the Lugians",219:"Bleeargh's Fortitude",220:"Oswald's Enhancement",221:"Siraluun's Blessing",222:"Enduring Calm",223:"Steadfast Will",224:"Ciandra's Essence",225:"Yoshi's Essence",226:"Jibril's Essence",227:"Celdiseth's Essence",228:"Koga's Essence",229:"Shadow of the Seventh Mule",230:"Might of the Seventh Mule",231:"Clutch of the Miser",232:"Enduring Enchantment",233:"Critical Protection",234:"Quick Learner",235:"Ciandra's Fortune",236:"Charmed Smith",237:"Innate Renewal",238:"Archmage's Endurance",239:"Enhancement of the Blade Turner",240:"Enhancement of the Arrow Turner",241:"Enhancement of the Mace Turner",242:"Caustic Enhancement",243:"Fierce Impaler",244:"Iron Skin of the Invincible",245:"Eye of the Remorseless",246:"Hand of the Remorseless",294:"Master of the Steel Circle",295:"Master of the Focused Eye",296:"Master of the Five Fold Path",297:"Frenzy of the Slayer",298:"Iron Skin of the Invincible",299:"Jack of All Trades",300:"Infused Void Magic",301:"Infused War Magic",302:"Infused Life Magic",309:"Infused Item Magic",310:"Infused Creature Magic",326:"Clutch of the Miser",328:"Enduring Enchantment"},B={333:"Valor / Destruction",334:"Protection",335:"Glory / Retribution",336:"Temperance / Hardening",338:"Aetheric Vision",339:"Mana Flow",340:"Mana Infusion",342:"Purity",343:"Craftsman",344:"Specialization",365:"World"},$={370:"Damage",371:"Damage Resistance",372:"Critical",373:"Critical Resistance",374:"Critical Damage",375:"Critical Damage Resistance",376:"Healing Boost",379:"Vitality"},W={287:"Celestial Hand",288:"Eldrytch Web",289:"Radiant Blood"},D={354:"Melee",355:"Ranged",362:"Summoning"},q={1:"Unarmed",2:"Swords",3:"Axes",4:"Maces",5:"Spears",6:"Daggers",7:"Staves",8:"Bows",9:"Crossbows",10:"Thrown",11:"Two-Handed",12:"Void",13:"War",14:"Life"},U={181:"Chess Rank",192:"Fishing Skill",199:"Total Augmentations",322:"Aetheria Slots",390:"Enlightenment"};function Q(c){return c>=1001?"Master":c>=301?"Lord":c>=151?"Knight":c>=31?"Adept":"Initiate"}const d="#af7a30",u="#000022",ee=({id:c,charName:g,zIndex:L,vitals:s,liveStats:O})=>{var _,N;const[H,P]=f.useState(null),[j,V]=f.useState(0),[m,G]=f.useState(0);f.useEffect(()=>{J(`/character-stats/${encodeURIComponent(g)}`).then(P).catch(()=>{})},[g]);const n=O||H,a=t=>t!=null?Number(t).toLocaleString():"—",o=(n==null?void 0:n.stats_data)||n||{},C=o.attributes||{},A=o.skills||{},Y=o.vitals||{},E=o.titles||[],h=o.properties||{},T=Object.entries(A).filter(([,t])=>(t==null?void 0:t.training)==="Specialized").sort(([t],[l])=>t.localeCompare(l)),I=Object.entries(A).filter(([,t])=>(t==null?void 0:t.training)==="Trained").sort(([t],[l])=>t.localeCompare(l)),S=Object.entries(h).filter(([t,l])=>F[parseInt(t)]&&Number(l)>0).map(([t,l])=>({name:F[parseInt(t)],uses:Number(l)})),w=Object.entries(h).filter(([t,l])=>B[parseInt(t)]&&Number(l)>0).map(([t,l])=>({name:B[parseInt(t)],uses:Number(l)})),z=Object.entries(h).filter(([t,l])=>$[parseInt(t)]&&Number(l)>0).map(([t,l])=>({name:$[parseInt(t)],value:Number(l)})),x=[];n!=null&&n.birth&&x.push({name:"Birth",value:n.birth}),(n==null?void 0:n.deaths)!=null&&x.push({name:"Deaths",value:a(n.deaths)}),Object.entries(h).forEach(([t,l])=>{const i=parseInt(t);U[i]&&x.push({name:U[i],value:l})});const y=[];Object.entries(h).forEach(([t,l])=>{const i=parseInt(t);D[i]&&y.push({name:D[i],value:q[Number(l)]||`Unknown (${l})`})});const b=[];Object.entries(h).forEach(([t,l])=>{const i=parseInt(t);W[i]&&Number(l)>0&&b.push({name:W[i],rank:Q(Number(l)),value:Number(l)})});const R=t=>({padding:"5px 8px",fontSize:12,fontWeight:"bold",color:"#fff",cursor:"pointer",userSelect:"none",borderTop:`2px solid ${t?d:u}`,borderLeft:`2px solid ${t?d:u}`,borderRight:`2px solid ${t?d:u}`,background:t?"rgba(0,100,0,0.4)":"transparent"}),M={background:"#000",border:`2px solid ${d}`,maxHeight:400,overflowY:"auto",overflowX:"hidden"},r={background:"#222",fontWeight:"bold",fontSize:12,padding:"2px 6px"},k={padding:"2px 6px",background:"rgba(0,100,0,0.4)",whiteSpace:"nowrap"},p={padding:"2px 6px",background:"rgba(0,0,100,0.4)",textAlign:"right",whiteSpace:"nowrap"},X={padding:"2px 6px",color:"#ccc"};return e.jsx(K,{id:c,title:`Character: ${g}`,zIndex:L,width:740,height:600,children:e.jsxs("div",{style:{background:u,color:"#fff",font:'14px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif',overflowY:"auto",padding:"10px 15px 15px",flex:1},children:[e.jsxs("div",{style:{marginBottom:10},children:[e.jsxs("h1",{style:{margin:"0 0 2px",fontSize:28,fontWeight:"bold"},children:[g,e.jsx("span",{style:{fontSize:"200%",color:"#fff27f",float:"right"},children:(n==null?void 0:n.level)||""})]}),e.jsx("div",{style:{fontSize:"85%",color:"gold"},children:[n==null?void 0:n.gender,n==null?void 0:n.race].filter(Boolean).join(" ")||"Awaiting character data..."})]}),e.jsxs("div",{style:{fontSize:"85%",margin:"6px 0 10px",display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0 20px"},children:[e.jsxs("div",{children:["Total XP: ",a(n==null?void 0:n.total_xp)]}),e.jsxs("div",{style:{textAlign:"right"},children:["Unassigned XP: ",a(n==null?void 0:n.unassigned_xp)]}),e.jsxs("div",{children:["Luminance: ",(n==null?void 0:n.luminance_earned)!=null?`${a(n.luminance_earned)} / ${a(n.luminance_total)}`:"—"]}),e.jsxs("div",{style:{textAlign:"right"},children:["Deaths: ",a(n==null?void 0:n.deaths)]})]}),e.jsxs("div",{style:{display:"flex",gap:13,flexWrap:"wrap"},children:[e.jsxs("div",{style:{width:320},children:[e.jsx("div",{style:{height:30,display:"flex"},children:["Attributes","Skills","Titles"].map((t,l)=>e.jsx("div",{style:R(j===l),onClick:()=>V(l),children:t},t))}),e.jsxs("div",{style:M,children:[j===0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{padding:"6px 8px",display:"flex",flexDirection:"column",gap:8,borderBottom:`2px solid ${d}`},children:[{label:"Health",pct:(s==null?void 0:s.health_percentage)??0,cur:s==null?void 0:s.health_current,max:s==null?void 0:s.health_max,bg:"#cc3333"},{label:"Stamina",pct:(s==null?void 0:s.stamina_percentage)??0,cur:s==null?void 0:s.stamina_current,max:s==null?void 0:s.stamina_max,bg:"#ccaa33"},{label:"Mana",pct:(s==null?void 0:s.mana_percentage)??0,cur:s==null?void 0:s.mana_current,max:s==null?void 0:s.mana_max,bg:"#3366cc"}].map(t=>e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[e.jsx("span",{style:{width:55,fontSize:12,color:"#ccc"},children:t.label}),e.jsx("div",{style:{flex:1,height:14,overflow:"hidden",position:"relative",border:`1px solid ${d}`},children:e.jsx("div",{style:{height:"100%",width:`${t.pct}%`,background:t.bg,transition:"width 0.5s ease"}})}),e.jsxs("span",{style:{width:80,textAlign:"right",fontSize:12,color:"#ccc"},children:[t.cur??"—"," / ",t.max??"—"]})]},t.label))}),e.jsxs("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("td",{style:r,children:"Attribute"}),e.jsx("td",{style:r,children:"Creation"}),e.jsx("td",{style:r,children:"Base"})]})}),e.jsx("tbody",{children:["strength","endurance","coordination","quickness","focus","self"].map(t=>{var l,i;return e.jsxs("tr",{children:[e.jsx("td",{style:k,children:t.charAt(0).toUpperCase()+t.slice(1)}),e.jsx("td",{style:X,children:((l=C[t])==null?void 0:l.creation)??"—"}),e.jsx("td",{style:p,children:((i=C[t])==null?void 0:i.base)??"—"})]},t)})})]}),e.jsxs("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("td",{style:r,children:"Vital"}),e.jsx("td",{style:r,children:"Base"})]})}),e.jsx("tbody",{children:["health","stamina","mana"].map(t=>{var l;return e.jsxs("tr",{children:[e.jsx("td",{style:k,children:t.charAt(0).toUpperCase()+t.slice(1)}),e.jsx("td",{style:p,children:((l=Y[t])==null?void 0:l.base)??"—"})]},t)})})]}),e.jsx("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:e.jsx("tbody",{children:e.jsxs("tr",{children:[e.jsx("td",{style:k,children:"Skill Credits"}),e.jsx("td",{style:p,children:a(o.skill_credits)})]})})})]}),j===1&&e.jsxs("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("td",{style:r,children:"Skill"}),e.jsx("td",{style:r,children:"Level"})]})}),e.jsxs("tbody",{children:[T.map(([t,l])=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px",background:"linear-gradient(to right, #392067, #392067, black)"},children:t.replace(/_/g," ").replace(/\b\w/g,i=>i.toUpperCase())}),e.jsx("td",{style:{...p,background:"linear-gradient(to right, #392067, #392067, black)"},children:l.base})]},t)),I.map(([t,l])=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px",background:"linear-gradient(to right, #0f3c3e, #0f3c3e, black)"},children:t.replace(/_/g," ").replace(/\b\w/g,i=>i.toUpperCase())}),e.jsx("td",{style:{...p,background:"linear-gradient(to right, #0f3c3e, #0f3c3e, black)"},children:l.base})]},t)),T.length===0&&I.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:2,style:{padding:10,color:"#666",fontStyle:"italic",textAlign:"center"},children:"No skill data"})})]})]}),j===2&&e.jsx("div",{style:{padding:"6px 10px",fontSize:13},children:E.length>0?E.map((t,l)=>e.jsx("div",{style:{padding:"1px 0"},children:t},l)):e.jsx("div",{style:{color:"#666",fontStyle:"italic",textAlign:"center",padding:10},children:"No titles"})})]})]}),e.jsxs("div",{style:{width:320},children:[e.jsx("div",{style:{height:30,display:"flex"},children:["Augmentations","Ratings","Other"].map((t,l)=>e.jsx("div",{style:R(m===l),onClick:()=>G(l),children:t},t))}),e.jsxs("div",{style:M,children:[m===0&&(S.length||w.length?e.jsxs(e.Fragment,{children:[S.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{background:"#222",padding:"4px 8px",fontWeight:"bold",fontSize:13,borderBottom:`1px solid ${d}`},children:"Augmentations"}),e.jsxs("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("td",{style:r,children:"Name"}),e.jsx("td",{style:r,children:"Uses"})]})}),e.jsx("tbody",{children:S.map(t=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px"},children:t.name}),e.jsx("td",{style:{padding:"2px 6px",textAlign:"right"},children:t.uses})]},t.name))})]})]}),w.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{background:"#222",padding:"4px 8px",fontWeight:"bold",fontSize:13,borderBottom:`1px solid ${d}`},children:"Auras"}),e.jsxs("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("td",{style:r,children:"Name"}),e.jsx("td",{style:r,children:"Uses"})]})}),e.jsx("tbody",{children:w.map(t=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px"},children:t.name}),e.jsx("td",{style:{padding:"2px 6px",textAlign:"right"},children:t.uses})]},t.name))})]})]})]}):e.jsx("div",{style:{color:"#666",fontStyle:"italic",textAlign:"center",padding:10},children:"No augmentation data"})),m===1&&(z.length>0?e.jsxs("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("td",{style:r,children:"Rating"}),e.jsx("td",{style:r,children:"Value"})]})}),e.jsx("tbody",{children:z.map(t=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px"},children:t.name}),e.jsx("td",{style:{padding:"2px 6px",textAlign:"right"},children:t.value})]},t.name))})]}):e.jsx("div",{style:{color:"#666",fontStyle:"italic",textAlign:"center",padding:10},children:"No rating data"})),m===2&&e.jsxs("div",{children:[x.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{background:"#222",padding:"4px 8px",fontWeight:"bold",fontSize:13,borderBottom:`1px solid ${d}`},children:"General"}),e.jsx("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:e.jsx("tbody",{children:x.map(t=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px"},children:t.name}),e.jsx("td",{style:{padding:"2px 6px",textAlign:"right"},children:t.value})]},t.name))})})]}),y.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{background:"#222",padding:"4px 8px",fontWeight:"bold",fontSize:13,borderBottom:`1px solid ${d}`},children:"Masteries"}),e.jsx("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:e.jsx("tbody",{children:y.map(t=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px"},children:t.name}),e.jsx("td",{style:{padding:"2px 6px",textAlign:"right"},children:t.value})]},t.name))})})]}),b.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{background:"#222",padding:"4px 8px",fontWeight:"bold",fontSize:13,borderBottom:`1px solid ${d}`},children:"Society"}),e.jsx("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:e.jsx("tbody",{children:b.map(t=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px"},children:t.name}),e.jsxs("td",{style:{padding:"2px 6px",textAlign:"right"},children:[t.rank," (",t.value,")"]})]},t.name))})})]}),x.length===0&&y.length===0&&b.length===0&&e.jsx("div",{style:{color:"#666",fontStyle:"italic",textAlign:"center",padding:10},children:"No additional data"})]})]})]})]}),(n==null?void 0:n.allegiance)&&e.jsxs("div",{style:{marginTop:5,border:`2px solid ${d}`,background:"#000"},children:[e.jsx("div",{style:{background:"#222",padding:"4px 8px",fontWeight:"bold",fontSize:13,borderBottom:`1px solid ${d}`},children:"Allegiance"}),e.jsx("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:e.jsxs("tbody",{children:[n.allegiance.name&&e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px",color:"#ccc",width:100},children:"Name"}),e.jsx("td",{style:{padding:"2px 6px"},children:n.allegiance.name})]}),((_=n.allegiance.monarch)==null?void 0:_.name)&&e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px",color:"#ccc"},children:"Monarch"}),e.jsx("td",{style:{padding:"2px 6px"},children:n.allegiance.monarch.name})]}),((N=n.allegiance.patron)==null?void 0:N.name)&&e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px",color:"#ccc"},children:"Patron"}),e.jsx("td",{style:{padding:"2px 6px"},children:n.allegiance.patron.name})]}),n.allegiance.rank!=null&&e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px",color:"#ccc"},children:"Rank"}),e.jsx("td",{style:{padding:"2px 6px"},children:n.allegiance.rank})]}),n.allegiance.followers!=null&&e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px",color:"#ccc"},children:"Followers"}),e.jsx("td",{style:{padding:"2px 6px"},children:n.allegiance.followers})]})]})})]})]})})};export{ee as CharacterWindow}; +import{r as f,a as J,j as e,D as K}from"./index-DtA97zvw.js";import"./react-yfL0ty4i.js";const F={218:"Reinforcement of the Lugians",219:"Bleeargh's Fortitude",220:"Oswald's Enhancement",221:"Siraluun's Blessing",222:"Enduring Calm",223:"Steadfast Will",224:"Ciandra's Essence",225:"Yoshi's Essence",226:"Jibril's Essence",227:"Celdiseth's Essence",228:"Koga's Essence",229:"Shadow of the Seventh Mule",230:"Might of the Seventh Mule",231:"Clutch of the Miser",232:"Enduring Enchantment",233:"Critical Protection",234:"Quick Learner",235:"Ciandra's Fortune",236:"Charmed Smith",237:"Innate Renewal",238:"Archmage's Endurance",239:"Enhancement of the Blade Turner",240:"Enhancement of the Arrow Turner",241:"Enhancement of the Mace Turner",242:"Caustic Enhancement",243:"Fierce Impaler",244:"Iron Skin of the Invincible",245:"Eye of the Remorseless",246:"Hand of the Remorseless",294:"Master of the Steel Circle",295:"Master of the Focused Eye",296:"Master of the Five Fold Path",297:"Frenzy of the Slayer",298:"Iron Skin of the Invincible",299:"Jack of All Trades",300:"Infused Void Magic",301:"Infused War Magic",302:"Infused Life Magic",309:"Infused Item Magic",310:"Infused Creature Magic",326:"Clutch of the Miser",328:"Enduring Enchantment"},B={333:"Valor / Destruction",334:"Protection",335:"Glory / Retribution",336:"Temperance / Hardening",338:"Aetheric Vision",339:"Mana Flow",340:"Mana Infusion",342:"Purity",343:"Craftsman",344:"Specialization",365:"World"},$={370:"Damage",371:"Damage Resistance",372:"Critical",373:"Critical Resistance",374:"Critical Damage",375:"Critical Damage Resistance",376:"Healing Boost",379:"Vitality"},W={287:"Celestial Hand",288:"Eldrytch Web",289:"Radiant Blood"},D={354:"Melee",355:"Ranged",362:"Summoning"},q={1:"Unarmed",2:"Swords",3:"Axes",4:"Maces",5:"Spears",6:"Daggers",7:"Staves",8:"Bows",9:"Crossbows",10:"Thrown",11:"Two-Handed",12:"Void",13:"War",14:"Life"},U={181:"Chess Rank",192:"Fishing Skill",199:"Total Augmentations",322:"Aetheria Slots",390:"Enlightenment"};function Q(c){return c>=1001?"Master":c>=301?"Lord":c>=151?"Knight":c>=31?"Adept":"Initiate"}const d="#af7a30",u="#000022",ee=({id:c,charName:g,zIndex:L,vitals:s,liveStats:O})=>{var _,N;const[H,P]=f.useState(null),[j,V]=f.useState(0),[m,G]=f.useState(0);f.useEffect(()=>{J(`/character-stats/${encodeURIComponent(g)}`).then(P).catch(()=>{})},[g]);const n=O||H,a=t=>t!=null?Number(t).toLocaleString():"—",o=(n==null?void 0:n.stats_data)||n||{},C=o.attributes||{},A=o.skills||{},Y=o.vitals||{},E=o.titles||[],h=o.properties||{},T=Object.entries(A).filter(([,t])=>(t==null?void 0:t.training)==="Specialized").sort(([t],[l])=>t.localeCompare(l)),I=Object.entries(A).filter(([,t])=>(t==null?void 0:t.training)==="Trained").sort(([t],[l])=>t.localeCompare(l)),S=Object.entries(h).filter(([t,l])=>F[parseInt(t)]&&Number(l)>0).map(([t,l])=>({name:F[parseInt(t)],uses:Number(l)})),w=Object.entries(h).filter(([t,l])=>B[parseInt(t)]&&Number(l)>0).map(([t,l])=>({name:B[parseInt(t)],uses:Number(l)})),z=Object.entries(h).filter(([t,l])=>$[parseInt(t)]&&Number(l)>0).map(([t,l])=>({name:$[parseInt(t)],value:Number(l)})),x=[];n!=null&&n.birth&&x.push({name:"Birth",value:n.birth}),(n==null?void 0:n.deaths)!=null&&x.push({name:"Deaths",value:a(n.deaths)}),Object.entries(h).forEach(([t,l])=>{const i=parseInt(t);U[i]&&x.push({name:U[i],value:l})});const y=[];Object.entries(h).forEach(([t,l])=>{const i=parseInt(t);D[i]&&y.push({name:D[i],value:q[Number(l)]||`Unknown (${l})`})});const b=[];Object.entries(h).forEach(([t,l])=>{const i=parseInt(t);W[i]&&Number(l)>0&&b.push({name:W[i],rank:Q(Number(l)),value:Number(l)})});const R=t=>({padding:"5px 8px",fontSize:12,fontWeight:"bold",color:"#fff",cursor:"pointer",userSelect:"none",borderTop:`2px solid ${t?d:u}`,borderLeft:`2px solid ${t?d:u}`,borderRight:`2px solid ${t?d:u}`,background:t?"rgba(0,100,0,0.4)":"transparent"}),M={background:"#000",border:`2px solid ${d}`,maxHeight:400,overflowY:"auto",overflowX:"hidden"},r={background:"#222",fontWeight:"bold",fontSize:12,padding:"2px 6px"},k={padding:"2px 6px",background:"rgba(0,100,0,0.4)",whiteSpace:"nowrap"},p={padding:"2px 6px",background:"rgba(0,0,100,0.4)",textAlign:"right",whiteSpace:"nowrap"},X={padding:"2px 6px",color:"#ccc"};return e.jsx(K,{id:c,title:`Character: ${g}`,zIndex:L,width:740,height:600,children:e.jsxs("div",{style:{background:u,color:"#fff",font:'14px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif',overflowY:"auto",padding:"10px 15px 15px",flex:1},children:[e.jsxs("div",{style:{marginBottom:10},children:[e.jsxs("h1",{style:{margin:"0 0 2px",fontSize:28,fontWeight:"bold"},children:[g,e.jsx("span",{style:{fontSize:"200%",color:"#fff27f",float:"right"},children:(n==null?void 0:n.level)||""})]}),e.jsx("div",{style:{fontSize:"85%",color:"gold"},children:[n==null?void 0:n.gender,n==null?void 0:n.race].filter(Boolean).join(" ")||"Awaiting character data..."})]}),e.jsxs("div",{style:{fontSize:"85%",margin:"6px 0 10px",display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0 20px"},children:[e.jsxs("div",{children:["Total XP: ",a(n==null?void 0:n.total_xp)]}),e.jsxs("div",{style:{textAlign:"right"},children:["Unassigned XP: ",a(n==null?void 0:n.unassigned_xp)]}),e.jsxs("div",{children:["Luminance: ",(n==null?void 0:n.luminance_earned)!=null?`${a(n.luminance_earned)} / ${a(n.luminance_total)}`:"—"]}),e.jsxs("div",{style:{textAlign:"right"},children:["Deaths: ",a(n==null?void 0:n.deaths)]})]}),e.jsxs("div",{style:{display:"flex",gap:13,flexWrap:"wrap"},children:[e.jsxs("div",{style:{width:320},children:[e.jsx("div",{style:{height:30,display:"flex"},children:["Attributes","Skills","Titles"].map((t,l)=>e.jsx("div",{style:R(j===l),onClick:()=>V(l),children:t},t))}),e.jsxs("div",{style:M,children:[j===0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{padding:"6px 8px",display:"flex",flexDirection:"column",gap:8,borderBottom:`2px solid ${d}`},children:[{label:"Health",pct:(s==null?void 0:s.health_percentage)??0,cur:s==null?void 0:s.health_current,max:s==null?void 0:s.health_max,bg:"#cc3333"},{label:"Stamina",pct:(s==null?void 0:s.stamina_percentage)??0,cur:s==null?void 0:s.stamina_current,max:s==null?void 0:s.stamina_max,bg:"#ccaa33"},{label:"Mana",pct:(s==null?void 0:s.mana_percentage)??0,cur:s==null?void 0:s.mana_current,max:s==null?void 0:s.mana_max,bg:"#3366cc"}].map(t=>e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[e.jsx("span",{style:{width:55,fontSize:12,color:"#ccc"},children:t.label}),e.jsx("div",{style:{flex:1,height:14,overflow:"hidden",position:"relative",border:`1px solid ${d}`},children:e.jsx("div",{style:{height:"100%",width:`${t.pct}%`,background:t.bg,transition:"width 0.5s ease"}})}),e.jsxs("span",{style:{width:80,textAlign:"right",fontSize:12,color:"#ccc"},children:[t.cur??"—"," / ",t.max??"—"]})]},t.label))}),e.jsxs("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("td",{style:r,children:"Attribute"}),e.jsx("td",{style:r,children:"Creation"}),e.jsx("td",{style:r,children:"Base"})]})}),e.jsx("tbody",{children:["strength","endurance","coordination","quickness","focus","self"].map(t=>{var l,i;return e.jsxs("tr",{children:[e.jsx("td",{style:k,children:t.charAt(0).toUpperCase()+t.slice(1)}),e.jsx("td",{style:X,children:((l=C[t])==null?void 0:l.creation)??"—"}),e.jsx("td",{style:p,children:((i=C[t])==null?void 0:i.base)??"—"})]},t)})})]}),e.jsxs("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("td",{style:r,children:"Vital"}),e.jsx("td",{style:r,children:"Base"})]})}),e.jsx("tbody",{children:["health","stamina","mana"].map(t=>{var l;return e.jsxs("tr",{children:[e.jsx("td",{style:k,children:t.charAt(0).toUpperCase()+t.slice(1)}),e.jsx("td",{style:p,children:((l=Y[t])==null?void 0:l.base)??"—"})]},t)})})]}),e.jsx("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:e.jsx("tbody",{children:e.jsxs("tr",{children:[e.jsx("td",{style:k,children:"Skill Credits"}),e.jsx("td",{style:p,children:a(o.skill_credits)})]})})})]}),j===1&&e.jsxs("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("td",{style:r,children:"Skill"}),e.jsx("td",{style:r,children:"Level"})]})}),e.jsxs("tbody",{children:[T.map(([t,l])=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px",background:"linear-gradient(to right, #392067, #392067, black)"},children:t.replace(/_/g," ").replace(/\b\w/g,i=>i.toUpperCase())}),e.jsx("td",{style:{...p,background:"linear-gradient(to right, #392067, #392067, black)"},children:l.base})]},t)),I.map(([t,l])=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px",background:"linear-gradient(to right, #0f3c3e, #0f3c3e, black)"},children:t.replace(/_/g," ").replace(/\b\w/g,i=>i.toUpperCase())}),e.jsx("td",{style:{...p,background:"linear-gradient(to right, #0f3c3e, #0f3c3e, black)"},children:l.base})]},t)),T.length===0&&I.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:2,style:{padding:10,color:"#666",fontStyle:"italic",textAlign:"center"},children:"No skill data"})})]})]}),j===2&&e.jsx("div",{style:{padding:"6px 10px",fontSize:13},children:E.length>0?E.map((t,l)=>e.jsx("div",{style:{padding:"1px 0"},children:t},l)):e.jsx("div",{style:{color:"#666",fontStyle:"italic",textAlign:"center",padding:10},children:"No titles"})})]})]}),e.jsxs("div",{style:{width:320},children:[e.jsx("div",{style:{height:30,display:"flex"},children:["Augmentations","Ratings","Other"].map((t,l)=>e.jsx("div",{style:R(m===l),onClick:()=>G(l),children:t},t))}),e.jsxs("div",{style:M,children:[m===0&&(S.length||w.length?e.jsxs(e.Fragment,{children:[S.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{background:"#222",padding:"4px 8px",fontWeight:"bold",fontSize:13,borderBottom:`1px solid ${d}`},children:"Augmentations"}),e.jsxs("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("td",{style:r,children:"Name"}),e.jsx("td",{style:r,children:"Uses"})]})}),e.jsx("tbody",{children:S.map(t=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px"},children:t.name}),e.jsx("td",{style:{padding:"2px 6px",textAlign:"right"},children:t.uses})]},t.name))})]})]}),w.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{background:"#222",padding:"4px 8px",fontWeight:"bold",fontSize:13,borderBottom:`1px solid ${d}`},children:"Auras"}),e.jsxs("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("td",{style:r,children:"Name"}),e.jsx("td",{style:r,children:"Uses"})]})}),e.jsx("tbody",{children:w.map(t=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px"},children:t.name}),e.jsx("td",{style:{padding:"2px 6px",textAlign:"right"},children:t.uses})]},t.name))})]})]})]}):e.jsx("div",{style:{color:"#666",fontStyle:"italic",textAlign:"center",padding:10},children:"No augmentation data"})),m===1&&(z.length>0?e.jsxs("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("td",{style:r,children:"Rating"}),e.jsx("td",{style:r,children:"Value"})]})}),e.jsx("tbody",{children:z.map(t=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px"},children:t.name}),e.jsx("td",{style:{padding:"2px 6px",textAlign:"right"},children:t.value})]},t.name))})]}):e.jsx("div",{style:{color:"#666",fontStyle:"italic",textAlign:"center",padding:10},children:"No rating data"})),m===2&&e.jsxs("div",{children:[x.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{background:"#222",padding:"4px 8px",fontWeight:"bold",fontSize:13,borderBottom:`1px solid ${d}`},children:"General"}),e.jsx("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:e.jsx("tbody",{children:x.map(t=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px"},children:t.name}),e.jsx("td",{style:{padding:"2px 6px",textAlign:"right"},children:t.value})]},t.name))})})]}),y.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{background:"#222",padding:"4px 8px",fontWeight:"bold",fontSize:13,borderBottom:`1px solid ${d}`},children:"Masteries"}),e.jsx("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:e.jsx("tbody",{children:y.map(t=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px"},children:t.name}),e.jsx("td",{style:{padding:"2px 6px",textAlign:"right"},children:t.value})]},t.name))})})]}),b.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{background:"#222",padding:"4px 8px",fontWeight:"bold",fontSize:13,borderBottom:`1px solid ${d}`},children:"Society"}),e.jsx("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:e.jsx("tbody",{children:b.map(t=>e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px"},children:t.name}),e.jsxs("td",{style:{padding:"2px 6px",textAlign:"right"},children:[t.rank," (",t.value,")"]})]},t.name))})})]}),x.length===0&&y.length===0&&b.length===0&&e.jsx("div",{style:{color:"#666",fontStyle:"italic",textAlign:"center",padding:10},children:"No additional data"})]})]})]})]}),(n==null?void 0:n.allegiance)&&e.jsxs("div",{style:{marginTop:5,border:`2px solid ${d}`,background:"#000"},children:[e.jsx("div",{style:{background:"#222",padding:"4px 8px",fontWeight:"bold",fontSize:13,borderBottom:`1px solid ${d}`},children:"Allegiance"}),e.jsx("table",{style:{width:"100%",fontSize:13,borderCollapse:"collapse"},children:e.jsxs("tbody",{children:[n.allegiance.name&&e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px",color:"#ccc",width:100},children:"Name"}),e.jsx("td",{style:{padding:"2px 6px"},children:n.allegiance.name})]}),((_=n.allegiance.monarch)==null?void 0:_.name)&&e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px",color:"#ccc"},children:"Monarch"}),e.jsx("td",{style:{padding:"2px 6px"},children:n.allegiance.monarch.name})]}),((N=n.allegiance.patron)==null?void 0:N.name)&&e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px",color:"#ccc"},children:"Patron"}),e.jsx("td",{style:{padding:"2px 6px"},children:n.allegiance.patron.name})]}),n.allegiance.rank!=null&&e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px",color:"#ccc"},children:"Rank"}),e.jsx("td",{style:{padding:"2px 6px"},children:n.allegiance.rank})]}),n.allegiance.followers!=null&&e.jsxs("tr",{children:[e.jsx("td",{style:{padding:"2px 6px",color:"#ccc"},children:"Followers"}),e.jsx("td",{style:{padding:"2px 6px"},children:n.allegiance.followers})]})]})})]})]})})};export{ee as CharacterWindow}; diff --git a/static/assets/CombatPickerWindow-d0qw-27F.js b/static/assets/CombatPickerWindow-DqQoZIr1.js similarity index 92% rename from static/assets/CombatPickerWindow-d0qw-27F.js rename to static/assets/CombatPickerWindow-DqQoZIr1.js index 724da9e0..4a815ade 100644 --- a/static/assets/CombatPickerWindow-d0qw-27F.js +++ b/static/assets/CombatPickerWindow-DqQoZIr1.js @@ -1 +1 @@ -import{u as c,j as r,D as d}from"./index-DlaI7zTK.js";import"./react-yfL0ty4i.js";const p=({id:n,zIndex:i,characters:a})=>{const{openWindow:s}=c(),e=Array.from(a.keys()).sort();return r.jsx(d,{id:n,title:"Combat Stats — Select Character",zIndex:i,width:300,height:400,children:r.jsx("div",{style:{flex:1,overflowY:"auto",padding:6},children:e.length===0?r.jsx("div",{style:{padding:12,color:"#666",textAlign:"center",fontSize:"0.8rem"},children:"No characters online"}):e.map(o=>r.jsx("div",{style:{padding:"5px 8px",cursor:"pointer",borderBottom:"1px solid #222",color:"#ccc",fontSize:"0.82rem"},onMouseEnter:t=>t.currentTarget.style.background="#2a2a2a",onMouseLeave:t=>t.currentTarget.style.background="",onClick:()=>s(`combat-${o}`,`Combat: ${o}`,o),children:o},o))})})};export{p as CombatPickerWindow}; +import{u as c,j as r,D as d}from"./index-DtA97zvw.js";import"./react-yfL0ty4i.js";const p=({id:n,zIndex:i,characters:a})=>{const{openWindow:s}=c(),e=Array.from(a.keys()).sort();return r.jsx(d,{id:n,title:"Combat Stats — Select Character",zIndex:i,width:300,height:400,children:r.jsx("div",{style:{flex:1,overflowY:"auto",padding:6},children:e.length===0?r.jsx("div",{style:{padding:12,color:"#666",textAlign:"center",fontSize:"0.8rem"},children:"No characters online"}):e.map(o=>r.jsx("div",{style:{padding:"5px 8px",cursor:"pointer",borderBottom:"1px solid #222",color:"#ccc",fontSize:"0.82rem"},onMouseEnter:t=>t.currentTarget.style.background="#2a2a2a",onMouseLeave:t=>t.currentTarget.style.background="",onClick:()=>s(`combat-${o}`,`Combat: ${o}`,o),children:o},o))})})};export{p as CombatPickerWindow}; diff --git a/static/assets/CombatStatsWindow-DXMZxNVt.js b/static/assets/CombatStatsWindow-CL4bPDdu.js similarity index 99% rename from static/assets/CombatStatsWindow-DXMZxNVt.js rename to static/assets/CombatStatsWindow-CL4bPDdu.js index f991e6cd..98c79941 100644 --- a/static/assets/CombatStatsWindow-DXMZxNVt.js +++ b/static/assets/CombatStatsWindow-CL4bPDdu.js @@ -1 +1 @@ -import{r as A,a as B,j as t,D as L}from"./index-DlaI7zTK.js";import"./react-yfL0ty4i.js";const w=["Typeless","Slash","Pierce","Bludgeon","Fire","Cold","Acid","Electric"];function _(c,a,x){var o,m,f,k;return(((m=(o=c==null?void 0:c[a])==null?void 0:o[x])==null?void 0:m.total_normal_damage)??0)+(((k=(f=c==null?void 0:c[a])==null?void 0:f[x])==null?void 0:k.total_crit_damage)??0)}function G(c){let a={attacks:0,failed:0,crits:0,normalDmg:0,maxNormal:0,critDmg:0,maxCrit:0};if(!c)return a;for(const x of Object.values(c))for(const o of Object.values(x))a.attacks+=o.total_attacks??0,a.failed+=o.failed_attacks??0,a.crits+=o.crits??0,a.normalDmg+=o.total_normal_damage??0,a.maxNormal=Math.max(a.maxNormal,o.max_normal_damage??0),a.critDmg+=o.total_crit_damage??0,a.maxCrit=Math.max(a.maxCrit,o.max_crit_damage??0);return a}function F(c,a){let x={attacks:0,failed:0};const o=c==null?void 0:c[a];if(!o)return x;for(const m of Object.values(o))x.attacks+=m.total_attacks??0,x.failed+=m.failed_attacks??0;return x}const Y=({id:c,charName:a,zIndex:x})=>{const[o,m]=A.useState(null),[f,k]=A.useState("session"),[h,R]=A.useState(null);A.useEffect(()=>{B(`/combat-stats/${encodeURIComponent(a)}`).then(m).catch(()=>{});const e=setInterval(()=>{B(`/combat-stats/${encodeURIComponent(a)}`).then(m).catch(()=>{})},1e4);return()=>clearInterval(e)},[a]);const p=o==null?void 0:o[f],j=(p==null?void 0:p.monsters)??{},S=Object.keys(j).filter(e=>e!=="__cloak_surges__").sort(),n=A.useMemo(()=>{let e={},l={},v=0,$=0;const T=h?[j[h]].filter(Boolean):S.map(u=>j[u]);for(const u of T)if(u){for(const[g,D]of Object.entries(u.offense??{})){e[g]||(e[g]={});for(const[y,E]of Object.entries(D)){e[g][y]||(e[g][y]={total_attacks:0,failed_attacks:0,crits:0,total_normal_damage:0,max_normal_damage:0,total_crit_damage:0,max_crit_damage:0});const i=e[g][y],d=E;i.total_attacks+=d.total_attacks??0,i.failed_attacks+=d.failed_attacks??0,i.crits+=d.crits??0,i.total_normal_damage+=d.total_normal_damage??0,i.max_normal_damage=Math.max(i.max_normal_damage,d.max_normal_damage??0),i.total_crit_damage+=d.total_crit_damage??0,i.max_crit_damage=Math.max(i.max_crit_damage,d.max_crit_damage??0)}}for(const[g,D]of Object.entries(u.defense??{})){l[g]||(l[g]={});for(const[y,E]of Object.entries(D)){l[g][y]||(l[g][y]={total_attacks:0,failed_attacks:0,crits:0,total_normal_damage:0,max_normal_damage:0,total_crit_damage:0,max_crit_damage:0});const i=l[g][y],d=E;i.total_attacks+=d.total_attacks??0,i.failed_attacks+=d.failed_attacks??0,i.total_normal_damage+=d.total_normal_damage??0,i.max_normal_damage=Math.max(i.max_normal_damage,d.max_normal_damage??0),i.total_crit_damage+=d.total_crit_damage??0,i.max_crit_damage=Math.max(i.max_crit_damage,d.max_crit_damage??0)}}v+=u.aetheria_surges??0,$+=u.cloak_surges??0}return j.__cloak_surges__&&!h&&($+=j.__cloak_surges__.cloak_surges??0),{offense:e,defense:l,aeth:v,cloak:$}},[j,S,h]),r=G(n.offense),b=F(n.defense,"MeleeMissile"),M=F(n.defense,"Magic");r.attacks>0&&((r.attacks-r.failed)/r.attacks*100).toFixed(0);const N=b.attacks>0?(b.failed/b.attacks*100).toFixed(0):"0",W=M.attacks>0?(M.failed/M.attacks*100).toFixed(0):"0",C=r.attacks-r.failed,O=C-r.crits,z=O>0?Math.round(r.normalDmg/O):0;r.crits>0&&Math.round(r.critDmg/r.crits);const I=C>0?(r.crits/C*100).toFixed(1):"0",s=e=>e===0?"":e.toLocaleString();return t.jsxs(L,{id:c,title:`Combat: ${a}`,zIndex:x,width:640,height:520,children:[t.jsxs("div",{style:{display:"flex",gap:4,padding:"4px 8px",borderBottom:"1px solid #333",alignItems:"center"},children:[t.jsx("button",{className:`ml-stats-range-btn ${f==="session"?"active":""}`,onClick:()=>k("session"),children:"Session"}),t.jsx("button",{className:`ml-stats-range-btn ${f==="lifetime"?"active":""}`,onClick:()=>k("lifetime"),children:"Lifetime"}),t.jsx("div",{style:{flex:1}}),f==="session"&&t.jsx("button",{style:{fontSize:"0.6rem",padding:"2px 8px",background:"rgba(204,68,68,0.15)",color:"#c66",border:"1px solid rgba(204,68,68,0.3)",borderRadius:3,cursor:"pointer"},onClick:()=>{confirm("Clear current session stats?")&&m(e=>e&&{...e,session:{total_damage_given:0,total_damage_received:0,total_kills:0,total_aetheria_surges:0,total_cloak_surges:0,monsters:{}}})},children:"Clear Session"})]}),t.jsxs("div",{style:{display:"flex",flex:1,overflow:"hidden"},children:[t.jsxs("div",{style:{width:240,borderRight:"1px solid #333",overflowY:"auto",fontSize:"0.72rem"},children:[t.jsxs("div",{style:{display:"flex",padding:"3px 6px",borderBottom:"1px solid #333",color:"#777",fontSize:"0.65rem",fontWeight:600},children:[t.jsx("span",{style:{width:14}}),t.jsx("span",{style:{flex:1},children:"Monster"}),t.jsx("span",{style:{width:40,textAlign:"right"},children:"Kills"}),t.jsx("span",{style:{width:55,textAlign:"right"},children:"Dmg"})]}),t.jsxs("div",{style:{display:"flex",padding:"3px 6px",cursor:"pointer",background:h===null?"#2a3a4a":"",borderBottom:"1px solid #222",color:"#ddd"},onClick:()=>R(null),children:[t.jsx("span",{style:{width:14,color:"#888"},children:h===null?"*":""}),t.jsx("span",{style:{flex:1},children:"All"}),t.jsx("span",{style:{width:40,textAlign:"right"},children:s((p==null?void 0:p.total_kills)??0)}),t.jsx("span",{style:{width:55,textAlign:"right"},children:s((p==null?void 0:p.total_damage_given)??0)})]}),S.map(e=>{const l=j[e];return t.jsxs("div",{style:{display:"flex",padding:"2px 6px",cursor:"pointer",background:h===e?"#2a3a4a":"",borderBottom:"1px solid #1a1a1a",color:"#ccc"},onClick:()=>R(e),children:[t.jsx("span",{style:{width:14,color:"#888"},children:h===e?"*":""}),t.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e}),t.jsx("span",{style:{width:40,textAlign:"right"},children:s(l.kill_count)}),t.jsx("span",{style:{width:55,textAlign:"right"},children:s(l.damage_given)})]},e)})]}),t.jsx("div",{style:{flex:1,overflowY:"auto",padding:6,fontSize:"0.72rem"},children:t.jsxs("table",{style:{width:"100%",borderCollapse:"collapse"},children:[t.jsx("thead",{children:t.jsxs("tr",{style:{color:"#777",fontSize:"0.65rem"},children:[t.jsx("th",{style:{textAlign:"left",padding:"1px 4px"}}),t.jsx("th",{style:{textAlign:"right",padding:"1px 3px"},children:"Given M/M"}),t.jsx("th",{style:{textAlign:"right",padding:"1px 3px"},children:"Given Mag"}),t.jsx("th",{style:{width:4}}),t.jsx("th",{style:{textAlign:"right",padding:"1px 3px"},children:"Recv M/M"}),t.jsx("th",{style:{textAlign:"right",padding:"1px 3px"},children:"Recv Mag"}),t.jsx("th",{style:{width:4}}),t.jsx("th",{style:{textAlign:"left",padding:"1px 3px"},children:"Stats"}),t.jsx("th",{style:{textAlign:"right",padding:"1px 3px"}})]})}),t.jsxs("tbody",{children:[w.map((e,l)=>{const v=[["Evades",b.attacks>0?`${s(b.attacks)} (${N}%)`:""],["Resists",M.attacks>0?`${s(M.attacks)} (${W}%)`:""],["A.Surges",n.aeth>0?`${s(n.aeth)}`:""],["C.Surges",n.cloak>0?`${s(n.cloak)}`:""],["",""],["",""],["Av/Mx",z>0?`${s(z)} / ${s(r.maxNormal)}`:""],["Crits",r.crits>0?`${s(r.crits)} (${I}%)`:""]][l]??["",""];return t.jsxs("tr",{children:[t.jsx("td",{style:{padding:"1px 4px",color:"#888"},children:e}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(_(n.offense,"MeleeMissile",e))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(_(n.offense,"Magic",e))}),t.jsx("td",{}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(_(n.defense,"MeleeMissile",e))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(_(n.defense,"Magic",e))}),t.jsx("td",{}),t.jsx("td",{style:{padding:"1px 3px",color:"#777",fontWeight:600,fontSize:"0.65rem"},children:v[0]}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:v[1]})]},e)}),t.jsx("tr",{children:t.jsx("td",{colSpan:9,style:{height:4}})}),t.jsxs("tr",{children:[t.jsx("td",{style:{padding:"1px 4px",color:"#888",fontWeight:600},children:"Total"}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+_(n.offense,"MeleeMissile",l),0))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+_(n.offense,"Magic",l),0))}),t.jsx("td",{}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+_(n.defense,"MeleeMissile",l),0))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+_(n.defense,"Magic",l),0))}),t.jsx("td",{}),t.jsx("td",{style:{padding:"1px 3px",color:"#777",fontWeight:600,fontSize:"0.65rem"},children:"Total"}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(r.normalDmg+r.critDmg)})]})]})]})})]})]})};export{Y as CombatStatsWindow}; +import{r as A,a as B,j as t,D as L}from"./index-DtA97zvw.js";import"./react-yfL0ty4i.js";const w=["Typeless","Slash","Pierce","Bludgeon","Fire","Cold","Acid","Electric"];function _(c,a,x){var o,m,f,k;return(((m=(o=c==null?void 0:c[a])==null?void 0:o[x])==null?void 0:m.total_normal_damage)??0)+(((k=(f=c==null?void 0:c[a])==null?void 0:f[x])==null?void 0:k.total_crit_damage)??0)}function G(c){let a={attacks:0,failed:0,crits:0,normalDmg:0,maxNormal:0,critDmg:0,maxCrit:0};if(!c)return a;for(const x of Object.values(c))for(const o of Object.values(x))a.attacks+=o.total_attacks??0,a.failed+=o.failed_attacks??0,a.crits+=o.crits??0,a.normalDmg+=o.total_normal_damage??0,a.maxNormal=Math.max(a.maxNormal,o.max_normal_damage??0),a.critDmg+=o.total_crit_damage??0,a.maxCrit=Math.max(a.maxCrit,o.max_crit_damage??0);return a}function F(c,a){let x={attacks:0,failed:0};const o=c==null?void 0:c[a];if(!o)return x;for(const m of Object.values(o))x.attacks+=m.total_attacks??0,x.failed+=m.failed_attacks??0;return x}const Y=({id:c,charName:a,zIndex:x})=>{const[o,m]=A.useState(null),[f,k]=A.useState("session"),[h,R]=A.useState(null);A.useEffect(()=>{B(`/combat-stats/${encodeURIComponent(a)}`).then(m).catch(()=>{});const e=setInterval(()=>{B(`/combat-stats/${encodeURIComponent(a)}`).then(m).catch(()=>{})},1e4);return()=>clearInterval(e)},[a]);const p=o==null?void 0:o[f],j=(p==null?void 0:p.monsters)??{},S=Object.keys(j).filter(e=>e!=="__cloak_surges__").sort(),n=A.useMemo(()=>{let e={},l={},v=0,$=0;const T=h?[j[h]].filter(Boolean):S.map(u=>j[u]);for(const u of T)if(u){for(const[g,D]of Object.entries(u.offense??{})){e[g]||(e[g]={});for(const[y,E]of Object.entries(D)){e[g][y]||(e[g][y]={total_attacks:0,failed_attacks:0,crits:0,total_normal_damage:0,max_normal_damage:0,total_crit_damage:0,max_crit_damage:0});const i=e[g][y],d=E;i.total_attacks+=d.total_attacks??0,i.failed_attacks+=d.failed_attacks??0,i.crits+=d.crits??0,i.total_normal_damage+=d.total_normal_damage??0,i.max_normal_damage=Math.max(i.max_normal_damage,d.max_normal_damage??0),i.total_crit_damage+=d.total_crit_damage??0,i.max_crit_damage=Math.max(i.max_crit_damage,d.max_crit_damage??0)}}for(const[g,D]of Object.entries(u.defense??{})){l[g]||(l[g]={});for(const[y,E]of Object.entries(D)){l[g][y]||(l[g][y]={total_attacks:0,failed_attacks:0,crits:0,total_normal_damage:0,max_normal_damage:0,total_crit_damage:0,max_crit_damage:0});const i=l[g][y],d=E;i.total_attacks+=d.total_attacks??0,i.failed_attacks+=d.failed_attacks??0,i.total_normal_damage+=d.total_normal_damage??0,i.max_normal_damage=Math.max(i.max_normal_damage,d.max_normal_damage??0),i.total_crit_damage+=d.total_crit_damage??0,i.max_crit_damage=Math.max(i.max_crit_damage,d.max_crit_damage??0)}}v+=u.aetheria_surges??0,$+=u.cloak_surges??0}return j.__cloak_surges__&&!h&&($+=j.__cloak_surges__.cloak_surges??0),{offense:e,defense:l,aeth:v,cloak:$}},[j,S,h]),r=G(n.offense),b=F(n.defense,"MeleeMissile"),M=F(n.defense,"Magic");r.attacks>0&&((r.attacks-r.failed)/r.attacks*100).toFixed(0);const N=b.attacks>0?(b.failed/b.attacks*100).toFixed(0):"0",W=M.attacks>0?(M.failed/M.attacks*100).toFixed(0):"0",C=r.attacks-r.failed,O=C-r.crits,z=O>0?Math.round(r.normalDmg/O):0;r.crits>0&&Math.round(r.critDmg/r.crits);const I=C>0?(r.crits/C*100).toFixed(1):"0",s=e=>e===0?"":e.toLocaleString();return t.jsxs(L,{id:c,title:`Combat: ${a}`,zIndex:x,width:640,height:520,children:[t.jsxs("div",{style:{display:"flex",gap:4,padding:"4px 8px",borderBottom:"1px solid #333",alignItems:"center"},children:[t.jsx("button",{className:`ml-stats-range-btn ${f==="session"?"active":""}`,onClick:()=>k("session"),children:"Session"}),t.jsx("button",{className:`ml-stats-range-btn ${f==="lifetime"?"active":""}`,onClick:()=>k("lifetime"),children:"Lifetime"}),t.jsx("div",{style:{flex:1}}),f==="session"&&t.jsx("button",{style:{fontSize:"0.6rem",padding:"2px 8px",background:"rgba(204,68,68,0.15)",color:"#c66",border:"1px solid rgba(204,68,68,0.3)",borderRadius:3,cursor:"pointer"},onClick:()=>{confirm("Clear current session stats?")&&m(e=>e&&{...e,session:{total_damage_given:0,total_damage_received:0,total_kills:0,total_aetheria_surges:0,total_cloak_surges:0,monsters:{}}})},children:"Clear Session"})]}),t.jsxs("div",{style:{display:"flex",flex:1,overflow:"hidden"},children:[t.jsxs("div",{style:{width:240,borderRight:"1px solid #333",overflowY:"auto",fontSize:"0.72rem"},children:[t.jsxs("div",{style:{display:"flex",padding:"3px 6px",borderBottom:"1px solid #333",color:"#777",fontSize:"0.65rem",fontWeight:600},children:[t.jsx("span",{style:{width:14}}),t.jsx("span",{style:{flex:1},children:"Monster"}),t.jsx("span",{style:{width:40,textAlign:"right"},children:"Kills"}),t.jsx("span",{style:{width:55,textAlign:"right"},children:"Dmg"})]}),t.jsxs("div",{style:{display:"flex",padding:"3px 6px",cursor:"pointer",background:h===null?"#2a3a4a":"",borderBottom:"1px solid #222",color:"#ddd"},onClick:()=>R(null),children:[t.jsx("span",{style:{width:14,color:"#888"},children:h===null?"*":""}),t.jsx("span",{style:{flex:1},children:"All"}),t.jsx("span",{style:{width:40,textAlign:"right"},children:s((p==null?void 0:p.total_kills)??0)}),t.jsx("span",{style:{width:55,textAlign:"right"},children:s((p==null?void 0:p.total_damage_given)??0)})]}),S.map(e=>{const l=j[e];return t.jsxs("div",{style:{display:"flex",padding:"2px 6px",cursor:"pointer",background:h===e?"#2a3a4a":"",borderBottom:"1px solid #1a1a1a",color:"#ccc"},onClick:()=>R(e),children:[t.jsx("span",{style:{width:14,color:"#888"},children:h===e?"*":""}),t.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e}),t.jsx("span",{style:{width:40,textAlign:"right"},children:s(l.kill_count)}),t.jsx("span",{style:{width:55,textAlign:"right"},children:s(l.damage_given)})]},e)})]}),t.jsx("div",{style:{flex:1,overflowY:"auto",padding:6,fontSize:"0.72rem"},children:t.jsxs("table",{style:{width:"100%",borderCollapse:"collapse"},children:[t.jsx("thead",{children:t.jsxs("tr",{style:{color:"#777",fontSize:"0.65rem"},children:[t.jsx("th",{style:{textAlign:"left",padding:"1px 4px"}}),t.jsx("th",{style:{textAlign:"right",padding:"1px 3px"},children:"Given M/M"}),t.jsx("th",{style:{textAlign:"right",padding:"1px 3px"},children:"Given Mag"}),t.jsx("th",{style:{width:4}}),t.jsx("th",{style:{textAlign:"right",padding:"1px 3px"},children:"Recv M/M"}),t.jsx("th",{style:{textAlign:"right",padding:"1px 3px"},children:"Recv Mag"}),t.jsx("th",{style:{width:4}}),t.jsx("th",{style:{textAlign:"left",padding:"1px 3px"},children:"Stats"}),t.jsx("th",{style:{textAlign:"right",padding:"1px 3px"}})]})}),t.jsxs("tbody",{children:[w.map((e,l)=>{const v=[["Evades",b.attacks>0?`${s(b.attacks)} (${N}%)`:""],["Resists",M.attacks>0?`${s(M.attacks)} (${W}%)`:""],["A.Surges",n.aeth>0?`${s(n.aeth)}`:""],["C.Surges",n.cloak>0?`${s(n.cloak)}`:""],["",""],["",""],["Av/Mx",z>0?`${s(z)} / ${s(r.maxNormal)}`:""],["Crits",r.crits>0?`${s(r.crits)} (${I}%)`:""]][l]??["",""];return t.jsxs("tr",{children:[t.jsx("td",{style:{padding:"1px 4px",color:"#888"},children:e}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(_(n.offense,"MeleeMissile",e))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(_(n.offense,"Magic",e))}),t.jsx("td",{}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(_(n.defense,"MeleeMissile",e))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(_(n.defense,"Magic",e))}),t.jsx("td",{}),t.jsx("td",{style:{padding:"1px 3px",color:"#777",fontWeight:600,fontSize:"0.65rem"},children:v[0]}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:v[1]})]},e)}),t.jsx("tr",{children:t.jsx("td",{colSpan:9,style:{height:4}})}),t.jsxs("tr",{children:[t.jsx("td",{style:{padding:"1px 4px",color:"#888",fontWeight:600},children:"Total"}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+_(n.offense,"MeleeMissile",l),0))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+_(n.offense,"Magic",l),0))}),t.jsx("td",{}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+_(n.defense,"MeleeMissile",l),0))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+_(n.defense,"Magic",l),0))}),t.jsx("td",{}),t.jsx("td",{style:{padding:"1px 3px",color:"#777",fontWeight:600,fontSize:"0.65rem"},children:"Total"}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(r.normalDmg+r.critDmg)})]})]})]})})]})]})};export{Y as CombatStatsWindow}; diff --git a/static/assets/InventoryWindow-JHmmmlat.js b/static/assets/InventoryWindow-C9tBB4ai.js similarity index 99% rename from static/assets/InventoryWindow-JHmmmlat.js rename to static/assets/InventoryWindow-C9tBB4ai.js index 775a6b51..0d33b87c 100644 --- a/static/assets/InventoryWindow-JHmmmlat.js +++ b/static/assets/InventoryWindow-C9tBB4ai.js @@ -1 +1 @@ -import{r as _,a as T,j as n,D as Q}from"./index-DlaI7zTK.js";import"./react-yfL0ty4i.js";function X(e){var s,d;if(!e)return e;const o=c=>c!=null&&c!==-1&&c!==-1?c:void 0,r=e.IntValues||{};return{item_id:e.item_id??e.Id??0,name:e.name??e.Name??((s=e.StringValues)==null?void 0:s["1"])??"Unknown",icon:e.icon??e.Icon??0,object_class:e.object_class??e.ObjectClass??0,current_wielded_location:e.current_wielded_location??o(e.CurrentWieldedLocation)??o(Number(r[10]))??0,container_id:e.container_id??e.ContainerId??0,items_capacity:e.items_capacity??o(e.ItemsCapacity)??o(Number(r[6]))??((d=e.enhanced_properties)==null?void 0:d.ItemSlots_Decal)??void 0,value:e.value??o(e.Value)??o(Number(r[19]))??0,burden:e.burden??o(e.Burden)??o(Number(r[5]))??0,armor_level:e.armor_level??o(e.ArmorLevel),max_damage:e.max_damage??o(e.MaxDamage),material:e.material??e.material_name??e.Material??void 0,item_set:e.item_set??e.ItemSet??void 0,imbue:e.imbue??e.Imbue??void 0,tinks:e.tinks??o(e.Tinks),workmanship:e.workmanship??o(e.Workmanship),equip_skill:e.equip_skill??e.equip_skill_name??e.EquipSkill??void 0,wield_level:e.wield_level??o(e.WieldLevel),skill_level:e.skill_level??o(e.SkillLevel),lore_requirement:e.lore_requirement??o(e.LoreRequirement),attack_bonus:e.attack_bonus??o(e.AttackBonus),melee_defense_bonus:e.melee_defense_bonus??o(e.MeleeDefenseBonus),magic_defense_bonus:e.magic_defense_bonus??o(e.MagicDBonus),damage_bonus:e.damage_bonus??o(e.DamageBonus),damage_rating:e.damage_rating??o(e.DamRating),crit_rating:e.crit_rating??o(e.CritRating),heal_boost_rating:e.heal_boost_rating??o(e.HealBoostRating),current_mana:e.current_mana??o(Number(r[218103815]))??void 0,max_mana:e.max_mana??o(Number(r[218103814]))??void 0,spellcraft:e.spellcraft??void 0,damage_range:e.damage_range??void 0,damage_type:e.damage_type??void 0,speed_text:e.speed_text??void 0,mana_display:e.mana_display??void 0,spells:e.spells??void 0,icon_overlay_id:e.icon_overlay_id??o(Number(r[218103849]))??void 0,icon_underlay_id:e.icon_underlay_id??o(Number(r[218103850]))??void 0,_raw:e}}function D(e){return!e||e<=0?"06000133":(e+100663296).toString(16).toUpperCase().padStart(8,"0")}const M={32768:{name:"Neck",row:1,col:1},1:{name:"Head",row:1,col:3},268435456:{name:"Sigil",row:1,col:5},536870912:{name:"Sigil",row:1,col:6},1073741824:{name:"Sigil",row:1,col:7},67108864:{name:"Trinket",row:2,col:1},2048:{name:"U.Arm",row:2,col:2},512:{name:"Chest",row:2,col:3},134217728:{name:"Cloak",row:2,col:7},65536:{name:"Brace L",row:3,col:1},4096:{name:"L.Arm",row:3,col:2},1024:{name:"Abdomen",row:3,col:3},8192:{name:"U.Leg",row:3,col:4},131072:{name:"Brace R",row:3,col:5},2:{name:"Shirt",row:3,col:7},262144:{name:"Ring L",row:4,col:1},32:{name:"Hands",row:4,col:2},16384:{name:"L.Leg",row:4,col:4},524288:{name:"Ring R",row:4,col:5},4:{name:"Pants",row:4,col:7},256:{name:"Feet",row:5,col:4},2097152:{name:"Shield",row:6,col:1},1048576:{name:"Melee",row:6,col:3},4194304:{name:"Missile",row:6,col:3},16777216:{name:"Held",row:6,col:3},33554432:{name:"2H",row:6,col:3},8388608:{name:"Ammo",row:6,col:7}},I={},ne=[32768,67108864,65536,131072,262144,524288],oe=[1,512,2048,1024,4096,8192,16384,32,256],te=[2,4,134217728,268435456,536870912,1073741824],ie=[2097152,1048576,4194304,16777216,33554432,8388608];(()=>{const e=new Set;Object.entries(M).forEach(([o,r])=>{const s=`${r.row}-${r.col}`,d=parseInt(o);e.has(s)||(e.add(s),ne.includes(d)?I[s]="#3a2555":oe.includes(d)?I[s]="#1e2e55":te.includes(d)?I[s]="#1e3e3e":ie.includes(d)?I[s]="#142040":I[s]="#2a2a2a")})})();const $="#af7a30";function W({item:e,size:o=36}){const r={position:"absolute",top:0,left:0,width:o,height:o,border:"none",background:"transparent",imageRendering:"pixelated"},s=e.icon_underlay_id&&e.icon_underlay_id>100?`/icons/${D(e.icon_underlay_id)}.png`:null,d=e.icon_overlay_id&&e.icon_overlay_id>100?`/icons/${D(e.icon_overlay_id)}.png`:null;return n.jsxs("div",{style:{width:o,height:o,position:"relative"},children:[s&&n.jsx("img",{src:s,alt:"",style:{...r,zIndex:1},onError:c=>{c.target.style.display="none"}}),n.jsx("img",{src:`/icons/${D(e.icon)}.png`,alt:e.name,style:{...r,zIndex:2},onError:c=>{c.target.src="/icons/06000133.png"}}),d&&n.jsx("img",{src:d,alt:"",style:{...r,zIndex:3},onError:c=>{c.target.style.display="none"}})]})}function le({item:e,x:o,y:r}){var j,L;const s=g=>g!=null&&g!==-1&&g!==-1,d=g=>g.toLocaleString(),c=g=>`${((g-1)*100).toFixed(1)}%`;return n.jsxs("div",{style:{position:"fixed",left:o+14,top:r+14,background:"rgba(0,0,0,0.96)",border:"1px solid #555",borderRadius:4,padding:"8px 12px",zIndex:99999,minWidth:200,maxWidth:340,fontSize:13,color:"#ddd",pointerEvents:"none",lineHeight:1.6,fontFamily:'-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif'},children:[n.jsx("div",{style:{color:"#ffcc00",fontWeight:"bold",fontSize:14,marginBottom:4},children:e.name}),n.jsxs("div",{style:{color:"#aaa"},children:["Value: ",d(e.value)," · Burden: ",e.burden]}),e.workmanship&&n.jsxs("div",{style:{color:"#aaa"},children:["Workmanship: ",e.workmanship]}),e.material&&n.jsxs("div",{style:{color:"#88ff88"},children:["Material: ",e.material]}),s(e.armor_level)&&n.jsxs("div",{style:{color:"#88ff88"},children:["Armor Level: ",e.armor_level]}),s(e.max_damage)&&n.jsxs("div",{style:{color:"#88ff88"},children:["Max Damage: ",e.max_damage]}),e.damage_range&&n.jsxs("div",{style:{color:"#88ff88"},children:["Damage: ",e.damage_range,e.damage_type?`, ${e.damage_type}`:""]}),s(e.attack_bonus)&&e.attack_bonus!==1&&n.jsxs("div",{style:{color:"#88ff88"},children:["Attack: +",c(e.attack_bonus)]}),s(e.melee_defense_bonus)&&e.melee_defense_bonus!==1&&n.jsxs("div",{style:{color:"#88ff88"},children:["Melee Def: +",c(e.melee_defense_bonus)]}),s(e.magic_defense_bonus)&&e.magic_defense_bonus!==1&&n.jsxs("div",{style:{color:"#88ff88"},children:["Magic Def: +",c(e.magic_defense_bonus)]}),e.equip_skill&&n.jsxs("div",{style:{color:"#ddd"},children:["Skill: ",e.equip_skill]}),s(e.wield_level)&&n.jsxs("div",{style:{color:"#ffaa00"},children:["Wield Level: ",e.wield_level]}),s(e.lore_requirement)&&n.jsxs("div",{style:{color:"#ffaa00"},children:["Lore: ",e.lore_requirement]}),e.imbue&&n.jsxs("div",{style:{color:"#88ff88"},children:["Imbue: ",e.imbue]}),e.item_set&&n.jsxs("div",{style:{color:"#88ff88"},children:["Set: ",e.item_set]}),s(e.tinks)&&n.jsxs("div",{style:{color:"#88ff88"},children:["Tinks: ",e.tinks]}),s(e.damage_rating)&&n.jsxs("div",{children:["Damage Rating: ",e.damage_rating]}),s(e.crit_rating)&&n.jsxs("div",{children:["Crit Rating: ",e.crit_rating]}),s(e.heal_boost_rating)&&n.jsxs("div",{children:["Heal Boost: ",e.heal_boost_rating]}),e.spellcraft&&n.jsxs("div",{style:{color:"#dda0dd"},children:["Spellcraft: ",e.spellcraft]}),s(e.current_mana)&&s(e.max_mana)&&n.jsxs("div",{style:{color:"#98d7ff"},children:["Mana: ",e.current_mana," / ",e.max_mana]}),((L=(j=e.spells)==null?void 0:j.spells)==null?void 0:L.length)>0&&n.jsxs("div",{style:{color:"#4a90e2",marginTop:4,fontSize:12},children:["Spells: ",e.spells.spells.map(g=>g.name).join(", ")]})]})}function G({iconSrc:e,isActive:o,fillPct:r,label:s,onClick:d}){const c=r>90?"#b7432c":r>70?"#d8a431":"#00ff00";return n.jsxs("div",{onClick:d,title:s,style:{display:"flex",alignItems:"flex-start",gap:2,cursor:"pointer",flexShrink:0,marginTop:3,position:"relative"},children:[o&&n.jsx("span",{style:{position:"absolute",left:-11,top:8,color:$,fontSize:10},children:"▶"}),n.jsx("div",{style:{width:30,height:30,border:o?"1px solid #00ff00":"1px solid #333",boxShadow:o?"0 0 4px #00ff00":"none",background:"#000",display:"flex",alignItems:"center",justifyContent:"center"},children:n.jsx("img",{src:e,alt:"",style:{width:26,height:26,objectFit:"contain",imageRendering:"pixelated"},onError:j=>{j.target.src="/icons/06001080.png"}})}),n.jsx("div",{style:{width:7,height:30,background:"#222",border:"1px solid #666",position:"relative",overflow:"hidden",borderRadius:2},title:`${Math.round(r)}% full`,children:n.jsx("div",{style:{position:"absolute",bottom:0,left:0,right:0,height:`${r}%`,background:c,minHeight:r>0?2:0}})})]})}const ce=({id:e,charName:o,zIndex:r,inventoryVersion:s,equipmentCantrips:d})=>{var V,q,Y;const[c,j]=_.useState([]),[L,g]=_.useState(!0),[k,H]=_.useState(null),[B,U]=_.useState(null),[f,J]=_.useState(null),C=_.useRef(0),O=_.useRef(!1);_.useEffect(()=>{g(!0),Promise.all([T(`/inventory/${encodeURIComponent(o)}?limit=1000`).catch(()=>({items:[]})),T(`/character-stats/${encodeURIComponent(o)}`).catch(()=>null)]).then(([t,i])=>{j((t.items??[]).map(X)),J(i),O.current=!0}).finally(()=>g(!1))},[o]),_.useEffect(()=>{if(!(!O.current||!s))return clearTimeout(C.current),C.current=window.setTimeout(()=>{T(`/inventory/${encodeURIComponent(o)}?limit=1000&_t=${Date.now()}`).then(t=>j((t.items??[]).map(X))).catch(()=>{})},2e3),()=>clearTimeout(C.current)},[o,s]);const y=_.useCallback((t,i)=>{U(t&&i?{item:t,x:i.clientX,y:i.clientY}:null)},[]),Z=_.useMemo(()=>{const t=new Set,i=[];return Object.entries(M).forEach(([u,m])=>{const a=`${m.row}-${m.col}`;t.has(a)||(t.add(a),i.push({key:a,...m,mask:parseInt(u)}))}),i},[]),{equippedMap:A,containers:z,packItems:w}=_.useMemo(()=>{const t=new Map,i=[],u=new Set,m=new Map;c.forEach(l=>{l.object_class===10&&(i.push(l),u.add(l.item_id))}),i.sort((l,h)=>(l.item_id>>>0)-(h.item_id>>>0));let a=null;return c.forEach(l=>{l.current_wielded_location>0&&l.container_id&&!u.has(l.container_id)&&(a=l.container_id)}),c.forEach(l=>{if(u.has(l.item_id))return;const h=l.current_wielded_location;if(h>0)if(l.object_class===2)Object.entries(M).forEach(([b,x])=>{if((h&parseInt(b))===parseInt(b)){const v=`${x.row}-${x.col}`;t.has(v)||t.set(v,l)}});else{let b=!1;if(M[h]){const x=M[h],v=`${x.row}-${x.col}`;t.has(v)||(t.set(v,l),b=!0)}if(!b){for(const[x,v]of Object.entries(M))if((h&parseInt(x))===parseInt(x)){const K=`${v.row}-${v.col}`;if(!t.has(K)){t.set(K,l),b=!0;break}}}}else{let p=l.container_id||0;a&&p===a&&(p=0),m.has(p)||m.set(p,[]),m.get(p).push(l)}}),{equippedMap:t,containers:i,packItems:m}},[c]);let S=w.get(0)??[],F=0;if(S.length===0){let t=0;for(const[i,u]of w.entries())!z.some(m=>m.item_id===i)&&u.length>t&&(t=u.length,F=i);S=w.get(F)??[]}const P=k!==null?w.get(k)??[]:S,N=(f==null?void 0:f.burden_units)??((V=f==null?void 0:f.stats_data)==null?void 0:V.burden_units)??0,R=(f==null?void 0:f.encumbrance_capacity)??((q=f==null?void 0:f.stats_data)==null?void 0:q.encumbrance_capacity)??0,E=R>0?Math.min(200,N/R*100):0,ee=E>150?"#b7432c":E>100?"#d8a431":"#2e8b57";return L?n.jsx(Q,{id:e,title:`Inventory: ${o}`,zIndex:r,width:572,height:720,children:n.jsx("div",{style:{padding:20,color:"#666",fontStyle:"italic"},children:"Loading inventory..."})}):n.jsxs(Q,{id:e,title:`Inventory: ${o}`,zIndex:r,width:572,height:720,children:[n.jsxs("div",{style:{display:"flex",flex:1,overflow:"hidden",background:"rgba(14,14,14,0.96)",fontFamily:'-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif',fontSize:13},children:[n.jsxs("div",{style:{width:316,display:"flex",flexDirection:"column",overflow:"hidden"},children:[n.jsx("div",{style:{position:"relative",height:270,minHeight:270,background:"#0a0a0a",borderBottom:`1px solid ${$}`},children:Z.map(t=>{const i=A.get(t.key),u=I[t.key]??"#2a2a2a";return n.jsx("div",{style:{position:"absolute",left:(t.col-1)*44+4,top:(t.row-1)*44+4,width:36,height:36,background:i?"#5a5a62":u,border:i?"2px solid #00ffff":"2px outset #6a6a72",boxShadow:i?"0 0 5px #00ffff, inset 0 0 5px rgba(0,255,255,0.2)":"none",display:"flex",alignItems:"center",justifyContent:"center",cursor:i?"pointer":"default"},onMouseEnter:m=>i&&y(i,m),onMouseMove:m=>i&&y(i,m),onMouseLeave:()=>y(null),children:i?n.jsx(W,{item:i,size:32}):n.jsx("img",{src:"/icons/06000133.png",alt:"",style:{width:28,height:28,opacity:.15,filter:"grayscale(100%)",imageRendering:"pixelated"}})},t.key)})}),n.jsxs("div",{style:{padding:"3px 6px",fontSize:11,color:"#ccc",background:"#111",borderBottom:`1px solid ${$}`},children:["Contents of ",k!==null?((Y=z.find(t=>t.item_id===k))==null?void 0:Y.name)??"Pack":"Backpack"]}),n.jsxs("div",{style:{flex:1,overflowY:"auto",display:"grid",gridTemplateColumns:"repeat(6, 36px)",gridAutoRows:36,gap:2,padding:4,alignContent:"start"},children:[P.map((t,i)=>n.jsx("div",{style:{width:36,height:36,background:"linear-gradient(135deg, #3d007a 0%, #1a0033 100%)",border:"1px solid #4a148c",display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer"},onMouseEnter:u=>y(t,u),onMouseMove:u=>y(t,u),onMouseLeave:()=>y(null),children:n.jsx(W,{item:t,size:32})},t.item_id??i)),Array.from({length:Math.max(0,24-P.length)}).map((t,i)=>n.jsx("div",{style:{width:36,height:36,background:"#0a0a0a",border:"1px solid #1a1a1a"}},`e${i}`))]})]}),n.jsxs("div",{style:{width:42,display:"flex",flexDirection:"column",alignItems:"center",padding:"4px 2px",borderLeft:`1px solid ${$}`,borderRight:`1px solid ${$}`},children:[n.jsx("div",{style:{textAlign:"center",fontSize:8,color:"#ccc",marginBottom:2},children:R>0?`${Math.floor(E)}%`:"Burden"}),n.jsx("div",{style:{width:14,height:40,background:"#111",border:"1px solid #555",position:"relative",overflow:"hidden",marginBottom:6,flexShrink:0},title:R>0?`${N.toLocaleString()} / ${R.toLocaleString()}`:`Burden: ${c.reduce((t,i)=>t+(i.burden??0),0).toLocaleString()}`,children:n.jsx("div",{style:{position:"absolute",bottom:0,left:0,right:0,height:`${E/2}%`,background:ee,transition:"height 0.3s"}})}),n.jsx(G,{iconSrc:"/icons/0600127E.png",isActive:k===null,fillPct:S.length>0?Math.min(100,S.length/102*100):0,label:`Backpack (${S.length}/102)`,onClick:()=>H(null)}),z.map(t=>{const i=t.item_id,u=c.filter(l=>l.container_id===i&&l.item_id!==i).length,m=t.items_capacity||24,a=m>0?Math.min(100,u/m*100):0;return n.jsx(G,{iconSrc:`/icons/${D(t.icon)}.png`,isActive:k===i,fillPct:a,label:`${t.name} (${u}/${m})`,onClick:()=>H(i)},i)})]}),n.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",overflow:"hidden",minWidth:160},children:[n.jsx("div",{style:{padding:"4px 8px",fontSize:"0.72rem",fontWeight:600,color:"#aaa",background:"#111",borderBottom:`1px solid ${$}`},children:"Mana"}),n.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"2px 0"},children:[(()=>{const t=(d==null?void 0:d.items)??[],i=new Map(t.map(a=>[a.item_id,a])),u=d!=null&&d.timestamp?new Date(d.timestamp).getTime():0,m=u>0?Math.max(0,(Date.now()-u)/1e3):0;return Array.from(A.values()).map(a=>{const l=i.get(a.item_id),h=(l==null?void 0:l.current_mana)??a.current_mana??0,p=(l==null?void 0:l.max_mana)??a.max_mana??0,b=(l==null?void 0:l.mana_time_remaining_seconds)??null,x=b!=null?Math.max(0,b-m):null,v=(l==null?void 0:l.state)??(h>0?"active":"not_active");return{...a,current_mana:h,max_mana:p,liveRemaining:x,manaState:v}}).filter(a=>a.current_mana>0||a.max_mana>0).sort((a,l)=>(a.liveRemaining??999999)-(l.liveRemaining??999999)).map((a,l)=>{const h=a.manaState==="active"?"#4c4":a.manaState==="not_active"?"#c44":"#da8";return n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,padding:"2px 4px",borderBottom:"1px solid #1a1a1a",cursor:"pointer"},onMouseEnter:p=>y(a,p),onMouseMove:p=>y(a,p),onMouseLeave:()=>y(null),children:[n.jsx("div",{style:{width:20,height:20,flexShrink:0},children:n.jsx(W,{item:a,size:20})}),n.jsx("div",{style:{width:8,height:8,borderRadius:"50%",background:h,flexShrink:0}}),n.jsx("div",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontSize:"0.68rem",color:"#ccc"},children:a.name}),n.jsxs("div",{style:{fontSize:"0.65rem",color:"#88bbff",whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums"},children:[a.current_mana,"/",a.max_mana]}),n.jsx("div",{style:{fontSize:"0.63rem",color:"#9c9",whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums",minWidth:42,textAlign:"right"},children:a.liveRemaining!=null?se(a.liveRemaining):""})]},l)})})(),Array.from(A.values()).filter(t=>t.current_mana>0||t.max_mana>0).length===0&&n.jsx("div",{style:{padding:12,color:"#555",textAlign:"center",fontSize:"0.7rem"},children:"No mana items equipped"})]})]})]}),B&&n.jsx(le,{item:B.item,x:B.x,y:B.y})]})};function se(e){if(e<=0)return"0h00m";const o=Math.floor(e),r=Math.floor(o/3600),s=Math.floor(o%3600/60);return`${r}h${String(s).padStart(2,"0")}m`}export{ce as InventoryWindow}; +import{r as _,a as T,j as n,D as Q}from"./index-DtA97zvw.js";import"./react-yfL0ty4i.js";function X(e){var s,d;if(!e)return e;const o=c=>c!=null&&c!==-1&&c!==-1?c:void 0,r=e.IntValues||{};return{item_id:e.item_id??e.Id??0,name:e.name??e.Name??((s=e.StringValues)==null?void 0:s["1"])??"Unknown",icon:e.icon??e.Icon??0,object_class:e.object_class??e.ObjectClass??0,current_wielded_location:e.current_wielded_location??o(e.CurrentWieldedLocation)??o(Number(r[10]))??0,container_id:e.container_id??e.ContainerId??0,items_capacity:e.items_capacity??o(e.ItemsCapacity)??o(Number(r[6]))??((d=e.enhanced_properties)==null?void 0:d.ItemSlots_Decal)??void 0,value:e.value??o(e.Value)??o(Number(r[19]))??0,burden:e.burden??o(e.Burden)??o(Number(r[5]))??0,armor_level:e.armor_level??o(e.ArmorLevel),max_damage:e.max_damage??o(e.MaxDamage),material:e.material??e.material_name??e.Material??void 0,item_set:e.item_set??e.ItemSet??void 0,imbue:e.imbue??e.Imbue??void 0,tinks:e.tinks??o(e.Tinks),workmanship:e.workmanship??o(e.Workmanship),equip_skill:e.equip_skill??e.equip_skill_name??e.EquipSkill??void 0,wield_level:e.wield_level??o(e.WieldLevel),skill_level:e.skill_level??o(e.SkillLevel),lore_requirement:e.lore_requirement??o(e.LoreRequirement),attack_bonus:e.attack_bonus??o(e.AttackBonus),melee_defense_bonus:e.melee_defense_bonus??o(e.MeleeDefenseBonus),magic_defense_bonus:e.magic_defense_bonus??o(e.MagicDBonus),damage_bonus:e.damage_bonus??o(e.DamageBonus),damage_rating:e.damage_rating??o(e.DamRating),crit_rating:e.crit_rating??o(e.CritRating),heal_boost_rating:e.heal_boost_rating??o(e.HealBoostRating),current_mana:e.current_mana??o(Number(r[218103815]))??void 0,max_mana:e.max_mana??o(Number(r[218103814]))??void 0,spellcraft:e.spellcraft??void 0,damage_range:e.damage_range??void 0,damage_type:e.damage_type??void 0,speed_text:e.speed_text??void 0,mana_display:e.mana_display??void 0,spells:e.spells??void 0,icon_overlay_id:e.icon_overlay_id??o(Number(r[218103849]))??void 0,icon_underlay_id:e.icon_underlay_id??o(Number(r[218103850]))??void 0,_raw:e}}function D(e){return!e||e<=0?"06000133":(e+100663296).toString(16).toUpperCase().padStart(8,"0")}const M={32768:{name:"Neck",row:1,col:1},1:{name:"Head",row:1,col:3},268435456:{name:"Sigil",row:1,col:5},536870912:{name:"Sigil",row:1,col:6},1073741824:{name:"Sigil",row:1,col:7},67108864:{name:"Trinket",row:2,col:1},2048:{name:"U.Arm",row:2,col:2},512:{name:"Chest",row:2,col:3},134217728:{name:"Cloak",row:2,col:7},65536:{name:"Brace L",row:3,col:1},4096:{name:"L.Arm",row:3,col:2},1024:{name:"Abdomen",row:3,col:3},8192:{name:"U.Leg",row:3,col:4},131072:{name:"Brace R",row:3,col:5},2:{name:"Shirt",row:3,col:7},262144:{name:"Ring L",row:4,col:1},32:{name:"Hands",row:4,col:2},16384:{name:"L.Leg",row:4,col:4},524288:{name:"Ring R",row:4,col:5},4:{name:"Pants",row:4,col:7},256:{name:"Feet",row:5,col:4},2097152:{name:"Shield",row:6,col:1},1048576:{name:"Melee",row:6,col:3},4194304:{name:"Missile",row:6,col:3},16777216:{name:"Held",row:6,col:3},33554432:{name:"2H",row:6,col:3},8388608:{name:"Ammo",row:6,col:7}},I={},ne=[32768,67108864,65536,131072,262144,524288],oe=[1,512,2048,1024,4096,8192,16384,32,256],te=[2,4,134217728,268435456,536870912,1073741824],ie=[2097152,1048576,4194304,16777216,33554432,8388608];(()=>{const e=new Set;Object.entries(M).forEach(([o,r])=>{const s=`${r.row}-${r.col}`,d=parseInt(o);e.has(s)||(e.add(s),ne.includes(d)?I[s]="#3a2555":oe.includes(d)?I[s]="#1e2e55":te.includes(d)?I[s]="#1e3e3e":ie.includes(d)?I[s]="#142040":I[s]="#2a2a2a")})})();const $="#af7a30";function W({item:e,size:o=36}){const r={position:"absolute",top:0,left:0,width:o,height:o,border:"none",background:"transparent",imageRendering:"pixelated"},s=e.icon_underlay_id&&e.icon_underlay_id>100?`/icons/${D(e.icon_underlay_id)}.png`:null,d=e.icon_overlay_id&&e.icon_overlay_id>100?`/icons/${D(e.icon_overlay_id)}.png`:null;return n.jsxs("div",{style:{width:o,height:o,position:"relative"},children:[s&&n.jsx("img",{src:s,alt:"",style:{...r,zIndex:1},onError:c=>{c.target.style.display="none"}}),n.jsx("img",{src:`/icons/${D(e.icon)}.png`,alt:e.name,style:{...r,zIndex:2},onError:c=>{c.target.src="/icons/06000133.png"}}),d&&n.jsx("img",{src:d,alt:"",style:{...r,zIndex:3},onError:c=>{c.target.style.display="none"}})]})}function le({item:e,x:o,y:r}){var j,L;const s=g=>g!=null&&g!==-1&&g!==-1,d=g=>g.toLocaleString(),c=g=>`${((g-1)*100).toFixed(1)}%`;return n.jsxs("div",{style:{position:"fixed",left:o+14,top:r+14,background:"rgba(0,0,0,0.96)",border:"1px solid #555",borderRadius:4,padding:"8px 12px",zIndex:99999,minWidth:200,maxWidth:340,fontSize:13,color:"#ddd",pointerEvents:"none",lineHeight:1.6,fontFamily:'-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif'},children:[n.jsx("div",{style:{color:"#ffcc00",fontWeight:"bold",fontSize:14,marginBottom:4},children:e.name}),n.jsxs("div",{style:{color:"#aaa"},children:["Value: ",d(e.value)," · Burden: ",e.burden]}),e.workmanship&&n.jsxs("div",{style:{color:"#aaa"},children:["Workmanship: ",e.workmanship]}),e.material&&n.jsxs("div",{style:{color:"#88ff88"},children:["Material: ",e.material]}),s(e.armor_level)&&n.jsxs("div",{style:{color:"#88ff88"},children:["Armor Level: ",e.armor_level]}),s(e.max_damage)&&n.jsxs("div",{style:{color:"#88ff88"},children:["Max Damage: ",e.max_damage]}),e.damage_range&&n.jsxs("div",{style:{color:"#88ff88"},children:["Damage: ",e.damage_range,e.damage_type?`, ${e.damage_type}`:""]}),s(e.attack_bonus)&&e.attack_bonus!==1&&n.jsxs("div",{style:{color:"#88ff88"},children:["Attack: +",c(e.attack_bonus)]}),s(e.melee_defense_bonus)&&e.melee_defense_bonus!==1&&n.jsxs("div",{style:{color:"#88ff88"},children:["Melee Def: +",c(e.melee_defense_bonus)]}),s(e.magic_defense_bonus)&&e.magic_defense_bonus!==1&&n.jsxs("div",{style:{color:"#88ff88"},children:["Magic Def: +",c(e.magic_defense_bonus)]}),e.equip_skill&&n.jsxs("div",{style:{color:"#ddd"},children:["Skill: ",e.equip_skill]}),s(e.wield_level)&&n.jsxs("div",{style:{color:"#ffaa00"},children:["Wield Level: ",e.wield_level]}),s(e.lore_requirement)&&n.jsxs("div",{style:{color:"#ffaa00"},children:["Lore: ",e.lore_requirement]}),e.imbue&&n.jsxs("div",{style:{color:"#88ff88"},children:["Imbue: ",e.imbue]}),e.item_set&&n.jsxs("div",{style:{color:"#88ff88"},children:["Set: ",e.item_set]}),s(e.tinks)&&n.jsxs("div",{style:{color:"#88ff88"},children:["Tinks: ",e.tinks]}),s(e.damage_rating)&&n.jsxs("div",{children:["Damage Rating: ",e.damage_rating]}),s(e.crit_rating)&&n.jsxs("div",{children:["Crit Rating: ",e.crit_rating]}),s(e.heal_boost_rating)&&n.jsxs("div",{children:["Heal Boost: ",e.heal_boost_rating]}),e.spellcraft&&n.jsxs("div",{style:{color:"#dda0dd"},children:["Spellcraft: ",e.spellcraft]}),s(e.current_mana)&&s(e.max_mana)&&n.jsxs("div",{style:{color:"#98d7ff"},children:["Mana: ",e.current_mana," / ",e.max_mana]}),((L=(j=e.spells)==null?void 0:j.spells)==null?void 0:L.length)>0&&n.jsxs("div",{style:{color:"#4a90e2",marginTop:4,fontSize:12},children:["Spells: ",e.spells.spells.map(g=>g.name).join(", ")]})]})}function G({iconSrc:e,isActive:o,fillPct:r,label:s,onClick:d}){const c=r>90?"#b7432c":r>70?"#d8a431":"#00ff00";return n.jsxs("div",{onClick:d,title:s,style:{display:"flex",alignItems:"flex-start",gap:2,cursor:"pointer",flexShrink:0,marginTop:3,position:"relative"},children:[o&&n.jsx("span",{style:{position:"absolute",left:-11,top:8,color:$,fontSize:10},children:"▶"}),n.jsx("div",{style:{width:30,height:30,border:o?"1px solid #00ff00":"1px solid #333",boxShadow:o?"0 0 4px #00ff00":"none",background:"#000",display:"flex",alignItems:"center",justifyContent:"center"},children:n.jsx("img",{src:e,alt:"",style:{width:26,height:26,objectFit:"contain",imageRendering:"pixelated"},onError:j=>{j.target.src="/icons/06001080.png"}})}),n.jsx("div",{style:{width:7,height:30,background:"#222",border:"1px solid #666",position:"relative",overflow:"hidden",borderRadius:2},title:`${Math.round(r)}% full`,children:n.jsx("div",{style:{position:"absolute",bottom:0,left:0,right:0,height:`${r}%`,background:c,minHeight:r>0?2:0}})})]})}const ce=({id:e,charName:o,zIndex:r,inventoryVersion:s,equipmentCantrips:d})=>{var V,q,Y;const[c,j]=_.useState([]),[L,g]=_.useState(!0),[k,H]=_.useState(null),[B,U]=_.useState(null),[f,J]=_.useState(null),C=_.useRef(0),O=_.useRef(!1);_.useEffect(()=>{g(!0),Promise.all([T(`/inventory/${encodeURIComponent(o)}?limit=1000`).catch(()=>({items:[]})),T(`/character-stats/${encodeURIComponent(o)}`).catch(()=>null)]).then(([t,i])=>{j((t.items??[]).map(X)),J(i),O.current=!0}).finally(()=>g(!1))},[o]),_.useEffect(()=>{if(!(!O.current||!s))return clearTimeout(C.current),C.current=window.setTimeout(()=>{T(`/inventory/${encodeURIComponent(o)}?limit=1000&_t=${Date.now()}`).then(t=>j((t.items??[]).map(X))).catch(()=>{})},2e3),()=>clearTimeout(C.current)},[o,s]);const y=_.useCallback((t,i)=>{U(t&&i?{item:t,x:i.clientX,y:i.clientY}:null)},[]),Z=_.useMemo(()=>{const t=new Set,i=[];return Object.entries(M).forEach(([u,m])=>{const a=`${m.row}-${m.col}`;t.has(a)||(t.add(a),i.push({key:a,...m,mask:parseInt(u)}))}),i},[]),{equippedMap:A,containers:z,packItems:w}=_.useMemo(()=>{const t=new Map,i=[],u=new Set,m=new Map;c.forEach(l=>{l.object_class===10&&(i.push(l),u.add(l.item_id))}),i.sort((l,h)=>(l.item_id>>>0)-(h.item_id>>>0));let a=null;return c.forEach(l=>{l.current_wielded_location>0&&l.container_id&&!u.has(l.container_id)&&(a=l.container_id)}),c.forEach(l=>{if(u.has(l.item_id))return;const h=l.current_wielded_location;if(h>0)if(l.object_class===2)Object.entries(M).forEach(([b,x])=>{if((h&parseInt(b))===parseInt(b)){const v=`${x.row}-${x.col}`;t.has(v)||t.set(v,l)}});else{let b=!1;if(M[h]){const x=M[h],v=`${x.row}-${x.col}`;t.has(v)||(t.set(v,l),b=!0)}if(!b){for(const[x,v]of Object.entries(M))if((h&parseInt(x))===parseInt(x)){const K=`${v.row}-${v.col}`;if(!t.has(K)){t.set(K,l),b=!0;break}}}}else{let p=l.container_id||0;a&&p===a&&(p=0),m.has(p)||m.set(p,[]),m.get(p).push(l)}}),{equippedMap:t,containers:i,packItems:m}},[c]);let S=w.get(0)??[],F=0;if(S.length===0){let t=0;for(const[i,u]of w.entries())!z.some(m=>m.item_id===i)&&u.length>t&&(t=u.length,F=i);S=w.get(F)??[]}const P=k!==null?w.get(k)??[]:S,N=(f==null?void 0:f.burden_units)??((V=f==null?void 0:f.stats_data)==null?void 0:V.burden_units)??0,R=(f==null?void 0:f.encumbrance_capacity)??((q=f==null?void 0:f.stats_data)==null?void 0:q.encumbrance_capacity)??0,E=R>0?Math.min(200,N/R*100):0,ee=E>150?"#b7432c":E>100?"#d8a431":"#2e8b57";return L?n.jsx(Q,{id:e,title:`Inventory: ${o}`,zIndex:r,width:572,height:720,children:n.jsx("div",{style:{padding:20,color:"#666",fontStyle:"italic"},children:"Loading inventory..."})}):n.jsxs(Q,{id:e,title:`Inventory: ${o}`,zIndex:r,width:572,height:720,children:[n.jsxs("div",{style:{display:"flex",flex:1,overflow:"hidden",background:"rgba(14,14,14,0.96)",fontFamily:'-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif',fontSize:13},children:[n.jsxs("div",{style:{width:316,display:"flex",flexDirection:"column",overflow:"hidden"},children:[n.jsx("div",{style:{position:"relative",height:270,minHeight:270,background:"#0a0a0a",borderBottom:`1px solid ${$}`},children:Z.map(t=>{const i=A.get(t.key),u=I[t.key]??"#2a2a2a";return n.jsx("div",{style:{position:"absolute",left:(t.col-1)*44+4,top:(t.row-1)*44+4,width:36,height:36,background:i?"#5a5a62":u,border:i?"2px solid #00ffff":"2px outset #6a6a72",boxShadow:i?"0 0 5px #00ffff, inset 0 0 5px rgba(0,255,255,0.2)":"none",display:"flex",alignItems:"center",justifyContent:"center",cursor:i?"pointer":"default"},onMouseEnter:m=>i&&y(i,m),onMouseMove:m=>i&&y(i,m),onMouseLeave:()=>y(null),children:i?n.jsx(W,{item:i,size:32}):n.jsx("img",{src:"/icons/06000133.png",alt:"",style:{width:28,height:28,opacity:.15,filter:"grayscale(100%)",imageRendering:"pixelated"}})},t.key)})}),n.jsxs("div",{style:{padding:"3px 6px",fontSize:11,color:"#ccc",background:"#111",borderBottom:`1px solid ${$}`},children:["Contents of ",k!==null?((Y=z.find(t=>t.item_id===k))==null?void 0:Y.name)??"Pack":"Backpack"]}),n.jsxs("div",{style:{flex:1,overflowY:"auto",display:"grid",gridTemplateColumns:"repeat(6, 36px)",gridAutoRows:36,gap:2,padding:4,alignContent:"start"},children:[P.map((t,i)=>n.jsx("div",{style:{width:36,height:36,background:"linear-gradient(135deg, #3d007a 0%, #1a0033 100%)",border:"1px solid #4a148c",display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer"},onMouseEnter:u=>y(t,u),onMouseMove:u=>y(t,u),onMouseLeave:()=>y(null),children:n.jsx(W,{item:t,size:32})},t.item_id??i)),Array.from({length:Math.max(0,24-P.length)}).map((t,i)=>n.jsx("div",{style:{width:36,height:36,background:"#0a0a0a",border:"1px solid #1a1a1a"}},`e${i}`))]})]}),n.jsxs("div",{style:{width:42,display:"flex",flexDirection:"column",alignItems:"center",padding:"4px 2px",borderLeft:`1px solid ${$}`,borderRight:`1px solid ${$}`},children:[n.jsx("div",{style:{textAlign:"center",fontSize:8,color:"#ccc",marginBottom:2},children:R>0?`${Math.floor(E)}%`:"Burden"}),n.jsx("div",{style:{width:14,height:40,background:"#111",border:"1px solid #555",position:"relative",overflow:"hidden",marginBottom:6,flexShrink:0},title:R>0?`${N.toLocaleString()} / ${R.toLocaleString()}`:`Burden: ${c.reduce((t,i)=>t+(i.burden??0),0).toLocaleString()}`,children:n.jsx("div",{style:{position:"absolute",bottom:0,left:0,right:0,height:`${E/2}%`,background:ee,transition:"height 0.3s"}})}),n.jsx(G,{iconSrc:"/icons/0600127E.png",isActive:k===null,fillPct:S.length>0?Math.min(100,S.length/102*100):0,label:`Backpack (${S.length}/102)`,onClick:()=>H(null)}),z.map(t=>{const i=t.item_id,u=c.filter(l=>l.container_id===i&&l.item_id!==i).length,m=t.items_capacity||24,a=m>0?Math.min(100,u/m*100):0;return n.jsx(G,{iconSrc:`/icons/${D(t.icon)}.png`,isActive:k===i,fillPct:a,label:`${t.name} (${u}/${m})`,onClick:()=>H(i)},i)})]}),n.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",overflow:"hidden",minWidth:160},children:[n.jsx("div",{style:{padding:"4px 8px",fontSize:"0.72rem",fontWeight:600,color:"#aaa",background:"#111",borderBottom:`1px solid ${$}`},children:"Mana"}),n.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"2px 0"},children:[(()=>{const t=(d==null?void 0:d.items)??[],i=new Map(t.map(a=>[a.item_id,a])),u=d!=null&&d.timestamp?new Date(d.timestamp).getTime():0,m=u>0?Math.max(0,(Date.now()-u)/1e3):0;return Array.from(A.values()).map(a=>{const l=i.get(a.item_id),h=(l==null?void 0:l.current_mana)??a.current_mana??0,p=(l==null?void 0:l.max_mana)??a.max_mana??0,b=(l==null?void 0:l.mana_time_remaining_seconds)??null,x=b!=null?Math.max(0,b-m):null,v=(l==null?void 0:l.state)??(h>0?"active":"not_active");return{...a,current_mana:h,max_mana:p,liveRemaining:x,manaState:v}}).filter(a=>a.current_mana>0||a.max_mana>0).sort((a,l)=>(a.liveRemaining??999999)-(l.liveRemaining??999999)).map((a,l)=>{const h=a.manaState==="active"?"#4c4":a.manaState==="not_active"?"#c44":"#da8";return n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,padding:"2px 4px",borderBottom:"1px solid #1a1a1a",cursor:"pointer"},onMouseEnter:p=>y(a,p),onMouseMove:p=>y(a,p),onMouseLeave:()=>y(null),children:[n.jsx("div",{style:{width:20,height:20,flexShrink:0},children:n.jsx(W,{item:a,size:20})}),n.jsx("div",{style:{width:8,height:8,borderRadius:"50%",background:h,flexShrink:0}}),n.jsx("div",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontSize:"0.68rem",color:"#ccc"},children:a.name}),n.jsxs("div",{style:{fontSize:"0.65rem",color:"#88bbff",whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums"},children:[a.current_mana,"/",a.max_mana]}),n.jsx("div",{style:{fontSize:"0.63rem",color:"#9c9",whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums",minWidth:42,textAlign:"right"},children:a.liveRemaining!=null?se(a.liveRemaining):""})]},l)})})(),Array.from(A.values()).filter(t=>t.current_mana>0||t.max_mana>0).length===0&&n.jsx("div",{style:{padding:12,color:"#555",textAlign:"center",fontSize:"0.7rem"},children:"No mana items equipped"})]})]})]}),B&&n.jsx(le,{item:B.item,x:B.x,y:B.y})]})};function se(e){if(e<=0)return"0h00m";const o=Math.floor(e),r=Math.floor(o/3600),s=Math.floor(o%3600/60);return`${r}h${String(s).padStart(2,"0")}m`}export{ce as InventoryWindow}; diff --git a/static/assets/IssuesWindow-BaiYHihK.js b/static/assets/IssuesWindow-RD9J2Lzz.js similarity index 99% rename from static/assets/IssuesWindow-BaiYHihK.js rename to static/assets/IssuesWindow-RD9J2Lzz.js index 24796d59..49616967 100644 --- a/static/assets/IssuesWindow-BaiYHihK.js +++ b/static/assets/IssuesWindow-RD9J2Lzz.js @@ -1 +1 @@ -import{r as n,a as W,j as e,D as L}from"./index-DlaI7zTK.js";import"./react-yfL0ty4i.js";const O={plugin:{label:"Plugin",color:"#8844cc"},overlord:{label:"Overlord",color:"#4488cc"},nav:{label:"Nav",color:"#44aa44"},macro:{label:"Macro",color:"#cc8844"},other:{label:"Other",color:"#888888"}},i={padding:"3px 6px",fontSize:"0.8rem",border:"1px solid #555",background:"#2a2a2a",color:"#ddd",borderRadius:0},N={...i,fontSize:"0.75rem"},g={padding:"4px 12px",background:"#4a80c0",color:"#fff",border:"1px solid #336699",cursor:"pointer",fontSize:"0.75rem"},a={padding:"3px 8px",background:"#444",color:"#ccc",border:"1px solid #555",cursor:"pointer",fontSize:"0.7rem"},F=({id:P,zIndex:A})=>{const[h,R]=n.useState([]),[c,m]=n.useState(""),[y,u]=n.useState(""),[f,$]=n.useState("plugin"),[v,d]=n.useState(null),[p,j]=n.useState(""),[b,S]=n.useState(""),[C,z]=n.useState(""),[T,k]=n.useState({}),x=n.useCallback(async()=>{try{const t=await W("/issues");R((t.issues??[]).sort((r,s)=>(r.resolved?1:0)-(s.resolved?1:0)))}catch{}},[]);n.useEffect(()=>{x()},[x]);const l=async(t,r)=>{await fetch(`/api${t}`,{...r,credentials:"include",headers:{"Content-Type":"application/json",...r.headers}}),x()},E=async()=>{c.trim()&&(await l("/issues",{method:"POST",body:JSON.stringify({title:c.trim(),description:y.trim(),category:f})}),m(""),u(""))},B=t=>{if(v===t.id){d(null);return}d(t.id),j(t.title),S(t.description||""),z(t.category||"other")},I=async t=>{p.trim()&&(await l(`/issues/${t}`,{method:"PATCH",body:JSON.stringify({title:p.trim(),description:b.trim(),category:C})}),d(null))},w=async t=>{const r=(T[t]||"").trim();r&&(await l(`/issues/${t}/comments`,{method:"POST",body:JSON.stringify({text:r})}),k(s=>({...s,[t]:""})))};return e.jsxs(L,{id:P,title:"Issues Board",zIndex:A,width:540,height:520,children:[e.jsxs("div",{style:{flex:1,overflowY:"auto",padding:6,fontSize:"0.8rem"},children:[h.length===0&&e.jsx("div",{style:{padding:10,color:"#888",textAlign:"center"},children:"No open issues"}),h.map(t=>{const r=O[t.category]||O.other,s=t.created?new Date(t.created).toLocaleDateString("sv-SE"):"",D=t.comments||[];return e.jsxs("div",{style:{padding:"6px 8px",marginBottom:4,background:"#1f1f1f",borderRadius:3,border:"1px solid #333",opacity:t.resolved?.55:1},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,flexWrap:"wrap"},children:[e.jsx("span",{style:{fontSize:"0.65rem",padding:"1px 6px",borderRadius:3,background:r.color,color:"#fff",fontWeight:600},children:r.label}),e.jsx("strong",{style:{fontSize:"0.8rem",flex:1},children:t.title}),e.jsxs("span",{style:{fontSize:"0.65rem",color:"#888"},children:["by ",t.author||"User"]}),e.jsx("span",{style:{color:"#666",fontSize:"0.65rem"},children:s})]}),t.description&&e.jsx("div",{style:{color:"#999",marginTop:3,fontSize:"0.75rem"},children:t.description}),e.jsxs("div",{style:{display:"flex",gap:4,marginTop:4},children:[t.resolved?e.jsxs(e.Fragment,{children:[e.jsx("button",{style:{...a,fontSize:"0.65rem"},onClick:()=>l(`/issues/${t.id}`,{method:"PATCH",body:JSON.stringify({resolved:!1})}),children:"↻ Reopen"}),e.jsx("button",{style:{...a,fontSize:"0.65rem",color:"#c66"},onClick:()=>{confirm(`Delete issue "${t.title}"?`)&&l(`/issues/${t.id}`,{method:"DELETE"})},children:"🗑 Delete"})]}):e.jsx("button",{style:{...a,fontSize:"0.65rem",background:"rgba(68,204,68,0.15)",color:"#4c4",border:"1px solid rgba(68,204,68,0.3)"},onClick:()=>l(`/issues/${t.id}`,{method:"PATCH",body:JSON.stringify({resolved:!0})}),children:"✓ Resolve"}),e.jsx("button",{style:{...a,fontSize:"0.65rem"},onClick:()=>B(t),children:"✎ Edit"})]}),v===t.id&&e.jsxs("div",{style:{marginTop:4,padding:4,background:"#222",borderRadius:3},children:[e.jsxs("div",{style:{display:"flex",gap:4,marginBottom:4},children:[e.jsx("input",{value:p,onChange:o=>j(o.target.value),style:{...i,flex:1}}),e.jsxs("select",{value:C,onChange:o=>z(o.target.value),style:N,children:[e.jsx("option",{value:"plugin",children:"Plugin"}),e.jsx("option",{value:"overlord",children:"Overlord"}),e.jsx("option",{value:"nav",children:"Nav"}),e.jsx("option",{value:"macro",children:"Macro"}),e.jsx("option",{value:"other",children:"Other"})]})]}),e.jsxs("div",{style:{display:"flex",gap:4},children:[e.jsx("textarea",{value:b,onChange:o=>S(o.target.value),rows:2,style:{...i,flex:1,fontSize:"0.75rem",resize:"vertical"}}),e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:2},children:[e.jsx("button",{style:{...g,fontSize:"0.7rem",padding:"3px 8px"},onClick:()=>I(t.id),children:"Save"}),e.jsx("button",{style:{...a},onClick:()=>d(null),children:"Cancel"})]})]})]}),e.jsxs("div",{style:{marginTop:4,paddingTop:4,borderTop:"1px solid #2a2a2a"},children:[D.length===0?e.jsx("div",{style:{color:"#555",fontSize:"0.7rem",padding:"2px 0"},children:"No comments yet"}):D.map(o=>e.jsxs("div",{style:{marginBottom:3,fontSize:"0.72rem"},children:[e.jsx("span",{style:{color:"#8ac",fontWeight:500},children:o.author||"Anonymous"}),e.jsx("span",{style:{color:"#555",marginLeft:6,fontSize:"0.6rem"},children:o.created?new Date(o.created).toLocaleDateString("sv-SE"):""}),e.jsx("div",{style:{color:"#bbb",marginTop:1},children:o.text})]},o.id)),e.jsxs("div",{style:{display:"flex",gap:4,marginTop:3},children:[e.jsx("input",{value:T[t.id]||"",onChange:o=>k(J=>({...J,[t.id]:o.target.value})),placeholder:"Add a comment...",style:{...i,flex:1,fontSize:"0.75rem"},onKeyDown:o=>{o.key==="Enter"&&w(t.id)}}),e.jsx("button",{style:{...g,fontSize:"0.7rem",padding:"3px 8px"},onClick:()=>w(t.id),children:"Post"})]})]})]},t.id)})]}),e.jsxs("div",{style:{padding:6,borderTop:"1px solid #333"},children:[e.jsxs("div",{style:{display:"flex",gap:4,marginBottom:4},children:[e.jsx("input",{value:c,onChange:t=>m(t.target.value),placeholder:"Issue title...",style:{...i,flex:1},onKeyDown:t=>{t.key==="Enter"&&E()}}),e.jsxs("select",{value:f,onChange:t=>$(t.target.value),style:N,children:[e.jsx("option",{value:"plugin",children:"Plugin"}),e.jsx("option",{value:"overlord",children:"Overlord"}),e.jsx("option",{value:"nav",children:"Nav"}),e.jsx("option",{value:"macro",children:"Macro"}),e.jsx("option",{value:"other",children:"Other"})]})]}),e.jsxs("div",{style:{display:"flex",gap:4},children:[e.jsx("textarea",{value:y,onChange:t=>u(t.target.value),placeholder:"Description (optional)...",rows:2,style:{...i,flex:1,fontSize:"0.75rem",resize:"vertical"}}),e.jsx("button",{style:{...g,alignSelf:"flex-end"},onClick:E,children:"Add"})]})]})]})};export{F as IssuesWindow}; +import{r as n,a as W,j as e,D as L}from"./index-DtA97zvw.js";import"./react-yfL0ty4i.js";const O={plugin:{label:"Plugin",color:"#8844cc"},overlord:{label:"Overlord",color:"#4488cc"},nav:{label:"Nav",color:"#44aa44"},macro:{label:"Macro",color:"#cc8844"},other:{label:"Other",color:"#888888"}},i={padding:"3px 6px",fontSize:"0.8rem",border:"1px solid #555",background:"#2a2a2a",color:"#ddd",borderRadius:0},N={...i,fontSize:"0.75rem"},g={padding:"4px 12px",background:"#4a80c0",color:"#fff",border:"1px solid #336699",cursor:"pointer",fontSize:"0.75rem"},a={padding:"3px 8px",background:"#444",color:"#ccc",border:"1px solid #555",cursor:"pointer",fontSize:"0.7rem"},F=({id:P,zIndex:A})=>{const[h,R]=n.useState([]),[c,m]=n.useState(""),[y,u]=n.useState(""),[f,$]=n.useState("plugin"),[v,d]=n.useState(null),[p,j]=n.useState(""),[b,S]=n.useState(""),[C,z]=n.useState(""),[T,k]=n.useState({}),x=n.useCallback(async()=>{try{const t=await W("/issues");R((t.issues??[]).sort((r,s)=>(r.resolved?1:0)-(s.resolved?1:0)))}catch{}},[]);n.useEffect(()=>{x()},[x]);const l=async(t,r)=>{await fetch(`/api${t}`,{...r,credentials:"include",headers:{"Content-Type":"application/json",...r.headers}}),x()},E=async()=>{c.trim()&&(await l("/issues",{method:"POST",body:JSON.stringify({title:c.trim(),description:y.trim(),category:f})}),m(""),u(""))},B=t=>{if(v===t.id){d(null);return}d(t.id),j(t.title),S(t.description||""),z(t.category||"other")},I=async t=>{p.trim()&&(await l(`/issues/${t}`,{method:"PATCH",body:JSON.stringify({title:p.trim(),description:b.trim(),category:C})}),d(null))},w=async t=>{const r=(T[t]||"").trim();r&&(await l(`/issues/${t}/comments`,{method:"POST",body:JSON.stringify({text:r})}),k(s=>({...s,[t]:""})))};return e.jsxs(L,{id:P,title:"Issues Board",zIndex:A,width:540,height:520,children:[e.jsxs("div",{style:{flex:1,overflowY:"auto",padding:6,fontSize:"0.8rem"},children:[h.length===0&&e.jsx("div",{style:{padding:10,color:"#888",textAlign:"center"},children:"No open issues"}),h.map(t=>{const r=O[t.category]||O.other,s=t.created?new Date(t.created).toLocaleDateString("sv-SE"):"",D=t.comments||[];return e.jsxs("div",{style:{padding:"6px 8px",marginBottom:4,background:"#1f1f1f",borderRadius:3,border:"1px solid #333",opacity:t.resolved?.55:1},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,flexWrap:"wrap"},children:[e.jsx("span",{style:{fontSize:"0.65rem",padding:"1px 6px",borderRadius:3,background:r.color,color:"#fff",fontWeight:600},children:r.label}),e.jsx("strong",{style:{fontSize:"0.8rem",flex:1},children:t.title}),e.jsxs("span",{style:{fontSize:"0.65rem",color:"#888"},children:["by ",t.author||"User"]}),e.jsx("span",{style:{color:"#666",fontSize:"0.65rem"},children:s})]}),t.description&&e.jsx("div",{style:{color:"#999",marginTop:3,fontSize:"0.75rem"},children:t.description}),e.jsxs("div",{style:{display:"flex",gap:4,marginTop:4},children:[t.resolved?e.jsxs(e.Fragment,{children:[e.jsx("button",{style:{...a,fontSize:"0.65rem"},onClick:()=>l(`/issues/${t.id}`,{method:"PATCH",body:JSON.stringify({resolved:!1})}),children:"↻ Reopen"}),e.jsx("button",{style:{...a,fontSize:"0.65rem",color:"#c66"},onClick:()=>{confirm(`Delete issue "${t.title}"?`)&&l(`/issues/${t.id}`,{method:"DELETE"})},children:"🗑 Delete"})]}):e.jsx("button",{style:{...a,fontSize:"0.65rem",background:"rgba(68,204,68,0.15)",color:"#4c4",border:"1px solid rgba(68,204,68,0.3)"},onClick:()=>l(`/issues/${t.id}`,{method:"PATCH",body:JSON.stringify({resolved:!0})}),children:"✓ Resolve"}),e.jsx("button",{style:{...a,fontSize:"0.65rem"},onClick:()=>B(t),children:"✎ Edit"})]}),v===t.id&&e.jsxs("div",{style:{marginTop:4,padding:4,background:"#222",borderRadius:3},children:[e.jsxs("div",{style:{display:"flex",gap:4,marginBottom:4},children:[e.jsx("input",{value:p,onChange:o=>j(o.target.value),style:{...i,flex:1}}),e.jsxs("select",{value:C,onChange:o=>z(o.target.value),style:N,children:[e.jsx("option",{value:"plugin",children:"Plugin"}),e.jsx("option",{value:"overlord",children:"Overlord"}),e.jsx("option",{value:"nav",children:"Nav"}),e.jsx("option",{value:"macro",children:"Macro"}),e.jsx("option",{value:"other",children:"Other"})]})]}),e.jsxs("div",{style:{display:"flex",gap:4},children:[e.jsx("textarea",{value:b,onChange:o=>S(o.target.value),rows:2,style:{...i,flex:1,fontSize:"0.75rem",resize:"vertical"}}),e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:2},children:[e.jsx("button",{style:{...g,fontSize:"0.7rem",padding:"3px 8px"},onClick:()=>I(t.id),children:"Save"}),e.jsx("button",{style:{...a},onClick:()=>d(null),children:"Cancel"})]})]})]}),e.jsxs("div",{style:{marginTop:4,paddingTop:4,borderTop:"1px solid #2a2a2a"},children:[D.length===0?e.jsx("div",{style:{color:"#555",fontSize:"0.7rem",padding:"2px 0"},children:"No comments yet"}):D.map(o=>e.jsxs("div",{style:{marginBottom:3,fontSize:"0.72rem"},children:[e.jsx("span",{style:{color:"#8ac",fontWeight:500},children:o.author||"Anonymous"}),e.jsx("span",{style:{color:"#555",marginLeft:6,fontSize:"0.6rem"},children:o.created?new Date(o.created).toLocaleDateString("sv-SE"):""}),e.jsx("div",{style:{color:"#bbb",marginTop:1},children:o.text})]},o.id)),e.jsxs("div",{style:{display:"flex",gap:4,marginTop:3},children:[e.jsx("input",{value:T[t.id]||"",onChange:o=>k(J=>({...J,[t.id]:o.target.value})),placeholder:"Add a comment...",style:{...i,flex:1,fontSize:"0.75rem"},onKeyDown:o=>{o.key==="Enter"&&w(t.id)}}),e.jsx("button",{style:{...g,fontSize:"0.7rem",padding:"3px 8px"},onClick:()=>w(t.id),children:"Post"})]})]})]},t.id)})]}),e.jsxs("div",{style:{padding:6,borderTop:"1px solid #333"},children:[e.jsxs("div",{style:{display:"flex",gap:4,marginBottom:4},children:[e.jsx("input",{value:c,onChange:t=>m(t.target.value),placeholder:"Issue title...",style:{...i,flex:1},onKeyDown:t=>{t.key==="Enter"&&E()}}),e.jsxs("select",{value:f,onChange:t=>$(t.target.value),style:N,children:[e.jsx("option",{value:"plugin",children:"Plugin"}),e.jsx("option",{value:"overlord",children:"Overlord"}),e.jsx("option",{value:"nav",children:"Nav"}),e.jsx("option",{value:"macro",children:"Macro"}),e.jsx("option",{value:"other",children:"Other"})]})]}),e.jsxs("div",{style:{display:"flex",gap:4},children:[e.jsx("textarea",{value:y,onChange:t=>u(t.target.value),placeholder:"Description (optional)...",rows:2,style:{...i,flex:1,fontSize:"0.75rem",resize:"vertical"}}),e.jsx("button",{style:{...g,alignSelf:"flex-end"},onClick:E,children:"Add"})]})]})]})};export{F as IssuesWindow}; diff --git a/static/assets/QuestStatusWindow-DwtlXaE5.js b/static/assets/QuestStatusWindow-1bRYpy_f.js similarity index 96% rename from static/assets/QuestStatusWindow-DwtlXaE5.js rename to static/assets/QuestStatusWindow-1bRYpy_f.js index b489f6d6..f7257cfe 100644 --- a/static/assets/QuestStatusWindow-DwtlXaE5.js +++ b/static/assets/QuestStatusWindow-1bRYpy_f.js @@ -1 +1 @@ -import{r as c,j as t,D as u,a as f}from"./index-DlaI7zTK.js";import"./react-yfL0ty4i.js";const j=({id:p,zIndex:x})=>{const[s,h]=c.useState(null);c.useEffect(()=>{const e=async()=>{try{h(await f("/quest-status"))}catch{}};e();const o=setInterval(e,3e4);return()=>clearInterval(o)},[]);const i=s?Object.keys(s.quest_data).sort():[],l=new Set;if(s)for(const e of Object.values(s.quest_data))for(const o of Object.keys(e))l.add(o);const n=Array.from(l).sort();return t.jsx(u,{id:p,title:"Quest Status",zIndex:x,width:780,height:500,children:t.jsx("div",{style:{flex:1,overflow:"auto",fontSize:"0.72rem"},children:s?i.length===0?t.jsx("div",{style:{padding:20,color:"#666",textAlign:"center"},children:"No quest data available"}):t.jsxs("table",{style:{width:"100%",borderCollapse:"collapse"},children:[t.jsx("thead",{children:t.jsxs("tr",{style:{position:"sticky",top:0,background:"#1a1a1a",zIndex:1},children:[t.jsx("th",{style:{textAlign:"left",padding:"4px 8px",borderBottom:"1px solid #444",color:"#888",fontSize:"0.65rem",fontWeight:600,minWidth:140},children:"Character"}),n.map(e=>t.jsx("th",{style:{textAlign:"center",padding:"4px 6px",borderBottom:"1px solid #444",color:"#888",fontSize:"0.6rem",fontWeight:600,maxWidth:120,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:e,children:e.replace(" Timer","").replace(" Pickup","")},e))]})}),t.jsx("tbody",{children:i.map(e=>{const o=s.quest_data[e]||{};return t.jsxs("tr",{style:{borderBottom:"1px solid #222"},children:[t.jsx("td",{style:{padding:"3px 8px",color:"#ccc",fontWeight:500,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:160},children:e}),n.map(d=>{const r=o[d],a=r==="READY";return t.jsx("td",{style:{textAlign:"center",padding:"3px 6px",color:a?"#4c4":r?"#ca0":"#333",fontWeight:a?600:400,fontSize:a?"0.7rem":"0.68rem"},children:r||"—"},d)})]},e)})})]}):t.jsx("div",{style:{padding:20,color:"#666",textAlign:"center"},children:"Loading quest data..."})})})};export{j as QuestStatusWindow}; +import{r as c,j as t,D as u,a as f}from"./index-DtA97zvw.js";import"./react-yfL0ty4i.js";const j=({id:p,zIndex:x})=>{const[s,h]=c.useState(null);c.useEffect(()=>{const e=async()=>{try{h(await f("/quest-status"))}catch{}};e();const o=setInterval(e,3e4);return()=>clearInterval(o)},[]);const i=s?Object.keys(s.quest_data).sort():[],l=new Set;if(s)for(const e of Object.values(s.quest_data))for(const o of Object.keys(e))l.add(o);const n=Array.from(l).sort();return t.jsx(u,{id:p,title:"Quest Status",zIndex:x,width:780,height:500,children:t.jsx("div",{style:{flex:1,overflow:"auto",fontSize:"0.72rem"},children:s?i.length===0?t.jsx("div",{style:{padding:20,color:"#666",textAlign:"center"},children:"No quest data available"}):t.jsxs("table",{style:{width:"100%",borderCollapse:"collapse"},children:[t.jsx("thead",{children:t.jsxs("tr",{style:{position:"sticky",top:0,background:"#1a1a1a",zIndex:1},children:[t.jsx("th",{style:{textAlign:"left",padding:"4px 8px",borderBottom:"1px solid #444",color:"#888",fontSize:"0.65rem",fontWeight:600,minWidth:140},children:"Character"}),n.map(e=>t.jsx("th",{style:{textAlign:"center",padding:"4px 6px",borderBottom:"1px solid #444",color:"#888",fontSize:"0.6rem",fontWeight:600,maxWidth:120,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:e,children:e.replace(" Timer","").replace(" Pickup","")},e))]})}),t.jsx("tbody",{children:i.map(e=>{const o=s.quest_data[e]||{};return t.jsxs("tr",{style:{borderBottom:"1px solid #222"},children:[t.jsx("td",{style:{padding:"3px 8px",color:"#ccc",fontWeight:500,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:160},children:e}),n.map(d=>{const r=o[d],a=r==="READY";return t.jsx("td",{style:{textAlign:"center",padding:"3px 6px",color:a?"#4c4":r?"#ca0":"#333",fontWeight:a?600:400,fontSize:a?"0.7rem":"0.68rem"},children:r||"—"},d)})]},e)})})]}):t.jsx("div",{style:{padding:20,color:"#666",textAlign:"center"},children:"Loading quest data..."})})})};export{j as QuestStatusWindow}; diff --git a/static/assets/RadarWindow-DOYDpoy6.js b/static/assets/RadarWindow-CjHETj1t.js similarity index 99% rename from static/assets/RadarWindow-DOYDpoy6.js rename to static/assets/RadarWindow-CjHETj1t.js index 23405522..7875a92b 100644 --- a/static/assets/RadarWindow-DOYDpoy6.js +++ b/static/assets/RadarWindow-CjHETj1t.js @@ -1 +1 @@ -import{r as x,j as c,D as ne}from"./index-DlaI7zTK.js";import"./react-yfL0ty4i.js";const q=300,H=.5,se={walls:{r:0,g:0,b:255},innerWalls:{r:127,g:127,b:255},rampedWalls:{r:77,g:255,b:255},floors:{r:0,g:127,b:255},stairs:{r:0,g:63,b:255}},le={walls:{r:140,g:140,b:180},innerWalls:{r:100,g:100,b:140},rampedWalls:{r:120,g:160,b:120},floors:{r:60,g:80,b:60},stairs:{r:180,g:160,b:80}};function oe(d){const g=document.createElement("canvas");g.width=10,g.height=10;const w=g.getContext("2d");w.drawImage(d,0,0,10,10);const a=w.getImageData(0,0,10,10),t=a.data;for(let p=0;p240&&R>240&&k>240){t[p+3]=0;continue}let E=!1;for(const[L,I]of Object.entries(se))if(Math.abs(_-I.r)<15&&Math.abs(R-I.g)<15&&Math.abs(k-I.b)<15){const W=le[L];t[p]=W.r,t[p+1]=W.g,t[p+2]=W.b,E=!0;break}!E&&_<15&&R<15&&k<15&&(t[p+3]=100)}return w.putImageData(a,0,0),g}function ie(d){return d===1?Math.PI:d<-.7&&d>-.8?Math.PI/2:d>.7&&d<.8?-Math.PI/2:0}let A=null;function ce(){A||(A={},fetch("/dungeon_tiles.json").then(d=>d.json()).then(d=>{Object.entries(d).forEach(([g,w])=>{const a=new Image;a.onload=()=>{A[g]=oe(a)},a.src=w})}).catch(()=>{}))}const K={Monster:"#ff4444",Player:"#4488ff",NPC:"#44cc44",Vendor:"#44cc44",Portal:"#aa44ff",Corpse:"#ff8800",Container:"#cccc44",Door:"#888888"};function re(d){const g=(d%360+360)%360;return["N","NE","E","SE","S","SW","W","NW"][Math.round(g/45)%8]}const fe=({id:d,charName:g,zIndex:w,socket:a,radarData:t})=>{const p=x.useRef(null),_=x.useRef(H),[R,k]=x.useState(H),[E,L]=x.useState(null),I=x.useRef(null),W=x.useRef([]);x.useEffect(()=>{const n=new Image;n.src="/dereth.png",n.onload=()=>{I.current=n},ce()},[]),x.useEffect(()=>((a==null?void 0:a.readyState)===WebSocket.OPEN&&a.send(JSON.stringify({player_name:g,command:"start_radar"})),()=>{(a==null?void 0:a.readyState)===WebSocket.OPEN&&a.send(JSON.stringify({player_name:g,command:"stop_radar"}))}),[g,a]);const Q=x.useCallback(n=>{n.preventDefault();const e=n.deltaY>0?1.25:.8;_.current=Math.max(.02,Math.min(5,_.current*e)),k(_.current)},[]),D=x.useCallback(n=>{const e=p.current;if(!e)return;const o=e.getBoundingClientRect(),s=(n.clientX-o.left)*(e.width/o.width),r=(n.clientY-o.top)*(e.height/o.height);let M=null,u=20;W.current.forEach(f=>{if(f._px===void 0)return;const S=Math.sqrt((s-f._px)**2+(r-f._py)**2);S{var G;const n=p.current;if(!n||!t)return;const e=n.getContext("2d");if(!e)return;const o=q,s=o/2,r=o/2,M=t.objects??[],u=t.player_ew??0,f=t.player_ns??0,S=t.player_heading??0,b=t.is_dungeon??!1,V=t.player_x??0,Z=t.player_y??0,Y=_.current,z=b?o/2/(Y*240):o/2/Y,j=S*Math.PI/180;e.clearRect(0,0,o,o),e.fillStyle="#111",e.beginPath(),e.arc(s,r,s,0,Math.PI*2),e.fill(),e.save(),e.beginPath(),e.arc(s,r,s-1,0,Math.PI*2),e.clip();const B=t.landblock??null,te=t.player_raw_z??0;if(b&&B&&((G=window.__dungeonMapCache)!=null&&G[B])){const l=window.__dungeonMapCache[B],h=Math.floor((te+3)/6)*6;e.translate(s,r),e.rotate(-(S-180)*Math.PI/180);const i=10*z,O=A&&Object.keys(A).length>0;(l.z_levels||[]).slice().sort((y,m)=>(y.z===h?1:0)-(m.z===h?1:0)).forEach(y=>{const m=y.z===h;e.globalAlpha=m?.85:.12,(y.cells||[]).forEach(T=>{const P=-(T.x-V)*z,N=(T.y-Z)*z,C=O?A[String(T.env_id)]:null;C?(e.save(),e.translate(P,N),e.rotate(ie(T.rotation)),e.drawImage(C,-i/2,-i/2,i,i),e.restore()):(e.fillStyle=m?"#3a5a3a":"#1a2a1a",e.fillRect(P-i/2,N-i/2,i,i))})}),e.globalAlpha=1,e.setTransform(1,0,0,1,0,0)}else if(!b&&I.current){const l=I.current,h=l.naturalWidth/204.2,i=(u+102.1)*h,O=(102.1-f)*h;e.globalAlpha=.4,e.save(),e.translate(s,r),e.rotate(-j);const v=Y*h*2;e.drawImage(l,i-v/2,O-v/2,v,v,-s,-r,o,o),e.restore(),e.globalAlpha=1}e.restore(),e.strokeStyle="#333",e.lineWidth=1;for(let l=1;l<=4;l++)e.beginPath(),e.arc(s,r,s/4*l,0,Math.PI*2),e.stroke();e.beginPath(),e.moveTo(s,0),e.lineTo(s,o),e.moveTo(0,r),e.lineTo(o,r),e.stroke(),e.font="bold 12px monospace",e.textAlign="center",e.textBaseline="middle",[{l:"N",a:0},{l:"E",a:Math.PI/2},{l:"S",a:Math.PI},{l:"W",a:-Math.PI/2}].forEach(({l,a:h})=>{const i=h-j;e.fillStyle=l==="N"?"#cc4444":"#888",e.fillText(l,s+Math.sin(i)*(s-12),r-Math.cos(i)*(s-12))}),e.strokeStyle="#666",e.lineWidth=1,e.beginPath(),e.moveTo(s,r),e.lineTo(s,r-s*.85),e.stroke();const $=b?Math.PI-j:j,X=Math.cos($),F=Math.sin($);M.forEach(l=>{let h,i;b&&l.raw_x!==void 0?(h=-(l.raw_x-V),i=l.raw_y-Z):(h=(l.ew??0)-u,i=(l.ns??0)-f);const O=h*X-i*F,v=b?h*F+i*X:-(h*F+i*X),y=s+O*z,m=r+v*z;if(Math.sqrt((y-s)**2+(m-r)**2)>s-4)return;l._px=y,l._py=m;const P=l.object_class??l.type??"",N=K[P]??"#888",C=l.id===E,J=C?6:P==="Monster"||P==="Player"?4:3;C&&(e.strokeStyle="#fff",e.lineWidth=2,e.beginPath(),e.arc(y,m,J+3,0,Math.PI*2),e.stroke()),e.fillStyle=N,e.beginPath(),e.arc(y,m,J,0,Math.PI*2),e.fill(),(P==="Player"||P==="Portal"||C)&&(e.fillStyle=C?"#fff":N,e.font="9px monospace",e.textAlign="left",e.fillText(l.name,y+6,m+3))}),W.current=M,e.fillStyle="#ffcc00",e.beginPath(),e.arc(s,r,5,0,Math.PI*2),e.fill(),e.strokeStyle="#fff",e.lineWidth=1,e.stroke()},[t,R,E]);const U=((t==null?void 0:t.objects)??[]).map(n=>{const e=(t==null?void 0:t.player_ew)??0,o=(t==null?void 0:t.player_ns)??0,s=(t==null?void 0:t.is_dungeon)??!1,r=(t==null?void 0:t.player_x)??0,M=(t==null?void 0:t.player_y)??0;let u,f,S;s&&n.raw_x!==void 0?(u=-(n.raw_x-r),f=n.raw_y-M,S=Math.sqrt(u*u+f*f)):(u=(n.ew??0)-e,f=(n.ns??0)-o,S=Math.sqrt(u*u+f*f)*240);const b=Math.atan2(u,f)*180/Math.PI;return{...n,dist:S,dir:re(b)}}).sort((n,e)=>n.dist-e.dist),ee=Math.round(R*240);return c.jsxs(ne,{id:d,title:`Radar: ${g}`,zIndex:w,width:360,height:560,children:[c.jsxs("div",{style:{padding:"4px 8px",display:"flex",justifyContent:"space-between",fontSize:"0.75rem",color:"#888",borderBottom:"1px solid #333",background:"#1a1a1a"},children:[c.jsxs("span",{children:["Range: ~",ee,"m"]}),c.jsx("span",{style:{fontSize:"0.65rem",color:"#555"},children:"Scroll to zoom"})]}),c.jsx("canvas",{ref:p,width:q,height:q,style:{display:"block",margin:"0 auto",borderBottom:"1px solid #333",cursor:"crosshair",flexShrink:0},onWheel:Q,onClick:D}),c.jsxs("div",{style:{flex:1,overflowY:"auto",fontSize:"0.72rem",minHeight:0},children:[c.jsxs("div",{style:{display:"flex",padding:"3px 6px",borderBottom:"1px solid #333",color:"#666",fontSize:"0.65rem",fontWeight:600},children:[c.jsx("span",{style:{width:8}}),c.jsx("span",{style:{flex:1,marginLeft:6},children:"Name"}),c.jsx("span",{style:{width:55,textAlign:"left"},children:"Type"}),c.jsx("span",{style:{width:40,textAlign:"right"},children:"Dist"}),c.jsx("span",{style:{width:24,textAlign:"center"},children:"Dir"})]}),U.length===0&&c.jsx("div",{style:{padding:12,color:"#555",textAlign:"center",fontSize:"0.7rem"},children:"Waiting for radar data..."}),U.map(n=>{const e=n.object_class??n.type??"",o=K[e]??"#888",s=n.id===E;return c.jsxs("div",{onClick:()=>L(s?null:n.id),style:{display:"flex",alignItems:"center",padding:"2px 6px",borderBottom:"1px solid #1a1a1a",cursor:"pointer",color:"#ccc",background:s?"#1a2a3a":"",borderLeft:s?"2px solid #4488ff":"2px solid transparent"},children:[c.jsx("span",{style:{width:8,height:8,borderRadius:"50%",background:o,flexShrink:0}}),c.jsx("span",{style:{flex:1,marginLeft:6,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:n.name}),c.jsx("span",{style:{width:55,color:"#888",fontSize:"0.65rem"},children:e}),c.jsx("span",{style:{width:40,textAlign:"right",fontVariantNumeric:"tabular-nums"},children:n.dist<1e3?`${Math.round(n.dist)}m`:`${(n.dist/1e3).toFixed(1)}km`}),c.jsx("span",{style:{width:24,textAlign:"center",color:"#666"},children:n.dir})]},n.id)})]})]})};export{fe as RadarWindow}; +import{r as x,j as c,D as ne}from"./index-DtA97zvw.js";import"./react-yfL0ty4i.js";const q=300,H=.5,se={walls:{r:0,g:0,b:255},innerWalls:{r:127,g:127,b:255},rampedWalls:{r:77,g:255,b:255},floors:{r:0,g:127,b:255},stairs:{r:0,g:63,b:255}},le={walls:{r:140,g:140,b:180},innerWalls:{r:100,g:100,b:140},rampedWalls:{r:120,g:160,b:120},floors:{r:60,g:80,b:60},stairs:{r:180,g:160,b:80}};function oe(d){const g=document.createElement("canvas");g.width=10,g.height=10;const w=g.getContext("2d");w.drawImage(d,0,0,10,10);const a=w.getImageData(0,0,10,10),t=a.data;for(let p=0;p240&&R>240&&k>240){t[p+3]=0;continue}let E=!1;for(const[L,I]of Object.entries(se))if(Math.abs(_-I.r)<15&&Math.abs(R-I.g)<15&&Math.abs(k-I.b)<15){const W=le[L];t[p]=W.r,t[p+1]=W.g,t[p+2]=W.b,E=!0;break}!E&&_<15&&R<15&&k<15&&(t[p+3]=100)}return w.putImageData(a,0,0),g}function ie(d){return d===1?Math.PI:d<-.7&&d>-.8?Math.PI/2:d>.7&&d<.8?-Math.PI/2:0}let A=null;function ce(){A||(A={},fetch("/dungeon_tiles.json").then(d=>d.json()).then(d=>{Object.entries(d).forEach(([g,w])=>{const a=new Image;a.onload=()=>{A[g]=oe(a)},a.src=w})}).catch(()=>{}))}const K={Monster:"#ff4444",Player:"#4488ff",NPC:"#44cc44",Vendor:"#44cc44",Portal:"#aa44ff",Corpse:"#ff8800",Container:"#cccc44",Door:"#888888"};function re(d){const g=(d%360+360)%360;return["N","NE","E","SE","S","SW","W","NW"][Math.round(g/45)%8]}const fe=({id:d,charName:g,zIndex:w,socket:a,radarData:t})=>{const p=x.useRef(null),_=x.useRef(H),[R,k]=x.useState(H),[E,L]=x.useState(null),I=x.useRef(null),W=x.useRef([]);x.useEffect(()=>{const n=new Image;n.src="/dereth.png",n.onload=()=>{I.current=n},ce()},[]),x.useEffect(()=>((a==null?void 0:a.readyState)===WebSocket.OPEN&&a.send(JSON.stringify({player_name:g,command:"start_radar"})),()=>{(a==null?void 0:a.readyState)===WebSocket.OPEN&&a.send(JSON.stringify({player_name:g,command:"stop_radar"}))}),[g,a]);const Q=x.useCallback(n=>{n.preventDefault();const e=n.deltaY>0?1.25:.8;_.current=Math.max(.02,Math.min(5,_.current*e)),k(_.current)},[]),D=x.useCallback(n=>{const e=p.current;if(!e)return;const o=e.getBoundingClientRect(),s=(n.clientX-o.left)*(e.width/o.width),r=(n.clientY-o.top)*(e.height/o.height);let M=null,u=20;W.current.forEach(f=>{if(f._px===void 0)return;const S=Math.sqrt((s-f._px)**2+(r-f._py)**2);S{var G;const n=p.current;if(!n||!t)return;const e=n.getContext("2d");if(!e)return;const o=q,s=o/2,r=o/2,M=t.objects??[],u=t.player_ew??0,f=t.player_ns??0,S=t.player_heading??0,b=t.is_dungeon??!1,V=t.player_x??0,Z=t.player_y??0,Y=_.current,z=b?o/2/(Y*240):o/2/Y,j=S*Math.PI/180;e.clearRect(0,0,o,o),e.fillStyle="#111",e.beginPath(),e.arc(s,r,s,0,Math.PI*2),e.fill(),e.save(),e.beginPath(),e.arc(s,r,s-1,0,Math.PI*2),e.clip();const B=t.landblock??null,te=t.player_raw_z??0;if(b&&B&&((G=window.__dungeonMapCache)!=null&&G[B])){const l=window.__dungeonMapCache[B],h=Math.floor((te+3)/6)*6;e.translate(s,r),e.rotate(-(S-180)*Math.PI/180);const i=10*z,O=A&&Object.keys(A).length>0;(l.z_levels||[]).slice().sort((y,m)=>(y.z===h?1:0)-(m.z===h?1:0)).forEach(y=>{const m=y.z===h;e.globalAlpha=m?.85:.12,(y.cells||[]).forEach(T=>{const P=-(T.x-V)*z,N=(T.y-Z)*z,C=O?A[String(T.env_id)]:null;C?(e.save(),e.translate(P,N),e.rotate(ie(T.rotation)),e.drawImage(C,-i/2,-i/2,i,i),e.restore()):(e.fillStyle=m?"#3a5a3a":"#1a2a1a",e.fillRect(P-i/2,N-i/2,i,i))})}),e.globalAlpha=1,e.setTransform(1,0,0,1,0,0)}else if(!b&&I.current){const l=I.current,h=l.naturalWidth/204.2,i=(u+102.1)*h,O=(102.1-f)*h;e.globalAlpha=.4,e.save(),e.translate(s,r),e.rotate(-j);const v=Y*h*2;e.drawImage(l,i-v/2,O-v/2,v,v,-s,-r,o,o),e.restore(),e.globalAlpha=1}e.restore(),e.strokeStyle="#333",e.lineWidth=1;for(let l=1;l<=4;l++)e.beginPath(),e.arc(s,r,s/4*l,0,Math.PI*2),e.stroke();e.beginPath(),e.moveTo(s,0),e.lineTo(s,o),e.moveTo(0,r),e.lineTo(o,r),e.stroke(),e.font="bold 12px monospace",e.textAlign="center",e.textBaseline="middle",[{l:"N",a:0},{l:"E",a:Math.PI/2},{l:"S",a:Math.PI},{l:"W",a:-Math.PI/2}].forEach(({l,a:h})=>{const i=h-j;e.fillStyle=l==="N"?"#cc4444":"#888",e.fillText(l,s+Math.sin(i)*(s-12),r-Math.cos(i)*(s-12))}),e.strokeStyle="#666",e.lineWidth=1,e.beginPath(),e.moveTo(s,r),e.lineTo(s,r-s*.85),e.stroke();const $=b?Math.PI-j:j,X=Math.cos($),F=Math.sin($);M.forEach(l=>{let h,i;b&&l.raw_x!==void 0?(h=-(l.raw_x-V),i=l.raw_y-Z):(h=(l.ew??0)-u,i=(l.ns??0)-f);const O=h*X-i*F,v=b?h*F+i*X:-(h*F+i*X),y=s+O*z,m=r+v*z;if(Math.sqrt((y-s)**2+(m-r)**2)>s-4)return;l._px=y,l._py=m;const P=l.object_class??l.type??"",N=K[P]??"#888",C=l.id===E,J=C?6:P==="Monster"||P==="Player"?4:3;C&&(e.strokeStyle="#fff",e.lineWidth=2,e.beginPath(),e.arc(y,m,J+3,0,Math.PI*2),e.stroke()),e.fillStyle=N,e.beginPath(),e.arc(y,m,J,0,Math.PI*2),e.fill(),(P==="Player"||P==="Portal"||C)&&(e.fillStyle=C?"#fff":N,e.font="9px monospace",e.textAlign="left",e.fillText(l.name,y+6,m+3))}),W.current=M,e.fillStyle="#ffcc00",e.beginPath(),e.arc(s,r,5,0,Math.PI*2),e.fill(),e.strokeStyle="#fff",e.lineWidth=1,e.stroke()},[t,R,E]);const U=((t==null?void 0:t.objects)??[]).map(n=>{const e=(t==null?void 0:t.player_ew)??0,o=(t==null?void 0:t.player_ns)??0,s=(t==null?void 0:t.is_dungeon)??!1,r=(t==null?void 0:t.player_x)??0,M=(t==null?void 0:t.player_y)??0;let u,f,S;s&&n.raw_x!==void 0?(u=-(n.raw_x-r),f=n.raw_y-M,S=Math.sqrt(u*u+f*f)):(u=(n.ew??0)-e,f=(n.ns??0)-o,S=Math.sqrt(u*u+f*f)*240);const b=Math.atan2(u,f)*180/Math.PI;return{...n,dist:S,dir:re(b)}}).sort((n,e)=>n.dist-e.dist),ee=Math.round(R*240);return c.jsxs(ne,{id:d,title:`Radar: ${g}`,zIndex:w,width:360,height:560,children:[c.jsxs("div",{style:{padding:"4px 8px",display:"flex",justifyContent:"space-between",fontSize:"0.75rem",color:"#888",borderBottom:"1px solid #333",background:"#1a1a1a"},children:[c.jsxs("span",{children:["Range: ~",ee,"m"]}),c.jsx("span",{style:{fontSize:"0.65rem",color:"#555"},children:"Scroll to zoom"})]}),c.jsx("canvas",{ref:p,width:q,height:q,style:{display:"block",margin:"0 auto",borderBottom:"1px solid #333",cursor:"crosshair",flexShrink:0},onWheel:Q,onClick:D}),c.jsxs("div",{style:{flex:1,overflowY:"auto",fontSize:"0.72rem",minHeight:0},children:[c.jsxs("div",{style:{display:"flex",padding:"3px 6px",borderBottom:"1px solid #333",color:"#666",fontSize:"0.65rem",fontWeight:600},children:[c.jsx("span",{style:{width:8}}),c.jsx("span",{style:{flex:1,marginLeft:6},children:"Name"}),c.jsx("span",{style:{width:55,textAlign:"left"},children:"Type"}),c.jsx("span",{style:{width:40,textAlign:"right"},children:"Dist"}),c.jsx("span",{style:{width:24,textAlign:"center"},children:"Dir"})]}),U.length===0&&c.jsx("div",{style:{padding:12,color:"#555",textAlign:"center",fontSize:"0.7rem"},children:"Waiting for radar data..."}),U.map(n=>{const e=n.object_class??n.type??"",o=K[e]??"#888",s=n.id===E;return c.jsxs("div",{onClick:()=>L(s?null:n.id),style:{display:"flex",alignItems:"center",padding:"2px 6px",borderBottom:"1px solid #1a1a1a",cursor:"pointer",color:"#ccc",background:s?"#1a2a3a":"",borderLeft:s?"2px solid #4488ff":"2px solid transparent"},children:[c.jsx("span",{style:{width:8,height:8,borderRadius:"50%",background:o,flexShrink:0}}),c.jsx("span",{style:{flex:1,marginLeft:6,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:n.name}),c.jsx("span",{style:{width:55,color:"#888",fontSize:"0.65rem"},children:e}),c.jsx("span",{style:{width:40,textAlign:"right",fontVariantNumeric:"tabular-nums"},children:n.dist<1e3?`${Math.round(n.dist)}m`:`${(n.dist/1e3).toFixed(1)}km`}),c.jsx("span",{style:{width:24,textAlign:"center",color:"#666"},children:n.dir})]},n.id)})]})]})};export{fe as RadarWindow}; diff --git a/static/assets/StatsWindow-C2s91wbD.js b/static/assets/StatsWindow-mORPbi1c.js similarity index 93% rename from static/assets/StatsWindow-C2s91wbD.js rename to static/assets/StatsWindow-mORPbi1c.js index 7d704352..58941400 100644 --- a/static/assets/StatsWindow-C2s91wbD.js +++ b/static/assets/StatsWindow-mORPbi1c.js @@ -1 +1 @@ -import{r as o,j as t,D as d}from"./index-DlaI7zTK.js";import"./react-yfL0ty4i.js";const c=[{title:"Kills per Hour",id:1},{title:"Memory (MB)",id:2},{title:"CPU (%)",id:3},{title:"Mem Handles",id:4}],m=[{label:"1H",value:"now-1h"},{label:"6H",value:"now-6h"},{label:"24H",value:"now-24h"},{label:"7D",value:"now-7d"}],v=({id:s,charName:a,zIndex:i})=>{const[l,r]=o.useState("now-24h"),n=e=>`/grafana/d-solo/dereth-tracker/dereth-tracker-dashboard?panelId=${e}&var-character=${encodeURIComponent(a)}&from=${l}&to=now&theme=light`;return t.jsxs(d,{id:s,title:`Stats: ${a}`,zIndex:i,width:750,height:480,children:[t.jsx("div",{className:"ml-stats-controls",children:m.map(e=>t.jsx("button",{className:`ml-stats-range-btn ${l===e.value?"active":""}`,onClick:()=>r(e.value),children:e.label},e.value))}),t.jsx("div",{className:"ml-stats-grid",children:c.map(e=>t.jsx("div",{className:"ml-stats-panel",children:t.jsx("iframe",{src:n(e.id),width:"100%",height:"100%",frameBorder:"0",title:e.title})},e.id))})]})};export{v as StatsWindow}; +import{r as o,j as t,D as d}from"./index-DtA97zvw.js";import"./react-yfL0ty4i.js";const c=[{title:"Kills per Hour",id:1},{title:"Memory (MB)",id:2},{title:"CPU (%)",id:3},{title:"Mem Handles",id:4}],m=[{label:"1H",value:"now-1h"},{label:"6H",value:"now-6h"},{label:"24H",value:"now-24h"},{label:"7D",value:"now-7d"}],v=({id:s,charName:a,zIndex:i})=>{const[l,r]=o.useState("now-24h"),n=e=>`/grafana/d-solo/dereth-tracker/dereth-tracker-dashboard?panelId=${e}&var-character=${encodeURIComponent(a)}&from=${l}&to=now&theme=light`;return t.jsxs(d,{id:s,title:`Stats: ${a}`,zIndex:i,width:750,height:480,children:[t.jsx("div",{className:"ml-stats-controls",children:m.map(e=>t.jsx("button",{className:`ml-stats-range-btn ${l===e.value?"active":""}`,onClick:()=>r(e.value),children:e.label},e.value))}),t.jsx("div",{className:"ml-stats-grid",children:c.map(e=>t.jsx("div",{className:"ml-stats-panel",children:t.jsx("iframe",{src:n(e.id),width:"100%",height:"100%",frameBorder:"0",title:e.title})},e.id))})]})};export{v as StatsWindow}; diff --git a/static/assets/VitalSharingWindow-Br70fun8.js b/static/assets/VitalSharingWindow-DWxCoItf.js similarity index 97% rename from static/assets/VitalSharingWindow-Br70fun8.js rename to static/assets/VitalSharingWindow-DWxCoItf.js index 461fb838..f11530dd 100644 --- a/static/assets/VitalSharingWindow-Br70fun8.js +++ b/static/assets/VitalSharingWindow-DWxCoItf.js @@ -1 +1 @@ -import{r as n,j as t,D as x,a as m}from"./index-DlaI7zTK.js";import"./react-yfL0ty4i.js";const v=({id:o,zIndex:c})=>{const[a,d]=n.useState([]);n.useEffect(()=>{const e=async()=>{try{const s=await m("/vital-sharing/peers");d(s.peers??[])}catch{}};e();const l=setInterval(e,5e3);return()=>clearInterval(l)},[]);const h=(e,l)=>l>0?Math.min(100,e/l*100):0;return t.jsx(x,{id:o,title:"Vital Sharing Network",zIndex:c,width:520,height:450,children:t.jsx("div",{style:{flex:1,overflowY:"auto",padding:6,fontSize:"0.75rem"},children:a.length===0?t.jsx("div",{style:{padding:16,color:"#666",textAlign:"center"},children:"No vital-sharing peers connected"}):a.map(e=>{var l,s,r;return t.jsxs("div",{style:{padding:"6px 8px",marginBottom:4,background:"#1f1f1f",borderRadius:3,border:"1px solid #333"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:3},children:[t.jsx("span",{style:{color:e.plugin_connected?"#4c4":"#a33",fontSize:"0.8rem"},children:"●"}),t.jsx("strong",{style:{flex:1},children:e.character_name}),e.subscribed&&t.jsx("span",{style:{color:"#6bf",fontSize:"0.65rem"},children:"[subscribed]"})]}),t.jsxs("div",{style:{color:"#666",fontSize:"0.68rem",marginBottom:3},children:["tags: ",((l=e.tags)==null?void 0:l.join(", "))||"none"]}),e.vitals&&e.vitals.max_health>0&&t.jsx("div",{style:{display:"flex",flexDirection:"column",gap:2},children:[{label:"HP",cur:e.vitals.current_health,max:e.vitals.max_health,bg:"#330000",fill:"#c44"},{label:"STA",cur:e.vitals.current_stamina,max:e.vitals.max_stamina,bg:"#331a00",fill:"#ca0"},{label:"MANA",cur:e.vitals.current_mana,max:e.vitals.max_mana,bg:"#001433",fill:"#48f"}].map(i=>t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[t.jsx("span",{style:{width:32,color:"#888",fontSize:"0.65rem"},children:i.label}),t.jsx("div",{style:{flex:1,height:6,background:i.bg,borderRadius:3,overflow:"hidden"},children:t.jsx("div",{style:{width:`${h(i.cur,i.max)}%`,height:"100%",background:i.fill,borderRadius:3}})}),t.jsxs("span",{style:{width:60,textAlign:"right",fontSize:"0.65rem",color:"#888"},children:[i.cur,"/",i.max]})]},i.label))}),e.position&&t.jsxs("div",{style:{color:"#555",fontSize:"0.65rem",marginTop:2},children:[(s=e.position.ns)==null?void 0:s.toFixed(1),"N, ",(r=e.position.ew)==null?void 0:r.toFixed(1),"E"]})]},e.character_name)})})})};export{v as VitalSharingWindow}; +import{r as n,j as t,D as x,a as m}from"./index-DtA97zvw.js";import"./react-yfL0ty4i.js";const v=({id:o,zIndex:c})=>{const[a,d]=n.useState([]);n.useEffect(()=>{const e=async()=>{try{const s=await m("/vital-sharing/peers");d(s.peers??[])}catch{}};e();const l=setInterval(e,5e3);return()=>clearInterval(l)},[]);const h=(e,l)=>l>0?Math.min(100,e/l*100):0;return t.jsx(x,{id:o,title:"Vital Sharing Network",zIndex:c,width:520,height:450,children:t.jsx("div",{style:{flex:1,overflowY:"auto",padding:6,fontSize:"0.75rem"},children:a.length===0?t.jsx("div",{style:{padding:16,color:"#666",textAlign:"center"},children:"No vital-sharing peers connected"}):a.map(e=>{var l,s,r;return t.jsxs("div",{style:{padding:"6px 8px",marginBottom:4,background:"#1f1f1f",borderRadius:3,border:"1px solid #333"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:3},children:[t.jsx("span",{style:{color:e.plugin_connected?"#4c4":"#a33",fontSize:"0.8rem"},children:"●"}),t.jsx("strong",{style:{flex:1},children:e.character_name}),e.subscribed&&t.jsx("span",{style:{color:"#6bf",fontSize:"0.65rem"},children:"[subscribed]"})]}),t.jsxs("div",{style:{color:"#666",fontSize:"0.68rem",marginBottom:3},children:["tags: ",((l=e.tags)==null?void 0:l.join(", "))||"none"]}),e.vitals&&e.vitals.max_health>0&&t.jsx("div",{style:{display:"flex",flexDirection:"column",gap:2},children:[{label:"HP",cur:e.vitals.current_health,max:e.vitals.max_health,bg:"#330000",fill:"#c44"},{label:"STA",cur:e.vitals.current_stamina,max:e.vitals.max_stamina,bg:"#331a00",fill:"#ca0"},{label:"MANA",cur:e.vitals.current_mana,max:e.vitals.max_mana,bg:"#001433",fill:"#48f"}].map(i=>t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[t.jsx("span",{style:{width:32,color:"#888",fontSize:"0.65rem"},children:i.label}),t.jsx("div",{style:{flex:1,height:6,background:i.bg,borderRadius:3,overflow:"hidden"},children:t.jsx("div",{style:{width:`${h(i.cur,i.max)}%`,height:"100%",background:i.fill,borderRadius:3}})}),t.jsxs("span",{style:{width:60,textAlign:"right",fontSize:"0.65rem",color:"#888"},children:[i.cur,"/",i.max]})]},i.label))}),e.position&&t.jsxs("div",{style:{color:"#555",fontSize:"0.65rem",marginTop:2},children:[(s=e.position.ns)==null?void 0:s.toFixed(1),"N, ",(r=e.position.ew)==null?void 0:r.toFixed(1),"E"]})]},e.character_name)})})})};export{v as VitalSharingWindow}; diff --git a/static/assets/index-1RR6uoxX.css b/static/assets/index-Dj1_Fy8n.css similarity index 76% rename from static/assets/index-1RR6uoxX.css rename to static/assets/index-Dj1_Fy8n.css index 45dcce87..d32d6518 100644 --- a/static/assets/index-1RR6uoxX.css +++ b/static/assets/index-Dj1_Fy8n.css @@ -1 +1 @@ -.ml-layout{display:flex;height:100vh;overflow:hidden;background:#111;color:#eee;font-family:Segoe UI,sans-serif}.ml-sidebar{width:400px;min-width:400px;background:#1a1a1a;border-right:2px solid #333;display:flex;flex-direction:column;overflow-y:auto;padding:12px 14px;scrollbar-width:none;-ms-overflow-style:none}.ml-sidebar::-webkit-scrollbar{display:none}.ml-sidebar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.ml-sidebar-title{font-size:.85rem;font-weight:600;color:#88f}.ml-view-toggle{font-size:.7rem;padding:3px 10px;background:#333;color:#aaa;border:1px solid #555;border-radius:3px;cursor:pointer}.ml-view-toggle:hover{background:#444;color:#fff}.ml-server-status{display:flex;align-items:center;gap:6px;padding:4px 0 8px;font-size:.75rem;color:#aaa}.ml-status-dot{width:8px;height:8px;border-radius:50%}.ml-status-dot.online{background:#4c4;animation:ml-pulse 2s ease-in-out infinite}.ml-status-dot.offline{background:#c44}.ml-status-detail{color:#888;font-size:.7rem}.ml-status-latency{margin-left:auto;color:#888}.ml-tool-links{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px}.ml-tool-link{font-size:.68rem;color:#8ac;text-decoration:none;padding:2px 6px;background:#4488ff14;border:1px solid rgba(68,136,255,.15);border-radius:3px;transition:all .15s}.ml-tool-link:hover{background:#4488ff2e;color:#adf}@keyframes ml-pulse{0%,to{opacity:1}50%{opacity:.4}}.ml-counters{display:flex;gap:6px;margin-bottom:10px}.ml-counter{flex:1;text-align:center;padding:6px 4px;border-radius:4px;background:#222;border:1px solid #333}.ml-counter-val{display:block;font-size:1rem;font-weight:700;font-variant-numeric:tabular-nums}.ml-counter-lbl{display:block;font-size:.6rem;color:#888;text-transform:uppercase;letter-spacing:.3px}.ml-counter.rares .ml-counter-val{color:#fc0}.ml-counter.kph .ml-counter-val{color:#4af}.ml-counter.kph{border-color:#234;animation:ml-kph-glow 3s ease-in-out infinite}.ml-counter.kph.ultra{background:linear-gradient(135deg,#112,#221);animation:ml-kph-glow 1.5s ease-in-out infinite}.ml-counter.kills .ml-counter-val{color:#f66}@keyframes ml-kph-glow{0%,to{box-shadow:0 0 4px #4af3}50%{box-shadow:0 0 12px #44aaff80}}.ml-sort-buttons{display:flex;gap:2px;margin:8px 0}.ml-sort-btn{flex:1;padding:4px 0;font-size:.65rem;font-weight:600;background:#2a2a2a;color:#888;border:1px solid #444;border-radius:3px;cursor:pointer;text-transform:uppercase;letter-spacing:.3px}.ml-sort-btn:hover{background:#333;color:#ccc}.ml-sort-btn.active{background:#334;color:#88f;border-color:#88f}.ml-filter{width:100%;padding:5px 8px;font-size:.78rem;background:#222;color:#eee;border:1px solid #444;border-radius:3px;outline:none;margin-bottom:8px;box-sizing:border-box}.ml-filter:focus{border-color:#88f}.ml-filter::placeholder{color:#666}.ml-player-list{list-style:none;margin:0;padding:0;flex:1;overflow-y:auto;scrollbar-width:none;-ms-overflow-style:none}.ml-player-list::-webkit-scrollbar{display:none}.ml-player-row{padding:6px 8px;border-bottom:1px solid #2a2a2a;border-left:3px solid transparent;cursor:pointer;transition:background .1s}.ml-player-row:hover{background:#252525}.ml-player-row.ml-player-selected{background:#2a3344}.ml-pr-name{font-size:.82rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ml-pr-coords{font-size:.65rem;color:#888;margin-bottom:3px}.ml-pr-vitals{display:flex;gap:3px;margin-bottom:4px}.ml-vital-bar{flex:1;height:4px;border-radius:2px;overflow:hidden}.ml-vital-bar.hp{background:#300}.ml-vital-bar.sta{background:#331a00}.ml-vital-bar.mana{background:#001433}.ml-vital-bar.hp .ml-vital-fill{background:linear-gradient(90deg,#f44,#f66)}.ml-vital-bar.sta .ml-vital-fill{background:linear-gradient(90deg,#fa0,#fc4)}.ml-vital-bar.mana .ml-vital-fill{background:linear-gradient(90deg,#48f,#6af)}.ml-vital-fill{height:100%;border-radius:2px;transition:width .3s ease-out}.ml-pr-header{display:flex;justify-content:space-between;align-items:baseline;cursor:pointer}.ml-pr-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:1px 8px;font-size:.68rem;color:#aaa;margin-bottom:4px}.ml-gs{font-variant-numeric:tabular-nums;display:inline-flex;align-items:center;gap:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ml-suffix{font-size:.58rem;color:#666;text-transform:uppercase;letter-spacing:.3px}.ml-taper-icon{width:14px;height:14px;margin-right:2px;vertical-align:text-bottom}.ml-meta-pill{font-size:.6rem;padding:0 6px;border-radius:3px;background:#333;color:#888;text-align:center;justify-self:end}.ml-pr-buttons{display:flex;gap:3px;margin-top:4px}.ml-btn{padding:2px 8px;font-size:.63rem;font-weight:500;border:1px solid #3a3a3a;border-radius:4px;background:#2a2a2a;color:#999;cursor:pointer;white-space:nowrap;transition:all .15s;letter-spacing:.2px}.ml-btn:hover{background:#383838;color:#ddd;border-color:#555}.ml-btn.accent{background:#4488ff1f;color:#6aadff;border-color:#4488ff4d}.ml-btn.accent:hover{background:#4488ff38;color:#8ec5ff;border-color:#4488ff80}.ml-meta-pill.active{background:#44cc4426;color:#4c4}.ml-meta-pill.other{background:#cc444426;color:#c44}.ml-map-container{flex:1;position:relative;overflow:hidden;background:#000;cursor:grab}.ml-map-container:active{cursor:grabbing}.ml-map-group{position:absolute;top:0;left:0;transform-origin:0 0}.ml-map-img{display:block;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.ml-dots-layer{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.ml-dot{position:absolute;width:6px;height:6px;border-radius:50%;transform:translate(-50%,-50%);border:1px solid rgba(0,0,0,.5);pointer-events:all;cursor:pointer;z-index:5}.ml-dot:hover{width:10px;height:10px;z-index:10}.ml-dot.ml-dot-selected{width:10px;height:10px;z-index:10;animation:ml-blink .6s step-end infinite}@keyframes ml-blink{50%{opacity:0}}.ml-version{font-size:.65rem;color:#aaa;margin-bottom:2px}.ml-agent{display:flex;flex-direction:column;height:100%;font-size:.85rem}.ml-agent-toolbar{display:flex;align-items:center;gap:8px;padding:6px 8px;border-bottom:1px solid #333;background:#1a1a1a}.ml-agent-btn{background:#2a2a3a;color:#ddd;border:1px solid #444;border-radius:3px;padding:3px 8px;font-size:.75rem;cursor:pointer}.ml-agent-btn:hover:not(:disabled){background:#353550;border-color:#88f}.ml-agent-btn:disabled{opacity:.5;cursor:not-allowed}.ml-agent-session{font-family:monospace;font-size:.7rem;color:#888;margin-left:auto}.ml-agent-messages{flex:1;overflow-y:auto;padding:8px;display:flex;flex-direction:column;gap:10px}.ml-agent-empty{color:#888;font-style:italic;text-align:center;padding:20px;line-height:1.5}.ml-agent-msg{display:flex;flex-direction:column;gap:2px;max-width:92%}.ml-agent-user{align-self:flex-end}.ml-agent-assistant,.ml-agent-error{align-self:flex-start}.ml-agent-role{font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#888}.ml-agent-user .ml-agent-role{color:#88f;text-align:right}.ml-agent-assistant .ml-agent-role{color:#6fd07a}.ml-agent-error .ml-agent-role{color:#d66}.ml-agent-text{padding:7px 10px;border-radius:6px;background:#232333;color:#e8e8e8;white-space:pre-wrap;word-break:break-word;line-height:1.4}.ml-agent-user .ml-agent-text{background:#2a3a55;color:#fff}.ml-agent-error .ml-agent-text{background:#3a1c1c;color:#faa}.ml-agent-thinking{color:#888;font-style:italic}.ml-agent-form{display:flex;gap:6px;padding:6px 8px;border-top:1px solid #333;background:#1a1a1a}.ml-agent-input{flex:1;resize:none;background:#111;color:#eee;border:1px solid #444;border-radius:3px;padding:5px 7px;font-family:inherit;font-size:.85rem;line-height:1.3}.ml-agent-input:focus{outline:1px solid #88f;border-color:#88f}.ml-agent-input:disabled{opacity:.6}.ml-agent-send{background:#2a3a55;color:#fff;border:1px solid #4466aa;border-radius:3px;padding:0 14px;font-size:.85rem;cursor:pointer}.ml-agent-send:hover:not(:disabled){background:#34507a}.ml-agent-send:disabled{opacity:.4;cursor:not-allowed}.ml-tooltip{position:absolute;background:#001e3ceb;color:#eee;padding:6px 10px;border-radius:4px;font-size:.75rem;pointer-events:none;z-index:1000;white-space:nowrap;border:1px solid #335}.ml-coords{position:absolute;bottom:8px;left:8px;background:#003264d9;color:#eee;padding:4px 10px;border-radius:4px;font-size:.75rem;pointer-events:none;z-index:100;font-variant-numeric:tabular-nums}.ml-toggles{display:flex;gap:12px;margin-bottom:8px;font-size:.72rem}.ml-toggle-label{display:flex;align-items:center;gap:4px;color:#aaa;cursor:pointer}.ml-toggle-label input{accent-color:#4488ff}.ml-trails-svg{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.ml-heatmap-canvas{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;opacity:.8}.ml-portals-layer{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.ml-portal-icon{position:absolute;width:6px;height:6px;transform:translate(-50%,-50%);pointer-events:all;cursor:help}.ml-portal-icon:before{content:"🌀";font-size:10px;position:absolute;transform:translate(-50%,-50%)}.ml-window{position:fixed;background:#1a1a1a;border:1px solid #444;border-radius:6px;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 8px 32px #00000080}.ml-window-header{display:flex;justify-content:space-between;align-items:center;padding:6px 12px;background:linear-gradient(135deg,#2a3a5a,#1a2a40);cursor:move;-webkit-user-select:none;user-select:none;border-bottom:1px solid #334}.ml-window-title{font-size:.8rem;font-weight:600;color:#acf}.ml-window-close{background:none;border:none;color:#888;font-size:1.1rem;cursor:pointer;line-height:1;padding:0 4px}.ml-window-close:hover{color:#f66}.ml-window-content{flex:1;overflow:auto;display:flex;flex-direction:column}.ml-window-resize{position:absolute;bottom:0;right:0;width:14px;height:14px;cursor:nwse-resize;opacity:.3;background:linear-gradient(135deg,transparent 50%,#888 50%,transparent 52%,#888 65%,transparent 67%,#888 80%)}.ml-window-resize:hover{opacity:.6}.ml-stats-controls{display:flex;gap:4px;padding:6px 10px;border-bottom:1px solid #333}.ml-stats-range-btn{padding:3px 10px;font-size:.7rem;background:#2a2a2a;color:#888;border:1px solid #444;border-radius:3px;cursor:pointer}.ml-stats-range-btn.active{background:#4488ff26;color:#6aadff;border-color:#4488ff4d}.ml-stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;flex:1}.ml-stats-panel{min-height:200px;background:#fff;border-radius:3px;overflow:hidden}.ml-stats-panel iframe{border:none}.ml-chat-messages{flex:1;overflow-y:auto;padding:6px 10px;font-size:.75rem;font-family:Consolas,Courier New,monospace;line-height:1.4}.ml-chat-line{word-break:break-word}.ml-chat-form{display:flex;border-top:1px solid #333;padding:4px}.ml-chat-input{flex:1;background:#222;color:#eee;border:1px solid #444;border-radius:3px;padding:4px 8px;font-size:.78rem;outline:none}.ml-chat-input:focus{border-color:#48f}.ml-chat-input::placeholder{color:#666}.ml-rare-notifications{position:fixed;top:20px;left:50%;transform:translate(-50%);z-index:99999;display:flex;flex-direction:column;gap:8px;pointer-events:none}.ml-rare-notif{background:linear-gradient(135deg,#1a0a2e,#2a1040);border:2px solid #ffcc00;border-radius:8px;padding:16px 32px;text-align:center;animation:ml-notif-in .5s ease-out;box-shadow:0 0 40px #ffcc004d}.ml-rare-notif.exiting{animation:ml-notif-out .5s ease-in forwards}.ml-rare-notif-title{font-size:1.4rem;font-weight:800;color:#fc0;text-shadow:0 0 20px rgba(255,204,0,.5);margin-bottom:4px}.ml-rare-notif-name{font-size:1.1rem;font-weight:600;color:#fff;margin-bottom:4px}.ml-rare-notif-by{font-size:.75rem;color:#888}.ml-rare-notif-char{font-size:1rem;font-weight:700;color:#fc0}@keyframes ml-notif-in{0%{transform:translateY(-40px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes ml-notif-out{to{transform:translateY(-60px);opacity:0}}.ml-fireworks{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:99998}.ml-firework-particle{position:absolute;width:6px;height:6px;border-radius:50%;animation:ml-particle 2s cubic-bezier(.25,.46,.45,.94) forwards}@keyframes ml-particle{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(var(--dx),var(--dy)) scale(0);opacity:0}}.ml-tool-link-logout{margin-top:4px;color:#d88;border-top:1px dashed #444;padding-top:4px;font-size:.78rem}.ml-tool-link-logout:hover{color:#f88;background:#963c3c26}.ml-admin{display:flex;flex-direction:column;height:100%;padding:8px 10px;gap:10px;font-size:.85rem;overflow-y:auto}.ml-admin-section{background:#1a1a1a;border:1px solid #333;border-radius:4px;padding:8px 10px}.ml-admin-section h3{margin:0 0 6px;font-size:.9rem;color:#cfcfff;font-weight:600}.ml-admin-error{background:#3a1c1c;border:1px solid #803333;color:#faa;padding:6px 9px;border-radius:4px;font-family:monospace;font-size:.78rem;white-space:pre-wrap}.ml-admin-muted{color:#888;font-style:italic}.ml-admin-create{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.ml-admin-create input[type=text],.ml-admin-create input[type=password]{background:#111;color:#eee;border:1px solid #444;border-radius:3px;padding:4px 7px;font-size:.82rem;flex:1 1 140px;min-width:100px}.ml-admin-create label{display:inline-flex;align-items:center;gap:4px;color:#ccc;font-size:.8rem}.ml-admin button{background:#2a2a3a;color:#ddd;border:1px solid #444;border-radius:3px;padding:3px 9px;font-size:.78rem;cursor:pointer;margin-right:4px}.ml-admin button:hover:not(:disabled){background:#353550;border-color:#88f}.ml-admin button:disabled{opacity:.45;cursor:not-allowed}.ml-admin-danger{color:#faa;border-color:#803333!important}.ml-admin-danger:hover:not(:disabled){background:#3a1c1c!important}.ml-admin-table{width:100%;border-collapse:collapse;font-size:.78rem}.ml-admin-table th,.ml-admin-table td{text-align:left;padding:4px 6px;border-bottom:1px solid #2a2a2a;vertical-align:middle}.ml-admin-table th{color:#aaa;font-weight:600;text-transform:uppercase;font-size:.68rem;letter-spacing:.04em}.ml-admin-table tbody tr:hover{background:#ffffff06}.ml-admin-toggle{font-family:monospace;font-weight:700;min-width:28px;text-align:center}.ml-admin-pw-edit{display:inline-flex;gap:4px;align-items:center}.ml-admin-pw-edit input{background:#111;color:#eee;border:1px solid #88f;border-radius:3px;padding:3px 6px;font-family:monospace;font-size:.78rem;width:160px}.ml-dashboard-page{display:flex;flex-direction:column;height:100vh;width:100vw;background:#111;color:#ddd;font-family:inherit}.ml-dashboard-header{display:flex;align-items:center;gap:14px;padding:10px 16px;background:#1a1a1a;border-bottom:1px solid #333;font-size:.9rem}.ml-dashboard-title{font-weight:600;color:#cfcfff;font-size:1rem}.ml-dashboard-count{color:#6af;font-variant-numeric:tabular-nums;font-size:.85rem}.ml-dashboard-version{font-family:monospace;font-size:.7rem;color:#888}.ml-dashboard-main{flex:1;display:flex;flex-direction:column;overflow:hidden;padding:8px 12px}@media(max-width:768px){.ml-layout{flex-direction:column}.ml-sidebar{width:100%;min-width:100%;max-height:40vh;border-right:none;border-bottom:2px solid #333}.ml-map-container{min-height:60vh}}:root[data-midsummer] .ml-sidebar{background:#0a1f16;border-right:2px solid #1c5a2c}:root[data-midsummer] .ml-map-container{background:#0e2a1e}:root[data-midsummer] .ml-sidebar-title{color:#7ed957;text-shadow:0 0 6px rgba(126,217,87,.35)}:root[data-midsummer] .ml-tool-link{color:#bfe9a8}:root[data-midsummer] .ml-tool-link:hover{color:#eafbe0}:root[data-midsummer] .ml-server-status,:root[data-midsummer] .ml-counters,:root[data-midsummer] .ml-player-row{border-color:#1c5a2c}:root[data-midsummer] .ml-player-row.ml-player-selected{background:#7ed95724;outline:1px solid rgba(126,217,87,.5)}:root[data-midsummer] .ml-sort-btn,:root[data-midsummer] .ml-btn{border-color:#2c6e36}.ms-maypole{position:absolute;transform:translate(-50%,-50%);pointer-events:none;z-index:6}.ms-maypole-pole{position:absolute;left:-2px;top:-64px;width:4px;height:70px;background:#6b4f2a;border-radius:2px}.ms-maypole-pole:before{content:"";position:absolute;top:4px;left:-16px;width:36px;height:4px;background:#3b6d11;border-radius:2px}.ms-maypole-pole:after{content:"🌼";position:absolute;top:-16px;left:-8px;font-size:16px;line-height:1}.ms-maypole-ring{position:absolute;left:0;top:-30px;width:0;height:0;animation:ms-spin 12s linear infinite}.ms-frog{position:absolute;font-size:13px;line-height:1}@keyframes ms-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.ms-maypole-ring{animation:none}}:root[data-midsummer] .ml-dot{background:transparent!important;border:none!important;overflow:visible}:root[data-midsummer] .ml-dot:before{content:"🐸";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-size:15px;line-height:1;pointer-events:none}:root[data-midsummer] .ml-dot.ml-dot-selected:before{font-size:21px;filter:drop-shadow(0 0 3px #7ed957)}.ms-banner{position:absolute;top:0;left:50%;transform:translate(-50%);z-index:50;margin-top:6px;padding:4px 16px;border-radius:14px;background:#14401feb;border:1px solid #7ed957;color:#eafbe0;font-size:.8rem;white-space:nowrap;pointer-events:none}.ms-rain{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden;z-index:9000}.ms-rain span{position:absolute;top:-40px;line-height:1;animation-name:ms-fall;animation-timing-function:linear;animation-fill-mode:forwards}@keyframes ms-fall{to{transform:translateY(112vh) rotate(360deg);opacity:.3}}.ml-layout.ms-hop{animation:ms-bounce .6s ease-in-out 3}@keyframes ms-bounce{0%,to{transform:translateY(0)}20%{transform:translateY(-16px)}40%{transform:translateY(0)}60%{transform:translateY(-9px)}80%{transform:translateY(0)}}.ms-hop-frogs{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:999999}.ms-hop-frogs span{position:absolute;bottom:-40px;font-size:34px;line-height:1;animation:ms-hop-up 2.4s ease-in forwards}@keyframes ms-hop-up{to{bottom:114vh;transform:rotate(18deg)}}@media(prefers-reduced-motion:reduce){.ml-layout.ms-hop{animation:none}.ms-hop-frogs span{animation-duration:.01s}} +.ml-layout{display:flex;height:100vh;overflow:hidden;background:#111;color:#eee;font-family:Segoe UI,sans-serif}.ml-sidebar{width:400px;min-width:400px;background:#1a1a1a;border-right:2px solid #333;display:flex;flex-direction:column;overflow-y:auto;padding:12px 14px;scrollbar-width:none;-ms-overflow-style:none}.ml-sidebar::-webkit-scrollbar{display:none}.ml-sidebar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.ml-sidebar-title{font-size:.85rem;font-weight:600;color:#88f}.ml-view-toggle{font-size:.7rem;padding:3px 10px;background:#333;color:#aaa;border:1px solid #555;border-radius:3px;cursor:pointer}.ml-view-toggle:hover{background:#444;color:#fff}.ml-server-status{display:flex;align-items:center;gap:6px;padding:4px 0 8px;font-size:.75rem;color:#aaa}.ml-status-dot{width:8px;height:8px;border-radius:50%}.ml-status-dot.online{background:#4c4;animation:ml-pulse 2s ease-in-out infinite}.ml-status-dot.offline{background:#c44}.ml-status-detail{color:#888;font-size:.7rem}.ml-status-latency{margin-left:auto;color:#888}.ml-tool-links{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px}.ml-tool-link{font-size:.68rem;color:#8ac;text-decoration:none;padding:2px 6px;background:#4488ff14;border:1px solid rgba(68,136,255,.15);border-radius:3px;transition:all .15s}.ml-tool-link:hover{background:#4488ff2e;color:#adf}@keyframes ml-pulse{0%,to{opacity:1}50%{opacity:.4}}.ml-counters{display:flex;gap:6px;margin-bottom:10px}.ml-counter{flex:1;text-align:center;padding:6px 4px;border-radius:4px;background:#222;border:1px solid #333}.ml-counter-val{display:block;font-size:1rem;font-weight:700;font-variant-numeric:tabular-nums}.ml-counter-lbl{display:block;font-size:.6rem;color:#888;text-transform:uppercase;letter-spacing:.3px}.ml-counter.rares .ml-counter-val{color:#fc0}.ml-counter.kph .ml-counter-val{color:#4af}.ml-counter.kph{border-color:#234;animation:ml-kph-glow 3s ease-in-out infinite}.ml-counter.kph.ultra{background:linear-gradient(135deg,#112,#221);animation:ml-kph-glow 1.5s ease-in-out infinite}.ml-counter.kills .ml-counter-val{color:#f66}@keyframes ml-kph-glow{0%,to{box-shadow:0 0 4px #4af3}50%{box-shadow:0 0 12px #44aaff80}}.ml-sort-buttons{display:flex;gap:2px;margin:8px 0}.ml-sort-btn{flex:1;padding:4px 0;font-size:.65rem;font-weight:600;background:#2a2a2a;color:#888;border:1px solid #444;border-radius:3px;cursor:pointer;text-transform:uppercase;letter-spacing:.3px}.ml-sort-btn:hover{background:#333;color:#ccc}.ml-sort-btn.active{background:#334;color:#88f;border-color:#88f}.ml-filter{width:100%;padding:5px 8px;font-size:.78rem;background:#222;color:#eee;border:1px solid #444;border-radius:3px;outline:none;margin-bottom:8px;box-sizing:border-box}.ml-filter:focus{border-color:#88f}.ml-filter::placeholder{color:#666}.ml-player-list{list-style:none;margin:0;padding:0;flex:1;overflow-y:auto;scrollbar-width:none;-ms-overflow-style:none}.ml-player-list::-webkit-scrollbar{display:none}.ml-player-row{padding:6px 8px;border-bottom:1px solid #2a2a2a;border-left:3px solid transparent;cursor:pointer;transition:background .1s}.ml-player-row:hover{background:#252525}.ml-player-row.ml-player-selected{background:#2a3344}.ml-pr-name{font-size:.82rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ml-pr-coords{font-size:.65rem;color:#888;margin-bottom:3px}.ml-pr-vitals{display:flex;gap:3px;margin-bottom:4px}.ml-vital-bar{flex:1;height:4px;border-radius:2px;overflow:hidden}.ml-vital-bar.hp{background:#300}.ml-vital-bar.sta{background:#331a00}.ml-vital-bar.mana{background:#001433}.ml-vital-bar.hp .ml-vital-fill{background:linear-gradient(90deg,#f44,#f66)}.ml-vital-bar.sta .ml-vital-fill{background:linear-gradient(90deg,#fa0,#fc4)}.ml-vital-bar.mana .ml-vital-fill{background:linear-gradient(90deg,#48f,#6af)}.ml-vital-fill{height:100%;border-radius:2px;transition:width .3s ease-out}.ml-pr-header{display:flex;justify-content:space-between;align-items:baseline;cursor:pointer}.ml-pr-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:1px 8px;font-size:.68rem;color:#aaa;margin-bottom:4px}.ml-gs{font-variant-numeric:tabular-nums;display:inline-flex;align-items:center;gap:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ml-suffix{font-size:.58rem;color:#666;text-transform:uppercase;letter-spacing:.3px}.ml-taper-icon{width:14px;height:14px;margin-right:2px;vertical-align:text-bottom}.ml-meta-pill{font-size:.6rem;padding:0 6px;border-radius:3px;background:#333;color:#888;text-align:center;justify-self:end}.ml-pr-buttons{display:flex;gap:3px;margin-top:4px}.ml-btn{padding:2px 8px;font-size:.63rem;font-weight:500;border:1px solid #3a3a3a;border-radius:4px;background:#2a2a2a;color:#999;cursor:pointer;white-space:nowrap;transition:all .15s;letter-spacing:.2px}.ml-btn:hover{background:#383838;color:#ddd;border-color:#555}.ml-btn.accent{background:#4488ff1f;color:#6aadff;border-color:#4488ff4d}.ml-btn.accent:hover{background:#4488ff38;color:#8ec5ff;border-color:#4488ff80}.ml-meta-pill.active{background:#44cc4426;color:#4c4}.ml-meta-pill.other{background:#cc444426;color:#c44}.ml-map-container{flex:1;position:relative;overflow:hidden;background:#000;cursor:grab}.ml-map-container:active{cursor:grabbing}.ml-map-group{position:absolute;top:0;left:0;transform-origin:0 0}.ml-map-img{display:block;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.ml-dots-layer{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.ml-dot{position:absolute;width:6px;height:6px;border-radius:50%;transform:translate(-50%,-50%);border:1px solid rgba(0,0,0,.5);pointer-events:all;cursor:pointer;z-index:5}.ml-dot:hover{width:10px;height:10px;z-index:10}.ml-dot.ml-dot-selected{width:10px;height:10px;z-index:10;animation:ml-blink .6s step-end infinite}@keyframes ml-blink{50%{opacity:0}}.ml-version{font-size:.65rem;color:#aaa;margin-bottom:2px}.ml-agent{display:flex;flex-direction:column;height:100%;font-size:.85rem}.ml-agent-toolbar{display:flex;align-items:center;gap:8px;padding:6px 8px;border-bottom:1px solid #333;background:#1a1a1a}.ml-agent-btn{background:#2a2a3a;color:#ddd;border:1px solid #444;border-radius:3px;padding:3px 8px;font-size:.75rem;cursor:pointer}.ml-agent-btn:hover:not(:disabled){background:#353550;border-color:#88f}.ml-agent-btn:disabled{opacity:.5;cursor:not-allowed}.ml-agent-session{font-family:monospace;font-size:.7rem;color:#888;margin-left:auto}.ml-agent-messages{flex:1;overflow-y:auto;padding:8px;display:flex;flex-direction:column;gap:10px}.ml-agent-empty{color:#888;font-style:italic;text-align:center;padding:20px;line-height:1.5}.ml-agent-msg{display:flex;flex-direction:column;gap:2px;max-width:92%}.ml-agent-user{align-self:flex-end}.ml-agent-assistant,.ml-agent-error{align-self:flex-start}.ml-agent-role{font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#888}.ml-agent-user .ml-agent-role{color:#88f;text-align:right}.ml-agent-assistant .ml-agent-role{color:#6fd07a}.ml-agent-error .ml-agent-role{color:#d66}.ml-agent-text{padding:7px 10px;border-radius:6px;background:#232333;color:#e8e8e8;white-space:pre-wrap;word-break:break-word;line-height:1.4}.ml-agent-user .ml-agent-text{background:#2a3a55;color:#fff}.ml-agent-error .ml-agent-text{background:#3a1c1c;color:#faa}.ml-agent-thinking{color:#888;font-style:italic}.ml-agent-form{display:flex;gap:6px;padding:6px 8px;border-top:1px solid #333;background:#1a1a1a}.ml-agent-input{flex:1;resize:none;background:#111;color:#eee;border:1px solid #444;border-radius:3px;padding:5px 7px;font-family:inherit;font-size:.85rem;line-height:1.3}.ml-agent-input:focus{outline:1px solid #88f;border-color:#88f}.ml-agent-input:disabled{opacity:.6}.ml-agent-send{background:#2a3a55;color:#fff;border:1px solid #4466aa;border-radius:3px;padding:0 14px;font-size:.85rem;cursor:pointer}.ml-agent-send:hover:not(:disabled){background:#34507a}.ml-agent-send:disabled{opacity:.4;cursor:not-allowed}.ml-tooltip{position:absolute;background:#001e3ceb;color:#eee;padding:6px 10px;border-radius:4px;font-size:.75rem;pointer-events:none;z-index:1000;white-space:nowrap;border:1px solid #335}.ml-coords{position:absolute;bottom:8px;left:8px;background:#003264d9;color:#eee;padding:4px 10px;border-radius:4px;font-size:.75rem;pointer-events:none;z-index:100;font-variant-numeric:tabular-nums}.ml-toggles{display:flex;gap:12px;margin-bottom:8px;font-size:.72rem}.ml-toggle-label{display:flex;align-items:center;gap:4px;color:#aaa;cursor:pointer}.ml-toggle-label input{accent-color:#4488ff}.ml-trails-svg{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.ml-heatmap-canvas{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;opacity:.8}.ml-portals-layer{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.ml-portal-icon{position:absolute;width:6px;height:6px;transform:translate(-50%,-50%);pointer-events:all;cursor:help}.ml-portal-icon:before{content:"🌀";font-size:10px;position:absolute;transform:translate(-50%,-50%)}.ml-window{position:fixed;background:#1a1a1a;border:1px solid #444;border-radius:6px;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 8px 32px #00000080}.ml-window-header{display:flex;justify-content:space-between;align-items:center;padding:6px 12px;background:linear-gradient(135deg,#2a3a5a,#1a2a40);cursor:move;-webkit-user-select:none;user-select:none;border-bottom:1px solid #334}.ml-window-title{font-size:.8rem;font-weight:600;color:#acf}.ml-window-close{background:none;border:none;color:#888;font-size:1.1rem;cursor:pointer;line-height:1;padding:0 4px}.ml-window-close:hover{color:#f66}.ml-window-content{flex:1;overflow:auto;display:flex;flex-direction:column}.ml-window-resize{position:absolute;bottom:0;right:0;width:14px;height:14px;cursor:nwse-resize;opacity:.3;background:linear-gradient(135deg,transparent 50%,#888 50%,transparent 52%,#888 65%,transparent 67%,#888 80%)}.ml-window-resize:hover{opacity:.6}.ml-stats-controls{display:flex;gap:4px;padding:6px 10px;border-bottom:1px solid #333}.ml-stats-range-btn{padding:3px 10px;font-size:.7rem;background:#2a2a2a;color:#888;border:1px solid #444;border-radius:3px;cursor:pointer}.ml-stats-range-btn.active{background:#4488ff26;color:#6aadff;border-color:#4488ff4d}.ml-stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;flex:1}.ml-stats-panel{min-height:200px;background:#fff;border-radius:3px;overflow:hidden}.ml-stats-panel iframe{border:none}.ml-chat-messages{flex:1;overflow-y:auto;padding:6px 10px;font-size:.75rem;font-family:Consolas,Courier New,monospace;line-height:1.4}.ml-chat-line{word-break:break-word}.ml-chat-form{display:flex;border-top:1px solid #333;padding:4px}.ml-chat-input{flex:1;background:#222;color:#eee;border:1px solid #444;border-radius:3px;padding:4px 8px;font-size:.78rem;outline:none}.ml-chat-input:focus{border-color:#48f}.ml-chat-input::placeholder{color:#666}.ml-rare-notifications{position:fixed;top:20px;left:50%;transform:translate(-50%);z-index:99999;display:flex;flex-direction:column;gap:8px;pointer-events:none}.ml-rare-notif{background:linear-gradient(135deg,#1a0a2e,#2a1040);border:2px solid #ffcc00;border-radius:8px;padding:16px 32px;text-align:center;animation:ml-notif-in .5s ease-out;box-shadow:0 0 40px #ffcc004d}.ml-rare-notif.exiting{animation:ml-notif-out .5s ease-in forwards}.ml-rare-notif-title{font-size:1.4rem;font-weight:800;color:#fc0;text-shadow:0 0 20px rgba(255,204,0,.5);margin-bottom:4px}.ml-rare-notif-name{font-size:1.1rem;font-weight:600;color:#fff;margin-bottom:4px}.ml-rare-notif-by{font-size:.75rem;color:#888}.ml-rare-notif-char{font-size:1rem;font-weight:700;color:#fc0}@keyframes ml-notif-in{0%{transform:translateY(-40px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes ml-notif-out{to{transform:translateY(-60px);opacity:0}}.ml-fireworks{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:99998}.ml-firework-particle{position:absolute;width:6px;height:6px;border-radius:50%;animation:ml-particle 2s cubic-bezier(.25,.46,.45,.94) forwards}@keyframes ml-particle{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(var(--dx),var(--dy)) scale(0);opacity:0}}.ml-tool-link-logout{margin-top:4px;color:#d88;border-top:1px dashed #444;padding-top:4px;font-size:.78rem}.ml-tool-link-logout:hover{color:#f88;background:#963c3c26}.ml-admin{display:flex;flex-direction:column;height:100%;padding:8px 10px;gap:10px;font-size:.85rem;overflow-y:auto}.ml-admin-section{background:#1a1a1a;border:1px solid #333;border-radius:4px;padding:8px 10px}.ml-admin-section h3{margin:0 0 6px;font-size:.9rem;color:#cfcfff;font-weight:600}.ml-admin-error{background:#3a1c1c;border:1px solid #803333;color:#faa;padding:6px 9px;border-radius:4px;font-family:monospace;font-size:.78rem;white-space:pre-wrap}.ml-admin-muted{color:#888;font-style:italic}.ml-admin-create{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.ml-admin-create input[type=text],.ml-admin-create input[type=password]{background:#111;color:#eee;border:1px solid #444;border-radius:3px;padding:4px 7px;font-size:.82rem;flex:1 1 140px;min-width:100px}.ml-admin-create label{display:inline-flex;align-items:center;gap:4px;color:#ccc;font-size:.8rem}.ml-admin button{background:#2a2a3a;color:#ddd;border:1px solid #444;border-radius:3px;padding:3px 9px;font-size:.78rem;cursor:pointer;margin-right:4px}.ml-admin button:hover:not(:disabled){background:#353550;border-color:#88f}.ml-admin button:disabled{opacity:.45;cursor:not-allowed}.ml-admin-danger{color:#faa;border-color:#803333!important}.ml-admin-danger:hover:not(:disabled){background:#3a1c1c!important}.ml-admin-table{width:100%;border-collapse:collapse;font-size:.78rem}.ml-admin-table th,.ml-admin-table td{text-align:left;padding:4px 6px;border-bottom:1px solid #2a2a2a;vertical-align:middle}.ml-admin-table th{color:#aaa;font-weight:600;text-transform:uppercase;font-size:.68rem;letter-spacing:.04em}.ml-admin-table tbody tr:hover{background:#ffffff06}.ml-admin-toggle{font-family:monospace;font-weight:700;min-width:28px;text-align:center}.ml-admin-pw-edit{display:inline-flex;gap:4px;align-items:center}.ml-admin-pw-edit input{background:#111;color:#eee;border:1px solid #88f;border-radius:3px;padding:3px 6px;font-family:monospace;font-size:.78rem;width:160px}.ml-dashboard-page{display:flex;flex-direction:column;height:100vh;width:100vw;background:#111;color:#ddd;font-family:inherit}.ml-dashboard-header{display:flex;align-items:center;gap:14px;padding:10px 16px;background:#1a1a1a;border-bottom:1px solid #333;font-size:.9rem}.ml-dashboard-title{font-weight:600;color:#cfcfff;font-size:1rem}.ml-dashboard-count{color:#6af;font-variant-numeric:tabular-nums;font-size:.85rem}.ml-dashboard-version{font-family:monospace;font-size:.7rem;color:#888}.ml-dashboard-main{flex:1;display:flex;flex-direction:column;overflow:hidden;padding:8px 12px}@media(max-width:768px){.ml-layout{flex-direction:column}.ml-sidebar{width:100%;min-width:100%;max-height:40vh;border-right:none;border-bottom:2px solid #333}.ml-map-container{min-height:60vh}}:root[data-midsummer] .ml-sidebar{background:#0a1f16;border-right:2px solid #1c5a2c}:root[data-midsummer] .ml-map-container{background:#0e2a1e}:root[data-midsummer] .ml-sidebar-title{color:#7ed957;text-shadow:0 0 6px rgba(126,217,87,.35)}:root[data-midsummer] .ml-tool-link{color:#bfe9a8}:root[data-midsummer] .ml-tool-link:hover{color:#eafbe0}:root[data-midsummer] .ml-server-status,:root[data-midsummer] .ml-counters,:root[data-midsummer] .ml-player-row{border-color:#1c5a2c}:root[data-midsummer] .ml-player-row.ml-player-selected{background:#7ed95724;outline:1px solid rgba(126,217,87,.5)}:root[data-midsummer] .ml-sort-btn,:root[data-midsummer] .ml-btn{border-color:#2c6e36}.ms-maypole{position:absolute;transform:translate(-50%,-50%);pointer-events:none;z-index:6}.ms-maypole-pole{position:absolute;left:-2px;top:-64px;width:4px;height:70px;background:#6b4f2a;border-radius:2px}.ms-maypole-pole:before{content:"";position:absolute;top:4px;left:-16px;width:36px;height:4px;background:#3b6d11;border-radius:2px}.ms-maypole-pole:after{content:"🌼";position:absolute;top:-16px;left:-8px;font-size:16px;line-height:1}.ms-maypole-ring{position:absolute;left:0;top:-30px;width:0;height:0;animation:ms-spin 12s linear infinite}.ms-frog{position:absolute;font-size:13px;line-height:1}@keyframes ms-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.ms-maypole-ring{animation:none}}:root[data-midsummer] .ml-dot{background:transparent!important;border:none!important;overflow:visible}:root[data-midsummer] .ml-dot:before{content:"🐸";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-size:15px;line-height:1;pointer-events:none}:root[data-midsummer] .ml-dot.ml-dot-selected:before{font-size:21px;filter:drop-shadow(0 0 3px #7ed957)}.ms-banner{position:absolute;top:0;left:50%;transform:translate(-50%);z-index:50;margin-top:6px;padding:4px 16px;border-radius:14px;background:#14401feb;border:1px solid #7ed957;color:#eafbe0;font-size:.8rem;white-space:nowrap;pointer-events:none}.ms-rain{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden;z-index:9000}.ms-rain span{position:absolute;top:-40px;line-height:1;animation-name:ms-fall;animation-timing-function:linear;animation-fill-mode:forwards}@keyframes ms-fall{to{transform:translateY(112vh) rotate(360deg);opacity:.3}}.ml-layout.ms-hop{animation:ms-bounce .6s ease-in-out 3}@keyframes ms-bounce{0%,to{transform:translateY(0)}20%{transform:translateY(-16px)}40%{transform:translateY(0)}60%{transform:translateY(-9px)}80%{transform:translateY(0)}}.ms-hop-frogs{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:999999}.ms-hop-frogs span{position:absolute;bottom:-40px;font-size:34px;line-height:1;animation:ms-hop-up 2.4s ease-in forwards}@keyframes ms-hop-up{to{bottom:114vh;transform:rotate(18deg)}}@media(prefers-reduced-motion:reduce){.ml-layout.ms-hop{animation:none}.ms-hop-frogs span{animation-duration:.01s}}.inv-page,.inv-page *{box-sizing:border-box;margin:0;padding:0}.inv-page{display:flex;flex-direction:column;height:100vh;background:#111;color:#eee;font-family:Segoe UI,sans-serif;font-size:13px}.inv-main{display:flex;flex:1;overflow:hidden}.inv-error{color:#c66}.inv-topbar{display:flex;align-items:center;gap:10px;padding:10px 14px;background:#1a1a1a;border-bottom:2px solid #333}.inv-title{color:#88f;font-weight:600;font-size:15px;white-space:nowrap}.inv-searchbox{flex:1;max-width:520px;background:#222;border:1px solid #444;border-radius:4px;padding:7px 12px;color:#eee;font-size:13px;outline:none}.inv-searchbox:focus{border-color:#88f}.inv-searchbox::placeholder{color:#666}.inv-btn{background:#333;border:1px solid #555;color:#ccc;border-radius:4px;padding:6px 14px;font-size:12px;cursor:pointer}.inv-btn:hover{background:#444;color:#fff}.inv-count{margin-left:auto;color:#888;font-size:12px;white-space:nowrap}.inv-count b{color:#eee}.inv-chipsrow{display:flex;align-items:center;flex-wrap:wrap;gap:6px;padding:8px 14px;background:#151515;border-bottom:1px solid #2a2a2a;min-height:37px}.inv-chips-lbl{color:#666;font-size:10px;letter-spacing:1px}.inv-chip{display:inline-flex;align-items:center;gap:6px;background:#23233a;border:1px solid #55f;border-radius:12px;padding:2px 10px;font-size:11px;color:#bbd;cursor:default}.inv-chip-x{color:#c66;cursor:pointer;font-weight:700}.inv-chip-x:hover{color:#f88}.inv-chip-gold{border-color:#a80;color:#fc6;background:#2a2418}.inv-sidebar{width:210px;min-width:210px;background:#1a1a1a;border-right:2px solid #333;overflow-y:auto;padding:8px 10px}.inv-grp{border-bottom:1px solid #262626;padding:6px 0}.inv-grp-head{display:flex;align-items:center;gap:6px;cursor:pointer;color:#999;text-transform:uppercase;font-size:10px;letter-spacing:1px;padding:3px 0;-webkit-user-select:none;user-select:none}.inv-grp-head:hover{color:#ccc}.inv-arrow{font-size:9px;transition:transform .15s}.inv-grp.inv-open .inv-arrow{transform:rotate(90deg)}.inv-badge{margin-left:auto;background:#3a3a6e;color:#cce;border-radius:8px;padding:0 7px;font-size:9px}.inv-grp-body{padding:5px 0 3px}.inv-minisearch{width:100%;background:#222;border:1px solid #3a3a3a;border-radius:3px;padding:4px 8px;color:#ccc;font-size:11px;outline:none;margin-bottom:5px}.inv-minisearch::placeholder{color:#555}.inv-fitem{display:flex;align-items:center;gap:6px;padding:2px 0;font-size:12px;color:#bbb;cursor:pointer}.inv-fitem:hover{color:#fff}.inv-fitem input{accent-color:#88f}.inv-subhead{color:#666;font-size:9px;text-transform:uppercase;letter-spacing:1px;margin:6px 0 2px}.inv-linky{color:#88f;font-size:10px;cursor:pointer}.inv-linky:hover{text-decoration:underline}.inv-range{display:flex;gap:4px;align-items:center;margin:2px 0}.inv-range label{flex:1;color:#999;font-size:11px}.inv-range input{width:52px;background:#222;border:1px solid #3a3a3a;border-radius:3px;color:#ccc;padding:2px 5px;font-size:11px}.inv-results{flex:1;overflow-y:auto;display:flex;flex-direction:column}.inv-results table{width:100%;border-collapse:collapse}.inv-results thead{position:sticky;top:0;background:#191919;z-index:1}.inv-results th{text-align:left;color:#88f;font-size:11px;font-weight:600;padding:8px 10px;border-bottom:2px solid #333;cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none}.inv-results th:hover{color:#aaf}.inv-results td{padding:6px 10px;border-bottom:1px solid #1e1e1e;font-size:12px;color:#bbb;vertical-align:top}.inv-results tbody tr{cursor:pointer}.inv-results tbody tr:hover td{background:#191922}.inv-results tbody tr.inv-sel td{background:#20203a}.inv-results td.inv-num{text-align:right;font-variant-numeric:tabular-nums}.inv-leg{color:#fc6}.inv-spells{color:#889;font-size:11px}.inv-equipped{color:#4c4;font-size:10px}.inv-pager{display:flex;align-items:center;gap:8px;padding:8px 14px;color:#888;font-size:12px;border-top:1px solid #262626;background:#151515;margin-top:auto}.inv-pg{padding:2px 8px;border:1px solid #333;border-radius:3px;cursor:pointer}.inv-pg.inv-cur{background:#3a3a6e;border-color:#88f;color:#fff}.inv-detail{width:250px;min-width:250px;background:#161620;border-left:2px solid #333;overflow-y:auto;padding:12px}.inv-detail h3{color:#88f;font-size:14px;margin-bottom:2px}.inv-detail-sub{color:#777;font-size:11px;margin-bottom:10px}.inv-kv{display:flex;justify-content:space-between;padding:2px 0;font-size:12px;color:#999}.inv-kv b{color:#ddd;font-weight:400;text-align:right}.inv-detail hr{border:none;border-top:1px solid #2a2a35;margin:9px 0}.inv-sphead{color:#666;font-size:10px;text-transform:uppercase;letter-spacing:1px;margin-bottom:4px}.inv-sp{padding:2px 0;font-size:12px;color:#bbb}.inv-hint{color:#555;font-size:10px;margin-top:12px}.inv-closex{float:right;color:#666;cursor:pointer;font-size:14px}.inv-closex:hover{color:#f88}.inv-dim{color:#666;font-size:10px}.inv-online{width:6px;height:6px;border-radius:50%;background:#4c4;display:inline-block;margin-left:4px}.inv-links{margin-bottom:4px;font-size:10px}.inv-gold{color:#fc6}.inv-colpicker-anchor{position:relative;align-self:flex-end;padding:4px 10px}.inv-colpicker{position:absolute;right:10px;top:30px;background:#1a1a1a;border:1px solid #444;border-radius:4px;padding:8px;z-index:5;max-height:300px;overflow-y:auto}.inv-sorted-asc:after{content:" ▲";font-size:9px}.inv-sorted-desc:after{content:" ▼";font-size:9px}.inv-pager-right{margin-left:auto} diff --git a/static/assets/index-DlaI7zTK.js b/static/assets/index-DlaI7zTK.js deleted file mode 100644 index 623ae967..00000000 --- a/static/assets/index-DlaI7zTK.js +++ /dev/null @@ -1,34 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StatsWindow-C2s91wbD.js","assets/react-yfL0ty4i.js","assets/CharacterWindow-Bb3SdkAU.js","assets/InventoryWindow-JHmmmlat.js","assets/RadarWindow-DOYDpoy6.js","assets/CombatStatsWindow-DXMZxNVt.js","assets/CombatPickerWindow-d0qw-27F.js","assets/IssuesWindow-BaiYHihK.js","assets/VitalSharingWindow-Br70fun8.js","assets/QuestStatusWindow-DwtlXaE5.js","assets/AgentWindow-8k8-gwjm.js","assets/AdminUsersWindow-BcIU-wul.js"])))=>i.map(i=>d[i]); -import{r as Ud,g as yh,a as vh}from"./react-yfL0ty4i.js";(function(){const p=document.createElement("link").relList;if(p&&p.supports&&p.supports("modulepreload"))return;for(const T of document.querySelectorAll('link[rel="modulepreload"]'))r(T);new MutationObserver(T=>{for(const O of T)if(O.type==="childList")for(const N of O.addedNodes)N.tagName==="LINK"&&N.rel==="modulepreload"&&r(N)}).observe(document,{childList:!0,subtree:!0});function A(T){const O={};return T.integrity&&(O.integrity=T.integrity),T.referrerPolicy&&(O.referrerPolicy=T.referrerPolicy),T.crossOrigin==="use-credentials"?O.credentials="include":T.crossOrigin==="anonymous"?O.credentials="omit":O.credentials="same-origin",O}function r(T){if(T.ep)return;T.ep=!0;const O=A(T);fetch(T.href,O)}})();var of={exports:{}},Sn={};/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var pd;function gh(){if(pd)return Sn;pd=1;var f=Symbol.for("react.transitional.element"),p=Symbol.for("react.fragment");function A(r,T,O){var N=null;if(O!==void 0&&(N=""+O),T.key!==void 0&&(N=""+T.key),"key"in T){O={};for(var C in T)C!=="key"&&(O[C]=T[C])}else O=T;return T=O.ref,{$$typeof:f,type:r,key:N,ref:T!==void 0?T:null,props:O}}return Sn.Fragment=p,Sn.jsx=A,Sn.jsxs=A,Sn}var zd;function Sh(){return zd||(zd=1,of.exports=gh()),of.exports}var o=Sh(),z=Ud();const pn=yh(z);var rf={exports:{}},bn={},df={exports:{}},mf={};/** - * @license React - * scheduler.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var xd;function bh(){return xd||(xd=1,(function(f){function p(S,R){var G=S.length;S.push(R);l:for(;0>>1,Y=S[H];if(0>>1;HT(I,G))RlT(Et,I)?(S[H]=Et,S[Rl]=G,H=Rl):(S[H]=I,S[ol]=G,H=ol);else if(RlT(Et,G))S[H]=Et,S[Rl]=G,H=Rl;else break l}}return R}function T(S,R){var G=S.sortIndex-R.sortIndex;return G!==0?G:S.id-R.id}if(f.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var O=performance;f.unstable_now=function(){return O.now()}}else{var N=Date,C=N.now();f.unstable_now=function(){return N.now()-C}}var h=[],_=[],B=1,y=null,j=3,U=!1,Q=!1,P=!1,fl=!1,Sl=typeof setTimeout=="function"?setTimeout:null,w=typeof clearTimeout=="function"?clearTimeout:null,J=typeof setImmediate<"u"?setImmediate:null;function Ml(S){for(var R=A(_);R!==null;){if(R.callback===null)r(_);else if(R.startTime<=S)r(_),R.sortIndex=R.expirationTime,p(h,R);else break;R=A(_)}}function Vl(S){if(P=!1,Ml(S),!Q)if(A(h)!==null)Q=!0,F||(F=!0,xl());else{var R=A(_);R!==null&&bt(Vl,R.startTime-S)}}var F=!1,ll=-1,V=5,K=-1;function W(){return fl?!0:!(f.unstable_now()-KS&&W());){var H=y.callback;if(typeof H=="function"){y.callback=null,j=y.priorityLevel;var Y=H(y.expirationTime<=S);if(S=f.unstable_now(),typeof Y=="function"){y.callback=Y,Ml(S),R=!0;break t}y===A(h)&&r(h),Ml(S)}else r(h);y=A(h)}if(y!==null)R=!0;else{var sl=A(_);sl!==null&&bt(Vl,sl.startTime-S),R=!1}}break l}finally{y=null,j=G,U=!1}R=void 0}}finally{R?xl():F=!1}}}var xl;if(typeof J=="function")xl=function(){J(Cl)};else if(typeof MessageChannel<"u"){var Nt=new MessageChannel,Tt=Nt.port2;Nt.port1.onmessage=Cl,xl=function(){Tt.postMessage(null)}}else xl=function(){Sl(Cl,0)};function bt(S,R){ll=Sl(function(){S(f.unstable_now())},R)}f.unstable_IdlePriority=5,f.unstable_ImmediatePriority=1,f.unstable_LowPriority=4,f.unstable_NormalPriority=3,f.unstable_Profiling=null,f.unstable_UserBlockingPriority=2,f.unstable_cancelCallback=function(S){S.callback=null},f.unstable_forceFrameRate=function(S){0>S||125H?(S.sortIndex=G,p(_,S),A(h)===null&&S===A(_)&&(P?(w(ll),ll=-1):P=!0,bt(Vl,G-H))):(S.sortIndex=Y,p(h,S),Q||U||(Q=!0,F||(F=!0,xl()))),S},f.unstable_shouldYield=W,f.unstable_wrapCallback=function(S){var R=j;return function(){var G=j;j=R;try{return S.apply(this,arguments)}finally{j=G}}}})(mf)),mf}var Ad;function ph(){return Ad||(Ad=1,df.exports=bh()),df.exports}/** - * @license React - * react-dom-client.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Td;function zh(){if(Td)return bn;Td=1;var f=ph(),p=Ud(),A=vh();function r(l){var t="https://react.dev/errors/"+l;if(1Y||(l.current=H[Y],H[Y]=null,Y--)}function I(l,t){Y++,H[Y]=l.current,l.current=t}var Rl=sl(null),Et=sl(null),Wt=sl(null),An=sl(null);function Tn(l,t){switch(I(Wt,t),I(Et,l),I(Rl,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?Zr(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=Zr(t),l=Lr(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}ol(Rl),I(Rl,l)}function Ga(){ol(Rl),ol(Et),ol(Wt)}function Lu(l){l.memoizedState!==null&&I(An,l);var t=Rl.current,a=Lr(t,l.type);t!==a&&(I(Et,l),I(Rl,a))}function En(l){Et.current===l&&(ol(Rl),ol(Et)),An.current===l&&(ol(An),hn._currentValue=G)}var Ku,Sf;function za(l){if(Ku===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);Ku=t&&t[1]||"",Sf=-1)":-1n||s[e]!==g[n]){var E=` -`+s[e].replace(" at new "," at ");return l.displayName&&E.includes("")&&(E=E.replace("",l.displayName)),E}while(1<=e&&0<=n);break}}}finally{wu=!1,Error.prepareStackTrace=a}return(a=l?l.displayName||l.name:"")?za(a):""}function wd(l,t){switch(l.tag){case 26:case 27:case 5:return za(l.type);case 16:return za("Lazy");case 13:return l.child!==t&&t!==null?za("Suspense Fallback"):za("Suspense");case 19:return za("SuspenseList");case 0:case 15:return Ju(l.type,!1);case 11:return Ju(l.type.render,!1);case 1:return Ju(l.type,!0);case 31:return za("Activity");default:return""}}function bf(l){try{var t="",a=null;do t+=wd(l,a),a=l,l=l.return;while(l);return t}catch(e){return` -Error generating stack: `+e.message+` -`+e.stack}}var ku=Object.prototype.hasOwnProperty,Wu=f.unstable_scheduleCallback,$u=f.unstable_cancelCallback,Jd=f.unstable_shouldYield,kd=f.unstable_requestPaint,Fl=f.unstable_now,Wd=f.unstable_getCurrentPriorityLevel,pf=f.unstable_ImmediatePriority,zf=f.unstable_UserBlockingPriority,_n=f.unstable_NormalPriority,$d=f.unstable_LowPriority,xf=f.unstable_IdlePriority,Fd=f.log,Id=f.unstable_setDisableYieldValue,Ee=null,Il=null;function $t(l){if(typeof Fd=="function"&&Id(l),Il&&typeof Il.setStrictMode=="function")try{Il.setStrictMode(Ee,l)}catch{}}var Pl=Math.clz32?Math.clz32:tm,Pd=Math.log,lm=Math.LN2;function tm(l){return l>>>=0,l===0?32:31-(Pd(l)/lm|0)|0}var Mn=256,Dn=262144,jn=4194304;function xa(l){var t=l&42;if(t!==0)return t;switch(l&-l){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return l&261888;case 262144:case 524288:case 1048576:case 2097152:return l&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return l&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return l}}function Nn(l,t,a){var e=l.pendingLanes;if(e===0)return 0;var n=0,u=l.suspendedLanes,c=l.pingedLanes;l=l.warmLanes;var i=e&134217727;return i!==0?(e=i&~u,e!==0?n=xa(e):(c&=i,c!==0?n=xa(c):a||(a=i&~l,a!==0&&(n=xa(a))))):(i=e&~u,i!==0?n=xa(i):c!==0?n=xa(c):a||(a=e&~l,a!==0&&(n=xa(a)))),n===0?0:t!==0&&t!==n&&(t&u)===0&&(u=n&-n,a=t&-t,u>=a||u===32&&(a&4194048)!==0)?t:n}function _e(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function am(l,t){switch(l){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Af(){var l=jn;return jn<<=1,(jn&62914560)===0&&(jn=4194304),l}function Fu(l){for(var t=[],a=0;31>a;a++)t.push(l);return t}function Me(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function em(l,t,a,e,n,u){var c=l.pendingLanes;l.pendingLanes=a,l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0,l.expiredLanes&=a,l.entangledLanes&=a,l.errorRecoveryDisabledLanes&=a,l.shellSuspendCounter=0;var i=l.entanglements,s=l.expirationTimes,g=l.hiddenUpdates;for(a=c&~a;0"u")return null;try{return l.activeElement||l.body}catch{return l.body}}var sm=/[\n"\\]/g;function ft(l){return l.replace(sm,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function ec(l,t,a,e,n,u,c,i){l.name="",c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?l.type=c:l.removeAttribute("type"),t!=null?c==="number"?(t===0&&l.value===""||l.value!=t)&&(l.value=""+it(t)):l.value!==""+it(t)&&(l.value=""+it(t)):c!=="submit"&&c!=="reset"||l.removeAttribute("value"),t!=null?nc(l,c,it(t)):a!=null?nc(l,c,it(a)):e!=null&&l.removeAttribute("value"),n==null&&u!=null&&(l.defaultChecked=!!u),n!=null&&(l.checked=n&&typeof n!="function"&&typeof n!="symbol"),i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?l.name=""+it(i):l.removeAttribute("name")}function Bf(l,t,a,e,n,u,c,i){if(u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(l.type=u),t!=null||a!=null){if(!(u!=="submit"&&u!=="reset"||t!=null)){ac(l);return}a=a!=null?""+it(a):"",t=t!=null?""+it(t):a,i||t===l.value||(l.value=t),l.defaultValue=t}e=e??n,e=typeof e!="function"&&typeof e!="symbol"&&!!e,l.checked=i?l.checked:!!e,l.defaultChecked=!!e,c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"&&(l.name=c),ac(l)}function nc(l,t,a){t==="number"&&Un(l.ownerDocument)===l||l.defaultValue===""+a||(l.defaultValue=""+a)}function wa(l,t,a,e){if(l=l.options,t){t={};for(var n=0;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),sc=!1;if(Ut)try{var Oe={};Object.defineProperty(Oe,"passive",{get:function(){sc=!0}}),window.addEventListener("test",Oe,Oe),window.removeEventListener("test",Oe,Oe)}catch{sc=!1}var It=null,oc=null,Hn=null;function Zf(){if(Hn)return Hn;var l,t=oc,a=t.length,e,n="value"in It?It.value:It.textContent,u=n.length;for(l=0;l=Re),Wf=" ",$f=!1;function Ff(l,t){switch(l){case"keyup":return qm.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function If(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var $a=!1;function Xm(l,t){switch(l){case"compositionend":return If(t);case"keypress":return t.which!==32?null:($f=!0,Wf);case"textInput":return l=t.data,l===Wf&&$f?null:l;default:return null}}function Gm(l,t){if($a)return l==="compositionend"||!yc&&Ff(l,t)?(l=Zf(),Hn=oc=It=null,$a=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-l};l=e}l:{for(;a;){if(a.nextSibling){a=a.nextSibling;break l}a=a.parentNode}a=void 0}a=cs(a)}}function fs(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?fs(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function ss(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=Un(l.document);t instanceof l.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)l=t.contentWindow;else break;t=Un(l.document)}return t}function Sc(l){var t=l&&l.nodeName&&l.nodeName.toLowerCase();return t&&(t==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||t==="textarea"||l.contentEditable==="true")}var km=Ut&&"documentMode"in document&&11>=document.documentMode,Fa=null,bc=null,Ye=null,pc=!1;function os(l,t,a){var e=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;pc||Fa==null||Fa!==Un(e)||(e=Fa,"selectionStart"in e&&Sc(e)?e={start:e.selectionStart,end:e.selectionEnd}:(e=(e.ownerDocument&&e.ownerDocument.defaultView||window).getSelection(),e={anchorNode:e.anchorNode,anchorOffset:e.anchorOffset,focusNode:e.focusNode,focusOffset:e.focusOffset}),Ye&&qe(Ye,e)||(Ye=e,e=Du(bc,"onSelect"),0>=c,n-=c,_t=1<<32-Pl(t)+n|a<$?(nl=X,X=null):nl=X.sibling;var il=b(m,X,v[$],M);if(il===null){X===null&&(X=nl);break}l&&X&&il.alternate===null&&t(m,X),d=u(il,d,$),cl===null?Z=il:cl.sibling=il,cl=il,X=nl}if($===v.length)return a(m,X),ul&&Ht(m,$),Z;if(X===null){for(;$$?(nl=X,X=null):nl=X.sibling;var pa=b(m,X,il.value,M);if(pa===null){X===null&&(X=nl);break}l&&X&&pa.alternate===null&&t(m,X),d=u(pa,d,$),cl===null?Z=pa:cl.sibling=pa,cl=pa,X=nl}if(il.done)return a(m,X),ul&&Ht(m,$),Z;if(X===null){for(;!il.done;$++,il=v.next())il=D(m,il.value,M),il!==null&&(d=u(il,d,$),cl===null?Z=il:cl.sibling=il,cl=il);return ul&&Ht(m,$),Z}for(X=e(X);!il.done;$++,il=v.next())il=x(X,m,$,il.value,M),il!==null&&(l&&il.alternate!==null&&X.delete(il.key===null?$:il.key),d=u(il,d,$),cl===null?Z=il:cl.sibling=il,cl=il);return l&&X.forEach(function(hh){return t(m,hh)}),ul&&Ht(m,$),Z}function vl(m,d,v,M){if(typeof v=="object"&&v!==null&&v.type===P&&v.key===null&&(v=v.props.children),typeof v=="object"&&v!==null){switch(v.$$typeof){case U:l:{for(var Z=v.key;d!==null;){if(d.key===Z){if(Z=v.type,Z===P){if(d.tag===7){a(m,d.sibling),M=n(d,v.props.children),M.return=m,m=M;break l}}else if(d.elementType===Z||typeof Z=="object"&&Z!==null&&Z.$$typeof===V&&Ua(Z)===d.type){a(m,d.sibling),M=n(d,v.props),Le(M,v),M.return=m,m=M;break l}a(m,d);break}else t(m,d);d=d.sibling}v.type===P?(M=Da(v.props.children,m.mode,M,v.key),M.return=m,m=M):(M=Kn(v.type,v.key,v.props,null,m.mode,M),Le(M,v),M.return=m,m=M)}return c(m);case Q:l:{for(Z=v.key;d!==null;){if(d.key===Z)if(d.tag===4&&d.stateNode.containerInfo===v.containerInfo&&d.stateNode.implementation===v.implementation){a(m,d.sibling),M=n(d,v.children||[]),M.return=m,m=M;break l}else{a(m,d);break}else t(m,d);d=d.sibling}M=Mc(v,m.mode,M),M.return=m,m=M}return c(m);case V:return v=Ua(v),vl(m,d,v,M)}if(bt(v))return q(m,d,v,M);if(xl(v)){if(Z=xl(v),typeof Z!="function")throw Error(r(150));return v=Z.call(v),L(m,d,v,M)}if(typeof v.then=="function")return vl(m,d,In(v),M);if(v.$$typeof===J)return vl(m,d,kn(m,v),M);Pn(m,v)}return typeof v=="string"&&v!==""||typeof v=="number"||typeof v=="bigint"?(v=""+v,d!==null&&d.tag===6?(a(m,d.sibling),M=n(d,v),M.return=m,m=M):(a(m,d),M=_c(v,m.mode,M),M.return=m,m=M),c(m)):a(m,d)}return function(m,d,v,M){try{Ze=0;var Z=vl(m,d,v,M);return fe=null,Z}catch(X){if(X===ie||X===$n)throw X;var cl=tt(29,X,null,m.mode);return cl.lanes=M,cl.return=m,cl}finally{}}}var Ha=Us(!0),Rs=Us(!1),ea=!1;function Xc(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Gc(l,t){l=l.updateQueue,t.updateQueue===l&&(t.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,callbacks:null})}function na(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function ua(l,t,a){var e=l.updateQueue;if(e===null)return null;if(e=e.shared,(rl&2)!==0){var n=e.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t,t=Ln(l),gs(l,null,a),t}return Zn(l,e,t,a),Ln(l)}function Ke(l,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var e=t.lanes;e&=l.pendingLanes,a|=e,t.lanes=a,Ef(l,a)}}function Qc(l,t){var a=l.updateQueue,e=l.alternate;if(e!==null&&(e=e.updateQueue,a===e)){var n=null,u=null;if(a=a.firstBaseUpdate,a!==null){do{var c={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};u===null?n=u=c:u=u.next=c,a=a.next}while(a!==null);u===null?n=u=t:u=u.next=t}else n=u=t;a={baseState:e.baseState,firstBaseUpdate:n,lastBaseUpdate:u,shared:e.shared,callbacks:e.callbacks},l.updateQueue=a;return}l=a.lastBaseUpdate,l===null?a.firstBaseUpdate=t:l.next=t,a.lastBaseUpdate=t}var Vc=!1;function we(){if(Vc){var l=ce;if(l!==null)throw l}}function Je(l,t,a,e){Vc=!1;var n=l.updateQueue;ea=!1;var u=n.firstBaseUpdate,c=n.lastBaseUpdate,i=n.shared.pending;if(i!==null){n.shared.pending=null;var s=i,g=s.next;s.next=null,c===null?u=g:c.next=g,c=s;var E=l.alternate;E!==null&&(E=E.updateQueue,i=E.lastBaseUpdate,i!==c&&(i===null?E.firstBaseUpdate=g:i.next=g,E.lastBaseUpdate=s))}if(u!==null){var D=n.baseState;c=0,E=g=s=null,i=u;do{var b=i.lane&-536870913,x=b!==i.lane;if(x?(el&b)===b:(e&b)===b){b!==0&&b===ue&&(Vc=!0),E!==null&&(E=E.next={lane:0,tag:i.tag,payload:i.payload,callback:null,next:null});l:{var q=l,L=i;b=t;var vl=a;switch(L.tag){case 1:if(q=L.payload,typeof q=="function"){D=q.call(vl,D,b);break l}D=q;break l;case 3:q.flags=q.flags&-65537|128;case 0:if(q=L.payload,b=typeof q=="function"?q.call(vl,D,b):q,b==null)break l;D=y({},D,b);break l;case 2:ea=!0}}b=i.callback,b!==null&&(l.flags|=64,x&&(l.flags|=8192),x=n.callbacks,x===null?n.callbacks=[b]:x.push(b))}else x={lane:b,tag:i.tag,payload:i.payload,callback:i.callback,next:null},E===null?(g=E=x,s=D):E=E.next=x,c|=b;if(i=i.next,i===null){if(i=n.shared.pending,i===null)break;x=i,i=x.next,x.next=null,n.lastBaseUpdate=x,n.shared.pending=null}}while(!0);E===null&&(s=D),n.baseState=s,n.firstBaseUpdate=g,n.lastBaseUpdate=E,u===null&&(n.shared.lanes=0),oa|=c,l.lanes=c,l.memoizedState=D}}function Hs(l,t){if(typeof l!="function")throw Error(r(191,l));l.call(t)}function Bs(l,t){var a=l.callbacks;if(a!==null)for(l.callbacks=null,l=0;lu?u:8;var c=S.T,i={};S.T=i,ii(l,!1,t,a);try{var s=n(),g=S.S;if(g!==null&&g(i,s),s!==null&&typeof s=="object"&&typeof s.then=="function"){var E=e0(s,e);$e(l,t,E,ct(l))}else $e(l,t,e,ct(l))}catch(D){$e(l,t,{then:function(){},status:"rejected",reason:D},ct())}finally{R.p=u,c!==null&&i.types!==null&&(c.types=i.types),S.T=c}}function s0(){}function ui(l,t,a,e){if(l.tag!==5)throw Error(r(476));var n=yo(l).queue;ho(l,n,t,G,a===null?s0:function(){return vo(l),a(e)})}function yo(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:G,baseState:G,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Xt,lastRenderedState:G},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Xt,lastRenderedState:a},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function vo(l){var t=yo(l);t.next===null&&(t=l.alternate.memoizedState),$e(l,t.next.queue,{},ct())}function ci(){return Xl(hn)}function go(){return _l().memoizedState}function So(){return _l().memoizedState}function o0(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var a=ct();l=na(a);var e=ua(t,l,a);e!==null&&($l(e,t,a),Ke(e,t,a)),t={cache:Hc()},l.payload=t;return}t=t.return}}function r0(l,t,a){var e=ct();a={lane:e,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},su(l)?po(t,a):(a=Tc(l,t,a,e),a!==null&&($l(a,l,e),zo(a,t,e)))}function bo(l,t,a){var e=ct();$e(l,t,a,e)}function $e(l,t,a,e){var n={lane:e,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(su(l))po(t,n);else{var u=l.alternate;if(l.lanes===0&&(u===null||u.lanes===0)&&(u=t.lastRenderedReducer,u!==null))try{var c=t.lastRenderedState,i=u(c,a);if(n.hasEagerState=!0,n.eagerState=i,lt(i,c))return Zn(l,t,n,0),gl===null&&Vn(),!1}catch{}finally{}if(a=Tc(l,t,n,e),a!==null)return $l(a,l,e),zo(a,t,e),!0}return!1}function ii(l,t,a,e){if(e={lane:2,revertLane:Xi(),gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null},su(l)){if(t)throw Error(r(479))}else t=Tc(l,a,e,2),t!==null&&$l(t,l,2)}function su(l){var t=l.alternate;return l===k||t!==null&&t===k}function po(l,t){oe=au=!0;var a=l.pending;a===null?t.next=t:(t.next=a.next,a.next=t),l.pending=t}function zo(l,t,a){if((a&4194048)!==0){var e=t.lanes;e&=l.pendingLanes,a|=e,t.lanes=a,Ef(l,a)}}var Fe={readContext:Xl,use:uu,useCallback:Al,useContext:Al,useEffect:Al,useImperativeHandle:Al,useLayoutEffect:Al,useInsertionEffect:Al,useMemo:Al,useReducer:Al,useRef:Al,useState:Al,useDebugValue:Al,useDeferredValue:Al,useTransition:Al,useSyncExternalStore:Al,useId:Al,useHostTransitionStatus:Al,useFormState:Al,useActionState:Al,useOptimistic:Al,useMemoCache:Al,useCacheRefresh:Al};Fe.useEffectEvent=Al;var xo={readContext:Xl,use:uu,useCallback:function(l,t){return Zl().memoizedState=[l,t===void 0?null:t],l},useContext:Xl,useEffect:no,useImperativeHandle:function(l,t,a){a=a!=null?a.concat([l]):null,iu(4194308,4,fo.bind(null,t,l),a)},useLayoutEffect:function(l,t){return iu(4194308,4,l,t)},useInsertionEffect:function(l,t){iu(4,2,l,t)},useMemo:function(l,t){var a=Zl();t=t===void 0?null:t;var e=l();if(Ba){$t(!0);try{l()}finally{$t(!1)}}return a.memoizedState=[e,t],e},useReducer:function(l,t,a){var e=Zl();if(a!==void 0){var n=a(t);if(Ba){$t(!0);try{a(t)}finally{$t(!1)}}}else n=t;return e.memoizedState=e.baseState=n,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:n},e.queue=l,l=l.dispatch=r0.bind(null,k,l),[e.memoizedState,l]},useRef:function(l){var t=Zl();return l={current:l},t.memoizedState=l},useState:function(l){l=li(l);var t=l.queue,a=bo.bind(null,k,t);return t.dispatch=a,[l.memoizedState,a]},useDebugValue:ei,useDeferredValue:function(l,t){var a=Zl();return ni(a,l,t)},useTransition:function(){var l=li(!1);return l=ho.bind(null,k,l.queue,!0,!1),Zl().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,a){var e=k,n=Zl();if(ul){if(a===void 0)throw Error(r(407));a=a()}else{if(a=t(),gl===null)throw Error(r(349));(el&127)!==0||Vs(e,t,a)}n.memoizedState=a;var u={value:a,getSnapshot:t};return n.queue=u,no(Ls.bind(null,e,u,l),[l]),e.flags|=2048,de(9,{destroy:void 0},Zs.bind(null,e,u,a,t),null),a},useId:function(){var l=Zl(),t=gl.identifierPrefix;if(ul){var a=Mt,e=_t;a=(e&~(1<<32-Pl(e)-1)).toString(32)+a,t="_"+t+"R_"+a,a=eu++,0<\/script>",u=u.removeChild(u.firstChild);break;case"select":u=typeof e.is=="string"?c.createElement("select",{is:e.is}):c.createElement("select"),e.multiple?u.multiple=!0:e.size&&(u.size=e.size);break;default:u=typeof e.is=="string"?c.createElement(n,{is:e.is}):c.createElement(n)}}u[ql]=t,u[Ll]=e;l:for(c=t.child;c!==null;){if(c.tag===5||c.tag===6)u.appendChild(c.stateNode);else if(c.tag!==4&&c.tag!==27&&c.child!==null){c.child.return=c,c=c.child;continue}if(c===t)break l;for(;c.sibling===null;){if(c.return===null||c.return===t)break l;c=c.return}c.sibling.return=c.return,c=c.sibling}t.stateNode=u;l:switch(Ql(u,n,e),n){case"button":case"input":case"select":case"textarea":e=!!e.autoFocus;break l;case"img":e=!0;break l;default:e=!1}e&&Qt(t)}}return pl(t),zi(t,t.type,l===null?null:l.memoizedProps,t.pendingProps,a),null;case 6:if(l&&t.stateNode!=null)l.memoizedProps!==e&&Qt(t);else{if(typeof e!="string"&&t.stateNode===null)throw Error(r(166));if(l=Wt.current,ee(t)){if(l=t.stateNode,a=t.memoizedProps,e=null,n=Yl,n!==null)switch(n.tag){case 27:case 5:e=n.memoizedProps}l[ql]=t,l=!!(l.nodeValue===a||e!==null&&e.suppressHydrationWarning===!0||Qr(l.nodeValue,a)),l||ta(t,!0)}else l=ju(l).createTextNode(e),l[ql]=t,t.stateNode=l}return pl(t),null;case 31:if(a=t.memoizedState,l===null||l.memoizedState!==null){if(e=ee(t),a!==null){if(l===null){if(!e)throw Error(r(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(r(557));l[ql]=t}else ja(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;pl(t),l=!1}else a=Oc(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=a),l=!0;if(!l)return t.flags&256?(et(t),t):(et(t),null);if((t.flags&128)!==0)throw Error(r(558))}return pl(t),null;case 13:if(e=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(n=ee(t),e!==null&&e.dehydrated!==null){if(l===null){if(!n)throw Error(r(318));if(n=t.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(r(317));n[ql]=t}else ja(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;pl(t),n=!1}else n=Oc(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=n),n=!0;if(!n)return t.flags&256?(et(t),t):(et(t),null)}return et(t),(t.flags&128)!==0?(t.lanes=a,t):(a=e!==null,l=l!==null&&l.memoizedState!==null,a&&(e=t.child,n=null,e.alternate!==null&&e.alternate.memoizedState!==null&&e.alternate.memoizedState.cachePool!==null&&(n=e.alternate.memoizedState.cachePool.pool),u=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(u=e.memoizedState.cachePool.pool),u!==n&&(e.flags|=2048)),a!==l&&a&&(t.child.flags|=8192),hu(t,t.updateQueue),pl(t),null);case 4:return Ga(),l===null&&Zi(t.stateNode.containerInfo),pl(t),null;case 10:return qt(t.type),pl(t),null;case 19:if(ol(El),e=t.memoizedState,e===null)return pl(t),null;if(n=(t.flags&128)!==0,u=e.rendering,u===null)if(n)Pe(e,!1);else{if(Tl!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(u=tu(l),u!==null){for(t.flags|=128,Pe(e,!1),l=u.updateQueue,t.updateQueue=l,hu(t,l),t.subtreeFlags=0,l=a,a=t.child;a!==null;)Ss(a,l),a=a.sibling;return I(El,El.current&1|2),ul&&Ht(t,e.treeForkCount),t.child}l=l.sibling}e.tail!==null&&Fl()>bu&&(t.flags|=128,n=!0,Pe(e,!1),t.lanes=4194304)}else{if(!n)if(l=tu(u),l!==null){if(t.flags|=128,n=!0,l=l.updateQueue,t.updateQueue=l,hu(t,l),Pe(e,!0),e.tail===null&&e.tailMode==="hidden"&&!u.alternate&&!ul)return pl(t),null}else 2*Fl()-e.renderingStartTime>bu&&a!==536870912&&(t.flags|=128,n=!0,Pe(e,!1),t.lanes=4194304);e.isBackwards?(u.sibling=t.child,t.child=u):(l=e.last,l!==null?l.sibling=u:t.child=u,e.last=u)}return e.tail!==null?(l=e.tail,e.rendering=l,e.tail=l.sibling,e.renderingStartTime=Fl(),l.sibling=null,a=El.current,I(El,n?a&1|2:a&1),ul&&Ht(t,e.treeForkCount),l):(pl(t),null);case 22:case 23:return et(t),Lc(),e=t.memoizedState!==null,l!==null?l.memoizedState!==null!==e&&(t.flags|=8192):e&&(t.flags|=8192),e?(a&536870912)!==0&&(t.flags&128)===0&&(pl(t),t.subtreeFlags&6&&(t.flags|=8192)):pl(t),a=t.updateQueue,a!==null&&hu(t,a.retryQueue),a=null,l!==null&&l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(a=l.memoizedState.cachePool.pool),e=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(e=t.memoizedState.cachePool.pool),e!==a&&(t.flags|=2048),l!==null&&ol(Ca),null;case 24:return a=null,l!==null&&(a=l.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),qt(Dl),pl(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function v0(l,t){switch(jc(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return qt(Dl),Ga(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return En(t),null;case 31:if(t.memoizedState!==null){if(et(t),t.alternate===null)throw Error(r(340));ja()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 13:if(et(t),l=t.memoizedState,l!==null&&l.dehydrated!==null){if(t.alternate===null)throw Error(r(340));ja()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return ol(El),null;case 4:return Ga(),null;case 10:return qt(t.type),null;case 22:case 23:return et(t),Lc(),l!==null&&ol(Ca),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return qt(Dl),null;case 25:return null;default:return null}}function wo(l,t){switch(jc(t),t.tag){case 3:qt(Dl),Ga();break;case 26:case 27:case 5:En(t);break;case 4:Ga();break;case 31:t.memoizedState!==null&&et(t);break;case 13:et(t);break;case 19:ol(El);break;case 10:qt(t.type);break;case 22:case 23:et(t),Lc(),l!==null&&ol(Ca);break;case 24:qt(Dl)}}function ln(l,t){try{var a=t.updateQueue,e=a!==null?a.lastEffect:null;if(e!==null){var n=e.next;a=n;do{if((a.tag&l)===l){e=void 0;var u=a.create,c=a.inst;e=u(),c.destroy=e}a=a.next}while(a!==n)}}catch(i){ml(t,t.return,i)}}function fa(l,t,a){try{var e=t.updateQueue,n=e!==null?e.lastEffect:null;if(n!==null){var u=n.next;e=u;do{if((e.tag&l)===l){var c=e.inst,i=c.destroy;if(i!==void 0){c.destroy=void 0,n=t;var s=a,g=i;try{g()}catch(E){ml(n,s,E)}}}e=e.next}while(e!==u)}}catch(E){ml(t,t.return,E)}}function Jo(l){var t=l.updateQueue;if(t!==null){var a=l.stateNode;try{Bs(t,a)}catch(e){ml(l,l.return,e)}}}function ko(l,t,a){a.props=qa(l.type,l.memoizedProps),a.state=l.memoizedState;try{a.componentWillUnmount()}catch(e){ml(l,t,e)}}function tn(l,t){try{var a=l.ref;if(a!==null){switch(l.tag){case 26:case 27:case 5:var e=l.stateNode;break;case 30:e=l.stateNode;break;default:e=l.stateNode}typeof a=="function"?l.refCleanup=a(e):a.current=e}}catch(n){ml(l,t,n)}}function Dt(l,t){var a=l.ref,e=l.refCleanup;if(a!==null)if(typeof e=="function")try{e()}catch(n){ml(l,t,n)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(n){ml(l,t,n)}else a.current=null}function Wo(l){var t=l.type,a=l.memoizedProps,e=l.stateNode;try{l:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&e.focus();break l;case"img":a.src?e.src=a.src:a.srcSet&&(e.srcset=a.srcSet)}}catch(n){ml(l,l.return,n)}}function xi(l,t,a){try{var e=l.stateNode;Y0(e,l.type,a,t),e[Ll]=t}catch(n){ml(l,l.return,n)}}function $o(l){return l.tag===5||l.tag===3||l.tag===26||l.tag===27&&ya(l.type)||l.tag===4}function Ai(l){l:for(;;){for(;l.sibling===null;){if(l.return===null||$o(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.tag===27&&ya(l.type)||l.flags&2||l.child===null||l.tag===4)continue l;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function Ti(l,t,a){var e=l.tag;if(e===5||e===6)l=l.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(l,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(l),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=Ct));else if(e!==4&&(e===27&&ya(l.type)&&(a=l.stateNode,t=null),l=l.child,l!==null))for(Ti(l,t,a),l=l.sibling;l!==null;)Ti(l,t,a),l=l.sibling}function yu(l,t,a){var e=l.tag;if(e===5||e===6)l=l.stateNode,t?a.insertBefore(l,t):a.appendChild(l);else if(e!==4&&(e===27&&ya(l.type)&&(a=l.stateNode),l=l.child,l!==null))for(yu(l,t,a),l=l.sibling;l!==null;)yu(l,t,a),l=l.sibling}function Fo(l){var t=l.stateNode,a=l.memoizedProps;try{for(var e=l.type,n=t.attributes;n.length;)t.removeAttributeNode(n[0]);Ql(t,e,a),t[ql]=l,t[Ll]=a}catch(u){ml(l,l.return,u)}}var Vt=!1,Ol=!1,Ei=!1,Io=typeof WeakSet=="function"?WeakSet:Set,Bl=null;function g0(l,t){if(l=l.containerInfo,wi=Bu,l=ss(l),Sc(l)){if("selectionStart"in l)var a={start:l.selectionStart,end:l.selectionEnd};else l:{a=(a=l.ownerDocument)&&a.defaultView||window;var e=a.getSelection&&a.getSelection();if(e&&e.rangeCount!==0){a=e.anchorNode;var n=e.anchorOffset,u=e.focusNode;e=e.focusOffset;try{a.nodeType,u.nodeType}catch{a=null;break l}var c=0,i=-1,s=-1,g=0,E=0,D=l,b=null;t:for(;;){for(var x;D!==a||n!==0&&D.nodeType!==3||(i=c+n),D!==u||e!==0&&D.nodeType!==3||(s=c+e),D.nodeType===3&&(c+=D.nodeValue.length),(x=D.firstChild)!==null;)b=D,D=x;for(;;){if(D===l)break t;if(b===a&&++g===n&&(i=c),b===u&&++E===e&&(s=c),(x=D.nextSibling)!==null)break;D=b,b=D.parentNode}D=x}a=i===-1||s===-1?null:{start:i,end:s}}else a=null}a=a||{start:0,end:0}}else a=null;for(Ji={focusedElem:l,selectionRange:a},Bu=!1,Bl=t;Bl!==null;)if(t=Bl,l=t.child,(t.subtreeFlags&1028)!==0&&l!==null)l.return=t,Bl=l;else for(;Bl!==null;){switch(t=Bl,u=t.alternate,l=t.flags,t.tag){case 0:if((l&4)!==0&&(l=t.updateQueue,l=l!==null?l.events:null,l!==null))for(a=0;a title"))),Ql(u,e,a),u[ql]=l,Hl(u),e=u;break l;case"link":var c=nd("link","href",n).get(e+(a.href||""));if(c){for(var i=0;ivl&&(c=vl,vl=L,L=c);var m=is(i,L),d=is(i,vl);if(m&&d&&(x.rangeCount!==1||x.anchorNode!==m.node||x.anchorOffset!==m.offset||x.focusNode!==d.node||x.focusOffset!==d.offset)){var v=D.createRange();v.setStart(m.node,m.offset),x.removeAllRanges(),L>vl?(x.addRange(v),x.extend(d.node,d.offset)):(v.setEnd(d.node,d.offset),x.addRange(v))}}}}for(D=[],x=i;x=x.parentNode;)x.nodeType===1&&D.push({element:x,left:x.scrollLeft,top:x.scrollTop});for(typeof i.focus=="function"&&i.focus(),i=0;ia?32:a,S.T=null,a=Ci,Ci=null;var u=da,c=Jt;if(Ul=0,ge=da=null,Jt=0,(rl&6)!==0)throw Error(r(331));var i=rl;if(rl|=4,sr(u.current),cr(u,u.current,c,a),rl=i,fn(0,!1),Il&&typeof Il.onPostCommitFiberRoot=="function")try{Il.onPostCommitFiberRoot(Ee,u)}catch{}return!0}finally{R.p=n,S.T=e,Mr(l,t)}}function jr(l,t,a){t=ot(a,t),t=ri(l.stateNode,t,2),l=ua(l,t,2),l!==null&&(Me(l,2),jt(l))}function ml(l,t,a){if(l.tag===3)jr(l,l,a);else for(;t!==null;){if(t.tag===3){jr(t,l,a);break}else if(t.tag===1){var e=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof e.componentDidCatch=="function"&&(ra===null||!ra.has(e))){l=ot(a,l),a=No(2),e=ua(t,a,2),e!==null&&(Oo(a,e,t,l),Me(e,2),jt(e));break}}t=t.return}}function Bi(l,t,a){var e=l.pingCache;if(e===null){e=l.pingCache=new p0;var n=new Set;e.set(t,n)}else n=e.get(t),n===void 0&&(n=new Set,e.set(t,n));n.has(a)||(Di=!0,n.add(a),l=E0.bind(null,l,t,a),t.then(l,l))}function E0(l,t,a){var e=l.pingCache;e!==null&&e.delete(t),l.pingedLanes|=l.suspendedLanes&a,l.warmLanes&=~a,gl===l&&(el&a)===a&&(Tl===4||Tl===3&&(el&62914560)===el&&300>Fl()-Su?(rl&2)===0&&Se(l,0):ji|=a,ve===el&&(ve=0)),jt(l)}function Nr(l,t){t===0&&(t=Af()),l=Ma(l,t),l!==null&&(Me(l,t),jt(l))}function _0(l){var t=l.memoizedState,a=0;t!==null&&(a=t.retryLane),Nr(l,a)}function M0(l,t){var a=0;switch(l.tag){case 31:case 13:var e=l.stateNode,n=l.memoizedState;n!==null&&(a=n.retryLane);break;case 19:e=l.stateNode;break;case 22:e=l.stateNode._retryCache;break;default:throw Error(r(314))}e!==null&&e.delete(t),Nr(l,a)}function D0(l,t){return Wu(l,t)}var Eu=null,pe=null,qi=!1,_u=!1,Yi=!1,ha=0;function jt(l){l!==pe&&l.next===null&&(pe===null?Eu=pe=l:pe=pe.next=l),_u=!0,qi||(qi=!0,N0())}function fn(l,t){if(!Yi&&_u){Yi=!0;do for(var a=!1,e=Eu;e!==null;){if(l!==0){var n=e.pendingLanes;if(n===0)var u=0;else{var c=e.suspendedLanes,i=e.pingedLanes;u=(1<<31-Pl(42|l)+1)-1,u&=n&~(c&~i),u=u&201326741?u&201326741|1:u?u|2:0}u!==0&&(a=!0,Rr(e,u))}else u=el,u=Nn(e,e===gl?u:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),(u&3)===0||_e(e,u)||(a=!0,Rr(e,u));e=e.next}while(a);Yi=!1}}function j0(){Or()}function Or(){_u=qi=!1;var l=0;ha!==0&&G0()&&(l=ha);for(var t=Fl(),a=null,e=Eu;e!==null;){var n=e.next,u=Cr(e,t);u===0?(e.next=null,a===null?Eu=n:a.next=n,n===null&&(pe=a)):(a=e,(l!==0||(u&3)!==0)&&(_u=!0)),e=n}Ul!==0&&Ul!==5||fn(l),ha!==0&&(ha=0)}function Cr(l,t){for(var a=l.suspendedLanes,e=l.pingedLanes,n=l.expirationTimes,u=l.pendingLanes&-62914561;0i)break;var E=s.transferSize,D=s.initiatorType;E&&Vr(D)&&(s=s.responseEnd,c+=E*(s"u"?null:document;function ld(l,t,a){var e=ze;if(e&&typeof t=="string"&&t){var n=ft(t);n='link[rel="'+l+'"][href="'+n+'"]',typeof a=="string"&&(n+='[crossorigin="'+a+'"]'),Pr.has(n)||(Pr.add(n),l={rel:l,crossOrigin:a,href:t},e.querySelector(n)===null&&(t=e.createElement("link"),Ql(t,"link",l),Hl(t),e.head.appendChild(t)))}}function W0(l){kt.D(l),ld("dns-prefetch",l,null)}function $0(l,t){kt.C(l,t),ld("preconnect",l,t)}function F0(l,t,a){kt.L(l,t,a);var e=ze;if(e&&l&&t){var n='link[rel="preload"][as="'+ft(t)+'"]';t==="image"&&a&&a.imageSrcSet?(n+='[imagesrcset="'+ft(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(n+='[imagesizes="'+ft(a.imageSizes)+'"]')):n+='[href="'+ft(l)+'"]';var u=n;switch(t){case"style":u=xe(l);break;case"script":u=Ae(l)}vt.has(u)||(l=y({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:l,as:t},a),vt.set(u,l),e.querySelector(n)!==null||t==="style"&&e.querySelector(dn(u))||t==="script"&&e.querySelector(mn(u))||(t=e.createElement("link"),Ql(t,"link",l),Hl(t),e.head.appendChild(t)))}}function I0(l,t){kt.m(l,t);var a=ze;if(a&&l){var e=t&&typeof t.as=="string"?t.as:"script",n='link[rel="modulepreload"][as="'+ft(e)+'"][href="'+ft(l)+'"]',u=n;switch(e){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=Ae(l)}if(!vt.has(u)&&(l=y({rel:"modulepreload",href:l},t),vt.set(u,l),a.querySelector(n)===null)){switch(e){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(mn(u)))return}e=a.createElement("link"),Ql(e,"link",l),Hl(e),a.head.appendChild(e)}}}function P0(l,t,a){kt.S(l,t,a);var e=ze;if(e&&l){var n=La(e).hoistableStyles,u=xe(l);t=t||"default";var c=n.get(u);if(!c){var i={loading:0,preload:null};if(c=e.querySelector(dn(u)))i.loading=5;else{l=y({rel:"stylesheet",href:l,"data-precedence":t},a),(a=vt.get(u))&&lf(l,a);var s=c=e.createElement("link");Hl(s),Ql(s,"link",l),s._p=new Promise(function(g,E){s.onload=g,s.onerror=E}),s.addEventListener("load",function(){i.loading|=1}),s.addEventListener("error",function(){i.loading|=2}),i.loading|=4,Ou(c,t,e)}c={type:"stylesheet",instance:c,count:1,state:i},n.set(u,c)}}}function lh(l,t){kt.X(l,t);var a=ze;if(a&&l){var e=La(a).hoistableScripts,n=Ae(l),u=e.get(n);u||(u=a.querySelector(mn(n)),u||(l=y({src:l,async:!0},t),(t=vt.get(n))&&tf(l,t),u=a.createElement("script"),Hl(u),Ql(u,"link",l),a.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},e.set(n,u))}}function th(l,t){kt.M(l,t);var a=ze;if(a&&l){var e=La(a).hoistableScripts,n=Ae(l),u=e.get(n);u||(u=a.querySelector(mn(n)),u||(l=y({src:l,async:!0,type:"module"},t),(t=vt.get(n))&&tf(l,t),u=a.createElement("script"),Hl(u),Ql(u,"link",l),a.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},e.set(n,u))}}function td(l,t,a,e){var n=(n=Wt.current)?Nu(n):null;if(!n)throw Error(r(446));switch(l){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=xe(a.href),a=La(n).hoistableStyles,e=a.get(t),e||(e={type:"style",instance:null,count:0,state:null},a.set(t,e)),e):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){l=xe(a.href);var u=La(n).hoistableStyles,c=u.get(l);if(c||(n=n.ownerDocument||n,c={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(l,c),(u=n.querySelector(dn(l)))&&!u._p&&(c.instance=u,c.state.loading=5),vt.has(l)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},vt.set(l,a),u||ah(n,l,a,c.state))),t&&e===null)throw Error(r(528,""));return c}if(t&&e!==null)throw Error(r(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Ae(a),a=La(n).hoistableScripts,e=a.get(t),e||(e={type:"script",instance:null,count:0,state:null},a.set(t,e)),e):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,l))}}function xe(l){return'href="'+ft(l)+'"'}function dn(l){return'link[rel="stylesheet"]['+l+"]"}function ad(l){return y({},l,{"data-precedence":l.precedence,precedence:null})}function ah(l,t,a,e){l.querySelector('link[rel="preload"][as="style"]['+t+"]")?e.loading=1:(t=l.createElement("link"),e.preload=t,t.addEventListener("load",function(){return e.loading|=1}),t.addEventListener("error",function(){return e.loading|=2}),Ql(t,"link",a),Hl(t),l.head.appendChild(t))}function Ae(l){return'[src="'+ft(l)+'"]'}function mn(l){return"script[async]"+l}function ed(l,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var e=l.querySelector('style[data-href~="'+ft(a.href)+'"]');if(e)return t.instance=e,Hl(e),e;var n=y({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return e=(l.ownerDocument||l).createElement("style"),Hl(e),Ql(e,"style",n),Ou(e,a.precedence,l),t.instance=e;case"stylesheet":n=xe(a.href);var u=l.querySelector(dn(n));if(u)return t.state.loading|=4,t.instance=u,Hl(u),u;e=ad(a),(n=vt.get(n))&&lf(e,n),u=(l.ownerDocument||l).createElement("link"),Hl(u);var c=u;return c._p=new Promise(function(i,s){c.onload=i,c.onerror=s}),Ql(u,"link",e),t.state.loading|=4,Ou(u,a.precedence,l),t.instance=u;case"script":return u=Ae(a.src),(n=l.querySelector(mn(u)))?(t.instance=n,Hl(n),n):(e=a,(n=vt.get(u))&&(e=y({},a),tf(e,n)),l=l.ownerDocument||l,n=l.createElement("script"),Hl(n),Ql(n,"link",e),l.head.appendChild(n),t.instance=n);case"void":return null;default:throw Error(r(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(e=t.instance,t.state.loading|=4,Ou(e,a.precedence,l));return t.instance}function Ou(l,t,a){for(var e=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=e.length?e[e.length-1]:null,u=n,c=0;c title"):null)}function eh(l,t,a){if(a===1||t.itemProp!=null)return!1;switch(l){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return l=t.disabled,typeof t.precedence=="string"&&l==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function cd(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function nh(l,t,a,e){if(a.type==="stylesheet"&&(typeof e.media!="string"||matchMedia(e.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var n=xe(e.href),u=t.querySelector(dn(n));if(u){t=u._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=Uu.bind(l),t.then(l,l)),a.state.loading|=4,a.instance=u,Hl(u);return}u=t.ownerDocument||t,e=ad(e),(n=vt.get(n))&&lf(e,n),u=u.createElement("link"),Hl(u);var c=u;c._p=new Promise(function(i,s){c.onload=i,c.onerror=s}),Ql(u,"link",e),a.instance=u}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(l.count++,a=Uu.bind(l),t.addEventListener("load",a),t.addEventListener("error",a))}}var af=0;function uh(l,t){return l.stylesheets&&l.count===0&&Hu(l,l.stylesheets),0af?50:800)+t);return l.unsuspend=a,function(){l.unsuspend=null,clearTimeout(e),clearTimeout(n)}}:null}function Uu(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Hu(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var Ru=null;function Hu(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Ru=new Map,t.forEach(ch,l),Ru=null,Uu.call(l))}function ch(l,t){if(!(t.state.loading&4)){var a=Ru.get(l);if(a)var e=a.get(null);else{a=new Map,Ru.set(l,a);for(var n=l.querySelectorAll("link[data-precedence],style[data-precedence]"),u=0;u"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(f)}catch(p){console.error(p)}}return f(),rf.exports=zh(),rf.exports}var Ah=xh();const Rd=z.createContext({windows:[],openWindow:()=>{},closeWindow:()=>{},bringToFront:()=>{}}),Th=({children:f})=>{const[p,A]=z.useState([]),r=z.useRef(1e4),T=z.useCallback((C,h,_)=>{A(B=>B.find(j=>j.id===C)?B.map(j=>j.id===C?{...j,zIndex:++r.current}:j):[...B,{id:C,title:h,charName:_,zIndex:++r.current}])},[]),O=z.useCallback(C=>{A(h=>h.filter(_=>_.id!==C))},[]),N=z.useCallback(C=>{A(h=>h.map(_=>_.id===C?{..._,zIndex:++r.current}:_))},[]);return o.jsx(Rd.Provider,{value:{windows:p,openWindow:T,closeWindow:O,bringToFront:N},children:f})},zn=()=>z.useContext(Rd),gt={west:-102.1,east:102.1,north:102.1,south:-102.1};function xn(f,p,A,r){const T=(f-gt.west)/(gt.east-gt.west)*A,O=(gt.north-p)/(gt.north-gt.south)*r;return{x:T,y:O}}function Eh(f,p,A,r,T,O,N){const C=(f-r)/A,h=(p-T)/A,_=gt.west+C/O*(gt.east-gt.west),B=gt.north-h/N*(gt.north-gt.south);return{ew:_,ns:B}}function hf(f,p){const A=f>=0?"N":"S",r=p>=0?"E":"W";return`${Math.abs(f).toFixed(1)}${A}, ${Math.abs(p).toFixed(1)}${r}`}const Hd=pn.memo(({players:f,imgW:p,imgH:A,getColor:r,onHover:T,onSelect:O,selectedPlayer:N})=>{const{openWindow:C}=zn(),[h,_]=z.useState(null);z.useEffect(()=>{const y=()=>_(null);return h&&window.addEventListener("click",y),()=>window.removeEventListener("click",y)},[h]);const B=z.useMemo(()=>f.filter(y=>y.ew!==void 0&&y.ns!==void 0).map(y=>({...y,pos:xn(y.ew,y.ns,p,A),color:r(y.character_name)})),[f,p,A,r]);return o.jsxs("div",{className:"ml-dots-layer",children:[B.map(y=>o.jsx("div",{className:`ml-dot ${N===y.character_name?"ml-dot-selected":""}`,style:{left:y.pos.x,top:y.pos.y,backgroundColor:y.color},onMouseEnter:j=>{var Q;const U=(Q=j.currentTarget.closest(".ml-map-container"))==null?void 0:Q.getBoundingClientRect();U&&T(y,j.clientX-U.left,j.clientY-U.top)},onMouseLeave:()=>T(null,0,0),onClick:()=>O(y.character_name),onDoubleClick:()=>C(`chat-${y.character_name}`,`Chat: ${y.character_name}`,y.character_name),onContextMenu:j=>{var Sl;j.preventDefault();const U=y.character_name,Q=(Sl=j.currentTarget.closest(".ml-map-container"))==null?void 0:Sl.getBoundingClientRect(),P=Q?j.clientX-Q.left:j.clientX,fl=Q?j.clientY-Q.top:j.clientY;_({name:U,x:P,y:fl})}},y.character_name)),h&&o.jsx("div",{style:{position:"fixed",left:h.x+410,top:h.y,background:"#1a1a1a",border:"1px solid #444",borderRadius:4,zIndex:9999,padding:"2px 0",fontSize:"0.75rem",boxShadow:"0 4px 12px rgba(0,0,0,0.5)",minWidth:120},children:[{label:"Chat",id:"chat"},{label:"Stats",id:"stats"},{label:"Inventory",id:"inv"},{label:"Character",id:"char"},{label:"Combat",id:"combat"},{label:"Radar",id:"radar"}].map(y=>o.jsx("div",{onClick:()=>{C(`${y.id}-${h.name}`,`${y.label}: ${h.name}`,h.name),_(null)},style:{padding:"4px 12px",cursor:"pointer",color:"#ccc"},onMouseEnter:j=>j.currentTarget.style.background="#333",onMouseLeave:j=>j.currentTarget.style.background="",children:y.label},y.id))})]})});Hd.displayName="PlayerDots";const Zu="/api";async function At(f){const p=await fetch(`${Zu}${f}`,{credentials:"include"});if(!p.ok)throw new Error(`API ${f}: ${p.status}`);return p.json()}async function yf(f,p){var r;const A=await fetch(`${Zu}${f}`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify(p??{})});if(!A.ok){let T="";try{T=((r=await A.json())==null?void 0:r.detail)??""}catch{}throw new Error(`API ${f}: ${A.status}${T?` (${T})`:""}`)}return A.json()}async function _h(f,p){var r;const A=await fetch(`${Zu}${f}`,{method:"PATCH",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify(p??{})});if(!A.ok){let T="";try{T=((r=await A.json())==null?void 0:r.detail)??""}catch{}throw new Error(`API ${f}: ${A.status}${T?` (${T})`:""}`)}return A.json()}async function Mh(f){var A;const p=await fetch(`${Zu}${f}`,{method:"DELETE",credentials:"include"});if(!p.ok){let r="";try{r=((A=await p.json())==null?void 0:A.detail)??""}catch{}throw new Error(`API ${f}: ${p.status}${r?` (${r})`:""}`)}return p.json()}function Dh(){return`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/ws/live`}const Bd=pn.memo(({imgW:f,imgH:p,getColor:A})=>{const[r,T]=z.useState([]);z.useEffect(()=>{const N=async()=>{try{const h=await At("/trails/?seconds=600");T(h.trails??[])}catch{}};N();const C=setInterval(N,2e3);return()=>clearInterval(C)},[]);const O=z.useMemo(()=>{const N={};for(const C of r){const{x:h,y:_}=xn(C.ew,C.ns,f,p);N[C.character_name]||(N[C.character_name]=[]),N[C.character_name].push(`${h},${_}`)}return Object.entries(N).filter(([,C])=>C.length>=2).map(([C,h])=>({name:C,points:h.join(" ")}))},[r,f,p]);return o.jsx("svg",{className:"ml-trails-svg",viewBox:`0 0 ${f} ${p}`,preserveAspectRatio:"none",children:O.map(N=>o.jsx("polyline",{points:N.points,stroke:A(N.name),fill:"none",strokeWidth:2,strokeOpacity:.7,strokeLinecap:"round",strokeLinejoin:"round"},N.name))})});Bd.displayName="TrailsSVG";const jh=({imgW:f,imgH:p,enabled:A})=>{const r=z.useRef(null),[T,O]=z.useState([]);return z.useEffect(()=>{if(!A)return;(async()=>{try{const C=await At("/spawns/heatmap?hours=24&limit=50000");O(C.spawn_points??[])}catch{}})()},[A]),z.useEffect(()=>{const N=r.current;if(!N||!A||T.length===0||f===0)return;N.width=f,N.height=p;const C=N.getContext("2d");if(C){C.clearRect(0,0,f,p);for(const h of T){const{x:_,y:B}=xn(h.ew,h.ns,f,p),y=Math.max(5,Math.min(12,5+Math.sqrt(h.intensity*.5))),j=C.createRadialGradient(_,B,0,_,B,y);j.addColorStop(0,`rgba(255, 0, 0, ${Math.min(.9,h.intensity/40)})`),j.addColorStop(.6,`rgba(255, 100, 0, ${Math.min(.4,h.intensity/120)})`),j.addColorStop(1,"rgba(255, 150, 0, 0)"),C.fillStyle=j,C.fillRect(_-y,B-y,y*2,y*2)}}},[T,f,p,A]),A?o.jsx("canvas",{ref:r,className:"ml-heatmap-canvas"}):null},Nh=({imgW:f,imgH:p,enabled:A})=>{const[r,T]=z.useState([]);z.useEffect(()=>{if(!A)return;const N=async()=>{try{const h=await At("/portals");T(h.portals??[])}catch{}};N();const C=setInterval(N,6e4);return()=>clearInterval(C)},[A]);const O=z.useMemo(()=>r.map(N=>({...N,pos:xn(N.coordinates.ew,N.coordinates.ns,f,p)})),[r,f,p]);return!A||O.length===0?null:o.jsx("div",{className:"ml-portals-layer",children:O.map((N,C)=>o.jsx("div",{className:"ml-portal-icon",style:{left:N.pos.x,top:N.pos.y},title:`${N.portal_name} (by ${N.discovered_by})`},C))})},_d="mo-midsummer",Oh=!1,qd=z.createContext(null),Ch=({children:f})=>{const[p,A]=z.useState(()=>localStorage.getItem(_d)!=="off"),r=Oh;z.useEffect(()=>{document.documentElement.removeAttribute("data-midsummer")},[r]);const T=z.useCallback(()=>{A(O=>{const N=!O;return localStorage.setItem(_d,N?"on":"off"),N})},[]);return o.jsx(qd.Provider,{value:{enabled:r,toggle:T},children:f})};function vf(){const f=z.useContext(qd);if(!f)throw new Error("useMidsummer must be used within MidsummerProvider");return f}const Md=6,Uh=(f,p)=>({x:f/2,y:p/2}),Rh=({imgW:f,imgH:p})=>{const{enabled:A}=vf();if(!A||f===0)return null;const{x:r,y:T}=Uh(f,p);return o.jsxs("div",{className:"ms-maypole",style:{left:r,top:T},"aria-hidden":"true",children:[o.jsx("div",{className:"ms-maypole-pole"}),o.jsx("div",{className:"ms-maypole-ring",children:Array.from({length:Md}).map((O,N)=>o.jsx("span",{className:"ms-frog",style:{transform:`rotate(${360/Md*N}deg) translateY(-40px)`},children:"🐸"},N))})]})},Dd=20,jd=.3,Hh=({players:f,getColor:p,onSelectPlayer:A,showHeatmap:r,showPortals:T,selectedPlayer:O})=>{var Vl;const N=z.useRef(null),C=z.useRef(null),[h,_]=z.useState({w:0,h:0}),[B,y]=z.useState(null),j=z.useRef(null),U=z.useRef({scale:1,offX:0,offY:0}),Q=z.useRef({dragging:!1,sx:0,sy:0,startOffX:0,startOffY:0}),P=z.useCallback(()=>{if(C.current){const{scale:F,offX:ll,offY:V}=U.current;C.current.style.transform=`translate(${ll}px, ${V}px) scale(${F})`}},[]),fl=z.useCallback(F=>{const ll=F.currentTarget;if(_({w:ll.naturalWidth,h:ll.naturalHeight}),N.current){const V=N.current.clientWidth,K=N.current.clientHeight,W=Math.min(V/ll.naturalWidth,K/ll.naturalHeight);U.current={scale:W,offX:(V-ll.naturalWidth*W)/2,offY:(K-ll.naturalHeight*W)/2},P()}},[P]),Sl=z.useCallback(F=>{var Tt;F.preventDefault();const ll=(Tt=N.current)==null?void 0:Tt.getBoundingClientRect();if(!ll)return;const V=U.current,K=F.deltaY<0?1.1:.9,W=Math.min(Dd,Math.max(jd,V.scale*K)),Cl=W/V.scale,xl=F.clientX-ll.left,Nt=F.clientY-ll.top;U.current={scale:W,offX:xl-(xl-V.offX)*Cl,offY:Nt-(Nt-V.offY)*Cl},P()},[P]),w=z.useCallback(F=>{if(F.button!==0)return;const ll=U.current;Q.current={dragging:!0,sx:F.clientX,sy:F.clientY,startOffX:ll.offX,startOffY:ll.offY}},[]);z.useEffect(()=>{const F=V=>{const K=Q.current;if(K.dragging&&(U.current.offX=K.startOffX+(V.clientX-K.sx),U.current.offY=K.startOffY+(V.clientY-K.sy),P()),N.current&&h.w>0&&j.current){const W=N.current.getBoundingClientRect(),Cl=U.current,xl=Eh(V.clientX-W.left,V.clientY-W.top,Cl.scale,Cl.offX,Cl.offY,h.w,h.h);j.current.textContent=hf(xl.ns,xl.ew)}},ll=()=>{Q.current.dragging=!1};return window.addEventListener("mousemove",F),window.addEventListener("mouseup",ll),()=>{window.removeEventListener("mousemove",F),window.removeEventListener("mouseup",ll)}},[P,h.w,h.h]);const J=z.useRef(null);z.useEffect(()=>{if(!O||h.w===0||!N.current||J.current===O)return;const F=f.find(Cl=>Cl.character_name===O);if(!F)return;J.current=O;const{x:ll,y:V}=xn(F.ew,F.ns,h.w,h.h),K=N.current.getBoundingClientRect(),W=3;U.current={scale:Math.min(Dd,Math.max(jd,W)),offX:K.width/2-ll*W,offY:K.height/2-V*W},P()},[O,f,h.w,h.h,P]),z.useEffect(()=>{O||(J.current=null)},[O]);const Ml=z.useCallback((F,ll,V)=>{y(F?{x:ll,y:V,player:F}:null)},[]);return o.jsxs("div",{className:"ml-map-container",ref:N,onWheel:Sl,onMouseDown:w,children:[o.jsxs("div",{ref:C,className:"ml-map-group",children:[o.jsx("img",{src:"/dereth.png",alt:"Dereth",className:"ml-map-img",onLoad:fl,draggable:!1}),h.w>0&&o.jsxs(o.Fragment,{children:[o.jsx(jh,{imgW:h.w,imgH:h.h,enabled:r}),o.jsx(Bd,{imgW:h.w,imgH:h.h,getColor:p}),o.jsx(Hd,{players:f,imgW:h.w,imgH:h.h,getColor:p,onHover:Ml,onSelect:A,selectedPlayer:O}),o.jsx(Nh,{imgW:h.w,imgH:h.h,enabled:T}),o.jsx(Rh,{imgW:h.w,imgH:h.h})]})]}),B&&o.jsxs("div",{className:"ml-tooltip",style:{left:B.x+12,top:B.y-10},children:[o.jsx("strong",{children:B.player.character_name}),o.jsx("br",{}),hf(B.player.ns,B.player.ew),o.jsx("br",{}),B.player.kills_per_hour," kph · ",(Vl=B.player.kills)==null?void 0:Vl.toLocaleString()," kills"]}),o.jsx("div",{className:"ml-coords",ref:j})]})},Yd=pn.memo(({player:f,vitals:p,color:A,onSelect:r,isSelected:T})=>{var B,y;const{openWindow:O}=zn(),N=(f.vt_state||"idle").toLowerCase(),C=N==="combat"||N==="hunt",h=(f.total_rares??0)>0?Math.round((f.total_kills??0)/(f.total_rares??1)).toLocaleString():null,_=f.character_name;return o.jsxs("li",{className:`ml-player-row ${T?"ml-player-selected":""}`,style:{borderLeftColor:A},children:[o.jsxs("div",{className:"ml-pr-header",onClick:r,children:[o.jsx("span",{className:"ml-pr-name",children:_}),o.jsx("span",{className:"ml-pr-coords",children:hf(f.ns,f.ew)})]}),o.jsxs("div",{className:"ml-pr-vitals",children:[o.jsx("div",{className:"ml-vital-bar hp",children:o.jsx("div",{className:"ml-vital-fill",style:{width:`${(p==null?void 0:p.health_percentage)??0}%`}})}),o.jsx("div",{className:"ml-vital-bar sta",children:o.jsx("div",{className:"ml-vital-fill",style:{width:`${(p==null?void 0:p.stamina_percentage)??0}%`}})}),o.jsx("div",{className:"ml-vital-bar mana",children:o.jsx("div",{className:"ml-vital-fill",style:{width:`${(p==null?void 0:p.mana_percentage)??0}%`}})})]}),o.jsxs("div",{className:"ml-pr-grid",children:[o.jsxs("span",{className:"ml-gs",title:"Session kills",children:["⚔️ ",((B=f.kills)==null?void 0:B.toLocaleString())??0]}),o.jsxs("span",{className:"ml-gs",title:"Total kills",children:["🏆 ",(f.total_kills??0).toLocaleString()]}),o.jsxs("span",{className:"ml-gs",title:"Kills per hour",children:[f.kills_per_hour??"0"," ",o.jsx("span",{className:"ml-suffix",children:"KPH"})]}),o.jsxs("span",{className:"ml-gs",title:"Rares (session / total)",children:["💎 ",f.session_rares??0," / ",f.total_rares??0]}),o.jsx("span",{className:"ml-gs",title:"Kills per rare",children:h?o.jsxs(o.Fragment,{children:["📊 ",h," ",o.jsx("span",{className:"ml-suffix",children:"KPR"})]}):""}),o.jsx("span",{className:`ml-meta-pill ${C?"active":N!=="idle"&&N!=="default"&&N!==""?"other":""}`,children:f.vt_state||"idle"}),o.jsxs("span",{className:"ml-gs",title:"Online time",children:["🕐 ",((y=f.onlinetime)==null?void 0:y.replace(/^00\./,""))??"--"]}),o.jsxs("span",{className:"ml-gs",title:"Deaths",children:["☠️ ",f.deaths??"0"]}),o.jsxs("span",{className:"ml-gs",title:"Prismatic tapers",children:[o.jsx("img",{src:"/prismatic-taper-icon.png",className:"ml-taper-icon",alt:""}),f.prismatic_taper_count??"0"]})]}),o.jsxs("div",{className:"ml-pr-buttons",children:[o.jsx("button",{className:"ml-btn accent",onClick:()=>O(`chat-${_}`,`Chat: ${_}`,_),children:"Chat"}),o.jsx("button",{className:"ml-btn accent",onClick:()=>O(`stats-${_}`,`Stats: ${_}`,_),children:"Stats"}),o.jsx("button",{className:"ml-btn accent",onClick:()=>O(`inv-${_}`,`Inventory: ${_}`,_),children:"Inv"}),o.jsx("button",{className:"ml-btn",onClick:()=>O(`char-${_}`,`Character: ${_}`,_),children:"Char"}),o.jsx("button",{className:"ml-btn",onClick:()=>O(`combat-${_}`,`Combat: ${_}`,_),children:"Combat"}),o.jsx("button",{className:"ml-btn",onClick:()=>O(`radar-${_}`,`Radar: ${_}`,_),children:"Radar"})]})]})});Yd.displayName="PlayerRow";const Bh=({players:f,vitals:p,getColor:A,onSelect:r,selectedPlayer:T})=>{const O=z.useRef(null),[N,C]=z.useState(!1),h=z.useCallback(()=>{O.current&&C(O.current.scrollTop>200)},[]);return o.jsxs("div",{style:{position:"relative",flex:1,minHeight:0},children:[o.jsx("ul",{className:"ml-player-list",ref:O,onScroll:h,children:f.map(_=>o.jsx(Yd,{player:_,vitals:p.get(_.character_name)??null,color:A(_.character_name),onSelect:()=>r(_.character_name),isSelected:T===_.character_name},_.character_name))}),N&&o.jsx("button",{onClick:()=>{var _;(_=O.current)==null||_.scrollTo({top:0,behavior:"smooth"})},style:{position:"absolute",bottom:8,right:8,width:28,height:28,borderRadius:"50%",background:"rgba(68,136,255,0.2)",border:"1px solid rgba(68,136,255,0.4)",color:"#6af",cursor:"pointer",fontSize:"0.8rem",display:"flex",alignItems:"center",justifyContent:"center"},children:"▲"})]})},qh=[{key:"name",label:"Name"},{key:"kph",label:"KPH"},{key:"skills",label:"S.Kills"},{key:"srares",label:"S.Rares"},{key:"tkills",label:"T.Kills"},{key:"kpr",label:"KPR"}],Yh=({value:f,onChange:p})=>o.jsx("div",{className:"ml-sort-buttons",children:qh.map(A=>o.jsx("button",{className:`ml-sort-btn ${f===A.key?"active":""}`,onClick:()=>p(A.key),children:A.label},A.key))}),Xh=()=>At("/live"),Gh=()=>At("/combat-stats"),Qh=()=>At("/server-health"),Vh=()=>At("/total-rares"),Zh=()=>At("/total-kills"),My=(f,p)=>yf("/agent/ask",{message:f,session_id:p}),Dy=()=>yf("/agent/sessions/new",{}),jy=f=>At(`/agent/sessions/${encodeURIComponent(f)}/history`),Lh=()=>At("/me");async function Kh(){await fetch("/api/logout",{credentials:"include",redirect:"manual"}),window.location.href="/login"}const Ny=()=>At("/api-admin/users"),Oy=(f,p,A)=>yf("/api-admin/users",{username:f,password:p,is_admin:A}),Cy=(f,p)=>_h(`/api-admin/users/${f}`,p),Uy=f=>Mh(`/api-admin/users/${f}`);function wh(){const[f,p]=z.useState(null),[A,r]=z.useState(!0);return z.useEffect(()=>{let T=!1;return Lh().then(O=>{T||p(O)}).catch(()=>{T||p(null)}).finally(()=>{T||r(!1)}),()=>{T=!0}},[]),{user:f,loading:A}}const Jh=()=>{const{openWindow:f}=zn(),{user:p}=wh(),A=!!(p!=null&&p.is_admin),r=z.useCallback(async()=>{if(confirm("Log out?"))try{await Kh()}catch{window.location.href="/login"}},[]);return o.jsxs("div",{className:"ml-tool-links",children:[o.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>f("agent","Overlord Assistant"),children:"🤖 Assistant"}),o.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},title:"Opens the player dashboard in a new tab",onClick:()=>window.open("/?view=dashboard","_blank","noopener"),children:"👥 Dashboard ↗"}),o.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>f("queststatus","Quest Status"),children:"📜 Quests"}),o.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>f("issues","Issues Board"),children:"📋 Issues"}),o.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>f("vitalsharing","Vital Sharing"),children:"🤝 Vitals"}),o.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>f("combatpicker","Combat Stats"),children:"⚔️ Combat"}),A&&o.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>f("adminusers","Admin · Users"),children:"🛡️ Admin"}),o.jsxs("span",{className:"ml-tool-link ml-tool-link-logout",style:{cursor:"pointer"},onClick:r,title:p?`Logged in as ${p.username}`:"Log out",children:["🚪 Log out",p?` (${p.username})`:""]})]})},kh=({players:f,vitals:p,serverHealth:A,totalRares:r,totalKills:T,getColor:O,onSelectPlayer:N,showHeatmap:C,showPortals:h,onToggleHeatmap:_,onTogglePortals:B,version:y,selectedPlayer:j})=>{var F,ll;const[U,Q]=z.useState("name"),[P,fl]=z.useState(""),Sl=z.useMemo(()=>f.reduce((V,K)=>V+(parseInt(K.kills_per_hour)||0),0),[f]),w=((F=A==null?void 0:A.status)==null?void 0:F.toLowerCase())==="online"||((ll=A==null?void 0:A.status)==null?void 0:ll.toLowerCase())==="up",J=z.useDeferredValue(f),Ml=z.useDeferredValue(p),Vl=z.useMemo(()=>{let V=[...J];switch(P&&(V=V.filter(K=>K.character_name.toLowerCase().startsWith(P.toLowerCase()))),U){case"kph":V.sort((K,W)=>(parseInt(W.kills_per_hour)||0)-(parseInt(K.kills_per_hour)||0));break;case"skills":V.sort((K,W)=>(W.kills||0)-(K.kills||0));break;case"srares":V.sort((K,W)=>(W.session_rares??0)-(K.session_rares??0));break;case"tkills":V.sort((K,W)=>(W.total_kills??0)-(K.total_kills??0));break;case"kpr":V.sort((K,W)=>{const Cl=(K.total_kills??0)/Math.max(1,K.total_rares??1),xl=(W.total_kills??0)/Math.max(1,W.total_rares??1);return Cl-xl});break;default:V.sort((K,W)=>K.character_name.localeCompare(W.character_name))}return V},[J,U,P]);return o.jsxs("div",{className:"ml-sidebar",children:[y&&o.jsxs("div",{className:"ml-version",children:["v",y]}),o.jsx("div",{className:"ml-sidebar-header",children:o.jsxs("span",{className:"ml-sidebar-title",style:{cursor:"pointer"},onClick:()=>{const V=document.createElement("div");V.style.cssText="position:fixed;top:0;left:0;width:100vw;height:100vh;background:#000;z-index:999999;display:flex;align-items:center;justify-content:center;";const K=document.createElement("video");K.src="/rick.mp4",K.autoplay=!0,K.loop=!0,K.style.cssText="width:100vw;height:100vh;object-fit:cover;",V.appendChild(K),document.body.appendChild(V),document.body.style.animation="ml-shake 0.05s 30";const W=document.createElement("style");W.textContent="@keyframes ml-shake{0%,100%{transform:translate(0) rotate(0)}25%{transform:translate(-15px,10px) rotate(-2deg)}50%{transform:translate(15px,-10px) rotate(2deg)}75%{transform:translate(-10px,-15px) rotate(-1deg)}} @keyframes ml-spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}",document.head.appendChild(W),setTimeout(()=>{V.style.animation="ml-spin 3s linear infinite"},1500),K.play().catch(()=>{})},children:["Active Mosswart Enjoyers (",f.length,")"]})}),o.jsxs("div",{className:"ml-server-status",children:[o.jsx("span",{className:`ml-status-dot ${w?"online":"offline"}`}),o.jsxs("span",{className:"ml-status-text",children:["Coldeve ",w?"Online":"Offline"]}),(A==null?void 0:A.player_count)!=null&&o.jsxs("span",{className:"ml-status-detail",children:["👥 ",A.player_count]}),(A==null?void 0:A.latency_ms)!=null&&o.jsxs("span",{className:"ml-status-detail",children:[Math.round(A.latency_ms),"ms"]}),(A==null?void 0:A.uptime_seconds)!=null&&o.jsxs("span",{className:"ml-status-detail",children:["Up: ",Math.floor(A.uptime_seconds/3600),"h"]})]}),o.jsxs("div",{className:"ml-counters",children:[o.jsxs("div",{className:"ml-counter rares",children:[o.jsx("span",{className:"ml-counter-val",children:r}),o.jsx("span",{className:"ml-counter-lbl",children:"Rares"})]}),o.jsxs("div",{className:`ml-counter kph ${Sl>5e3?"ultra":""}`,children:[o.jsx("span",{className:"ml-counter-val",children:Sl.toLocaleString()}),o.jsx("span",{className:"ml-counter-lbl",children:"Server KPH"})]}),o.jsxs("div",{className:"ml-counter kills",children:[o.jsx("span",{className:"ml-counter-val",children:T.toLocaleString()}),o.jsx("span",{className:"ml-counter-lbl",children:"Kills"})]})]}),o.jsxs("div",{className:"ml-tool-links",children:[o.jsx("a",{href:"/inventory.html",target:"_blank",className:"ml-tool-link",children:"🔍 Inv Search"}),o.jsx("a",{href:"/suitbuilder.html",target:"_blank",className:"ml-tool-link",children:"🛡️ Suitbuilder"}),o.jsx("a",{href:"/debug.html",target:"_blank",className:"ml-tool-link",children:"🐛 Debug"})]}),o.jsx(Jh,{}),o.jsxs("div",{className:"ml-toggles",children:[o.jsxs("label",{className:"ml-toggle-label",children:[o.jsx("input",{type:"checkbox",checked:C,onChange:V=>_(V.target.checked)}),o.jsx("span",{children:"Spawn Heatmap"})]}),o.jsxs("label",{className:"ml-toggle-label",children:[o.jsx("input",{type:"checkbox",checked:h,onChange:V=>B(V.target.checked)}),o.jsx("span",{children:"Portals"})]})]}),o.jsx("div",{style:{borderTop:"1px solid #333",marginTop:4,paddingTop:4}}),o.jsx(Yh,{value:U,onChange:Q}),o.jsx("input",{className:"ml-filter",type:"text",placeholder:"Filter players...",value:P,onChange:V=>fl(V.target.value)}),o.jsx(Bh,{players:Vl,vitals:Ml,getColor:O,onSelect:N,selectedPlayer:j})]})},Wh="modulepreload",$h=function(f){return"/"+f},Nd={},St=function(p,A,r){let T=Promise.resolve();if(A&&A.length>0){let N=function(_){return Promise.all(_.map(B=>Promise.resolve(B).then(y=>({status:"fulfilled",value:y}),y=>({status:"rejected",reason:y}))))};document.getElementsByTagName("link");const C=document.querySelector("meta[property=csp-nonce]"),h=(C==null?void 0:C.nonce)||(C==null?void 0:C.getAttribute("nonce"));T=N(A.map(_=>{if(_=$h(_),_ in Nd)return;Nd[_]=!0;const B=_.endsWith(".css"),y=B?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${_}"]${y}`))return;const j=document.createElement("link");if(j.rel=B?"stylesheet":Wh,B||(j.as="script"),j.crossOrigin="",j.href=_,h&&j.setAttribute("nonce",h),document.head.appendChild(j),B)return new Promise((U,Q)=>{j.addEventListener("load",U),j.addEventListener("error",()=>Q(new Error(`Unable to preload CSS for ${_}`)))})}))}function O(N){const C=new Event("vite:preloadError",{cancelable:!0});if(C.payload=N,window.dispatchEvent(C),!C.defaultPrevented)throw N}return T.then(N=>{for(const C of N||[])C.status==="rejected"&&O(C.reason);return p().catch(O)})},Xd=({id:f,title:p,zIndex:A,width:r=700,height:T=340,children:O})=>{const{closeWindow:N,bringToFront:C}=zn(),h=z.useRef(null),_=z.useRef({dragging:!1,sx:0,sy:0,ox:0,oy:0}),B=z.useRef({resizing:!1,sx:0,sy:0,sw:0,sh:0}),y=z.useRef({x:420,y:10+Math.random()*40}),[j,U]=z.useState({w:r,h:T}),Q=z.useCallback(fl=>{var w;fl.preventDefault(),C(f);const Sl=(w=h.current)==null?void 0:w.getBoundingClientRect();Sl&&(_.current={dragging:!0,sx:fl.clientX,sy:fl.clientY,ox:Sl.left,oy:Sl.top})},[f,C]),P=z.useCallback(fl=>{fl.preventDefault(),fl.stopPropagation(),B.current={resizing:!0,sx:fl.clientX,sy:fl.clientY,sw:j.w,sh:j.h}},[j.w,j.h]);return z.useEffect(()=>{const fl=w=>{const J=_.current;J.dragging&&h.current&&(y.current.x=J.ox+(w.clientX-J.sx),y.current.y=J.oy+(w.clientY-J.sy),h.current.style.left=`${y.current.x}px`,h.current.style.top=`${y.current.y}px`);const Ml=B.current;if(Ml.resizing){const Vl=Math.max(300,Ml.sw+(w.clientX-Ml.sx)),F=Math.max(200,Ml.sh+(w.clientY-Ml.sy));U({w:Vl,h:F})}},Sl=()=>{_.current.dragging=!1,B.current.resizing=!1};return window.addEventListener("mousemove",fl),window.addEventListener("mouseup",Sl),()=>{window.removeEventListener("mousemove",fl),window.removeEventListener("mouseup",Sl)}},[]),o.jsxs("div",{ref:h,className:"ml-window",style:{zIndex:A,width:j.w,height:j.h,left:y.current.x,top:y.current.y},onMouseDown:()=>C(f),children:[o.jsxs("div",{className:"ml-window-header",onMouseDown:Q,children:[o.jsx("span",{className:"ml-window-title",children:p}),o.jsx("button",{className:"ml-window-close",onClick:()=>N(f),children:"×"})]}),o.jsx("div",{className:"ml-window-content",children:O}),o.jsx("div",{className:"ml-window-resize",onMouseDown:P})]})},Fh={0:"#00FF00",2:"#FFFFFF",3:"#FF0000",4:"#FFFFFF",5:"#33CCFF",6:"#CCFF99",7:"#00FFFF",14:"#FFD700",15:"#FF69B4",17:"#AAAAFF",18:"#88FF88",21:"#FF8888",22:"#FFAA66"},Gd=50,Qd=f=>`mo-chat-history-${f}`;function Ih(f){try{const p=localStorage.getItem(Qd(f));return p?JSON.parse(p):[]}catch{return[]}}function Ph(f,p){try{localStorage.setItem(Qd(f),JSON.stringify(p.slice(-Gd)))}catch{}}const ly=({id:f,charName:p,zIndex:A,messages:r,socket:T})=>{const O=z.useRef(null),[N,C]=z.useState(""),[h,_]=z.useState(!1),B=z.useRef(Ih(p)),y=z.useRef(-1),j=z.useRef(""),U=z.useRef(!1);z.useEffect(()=>{const w=O.current;w&&(U.current?_(!0):(w.scrollTop=w.scrollHeight,_(!1)))},[r.length]);const Q=z.useCallback(()=>{const w=O.current;if(!w)return;const J=w.scrollHeight-w.scrollTop-w.clientHeight<30;U.current=!J,J&&_(!1)},[]),P=z.useCallback(()=>{const w=O.current;w&&(w.scrollTop=w.scrollHeight,U.current=!1,_(!1))},[]),fl=z.useCallback(w=>{w.preventDefault();const J=N.trim();!J||!T||T.readyState!==WebSocket.OPEN||(T.send(JSON.stringify({player_name:p,command:J})),B.current.push(J),B.current.length>Gd&&B.current.shift(),Ph(p,B.current),y.current=-1,j.current="",C(""),U.current=!1)},[N,T,p]),Sl=z.useCallback(w=>{const J=B.current;if(J.length!==0){if(w.key==="ArrowUp")w.preventDefault(),y.current===-1?(j.current=N,y.current=J.length-1):y.current>0&&y.current--,C(J[y.current]);else if(w.key==="ArrowDown"){if(w.preventDefault(),y.current===-1)return;y.currento.jsx("div",{className:"ml-chat-line",style:{color:Fh[w.color??2]??"#ddd"},children:w.text},J))}),h&&o.jsx("div",{onClick:P,style:{padding:"3px 0",textAlign:"center",fontSize:"0.65rem",color:"#6af",background:"#1a2a3a",cursor:"pointer",borderTop:"1px solid #334"},children:"▼ New messages below"}),o.jsx("form",{className:"ml-chat-form",onSubmit:fl,children:o.jsx("input",{className:"ml-chat-input",value:N,onChange:w=>C(w.target.value),onKeyDown:Sl,placeholder:"Enter chat..."})})]})},ty=z.lazy(()=>St(()=>import("./StatsWindow-C2s91wbD.js"),__vite__mapDeps([0,1])).then(f=>({default:f.StatsWindow}))),ay=z.lazy(()=>St(()=>import("./CharacterWindow-Bb3SdkAU.js"),__vite__mapDeps([2,1])).then(f=>({default:f.CharacterWindow}))),ey=z.lazy(()=>St(()=>import("./InventoryWindow-JHmmmlat.js"),__vite__mapDeps([3,1])).then(f=>({default:f.InventoryWindow}))),ny=z.lazy(()=>St(()=>import("./RadarWindow-DOYDpoy6.js"),__vite__mapDeps([4,1])).then(f=>({default:f.RadarWindow}))),uy=z.lazy(()=>St(()=>import("./CombatStatsWindow-DXMZxNVt.js"),__vite__mapDeps([5,1])).then(f=>({default:f.CombatStatsWindow}))),cy=z.lazy(()=>St(()=>import("./CombatPickerWindow-d0qw-27F.js"),__vite__mapDeps([6,1])).then(f=>({default:f.CombatPickerWindow}))),iy=z.lazy(()=>St(()=>import("./IssuesWindow-BaiYHihK.js"),__vite__mapDeps([7,1])).then(f=>({default:f.IssuesWindow}))),fy=z.lazy(()=>St(()=>import("./VitalSharingWindow-Br70fun8.js"),__vite__mapDeps([8,1])).then(f=>({default:f.VitalSharingWindow}))),sy=z.lazy(()=>St(()=>import("./QuestStatusWindow-DwtlXaE5.js"),__vite__mapDeps([9,1])).then(f=>({default:f.QuestStatusWindow}))),oy=z.lazy(()=>St(()=>Promise.resolve().then(()=>xy),void 0).then(f=>({default:f.PlayerDashboardWindow}))),ry=z.lazy(()=>St(()=>import("./AgentWindow-8k8-gwjm.js"),__vite__mapDeps([10,1])).then(f=>({default:f.AgentWindow}))),dy=z.lazy(()=>St(()=>import("./AdminUsersWindow-BcIU-wul.js"),__vite__mapDeps([11,1])).then(f=>({default:f.AdminUsersWindow}))),Vd=pn.memo(({characters:f,chatMessages:p,nearbyObjects:A,inventoryVersions:r,equipmentCantrips:T,characterStats:O,socket:N})=>{const{windows:C}=zn();return o.jsx(z.Suspense,{fallback:null,children:C.map(h=>{var y;const _=h.charName??"";switch(h.id.split("-")[0]){case"chat":return o.jsx(ly,{id:h.id,charName:_,zIndex:h.zIndex,messages:p.get(_)??[],socket:N},h.id);case"stats":return o.jsx(ty,{id:h.id,charName:_,zIndex:h.zIndex},h.id);case"char":return o.jsx(ay,{id:h.id,charName:_,zIndex:h.zIndex,vitals:((y=f.get(_))==null?void 0:y.vitals)??void 0,liveStats:O.get(_)},h.id);case"inv":return o.jsx(ey,{id:h.id,charName:_,zIndex:h.zIndex,inventoryVersion:r.get(_)??0,equipmentCantrips:T.get(_)},h.id);case"radar":return o.jsx(ny,{id:h.id,charName:_,zIndex:h.zIndex,socket:N,radarData:A.get(_)??null},h.id);case"combat":return o.jsx(uy,{id:h.id,charName:_,zIndex:h.zIndex},h.id);case"combatpicker":return o.jsx(cy,{id:h.id,zIndex:h.zIndex,characters:f},h.id);case"issues":return o.jsx(iy,{id:h.id,zIndex:h.zIndex},h.id);case"vitalsharing":return o.jsx(fy,{id:h.id,zIndex:h.zIndex},h.id);case"queststatus":return o.jsx(sy,{id:h.id,zIndex:h.zIndex},h.id);case"playerdash":return o.jsx(oy,{id:h.id,zIndex:h.zIndex,characters:f},h.id);case"agent":return o.jsx(ry,{id:h.id,zIndex:h.zIndex},h.id);case"adminusers":return o.jsx(dy,{id:h.id,zIndex:h.zIndex},h.id);default:return null}})})});Vd.displayName="WindowRenderer";let my=0;const hy=({recentRares:f})=>{const[p,A]=z.useState([]),[r,T]=z.useState(0),[O,N]=z.useState([]);z.useEffect(()=>{if(f.length>r&&r>0){const h=f.slice(0,f.length-r);for(const _ of h){const B=++my;A(y=>[...y,{key:B,charName:_.character_name,rareName:_.name,exiting:!1}]),C();try{const y=new AudioContext,j=y.createOscillator(),U=y.createGain();j.connect(U),U.connect(y.destination),j.frequency.value=880,j.type="sine",U.gain.value=.3,j.start(),U.gain.exponentialRampToValueAtTime(.001,y.currentTime+.5),j.stop(y.currentTime+.5)}catch{}setTimeout(()=>{A(y=>y.map(j=>j.key===B?{...j,exiting:!0}:j)),setTimeout(()=>{A(y=>y.filter(j=>j.key!==B))},500)},6e3)}}T(f.length)},[f.length]);const C=z.useCallback(()=>{const h=Date.now(),_=["#FFD700","#FF4444","#FF8800","#AA44FF","#4488FF"],B=Array.from({length:30},(y,j)=>{const U=Math.PI*2*j/30+(Math.random()-.5)*.5,Q=100+Math.random()*200;return{dx:Math.cos(U)*Q,dy:Math.sin(U)*Q-50,color:_[Math.floor(Math.random()*_.length)]}});N(y=>[...y,{id:h,particles:B}]),setTimeout(()=>N(y=>y.filter(j=>j.id!==h)),2200)},[]);return o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"ml-rare-notifications",children:p.map(h=>o.jsxs("div",{className:`ml-rare-notif ${h.exiting?"exiting":""}`,children:[o.jsx("div",{className:"ml-rare-notif-title",children:"🎆 LEGENDARY RARE! 🎆"}),o.jsx("div",{className:"ml-rare-notif-name",children:h.rareName}),o.jsx("div",{className:"ml-rare-notif-by",children:"found by"}),o.jsx("div",{className:"ml-rare-notif-char",children:h.charName})]},h.key))}),o.jsx("div",{className:"ml-fireworks",children:O.map(h=>o.jsx(pn.Fragment,{children:h.particles.map((_,B)=>o.jsx("div",{className:"ml-firework-particle",style:{left:"50%",top:"30%",backgroundColor:_.color,"--dx":`${_.dx}px`,"--dy":`${_.dy+200}px`}},B))},h.id))})]})};let yy=0;const vy=({deathAlerts:f})=>{const[p,A]=z.useState([]),r=z.useRef(0);return z.useEffect(()=>{if(f.length>r.current&&r.current>0){const T=f.slice(r.current);for(const O of T){const N=++yy;A(C=>[...C,{key:N,alert:O,exiting:!1}]);try{const C=new AudioContext,h=C.createOscillator(),_=C.createGain();h.connect(_),_.connect(C.destination),h.frequency.value=440,h.type="sawtooth",_.gain.value=.2,h.start(),_.gain.exponentialRampToValueAtTime(.001,C.currentTime+.8),h.stop(C.currentTime+.8)}catch{}setTimeout(()=>{A(C=>C.map(h=>h.key===N?{...h,exiting:!0}:h)),setTimeout(()=>A(C=>C.filter(h=>h.key!==N)),500)},8e3)}}r.current=f.length},[f.length]),p.length===0?null:o.jsx("div",{style:{position:"fixed",top:70,left:"50%",transform:"translateX(-50%)",zIndex:99999,display:"flex",flexDirection:"column",gap:6,pointerEvents:"none"},children:p.map(T=>o.jsxs("div",{style:{background:"linear-gradient(135deg, #2a0a0a, #1a0000)",border:"2px solid #cc4444",borderRadius:8,padding:"12px 24px",textAlign:"center",boxShadow:"0 0 30px rgba(204, 68, 68, 0.3)",animation:T.exiting?"ml-notif-out 0.5s ease-in forwards":"ml-notif-in 0.5s ease-out"},children:[o.jsx("div",{style:{fontSize:"1.2rem",fontWeight:800,color:"#ff4444"},children:"☠️ CHARACTER DIED ☠️"}),o.jsx("div",{style:{fontSize:"1rem",fontWeight:600,color:"#fff",marginTop:2},children:T.alert.character_name}),o.jsxs("div",{style:{fontSize:"0.8rem",color:"#c88",marginTop:2},children:["Vitae: ",T.alert.vitae,"%"]})]},T.key))})},Od=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf","#ff4444","#44ff44","#4444ff","#ffff44","#ff44ff","#44ffff","#ff8844","#88ff44","#4488ff","#ff4488","#cc3333","#33cc33","#3333cc","#cccc33","#cc33cc","#33cccc","#cc6633","#66cc33","#3366cc","#cc3366","#ff6666","#66ff66","#6666ff","#ffff66","#ff66ff","#66ffff","#ffaa66","#aaff66","#66aaff","#ff66aa","#990099","#009900","#000099","#990000","#009999","#999900","#aa5500","#55aa00","#0055aa","#aa0055","#ffaaaa","#aaffaa","#aaaaff","#ffffaa","#ffaaff","#aaffff","#ffccaa","#ccffaa","#aaccff","#ffaacc"];function gy(f){let p=0;for(let A=0;A{let T=f.current.get(r);return T||(T=p.current{const{enabled:f}=vf();return f?o.jsx("div",{className:"ms-banner",role:"status",children:"🐸 Glad midsommar! 🌼 Små grodorna, små grodorna… 🥂"}):null},Cd=["🐸","🌼","🌸","🇸🇪","🌿"],Ld=()=>{const{enabled:f}=vf();return z.useEffect(()=>{if(!f||window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const p=document.createElement("div");p.className="ms-rain",document.body.appendChild(p);const A=()=>{const T=document.createElement("span");T.textContent=Cd[Math.floor(Math.random()*Cd.length)],T.style.left=Math.floor(Math.random()*100)+"vw";const O=6+Math.random()*5;T.style.animationDuration=O.toFixed(2)+"s",T.style.fontSize=14+Math.floor(Math.random()*16)+"px",p.appendChild(T),window.setTimeout(()=>T.remove(),O*1e3+250)},r=window.setInterval(A,450);return()=>{window.clearInterval(r),p.remove()}},[f]),null},by=({data:f})=>{const p=Sy(),[A,r]=z.useState(!1),[T,O]=z.useState(!1),[N,C]=z.useState(null),h=z.useMemo(()=>Array.from(f.characters.values()).filter(U=>U.telemetry).map(U=>U.telemetry),[f.characters]),_=z.useMemo(()=>new Map(Array.from(f.characters.values()).filter(U=>U.vitals).map(U=>[U.name,U.vitals])),[f.characters]),[B,y]=z.useState("");z.useEffect(()=>{fetch("/api/api-version",{credentials:"include"}).then(U=>U.json()).then(U=>y(U.version??"")).catch(()=>{})},[]);const j=z.useCallback(U=>{C(Q=>Q===U?null:U)},[]);return o.jsx(Th,{children:o.jsxs("div",{className:"ml-layout",children:[o.jsx(Zd,{}),o.jsx(Ld,{}),o.jsx(kh,{players:h,vitals:_,serverHealth:f.serverHealth,totalRares:f.totalRares,totalKills:f.totalKills,getColor:p,onSelectPlayer:j,showHeatmap:A,showPortals:T,onToggleHeatmap:r,onTogglePortals:O,version:B,selectedPlayer:N}),o.jsx(Hh,{players:h,getColor:p,onSelectPlayer:j,showHeatmap:A,showPortals:T,selectedPlayer:N}),o.jsx(Vd,{characters:f.characters,chatMessages:f.chatMessages,nearbyObjects:f.nearbyObjects,inventoryVersions:f.inventoryVersions,equipmentCantrips:f.equipmentCantrips,characterStats:f.characterStats,socket:f.socketRef.current}),o.jsx(hy,{recentRares:f.recentRares}),o.jsx(vy,{deathAlerts:f.deathAlerts})]})})};function py(f){const p=z.useRef(null),A=z.useRef(0),r=z.useRef(f);r.current=f;const T=z.useCallback(()=>{var N;if(((N=p.current)==null?void 0:N.readyState)===WebSocket.OPEN)return;const O=new WebSocket(Dh());p.current=O,O.addEventListener("message",C=>{try{const h=JSON.parse(C.data);r.current(h)}catch{}}),O.addEventListener("close",()=>{p.current=null,A.current=window.setTimeout(T,2e3)}),O.addEventListener("error",()=>{O.close()})},[]);return z.useEffect(()=>(T(),()=>{var O;clearTimeout(A.current),(O=p.current)==null||O.close(),p.current=null}),[T]),p}function Kd(){const[f,p]=z.useState(new Map),[A,r]=z.useState(null),[T,O]=z.useState(0),[N,C]=z.useState(0),[h,_]=z.useState([]),B=z.useRef(new Map),[y,j]=z.useState(0),[U,Q]=z.useState(new Map),P=z.useRef(new Map),[fl,Sl]=z.useState(0),w=z.useRef(new Map),[J,Ml]=z.useState(0),[Vl,F]=z.useState([]),[ll,V]=z.useState(new Map),K=z.useRef(f);K.current=f;const W=z.useCallback((S,R)=>{p(G=>{const H=new Map(G),Y=H.get(S)??{name:S,telemetry:null,vitals:null,combat:null,lastUpdate:0};return H.set(S,R(Y)),H})},[]),Cl=z.useCallback(S=>{var R,G;if(S.type){if(S.type==="telemetry"){const H=S;W(H.character_name,Y=>({...Y,telemetry:H,lastUpdate:Date.now()}))}else if(S.type==="vitals"){const H=S,Y=(R=K.current.get(H.character_name))==null?void 0:R.vitals;Y&&(Y.vitae??0)===0&&(H.vitae??0)>0&&F(sl=>[...sl,{character_name:H.character_name,vitae:H.vitae,timestamp:new Date().toISOString()}].slice(-50)),W(H.character_name,sl=>({...sl,vitals:H,lastUpdate:Date.now()}))}else if(S.type==="combat_stats"){const H=S;W(H.character_name,Y=>({...Y,combat:H,lastUpdate:Date.now()}))}else if(S.type==="rare"){const H=S;_(Y=>[H,...Y].slice(0,50))}else if(S.type==="inventory_delta"){const H=S;H.character_name&&Q(Y=>{const sl=new Map(Y);return sl.set(H.character_name,(sl.get(H.character_name)??0)+1),sl})}else if(S.type==="character_stats"){const H=S;w.current.set(H.character_name,S),Ml(Y=>Y+1)}else if(S.type==="equipment_cantrip_state"){const H=S;P.current.set(H.character_name,H),Sl(Y=>Y+1)}else if(S.type==="dungeon_map"){const H=S;H.landblock&&(window.__dungeonMapCache||(window.__dungeonMapCache={}),window.__dungeonMapCache[H.landblock]=H)}else if(S.type==="nearby_objects"){const H=S;if(V(Y=>{const sl=new Map(Y);return sl.set(H.character_name,H),sl}),H.is_dungeon&&H.landblock&&!((G=window.__dungeonMapCache)!=null&&G[H.landblock])){const Y=xl.current;(Y==null?void 0:Y.readyState)===WebSocket.OPEN&&Y.send(JSON.stringify({type:"request_dungeon_map",landblock:H.landblock}))}}else if(S.type==="chat"){const H=S,Y=B.current.get(H.character_name)??[];Y.push({text:H.text,color:H.color,timestamp:H.timestamp}),Y.length>1e3&&Y.splice(0,Y.length-1e3),B.current.set(H.character_name,Y),j(sl=>sl+1)}}},[W]),xl=py(Cl);z.useEffect(()=>{const S=async()=>{try{const G=await Xh();p(H=>{var sl;const Y=new Map(H);for(const ol of G.players??[]){const I=Y.get(ol.character_name);Y.set(ol.character_name,{name:ol.character_name,telemetry:ol,vitals:(I==null?void 0:I.vitals)??null,combat:(I==null?void 0:I.combat)??null,lastUpdate:Date.now()})}for(const ol of Y.keys())(sl=G.players)!=null&&sl.some(I=>I.character_name===ol)||Y.delete(ol);return Y})}catch{}};S();const R=setInterval(S,5e3);return()=>clearInterval(R)},[]),z.useEffect(()=>{const S=async()=>{try{const G=await Gh();for(const H of G.stats??[])W(H.character_name,Y=>({...Y,combat:{...H,type:"combat_stats"}}))}catch{}};S();const R=setInterval(S,3e4);return()=>clearInterval(R)},[W]),z.useEffect(()=>{const S=async()=>{try{r(await Qh())}catch{}};S();const R=setInterval(S,3e4);return()=>clearInterval(R)},[]),z.useEffect(()=>{const S=async()=>{try{const[G,H]=await Promise.all([Vh(),Zh()]);O(G.all_time??0),C(H.total??0)}catch{}};S();const R=setInterval(S,3e5);return()=>clearInterval(R)},[]);const Nt=z.useMemo(()=>B.current,[y]),Tt=z.useMemo(()=>P.current,[fl]),bt=z.useMemo(()=>w.current,[J]);return{characters:f,serverHealth:A,totalRares:T,totalKills:N,recentRares:h,chatMessages:Nt,nearbyObjects:ll,inventoryVersions:U,equipmentCantrips:Tt,characterStats:bt,deathAlerts:Vl,socketRef:xl}}const gf=({characters:f})=>{const[p,A]=z.useState("kph"),[r,T]=z.useState(!1),[O,N]=z.useState(null),C=z.useMemo(()=>{const y=Array.from(f.values()).filter(j=>j.telemetry).map(j=>{var Q,P,fl;const U=j.telemetry;return{name:j.name,kills:U.kills??0,kph:parseInt(U.kills_per_hour)||0,totalKills:U.total_kills??0,rares:U.total_rares??0,sessionRares:U.session_rares??0,deaths:parseInt(U.deaths)||0,totalDeaths:parseInt(U.total_deaths)||0,uptime:((Q=U.onlinetime)==null?void 0:Q.replace(/^00\./,""))??"",state:U.vt_state??"idle",tapers:parseInt(U.prismatic_taper_count)||0,hp:((P=j.vitals)==null?void 0:P.health_percentage)??0,vitae:((fl=j.vitals)==null?void 0:fl.vitae)??0}});return y.sort((j,U)=>{let Q=0;switch(p){case"name":Q=j.name.localeCompare(U.name);break;case"kills":Q=j.kills-U.kills;break;case"kph":Q=j.kph-U.kph;break;case"rares":Q=j.rares-U.rares;break;case"deaths":Q=j.totalDeaths-U.totalDeaths;break;case"uptime":Q=j.uptime.localeCompare(U.uptime);break;case"state":Q=j.state.localeCompare(U.state);break}return r?Q:-Q}),y},[f,p,r]),h=y=>{p===y?T(!r):(A(y),T(!1))},_=y=>({padding:"4px 6px",cursor:"pointer",userSelect:"none",color:p===y?"#6af":"#888",fontSize:"0.65rem",fontWeight:600,whiteSpace:"nowrap",borderBottom:"1px solid #444"}),B=y=>p===y?r?" ▲":" ▼":"";return o.jsxs("div",{style:{flex:1,overflow:"auto",fontSize:"0.73rem"},children:[o.jsxs("table",{style:{width:"auto",borderCollapse:"collapse"},children:[o.jsx("thead",{children:o.jsxs("tr",{style:{position:"sticky",top:0,background:"#1a1a1a",zIndex:1},children:[o.jsxs("th",{style:{..._("name"),textAlign:"left"},onClick:()=>h("name"),children:["Character",B("name")]}),o.jsxs("th",{style:{..._("state"),textAlign:"center"},onClick:()=>h("state"),children:["State",B("state")]}),o.jsxs("th",{style:{..._("kph"),textAlign:"right"},onClick:()=>h("kph"),children:["KPH",B("kph")]}),o.jsxs("th",{style:{..._("kills"),textAlign:"right"},onClick:()=>h("kills"),children:["Session",B("kills")]}),o.jsx("th",{style:{textAlign:"right",padding:"4px 6px",color:"#888",fontSize:"0.65rem",fontWeight:600,borderBottom:"1px solid #444"},children:"Total"}),o.jsxs("th",{style:{..._("rares"),textAlign:"right"},onClick:()=>h("rares"),children:["Rares",B("rares")]}),o.jsxs("th",{style:{..._("deaths"),textAlign:"right"},onClick:()=>h("deaths"),children:["Deaths",B("deaths")]}),o.jsxs("th",{style:{..._("uptime"),textAlign:"right"},onClick:()=>h("uptime"),children:["Uptime",B("uptime")]}),o.jsx("th",{style:{textAlign:"right",padding:"4px 6px",color:"#888",fontSize:"0.65rem",fontWeight:600,borderBottom:"1px solid #444"},children:"HP%"}),o.jsx("th",{style:{textAlign:"right",padding:"4px 6px",color:"#888",fontSize:"0.65rem",fontWeight:600,borderBottom:"1px solid #444"},children:"Vitae"}),o.jsx("th",{style:{textAlign:"right",padding:"4px 6px",color:"#888",fontSize:"0.65rem",fontWeight:600,borderBottom:"1px solid #444"},children:"Tapers"})]})}),o.jsx("tbody",{children:C.map(y=>{const j=y.state.toLowerCase(),U=j==="combat"||j==="hunt",Q=O===y.name;return o.jsxs("tr",{onClick:()=>N(Q?null:y.name),style:{borderBottom:"1px solid #1a1a1a",cursor:"pointer",background:Q?"rgba(102, 170, 255, 0.18)":void 0,outline:Q?"1px solid rgba(102, 170, 255, 0.55)":void 0,outlineOffset:"-1px"},children:[o.jsx("td",{style:{padding:"3px 10px 3px 6px",color:"#ccc",fontWeight:500,whiteSpace:"nowrap"},children:y.name}),o.jsx("td",{style:{textAlign:"center",padding:"3px 6px"},children:o.jsx("span",{style:{fontSize:"0.6rem",padding:"1px 6px",borderRadius:3,background:U?"rgba(68,204,68,0.15)":j==="idle"||j==="default"?"rgba(100,100,100,0.2)":"rgba(204,68,68,0.15)",color:U?"#4c4":j==="idle"||j==="default"?"#888":"#c44"},children:y.state})}),o.jsx("td",{style:{textAlign:"right",padding:"3px 6px",color:"#4c4",fontVariantNumeric:"tabular-nums"},children:y.kph.toLocaleString()}),o.jsx("td",{style:{textAlign:"right",padding:"3px 6px",color:"#ccc",fontVariantNumeric:"tabular-nums"},children:y.kills.toLocaleString()}),o.jsx("td",{style:{textAlign:"right",padding:"3px 6px",color:"#888",fontVariantNumeric:"tabular-nums"},children:y.totalKills.toLocaleString()}),o.jsxs("td",{style:{textAlign:"right",padding:"3px 6px",color:"#fc0",fontVariantNumeric:"tabular-nums"},children:[y.rares,y.sessionRares>0?` (${y.sessionRares})`:""]}),o.jsx("td",{style:{textAlign:"right",padding:"3px 6px",color:y.totalDeaths>0?"#c66":"#555",fontVariantNumeric:"tabular-nums"},children:y.totalDeaths}),o.jsx("td",{style:{textAlign:"right",padding:"3px 6px",color:"#888",fontVariantNumeric:"tabular-nums"},children:y.uptime}),o.jsxs("td",{style:{textAlign:"right",padding:"3px 6px",fontVariantNumeric:"tabular-nums",color:y.hp>80?"#4c4":y.hp>40?"#ca0":"#c44"},children:[y.hp.toFixed(0),"%"]}),o.jsx("td",{style:{textAlign:"right",padding:"3px 6px",fontVariantNumeric:"tabular-nums",color:y.vitae>0?"#f66":"#333"},children:y.vitae>0?`${y.vitae}%`:""}),o.jsx("td",{style:{textAlign:"right",padding:"3px 6px",color:"#888",fontVariantNumeric:"tabular-nums"},children:y.tapers.toLocaleString()})]},y.name)})})]}),C.length===0&&o.jsx("div",{style:{padding:20,color:"#666",textAlign:"center"},children:"No characters online"})]})},zy=({id:f,zIndex:p,characters:A})=>o.jsx(Xd,{id:f,title:"Player Dashboard",zIndex:p,width:850,height:500,children:o.jsx(gf,{characters:A})}),xy=Object.freeze(Object.defineProperty({__proto__:null,PlayerDashboardContent:gf,PlayerDashboardWindow:zy},Symbol.toStringTag,{value:"Module"})),Ay=()=>{const f=Kd(),[p,A]=z.useState("");z.useEffect(()=>{const T=document.title;return document.title="Overlord Dashboard",()=>{document.title=T}},[]),z.useEffect(()=>{fetch("/api/api-version",{credentials:"include"}).then(T=>T.json()).then(T=>A(T.version??"")).catch(()=>{})},[]);const r=Array.from(f.characters.values()).filter(T=>T.telemetry).length;return o.jsxs("div",{className:"ml-dashboard-page",children:[o.jsx(Zd,{}),o.jsx(Ld,{}),o.jsxs("header",{className:"ml-dashboard-header",children:[o.jsx("span",{className:"ml-dashboard-title",children:"👥 Player Dashboard"}),o.jsxs("span",{className:"ml-dashboard-count",children:[r," online"]}),o.jsx("span",{style:{flex:1}}),p&&o.jsxs("span",{className:"ml-dashboard-version",children:["v",p]})]}),o.jsx("main",{className:"ml-dashboard-main",children:o.jsx(gf,{characters:f.characters})})]})};function Ty(){const f=new URLSearchParams(window.location.search).get("view");return o.jsx(Ch,{children:f==="dashboard"?o.jsx(Ay,{}):o.jsx(Ey,{})})}function Ey(){const f=Kd();return o.jsx(by,{data:f})}Ah.createRoot(document.getElementById("root")).render(o.jsx(z.StrictMode,{children:o.jsx(Ty,{})}));"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").catch(()=>{});export{Xd as D,At as a,jy as b,My as c,Dy as d,wh as e,Oy as f,Cy as g,Uy as h,o as j,Ny as l,z as r,zn as u}; diff --git a/static/assets/index-DtA97zvw.js b/static/assets/index-DtA97zvw.js new file mode 100644 index 00000000..b23dc23d --- /dev/null +++ b/static/assets/index-DtA97zvw.js @@ -0,0 +1,34 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StatsWindow-mORPbi1c.js","assets/react-yfL0ty4i.js","assets/CharacterWindow-CVYGQ3Kf.js","assets/InventoryWindow-C9tBB4ai.js","assets/RadarWindow-CjHETj1t.js","assets/CombatStatsWindow-CL4bPDdu.js","assets/CombatPickerWindow-DqQoZIr1.js","assets/IssuesWindow-RD9J2Lzz.js","assets/VitalSharingWindow-DWxCoItf.js","assets/QuestStatusWindow-1bRYpy_f.js","assets/AgentWindow-D_dwVTgP.js","assets/AdminUsersWindow-DT6JGS-P.js"])))=>i.map(i=>d[i]); +import{r as Yd,g as _0,a as z0}from"./react-yfL0ty4i.js";(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const x of document.querySelectorAll('link[rel="modulepreload"]'))r(x);new MutationObserver(x=>{for(const A of x)if(A.type==="childList")for(const M of A.addedNodes)M.tagName==="LINK"&&M.rel==="modulepreload"&&r(M)}).observe(document,{childList:!0,subtree:!0});function m(x){const A={};return x.integrity&&(A.integrity=x.integrity),x.referrerPolicy&&(A.referrerPolicy=x.referrerPolicy),x.crossOrigin==="use-credentials"?A.credentials="include":x.crossOrigin==="anonymous"?A.credentials="omit":A.credentials="same-origin",A}function r(x){if(x.ep)return;x.ep=!0;const A=m(x);fetch(x.href,A)}})();var ms={exports:{}},_n={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Td;function j0(){if(Td)return _n;Td=1;var c=Symbol.for("react.transitional.element"),o=Symbol.for("react.fragment");function m(r,x,A){var M=null;if(A!==void 0&&(M=""+A),x.key!==void 0&&(M=""+x.key),"key"in x){A={};for(var N in x)N!=="key"&&(A[N]=x[N])}else A=x;return x=A.ref,{$$typeof:c,type:r,key:M,ref:x!==void 0?x:null,props:A}}return _n.Fragment=o,_n.jsx=m,_n.jsxs=m,_n}var Ed;function A0(){return Ed||(Ed=1,ms.exports=j0()),ms.exports}var s=A0(),p=Yd();const jn=_0(p);var hs={exports:{}},zn={},ys={exports:{}},vs={};/** + * @license React + * scheduler.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Nd;function T0(){return Nd||(Nd=1,(function(c){function o(_,B){var w=_.length;_.push(B);l:for(;0>>1,G=_[H];if(0>>1;Hx(el,w))qlx(Tt,el)?(_[H]=Tt,_[ql]=w,H=ql):(_[H]=el,_[dl]=w,H=dl);else if(qlx(Tt,w))_[H]=Tt,_[ql]=w,H=ql;else break l}}return B}function x(_,B){var w=_.sortIndex-B.sortIndex;return w!==0?w:_.id-B.id}if(c.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var A=performance;c.unstable_now=function(){return A.now()}}else{var M=Date,N=M.now();c.unstable_now=function(){return M.now()-N}}var y=[],T=[],q=1,g=null,j=3,R=!1,L=!1,$=!1,Y=!1,C=typeof setTimeout=="function"?setTimeout:null,X=typeof clearTimeout=="function"?clearTimeout:null,F=typeof setImmediate<"u"?setImmediate:null;function zl(_){for(var B=m(T);B!==null;){if(B.callback===null)r(T);else if(B.startTime<=_)r(T),B.sortIndex=B.expirationTime,o(y,B);else break;B=m(T)}}function Ul(_){if($=!1,zl(_),!L)if(m(y)!==null)L=!0,tl||(tl=!0,jl());else{var B=m(T);B!==null&&xt(Ul,B.startTime-_)}}var tl=!1,al=-1,Z=5,J=-1;function P(){return Y?!0:!(c.unstable_now()-J_&&P());){var H=g.callback;if(typeof H=="function"){g.callback=null,j=g.priorityLevel;var G=H(g.expirationTime<=_);if(_=c.unstable_now(),typeof G=="function"){g.callback=G,zl(_),B=!0;break t}g===m(y)&&r(y),zl(_)}else r(y);g=m(y)}if(g!==null)B=!0;else{var rl=m(T);rl!==null&&xt(Ul,rl.startTime-_),B=!1}}break l}finally{g=null,j=w,R=!1}B=void 0}}finally{B?jl():tl=!1}}}var jl;if(typeof F=="function")jl=function(){F(Rl)};else if(typeof MessageChannel<"u"){var Dt=new MessageChannel,At=Dt.port2;Dt.port1.onmessage=Rl,jl=function(){At.postMessage(null)}}else jl=function(){C(Rl,0)};function xt(_,B){al=C(function(){_(c.unstable_now())},B)}c.unstable_IdlePriority=5,c.unstable_ImmediatePriority=1,c.unstable_LowPriority=4,c.unstable_NormalPriority=3,c.unstable_Profiling=null,c.unstable_UserBlockingPriority=2,c.unstable_cancelCallback=function(_){_.callback=null},c.unstable_forceFrameRate=function(_){0>_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):Z=0<_?Math.floor(1e3/_):5},c.unstable_getCurrentPriorityLevel=function(){return j},c.unstable_next=function(_){switch(j){case 1:case 2:case 3:var B=3;break;default:B=j}var w=j;j=B;try{return _()}finally{j=w}},c.unstable_requestPaint=function(){Y=!0},c.unstable_runWithPriority=function(_,B){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var w=j;j=_;try{return B()}finally{j=w}},c.unstable_scheduleCallback=function(_,B,w){var H=c.unstable_now();switch(typeof w=="object"&&w!==null?(w=w.delay,w=typeof w=="number"&&0H?(_.sortIndex=w,o(T,_),m(y)===null&&_===m(T)&&($?(X(al),al=-1):$=!0,xt(Ul,w-H))):(_.sortIndex=G,o(y,_),L||R||(L=!0,tl||(tl=!0,jl()))),_},c.unstable_shouldYield=P,c.unstable_wrapCallback=function(_){var B=j;return function(){var w=j;j=B;try{return _.apply(this,arguments)}finally{j=w}}}})(vs)),vs}var Md;function E0(){return Md||(Md=1,ys.exports=T0()),ys.exports}/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Cd;function N0(){if(Cd)return zn;Cd=1;var c=E0(),o=Yd(),m=z0();function r(l){var t="https://react.dev/errors/"+l;if(1G||(l.current=H[G],H[G]=null,G--)}function el(l,t){G++,H[G]=l.current,l.current=t}var ql=rl(null),Tt=rl(null),Ft=rl(null),En=rl(null);function Nn(l,t){switch(el(Ft,t),el(Tt,l),el(ql,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?Wr(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=Wr(t),l=$r(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}dl(ql),el(ql,l)}function Qe(){dl(ql),dl(Tt),dl(Ft)}function Ju(l){l.memoizedState!==null&&el(En,l);var t=ql.current,e=$r(t,l.type);t!==e&&(el(Tt,l),el(ql,e))}function Mn(l){Tt.current===l&&(dl(ql),dl(Tt)),En.current===l&&(dl(En),pn._currentValue=w)}var Wu,zs;function je(l){if(Wu===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);Wu=t&&t[1]||"",zs=-1)":-1n||d[a]!==S[n]){var O=` +`+d[a].replace(" at new "," at ");return l.displayName&&O.includes("")&&(O=O.replace("",l.displayName)),O}while(1<=a&&0<=n);break}}}finally{$u=!1,Error.prepareStackTrace=e}return(e=l?l.displayName||l.name:"")?je(e):""}function Pd(l,t){switch(l.tag){case 26:case 27:case 5:return je(l.type);case 16:return je("Lazy");case 13:return l.child!==t&&t!==null?je("Suspense Fallback"):je("Suspense");case 19:return je("SuspenseList");case 0:case 15:return Fu(l.type,!1);case 11:return Fu(l.type.render,!1);case 1:return Fu(l.type,!0);case 31:return je("Activity");default:return""}}function js(l){try{var t="",e=null;do t+=Pd(l,e),e=l,l=l.return;while(l);return t}catch(a){return` +Error generating stack: `+a.message+` +`+a.stack}}var Iu=Object.prototype.hasOwnProperty,Pu=c.unstable_scheduleCallback,li=c.unstable_cancelCallback,lm=c.unstable_shouldYield,tm=c.unstable_requestPaint,Pl=c.unstable_now,em=c.unstable_getCurrentPriorityLevel,As=c.unstable_ImmediatePriority,Ts=c.unstable_UserBlockingPriority,Cn=c.unstable_NormalPriority,am=c.unstable_LowPriority,Es=c.unstable_IdlePriority,nm=c.log,um=c.unstable_setDisableYieldValue,Ma=null,lt=null;function It(l){if(typeof nm=="function"&&um(l),lt&&typeof lt.setStrictMode=="function")try{lt.setStrictMode(Ma,l)}catch{}}var tt=Math.clz32?Math.clz32:sm,im=Math.log,cm=Math.LN2;function sm(l){return l>>>=0,l===0?32:31-(im(l)/cm|0)|0}var On=256,Dn=262144,Un=4194304;function Ae(l){var t=l&42;if(t!==0)return t;switch(l&-l){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return l&261888;case 262144:case 524288:case 1048576:case 2097152:return l&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return l&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return l}}function Rn(l,t,e){var a=l.pendingLanes;if(a===0)return 0;var n=0,u=l.suspendedLanes,i=l.pingedLanes;l=l.warmLanes;var f=a&134217727;return f!==0?(a=f&~u,a!==0?n=Ae(a):(i&=f,i!==0?n=Ae(i):e||(e=f&~l,e!==0&&(n=Ae(e))))):(f=a&~u,f!==0?n=Ae(f):i!==0?n=Ae(i):e||(e=a&~l,e!==0&&(n=Ae(e)))),n===0?0:t!==0&&t!==n&&(t&u)===0&&(u=n&-n,e=t&-t,u>=e||u===32&&(e&4194048)!==0)?t:n}function Ca(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function fm(l,t){switch(l){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ns(){var l=Un;return Un<<=1,(Un&62914560)===0&&(Un=4194304),l}function ti(l){for(var t=[],e=0;31>e;e++)t.push(l);return t}function Oa(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function om(l,t,e,a,n,u){var i=l.pendingLanes;l.pendingLanes=e,l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0,l.expiredLanes&=e,l.entangledLanes&=e,l.errorRecoveryDisabledLanes&=e,l.shellSuspendCounter=0;var f=l.entanglements,d=l.expirationTimes,S=l.hiddenUpdates;for(e=i&~e;0"u")return null;try{return l.activeElement||l.body}catch{return l.body}}var vm=/[\n"\\]/g;function ot(l){return l.replace(vm,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function ci(l,t,e,a,n,u,i,f){l.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?l.type=i:l.removeAttribute("type"),t!=null?i==="number"?(t===0&&l.value===""||l.value!=t)&&(l.value=""+ft(t)):l.value!==""+ft(t)&&(l.value=""+ft(t)):i!=="submit"&&i!=="reset"||l.removeAttribute("value"),t!=null?si(l,i,ft(t)):e!=null?si(l,i,ft(e)):a!=null&&l.removeAttribute("value"),n==null&&u!=null&&(l.defaultChecked=!!u),n!=null&&(l.checked=n&&typeof n!="function"&&typeof n!="symbol"),f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"?l.name=""+ft(f):l.removeAttribute("name")}function Vs(l,t,e,a,n,u,i,f){if(u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(l.type=u),t!=null||e!=null){if(!(u!=="submit"&&u!=="reset"||t!=null)){ii(l);return}e=e!=null?""+ft(e):"",t=t!=null?""+ft(t):e,f||t===l.value||(l.value=t),l.defaultValue=t}a=a??n,a=typeof a!="function"&&typeof a!="symbol"&&!!a,l.checked=f?l.checked:!!a,l.defaultChecked=!!a,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(l.name=i),ii(l)}function si(l,t,e){t==="number"&&Hn(l.ownerDocument)===l||l.defaultValue===""+e||(l.defaultValue=""+e)}function We(l,t,e,a){if(l=l.options,t){t={};for(var n=0;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),mi=!1;if(Bt)try{var Ba={};Object.defineProperty(Ba,"passive",{get:function(){mi=!0}}),window.addEventListener("test",Ba,Ba),window.removeEventListener("test",Ba,Ba)}catch{mi=!1}var le=null,hi=null,Yn=null;function Js(){if(Yn)return Yn;var l,t=hi,e=t.length,a,n="value"in le?le.value:le.textContent,u=n.length;for(l=0;l=La),lf=" ",tf=!1;function ef(l,t){switch(l){case"keyup":return wm.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function af(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var Pe=!1;function Km(l,t){switch(l){case"compositionend":return af(t);case"keypress":return t.which!==32?null:(tf=!0,lf);case"textInput":return l=t.data,l===lf&&tf?null:l;default:return null}}function km(l,t){if(Pe)return l==="compositionend"||!bi&&ef(l,t)?(l=Js(),Yn=hi=le=null,Pe=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:e,offset:t-l};l=a}l:{for(;e;){if(e.nextSibling){e=e.nextSibling;break l}e=e.parentNode}e=void 0}e=df(e)}}function hf(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?hf(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function yf(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=Hn(l.document);t instanceof l.HTMLIFrameElement;){try{var e=typeof t.contentWindow.location.href=="string"}catch{e=!1}if(e)l=t.contentWindow;else break;t=Hn(l.document)}return t}function _i(l){var t=l&&l.nodeName&&l.nodeName.toLowerCase();return t&&(t==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||t==="textarea"||l.contentEditable==="true")}var th=Bt&&"documentMode"in document&&11>=document.documentMode,la=null,zi=null,Ga=null,ji=!1;function vf(l,t,e){var a=e.window===e?e.document:e.nodeType===9?e:e.ownerDocument;ji||la==null||la!==Hn(a)||(a=la,"selectionStart"in a&&_i(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Ga&&Va(Ga,a)||(Ga=a,a=Du(zi,"onSelect"),0>=i,n-=i,Et=1<<32-tt(t)+n|e<ll?(cl=Q,Q=null):cl=Q.sibling;var ol=z(v,Q,b[ll],D);if(ol===null){Q===null&&(Q=cl);break}l&&Q&&ol.alternate===null&&t(v,Q),h=u(ol,h,ll),fl===null?K=ol:fl.sibling=ol,fl=ol,Q=cl}if(ll===b.length)return e(v,Q),sl&&Ht(v,ll),K;if(Q===null){for(;llll?(cl=Q,Q=null):cl=Q.sibling;var _e=z(v,Q,ol.value,D);if(_e===null){Q===null&&(Q=cl);break}l&&Q&&_e.alternate===null&&t(v,Q),h=u(_e,h,ll),fl===null?K=_e:fl.sibling=_e,fl=_e,Q=cl}if(ol.done)return e(v,Q),sl&&Ht(v,ll),K;if(Q===null){for(;!ol.done;ll++,ol=b.next())ol=U(v,ol.value,D),ol!==null&&(h=u(ol,h,ll),fl===null?K=ol:fl.sibling=ol,fl=ol);return sl&&Ht(v,ll),K}for(Q=a(Q);!ol.done;ll++,ol=b.next())ol=E(Q,v,ll,ol.value,D),ol!==null&&(l&&ol.alternate!==null&&Q.delete(ol.key===null?ll:ol.key),h=u(ol,h,ll),fl===null?K=ol:fl.sibling=ol,fl=ol);return l&&Q.forEach(function(x0){return t(v,x0)}),sl&&Ht(v,ll),K}function pl(v,h,b,D){if(typeof b=="object"&&b!==null&&b.type===$&&b.key===null&&(b=b.props.children),typeof b=="object"&&b!==null){switch(b.$$typeof){case R:l:{for(var K=b.key;h!==null;){if(h.key===K){if(K=b.type,K===$){if(h.tag===7){e(v,h.sibling),D=n(h,b.props.children),D.return=v,v=D;break l}}else if(h.elementType===K||typeof K=="object"&&K!==null&&K.$$typeof===Z&&qe(K)===h.type){e(v,h.sibling),D=n(h,b.props),Ja(D,b),D.return=v,v=D;break l}e(v,h);break}else t(v,h);h=h.sibling}b.type===$?(D=Oe(b.props.children,v.mode,D,b.key),D.return=v,v=D):(D=Wn(b.type,b.key,b.props,null,v.mode,D),Ja(D,b),D.return=v,v=D)}return i(v);case L:l:{for(K=b.key;h!==null;){if(h.key===K)if(h.tag===4&&h.stateNode.containerInfo===b.containerInfo&&h.stateNode.implementation===b.implementation){e(v,h.sibling),D=n(h,b.children||[]),D.return=v,v=D;break l}else{e(v,h);break}else t(v,h);h=h.sibling}D=Oi(b,v.mode,D),D.return=v,v=D}return i(v);case Z:return b=qe(b),pl(v,h,b,D)}if(xt(b))return V(v,h,b,D);if(jl(b)){if(K=jl(b),typeof K!="function")throw Error(r(150));return b=K.call(b),k(v,h,b,D)}if(typeof b.then=="function")return pl(v,h,eu(b),D);if(b.$$typeof===F)return pl(v,h,In(v,b),D);au(v,b)}return typeof b=="string"&&b!==""||typeof b=="number"||typeof b=="bigint"?(b=""+b,h!==null&&h.tag===6?(e(v,h.sibling),D=n(h,b),D.return=v,v=D):(e(v,h),D=Ci(b,v.mode,D),D.return=v,v=D),i(v)):e(v,h)}return function(v,h,b,D){try{ka=0;var K=pl(v,h,b,D);return ra=null,K}catch(Q){if(Q===oa||Q===lu)throw Q;var fl=at(29,Q,null,v.mode);return fl.lanes=D,fl.return=v,fl}finally{}}}var Le=Yf(!0),Xf=Yf(!1),ue=!1;function Qi(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function wi(l,t){l=l.updateQueue,t.updateQueue===l&&(t.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,callbacks:null})}function ie(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function ce(l,t,e){var a=l.updateQueue;if(a===null)return null;if(a=a.shared,(ml&2)!==0){var n=a.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),a.pending=t,t=Jn(l),zf(l,null,e),t}return kn(l,a,t,e),Jn(l)}function Wa(l,t,e){if(t=t.updateQueue,t!==null&&(t=t.shared,(e&4194048)!==0)){var a=t.lanes;a&=l.pendingLanes,e|=a,t.lanes=e,Cs(l,e)}}function Zi(l,t){var e=l.updateQueue,a=l.alternate;if(a!==null&&(a=a.updateQueue,e===a)){var n=null,u=null;if(e=e.firstBaseUpdate,e!==null){do{var i={lane:e.lane,tag:e.tag,payload:e.payload,callback:null,next:null};u===null?n=u=i:u=u.next=i,e=e.next}while(e!==null);u===null?n=u=t:u=u.next=t}else n=u=t;e={baseState:a.baseState,firstBaseUpdate:n,lastBaseUpdate:u,shared:a.shared,callbacks:a.callbacks},l.updateQueue=e;return}l=e.lastBaseUpdate,l===null?e.firstBaseUpdate=t:l.next=t,e.lastBaseUpdate=t}var Ki=!1;function $a(){if(Ki){var l=fa;if(l!==null)throw l}}function Fa(l,t,e,a){Ki=!1;var n=l.updateQueue;ue=!1;var u=n.firstBaseUpdate,i=n.lastBaseUpdate,f=n.shared.pending;if(f!==null){n.shared.pending=null;var d=f,S=d.next;d.next=null,i===null?u=S:i.next=S,i=d;var O=l.alternate;O!==null&&(O=O.updateQueue,f=O.lastBaseUpdate,f!==i&&(f===null?O.firstBaseUpdate=S:f.next=S,O.lastBaseUpdate=d))}if(u!==null){var U=n.baseState;i=0,O=S=d=null,f=u;do{var z=f.lane&-536870913,E=z!==f.lane;if(E?(il&z)===z:(a&z)===z){z!==0&&z===sa&&(Ki=!0),O!==null&&(O=O.next={lane:0,tag:f.tag,payload:f.payload,callback:null,next:null});l:{var V=l,k=f;z=t;var pl=e;switch(k.tag){case 1:if(V=k.payload,typeof V=="function"){U=V.call(pl,U,z);break l}U=V;break l;case 3:V.flags=V.flags&-65537|128;case 0:if(V=k.payload,z=typeof V=="function"?V.call(pl,U,z):V,z==null)break l;U=g({},U,z);break l;case 2:ue=!0}}z=f.callback,z!==null&&(l.flags|=64,E&&(l.flags|=8192),E=n.callbacks,E===null?n.callbacks=[z]:E.push(z))}else E={lane:z,tag:f.tag,payload:f.payload,callback:f.callback,next:null},O===null?(S=O=E,d=U):O=O.next=E,i|=z;if(f=f.next,f===null){if(f=n.shared.pending,f===null)break;E=f,f=E.next,E.next=null,n.lastBaseUpdate=E,n.shared.pending=null}}while(!0);O===null&&(d=U),n.baseState=d,n.firstBaseUpdate=S,n.lastBaseUpdate=O,u===null&&(n.shared.lanes=0),de|=i,l.lanes=i,l.memoizedState=U}}function Vf(l,t){if(typeof l!="function")throw Error(r(191,l));l.call(t)}function Gf(l,t){var e=l.callbacks;if(e!==null)for(l.callbacks=null,l=0;lu?u:8;var i=_.T,f={};_.T=f,rc(l,!1,t,e);try{var d=n(),S=_.S;if(S!==null&&S(f,d),d!==null&&typeof d=="object"&&typeof d.then=="function"){var O=oh(d,a);ln(l,t,O,st(l))}else ln(l,t,a,st(l))}catch(U){ln(l,t,{then:function(){},status:"rejected",reason:U},st())}finally{B.p=u,i!==null&&f.types!==null&&(i.types=f.types),_.T=i}}function vh(){}function fc(l,t,e,a){if(l.tag!==5)throw Error(r(476));var n=xo(l).queue;So(l,n,t,w,e===null?vh:function(){return _o(l),e(a)})}function xo(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:w,baseState:w,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Vt,lastRenderedState:w},next:null};var e={};return t.next={memoizedState:e,baseState:e,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Vt,lastRenderedState:e},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function _o(l){var t=xo(l);t.next===null&&(t=l.alternate.memoizedState),ln(l,t.next.queue,{},st())}function oc(){return Vl(pn)}function zo(){return Nl().memoizedState}function jo(){return Nl().memoizedState}function gh(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var e=st();l=ie(e);var a=ce(t,l,e);a!==null&&(Fl(a,t,e),Wa(a,t,e)),t={cache:Yi()},l.payload=t;return}t=t.return}}function ph(l,t,e){var a=st();e={lane:a,revertLane:0,gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null},mu(l)?To(t,e):(e=Ni(l,t,e,a),e!==null&&(Fl(e,l,a),Eo(e,t,a)))}function Ao(l,t,e){var a=st();ln(l,t,e,a)}function ln(l,t,e,a){var n={lane:a,revertLane:0,gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null};if(mu(l))To(t,n);else{var u=l.alternate;if(l.lanes===0&&(u===null||u.lanes===0)&&(u=t.lastRenderedReducer,u!==null))try{var i=t.lastRenderedState,f=u(i,e);if(n.hasEagerState=!0,n.eagerState=f,et(f,i))return kn(l,t,n,0),bl===null&&Kn(),!1}catch{}finally{}if(e=Ni(l,t,n,a),e!==null)return Fl(e,l,a),Eo(e,t,a),!0}return!1}function rc(l,t,e,a){if(a={lane:2,revertLane:Qc(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},mu(l)){if(t)throw Error(r(479))}else t=Ni(l,e,a,2),t!==null&&Fl(t,l,2)}function mu(l){var t=l.alternate;return l===I||t!==null&&t===I}function To(l,t){ma=iu=!0;var e=l.pending;e===null?t.next=t:(t.next=e.next,e.next=t),l.pending=t}function Eo(l,t,e){if((e&4194048)!==0){var a=t.lanes;a&=l.pendingLanes,e|=a,t.lanes=e,Cs(l,e)}}var tn={readContext:Vl,use:fu,useCallback:Al,useContext:Al,useEffect:Al,useImperativeHandle:Al,useLayoutEffect:Al,useInsertionEffect:Al,useMemo:Al,useReducer:Al,useRef:Al,useState:Al,useDebugValue:Al,useDeferredValue:Al,useTransition:Al,useSyncExternalStore:Al,useId:Al,useHostTransitionStatus:Al,useFormState:Al,useActionState:Al,useOptimistic:Al,useMemoCache:Al,useCacheRefresh:Al};tn.useEffectEvent=Al;var No={readContext:Vl,use:fu,useCallback:function(l,t){return wl().memoizedState=[l,t===void 0?null:t],l},useContext:Vl,useEffect:oo,useImperativeHandle:function(l,t,e){e=e!=null?e.concat([l]):null,ru(4194308,4,yo.bind(null,t,l),e)},useLayoutEffect:function(l,t){return ru(4194308,4,l,t)},useInsertionEffect:function(l,t){ru(4,2,l,t)},useMemo:function(l,t){var e=wl();t=t===void 0?null:t;var a=l();if(Ye){It(!0);try{l()}finally{It(!1)}}return e.memoizedState=[a,t],a},useReducer:function(l,t,e){var a=wl();if(e!==void 0){var n=e(t);if(Ye){It(!0);try{e(t)}finally{It(!1)}}}else n=t;return a.memoizedState=a.baseState=n,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:n},a.queue=l,l=l.dispatch=ph.bind(null,I,l),[a.memoizedState,l]},useRef:function(l){var t=wl();return l={current:l},t.memoizedState=l},useState:function(l){l=nc(l);var t=l.queue,e=Ao.bind(null,I,t);return t.dispatch=e,[l.memoizedState,e]},useDebugValue:cc,useDeferredValue:function(l,t){var e=wl();return sc(e,l,t)},useTransition:function(){var l=nc(!1);return l=So.bind(null,I,l.queue,!0,!1),wl().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,e){var a=I,n=wl();if(sl){if(e===void 0)throw Error(r(407));e=e()}else{if(e=t(),bl===null)throw Error(r(349));(il&127)!==0||Jf(a,t,e)}n.memoizedState=e;var u={value:e,getSnapshot:t};return n.queue=u,oo($f.bind(null,a,u,l),[l]),a.flags|=2048,ya(9,{destroy:void 0},Wf.bind(null,a,u,e,t),null),e},useId:function(){var l=wl(),t=bl.identifierPrefix;if(sl){var e=Nt,a=Et;e=(a&~(1<<32-tt(a)-1)).toString(32)+e,t="_"+t+"R_"+e,e=cu++,0<\/script>",u=u.removeChild(u.firstChild);break;case"select":u=typeof a.is=="string"?i.createElement("select",{is:a.is}):i.createElement("select"),a.multiple?u.multiple=!0:a.size&&(u.size=a.size);break;default:u=typeof a.is=="string"?i.createElement(n,{is:a.is}):i.createElement(n)}}u[Yl]=t,u[Zl]=a;l:for(i=t.child;i!==null;){if(i.tag===5||i.tag===6)u.appendChild(i.stateNode);else if(i.tag!==4&&i.tag!==27&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===t)break l;for(;i.sibling===null;){if(i.return===null||i.return===t)break l;i=i.return}i.sibling.return=i.return,i=i.sibling}t.stateNode=u;l:switch(Ql(u,n,a),n){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break l;case"img":a=!0;break l;default:a=!1}a&&Qt(t)}}return xl(t),Ac(t,t.type,l===null?null:l.memoizedProps,t.pendingProps,e),null;case 6:if(l&&t.stateNode!=null)l.memoizedProps!==a&&Qt(t);else{if(typeof a!="string"&&t.stateNode===null)throw Error(r(166));if(l=Ft.current,ia(t)){if(l=t.stateNode,e=t.memoizedProps,a=null,n=Xl,n!==null)switch(n.tag){case 27:case 5:a=n.memoizedProps}l[Yl]=t,l=!!(l.nodeValue===e||a!==null&&a.suppressHydrationWarning===!0||kr(l.nodeValue,e)),l||ae(t,!0)}else l=Uu(l).createTextNode(a),l[Yl]=t,t.stateNode=l}return xl(t),null;case 31:if(e=t.memoizedState,l===null||l.memoizedState!==null){if(a=ia(t),e!==null){if(l===null){if(!a)throw Error(r(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(r(557));l[Yl]=t}else De(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;xl(t),l=!1}else e=Bi(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=e),l=!0;if(!l)return t.flags&256?(ut(t),t):(ut(t),null);if((t.flags&128)!==0)throw Error(r(558))}return xl(t),null;case 13:if(a=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(n=ia(t),a!==null&&a.dehydrated!==null){if(l===null){if(!n)throw Error(r(318));if(n=t.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(r(317));n[Yl]=t}else De(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;xl(t),n=!1}else n=Bi(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=n),n=!0;if(!n)return t.flags&256?(ut(t),t):(ut(t),null)}return ut(t),(t.flags&128)!==0?(t.lanes=e,t):(e=a!==null,l=l!==null&&l.memoizedState!==null,e&&(a=t.child,n=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(n=a.alternate.memoizedState.cachePool.pool),u=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(u=a.memoizedState.cachePool.pool),u!==n&&(a.flags|=2048)),e!==l&&e&&(t.child.flags|=8192),pu(t,t.updateQueue),xl(t),null);case 4:return Qe(),l===null&&kc(t.stateNode.containerInfo),xl(t),null;case 10:return Yt(t.type),xl(t),null;case 19:if(dl(El),a=t.memoizedState,a===null)return xl(t),null;if(n=(t.flags&128)!==0,u=a.rendering,u===null)if(n)an(a,!1);else{if(Tl!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(u=uu(l),u!==null){for(t.flags|=128,an(a,!1),l=u.updateQueue,t.updateQueue=l,pu(t,l),t.subtreeFlags=0,l=e,e=t.child;e!==null;)jf(e,l),e=e.sibling;return el(El,El.current&1|2),sl&&Ht(t,a.treeForkCount),t.child}l=l.sibling}a.tail!==null&&Pl()>zu&&(t.flags|=128,n=!0,an(a,!1),t.lanes=4194304)}else{if(!n)if(l=uu(u),l!==null){if(t.flags|=128,n=!0,l=l.updateQueue,t.updateQueue=l,pu(t,l),an(a,!0),a.tail===null&&a.tailMode==="hidden"&&!u.alternate&&!sl)return xl(t),null}else 2*Pl()-a.renderingStartTime>zu&&e!==536870912&&(t.flags|=128,n=!0,an(a,!1),t.lanes=4194304);a.isBackwards?(u.sibling=t.child,t.child=u):(l=a.last,l!==null?l.sibling=u:t.child=u,a.last=u)}return a.tail!==null?(l=a.tail,a.rendering=l,a.tail=l.sibling,a.renderingStartTime=Pl(),l.sibling=null,e=El.current,el(El,n?e&1|2:e&1),sl&&Ht(t,a.treeForkCount),l):(xl(t),null);case 22:case 23:return ut(t),Ji(),a=t.memoizedState!==null,l!==null?l.memoizedState!==null!==a&&(t.flags|=8192):a&&(t.flags|=8192),a?(e&536870912)!==0&&(t.flags&128)===0&&(xl(t),t.subtreeFlags&6&&(t.flags|=8192)):xl(t),e=t.updateQueue,e!==null&&pu(t,e.retryQueue),e=null,l!==null&&l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(e=l.memoizedState.cachePool.pool),a=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),a!==e&&(t.flags|=2048),l!==null&&dl(Be),null;case 24:return e=null,l!==null&&(e=l.memoizedState.cache),t.memoizedState.cache!==e&&(t.flags|=2048),Yt(Ml),xl(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function zh(l,t){switch(Ui(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return Yt(Ml),Qe(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return Mn(t),null;case 31:if(t.memoizedState!==null){if(ut(t),t.alternate===null)throw Error(r(340));De()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 13:if(ut(t),l=t.memoizedState,l!==null&&l.dehydrated!==null){if(t.alternate===null)throw Error(r(340));De()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return dl(El),null;case 4:return Qe(),null;case 10:return Yt(t.type),null;case 22:case 23:return ut(t),Ji(),l!==null&&dl(Be),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return Yt(Ml),null;case 25:return null;default:return null}}function Io(l,t){switch(Ui(t),t.tag){case 3:Yt(Ml),Qe();break;case 26:case 27:case 5:Mn(t);break;case 4:Qe();break;case 31:t.memoizedState!==null&&ut(t);break;case 13:ut(t);break;case 19:dl(El);break;case 10:Yt(t.type);break;case 22:case 23:ut(t),Ji(),l!==null&&dl(Be);break;case 24:Yt(Ml)}}function nn(l,t){try{var e=t.updateQueue,a=e!==null?e.lastEffect:null;if(a!==null){var n=a.next;e=n;do{if((e.tag&l)===l){a=void 0;var u=e.create,i=e.inst;a=u(),i.destroy=a}e=e.next}while(e!==n)}}catch(f){yl(t,t.return,f)}}function oe(l,t,e){try{var a=t.updateQueue,n=a!==null?a.lastEffect:null;if(n!==null){var u=n.next;a=u;do{if((a.tag&l)===l){var i=a.inst,f=i.destroy;if(f!==void 0){i.destroy=void 0,n=t;var d=e,S=f;try{S()}catch(O){yl(n,d,O)}}}a=a.next}while(a!==u)}}catch(O){yl(t,t.return,O)}}function Po(l){var t=l.updateQueue;if(t!==null){var e=l.stateNode;try{Gf(t,e)}catch(a){yl(l,l.return,a)}}}function lr(l,t,e){e.props=Xe(l.type,l.memoizedProps),e.state=l.memoizedState;try{e.componentWillUnmount()}catch(a){yl(l,t,a)}}function un(l,t){try{var e=l.ref;if(e!==null){switch(l.tag){case 26:case 27:case 5:var a=l.stateNode;break;case 30:a=l.stateNode;break;default:a=l.stateNode}typeof e=="function"?l.refCleanup=e(a):e.current=a}}catch(n){yl(l,t,n)}}function Mt(l,t){var e=l.ref,a=l.refCleanup;if(e!==null)if(typeof a=="function")try{a()}catch(n){yl(l,t,n)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof e=="function")try{e(null)}catch(n){yl(l,t,n)}else e.current=null}function tr(l){var t=l.type,e=l.memoizedProps,a=l.stateNode;try{l:switch(t){case"button":case"input":case"select":case"textarea":e.autoFocus&&a.focus();break l;case"img":e.src?a.src=e.src:e.srcSet&&(a.srcset=e.srcSet)}}catch(n){yl(l,l.return,n)}}function Tc(l,t,e){try{var a=l.stateNode;Zh(a,l.type,e,t),a[Zl]=t}catch(n){yl(l,l.return,n)}}function er(l){return l.tag===5||l.tag===3||l.tag===26||l.tag===27&&ge(l.type)||l.tag===4}function Ec(l){l:for(;;){for(;l.sibling===null;){if(l.return===null||er(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.tag===27&&ge(l.type)||l.flags&2||l.child===null||l.tag===4)continue l;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function Nc(l,t,e){var a=l.tag;if(a===5||a===6)l=l.stateNode,t?(e.nodeType===9?e.body:e.nodeName==="HTML"?e.ownerDocument.body:e).insertBefore(l,t):(t=e.nodeType===9?e.body:e.nodeName==="HTML"?e.ownerDocument.body:e,t.appendChild(l),e=e._reactRootContainer,e!=null||t.onclick!==null||(t.onclick=Rt));else if(a!==4&&(a===27&&ge(l.type)&&(e=l.stateNode,t=null),l=l.child,l!==null))for(Nc(l,t,e),l=l.sibling;l!==null;)Nc(l,t,e),l=l.sibling}function bu(l,t,e){var a=l.tag;if(a===5||a===6)l=l.stateNode,t?e.insertBefore(l,t):e.appendChild(l);else if(a!==4&&(a===27&&ge(l.type)&&(e=l.stateNode),l=l.child,l!==null))for(bu(l,t,e),l=l.sibling;l!==null;)bu(l,t,e),l=l.sibling}function ar(l){var t=l.stateNode,e=l.memoizedProps;try{for(var a=l.type,n=t.attributes;n.length;)t.removeAttributeNode(n[0]);Ql(t,a,e),t[Yl]=l,t[Zl]=e}catch(u){yl(l,l.return,u)}}var wt=!1,Dl=!1,Mc=!1,nr=typeof WeakSet=="function"?WeakSet:Set,Ll=null;function jh(l,t){if(l=l.containerInfo,$c=Xu,l=yf(l),_i(l)){if("selectionStart"in l)var e={start:l.selectionStart,end:l.selectionEnd};else l:{e=(e=l.ownerDocument)&&e.defaultView||window;var a=e.getSelection&&e.getSelection();if(a&&a.rangeCount!==0){e=a.anchorNode;var n=a.anchorOffset,u=a.focusNode;a=a.focusOffset;try{e.nodeType,u.nodeType}catch{e=null;break l}var i=0,f=-1,d=-1,S=0,O=0,U=l,z=null;t:for(;;){for(var E;U!==e||n!==0&&U.nodeType!==3||(f=i+n),U!==u||a!==0&&U.nodeType!==3||(d=i+a),U.nodeType===3&&(i+=U.nodeValue.length),(E=U.firstChild)!==null;)z=U,U=E;for(;;){if(U===l)break t;if(z===e&&++S===n&&(f=i),z===u&&++O===a&&(d=i),(E=U.nextSibling)!==null)break;U=z,z=U.parentNode}U=E}e=f===-1||d===-1?null:{start:f,end:d}}else e=null}e=e||{start:0,end:0}}else e=null;for(Fc={focusedElem:l,selectionRange:e},Xu=!1,Ll=t;Ll!==null;)if(t=Ll,l=t.child,(t.subtreeFlags&1028)!==0&&l!==null)l.return=t,Ll=l;else for(;Ll!==null;){switch(t=Ll,u=t.alternate,l=t.flags,t.tag){case 0:if((l&4)!==0&&(l=t.updateQueue,l=l!==null?l.events:null,l!==null))for(e=0;e title"))),Ql(u,a,e),u[Yl]=l,Hl(u),a=u;break l;case"link":var i=od("link","href",n).get(a+(e.href||""));if(i){for(var f=0;fpl&&(i=pl,pl=k,k=i);var v=mf(f,k),h=mf(f,pl);if(v&&h&&(E.rangeCount!==1||E.anchorNode!==v.node||E.anchorOffset!==v.offset||E.focusNode!==h.node||E.focusOffset!==h.offset)){var b=U.createRange();b.setStart(v.node,v.offset),E.removeAllRanges(),k>pl?(E.addRange(b),E.extend(h.node,h.offset)):(b.setEnd(h.node,h.offset),E.addRange(b))}}}}for(U=[],E=f;E=E.parentNode;)E.nodeType===1&&U.push({element:E,left:E.scrollLeft,top:E.scrollTop});for(typeof f.focus=="function"&&f.focus(),f=0;fe?32:e,_.T=null,e=qc,qc=null;var u=he,i=Wt;if(Bl=0,Sa=he=null,Wt=0,(ml&6)!==0)throw Error(r(331));var f=ml;if(ml|=4,yr(u.current),dr(u,u.current,i,e),ml=f,dn(0,!1),lt&&typeof lt.onPostCommitFiberRoot=="function")try{lt.onPostCommitFiberRoot(Ma,u)}catch{}return!0}finally{B.p=n,_.T=a,Ur(l,t)}}function Br(l,t,e){t=dt(e,t),t=yc(l.stateNode,t,2),l=ce(l,t,2),l!==null&&(Oa(l,2),Ct(l))}function yl(l,t,e){if(l.tag===3)Br(l,l,e);else for(;t!==null;){if(t.tag===3){Br(t,l,e);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(me===null||!me.has(a))){l=dt(e,l),e=qo(2),a=ce(t,e,2),a!==null&&(Ho(e,a,t,l),Oa(a,2),Ct(a));break}}t=t.return}}function Xc(l,t,e){var a=l.pingCache;if(a===null){a=l.pingCache=new Eh;var n=new Set;a.set(t,n)}else n=a.get(t),n===void 0&&(n=new Set,a.set(t,n));n.has(e)||(Dc=!0,n.add(e),l=Dh.bind(null,l,t,e),t.then(l,l))}function Dh(l,t,e){var a=l.pingCache;a!==null&&a.delete(t),l.pingedLanes|=l.suspendedLanes&e,l.warmLanes&=~e,bl===l&&(il&e)===e&&(Tl===4||Tl===3&&(il&62914560)===il&&300>Pl()-_u?(ml&2)===0&&xa(l,0):Uc|=e,ba===il&&(ba=0)),Ct(l)}function qr(l,t){t===0&&(t=Ns()),l=Ce(l,t),l!==null&&(Oa(l,t),Ct(l))}function Uh(l){var t=l.memoizedState,e=0;t!==null&&(e=t.retryLane),qr(l,e)}function Rh(l,t){var e=0;switch(l.tag){case 31:case 13:var a=l.stateNode,n=l.memoizedState;n!==null&&(e=n.retryLane);break;case 19:a=l.stateNode;break;case 22:a=l.stateNode._retryCache;break;default:throw Error(r(314))}a!==null&&a.delete(t),qr(l,e)}function Bh(l,t){return Pu(l,t)}var Mu=null,za=null,Vc=!1,Cu=!1,Gc=!1,ve=0;function Ct(l){l!==za&&l.next===null&&(za===null?Mu=za=l:za=za.next=l),Cu=!0,Vc||(Vc=!0,Hh())}function dn(l,t){if(!Gc&&Cu){Gc=!0;do for(var e=!1,a=Mu;a!==null;){if(l!==0){var n=a.pendingLanes;if(n===0)var u=0;else{var i=a.suspendedLanes,f=a.pingedLanes;u=(1<<31-tt(42|l)+1)-1,u&=n&~(i&~f),u=u&201326741?u&201326741|1:u?u|2:0}u!==0&&(e=!0,Xr(a,u))}else u=il,u=Rn(a,a===bl?u:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(u&3)===0||Ca(a,u)||(e=!0,Xr(a,u));a=a.next}while(e);Gc=!1}}function qh(){Hr()}function Hr(){Cu=Vc=!1;var l=0;ve!==0&&kh()&&(l=ve);for(var t=Pl(),e=null,a=Mu;a!==null;){var n=a.next,u=Lr(a,t);u===0?(a.next=null,e===null?Mu=n:e.next=n,n===null&&(za=e)):(e=a,(l!==0||(u&3)!==0)&&(Cu=!0)),a=n}Bl!==0&&Bl!==5||dn(l),ve!==0&&(ve=0)}function Lr(l,t){for(var e=l.suspendedLanes,a=l.pingedLanes,n=l.expirationTimes,u=l.pendingLanes&-62914561;0f)break;var O=d.transferSize,U=d.initiatorType;O&&Jr(U)&&(d=d.responseEnd,i+=O*(d"u"?null:document;function id(l,t,e){var a=ja;if(a&&typeof t=="string"&&t){var n=ot(t);n='link[rel="'+l+'"][href="'+n+'"]',typeof e=="string"&&(n+='[crossorigin="'+e+'"]'),ud.has(n)||(ud.add(n),l={rel:l,crossOrigin:e,href:t},a.querySelector(n)===null&&(t=a.createElement("link"),Ql(t,"link",l),Hl(t),a.head.appendChild(t)))}}function e0(l){$t.D(l),id("dns-prefetch",l,null)}function a0(l,t){$t.C(l,t),id("preconnect",l,t)}function n0(l,t,e){$t.L(l,t,e);var a=ja;if(a&&l&&t){var n='link[rel="preload"][as="'+ot(t)+'"]';t==="image"&&e&&e.imageSrcSet?(n+='[imagesrcset="'+ot(e.imageSrcSet)+'"]',typeof e.imageSizes=="string"&&(n+='[imagesizes="'+ot(e.imageSizes)+'"]')):n+='[href="'+ot(l)+'"]';var u=n;switch(t){case"style":u=Aa(l);break;case"script":u=Ta(l)}pt.has(u)||(l=g({rel:"preload",href:t==="image"&&e&&e.imageSrcSet?void 0:l,as:t},e),pt.set(u,l),a.querySelector(n)!==null||t==="style"&&a.querySelector(vn(u))||t==="script"&&a.querySelector(gn(u))||(t=a.createElement("link"),Ql(t,"link",l),Hl(t),a.head.appendChild(t)))}}function u0(l,t){$t.m(l,t);var e=ja;if(e&&l){var a=t&&typeof t.as=="string"?t.as:"script",n='link[rel="modulepreload"][as="'+ot(a)+'"][href="'+ot(l)+'"]',u=n;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=Ta(l)}if(!pt.has(u)&&(l=g({rel:"modulepreload",href:l},t),pt.set(u,l),e.querySelector(n)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(e.querySelector(gn(u)))return}a=e.createElement("link"),Ql(a,"link",l),Hl(a),e.head.appendChild(a)}}}function i0(l,t,e){$t.S(l,t,e);var a=ja;if(a&&l){var n=ke(a).hoistableStyles,u=Aa(l);t=t||"default";var i=n.get(u);if(!i){var f={loading:0,preload:null};if(i=a.querySelector(vn(u)))f.loading=5;else{l=g({rel:"stylesheet",href:l,"data-precedence":t},e),(e=pt.get(u))&&ns(l,e);var d=i=a.createElement("link");Hl(d),Ql(d,"link",l),d._p=new Promise(function(S,O){d.onload=S,d.onerror=O}),d.addEventListener("load",function(){f.loading|=1}),d.addEventListener("error",function(){f.loading|=2}),f.loading|=4,Bu(i,t,a)}i={type:"stylesheet",instance:i,count:1,state:f},n.set(u,i)}}}function c0(l,t){$t.X(l,t);var e=ja;if(e&&l){var a=ke(e).hoistableScripts,n=Ta(l),u=a.get(n);u||(u=e.querySelector(gn(n)),u||(l=g({src:l,async:!0},t),(t=pt.get(n))&&us(l,t),u=e.createElement("script"),Hl(u),Ql(u,"link",l),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function s0(l,t){$t.M(l,t);var e=ja;if(e&&l){var a=ke(e).hoistableScripts,n=Ta(l),u=a.get(n);u||(u=e.querySelector(gn(n)),u||(l=g({src:l,async:!0,type:"module"},t),(t=pt.get(n))&&us(l,t),u=e.createElement("script"),Hl(u),Ql(u,"link",l),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function cd(l,t,e,a){var n=(n=Ft.current)?Ru(n):null;if(!n)throw Error(r(446));switch(l){case"meta":case"title":return null;case"style":return typeof e.precedence=="string"&&typeof e.href=="string"?(t=Aa(e.href),e=ke(n).hoistableStyles,a=e.get(t),a||(a={type:"style",instance:null,count:0,state:null},e.set(t,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(e.rel==="stylesheet"&&typeof e.href=="string"&&typeof e.precedence=="string"){l=Aa(e.href);var u=ke(n).hoistableStyles,i=u.get(l);if(i||(n=n.ownerDocument||n,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(l,i),(u=n.querySelector(vn(l)))&&!u._p&&(i.instance=u,i.state.loading=5),pt.has(l)||(e={rel:"preload",as:"style",href:e.href,crossOrigin:e.crossOrigin,integrity:e.integrity,media:e.media,hrefLang:e.hrefLang,referrerPolicy:e.referrerPolicy},pt.set(l,e),u||f0(n,l,e,i.state))),t&&a===null)throw Error(r(528,""));return i}if(t&&a!==null)throw Error(r(529,""));return null;case"script":return t=e.async,e=e.src,typeof e=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Ta(e),e=ke(n).hoistableScripts,a=e.get(t),a||(a={type:"script",instance:null,count:0,state:null},e.set(t,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,l))}}function Aa(l){return'href="'+ot(l)+'"'}function vn(l){return'link[rel="stylesheet"]['+l+"]"}function sd(l){return g({},l,{"data-precedence":l.precedence,precedence:null})}function f0(l,t,e,a){l.querySelector('link[rel="preload"][as="style"]['+t+"]")?a.loading=1:(t=l.createElement("link"),a.preload=t,t.addEventListener("load",function(){return a.loading|=1}),t.addEventListener("error",function(){return a.loading|=2}),Ql(t,"link",e),Hl(t),l.head.appendChild(t))}function Ta(l){return'[src="'+ot(l)+'"]'}function gn(l){return"script[async]"+l}function fd(l,t,e){if(t.count++,t.instance===null)switch(t.type){case"style":var a=l.querySelector('style[data-href~="'+ot(e.href)+'"]');if(a)return t.instance=a,Hl(a),a;var n=g({},e,{"data-href":e.href,"data-precedence":e.precedence,href:null,precedence:null});return a=(l.ownerDocument||l).createElement("style"),Hl(a),Ql(a,"style",n),Bu(a,e.precedence,l),t.instance=a;case"stylesheet":n=Aa(e.href);var u=l.querySelector(vn(n));if(u)return t.state.loading|=4,t.instance=u,Hl(u),u;a=sd(e),(n=pt.get(n))&&ns(a,n),u=(l.ownerDocument||l).createElement("link"),Hl(u);var i=u;return i._p=new Promise(function(f,d){i.onload=f,i.onerror=d}),Ql(u,"link",a),t.state.loading|=4,Bu(u,e.precedence,l),t.instance=u;case"script":return u=Ta(e.src),(n=l.querySelector(gn(u)))?(t.instance=n,Hl(n),n):(a=e,(n=pt.get(u))&&(a=g({},e),us(a,n)),l=l.ownerDocument||l,n=l.createElement("script"),Hl(n),Ql(n,"link",a),l.head.appendChild(n),t.instance=n);case"void":return null;default:throw Error(r(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(a=t.instance,t.state.loading|=4,Bu(a,e.precedence,l));return t.instance}function Bu(l,t,e){for(var a=e.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=a.length?a[a.length-1]:null,u=n,i=0;i title"):null)}function o0(l,t,e){if(e===1||t.itemProp!=null)return!1;switch(l){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return l=t.disabled,typeof t.precedence=="string"&&l==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function dd(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function r0(l,t,e,a){if(e.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(e.state.loading&4)===0){if(e.instance===null){var n=Aa(a.href),u=t.querySelector(vn(n));if(u){t=u._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=Hu.bind(l),t.then(l,l)),e.state.loading|=4,e.instance=u,Hl(u);return}u=t.ownerDocument||t,a=sd(a),(n=pt.get(n))&&ns(a,n),u=u.createElement("link"),Hl(u);var i=u;i._p=new Promise(function(f,d){i.onload=f,i.onerror=d}),Ql(u,"link",a),e.instance=u}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(e,t),(t=e.state.preload)&&(e.state.loading&3)===0&&(l.count++,e=Hu.bind(l),t.addEventListener("load",e),t.addEventListener("error",e))}}var is=0;function d0(l,t){return l.stylesheets&&l.count===0&&Yu(l,l.stylesheets),0is?50:800)+t);return l.unsuspend=e,function(){l.unsuspend=null,clearTimeout(a),clearTimeout(n)}}:null}function Hu(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Yu(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var Lu=null;function Yu(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Lu=new Map,t.forEach(m0,l),Lu=null,Hu.call(l))}function m0(l,t){if(!(t.state.loading&4)){var e=Lu.get(l);if(e)var a=e.get(null);else{e=new Map,Lu.set(l,e);for(var n=l.querySelectorAll("link[data-precedence],style[data-precedence]"),u=0;u"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(o){console.error(o)}}return c(),hs.exports=N0(),hs.exports}var C0=M0();const Xd=p.createContext({windows:[],openWindow:()=>{},closeWindow:()=>{},bringToFront:()=>{}}),O0=({children:c})=>{const[o,m]=p.useState([]),r=p.useRef(1e4),x=p.useCallback((N,y,T)=>{m(q=>q.find(j=>j.id===N)?q.map(j=>j.id===N?{...j,zIndex:++r.current}:j):[...q,{id:N,title:y,charName:T,zIndex:++r.current}])},[]),A=p.useCallback(N=>{m(y=>y.filter(T=>T.id!==N))},[]),M=p.useCallback(N=>{m(y=>y.map(T=>T.id===N?{...T,zIndex:++r.current}:T))},[]);return s.jsx(Xd.Provider,{value:{windows:o,openWindow:x,closeWindow:A,bringToFront:M},children:c})},An=()=>p.useContext(Xd),bt={west:-102.1,east:102.1,north:102.1,south:-102.1};function Tn(c,o,m,r){const x=(c-bt.west)/(bt.east-bt.west)*m,A=(bt.north-o)/(bt.north-bt.south)*r;return{x,y:A}}function D0(c,o,m,r,x,A,M){const N=(c-r)/m,y=(o-x)/m,T=bt.west+N/A*(bt.east-bt.west),q=bt.north-y/M*(bt.north-bt.south);return{ew:T,ns:q}}function gs(c,o){const m=c>=0?"N":"S",r=o>=0?"E":"W";return`${Math.abs(c).toFixed(1)}${m}, ${Math.abs(o).toFixed(1)}${r}`}const Vd=jn.memo(({players:c,imgW:o,imgH:m,getColor:r,onHover:x,onSelect:A,selectedPlayer:M})=>{const{openWindow:N}=An(),[y,T]=p.useState(null);p.useEffect(()=>{const g=()=>T(null);return y&&window.addEventListener("click",g),()=>window.removeEventListener("click",g)},[y]);const q=p.useMemo(()=>c.filter(g=>g.ew!==void 0&&g.ns!==void 0).map(g=>({...g,pos:Tn(g.ew,g.ns,o,m),color:r(g.character_name)})),[c,o,m,r]);return s.jsxs("div",{className:"ml-dots-layer",children:[q.map(g=>s.jsx("div",{className:`ml-dot ${M===g.character_name?"ml-dot-selected":""}`,style:{left:g.pos.x,top:g.pos.y,backgroundColor:g.color},onMouseEnter:j=>{var L;const R=(L=j.currentTarget.closest(".ml-map-container"))==null?void 0:L.getBoundingClientRect();R&&x(g,j.clientX-R.left,j.clientY-R.top)},onMouseLeave:()=>x(null,0,0),onClick:()=>A(g.character_name),onDoubleClick:()=>N(`chat-${g.character_name}`,`Chat: ${g.character_name}`,g.character_name),onContextMenu:j=>{var C;j.preventDefault();const R=g.character_name,L=(C=j.currentTarget.closest(".ml-map-container"))==null?void 0:C.getBoundingClientRect(),$=L?j.clientX-L.left:j.clientX,Y=L?j.clientY-L.top:j.clientY;T({name:R,x:$,y:Y})}},g.character_name)),y&&s.jsx("div",{style:{position:"fixed",left:y.x+410,top:y.y,background:"#1a1a1a",border:"1px solid #444",borderRadius:4,zIndex:9999,padding:"2px 0",fontSize:"0.75rem",boxShadow:"0 4px 12px rgba(0,0,0,0.5)",minWidth:120},children:[{label:"Chat",id:"chat"},{label:"Stats",id:"stats"},{label:"Inventory",id:"inv"},{label:"Character",id:"char"},{label:"Combat",id:"combat"},{label:"Radar",id:"radar"}].map(g=>s.jsx("div",{onClick:()=>{N(`${g.id}-${y.name}`,`${g.label}: ${y.name}`,y.name),T(null)},style:{padding:"4px 12px",cursor:"pointer",color:"#ccc"},onMouseEnter:j=>j.currentTarget.style.background="#333",onMouseLeave:j=>j.currentTarget.style.background="",children:g.label},g.id))})]})});Vd.displayName="PlayerDots";const ku="/api";async function Il(c){const o=await fetch(`${ku}${c}`,{credentials:"include"});if(!o.ok)throw new Error(`API ${c}: ${o.status}`);return o.json()}async function Ss(c,o){var r;const m=await fetch(`${ku}${c}`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify(o??{})});if(!m.ok){let x="";try{x=((r=await m.json())==null?void 0:r.detail)??""}catch{}throw new Error(`API ${c}: ${m.status}${x?` (${x})`:""}`)}return m.json()}async function U0(c,o){var r;const m=await fetch(`${ku}${c}`,{method:"PATCH",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify(o??{})});if(!m.ok){let x="";try{x=((r=await m.json())==null?void 0:r.detail)??""}catch{}throw new Error(`API ${c}: ${m.status}${x?` (${x})`:""}`)}return m.json()}async function R0(c){var m;const o=await fetch(`${ku}${c}`,{method:"DELETE",credentials:"include"});if(!o.ok){let r="";try{r=((m=await o.json())==null?void 0:m.detail)??""}catch{}throw new Error(`API ${c}: ${o.status}${r?` (${r})`:""}`)}return o.json()}function B0(){return`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/ws/live`}const Gd=jn.memo(({imgW:c,imgH:o,getColor:m})=>{const[r,x]=p.useState([]);p.useEffect(()=>{const M=async()=>{try{const y=await Il("/trails/?seconds=600");x(y.trails??[])}catch{}};M();const N=setInterval(M,2e3);return()=>clearInterval(N)},[]);const A=p.useMemo(()=>{const M={};for(const N of r){const{x:y,y:T}=Tn(N.ew,N.ns,c,o);M[N.character_name]||(M[N.character_name]=[]),M[N.character_name].push(`${y},${T}`)}return Object.entries(M).filter(([,N])=>N.length>=2).map(([N,y])=>({name:N,points:y.join(" ")}))},[r,c,o]);return s.jsx("svg",{className:"ml-trails-svg",viewBox:`0 0 ${c} ${o}`,preserveAspectRatio:"none",children:A.map(M=>s.jsx("polyline",{points:M.points,stroke:m(M.name),fill:"none",strokeWidth:2,strokeOpacity:.7,strokeLinecap:"round",strokeLinejoin:"round"},M.name))})});Gd.displayName="TrailsSVG";const q0=({imgW:c,imgH:o,enabled:m})=>{const r=p.useRef(null),[x,A]=p.useState([]);return p.useEffect(()=>{if(!m)return;(async()=>{try{const N=await Il("/spawns/heatmap?hours=24&limit=50000");A(N.spawn_points??[])}catch{}})()},[m]),p.useEffect(()=>{const M=r.current;if(!M||!m||x.length===0||c===0)return;M.width=c,M.height=o;const N=M.getContext("2d");if(N){N.clearRect(0,0,c,o);for(const y of x){const{x:T,y:q}=Tn(y.ew,y.ns,c,o),g=Math.max(5,Math.min(12,5+Math.sqrt(y.intensity*.5))),j=N.createRadialGradient(T,q,0,T,q,g);j.addColorStop(0,`rgba(255, 0, 0, ${Math.min(.9,y.intensity/40)})`),j.addColorStop(.6,`rgba(255, 100, 0, ${Math.min(.4,y.intensity/120)})`),j.addColorStop(1,"rgba(255, 150, 0, 0)"),N.fillStyle=j,N.fillRect(T-g,q-g,g*2,g*2)}}},[x,c,o,m]),m?s.jsx("canvas",{ref:r,className:"ml-heatmap-canvas"}):null},H0=({imgW:c,imgH:o,enabled:m})=>{const[r,x]=p.useState([]);p.useEffect(()=>{if(!m)return;const M=async()=>{try{const y=await Il("/portals");x(y.portals??[])}catch{}};M();const N=setInterval(M,6e4);return()=>clearInterval(N)},[m]);const A=p.useMemo(()=>r.map(M=>({...M,pos:Tn(M.coordinates.ew,M.coordinates.ns,c,o)})),[r,c,o]);return!m||A.length===0?null:s.jsx("div",{className:"ml-portals-layer",children:A.map((M,N)=>s.jsx("div",{className:"ml-portal-icon",style:{left:M.pos.x,top:M.pos.y},title:`${M.portal_name} (by ${M.discovered_by})`},N))})},Dd="mo-midsummer",L0=!1,Qd=p.createContext(null),Y0=({children:c})=>{const[o,m]=p.useState(()=>localStorage.getItem(Dd)!=="off"),r=L0;p.useEffect(()=>{document.documentElement.removeAttribute("data-midsummer")},[r]);const x=p.useCallback(()=>{m(A=>{const M=!A;return localStorage.setItem(Dd,M?"on":"off"),M})},[]);return s.jsx(Qd.Provider,{value:{enabled:r,toggle:x},children:c})};function xs(){const c=p.useContext(Qd);if(!c)throw new Error("useMidsummer must be used within MidsummerProvider");return c}const Ud=6,X0=(c,o)=>({x:c/2,y:o/2}),V0=({imgW:c,imgH:o})=>{const{enabled:m}=xs();if(!m||c===0)return null;const{x:r,y:x}=X0(c,o);return s.jsxs("div",{className:"ms-maypole",style:{left:r,top:x},"aria-hidden":"true",children:[s.jsx("div",{className:"ms-maypole-pole"}),s.jsx("div",{className:"ms-maypole-ring",children:Array.from({length:Ud}).map((A,M)=>s.jsx("span",{className:"ms-frog",style:{transform:`rotate(${360/Ud*M}deg) translateY(-40px)`},children:"🐸"},M))})]})},Rd=20,Bd=.3,G0=({players:c,getColor:o,onSelectPlayer:m,showHeatmap:r,showPortals:x,selectedPlayer:A})=>{var Ul;const M=p.useRef(null),N=p.useRef(null),[y,T]=p.useState({w:0,h:0}),[q,g]=p.useState(null),j=p.useRef(null),R=p.useRef({scale:1,offX:0,offY:0}),L=p.useRef({dragging:!1,sx:0,sy:0,startOffX:0,startOffY:0}),$=p.useCallback(()=>{if(N.current){const{scale:tl,offX:al,offY:Z}=R.current;N.current.style.transform=`translate(${al}px, ${Z}px) scale(${tl})`}},[]),Y=p.useCallback(tl=>{const al=tl.currentTarget;if(T({w:al.naturalWidth,h:al.naturalHeight}),M.current){const Z=M.current.clientWidth,J=M.current.clientHeight,P=Math.min(Z/al.naturalWidth,J/al.naturalHeight);R.current={scale:P,offX:(Z-al.naturalWidth*P)/2,offY:(J-al.naturalHeight*P)/2},$()}},[$]),C=p.useCallback(tl=>{var At;tl.preventDefault();const al=(At=M.current)==null?void 0:At.getBoundingClientRect();if(!al)return;const Z=R.current,J=tl.deltaY<0?1.1:.9,P=Math.min(Rd,Math.max(Bd,Z.scale*J)),Rl=P/Z.scale,jl=tl.clientX-al.left,Dt=tl.clientY-al.top;R.current={scale:P,offX:jl-(jl-Z.offX)*Rl,offY:Dt-(Dt-Z.offY)*Rl},$()},[$]),X=p.useCallback(tl=>{if(tl.button!==0)return;const al=R.current;L.current={dragging:!0,sx:tl.clientX,sy:tl.clientY,startOffX:al.offX,startOffY:al.offY}},[]);p.useEffect(()=>{const tl=Z=>{const J=L.current;if(J.dragging&&(R.current.offX=J.startOffX+(Z.clientX-J.sx),R.current.offY=J.startOffY+(Z.clientY-J.sy),$()),M.current&&y.w>0&&j.current){const P=M.current.getBoundingClientRect(),Rl=R.current,jl=D0(Z.clientX-P.left,Z.clientY-P.top,Rl.scale,Rl.offX,Rl.offY,y.w,y.h);j.current.textContent=gs(jl.ns,jl.ew)}},al=()=>{L.current.dragging=!1};return window.addEventListener("mousemove",tl),window.addEventListener("mouseup",al),()=>{window.removeEventListener("mousemove",tl),window.removeEventListener("mouseup",al)}},[$,y.w,y.h]);const F=p.useRef(null);p.useEffect(()=>{if(!A||y.w===0||!M.current||F.current===A)return;const tl=c.find(Rl=>Rl.character_name===A);if(!tl)return;F.current=A;const{x:al,y:Z}=Tn(tl.ew,tl.ns,y.w,y.h),J=M.current.getBoundingClientRect(),P=3;R.current={scale:Math.min(Rd,Math.max(Bd,P)),offX:J.width/2-al*P,offY:J.height/2-Z*P},$()},[A,c,y.w,y.h,$]),p.useEffect(()=>{A||(F.current=null)},[A]);const zl=p.useCallback((tl,al,Z)=>{g(tl?{x:al,y:Z,player:tl}:null)},[]);return s.jsxs("div",{className:"ml-map-container",ref:M,onWheel:C,onMouseDown:X,children:[s.jsxs("div",{ref:N,className:"ml-map-group",children:[s.jsx("img",{src:"/dereth.png",alt:"Dereth",className:"ml-map-img",onLoad:Y,draggable:!1}),y.w>0&&s.jsxs(s.Fragment,{children:[s.jsx(q0,{imgW:y.w,imgH:y.h,enabled:r}),s.jsx(Gd,{imgW:y.w,imgH:y.h,getColor:o}),s.jsx(Vd,{players:c,imgW:y.w,imgH:y.h,getColor:o,onHover:zl,onSelect:m,selectedPlayer:A}),s.jsx(H0,{imgW:y.w,imgH:y.h,enabled:x}),s.jsx(V0,{imgW:y.w,imgH:y.h})]})]}),q&&s.jsxs("div",{className:"ml-tooltip",style:{left:q.x+12,top:q.y-10},children:[s.jsx("strong",{children:q.player.character_name}),s.jsx("br",{}),gs(q.player.ns,q.player.ew),s.jsx("br",{}),q.player.kills_per_hour," kph · ",(Ul=q.player.kills)==null?void 0:Ul.toLocaleString()," kills"]}),s.jsx("div",{className:"ml-coords",ref:j})]})},wd=jn.memo(({player:c,vitals:o,color:m,onSelect:r,isSelected:x})=>{var q,g;const{openWindow:A}=An(),M=(c.vt_state||"idle").toLowerCase(),N=M==="combat"||M==="hunt",y=(c.total_rares??0)>0?Math.round((c.total_kills??0)/(c.total_rares??1)).toLocaleString():null,T=c.character_name;return s.jsxs("li",{className:`ml-player-row ${x?"ml-player-selected":""}`,style:{borderLeftColor:m},children:[s.jsxs("div",{className:"ml-pr-header",onClick:r,children:[s.jsx("span",{className:"ml-pr-name",children:T}),s.jsx("span",{className:"ml-pr-coords",children:gs(c.ns,c.ew)})]}),s.jsxs("div",{className:"ml-pr-vitals",children:[s.jsx("div",{className:"ml-vital-bar hp",children:s.jsx("div",{className:"ml-vital-fill",style:{width:`${(o==null?void 0:o.health_percentage)??0}%`}})}),s.jsx("div",{className:"ml-vital-bar sta",children:s.jsx("div",{className:"ml-vital-fill",style:{width:`${(o==null?void 0:o.stamina_percentage)??0}%`}})}),s.jsx("div",{className:"ml-vital-bar mana",children:s.jsx("div",{className:"ml-vital-fill",style:{width:`${(o==null?void 0:o.mana_percentage)??0}%`}})})]}),s.jsxs("div",{className:"ml-pr-grid",children:[s.jsxs("span",{className:"ml-gs",title:"Session kills",children:["⚔️ ",((q=c.kills)==null?void 0:q.toLocaleString())??0]}),s.jsxs("span",{className:"ml-gs",title:"Total kills",children:["🏆 ",(c.total_kills??0).toLocaleString()]}),s.jsxs("span",{className:"ml-gs",title:"Kills per hour",children:[c.kills_per_hour??"0"," ",s.jsx("span",{className:"ml-suffix",children:"KPH"})]}),s.jsxs("span",{className:"ml-gs",title:"Rares (session / total)",children:["💎 ",c.session_rares??0," / ",c.total_rares??0]}),s.jsx("span",{className:"ml-gs",title:"Kills per rare",children:y?s.jsxs(s.Fragment,{children:["📊 ",y," ",s.jsx("span",{className:"ml-suffix",children:"KPR"})]}):""}),s.jsx("span",{className:`ml-meta-pill ${N?"active":M!=="idle"&&M!=="default"&&M!==""?"other":""}`,children:c.vt_state||"idle"}),s.jsxs("span",{className:"ml-gs",title:"Online time",children:["🕐 ",((g=c.onlinetime)==null?void 0:g.replace(/^00\./,""))??"--"]}),s.jsxs("span",{className:"ml-gs",title:"Deaths",children:["☠️ ",c.deaths??"0"]}),s.jsxs("span",{className:"ml-gs",title:"Prismatic tapers",children:[s.jsx("img",{src:"/prismatic-taper-icon.png",className:"ml-taper-icon",alt:""}),c.prismatic_taper_count??"0"]})]}),s.jsxs("div",{className:"ml-pr-buttons",children:[s.jsx("button",{className:"ml-btn accent",onClick:()=>A(`chat-${T}`,`Chat: ${T}`,T),children:"Chat"}),s.jsx("button",{className:"ml-btn accent",onClick:()=>A(`stats-${T}`,`Stats: ${T}`,T),children:"Stats"}),s.jsx("button",{className:"ml-btn accent",onClick:()=>A(`inv-${T}`,`Inventory: ${T}`,T),children:"Inv"}),s.jsx("button",{className:"ml-btn",onClick:()=>A(`char-${T}`,`Character: ${T}`,T),children:"Char"}),s.jsx("button",{className:"ml-btn",onClick:()=>A(`combat-${T}`,`Combat: ${T}`,T),children:"Combat"}),s.jsx("button",{className:"ml-btn",onClick:()=>A(`radar-${T}`,`Radar: ${T}`,T),children:"Radar"})]})]})});wd.displayName="PlayerRow";const Q0=({players:c,vitals:o,getColor:m,onSelect:r,selectedPlayer:x})=>{const A=p.useRef(null),[M,N]=p.useState(!1),y=p.useCallback(()=>{A.current&&N(A.current.scrollTop>200)},[]);return s.jsxs("div",{style:{position:"relative",flex:1,minHeight:0},children:[s.jsx("ul",{className:"ml-player-list",ref:A,onScroll:y,children:c.map(T=>s.jsx(wd,{player:T,vitals:o.get(T.character_name)??null,color:m(T.character_name),onSelect:()=>r(T.character_name),isSelected:x===T.character_name},T.character_name))}),M&&s.jsx("button",{onClick:()=>{var T;(T=A.current)==null||T.scrollTo({top:0,behavior:"smooth"})},style:{position:"absolute",bottom:8,right:8,width:28,height:28,borderRadius:"50%",background:"rgba(68,136,255,0.2)",border:"1px solid rgba(68,136,255,0.4)",color:"#6af",cursor:"pointer",fontSize:"0.8rem",display:"flex",alignItems:"center",justifyContent:"center"},children:"▲"})]})},w0=[{key:"name",label:"Name"},{key:"kph",label:"KPH"},{key:"skills",label:"S.Kills"},{key:"srares",label:"S.Rares"},{key:"tkills",label:"T.Kills"},{key:"kpr",label:"KPR"}],Z0=({value:c,onChange:o})=>s.jsx("div",{className:"ml-sort-buttons",children:w0.map(m=>s.jsx("button",{className:`ml-sort-btn ${c===m.key?"active":""}`,onClick:()=>o(m.key),children:m.label},m.key))}),K0=()=>Il("/live"),k0=()=>Il("/combat-stats"),J0=()=>Il("/server-health"),W0=()=>Il("/total-rares"),$0=()=>Il("/total-kills"),Iy=(c,o)=>Ss("/agent/ask",{message:c,session_id:o}),Py=()=>Ss("/agent/sessions/new",{}),lv=c=>Il(`/agent/sessions/${encodeURIComponent(c)}/history`),F0=()=>Il("/me");async function I0(){await fetch("/api/logout",{credentials:"include",redirect:"manual"}),window.location.href="/login"}const tv=()=>Il("/api-admin/users"),ev=(c,o,m)=>Ss("/api-admin/users",{username:c,password:o,is_admin:m}),av=(c,o)=>U0(`/api-admin/users/${c}`,o),nv=c=>R0(`/api-admin/users/${c}`);function P0(){const[c,o]=p.useState(null),[m,r]=p.useState(!0);return p.useEffect(()=>{let x=!1;return F0().then(A=>{x||o(A)}).catch(()=>{x||o(null)}).finally(()=>{x||r(!1)}),()=>{x=!0}},[]),{user:c,loading:m}}const ly=()=>{const{openWindow:c}=An(),{user:o}=P0(),m=!!(o!=null&&o.is_admin),r=p.useCallback(async()=>{if(confirm("Log out?"))try{await I0()}catch{window.location.href="/login"}},[]);return s.jsxs("div",{className:"ml-tool-links",children:[s.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>c("agent","Overlord Assistant"),children:"🤖 Assistant"}),s.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},title:"Opens the player dashboard in a new tab",onClick:()=>window.open("/?view=dashboard","_blank","noopener"),children:"👥 Dashboard ↗"}),s.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>c("queststatus","Quest Status"),children:"📜 Quests"}),s.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>c("issues","Issues Board"),children:"📋 Issues"}),s.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>c("vitalsharing","Vital Sharing"),children:"🤝 Vitals"}),s.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>c("combatpicker","Combat Stats"),children:"⚔️ Combat"}),m&&s.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>c("adminusers","Admin · Users"),children:"🛡️ Admin"}),s.jsxs("span",{className:"ml-tool-link ml-tool-link-logout",style:{cursor:"pointer"},onClick:r,title:o?`Logged in as ${o.username}`:"Log out",children:["🚪 Log out",o?` (${o.username})`:""]})]})},ty=({players:c,vitals:o,serverHealth:m,totalRares:r,totalKills:x,getColor:A,onSelectPlayer:M,showHeatmap:N,showPortals:y,onToggleHeatmap:T,onTogglePortals:q,version:g,selectedPlayer:j})=>{var tl,al;const[R,L]=p.useState("name"),[$,Y]=p.useState(""),C=p.useMemo(()=>c.reduce((Z,J)=>Z+(parseInt(J.kills_per_hour)||0),0),[c]),X=((tl=m==null?void 0:m.status)==null?void 0:tl.toLowerCase())==="online"||((al=m==null?void 0:m.status)==null?void 0:al.toLowerCase())==="up",F=p.useDeferredValue(c),zl=p.useDeferredValue(o),Ul=p.useMemo(()=>{let Z=[...F];switch($&&(Z=Z.filter(J=>J.character_name.toLowerCase().startsWith($.toLowerCase()))),R){case"kph":Z.sort((J,P)=>(parseInt(P.kills_per_hour)||0)-(parseInt(J.kills_per_hour)||0));break;case"skills":Z.sort((J,P)=>(P.kills||0)-(J.kills||0));break;case"srares":Z.sort((J,P)=>(P.session_rares??0)-(J.session_rares??0));break;case"tkills":Z.sort((J,P)=>(P.total_kills??0)-(J.total_kills??0));break;case"kpr":Z.sort((J,P)=>{const Rl=(J.total_kills??0)/Math.max(1,J.total_rares??1),jl=(P.total_kills??0)/Math.max(1,P.total_rares??1);return Rl-jl});break;default:Z.sort((J,P)=>J.character_name.localeCompare(P.character_name))}return Z},[F,R,$]);return s.jsxs("div",{className:"ml-sidebar",children:[g&&s.jsxs("div",{className:"ml-version",children:["v",g]}),s.jsx("div",{className:"ml-sidebar-header",children:s.jsxs("span",{className:"ml-sidebar-title",style:{cursor:"pointer"},onClick:()=>{const Z=document.createElement("div");Z.style.cssText="position:fixed;top:0;left:0;width:100vw;height:100vh;background:#000;z-index:999999;display:flex;align-items:center;justify-content:center;";const J=document.createElement("video");J.src="/rick.mp4",J.autoplay=!0,J.loop=!0,J.style.cssText="width:100vw;height:100vh;object-fit:cover;",Z.appendChild(J),document.body.appendChild(Z),document.body.style.animation="ml-shake 0.05s 30";const P=document.createElement("style");P.textContent="@keyframes ml-shake{0%,100%{transform:translate(0) rotate(0)}25%{transform:translate(-15px,10px) rotate(-2deg)}50%{transform:translate(15px,-10px) rotate(2deg)}75%{transform:translate(-10px,-15px) rotate(-1deg)}} @keyframes ml-spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}",document.head.appendChild(P),setTimeout(()=>{Z.style.animation="ml-spin 3s linear infinite"},1500),J.play().catch(()=>{})},children:["Active Mosswart Enjoyers (",c.length,")"]})}),s.jsxs("div",{className:"ml-server-status",children:[s.jsx("span",{className:`ml-status-dot ${X?"online":"offline"}`}),s.jsxs("span",{className:"ml-status-text",children:["Coldeve ",X?"Online":"Offline"]}),(m==null?void 0:m.player_count)!=null&&s.jsxs("span",{className:"ml-status-detail",children:["👥 ",m.player_count]}),(m==null?void 0:m.latency_ms)!=null&&s.jsxs("span",{className:"ml-status-detail",children:[Math.round(m.latency_ms),"ms"]}),(m==null?void 0:m.uptime_seconds)!=null&&s.jsxs("span",{className:"ml-status-detail",children:["Up: ",Math.floor(m.uptime_seconds/3600),"h"]})]}),s.jsxs("div",{className:"ml-counters",children:[s.jsxs("div",{className:"ml-counter rares",children:[s.jsx("span",{className:"ml-counter-val",children:r}),s.jsx("span",{className:"ml-counter-lbl",children:"Rares"})]}),s.jsxs("div",{className:`ml-counter kph ${C>5e3?"ultra":""}`,children:[s.jsx("span",{className:"ml-counter-val",children:C.toLocaleString()}),s.jsx("span",{className:"ml-counter-lbl",children:"Server KPH"})]}),s.jsxs("div",{className:"ml-counter kills",children:[s.jsx("span",{className:"ml-counter-val",children:x.toLocaleString()}),s.jsx("span",{className:"ml-counter-lbl",children:"Kills"})]})]}),s.jsxs("div",{className:"ml-tool-links",children:[s.jsx("a",{href:"/?view=inventory",target:"_blank",className:"ml-tool-link",children:"🔍 Inv Search"}),s.jsx("a",{href:"/suitbuilder.html",target:"_blank",className:"ml-tool-link",children:"🛡️ Suitbuilder"}),s.jsx("a",{href:"/debug.html",target:"_blank",className:"ml-tool-link",children:"🐛 Debug"})]}),s.jsx(ly,{}),s.jsxs("div",{className:"ml-toggles",children:[s.jsxs("label",{className:"ml-toggle-label",children:[s.jsx("input",{type:"checkbox",checked:N,onChange:Z=>T(Z.target.checked)}),s.jsx("span",{children:"Spawn Heatmap"})]}),s.jsxs("label",{className:"ml-toggle-label",children:[s.jsx("input",{type:"checkbox",checked:y,onChange:Z=>q(Z.target.checked)}),s.jsx("span",{children:"Portals"})]})]}),s.jsx("div",{style:{borderTop:"1px solid #333",marginTop:4,paddingTop:4}}),s.jsx(Z0,{value:R,onChange:L}),s.jsx("input",{className:"ml-filter",type:"text",placeholder:"Filter players...",value:$,onChange:Z=>Y(Z.target.value)}),s.jsx(Q0,{players:Ul,vitals:zl,getColor:A,onSelect:M,selectedPlayer:j})]})},ey="modulepreload",ay=function(c){return"/"+c},qd={},St=function(o,m,r){let x=Promise.resolve();if(m&&m.length>0){let M=function(T){return Promise.all(T.map(q=>Promise.resolve(q).then(g=>({status:"fulfilled",value:g}),g=>({status:"rejected",reason:g}))))};document.getElementsByTagName("link");const N=document.querySelector("meta[property=csp-nonce]"),y=(N==null?void 0:N.nonce)||(N==null?void 0:N.getAttribute("nonce"));x=M(m.map(T=>{if(T=ay(T),T in qd)return;qd[T]=!0;const q=T.endsWith(".css"),g=q?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${T}"]${g}`))return;const j=document.createElement("link");if(j.rel=q?"stylesheet":ey,q||(j.as="script"),j.crossOrigin="",j.href=T,y&&j.setAttribute("nonce",y),document.head.appendChild(j),q)return new Promise((R,L)=>{j.addEventListener("load",R),j.addEventListener("error",()=>L(new Error(`Unable to preload CSS for ${T}`)))})}))}function A(M){const N=new Event("vite:preloadError",{cancelable:!0});if(N.payload=M,window.dispatchEvent(N),!N.defaultPrevented)throw M}return x.then(M=>{for(const N of M||[])N.status==="rejected"&&A(N.reason);return o().catch(A)})},Zd=({id:c,title:o,zIndex:m,width:r=700,height:x=340,children:A})=>{const{closeWindow:M,bringToFront:N}=An(),y=p.useRef(null),T=p.useRef({dragging:!1,sx:0,sy:0,ox:0,oy:0}),q=p.useRef({resizing:!1,sx:0,sy:0,sw:0,sh:0}),g=p.useRef({x:420,y:10+Math.random()*40}),[j,R]=p.useState({w:r,h:x}),L=p.useCallback(Y=>{var X;Y.preventDefault(),N(c);const C=(X=y.current)==null?void 0:X.getBoundingClientRect();C&&(T.current={dragging:!0,sx:Y.clientX,sy:Y.clientY,ox:C.left,oy:C.top})},[c,N]),$=p.useCallback(Y=>{Y.preventDefault(),Y.stopPropagation(),q.current={resizing:!0,sx:Y.clientX,sy:Y.clientY,sw:j.w,sh:j.h}},[j.w,j.h]);return p.useEffect(()=>{const Y=X=>{const F=T.current;F.dragging&&y.current&&(g.current.x=F.ox+(X.clientX-F.sx),g.current.y=F.oy+(X.clientY-F.sy),y.current.style.left=`${g.current.x}px`,y.current.style.top=`${g.current.y}px`);const zl=q.current;if(zl.resizing){const Ul=Math.max(300,zl.sw+(X.clientX-zl.sx)),tl=Math.max(200,zl.sh+(X.clientY-zl.sy));R({w:Ul,h:tl})}},C=()=>{T.current.dragging=!1,q.current.resizing=!1};return window.addEventListener("mousemove",Y),window.addEventListener("mouseup",C),()=>{window.removeEventListener("mousemove",Y),window.removeEventListener("mouseup",C)}},[]),s.jsxs("div",{ref:y,className:"ml-window",style:{zIndex:m,width:j.w,height:j.h,left:g.current.x,top:g.current.y},onMouseDown:()=>N(c),children:[s.jsxs("div",{className:"ml-window-header",onMouseDown:L,children:[s.jsx("span",{className:"ml-window-title",children:o}),s.jsx("button",{className:"ml-window-close",onClick:()=>M(c),children:"×"})]}),s.jsx("div",{className:"ml-window-content",children:A}),s.jsx("div",{className:"ml-window-resize",onMouseDown:$})]})},ny={0:"#00FF00",2:"#FFFFFF",3:"#FF0000",4:"#FFFFFF",5:"#33CCFF",6:"#CCFF99",7:"#00FFFF",14:"#FFD700",15:"#FF69B4",17:"#AAAAFF",18:"#88FF88",21:"#FF8888",22:"#FFAA66"},Kd=50,kd=c=>`mo-chat-history-${c}`;function uy(c){try{const o=localStorage.getItem(kd(c));return o?JSON.parse(o):[]}catch{return[]}}function iy(c,o){try{localStorage.setItem(kd(c),JSON.stringify(o.slice(-Kd)))}catch{}}const cy=({id:c,charName:o,zIndex:m,messages:r,socket:x})=>{const A=p.useRef(null),[M,N]=p.useState(""),[y,T]=p.useState(!1),q=p.useRef(uy(o)),g=p.useRef(-1),j=p.useRef(""),R=p.useRef(!1);p.useEffect(()=>{const X=A.current;X&&(R.current?T(!0):(X.scrollTop=X.scrollHeight,T(!1)))},[r.length]);const L=p.useCallback(()=>{const X=A.current;if(!X)return;const F=X.scrollHeight-X.scrollTop-X.clientHeight<30;R.current=!F,F&&T(!1)},[]),$=p.useCallback(()=>{const X=A.current;X&&(X.scrollTop=X.scrollHeight,R.current=!1,T(!1))},[]),Y=p.useCallback(X=>{X.preventDefault();const F=M.trim();!F||!x||x.readyState!==WebSocket.OPEN||(x.send(JSON.stringify({player_name:o,command:F})),q.current.push(F),q.current.length>Kd&&q.current.shift(),iy(o,q.current),g.current=-1,j.current="",N(""),R.current=!1)},[M,x,o]),C=p.useCallback(X=>{const F=q.current;if(F.length!==0){if(X.key==="ArrowUp")X.preventDefault(),g.current===-1?(j.current=M,g.current=F.length-1):g.current>0&&g.current--,N(F[g.current]);else if(X.key==="ArrowDown"){if(X.preventDefault(),g.current===-1)return;g.currents.jsx("div",{className:"ml-chat-line",style:{color:ny[X.color??2]??"#ddd"},children:X.text},F))}),y&&s.jsx("div",{onClick:$,style:{padding:"3px 0",textAlign:"center",fontSize:"0.65rem",color:"#6af",background:"#1a2a3a",cursor:"pointer",borderTop:"1px solid #334"},children:"▼ New messages below"}),s.jsx("form",{className:"ml-chat-form",onSubmit:Y,children:s.jsx("input",{className:"ml-chat-input",value:M,onChange:X=>N(X.target.value),onKeyDown:C,placeholder:"Enter chat..."})})]})},sy=p.lazy(()=>St(()=>import("./StatsWindow-mORPbi1c.js"),__vite__mapDeps([0,1])).then(c=>({default:c.StatsWindow}))),fy=p.lazy(()=>St(()=>import("./CharacterWindow-CVYGQ3Kf.js"),__vite__mapDeps([2,1])).then(c=>({default:c.CharacterWindow}))),oy=p.lazy(()=>St(()=>import("./InventoryWindow-C9tBB4ai.js"),__vite__mapDeps([3,1])).then(c=>({default:c.InventoryWindow}))),ry=p.lazy(()=>St(()=>import("./RadarWindow-CjHETj1t.js"),__vite__mapDeps([4,1])).then(c=>({default:c.RadarWindow}))),dy=p.lazy(()=>St(()=>import("./CombatStatsWindow-CL4bPDdu.js"),__vite__mapDeps([5,1])).then(c=>({default:c.CombatStatsWindow}))),my=p.lazy(()=>St(()=>import("./CombatPickerWindow-DqQoZIr1.js"),__vite__mapDeps([6,1])).then(c=>({default:c.CombatPickerWindow}))),hy=p.lazy(()=>St(()=>import("./IssuesWindow-RD9J2Lzz.js"),__vite__mapDeps([7,1])).then(c=>({default:c.IssuesWindow}))),yy=p.lazy(()=>St(()=>import("./VitalSharingWindow-DWxCoItf.js"),__vite__mapDeps([8,1])).then(c=>({default:c.VitalSharingWindow}))),vy=p.lazy(()=>St(()=>import("./QuestStatusWindow-1bRYpy_f.js"),__vite__mapDeps([9,1])).then(c=>({default:c.QuestStatusWindow}))),gy=p.lazy(()=>St(()=>Promise.resolve().then(()=>My),void 0).then(c=>({default:c.PlayerDashboardWindow}))),py=p.lazy(()=>St(()=>import("./AgentWindow-D_dwVTgP.js"),__vite__mapDeps([10,1])).then(c=>({default:c.AgentWindow}))),by=p.lazy(()=>St(()=>import("./AdminUsersWindow-DT6JGS-P.js"),__vite__mapDeps([11,1])).then(c=>({default:c.AdminUsersWindow}))),Jd=jn.memo(({characters:c,chatMessages:o,nearbyObjects:m,inventoryVersions:r,equipmentCantrips:x,characterStats:A,socket:M})=>{const{windows:N}=An();return s.jsx(p.Suspense,{fallback:null,children:N.map(y=>{var g;const T=y.charName??"";switch(y.id.split("-")[0]){case"chat":return s.jsx(cy,{id:y.id,charName:T,zIndex:y.zIndex,messages:o.get(T)??[],socket:M},y.id);case"stats":return s.jsx(sy,{id:y.id,charName:T,zIndex:y.zIndex},y.id);case"char":return s.jsx(fy,{id:y.id,charName:T,zIndex:y.zIndex,vitals:((g=c.get(T))==null?void 0:g.vitals)??void 0,liveStats:A.get(T)},y.id);case"inv":return s.jsx(oy,{id:y.id,charName:T,zIndex:y.zIndex,inventoryVersion:r.get(T)??0,equipmentCantrips:x.get(T)},y.id);case"radar":return s.jsx(ry,{id:y.id,charName:T,zIndex:y.zIndex,socket:M,radarData:m.get(T)??null},y.id);case"combat":return s.jsx(dy,{id:y.id,charName:T,zIndex:y.zIndex},y.id);case"combatpicker":return s.jsx(my,{id:y.id,zIndex:y.zIndex,characters:c},y.id);case"issues":return s.jsx(hy,{id:y.id,zIndex:y.zIndex},y.id);case"vitalsharing":return s.jsx(yy,{id:y.id,zIndex:y.zIndex},y.id);case"queststatus":return s.jsx(vy,{id:y.id,zIndex:y.zIndex},y.id);case"playerdash":return s.jsx(gy,{id:y.id,zIndex:y.zIndex,characters:c},y.id);case"agent":return s.jsx(py,{id:y.id,zIndex:y.zIndex},y.id);case"adminusers":return s.jsx(by,{id:y.id,zIndex:y.zIndex},y.id);default:return null}})})});Jd.displayName="WindowRenderer";let Sy=0;const xy=({recentRares:c})=>{const[o,m]=p.useState([]),[r,x]=p.useState(0),[A,M]=p.useState([]);p.useEffect(()=>{if(c.length>r&&r>0){const y=c.slice(0,c.length-r);for(const T of y){const q=++Sy;m(g=>[...g,{key:q,charName:T.character_name,rareName:T.name,exiting:!1}]),N();try{const g=new AudioContext,j=g.createOscillator(),R=g.createGain();j.connect(R),R.connect(g.destination),j.frequency.value=880,j.type="sine",R.gain.value=.3,j.start(),R.gain.exponentialRampToValueAtTime(.001,g.currentTime+.5),j.stop(g.currentTime+.5)}catch{}setTimeout(()=>{m(g=>g.map(j=>j.key===q?{...j,exiting:!0}:j)),setTimeout(()=>{m(g=>g.filter(j=>j.key!==q))},500)},6e3)}}x(c.length)},[c.length]);const N=p.useCallback(()=>{const y=Date.now(),T=["#FFD700","#FF4444","#FF8800","#AA44FF","#4488FF"],q=Array.from({length:30},(g,j)=>{const R=Math.PI*2*j/30+(Math.random()-.5)*.5,L=100+Math.random()*200;return{dx:Math.cos(R)*L,dy:Math.sin(R)*L-50,color:T[Math.floor(Math.random()*T.length)]}});M(g=>[...g,{id:y,particles:q}]),setTimeout(()=>M(g=>g.filter(j=>j.id!==y)),2200)},[]);return s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"ml-rare-notifications",children:o.map(y=>s.jsxs("div",{className:`ml-rare-notif ${y.exiting?"exiting":""}`,children:[s.jsx("div",{className:"ml-rare-notif-title",children:"🎆 LEGENDARY RARE! 🎆"}),s.jsx("div",{className:"ml-rare-notif-name",children:y.rareName}),s.jsx("div",{className:"ml-rare-notif-by",children:"found by"}),s.jsx("div",{className:"ml-rare-notif-char",children:y.charName})]},y.key))}),s.jsx("div",{className:"ml-fireworks",children:A.map(y=>s.jsx(jn.Fragment,{children:y.particles.map((T,q)=>s.jsx("div",{className:"ml-firework-particle",style:{left:"50%",top:"30%",backgroundColor:T.color,"--dx":`${T.dx}px`,"--dy":`${T.dy+200}px`}},q))},y.id))})]})};let _y=0;const zy=({deathAlerts:c})=>{const[o,m]=p.useState([]),r=p.useRef(0);return p.useEffect(()=>{if(c.length>r.current&&r.current>0){const x=c.slice(r.current);for(const A of x){const M=++_y;m(N=>[...N,{key:M,alert:A,exiting:!1}]);try{const N=new AudioContext,y=N.createOscillator(),T=N.createGain();y.connect(T),T.connect(N.destination),y.frequency.value=440,y.type="sawtooth",T.gain.value=.2,y.start(),T.gain.exponentialRampToValueAtTime(.001,N.currentTime+.8),y.stop(N.currentTime+.8)}catch{}setTimeout(()=>{m(N=>N.map(y=>y.key===M?{...y,exiting:!0}:y)),setTimeout(()=>m(N=>N.filter(y=>y.key!==M)),500)},8e3)}}r.current=c.length},[c.length]),o.length===0?null:s.jsx("div",{style:{position:"fixed",top:70,left:"50%",transform:"translateX(-50%)",zIndex:99999,display:"flex",flexDirection:"column",gap:6,pointerEvents:"none"},children:o.map(x=>s.jsxs("div",{style:{background:"linear-gradient(135deg, #2a0a0a, #1a0000)",border:"2px solid #cc4444",borderRadius:8,padding:"12px 24px",textAlign:"center",boxShadow:"0 0 30px rgba(204, 68, 68, 0.3)",animation:x.exiting?"ml-notif-out 0.5s ease-in forwards":"ml-notif-in 0.5s ease-out"},children:[s.jsx("div",{style:{fontSize:"1.2rem",fontWeight:800,color:"#ff4444"},children:"☠️ CHARACTER DIED ☠️"}),s.jsx("div",{style:{fontSize:"1rem",fontWeight:600,color:"#fff",marginTop:2},children:x.alert.character_name}),s.jsxs("div",{style:{fontSize:"0.8rem",color:"#c88",marginTop:2},children:["Vitae: ",x.alert.vitae,"%"]})]},x.key))})},Hd=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf","#ff4444","#44ff44","#4444ff","#ffff44","#ff44ff","#44ffff","#ff8844","#88ff44","#4488ff","#ff4488","#cc3333","#33cc33","#3333cc","#cccc33","#cc33cc","#33cccc","#cc6633","#66cc33","#3366cc","#cc3366","#ff6666","#66ff66","#6666ff","#ffff66","#ff66ff","#66ffff","#ffaa66","#aaff66","#66aaff","#ff66aa","#990099","#009900","#000099","#990000","#009999","#999900","#aa5500","#55aa00","#0055aa","#aa0055","#ffaaaa","#aaffaa","#aaaaff","#ffffaa","#ffaaff","#aaffff","#ffccaa","#ccffaa","#aaccff","#ffaacc"];function jy(c){let o=0;for(let m=0;m{let x=c.current.get(r);return x||(x=o.current{const{enabled:c}=xs();return c?s.jsx("div",{className:"ms-banner",role:"status",children:"🐸 Glad midsommar! 🌼 Små grodorna, små grodorna… 🥂"}):null},Ld=["🐸","🌼","🌸","🇸🇪","🌿"],$d=()=>{const{enabled:c}=xs();return p.useEffect(()=>{if(!c||window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const o=document.createElement("div");o.className="ms-rain",document.body.appendChild(o);const m=()=>{const x=document.createElement("span");x.textContent=Ld[Math.floor(Math.random()*Ld.length)],x.style.left=Math.floor(Math.random()*100)+"vw";const A=6+Math.random()*5;x.style.animationDuration=A.toFixed(2)+"s",x.style.fontSize=14+Math.floor(Math.random()*16)+"px",o.appendChild(x),window.setTimeout(()=>x.remove(),A*1e3+250)},r=window.setInterval(m,450);return()=>{window.clearInterval(r),o.remove()}},[c]),null},Ty=({data:c})=>{const o=Ay(),[m,r]=p.useState(!1),[x,A]=p.useState(!1),[M,N]=p.useState(null),y=p.useMemo(()=>Array.from(c.characters.values()).filter(R=>R.telemetry).map(R=>R.telemetry),[c.characters]),T=p.useMemo(()=>new Map(Array.from(c.characters.values()).filter(R=>R.vitals).map(R=>[R.name,R.vitals])),[c.characters]),[q,g]=p.useState("");p.useEffect(()=>{fetch("/api/api-version",{credentials:"include"}).then(R=>R.json()).then(R=>g(R.version??"")).catch(()=>{})},[]);const j=p.useCallback(R=>{N(L=>L===R?null:R)},[]);return s.jsx(O0,{children:s.jsxs("div",{className:"ml-layout",children:[s.jsx(Wd,{}),s.jsx($d,{}),s.jsx(ty,{players:y,vitals:T,serverHealth:c.serverHealth,totalRares:c.totalRares,totalKills:c.totalKills,getColor:o,onSelectPlayer:j,showHeatmap:m,showPortals:x,onToggleHeatmap:r,onTogglePortals:A,version:q,selectedPlayer:M}),s.jsx(G0,{players:y,getColor:o,onSelectPlayer:j,showHeatmap:m,showPortals:x,selectedPlayer:M}),s.jsx(Jd,{characters:c.characters,chatMessages:c.chatMessages,nearbyObjects:c.nearbyObjects,inventoryVersions:c.inventoryVersions,equipmentCantrips:c.equipmentCantrips,characterStats:c.characterStats,socket:c.socketRef.current}),s.jsx(xy,{recentRares:c.recentRares}),s.jsx(zy,{deathAlerts:c.deathAlerts})]})})};function Ey(c){const o=p.useRef(null),m=p.useRef(0),r=p.useRef(c);r.current=c;const x=p.useCallback(()=>{var M;if(((M=o.current)==null?void 0:M.readyState)===WebSocket.OPEN)return;const A=new WebSocket(B0());o.current=A,A.addEventListener("message",N=>{try{const y=JSON.parse(N.data);r.current(y)}catch{}}),A.addEventListener("close",()=>{o.current=null,m.current=window.setTimeout(x,2e3)}),A.addEventListener("error",()=>{A.close()})},[]);return p.useEffect(()=>(x(),()=>{var A;clearTimeout(m.current),(A=o.current)==null||A.close(),o.current=null}),[x]),o}function Fd(){const[c,o]=p.useState(new Map),[m,r]=p.useState(null),[x,A]=p.useState(0),[M,N]=p.useState(0),[y,T]=p.useState([]),q=p.useRef(new Map),[g,j]=p.useState(0),[R,L]=p.useState(new Map),$=p.useRef(new Map),[Y,C]=p.useState(0),X=p.useRef(new Map),[F,zl]=p.useState(0),[Ul,tl]=p.useState([]),[al,Z]=p.useState(new Map),J=p.useRef(c);J.current=c;const P=p.useCallback((_,B)=>{o(w=>{const H=new Map(w),G=H.get(_)??{name:_,telemetry:null,vitals:null,combat:null,lastUpdate:0};return H.set(_,B(G)),H})},[]),Rl=p.useCallback(_=>{var B,w;if(_.type){if(_.type==="telemetry"){const H=_;P(H.character_name,G=>({...G,telemetry:H,lastUpdate:Date.now()}))}else if(_.type==="vitals"){const H=_,G=(B=J.current.get(H.character_name))==null?void 0:B.vitals;G&&(G.vitae??0)===0&&(H.vitae??0)>0&&tl(rl=>[...rl,{character_name:H.character_name,vitae:H.vitae,timestamp:new Date().toISOString()}].slice(-50)),P(H.character_name,rl=>({...rl,vitals:H,lastUpdate:Date.now()}))}else if(_.type==="combat_stats"){const H=_;P(H.character_name,G=>({...G,combat:H,lastUpdate:Date.now()}))}else if(_.type==="rare"){const H=_;T(G=>[H,...G].slice(0,50))}else if(_.type==="inventory_delta"){const H=_;H.character_name&&L(G=>{const rl=new Map(G);return rl.set(H.character_name,(rl.get(H.character_name)??0)+1),rl})}else if(_.type==="character_stats"){const H=_;X.current.set(H.character_name,_),zl(G=>G+1)}else if(_.type==="equipment_cantrip_state"){const H=_;$.current.set(H.character_name,H),C(G=>G+1)}else if(_.type==="dungeon_map"){const H=_;H.landblock&&(window.__dungeonMapCache||(window.__dungeonMapCache={}),window.__dungeonMapCache[H.landblock]=H)}else if(_.type==="nearby_objects"){const H=_;if(Z(G=>{const rl=new Map(G);return rl.set(H.character_name,H),rl}),H.is_dungeon&&H.landblock&&!((w=window.__dungeonMapCache)!=null&&w[H.landblock])){const G=jl.current;(G==null?void 0:G.readyState)===WebSocket.OPEN&&G.send(JSON.stringify({type:"request_dungeon_map",landblock:H.landblock}))}}else if(_.type==="chat"){const H=_,G=q.current.get(H.character_name)??[];G.push({text:H.text,color:H.color,timestamp:H.timestamp}),G.length>1e3&&G.splice(0,G.length-1e3),q.current.set(H.character_name,G),j(rl=>rl+1)}}},[P]),jl=Ey(Rl);p.useEffect(()=>{const _=async()=>{try{const w=await K0();o(H=>{var rl;const G=new Map(H);for(const dl of w.players??[]){const el=G.get(dl.character_name);G.set(dl.character_name,{name:dl.character_name,telemetry:dl,vitals:(el==null?void 0:el.vitals)??null,combat:(el==null?void 0:el.combat)??null,lastUpdate:Date.now()})}for(const dl of G.keys())(rl=w.players)!=null&&rl.some(el=>el.character_name===dl)||G.delete(dl);return G})}catch{}};_();const B=setInterval(_,5e3);return()=>clearInterval(B)},[]),p.useEffect(()=>{const _=async()=>{try{const w=await k0();for(const H of w.stats??[])P(H.character_name,G=>({...G,combat:{...H,type:"combat_stats"}}))}catch{}};_();const B=setInterval(_,3e4);return()=>clearInterval(B)},[P]),p.useEffect(()=>{const _=async()=>{try{r(await J0())}catch{}};_();const B=setInterval(_,3e4);return()=>clearInterval(B)},[]),p.useEffect(()=>{const _=async()=>{try{const[w,H]=await Promise.all([W0(),$0()]);A(w.all_time??0),N(H.total??0)}catch{}};_();const B=setInterval(_,3e5);return()=>clearInterval(B)},[]);const Dt=p.useMemo(()=>q.current,[g]),At=p.useMemo(()=>$.current,[Y]),xt=p.useMemo(()=>X.current,[F]);return{characters:c,serverHealth:m,totalRares:x,totalKills:M,recentRares:y,chatMessages:Dt,nearbyObjects:al,inventoryVersions:R,equipmentCantrips:At,characterStats:xt,deathAlerts:Ul,socketRef:jl}}const _s=({characters:c})=>{const[o,m]=p.useState("kph"),[r,x]=p.useState(!1),[A,M]=p.useState(null),N=p.useMemo(()=>{const g=Array.from(c.values()).filter(j=>j.telemetry).map(j=>{var L,$,Y;const R=j.telemetry;return{name:j.name,kills:R.kills??0,kph:parseInt(R.kills_per_hour)||0,totalKills:R.total_kills??0,rares:R.total_rares??0,sessionRares:R.session_rares??0,deaths:parseInt(R.deaths)||0,totalDeaths:parseInt(R.total_deaths)||0,uptime:((L=R.onlinetime)==null?void 0:L.replace(/^00\./,""))??"",state:R.vt_state??"idle",tapers:parseInt(R.prismatic_taper_count)||0,hp:(($=j.vitals)==null?void 0:$.health_percentage)??0,vitae:((Y=j.vitals)==null?void 0:Y.vitae)??0}});return g.sort((j,R)=>{let L=0;switch(o){case"name":L=j.name.localeCompare(R.name);break;case"kills":L=j.kills-R.kills;break;case"kph":L=j.kph-R.kph;break;case"rares":L=j.rares-R.rares;break;case"deaths":L=j.totalDeaths-R.totalDeaths;break;case"uptime":L=j.uptime.localeCompare(R.uptime);break;case"state":L=j.state.localeCompare(R.state);break}return r?L:-L}),g},[c,o,r]),y=g=>{o===g?x(!r):(m(g),x(!1))},T=g=>({padding:"4px 6px",cursor:"pointer",userSelect:"none",color:o===g?"#6af":"#888",fontSize:"0.65rem",fontWeight:600,whiteSpace:"nowrap",borderBottom:"1px solid #444"}),q=g=>o===g?r?" ▲":" ▼":"";return s.jsxs("div",{style:{flex:1,overflow:"auto",fontSize:"0.73rem"},children:[s.jsxs("table",{style:{width:"auto",borderCollapse:"collapse"},children:[s.jsx("thead",{children:s.jsxs("tr",{style:{position:"sticky",top:0,background:"#1a1a1a",zIndex:1},children:[s.jsxs("th",{style:{...T("name"),textAlign:"left"},onClick:()=>y("name"),children:["Character",q("name")]}),s.jsxs("th",{style:{...T("state"),textAlign:"center"},onClick:()=>y("state"),children:["State",q("state")]}),s.jsxs("th",{style:{...T("kph"),textAlign:"right"},onClick:()=>y("kph"),children:["KPH",q("kph")]}),s.jsxs("th",{style:{...T("kills"),textAlign:"right"},onClick:()=>y("kills"),children:["Session",q("kills")]}),s.jsx("th",{style:{textAlign:"right",padding:"4px 6px",color:"#888",fontSize:"0.65rem",fontWeight:600,borderBottom:"1px solid #444"},children:"Total"}),s.jsxs("th",{style:{...T("rares"),textAlign:"right"},onClick:()=>y("rares"),children:["Rares",q("rares")]}),s.jsxs("th",{style:{...T("deaths"),textAlign:"right"},onClick:()=>y("deaths"),children:["Deaths",q("deaths")]}),s.jsxs("th",{style:{...T("uptime"),textAlign:"right"},onClick:()=>y("uptime"),children:["Uptime",q("uptime")]}),s.jsx("th",{style:{textAlign:"right",padding:"4px 6px",color:"#888",fontSize:"0.65rem",fontWeight:600,borderBottom:"1px solid #444"},children:"HP%"}),s.jsx("th",{style:{textAlign:"right",padding:"4px 6px",color:"#888",fontSize:"0.65rem",fontWeight:600,borderBottom:"1px solid #444"},children:"Vitae"}),s.jsx("th",{style:{textAlign:"right",padding:"4px 6px",color:"#888",fontSize:"0.65rem",fontWeight:600,borderBottom:"1px solid #444"},children:"Tapers"})]})}),s.jsx("tbody",{children:N.map(g=>{const j=g.state.toLowerCase(),R=j==="combat"||j==="hunt",L=A===g.name;return s.jsxs("tr",{onClick:()=>M(L?null:g.name),style:{borderBottom:"1px solid #1a1a1a",cursor:"pointer",background:L?"rgba(102, 170, 255, 0.18)":void 0,outline:L?"1px solid rgba(102, 170, 255, 0.55)":void 0,outlineOffset:"-1px"},children:[s.jsx("td",{style:{padding:"3px 10px 3px 6px",color:"#ccc",fontWeight:500,whiteSpace:"nowrap"},children:g.name}),s.jsx("td",{style:{textAlign:"center",padding:"3px 6px"},children:s.jsx("span",{style:{fontSize:"0.6rem",padding:"1px 6px",borderRadius:3,background:R?"rgba(68,204,68,0.15)":j==="idle"||j==="default"?"rgba(100,100,100,0.2)":"rgba(204,68,68,0.15)",color:R?"#4c4":j==="idle"||j==="default"?"#888":"#c44"},children:g.state})}),s.jsx("td",{style:{textAlign:"right",padding:"3px 6px",color:"#4c4",fontVariantNumeric:"tabular-nums"},children:g.kph.toLocaleString()}),s.jsx("td",{style:{textAlign:"right",padding:"3px 6px",color:"#ccc",fontVariantNumeric:"tabular-nums"},children:g.kills.toLocaleString()}),s.jsx("td",{style:{textAlign:"right",padding:"3px 6px",color:"#888",fontVariantNumeric:"tabular-nums"},children:g.totalKills.toLocaleString()}),s.jsxs("td",{style:{textAlign:"right",padding:"3px 6px",color:"#fc0",fontVariantNumeric:"tabular-nums"},children:[g.rares,g.sessionRares>0?` (${g.sessionRares})`:""]}),s.jsx("td",{style:{textAlign:"right",padding:"3px 6px",color:g.totalDeaths>0?"#c66":"#555",fontVariantNumeric:"tabular-nums"},children:g.totalDeaths}),s.jsx("td",{style:{textAlign:"right",padding:"3px 6px",color:"#888",fontVariantNumeric:"tabular-nums"},children:g.uptime}),s.jsxs("td",{style:{textAlign:"right",padding:"3px 6px",fontVariantNumeric:"tabular-nums",color:g.hp>80?"#4c4":g.hp>40?"#ca0":"#c44"},children:[g.hp.toFixed(0),"%"]}),s.jsx("td",{style:{textAlign:"right",padding:"3px 6px",fontVariantNumeric:"tabular-nums",color:g.vitae>0?"#f66":"#333"},children:g.vitae>0?`${g.vitae}%`:""}),s.jsx("td",{style:{textAlign:"right",padding:"3px 6px",color:"#888",fontVariantNumeric:"tabular-nums"},children:g.tapers.toLocaleString()})]},g.name)})})]}),N.length===0&&s.jsx("div",{style:{padding:20,color:"#666",textAlign:"center"},children:"No characters online"})]})},Ny=({id:c,zIndex:o,characters:m})=>s.jsx(Zd,{id:c,title:"Player Dashboard",zIndex:o,width:850,height:500,children:s.jsx(_s,{characters:m})}),My=Object.freeze(Object.defineProperty({__proto__:null,PlayerDashboardContent:_s,PlayerDashboardWindow:Ny},Symbol.toStringTag,{value:"Module"})),Cy=()=>{const c=Fd(),[o,m]=p.useState("");p.useEffect(()=>{const x=document.title;return document.title="Overlord Dashboard",()=>{document.title=x}},[]),p.useEffect(()=>{fetch("/api/api-version",{credentials:"include"}).then(x=>x.json()).then(x=>m(x.version??"")).catch(()=>{})},[]);const r=Array.from(c.characters.values()).filter(x=>x.telemetry).length;return s.jsxs("div",{className:"ml-dashboard-page",children:[s.jsx(Wd,{}),s.jsx($d,{}),s.jsxs("header",{className:"ml-dashboard-header",children:[s.jsx("span",{className:"ml-dashboard-title",children:"👥 Player Dashboard"}),s.jsxs("span",{className:"ml-dashboard-count",children:[r," online"]}),s.jsx("span",{style:{flex:1}}),o&&s.jsxs("span",{className:"ml-dashboard-version",children:["v",o]})]}),s.jsx("main",{className:"ml-dashboard-main",children:s.jsx(_s,{characters:c.characters})})]})},Na={text:"",characters:"all",itemType:"all",weaponType:"",slots:[],cantrips:[],spellContains:"",ratings:{},itemSet:"",equippedOnly:!1,bonded:!1,attuned:!1,rare:!1,maxLevel:"",minValue:"",minWorkmanship:"",maxBurden:"",sortBy:"name",sortDir:"asc",page:1},W=c=>({value:c,label:c.replace(/^Legendary /,"")}),Oy=[{group:"Attributes",items:[W("Legendary Strength"),W("Legendary Endurance"),W("Legendary Quickness"),W("Legendary Coordination"),W("Legendary Willpower"),W("Legendary Focus")]},{group:"Weapon skills",items:[W("Legendary Heavy Weapon Aptitude"),W("Legendary Light Weapon Aptitude"),W("Legendary Finesse Weapon Aptitude"),W("Legendary Missile Weapon Aptitude"),W("Legendary Two Handed Combat Aptitude"),W("Legendary Dual Wield Aptitude"),W("Legendary Shield Aptitude"),W("Legendary Sneak Attack Prowess"),W("Legendary Dirty Fighting Prowess"),W("Legendary Recklessness Prowess"),W("Legendary Defender"),W("Legendary Blood Thirst")]},{group:"Magic",items:[W("Legendary War Magic Aptitude"),W("Legendary Void Magic Aptitude"),W("Legendary Creature Enchantment Aptitude"),W("Legendary Item Enchantment Aptitude"),W("Legendary Life Magic Aptitude"),W("Legendary Mana Conversion Prowess"),W("Legendary Arcane Prowess"),W("Legendary Hermetic Link"),W("Legendary Spirit Thirst"),W("Legendary Magic Resistance")]},{group:"Utility",items:[W("Legendary Summoning Prowess"),W("Legendary Healing Prowess"),W("Legendary Leadership"),W("Legendary Deception Prowess"),W("Legendary Person Attunement"),W("Legendary Magic Item Tinkering Expertise")]},{group:"Defense",items:[W("Legendary Invulnerability"),W("Legendary Impenetrability"),W("Legendary Impregnability"),W("Legendary Armor")]},{group:"Wards & Banes",items:[W("Legendary Flame Ward"),W("Legendary Frost Ward"),W("Legendary Acid Ward"),W("Legendary Storm Ward"),W("Legendary Slashing Ward"),W("Legendary Piercing Ward"),W("Legendary Bludgeoning Ward"),W("Legendary Piercing Bane"),W("Legendary Storm Bane")]}],Dy=["Ring","Bracelet","Neck","Trinket","Cloak"],Uy=["Head","Chest","Abdomen","Upper Arms","Lower Arms","Hands","Upper Legs","Lower Legs","Feet","Shield"],Ry=[{value:"",label:"All weapons"},{value:"heavy",label:"Heavy"},{value:"light",label:"Light"},{value:"finesse",label:"Finesse"},{value:"two_handed",label:"Two-handed"},{value:"bow",label:"Bow"},{value:"crossbow",label:"Crossbow"},{value:"thrown",label:"Thrown"},{value:"caster",label:"Wand/Staff/Orb"}],ps=[{param:"min_damage_rating",label:"Damage rating",common:!0},{param:"min_crit_damage_rating",label:"Crit damage",common:!0},{param:"min_heal_boost_rating",label:"Heal boost",common:!0},{param:"min_vitality_rating",label:"Vitality",common:!0},{param:"min_armor",label:"Armor level"},{param:"min_damage_resist_rating",label:"Damage resist"},{param:"min_crit_resist_rating",label:"Crit resist"},{param:"min_crit_damage_resist_rating",label:"Crit dmg resist"},{param:"min_healing_resist_rating",label:"Healing resist"},{param:"min_nether_resist_rating",label:"Nether resist"},{param:"min_healing_rating",label:"Healing rating"},{param:"min_dot_resist_rating",label:"DoT resist"},{param:"min_life_resist_rating",label:"Life resist"},{param:"min_sneak_attack_rating",label:"Sneak attack"},{param:"min_recklessness_rating",label:"Recklessness"},{param:"min_deception_rating",label:"Deception"},{param:"min_pk_damage_rating",label:"PK damage"},{param:"min_pk_damage_resist_rating",label:"PK dmg resist"},{param:"min_gear_pk_damage_rating",label:"Gear PK dmg"},{param:"min_gear_pk_damage_resist_rating",label:"Gear PK resist"},{param:"min_tinks",label:"Tinks"}],bs=[{key:"name",label:"Item",sortKey:"name",defaultVisible:!0},{key:"character_name",label:"Character",sortKey:"character_name",defaultVisible:!0},{key:"slot_name",label:"Slot",defaultVisible:!0},{key:"value",label:"Value",sortKey:"value",defaultVisible:!0},{key:"wield_level",label:"Wield",sortKey:"level",defaultVisible:!0},{key:"spell_names",label:"Spells / Cantrips",sortKey:"spell_names",defaultVisible:!0},{key:"armor_level",label:"Armor",sortKey:"armor",defaultVisible:!1},{key:"max_damage",label:"Max Dmg",sortKey:"damage",defaultVisible:!1},{key:"workmanship",label:"Work",sortKey:"workmanship",defaultVisible:!1},{key:"item_set_name",label:"Set",sortKey:"item_set",defaultVisible:!1},{key:"object_class_name",label:"Type",sortKey:"item_type_name",defaultVisible:!1},{key:"burden",label:"Burden",defaultVisible:!1},{key:"condition_percent",label:"Cond %",defaultVisible:!1},{key:"last_updated",label:"Updated",sortKey:"last_updated",defaultVisible:!1}],By=200,Id="inv.visibleColumns";function qy(c){const o={};for(const r of Object.keys(Na))JSON.stringify(c[r])!==JSON.stringify(Na[r])&&(o[r]=c[r]);const m=new URL(window.location.href);m.searchParams.set("view","inventory"),Object.keys(o).length?m.searchParams.set("q",JSON.stringify(o)):m.searchParams.delete("q"),window.history.replaceState(null,"",m)}function Hy(){try{const c=new URLSearchParams(window.location.search).get("q");return c?{...Na,...JSON.parse(c)}:Na}catch{return Na}}function Ly(c){const o=new URLSearchParams;switch(c.characters==="all"?o.set("include_all_characters","true"):c.characters.length===1?o.set("character",c.characters[0]):o.set("characters",c.characters.join(",")),c.text&&o.set("text",c.text),c.itemType){case"armor":o.set("armor_only","true");break;case"jewelry":o.set("jewelry_only","true");break;case"clothing":o.set("clothing_only","true");break;case"shirt":o.set("shirt_only","true");break;case"pants":o.set("pants_only","true");break;case"weapon":o.set("weapon_only","true"),c.weaponType&&o.set("weapon_type",c.weaponType);break}c.slots.length&&o.set("slot_names",c.slots.join(",")),c.cantrips.length&&o.set("legendary_cantrips",c.cantrips.join(",")),c.spellContains&&o.set("spell_contains",c.spellContains);for(const[m,r]of Object.entries(c.ratings))r!==""&&o.set(m,String(r));return c.itemSet&&o.set("item_set",c.itemSet),c.equippedOnly&&o.set("equipment_status","equipped"),c.bonded&&o.set("bonded","true"),c.attuned&&o.set("attuned","true"),c.rare&&o.set("is_rare","true"),c.maxLevel!==""&&o.set("max_level",String(c.maxLevel)),c.minValue!==""&&o.set("min_value",String(c.minValue)),c.minWorkmanship!==""&&o.set("min_workmanship",String(c.minWorkmanship)),c.maxBurden!==""&&o.set("max_burden",String(c.maxBurden)),o.set("sort_by",c.sortBy),o.set("sort_dir",c.sortDir),o.set("page",String(c.page)),o.set("limit",String(By)),o}function Yy(){const[c,o]=p.useState(Hy),[m,r]=p.useState(null),[x,A]=p.useState(!1),[M,N]=p.useState(null),[y,T]=p.useState(null),q=p.useRef(null),g=p.useCallback(R=>{o(L=>({...L,page:"page"in R?L.page:1,...R}))},[]),j=p.useCallback(()=>o(Na),[]);return p.useEffect(()=>{qy(c);const R=setTimeout(async()=>{var Y;(Y=q.current)==null||Y.abort();const L=new AbortController;q.current=L,A(!0);const $=performance.now();try{const C=await fetch(`/api/inv/search/items?${Ly(c)}`,{credentials:"include",signal:L.signal});if(!C.ok)throw new Error(`search: HTTP ${C.status}`);const X=await C.json();if(X.error)throw new Error(X.error);r(X),N(null),T(Math.round(performance.now()-$))}catch(C){(C==null?void 0:C.name)!=="AbortError"&&N(String((C==null?void 0:C.message)??C))}finally{q.current===L&&A(!1)}},400);return()=>clearTimeout(R)},[c]),{filters:c,update:g,reset:j,result:m,loading:x,error:M,queryMs:y}}function Xy({search:c}){const{filters:o,update:m}=c,[r,x]=p.useState([]),[A,M]=p.useState(new Set),[N,y]=p.useState("");p.useEffect(()=>{Il("/inv/characters/list").then(j=>x(j.characters.map(R=>R.character_name).sort((R,L)=>R.localeCompare(L)))).catch(()=>{}),Il("/live").then(j=>M(new Set(j.players.map(R=>R.character_name)))).catch(()=>{})},[]);const T=p.useMemo(()=>o.characters==="all"?new Set(r):new Set(o.characters),[o.characters,r]),q=j=>{const R=new Set(T);R.has(j)?R.delete(j):R.add(j),m({characters:R.size===r.length?"all":[...R]})},g=r.filter(j=>j.toLowerCase().includes(N.toLowerCase()));return s.jsxs(ze,{title:"Characters",defaultOpen:!0,badge:o.characters==="all"?"All":o.characters.length,children:[s.jsx("input",{className:"inv-minisearch",placeholder:"filter characters…",value:N,onChange:j=>y(j.target.value)}),s.jsxs("div",{className:"inv-links",children:[s.jsx("span",{className:"inv-linky",onClick:()=>m({characters:"all"}),children:"All"})," · ",s.jsx("span",{className:"inv-linky",onClick:()=>m({characters:[]}),children:"None"})," · ",s.jsx("span",{className:"inv-linky",onClick:()=>m({characters:r.filter(j=>A.has(j))}),children:"Online"})]}),g.map(j=>s.jsxs("label",{className:"inv-fitem",children:[s.jsx("input",{type:"checkbox",checked:T.has(j),onChange:()=>q(j)}),j," ",A.has(j)&&s.jsx("span",{className:"inv-online"})]},j))]})}function Vy({search:c}){const{filters:o,update:m}=c,[r,x]=p.useState(""),A=N=>m({cantrips:o.cantrips.includes(N)?o.cantrips.filter(y=>y!==N):[...o.cantrips,N]}),M=N=>N.toLowerCase().includes(r.toLowerCase());return s.jsxs(ze,{title:"Cantrips",defaultOpen:!0,badge:o.cantrips.length||void 0,children:[s.jsx("input",{className:"inv-minisearch",placeholder:"find cantrip… e.g. invuln",value:r,onChange:N=>x(N.target.value)}),o.cantrips.length>0&&s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"inv-subhead",children:"Selected"}),o.cantrips.map(N=>s.jsxs("label",{className:"inv-fitem inv-gold",children:[s.jsx("input",{type:"checkbox",checked:!0,onChange:()=>A(N)}),N.replace(/^Legendary /,"")]},N))]}),Oy.map(N=>{const y=N.items.filter(T=>!o.cantrips.includes(T.value)&&M(T.label));return y.length?s.jsxs("div",{children:[s.jsx("div",{className:"inv-subhead",children:N.group}),y.map(T=>s.jsxs("label",{className:"inv-fitem",children:[s.jsx("input",{type:"checkbox",checked:!1,onChange:()=>A(T.value)})," ",T.label]},T.value))]},N.group):null}),s.jsx("div",{className:"inv-subhead",children:"Any-tier spell search"}),s.jsx("input",{className:"inv-minisearch",placeholder:"spell name contains… e.g. Epic Invuln",value:o.spellContains,onChange:N=>m({spellContains:N.target.value})})]})}function ze(c){const[o,m]=p.useState(c.defaultOpen??!1);return s.jsxs("div",{className:`inv-grp${o?" inv-open":""}`,children:[s.jsxs("div",{className:"inv-grp-head",onClick:()=>m(r=>!r),children:[s.jsx("span",{className:"inv-arrow",children:"▶"})," ",c.title,c.badge?s.jsx("span",{className:"inv-badge",children:c.badge}):null]}),o&&s.jsx("div",{className:"inv-grp-body",children:c.children})]})}function Gy({search:c}){const{filters:o,update:m}=c,[r,x]=p.useState(!1),[A,M]=p.useState(!1),[N,y]=p.useState([]),[T,q]=p.useState("");p.useEffect(()=>{Il("/inv/sets/list").then(C=>y(C.sets)).catch(()=>{})},[]);const g=C=>m({slots:o.slots.includes(C)?o.slots.filter(X=>X!==C):[...o.slots,C]}),j=(C,X)=>m({ratings:{...o.ratings,[C]:X===""?"":Number(X)}}),R=Object.values(o.ratings).filter(C=>C!=="").length,L=[o.equippedOnly,o.bonded,o.attuned,o.rare].filter(Boolean).length,$=[o.maxLevel,o.minValue,o.minWorkmanship,o.maxBurden].filter(C=>C!=="").length,Y=[["all","All items"],["armor","Armor"],["jewelry","Jewelry"],["weapon","Weapons"],["clothing","Clothing"],["shirt","Shirts"],["pants","Pants"]];return s.jsxs("div",{className:"inv-sidebar",children:[s.jsx(Xy,{search:c}),s.jsxs(ze,{title:"Item type",defaultOpen:!0,badge:o.itemType!=="all"?1:void 0,children:[Y.map(([C,X])=>s.jsxs("label",{className:"inv-fitem",children:[s.jsx("input",{type:"radio",name:"inv-t",checked:o.itemType===C,onChange:()=>m({itemType:C,weaponType:""})})," ",X]},C)),o.itemType==="weapon"&&s.jsx("select",{className:"inv-minisearch",value:o.weaponType,onChange:C=>m({weaponType:C.target.value}),children:Ry.map(C=>s.jsx("option",{value:C.value,children:C.label},C.value))})]}),s.jsxs(ze,{title:"Slots",defaultOpen:!0,badge:o.slots.length||void 0,children:[Dy.map(C=>s.jsxs("label",{className:"inv-fitem",children:[s.jsx("input",{type:"checkbox",checked:o.slots.includes(C),onChange:()=>g(C)})," ",C]},C)),s.jsxs("span",{className:"inv-linky",onClick:()=>x(C=>!C),children:[r?"hide":"show"," armor slots ",r?"▴":"▾"]}),r&&Uy.map(C=>s.jsxs("label",{className:"inv-fitem",children:[s.jsx("input",{type:"checkbox",checked:o.slots.includes(C),onChange:()=>g(C)})," ",C]},C))]}),s.jsx(Vy,{search:c}),s.jsxs(ze,{title:"Ratings",badge:R||void 0,children:[ps.filter(C=>A||C.common).map(C=>s.jsxs("div",{className:"inv-range",children:[s.jsxs("label",{children:[C.label," ≥"]}),s.jsx("input",{type:"number",value:o.ratings[C.param]??"",placeholder:"min",onChange:X=>j(C.param,X.target.value)})]},C.param)),s.jsx("span",{className:"inv-linky",onClick:()=>M(C=>!C),children:A?"common ratings ▴":`all ${ps.length} ratings ▾`})]}),s.jsxs(ze,{title:"Equipment sets",badge:o.itemSet?1:void 0,children:[s.jsx("input",{className:"inv-minisearch",placeholder:"find set…",value:T,onChange:C=>q(C.target.value)}),s.jsxs("label",{className:"inv-fitem",children:[s.jsx("input",{type:"radio",name:"inv-set",checked:o.itemSet==="",onChange:()=>m({itemSet:""})})," Any set"]}),N.filter(C=>C.id.toLowerCase().includes(T.toLowerCase())).map(C=>s.jsxs("label",{className:"inv-fitem",children:[s.jsx("input",{type:"radio",name:"inv-set",checked:o.itemSet===C.id,onChange:()=>m({itemSet:C.id})})," ",C.id," ",s.jsxs("span",{className:"inv-dim",children:["(",C.item_count,")"]})]},C.id))]}),s.jsxs(ze,{title:"Item state",badge:L||void 0,children:[s.jsxs("label",{className:"inv-fitem",children:[s.jsx("input",{type:"checkbox",checked:o.equippedOnly,onChange:C=>m({equippedOnly:C.target.checked})})," Equipped only"]}),s.jsxs("label",{className:"inv-fitem",children:[s.jsx("input",{type:"checkbox",checked:o.bonded,onChange:C=>m({bonded:C.target.checked})})," Bonded"]}),s.jsxs("label",{className:"inv-fitem",children:[s.jsx("input",{type:"checkbox",checked:o.attuned,onChange:C=>m({attuned:C.target.checked})})," Attuned"]}),s.jsxs("label",{className:"inv-fitem",children:[s.jsx("input",{type:"checkbox",checked:o.rare,onChange:C=>m({rare:C.target.checked})})," Rare"]})]}),s.jsxs(ze,{title:"Reqs & value",badge:$||void 0,children:[s.jsxs("div",{className:"inv-range",children:[s.jsx("label",{children:"Wield lvl ≤"}),s.jsx("input",{type:"number",value:o.maxLevel,placeholder:"max",onChange:C=>m({maxLevel:C.target.value===""?"":Number(C.target.value)})})]}),s.jsxs("div",{className:"inv-range",children:[s.jsx("label",{children:"Value ≥"}),s.jsx("input",{type:"number",value:o.minValue,placeholder:"min",onChange:C=>m({minValue:C.target.value===""?"":Number(C.target.value)})})]}),s.jsxs("div",{className:"inv-range",children:[s.jsx("label",{children:"Workmanship ≥"}),s.jsx("input",{type:"number",value:o.minWorkmanship,placeholder:"min",onChange:C=>m({minWorkmanship:C.target.value===""?"":Number(C.target.value)})})]}),s.jsxs("div",{className:"inv-range",children:[s.jsx("label",{children:"Burden ≤"}),s.jsx("input",{type:"number",value:o.maxBurden,placeholder:"max",onChange:C=>m({maxBurden:C.target.value===""?"":Number(C.target.value)})})]})]})]})}function Qy({search:c}){const{filters:o,update:m}=c,r=[];o.text&&r.push({label:`"${o.text}"`,remove:()=>m({text:""})}),o.characters!=="all"&&r.push({label:`${o.characters.length} character${o.characters.length===1?"":"s"}`,remove:()=>m({characters:"all"})}),o.itemType!=="all"&&r.push({label:o.itemType[0].toUpperCase()+o.itemType.slice(1)+(o.weaponType?`: ${o.weaponType}`:""),remove:()=>m({itemType:"all",weaponType:""})});for(const x of o.slots)r.push({label:`Slot: ${x}`,remove:()=>m({slots:o.slots.filter(A=>A!==x)})});for(const x of o.cantrips)r.push({label:x.replace(/^Legendary /,"Leg. "),gold:!0,remove:()=>m({cantrips:o.cantrips.filter(A=>A!==x)})});o.spellContains&&r.push({label:`Spell: ${o.spellContains}`,remove:()=>m({spellContains:""})});for(const[x,A]of Object.entries(o.ratings))if(A!==""){const M=ps.find(N=>N.param===x);r.push({label:`${(M==null?void 0:M.label)??x} ≥ ${A}`,remove:()=>m({ratings:{...o.ratings,[x]:""}})})}return o.itemSet&&r.push({label:`Set: ${o.itemSet}`,remove:()=>m({itemSet:""})}),o.equippedOnly&&r.push({label:"Equipped",remove:()=>m({equippedOnly:!1})}),o.bonded&&r.push({label:"Bonded",remove:()=>m({bonded:!1})}),o.attuned&&r.push({label:"Attuned",remove:()=>m({attuned:!1})}),o.rare&&r.push({label:"Rare",remove:()=>m({rare:!1})}),o.maxLevel!==""&&r.push({label:`Wield ≤ ${o.maxLevel}`,remove:()=>m({maxLevel:""})}),o.minValue!==""&&r.push({label:`Value ≥ ${o.minValue}`,remove:()=>m({minValue:""})}),o.minWorkmanship!==""&&r.push({label:`Work ≥ ${o.minWorkmanship}`,remove:()=>m({minWorkmanship:""})}),o.maxBurden!==""&&r.push({label:`Burden ≤ ${o.maxBurden}`,remove:()=>m({maxBurden:""})}),r.length?s.jsxs("div",{className:"inv-chipsrow",children:[s.jsx("span",{className:"inv-chips-lbl",children:"ACTIVE"}),r.map((x,A)=>s.jsxs("span",{className:`inv-chip${x.gold?" inv-chip-gold":""}`,children:[x.label," ",s.jsx("span",{className:"inv-chip-x",onClick:x.remove,children:"×"})]},A))]}):null}function wy(){try{const c=localStorage.getItem(Id);if(c)return new Set(JSON.parse(c))}catch{}return new Set(bs.filter(c=>c.defaultVisible).map(c=>c.key))}function Zy(c,o){switch(o){case"name":return s.jsxs(s.Fragment,{children:[c.name,c.is_equipped&&s.jsx("span",{className:"inv-equipped",children:" ⚔"})]});case"spell_names":return s.jsx("span",{className:"inv-spells",children:(c.spell_names??[]).map((m,r)=>s.jsxs("span",{children:[r>0&&", ",s.jsx("span",{className:/legendary/i.test(m)?"inv-leg":"",children:m})]},r))});case"value":return c.value!=null?c.value.toLocaleString():"—";case"last_updated":return c.last_updated?c.last_updated.slice(0,16).replace("T"," "):"—";default:{const m=c[o];return m==null||m===-1?"—":String(m)}}}function Ky({search:c,selected:o,onSelect:m}){const{filters:r,update:x,result:A}=c,[M,N]=p.useState(wy),[y,T]=p.useState(!1),q=p.useRef(null),g=p.useMemo(()=>bs.filter(Y=>M.has(Y.key)),[M]),j=(A==null?void 0:A.items)??[];p.useEffect(()=>{localStorage.setItem(Id,JSON.stringify([...M]))},[M]),p.useEffect(()=>{const Y=C=>{var zl,Ul;if(((zl=C.target)==null?void 0:zl.tagName)==="INPUT"||((Ul=C.target)==null?void 0:Ul.tagName)==="SELECT")return;if(C.key==="Escape"){m(null);return}if(C.key!=="ArrowDown"&&C.key!=="ArrowUp")return;C.preventDefault();const X=o?j.indexOf(o):-1,F=C.key==="ArrowDown"?Math.min(X+1,j.length-1):Math.max(X-1,0);j[F]&&m(j[F])};return window.addEventListener("keydown",Y),()=>window.removeEventListener("keydown",Y)},[j,o,m]);const R=Y=>{Y&&(r.sortBy===Y?x({sortDir:r.sortDir==="asc"?"desc":"asc"}):x({sortBy:Y,sortDir:"asc"}))},L=A?Math.max(1,Math.ceil(A.total_count/A.limit)):1,$=Y=>{var C;x({page:Math.min(Math.max(1,Y),L)}),(C=q.current)==null||C.scrollTo(0,0)};return s.jsxs("div",{className:"inv-results",ref:q,children:[s.jsxs("div",{className:"inv-colpicker-anchor",children:[s.jsx("button",{className:"inv-btn inv-colpicker-btn",onClick:()=>T(Y=>!Y),children:"⚙ Columns"}),y&&s.jsx("div",{className:"inv-colpicker",children:bs.map(Y=>s.jsxs("label",{className:"inv-fitem",children:[s.jsx("input",{type:"checkbox",checked:M.has(Y.key),onChange:()=>{const C=new Set(M);C.has(Y.key)?C.delete(Y.key):C.add(Y.key),N(C)}})," ",Y.label]},Y.key))})]}),s.jsxs("table",{children:[s.jsx("thead",{children:s.jsx("tr",{children:g.map(Y=>s.jsx("th",{className:r.sortBy===Y.sortKey?`inv-sorted-${r.sortDir}`:"",onClick:()=>R(Y.sortKey),children:Y.label},Y.key))})}),s.jsxs("tbody",{children:[j.map((Y,C)=>s.jsx("tr",{className:Y===o?"inv-sel":"",onClick:()=>m(Y===o?null:Y),children:g.map(X=>s.jsx("td",{children:Zy(Y,X.key)},X.key))},C)),!j.length&&s.jsx("tr",{children:s.jsx("td",{colSpan:g.length,className:"inv-dim",children:"No items match."})})]})]}),s.jsxs("div",{className:"inv-pager",children:[s.jsx("span",{className:"inv-pg",onClick:()=>$(r.page-1),children:"◀"}),s.jsxs("span",{children:["page ",(A==null?void 0:A.page)??1," / ",L]}),s.jsx("span",{className:"inv-pg",onClick:()=>$(r.page+1),children:"▶"}),s.jsxs("span",{className:"inv-pager-right",children:[(A==null?void 0:A.limit)??200," / page"]})]})]})}function Ot({k:c,v:o}){return s.jsxs("div",{className:"inv-kv",children:[s.jsx("span",{children:c}),s.jsx("b",{children:o??"—"})]})}function ky({item:c,onClose:o}){var m,r;return s.jsxs("div",{className:"inv-detail",children:[s.jsx("span",{className:"inv-closex",onClick:o,children:"×"}),s.jsx("h3",{children:c.name}),s.jsxs("div",{className:"inv-detail-sub",children:[c.slot_name??c.object_class_name??""," · ",c.is_equipped?"⚔ Equipped":"📦 Inventory",c.is_rare&&" · ★ Rare"]}),s.jsx(Ot,{k:"Character",v:c.character_name}),s.jsx(Ot,{k:"Value",v:(m=c.value)==null?void 0:m.toLocaleString()}),s.jsx(Ot,{k:"Burden",v:c.burden}),s.jsx(Ot,{k:"Wield req",v:c.wield_level?`Level ${c.wield_level}`:"—"}),s.jsx(Ot,{k:"Workmanship",v:c.workmanship??"—"}),c.armor_level!=null&&c.armor_level>0&&s.jsx(Ot,{k:"Armor",v:c.armor_level}),c.max_damage!=null&&c.max_damage>0&&s.jsx(Ot,{k:"Max damage",v:c.max_damage}),c.condition_percent!=null&&s.jsx(Ot,{k:"Condition",v:`${c.condition_percent}%`}),c.item_set_name&&s.jsx(Ot,{k:"Set",v:c.item_set_name}),(c.is_bonded||c.is_attuned)&&s.jsx(Ot,{k:"Binding",v:[c.is_bonded&&"Bonded",c.is_attuned&&"Attuned"].filter(Boolean).join(", ")}),s.jsx("hr",{}),s.jsxs("div",{className:"inv-sphead",children:["Spells (",((r=c.spell_names)==null?void 0:r.length)??0,")"]}),(c.spell_names??[]).map((x,A)=>s.jsx("div",{className:`inv-sp${/legendary/i.test(x)?" inv-leg":""}`,children:x},A)),s.jsx("div",{className:"inv-hint",children:"↑/↓ next item · Esc close"})]})}function Jy(){const c=Yy(),[o,m]=p.useState(null);return s.jsxs("div",{className:"inv-page",children:[s.jsxs("div",{className:"inv-topbar",children:[s.jsx("span",{className:"inv-title",children:"⚔ Inventory Search"}),s.jsx("input",{className:"inv-searchbox",placeholder:"Search name or material…",value:c.filters.text,onChange:r=>c.update({text:r.target.value})}),s.jsx("button",{className:"inv-btn",onClick:()=>{c.reset(),m(null)},children:"Reset"}),s.jsx("span",{className:"inv-count",children:c.error?s.jsx("span",{className:"inv-error",children:c.error}):c.result?s.jsxs(s.Fragment,{children:[s.jsx("b",{children:c.result.total_count.toLocaleString()})," items",c.queryMs!=null&&s.jsxs(s.Fragment,{children:[" · ",c.queryMs," ms"]}),c.loading&&" · …"]}):"loading…"})]}),s.jsx(Qy,{search:c}),s.jsxs("div",{className:"inv-main",children:[s.jsx(Gy,{search:c}),s.jsx(Ky,{search:c,selected:o,onSelect:m}),o&&s.jsx(ky,{item:o,onClose:()=>m(null)})]})]})}function Wy(){const c=new URLSearchParams(window.location.search).get("view");return s.jsx(Y0,{children:c==="dashboard"?s.jsx(Cy,{}):c==="inventory"?s.jsx(Jy,{}):s.jsx($y,{})})}function $y(){const c=Fd();return s.jsx(Ty,{data:c})}C0.createRoot(document.getElementById("root")).render(s.jsx(p.StrictMode,{children:s.jsx(Wy,{})}));"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").catch(()=>{});export{Zd as D,Il as a,lv as b,Iy as c,Py as d,P0 as e,ev as f,av as g,nv as h,s as j,tv as l,p as r,An as u}; diff --git a/static/index.html b/static/index.html index 9832b483..c14350ad 100644 --- a/static/index.html +++ b/static/index.html @@ -8,9 +8,9 @@ - + - +