diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index 8f571bbd..d93aff8f 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -10,5 +10,5 @@ createRoot(document.getElementById('root')!).render( // Register service worker for asset caching if ('serviceWorker' in navigator) { - navigator.serviceWorker.register('/v2/sw.js').catch(() => {}); + navigator.serviceWorker.register('/sw.js').catch(() => {}); } diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index ff2d7fbf..2c8a53e0 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -3,9 +3,9 @@ import react from '@vitejs/plugin-react' export default defineConfig({ plugins: [react()], - base: '/v2/', + base: '/', build: { - outDir: '../static/v2', + outDir: '../static/v2', // still build to v2/ first, then we copy emptyOutDir: true, chunkSizeWarningLimit: 300, rollupOptions: { diff --git a/static/v2/assets/CharacterWindow-C26CdTBY.js b/static/assets/CharacterWindow-BNz9pNjP.js similarity index 99% rename from static/v2/assets/CharacterWindow-C26CdTBY.js rename to static/assets/CharacterWindow-BNz9pNjP.js index 077d9add..7097ce50 100644 --- a/static/v2/assets/CharacterWindow-C26CdTBY.js +++ b/static/assets/CharacterWindow-BNz9pNjP.js @@ -1 +1 @@ -import{r as f,a as Y,j as e,D as X}from"./index-BfJ04YaG.js";import"./react-DlyoauG8.js";const B={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"},F={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"},U={354:"Melee",355:"Ranged",362:"Summoning"},J={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"},D={181:"Chess Rank",192:"Fishing Skill",199:"Total Augmentations",322:"Aetheria Slots",390:"Enlightenment"};function K(c){return c>=1001?"Master":c>=301?"Lord":c>=151?"Knight":c>=31?"Adept":"Initiate"}const d="#af7a30",u="#000022",Z=({id:c,charName:g,zIndex:L,vitals:s})=>{var _,N;const[n,O]=f.useState(null),[j,H]=f.useState(0),[m,P]=f.useState(0);f.useEffect(()=>{Y(`/character-stats/${encodeURIComponent(g)}`).then(O).catch(()=>{})},[g]);const a=t=>t!=null?Number(t).toLocaleString():"—",o=(n==null?void 0:n.stats_data)||n||{},C=o.attributes||{},A=o.skills||{},V=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])=>B[parseInt(t)]&&Number(l)>0).map(([t,l])=>({name:B[parseInt(t)],uses:Number(l)})),w=Object.entries(h).filter(([t,l])=>F[parseInt(t)]&&Number(l)>0).map(([t,l])=>({name:F[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);D[i]&&x.push({name:D[i],value:l})});const y=[];Object.entries(h).forEach(([t,l])=>{const i=parseInt(t);U[i]&&y.push({name:U[i],value:J[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:K(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"},G={padding:"2px 6px",color:"#ccc"};return e.jsx(X,{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:()=>H(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:G,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=V[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:()=>P(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{Z as CharacterWindow}; +import{r as f,a as Y,j as e,D as X}from"./index-DzGubmvT.js";import"./react-DlyoauG8.js";const B={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"},F={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"},U={354:"Melee",355:"Ranged",362:"Summoning"},J={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"},D={181:"Chess Rank",192:"Fishing Skill",199:"Total Augmentations",322:"Aetheria Slots",390:"Enlightenment"};function K(c){return c>=1001?"Master":c>=301?"Lord":c>=151?"Knight":c>=31?"Adept":"Initiate"}const d="#af7a30",u="#000022",Z=({id:c,charName:g,zIndex:L,vitals:s})=>{var _,N;const[n,O]=f.useState(null),[j,H]=f.useState(0),[m,P]=f.useState(0);f.useEffect(()=>{Y(`/character-stats/${encodeURIComponent(g)}`).then(O).catch(()=>{})},[g]);const a=t=>t!=null?Number(t).toLocaleString():"—",o=(n==null?void 0:n.stats_data)||n||{},C=o.attributes||{},A=o.skills||{},V=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])=>B[parseInt(t)]&&Number(l)>0).map(([t,l])=>({name:B[parseInt(t)],uses:Number(l)})),w=Object.entries(h).filter(([t,l])=>F[parseInt(t)]&&Number(l)>0).map(([t,l])=>({name:F[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);D[i]&&x.push({name:D[i],value:l})});const y=[];Object.entries(h).forEach(([t,l])=>{const i=parseInt(t);U[i]&&y.push({name:U[i],value:J[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:K(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"},G={padding:"2px 6px",color:"#ccc"};return e.jsx(X,{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:()=>H(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:G,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=V[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:()=>P(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{Z as CharacterWindow}; diff --git a/static/assets/CharacterWindow-CKLgR9TL.js b/static/assets/CharacterWindow-CKLgR9TL.js new file mode 100644 index 00000000..750e7338 --- /dev/null +++ b/static/assets/CharacterWindow-CKLgR9TL.js @@ -0,0 +1 @@ +import{r as f,a as Y,j as e,D as X}from"./index-DnlpBAAU.js";import"./react-DlyoauG8.js";const B={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"},F={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"},U={354:"Melee",355:"Ranged",362:"Summoning"},J={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"},D={181:"Chess Rank",192:"Fishing Skill",199:"Total Augmentations",322:"Aetheria Slots",390:"Enlightenment"};function K(c){return c>=1001?"Master":c>=301?"Lord":c>=151?"Knight":c>=31?"Adept":"Initiate"}const d="#af7a30",u="#000022",Z=({id:c,charName:g,zIndex:L,vitals:s})=>{var _,N;const[n,O]=f.useState(null),[j,H]=f.useState(0),[m,P]=f.useState(0);f.useEffect(()=>{Y(`/character-stats/${encodeURIComponent(g)}`).then(O).catch(()=>{})},[g]);const a=t=>t!=null?Number(t).toLocaleString():"—",o=(n==null?void 0:n.stats_data)||n||{},C=o.attributes||{},A=o.skills||{},V=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])=>B[parseInt(t)]&&Number(l)>0).map(([t,l])=>({name:B[parseInt(t)],uses:Number(l)})),w=Object.entries(h).filter(([t,l])=>F[parseInt(t)]&&Number(l)>0).map(([t,l])=>({name:F[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);D[i]&&x.push({name:D[i],value:l})});const y=[];Object.entries(h).forEach(([t,l])=>{const i=parseInt(t);U[i]&&y.push({name:U[i],value:J[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:K(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"},G={padding:"2px 6px",color:"#ccc"};return e.jsx(X,{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:()=>H(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:G,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=V[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:()=>P(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{Z as CharacterWindow}; diff --git a/static/v2/assets/CombatPickerWindow-BOlAFaCG.js b/static/assets/CombatPickerWindow-BO4qfgdX.js similarity index 92% rename from static/v2/assets/CombatPickerWindow-BOlAFaCG.js rename to static/assets/CombatPickerWindow-BO4qfgdX.js index 1afc1b4f..134d3dee 100644 --- a/static/v2/assets/CombatPickerWindow-BOlAFaCG.js +++ b/static/assets/CombatPickerWindow-BO4qfgdX.js @@ -1 +1 @@ -import{u as c,j as r,D as d}from"./index-BfJ04YaG.js";import"./react-DlyoauG8.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-DzGubmvT.js";import"./react-DlyoauG8.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/CombatPickerWindow-CLkjJTHh.js b/static/assets/CombatPickerWindow-CLkjJTHh.js new file mode 100644 index 00000000..e7a0e581 --- /dev/null +++ b/static/assets/CombatPickerWindow-CLkjJTHh.js @@ -0,0 +1 @@ +import{u as c,j as r,D as d}from"./index-DnlpBAAU.js";import"./react-DlyoauG8.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/v2/assets/CombatStatsWindow-Ct0adxan.js b/static/assets/CombatStatsWindow-DSQwtgMl.js similarity index 99% rename from static/v2/assets/CombatStatsWindow-Ct0adxan.js rename to static/assets/CombatStatsWindow-DSQwtgMl.js index d9e6b99d..2631a091 100644 --- a/static/v2/assets/CombatStatsWindow-Ct0adxan.js +++ b/static/assets/CombatStatsWindow-DSQwtgMl.js @@ -1 +1 @@ -import{r as A,a as B,j as t,D as L}from"./index-BfJ04YaG.js";import"./react-DlyoauG8.js";const w=["Typeless","Slash","Pierce","Bludgeon","Fire","Cold","Acid","Electric"];function f(n,a,x){var c,h,u,k;return(((h=(c=n==null?void 0:n[a])==null?void 0:c[x])==null?void 0:h.total_normal_damage)??0)+(((k=(u=n==null?void 0:n[a])==null?void 0:u[x])==null?void 0:k.total_crit_damage)??0)}function G(n){let a={attacks:0,failed:0,crits:0,normalDmg:0,maxNormal:0,critDmg:0,maxCrit:0};if(!n)return a;for(const x of Object.values(n))for(const c of Object.values(x))a.attacks+=c.total_attacks??0,a.failed+=c.failed_attacks??0,a.crits+=c.crits??0,a.normalDmg+=c.total_normal_damage??0,a.maxNormal=Math.max(a.maxNormal,c.max_normal_damage??0),a.critDmg+=c.total_crit_damage??0,a.maxCrit=Math.max(a.maxCrit,c.max_crit_damage??0);return a}function F(n,a){let x={attacks:0,failed:0};const c=n==null?void 0:n[a];if(!c)return x;for(const h of Object.values(c))x.attacks+=h.total_attacks??0,x.failed+=h.failed_attacks??0;return x}const Y=({id:n,charName:a,zIndex:x})=>{const[c,h]=A.useState(null),[u,k]=A.useState("session"),[p,O]=A.useState(null);A.useEffect(()=>{B(`/combat-stats/${encodeURIComponent(a)}`).then(h).catch(()=>{});const e=setInterval(()=>{B(`/combat-stats/${encodeURIComponent(a)}`).then(h).catch(()=>{})},1e4);return()=>clearInterval(e)},[a]);const m=c==null?void 0:c[u],_=(m==null?void 0:m.monsters)??{},S=Object.keys(_).filter(e=>e!=="__cloak_surges__").sort(),r=A.useMemo(()=>{let e={},l={},v=0,$=0;const T=p?[_[p]].filter(Boolean):S.map(j=>_[j]);for(const j of T)if(j){for(const[g,D]of Object.entries(j.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(j.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+=j.aetheria_surges??0,$+=j.cloak_surges??0}return _.__cloak_surges__&&!p&&($+=_.__cloak_surges__.cloak_surges??0),{offense:e,defense:l,aeth:v,cloak:$}},[_,S,p]),o=G(r.offense),M=F(r.defense,"MeleeMissile"),b=F(r.defense,"Magic");o.attacks>0&&((o.attacks-o.failed)/o.attacks*100).toFixed(0);const N=M.attacks>0?(M.failed/M.attacks*100).toFixed(0):"0",W=b.attacks>0?(b.failed/b.attacks*100).toFixed(0):"0",C=o.attacks-o.failed,R=C-o.crits,z=R>0?Math.round(o.normalDmg/R):0;o.crits>0&&Math.round(o.critDmg/o.crits);const I=C>0?(o.crits/C*100).toFixed(1):"0",s=e=>e===0?"":e.toLocaleString();return t.jsxs(L,{id:n,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"},children:[t.jsx("button",{className:`ml-stats-range-btn ${u==="session"?"active":""}`,onClick:()=>k("session"),children:"Session"}),t.jsx("button",{className:`ml-stats-range-btn ${u==="lifetime"?"active":""}`,onClick:()=>k("lifetime"),children:"Lifetime"})]}),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:p===null?"#2a3a4a":"",borderBottom:"1px solid #222",color:"#ddd"},onClick:()=>O(null),children:[t.jsx("span",{style:{width:14,color:"#888"},children:p===null?"*":""}),t.jsx("span",{style:{flex:1},children:"All"}),t.jsx("span",{style:{width:40,textAlign:"right"},children:s((m==null?void 0:m.total_kills)??0)}),t.jsx("span",{style:{width:55,textAlign:"right"},children:s((m==null?void 0:m.total_damage_given)??0)})]}),S.map(e=>{const l=_[e];return t.jsxs("div",{style:{display:"flex",padding:"2px 6px",cursor:"pointer",background:p===e?"#2a3a4a":"",borderBottom:"1px solid #1a1a1a",color:"#ccc"},onClick:()=>O(e),children:[t.jsx("span",{style:{width:14,color:"#888"},children:p===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",M.attacks>0?`${s(M.attacks)} (${N}%)`:""],["Resists",b.attacks>0?`${s(b.attacks)} (${W}%)`:""],["A.Surges",r.aeth>0?`${s(r.aeth)}`:""],["C.Surges",r.cloak>0?`${s(r.cloak)}`:""],["",""],["",""],["Av/Mx",z>0?`${s(z)} / ${s(o.maxNormal)}`:""],["Crits",o.crits>0?`${s(o.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(f(r.offense,"MeleeMissile",e))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(f(r.offense,"Magic",e))}),t.jsx("td",{}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(f(r.defense,"MeleeMissile",e))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(f(r.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+f(r.offense,"MeleeMissile",l),0))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+f(r.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+f(r.defense,"MeleeMissile",l),0))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+f(r.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(o.normalDmg+o.critDmg)})]})]})]})})]})]})};export{Y as CombatStatsWindow}; +import{r as A,a as B,j as t,D as L}from"./index-DzGubmvT.js";import"./react-DlyoauG8.js";const w=["Typeless","Slash","Pierce","Bludgeon","Fire","Cold","Acid","Electric"];function f(n,a,x){var c,h,u,k;return(((h=(c=n==null?void 0:n[a])==null?void 0:c[x])==null?void 0:h.total_normal_damage)??0)+(((k=(u=n==null?void 0:n[a])==null?void 0:u[x])==null?void 0:k.total_crit_damage)??0)}function G(n){let a={attacks:0,failed:0,crits:0,normalDmg:0,maxNormal:0,critDmg:0,maxCrit:0};if(!n)return a;for(const x of Object.values(n))for(const c of Object.values(x))a.attacks+=c.total_attacks??0,a.failed+=c.failed_attacks??0,a.crits+=c.crits??0,a.normalDmg+=c.total_normal_damage??0,a.maxNormal=Math.max(a.maxNormal,c.max_normal_damage??0),a.critDmg+=c.total_crit_damage??0,a.maxCrit=Math.max(a.maxCrit,c.max_crit_damage??0);return a}function F(n,a){let x={attacks:0,failed:0};const c=n==null?void 0:n[a];if(!c)return x;for(const h of Object.values(c))x.attacks+=h.total_attacks??0,x.failed+=h.failed_attacks??0;return x}const Y=({id:n,charName:a,zIndex:x})=>{const[c,h]=A.useState(null),[u,k]=A.useState("session"),[p,O]=A.useState(null);A.useEffect(()=>{B(`/combat-stats/${encodeURIComponent(a)}`).then(h).catch(()=>{});const e=setInterval(()=>{B(`/combat-stats/${encodeURIComponent(a)}`).then(h).catch(()=>{})},1e4);return()=>clearInterval(e)},[a]);const m=c==null?void 0:c[u],_=(m==null?void 0:m.monsters)??{},S=Object.keys(_).filter(e=>e!=="__cloak_surges__").sort(),r=A.useMemo(()=>{let e={},l={},v=0,$=0;const T=p?[_[p]].filter(Boolean):S.map(j=>_[j]);for(const j of T)if(j){for(const[g,D]of Object.entries(j.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(j.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+=j.aetheria_surges??0,$+=j.cloak_surges??0}return _.__cloak_surges__&&!p&&($+=_.__cloak_surges__.cloak_surges??0),{offense:e,defense:l,aeth:v,cloak:$}},[_,S,p]),o=G(r.offense),M=F(r.defense,"MeleeMissile"),b=F(r.defense,"Magic");o.attacks>0&&((o.attacks-o.failed)/o.attacks*100).toFixed(0);const N=M.attacks>0?(M.failed/M.attacks*100).toFixed(0):"0",W=b.attacks>0?(b.failed/b.attacks*100).toFixed(0):"0",C=o.attacks-o.failed,R=C-o.crits,z=R>0?Math.round(o.normalDmg/R):0;o.crits>0&&Math.round(o.critDmg/o.crits);const I=C>0?(o.crits/C*100).toFixed(1):"0",s=e=>e===0?"":e.toLocaleString();return t.jsxs(L,{id:n,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"},children:[t.jsx("button",{className:`ml-stats-range-btn ${u==="session"?"active":""}`,onClick:()=>k("session"),children:"Session"}),t.jsx("button",{className:`ml-stats-range-btn ${u==="lifetime"?"active":""}`,onClick:()=>k("lifetime"),children:"Lifetime"})]}),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:p===null?"#2a3a4a":"",borderBottom:"1px solid #222",color:"#ddd"},onClick:()=>O(null),children:[t.jsx("span",{style:{width:14,color:"#888"},children:p===null?"*":""}),t.jsx("span",{style:{flex:1},children:"All"}),t.jsx("span",{style:{width:40,textAlign:"right"},children:s((m==null?void 0:m.total_kills)??0)}),t.jsx("span",{style:{width:55,textAlign:"right"},children:s((m==null?void 0:m.total_damage_given)??0)})]}),S.map(e=>{const l=_[e];return t.jsxs("div",{style:{display:"flex",padding:"2px 6px",cursor:"pointer",background:p===e?"#2a3a4a":"",borderBottom:"1px solid #1a1a1a",color:"#ccc"},onClick:()=>O(e),children:[t.jsx("span",{style:{width:14,color:"#888"},children:p===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",M.attacks>0?`${s(M.attacks)} (${N}%)`:""],["Resists",b.attacks>0?`${s(b.attacks)} (${W}%)`:""],["A.Surges",r.aeth>0?`${s(r.aeth)}`:""],["C.Surges",r.cloak>0?`${s(r.cloak)}`:""],["",""],["",""],["Av/Mx",z>0?`${s(z)} / ${s(o.maxNormal)}`:""],["Crits",o.crits>0?`${s(o.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(f(r.offense,"MeleeMissile",e))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(f(r.offense,"Magic",e))}),t.jsx("td",{}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(f(r.defense,"MeleeMissile",e))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(f(r.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+f(r.offense,"MeleeMissile",l),0))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+f(r.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+f(r.defense,"MeleeMissile",l),0))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+f(r.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(o.normalDmg+o.critDmg)})]})]})]})})]})]})};export{Y as CombatStatsWindow}; diff --git a/static/assets/CombatStatsWindow-LemLw4OR.js b/static/assets/CombatStatsWindow-LemLw4OR.js new file mode 100644 index 00000000..9a68e227 --- /dev/null +++ b/static/assets/CombatStatsWindow-LemLw4OR.js @@ -0,0 +1 @@ +import{r as A,a as B,j as t,D as L}from"./index-DnlpBAAU.js";import"./react-DlyoauG8.js";const w=["Typeless","Slash","Pierce","Bludgeon","Fire","Cold","Acid","Electric"];function f(n,a,x){var c,h,u,k;return(((h=(c=n==null?void 0:n[a])==null?void 0:c[x])==null?void 0:h.total_normal_damage)??0)+(((k=(u=n==null?void 0:n[a])==null?void 0:u[x])==null?void 0:k.total_crit_damage)??0)}function G(n){let a={attacks:0,failed:0,crits:0,normalDmg:0,maxNormal:0,critDmg:0,maxCrit:0};if(!n)return a;for(const x of Object.values(n))for(const c of Object.values(x))a.attacks+=c.total_attacks??0,a.failed+=c.failed_attacks??0,a.crits+=c.crits??0,a.normalDmg+=c.total_normal_damage??0,a.maxNormal=Math.max(a.maxNormal,c.max_normal_damage??0),a.critDmg+=c.total_crit_damage??0,a.maxCrit=Math.max(a.maxCrit,c.max_crit_damage??0);return a}function F(n,a){let x={attacks:0,failed:0};const c=n==null?void 0:n[a];if(!c)return x;for(const h of Object.values(c))x.attacks+=h.total_attacks??0,x.failed+=h.failed_attacks??0;return x}const Y=({id:n,charName:a,zIndex:x})=>{const[c,h]=A.useState(null),[u,k]=A.useState("session"),[p,O]=A.useState(null);A.useEffect(()=>{B(`/combat-stats/${encodeURIComponent(a)}`).then(h).catch(()=>{});const e=setInterval(()=>{B(`/combat-stats/${encodeURIComponent(a)}`).then(h).catch(()=>{})},1e4);return()=>clearInterval(e)},[a]);const m=c==null?void 0:c[u],_=(m==null?void 0:m.monsters)??{},S=Object.keys(_).filter(e=>e!=="__cloak_surges__").sort(),r=A.useMemo(()=>{let e={},l={},v=0,$=0;const T=p?[_[p]].filter(Boolean):S.map(j=>_[j]);for(const j of T)if(j){for(const[g,D]of Object.entries(j.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(j.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+=j.aetheria_surges??0,$+=j.cloak_surges??0}return _.__cloak_surges__&&!p&&($+=_.__cloak_surges__.cloak_surges??0),{offense:e,defense:l,aeth:v,cloak:$}},[_,S,p]),o=G(r.offense),M=F(r.defense,"MeleeMissile"),b=F(r.defense,"Magic");o.attacks>0&&((o.attacks-o.failed)/o.attacks*100).toFixed(0);const N=M.attacks>0?(M.failed/M.attacks*100).toFixed(0):"0",W=b.attacks>0?(b.failed/b.attacks*100).toFixed(0):"0",C=o.attacks-o.failed,R=C-o.crits,z=R>0?Math.round(o.normalDmg/R):0;o.crits>0&&Math.round(o.critDmg/o.crits);const I=C>0?(o.crits/C*100).toFixed(1):"0",s=e=>e===0?"":e.toLocaleString();return t.jsxs(L,{id:n,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"},children:[t.jsx("button",{className:`ml-stats-range-btn ${u==="session"?"active":""}`,onClick:()=>k("session"),children:"Session"}),t.jsx("button",{className:`ml-stats-range-btn ${u==="lifetime"?"active":""}`,onClick:()=>k("lifetime"),children:"Lifetime"})]}),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:p===null?"#2a3a4a":"",borderBottom:"1px solid #222",color:"#ddd"},onClick:()=>O(null),children:[t.jsx("span",{style:{width:14,color:"#888"},children:p===null?"*":""}),t.jsx("span",{style:{flex:1},children:"All"}),t.jsx("span",{style:{width:40,textAlign:"right"},children:s((m==null?void 0:m.total_kills)??0)}),t.jsx("span",{style:{width:55,textAlign:"right"},children:s((m==null?void 0:m.total_damage_given)??0)})]}),S.map(e=>{const l=_[e];return t.jsxs("div",{style:{display:"flex",padding:"2px 6px",cursor:"pointer",background:p===e?"#2a3a4a":"",borderBottom:"1px solid #1a1a1a",color:"#ccc"},onClick:()=>O(e),children:[t.jsx("span",{style:{width:14,color:"#888"},children:p===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",M.attacks>0?`${s(M.attacks)} (${N}%)`:""],["Resists",b.attacks>0?`${s(b.attacks)} (${W}%)`:""],["A.Surges",r.aeth>0?`${s(r.aeth)}`:""],["C.Surges",r.cloak>0?`${s(r.cloak)}`:""],["",""],["",""],["Av/Mx",z>0?`${s(z)} / ${s(o.maxNormal)}`:""],["Crits",o.crits>0?`${s(o.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(f(r.offense,"MeleeMissile",e))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(f(r.offense,"Magic",e))}),t.jsx("td",{}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(f(r.defense,"MeleeMissile",e))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(f(r.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+f(r.offense,"MeleeMissile",l),0))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+f(r.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+f(r.defense,"MeleeMissile",l),0))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+f(r.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(o.normalDmg+o.critDmg)})]})]})]})})]})]})};export{Y as CombatStatsWindow}; diff --git a/static/v2/assets/DashboardView-ReNIceoO.js b/static/assets/DashboardView-BLrx64Ns.js similarity index 99% rename from static/v2/assets/DashboardView-ReNIceoO.js rename to static/assets/DashboardView-BLrx64Ns.js index abc2ab72..a3946f9b 100644 --- a/static/v2/assets/DashboardView-ReNIceoO.js +++ b/static/assets/DashboardView-BLrx64Ns.js @@ -1,4 +1,4 @@ -import{j as E,R as A,r as N,a as eO}from"./index-BfJ04YaG.js";import{c as hi,g as ue}from"./react-DlyoauG8.js";const tO=({children:e})=>E.jsxs("div",{className:"dashboard",children:[E.jsx("header",{className:"dashboard-header",children:E.jsx("h1",{className:"dashboard-title",children:"Mosswart Overlord"})}),E.jsx("main",{className:"dashboard-main",children:e})]}),rO=({activeChars:e,totalKills:t,totalRares:r,serverHealth:n})=>{var o;const i=((o=n==null?void 0:n.status)==null?void 0:o.toLowerCase())??"unknown",a=i==="online"||i==="up";return E.jsxs("div",{className:"global-stats",children:[E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:"global-value",children:e}),E.jsx("span",{className:"global-label",children:"Active Characters"})]}),E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:"global-value",children:t.toLocaleString()}),E.jsx("span",{className:"global-label",children:"Total Kills"})]}),E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:"global-value",children:r}),E.jsx("span",{className:"global-label",children:"Total Rares"})]}),E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:`server-dot ${a?"online":"offline"}`}),E.jsxs("span",{className:"global-value",children:[(n==null?void 0:n.latency_ms)??"--","ms"]}),E.jsx("span",{className:"global-label",children:"Coldeve"})]})]})},Pi=A.memo(({label:e,current:t,max:r,color:n,bgColor:i})=>{const a=r>0?Math.min(100,Math.max(0,t/r*100)):0;return E.jsxs("div",{className:"vital-bar",children:[E.jsx("span",{className:"vital-label",children:e}),E.jsx("div",{className:"vital-track",style:{backgroundColor:i},children:E.jsx("div",{className:"vital-fill",style:{width:`${a}%`,background:n}})}),E.jsxs("span",{className:"vital-text",children:[t,"/",r]})]})});Pi.displayName="VitalBar";const nO=e=>{const t=(e||"idle").toLowerCase();return t==="combat"||t==="hunt"?{label:t==="combat"?"Combat":"Hunt",cls:"badge-combat"}:t==="nav"||t==="navigation"?{label:"Nav",cls:"badge-nav"}:t==="default"||t==="idle"||t===""?{label:"Idle",cls:"badge-idle"}:{label:e,cls:"badge-nav"}},Nb=A.memo(({character:e})=>{var u,s,c,f,l,h;const[t,r]=N.useState(!1),{telemetry:n,vitals:i,combat:a}=e,o=nO((n==null?void 0:n.vt_state)??"");return E.jsxs("div",{className:"char-card",onClick:()=>r(!t),children:[E.jsxs("div",{className:"char-header",children:[E.jsx("span",{className:"char-name",children:e.name}),E.jsx("span",{className:`char-badge ${o.cls}`,children:o.label})]}),i?E.jsxs("div",{className:"char-vitals",children:[E.jsx(Pi,{label:"HP",current:i.health_current,max:i.health_max,color:"linear-gradient(90deg, #ff4444, #ff6666)",bgColor:"#330000"}),E.jsx(Pi,{label:"ST",current:i.stamina_current,max:i.stamina_max,color:"linear-gradient(90deg, #ffaa00, #ffcc44)",bgColor:"#331a00"}),E.jsx(Pi,{label:"MN",current:i.mana_current,max:i.mana_max,color:"linear-gradient(90deg, #4488ff, #66aaff)",bgColor:"#001433"})]}):E.jsx("div",{className:"char-vitals-placeholder",children:"Awaiting vitals..."}),E.jsxs("div",{className:"char-stats-row",children:[E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:(n==null?void 0:n.kills_per_hour)??"--"}),E.jsx("span",{className:"stat-label",children:"kills/hr"})]}),E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:((u=n==null?void 0:n.kills)==null?void 0:u.toLocaleString())??"--"}),E.jsx("span",{className:"stat-label",children:"kills"})]}),E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:(n==null?void 0:n.deaths)??"0"}),E.jsx("span",{className:"stat-label",children:"deaths"})]}),E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:((s=n==null?void 0:n.onlinetime)==null?void 0:s.replace(/^00\./,""))??"--"}),E.jsx("span",{className:"stat-label",children:"uptime"})]})]}),n&&E.jsxs("div",{className:"char-location",children:[(c=n.ns)==null?void 0:c.toFixed(1),"N, ",(f=n.ew)==null?void 0:f.toFixed(1),"E"]}),t&&E.jsxs("div",{className:"char-expanded",children:[i!=null&&i.vitae?E.jsxs("div",{className:"vitae-warn",children:["Vitae: ",i.vitae,"%"]}):null,E.jsxs("div",{className:"expanded-row",children:[E.jsxs("span",{children:["Prismatics: ",(n==null?void 0:n.prismatic_taper_count)??"--"]}),E.jsxs("span",{children:["Total Deaths: ",(n==null?void 0:n.total_deaths)??"--"]})]}),(a==null?void 0:a.session)&&E.jsxs("div",{className:"expanded-row",children:[E.jsxs("span",{children:["Session Dmg: ",(l=a.session.total_damage_given)==null?void 0:l.toLocaleString()]}),E.jsxs("span",{children:["Session Kills: ",a.session.total_kills]})]}),E.jsxs("div",{className:"expanded-row",children:[E.jsxs("span",{children:["RAM: ",n!=null&&n.mem_mb?(n.mem_mb/1048576).toFixed(0)+" MB":"--"]}),E.jsxs("span",{children:["CPU: ",((h=n==null?void 0:n.cpu_pct)==null?void 0:h.toFixed(1))??"--","%"]})]})]})]})});Nb.displayName="CharacterCard";const iO=({characters:e})=>{const t=N.useMemo(()=>Array.from(e.values()).sort((r,n)=>r.name.localeCompare(n.name)),[e]);return t.length===0?E.jsx("div",{className:"grid-empty",children:"No active characters"}):E.jsx("div",{className:"char-grid",children:t.map(r=>E.jsx(Nb,{character:r},r.name))})},aO=({tabs:e})=>{var n,i;const[t,r]=N.useState(((n=e[0])==null?void 0:n.id)??"");return E.jsxs("div",{className:"tab-container",children:[E.jsx("div",{className:"tab-bar",children:e.map(a=>E.jsx("button",{className:`tab-btn ${t===a.id?"active":""}`,onClick:()=>r(a.id),children:a.label},a.id))}),E.jsx("div",{className:"tab-content",children:(i=e.find(a=>a.id===t))==null?void 0:i.content})]})};function Rb(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(t=0;t-1}return Wo=t,Wo}var Ho,wd;function OO(){if(wd)return Ho;wd=1;var e=Ea();function t(r,n){var i=this.__data__,a=e(i,r);return a<0?(++this.size,i.push([r,n])):i[a][1]=n,this}return Ho=t,Ho}var Ko,Od;function Ma(){if(Od)return Ko;Od=1;var e=gO(),t=bO(),r=xO(),n=wO(),i=OO();function a(o){var u=-1,s=o==null?0:o.length;for(this.clear();++uE.jsxs("div",{className:"dashboard",children:[E.jsx("header",{className:"dashboard-header",children:E.jsx("h1",{className:"dashboard-title",children:"Mosswart Overlord"})}),E.jsx("main",{className:"dashboard-main",children:e})]}),rO=({activeChars:e,totalKills:t,totalRares:r,serverHealth:n})=>{var o;const i=((o=n==null?void 0:n.status)==null?void 0:o.toLowerCase())??"unknown",a=i==="online"||i==="up";return E.jsxs("div",{className:"global-stats",children:[E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:"global-value",children:e}),E.jsx("span",{className:"global-label",children:"Active Characters"})]}),E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:"global-value",children:t.toLocaleString()}),E.jsx("span",{className:"global-label",children:"Total Kills"})]}),E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:"global-value",children:r}),E.jsx("span",{className:"global-label",children:"Total Rares"})]}),E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:`server-dot ${a?"online":"offline"}`}),E.jsxs("span",{className:"global-value",children:[(n==null?void 0:n.latency_ms)??"--","ms"]}),E.jsx("span",{className:"global-label",children:"Coldeve"})]})]})},Pi=A.memo(({label:e,current:t,max:r,color:n,bgColor:i})=>{const a=r>0?Math.min(100,Math.max(0,t/r*100)):0;return E.jsxs("div",{className:"vital-bar",children:[E.jsx("span",{className:"vital-label",children:e}),E.jsx("div",{className:"vital-track",style:{backgroundColor:i},children:E.jsx("div",{className:"vital-fill",style:{width:`${a}%`,background:n}})}),E.jsxs("span",{className:"vital-text",children:[t,"/",r]})]})});Pi.displayName="VitalBar";const nO=e=>{const t=(e||"idle").toLowerCase();return t==="combat"||t==="hunt"?{label:t==="combat"?"Combat":"Hunt",cls:"badge-combat"}:t==="nav"||t==="navigation"?{label:"Nav",cls:"badge-nav"}:t==="default"||t==="idle"||t===""?{label:"Idle",cls:"badge-idle"}:{label:e,cls:"badge-nav"}},Nb=A.memo(({character:e})=>{var u,s,c,f,l,h;const[t,r]=N.useState(!1),{telemetry:n,vitals:i,combat:a}=e,o=nO((n==null?void 0:n.vt_state)??"");return E.jsxs("div",{className:"char-card",onClick:()=>r(!t),children:[E.jsxs("div",{className:"char-header",children:[E.jsx("span",{className:"char-name",children:e.name}),E.jsx("span",{className:`char-badge ${o.cls}`,children:o.label})]}),i?E.jsxs("div",{className:"char-vitals",children:[E.jsx(Pi,{label:"HP",current:i.health_current,max:i.health_max,color:"linear-gradient(90deg, #ff4444, #ff6666)",bgColor:"#330000"}),E.jsx(Pi,{label:"ST",current:i.stamina_current,max:i.stamina_max,color:"linear-gradient(90deg, #ffaa00, #ffcc44)",bgColor:"#331a00"}),E.jsx(Pi,{label:"MN",current:i.mana_current,max:i.mana_max,color:"linear-gradient(90deg, #4488ff, #66aaff)",bgColor:"#001433"})]}):E.jsx("div",{className:"char-vitals-placeholder",children:"Awaiting vitals..."}),E.jsxs("div",{className:"char-stats-row",children:[E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:(n==null?void 0:n.kills_per_hour)??"--"}),E.jsx("span",{className:"stat-label",children:"kills/hr"})]}),E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:((u=n==null?void 0:n.kills)==null?void 0:u.toLocaleString())??"--"}),E.jsx("span",{className:"stat-label",children:"kills"})]}),E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:(n==null?void 0:n.deaths)??"0"}),E.jsx("span",{className:"stat-label",children:"deaths"})]}),E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:((s=n==null?void 0:n.onlinetime)==null?void 0:s.replace(/^00\./,""))??"--"}),E.jsx("span",{className:"stat-label",children:"uptime"})]})]}),n&&E.jsxs("div",{className:"char-location",children:[(c=n.ns)==null?void 0:c.toFixed(1),"N, ",(f=n.ew)==null?void 0:f.toFixed(1),"E"]}),t&&E.jsxs("div",{className:"char-expanded",children:[i!=null&&i.vitae?E.jsxs("div",{className:"vitae-warn",children:["Vitae: ",i.vitae,"%"]}):null,E.jsxs("div",{className:"expanded-row",children:[E.jsxs("span",{children:["Prismatics: ",(n==null?void 0:n.prismatic_taper_count)??"--"]}),E.jsxs("span",{children:["Total Deaths: ",(n==null?void 0:n.total_deaths)??"--"]})]}),(a==null?void 0:a.session)&&E.jsxs("div",{className:"expanded-row",children:[E.jsxs("span",{children:["Session Dmg: ",(l=a.session.total_damage_given)==null?void 0:l.toLocaleString()]}),E.jsxs("span",{children:["Session Kills: ",a.session.total_kills]})]}),E.jsxs("div",{className:"expanded-row",children:[E.jsxs("span",{children:["RAM: ",n!=null&&n.mem_mb?(n.mem_mb/1048576).toFixed(0)+" MB":"--"]}),E.jsxs("span",{children:["CPU: ",((h=n==null?void 0:n.cpu_pct)==null?void 0:h.toFixed(1))??"--","%"]})]})]})]})});Nb.displayName="CharacterCard";const iO=({characters:e})=>{const t=N.useMemo(()=>Array.from(e.values()).sort((r,n)=>r.name.localeCompare(n.name)),[e]);return t.length===0?E.jsx("div",{className:"grid-empty",children:"No active characters"}):E.jsx("div",{className:"char-grid",children:t.map(r=>E.jsx(Nb,{character:r},r.name))})},aO=({tabs:e})=>{var n,i;const[t,r]=N.useState(((n=e[0])==null?void 0:n.id)??"");return E.jsxs("div",{className:"tab-container",children:[E.jsx("div",{className:"tab-bar",children:e.map(a=>E.jsx("button",{className:`tab-btn ${t===a.id?"active":""}`,onClick:()=>r(a.id),children:a.label},a.id))}),E.jsx("div",{className:"tab-content",children:(i=e.find(a=>a.id===t))==null?void 0:i.content})]})};function Rb(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(t=0;t-1}return Wo=t,Wo}var Ho,wd;function OO(){if(wd)return Ho;wd=1;var e=Ea();function t(r,n){var i=this.__data__,a=e(i,r);return a<0?(++this.size,i.push([r,n])):i[a][1]=n,this}return Ho=t,Ho}var Ko,Od;function Ma(){if(Od)return Ko;Od=1;var e=gO(),t=bO(),r=xO(),n=wO(),i=OO();function a(o){var u=-1,s=o==null?0:o.length;for(this.clear();++uE.jsxs("div",{className:"dashboard",children:[E.jsx("header",{className:"dashboard-header",children:E.jsx("h1",{className:"dashboard-title",children:"Mosswart Overlord"})}),E.jsx("main",{className:"dashboard-main",children:e})]}),rO=({activeChars:e,totalKills:t,totalRares:r,serverHealth:n})=>{var o;const i=((o=n==null?void 0:n.status)==null?void 0:o.toLowerCase())??"unknown",a=i==="online"||i==="up";return E.jsxs("div",{className:"global-stats",children:[E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:"global-value",children:e}),E.jsx("span",{className:"global-label",children:"Active Characters"})]}),E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:"global-value",children:t.toLocaleString()}),E.jsx("span",{className:"global-label",children:"Total Kills"})]}),E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:"global-value",children:r}),E.jsx("span",{className:"global-label",children:"Total Rares"})]}),E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:`server-dot ${a?"online":"offline"}`}),E.jsxs("span",{className:"global-value",children:[(n==null?void 0:n.latency_ms)??"--","ms"]}),E.jsx("span",{className:"global-label",children:"Coldeve"})]})]})},Pi=A.memo(({label:e,current:t,max:r,color:n,bgColor:i})=>{const a=r>0?Math.min(100,Math.max(0,t/r*100)):0;return E.jsxs("div",{className:"vital-bar",children:[E.jsx("span",{className:"vital-label",children:e}),E.jsx("div",{className:"vital-track",style:{backgroundColor:i},children:E.jsx("div",{className:"vital-fill",style:{width:`${a}%`,background:n}})}),E.jsxs("span",{className:"vital-text",children:[t,"/",r]})]})});Pi.displayName="VitalBar";const nO=e=>{const t=(e||"idle").toLowerCase();return t==="combat"||t==="hunt"?{label:t==="combat"?"Combat":"Hunt",cls:"badge-combat"}:t==="nav"||t==="navigation"?{label:"Nav",cls:"badge-nav"}:t==="default"||t==="idle"||t===""?{label:"Idle",cls:"badge-idle"}:{label:e,cls:"badge-nav"}},Nb=A.memo(({character:e})=>{var u,s,c,f,l,h;const[t,r]=N.useState(!1),{telemetry:n,vitals:i,combat:a}=e,o=nO((n==null?void 0:n.vt_state)??"");return E.jsxs("div",{className:"char-card",onClick:()=>r(!t),children:[E.jsxs("div",{className:"char-header",children:[E.jsx("span",{className:"char-name",children:e.name}),E.jsx("span",{className:`char-badge ${o.cls}`,children:o.label})]}),i?E.jsxs("div",{className:"char-vitals",children:[E.jsx(Pi,{label:"HP",current:i.health_current,max:i.health_max,color:"linear-gradient(90deg, #ff4444, #ff6666)",bgColor:"#330000"}),E.jsx(Pi,{label:"ST",current:i.stamina_current,max:i.stamina_max,color:"linear-gradient(90deg, #ffaa00, #ffcc44)",bgColor:"#331a00"}),E.jsx(Pi,{label:"MN",current:i.mana_current,max:i.mana_max,color:"linear-gradient(90deg, #4488ff, #66aaff)",bgColor:"#001433"})]}):E.jsx("div",{className:"char-vitals-placeholder",children:"Awaiting vitals..."}),E.jsxs("div",{className:"char-stats-row",children:[E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:(n==null?void 0:n.kills_per_hour)??"--"}),E.jsx("span",{className:"stat-label",children:"kills/hr"})]}),E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:((u=n==null?void 0:n.kills)==null?void 0:u.toLocaleString())??"--"}),E.jsx("span",{className:"stat-label",children:"kills"})]}),E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:(n==null?void 0:n.deaths)??"0"}),E.jsx("span",{className:"stat-label",children:"deaths"})]}),E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:((s=n==null?void 0:n.onlinetime)==null?void 0:s.replace(/^00\./,""))??"--"}),E.jsx("span",{className:"stat-label",children:"uptime"})]})]}),n&&E.jsxs("div",{className:"char-location",children:[(c=n.ns)==null?void 0:c.toFixed(1),"N, ",(f=n.ew)==null?void 0:f.toFixed(1),"E"]}),t&&E.jsxs("div",{className:"char-expanded",children:[i!=null&&i.vitae?E.jsxs("div",{className:"vitae-warn",children:["Vitae: ",i.vitae,"%"]}):null,E.jsxs("div",{className:"expanded-row",children:[E.jsxs("span",{children:["Prismatics: ",(n==null?void 0:n.prismatic_taper_count)??"--"]}),E.jsxs("span",{children:["Total Deaths: ",(n==null?void 0:n.total_deaths)??"--"]})]}),(a==null?void 0:a.session)&&E.jsxs("div",{className:"expanded-row",children:[E.jsxs("span",{children:["Session Dmg: ",(l=a.session.total_damage_given)==null?void 0:l.toLocaleString()]}),E.jsxs("span",{children:["Session Kills: ",a.session.total_kills]})]}),E.jsxs("div",{className:"expanded-row",children:[E.jsxs("span",{children:["RAM: ",n!=null&&n.mem_mb?(n.mem_mb/1048576).toFixed(0)+" MB":"--"]}),E.jsxs("span",{children:["CPU: ",((h=n==null?void 0:n.cpu_pct)==null?void 0:h.toFixed(1))??"--","%"]})]})]})]})});Nb.displayName="CharacterCard";const iO=({characters:e})=>{const t=N.useMemo(()=>Array.from(e.values()).sort((r,n)=>r.name.localeCompare(n.name)),[e]);return t.length===0?E.jsx("div",{className:"grid-empty",children:"No active characters"}):E.jsx("div",{className:"char-grid",children:t.map(r=>E.jsx(Nb,{character:r},r.name))})},aO=({tabs:e})=>{var n,i;const[t,r]=N.useState(((n=e[0])==null?void 0:n.id)??"");return E.jsxs("div",{className:"tab-container",children:[E.jsx("div",{className:"tab-bar",children:e.map(a=>E.jsx("button",{className:`tab-btn ${t===a.id?"active":""}`,onClick:()=>r(a.id),children:a.label},a.id))}),E.jsx("div",{className:"tab-content",children:(i=e.find(a=>a.id===t))==null?void 0:i.content})]})};function Rb(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(t=0;t-1}return Wo=t,Wo}var Ho,wd;function OO(){if(wd)return Ho;wd=1;var e=Ea();function t(r,n){var i=this.__data__,a=e(i,r);return a<0?(++this.size,i.push([r,n])):i[a][1]=n,this}return Ho=t,Ho}var Ko,Od;function Ma(){if(Od)return Ko;Od=1;var e=gO(),t=bO(),r=xO(),n=wO(),i=OO();function a(o){var u=-1,s=o==null?0:o.length;for(this.clear();++u0?1:-1},Gt=function(t){return er(t)&&t.indexOf("%")===t.length-1},L=function(t){return HO(t)&&!ii(t)},KO=function(t){return ee(t)},Se=function(t){return L(t)||er(t)},GO=0,ai=function(t){var r=++GO;return"".concat(t||"").concat(r)},ke=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!L(t)&&!er(t))return n;var a;if(Gt(t)){var o=t.indexOf("%");a=r*parseFloat(t.slice(0,o))/100}else a=+t;return ii(a)&&(a=n),i&&a>r&&(a=r),a},Mt=function(t){if(!t)return null;var r=Object.keys(t);return r&&r.length?t[r[0]]:null},VO=function(t){if(!Array.isArray(t))return!1;for(var r=t.length,n={},i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function t_(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var Yd={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart",contextmenu:"onContextMenu",dblclick:"onDoubleClick"},yt=function(t){return typeof t=="string"?t:t?t.displayName||t.name||"Component":""},Zd=null,gu=null,Kf=function e(t){if(t===Zd&&Array.isArray(gu))return gu;var r=[];return N.Children.forEach(t,function(n){ee(n)||(FO.isFragment(n)?r=r.concat(e(n.props.children)):r.push(n))}),gu=r,Zd=t,r};function Ze(e,t){var r=[],n=[];return Array.isArray(t)?n=t.map(function(i){return yt(i)}):n=[yt(t)],Kf(e).forEach(function(i){var a=He(i,"type.displayName")||He(i,"type.name");n.indexOf(a)!==-1&&r.push(i)}),r}function ze(e,t){var r=Ze(e,t);return r&&r[0]}var Jd=function(t){if(!t||!t.props)return!1;var r=t.props,n=r.width,i=r.height;return!(!L(n)||n<=0||!L(i)||i<=0)},r_=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],n_=function(t){return t&&t.type&&er(t.type)&&r_.indexOf(t.type)>=0},i_=function(t,r,n,i){var a,o=(a=mu==null?void 0:mu[i])!==null&&a!==void 0?a:[];return r.startsWith("data-")||!Y(t)&&(i&&o.includes(r)||ZO.includes(r))||n&&Hf.includes(r)},X=function(t,r,n){if(!t||typeof t=="function"||typeof t=="boolean")return null;var i=t;if(N.isValidElement(t)&&(i=t.props),!Yr(i))return null;var a={};return Object.keys(i).forEach(function(o){var u;i_((u=i)===null||u===void 0?void 0:u[o],o,r,n)&&(a[o]=i[o])}),a},gl=function e(t,r){if(t===r)return!0;var n=N.Children.count(t);if(n!==N.Children.count(r))return!1;if(n===0)return!0;if(n===1)return Qd(Array.isArray(t)?t[0]:t,Array.isArray(r)?r[0]:r);for(var i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function c_(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function xl(e){var t=e.children,r=e.width,n=e.height,i=e.viewBox,a=e.className,o=e.style,u=e.title,s=e.desc,c=s_(e,u_),f=i||{width:r,height:n,x:0,y:0},l=Q("recharts-surface",a);return A.createElement("svg",bl({},X(c,!0,"svg"),{className:l,width:r,height:n,style:o,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height)}),A.createElement("title",null,u),A.createElement("desc",null,s),t)}var l_=["children","className"];function wl(){return wl=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function h_(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var ae=A.forwardRef(function(e,t){var r=e.children,n=e.className,i=f_(e,l_),a=Q("recharts-layer",n);return A.createElement("g",wl({className:a},X(i,!0),{ref:t}),r)}),nt=function(t,r){for(var n=arguments.length,i=new Array(n>2?n-2:0),a=2;aa?0:a+r),n=n>a?a:n,n<0&&(n+=a),a=r>n?0:n-r>>>0,r>>>=0;for(var o=Array(a);++i=a?r:e(r,n,i)}return xu=t,xu}var wu,np;function Wb(){if(np)return wu;np=1;var e="\\ud800-\\udfff",t="\\u0300-\\u036f",r="\\ufe20-\\ufe2f",n="\\u20d0-\\u20ff",i=t+r+n,a="\\ufe0e\\ufe0f",o="\\u200d",u=RegExp("["+o+e+i+a+"]");function s(c){return u.test(c)}return wu=s,wu}var Ou,ip;function v_(){if(ip)return Ou;ip=1;function e(t){return t.split("")}return Ou=e,Ou}var _u,ap;function y_(){if(ap)return _u;ap=1;var e="\\ud800-\\udfff",t="\\u0300-\\u036f",r="\\ufe20-\\ufe2f",n="\\u20d0-\\u20ff",i=t+r+n,a="\\ufe0e\\ufe0f",o="["+e+"]",u="["+i+"]",s="\\ud83c[\\udffb-\\udfff]",c="(?:"+u+"|"+s+")",f="[^"+e+"]",l="(?:\\ud83c[\\udde6-\\uddff]){2}",h="[\\ud800-\\udbff][\\udc00-\\udfff]",p="\\u200d",y=c+"?",v="["+a+"]?",d="(?:"+p+"(?:"+[f,l,h].join("|")+")"+v+y+")*",g=v+y+d,x="(?:"+[f+u+"?",u,l,h,o].join("|")+")",w=RegExp(s+"(?="+s+")|"+x+g,"g");function O(m){return m.match(w)||[]}return _u=O,_u}var Su,op;function m_(){if(op)return Su;op=1;var e=v_(),t=Wb(),r=y_();function n(i){return t(i)?r(i):e(i)}return Su=n,Su}var Au,up;function g_(){if(up)return Au;up=1;var e=p_(),t=Wb(),r=m_(),n=Bb();function i(a){return function(o){o=n(o);var u=t(o)?r(o):void 0,s=u?u[0]:o.charAt(0),c=u?e(u,1).join(""):o.slice(1);return s[a]()+c}}return Au=i,Au}var Pu,sp;function b_(){if(sp)return Pu;sp=1;var e=g_(),t=e("toUpperCase");return Pu=t,Pu}var x_=b_();const Ia=ue(x_);function le(e){return function(){return e}}const Hb=Math.cos,Mi=Math.sin,it=Math.sqrt,$i=Math.PI,ka=2*$i,Ol=Math.PI,_l=2*Ol,Wt=1e-6,w_=_l-Wt;function Kb(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return Kb;const r=10**t;return function(n){this._+=n[0];for(let i=1,a=n.length;iWt)if(!(Math.abs(l*s-c*f)>Wt)||!a)this._append`L${this._x1=t},${this._y1=r}`;else{let p=n-o,y=i-u,v=s*s+c*c,d=p*p+y*y,g=Math.sqrt(v),x=Math.sqrt(h),w=a*Math.tan((Ol-Math.acos((v+h-d)/(2*g*x)))/2),O=w/x,m=w/g;Math.abs(O-1)>Wt&&this._append`L${t+O*f},${r+O*l}`,this._append`A${a},${a},0,0,${+(l*p>f*y)},${this._x1=t+m*s},${this._y1=r+m*c}`}}arc(t,r,n,i,a,o){if(t=+t,r=+r,n=+n,o=!!o,n<0)throw new Error(`negative radius: ${n}`);let u=n*Math.cos(i),s=n*Math.sin(i),c=t+u,f=r+s,l=1^o,h=o?i-a:a-i;this._x1===null?this._append`M${c},${f}`:(Math.abs(this._x1-c)>Wt||Math.abs(this._y1-f)>Wt)&&this._append`L${c},${f}`,n&&(h<0&&(h=h%_l+_l),h>w_?this._append`A${n},${n},0,1,${l},${t-u},${r-s}A${n},${n},0,1,${l},${this._x1=c},${this._y1=f}`:h>Wt&&this._append`A${n},${n},0,${+(h>=Ol)},${l},${this._x1=t+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function Gf(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new __(t)}function Vf(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function Gb(e){this._context=e}Gb.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function Na(e){return new Gb(e)}function Vb(e){return e[0]}function Xb(e){return e[1]}function Yb(e,t){var r=le(!0),n=null,i=Na,a=null,o=Gf(u);e=typeof e=="function"?e:e===void 0?Vb:le(e),t=typeof t=="function"?t:t===void 0?Xb:le(t);function u(s){var c,f=(s=Vf(s)).length,l,h=!1,p;for(n==null&&(a=i(p=o())),c=0;c<=f;++c)!(c=p;--y)u.point(w[y],O[y]);u.lineEnd(),u.areaEnd()}g&&(w[h]=+e(d,h,l),O[h]=+t(d,h,l),u.point(n?+n(d,h,l):w[h],r?+r(d,h,l):O[h]))}if(x)return u=null,x+""||null}function f(){return Yb().defined(i).curve(o).context(a)}return c.x=function(l){return arguments.length?(e=typeof l=="function"?l:le(+l),n=null,c):e},c.x0=function(l){return arguments.length?(e=typeof l=="function"?l:le(+l),c):e},c.x1=function(l){return arguments.length?(n=l==null?null:typeof l=="function"?l:le(+l),c):n},c.y=function(l){return arguments.length?(t=typeof l=="function"?l:le(+l),r=null,c):t},c.y0=function(l){return arguments.length?(t=typeof l=="function"?l:le(+l),c):t},c.y1=function(l){return arguments.length?(r=l==null?null:typeof l=="function"?l:le(+l),c):r},c.lineX0=c.lineY0=function(){return f().x(e).y(t)},c.lineY1=function(){return f().x(e).y(r)},c.lineX1=function(){return f().x(n).y(t)},c.defined=function(l){return arguments.length?(i=typeof l=="function"?l:le(!!l),c):i},c.curve=function(l){return arguments.length?(o=l,a!=null&&(u=o(a)),c):o},c.context=function(l){return arguments.length?(l==null?a=u=null:u=o(a=l),c):a},c}class Zb{constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}}function S_(e){return new Zb(e,!0)}function A_(e){return new Zb(e,!1)}const Xf={draw(e,t){const r=it(t/$i);e.moveTo(r,0),e.arc(0,0,r,0,ka)}},P_={draw(e,t){const r=it(t/5)/2;e.moveTo(-3*r,-r),e.lineTo(-r,-r),e.lineTo(-r,-3*r),e.lineTo(r,-3*r),e.lineTo(r,-r),e.lineTo(3*r,-r),e.lineTo(3*r,r),e.lineTo(r,r),e.lineTo(r,3*r),e.lineTo(-r,3*r),e.lineTo(-r,r),e.lineTo(-3*r,r),e.closePath()}},Jb=it(1/3),T_=Jb*2,j_={draw(e,t){const r=it(t/T_),n=r*Jb;e.moveTo(0,-r),e.lineTo(n,0),e.lineTo(0,r),e.lineTo(-n,0),e.closePath()}},E_={draw(e,t){const r=it(t),n=-r/2;e.rect(n,n,r,r)}},M_=.8908130915292852,Qb=Mi($i/10)/Mi(7*$i/10),$_=Mi(ka/10)*Qb,C_=-Hb(ka/10)*Qb,I_={draw(e,t){const r=it(t*M_),n=$_*r,i=C_*r;e.moveTo(0,-r),e.lineTo(n,i);for(let a=1;a<5;++a){const o=ka*a/5,u=Hb(o),s=Mi(o);e.lineTo(s*r,-u*r),e.lineTo(u*n-s*i,s*n+u*i)}e.closePath()}},Tu=it(3),k_={draw(e,t){const r=-it(t/(Tu*3));e.moveTo(0,r*2),e.lineTo(-Tu*r,-r),e.lineTo(Tu*r,-r),e.closePath()}},Ke=-.5,Ge=it(3)/2,Sl=1/it(12),N_=(Sl/2+1)*3,R_={draw(e,t){const r=it(t/N_),n=r/2,i=r*Sl,a=n,o=r*Sl+r,u=-a,s=o;e.moveTo(n,i),e.lineTo(a,o),e.lineTo(u,s),e.lineTo(Ke*n-Ge*i,Ge*n+Ke*i),e.lineTo(Ke*a-Ge*o,Ge*a+Ke*o),e.lineTo(Ke*u-Ge*s,Ge*u+Ke*s),e.lineTo(Ke*n+Ge*i,Ke*i-Ge*n),e.lineTo(Ke*a+Ge*o,Ke*o-Ge*a),e.lineTo(Ke*u+Ge*s,Ke*s-Ge*u),e.closePath()}};function D_(e,t){let r=null,n=Gf(i);e=typeof e=="function"?e:le(e||Xf),t=typeof t=="function"?t:le(t===void 0?64:+t);function i(){let a;if(r||(r=a=n()),e.apply(this,arguments).draw(r,+t.apply(this,arguments)),a)return r=null,a+""||null}return i.type=function(a){return arguments.length?(e=typeof a=="function"?a:le(a),i):e},i.size=function(a){return arguments.length?(t=typeof a=="function"?a:le(+a),i):t},i.context=function(a){return arguments.length?(r=a??null,i):r},i}function Ci(){}function Ii(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function e0(e){this._context=e}e0.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Ii(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Ii(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function q_(e){return new e0(e)}function t0(e){this._context=e}t0.prototype={areaStart:Ci,areaEnd:Ci,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Ii(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function L_(e){return new t0(e)}function r0(e){this._context=e}r0.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Ii(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function B_(e){return new r0(e)}function n0(e){this._context=e}n0.prototype={areaStart:Ci,areaEnd:Ci,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function F_(e){return new n0(e)}function cp(e){return e<0?-1:1}function lp(e,t,r){var n=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(n||i<0&&-0),o=(r-e._y1)/(i||n<0&&-0),u=(a*i+o*n)/(n+i);return(cp(a)+cp(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function fp(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function ju(e,t,r){var n=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-n)/3;e._context.bezierCurveTo(n+u,i+u*t,a-u,o-u*r,a,o)}function ki(e){this._context=e}ki.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:ju(this,this._t0,fp(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,ju(this,fp(this,r=lp(this,e,t)),r);break;default:ju(this,this._t0,r=lp(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function i0(e){this._context=new a0(e)}(i0.prototype=Object.create(ki.prototype)).point=function(e,t){ki.prototype.point.call(this,t,e)};function a0(e){this._context=e}a0.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,a){this._context.bezierCurveTo(t,e,n,r,a,i)}};function z_(e){return new ki(e)}function U_(e){return new i0(e)}function o0(e){this._context=e}o0.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var n=hp(e),i=hp(t),a=0,o=1;o=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function H_(e){return new Ra(e,.5)}function K_(e){return new Ra(e,0)}function G_(e){return new Ra(e,1)}function _r(e,t){if((o=e.length)>1)for(var r=1,n,i,a=e[t[0]],o,u=a.length;r=0;)r[t]=t;return r}function V_(e,t){return e[t]}function X_(e){const t=[];return t.key=e,t}function Y_(){var e=le([]),t=Al,r=_r,n=V_;function i(a){var o=Array.from(e.apply(this,arguments),X_),u,s=o.length,c=-1,f;for(const l of a)for(u=0,++c;u0){for(var r,n,i=0,a=e[0].length,o;i0){for(var r=0,n=e[t[0]],i,a=n.length;r0)||!((a=(i=e[t[0]]).length)>0))){for(var r=0,n=1,i,a,o;n=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function a1(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var u0={symbolCircle:Xf,symbolCross:P_,symbolDiamond:j_,symbolSquare:E_,symbolStar:I_,symbolTriangle:k_,symbolWye:R_},o1=Math.PI/180,u1=function(t){var r="symbol".concat(Ia(t));return u0[r]||Xf},s1=function(t,r,n){if(r==="area")return t;switch(n){case"cross":return 5*t*t/9;case"diamond":return .5*t*t/Math.sqrt(3);case"square":return t*t;case"star":{var i=18*o1;return 1.25*t*t*(Math.tan(i)-Math.tan(i*2)*Math.pow(Math.tan(i),2))}case"triangle":return Math.sqrt(3)*t*t/4;case"wye":return(21-10*Math.sqrt(3))*t*t/8;default:return Math.PI*t*t/4}},c1=function(t,r){u0["symbol".concat(Ia(t))]=r},Yf=function(t){var r=t.type,n=r===void 0?"circle":r,i=t.size,a=i===void 0?64:i,o=t.sizeType,u=o===void 0?"area":o,s=i1(t,e1),c=pp(pp({},s),{},{type:n,size:a,sizeType:u}),f=function(){var d=u1(n),g=D_().type(d).size(s1(a,u,n));return g()},l=c.className,h=c.cx,p=c.cy,y=X(c,!0);return h===+h&&p===+p&&a===+a?A.createElement("path",Pl({},y,{className:Q("recharts-symbols",l),transform:"translate(".concat(h,", ").concat(p,")"),d:f()})):null};Yf.registerSymbol=c1;function Sr(e){"@babel/helpers - typeof";return Sr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Sr(e)}function Tl(){return Tl=Object.assign?Object.assign.bind():function(e){for(var t=1;t`);var x=p.inactive?c:p.color;return A.createElement("li",Tl({className:d,style:l,key:"legend-item-".concat(y)},tr(n.props,p,y)),A.createElement(xl,{width:o,height:o,viewBox:f,style:h},n.renderIcon(p)),A.createElement("span",{className:"recharts-legend-item-text",style:{color:x}},v?v(g,p,y):g))})}},{key:"render",value:function(){var n=this.props,i=n.payload,a=n.layout,o=n.align;if(!i||!i.length)return null;var u={padding:0,margin:0,textAlign:a==="horizontal"?o:"left"};return A.createElement("ul",{className:"recharts-default-legend",style:u},this.renderItems())}}])})(N.PureComponent);_n(Zf,"displayName","Legend");_n(Zf,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"middle",inactiveColor:"#ccc"});var Eu,yp;function b1(){if(yp)return Eu;yp=1;var e=Ma();function t(){this.__data__=new e,this.size=0}return Eu=t,Eu}var Mu,mp;function x1(){if(mp)return Mu;mp=1;function e(t){var r=this.__data__,n=r.delete(t);return this.size=r.size,n}return Mu=e,Mu}var $u,gp;function w1(){if(gp)return $u;gp=1;function e(t){return this.__data__.get(t)}return $u=e,$u}var Cu,bp;function O1(){if(bp)return Cu;bp=1;function e(t){return this.__data__.has(t)}return Cu=e,Cu}var Iu,xp;function _1(){if(xp)return Iu;xp=1;var e=Ma(),t=Ff(),r=zf(),n=200;function i(a,o){var u=this.__data__;if(u instanceof e){var s=u.__data__;if(!t||s.lengthp))return!1;var v=l.get(o),d=l.get(u);if(v&&d)return v==u&&d==o;var g=-1,x=!0,w=s&i?new e:void 0;for(l.set(o,u),l.set(u,o);++g-1&&n%1==0&&n-1&&r%1==0&&r<=e}return ts=t,ts}var rs,Wp;function R1(){if(Wp)return rs;Wp=1;var e=_t(),t=th(),r=St(),n="[object Arguments]",i="[object Array]",a="[object Boolean]",o="[object Date]",u="[object Error]",s="[object Function]",c="[object Map]",f="[object Number]",l="[object Object]",h="[object RegExp]",p="[object Set]",y="[object String]",v="[object WeakMap]",d="[object ArrayBuffer]",g="[object DataView]",x="[object Float32Array]",w="[object Float64Array]",O="[object Int8Array]",m="[object Int16Array]",b="[object Int32Array]",_="[object Uint8Array]",S="[object Uint8ClampedArray]",P="[object Uint16Array]",$="[object Uint32Array]",j={};j[x]=j[w]=j[O]=j[m]=j[b]=j[_]=j[S]=j[P]=j[$]=!0,j[n]=j[i]=j[d]=j[a]=j[g]=j[o]=j[u]=j[s]=j[c]=j[f]=j[l]=j[h]=j[p]=j[y]=j[v]=!1;function T(M){return r(M)&&t(M.length)&&!!j[e(M)]}return rs=T,rs}var ns,Hp;function m0(){if(Hp)return ns;Hp=1;function e(t){return function(r){return t(r)}}return ns=e,ns}var pn={exports:{}};pn.exports;var Kp;function D1(){return Kp||(Kp=1,(function(e,t){var r=Db(),n=t&&!t.nodeType&&t,i=n&&!0&&e&&!e.nodeType&&e,a=i&&i.exports===n,o=a&&r.process,u=(function(){try{var s=i&&i.require&&i.require("util").types;return s||o&&o.binding&&o.binding("util")}catch{}})();e.exports=u})(pn,pn.exports)),pn.exports}var is,Gp;function g0(){if(Gp)return is;Gp=1;var e=R1(),t=m0(),r=D1(),n=r&&r.isTypedArray,i=n?t(n):e;return is=i,is}var as,Vp;function q1(){if(Vp)return as;Vp=1;var e=I1(),t=Qf(),r=Le(),n=y0(),i=eh(),a=g0(),o=Object.prototype,u=o.hasOwnProperty;function s(c,f){var l=r(c),h=!l&&t(c),p=!l&&!h&&n(c),y=!l&&!h&&!p&&a(c),v=l||h||p||y,d=v?e(c.length,String):[],g=d.length;for(var x in c)(f||u.call(c,x))&&!(v&&(x=="length"||p&&(x=="offset"||x=="parent")||y&&(x=="buffer"||x=="byteLength"||x=="byteOffset")||i(x,g)))&&d.push(x);return d}return as=s,as}var os,Xp;function L1(){if(Xp)return os;Xp=1;var e=Object.prototype;function t(r){var n=r&&r.constructor,i=typeof n=="function"&&n.prototype||e;return r===i}return os=t,os}var us,Yp;function b0(){if(Yp)return us;Yp=1;function e(t,r){return function(n){return t(r(n))}}return us=e,us}var ss,Zp;function B1(){if(Zp)return ss;Zp=1;var e=b0(),t=e(Object.keys,Object);return ss=t,ss}var cs,Jp;function F1(){if(Jp)return cs;Jp=1;var e=L1(),t=B1(),r=Object.prototype,n=r.hasOwnProperty;function i(a){if(!e(a))return t(a);var o=[];for(var u in Object(a))n.call(a,u)&&u!="constructor"&&o.push(u);return o}return cs=i,cs}var ls,Qp;function oi(){if(Qp)return ls;Qp=1;var e=Lf(),t=th();function r(n){return n!=null&&t(n.length)&&!e(n)}return ls=r,ls}var fs,ev;function Da(){if(ev)return fs;ev=1;var e=q1(),t=F1(),r=oi();function n(i){return r(i)?e(i):t(i)}return fs=n,fs}var hs,tv;function z1(){if(tv)return hs;tv=1;var e=E1(),t=C1(),r=Da();function n(i){return e(i,r,t)}return hs=n,hs}var ds,rv;function U1(){if(rv)return ds;rv=1;var e=z1(),t=1,r=Object.prototype,n=r.hasOwnProperty;function i(a,o,u,s,c,f){var l=u&t,h=e(a),p=h.length,y=e(o),v=y.length;if(p!=v&&!l)return!1;for(var d=p;d--;){var g=h[d];if(!(l?g in o:n.call(o,g)))return!1}var x=f.get(a),w=f.get(o);if(x&&w)return x==o&&w==a;var O=!0;f.set(a,o),f.set(o,a);for(var m=l;++d-1}return Ls=t,Ls}var Bs,Ev;function cS(){if(Ev)return Bs;Ev=1;function e(t,r,n){for(var i=-1,a=t==null?0:t.length;++i=o){var g=c?null:i(s);if(g)return a(g);y=!1,h=n,d=new e}else d=c?[]:v;e:for(;++l=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function SS(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function AS(e){return e.value}function PS(e,t){if(A.isValidElement(e))return A.cloneElement(e,t);if(typeof e=="function")return A.createElement(e,t);t.ref;var r=_S(t,vS);return A.createElement(Zf,r)}var Dv=1,Zt=(function(e){function t(){var r;yS(this,t);for(var n=arguments.length,i=new Array(n),a=0;aDv||Math.abs(i.height-this.lastBoundingBox.height)>Dv)&&(this.lastBoundingBox.width=i.width,this.lastBoundingBox.height=i.height,n&&n(i)):(this.lastBoundingBox.width!==-1||this.lastBoundingBox.height!==-1)&&(this.lastBoundingBox.width=-1,this.lastBoundingBox.height=-1,n&&n(null))}},{key:"getBBoxSnapshot",value:function(){return this.lastBoundingBox.width>=0&&this.lastBoundingBox.height>=0?ft({},this.lastBoundingBox):{width:0,height:0}}},{key:"getDefaultPosition",value:function(n){var i=this.props,a=i.layout,o=i.align,u=i.verticalAlign,s=i.margin,c=i.chartWidth,f=i.chartHeight,l,h;if(!n||(n.left===void 0||n.left===null)&&(n.right===void 0||n.right===null))if(o==="center"&&a==="vertical"){var p=this.getBBoxSnapshot();l={left:((c||0)-p.width)/2}}else l=o==="right"?{right:s&&s.right||0}:{left:s&&s.left||0};if(!n||(n.top===void 0||n.top===null)&&(n.bottom===void 0||n.bottom===null))if(u==="middle"){var y=this.getBBoxSnapshot();h={top:((f||0)-y.height)/2}}else h=u==="bottom"?{bottom:s&&s.bottom||0}:{top:s&&s.top||0};return ft(ft({},l),h)}},{key:"render",value:function(){var n=this,i=this.props,a=i.content,o=i.width,u=i.height,s=i.wrapperStyle,c=i.payloadUniqBy,f=i.payload,l=ft(ft({position:"absolute",width:o||"auto",height:u||"auto"},this.getDefaultPosition(s)),s);return A.createElement("div",{className:"recharts-legend-wrapper",style:l,ref:function(p){n.wrapperNode=p}},PS(a,ft(ft({},this.props),{},{payload:S0(f,c,AS)})))}}],[{key:"getWithHeight",value:function(n,i){var a=ft(ft({},this.defaultProps),n.props),o=a.layout;return o==="vertical"&&L(n.props.height)?{height:n.props.height}:o==="horizontal"?{width:n.props.width||i}:null}}])})(N.PureComponent);qa(Zt,"displayName","Legend");qa(Zt,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"});var Hs,qv;function TS(){if(qv)return Hs;qv=1;var e=ni(),t=Qf(),r=Le(),n=e?e.isConcatSpreadable:void 0;function i(a){return r(a)||t(a)||!!(n&&a&&a[n])}return Hs=i,Hs}var Ks,Lv;function T0(){if(Lv)return Ks;Lv=1;var e=v0(),t=TS();function r(n,i,a,o,u){var s=-1,c=n.length;for(a||(a=t),u||(u=[]);++s0&&a(f)?i>1?r(f,i-1,a,o,u):e(u,f):o||(u[u.length]=f)}return u}return Ks=r,Ks}var Gs,Bv;function jS(){if(Bv)return Gs;Bv=1;function e(t){return function(r,n,i){for(var a=-1,o=Object(r),u=i(r),s=u.length;s--;){var c=u[t?s:++a];if(n(o[c],c,o)===!1)break}return r}}return Gs=e,Gs}var Vs,Fv;function ES(){if(Fv)return Vs;Fv=1;var e=jS(),t=e();return Vs=t,Vs}var Xs,zv;function j0(){if(zv)return Xs;zv=1;var e=ES(),t=Da();function r(n,i){return n&&e(n,i,t)}return Xs=r,Xs}var Ys,Uv;function MS(){if(Uv)return Ys;Uv=1;var e=oi();function t(r,n){return function(i,a){if(i==null)return i;if(!e(i))return r(i,a);for(var o=i.length,u=n?o:-1,s=Object(i);(n?u--:++un||u&&s&&f&&!c&&!l||a&&s&&f||!i&&f||!o)return 1;if(!a&&!u&&!l&&r=c)return f;var l=i[a];return f*(l=="desc"?-1:1)}}return r.index-n.index}return tc=t,tc}var rc,Xv;function kS(){if(Xv)return rc;Xv=1;var e=Uf(),t=Wf(),r=lt(),n=E0(),i=$S(),a=m0(),o=IS(),u=Zr(),s=Le();function c(f,l,h){l.length?l=e(l,function(v){return s(v)?function(d){return t(d,v.length===1?v[0]:v)}:v}):l=[u];var p=-1;l=e(l,a(r));var y=n(f,function(v,d,g){var x=e(l,function(w){return w(v)});return{criteria:x,index:++p,value:v}});return i(y,function(v,d){return o(v,d,h)})}return rc=c,rc}var nc,Yv;function NS(){if(Yv)return nc;Yv=1;function e(t,r,n){switch(n.length){case 0:return t.call(r);case 1:return t.call(r,n[0]);case 2:return t.call(r,n[0],n[1]);case 3:return t.call(r,n[0],n[1],n[2])}return t.apply(r,n)}return nc=e,nc}var ic,Zv;function RS(){if(Zv)return ic;Zv=1;var e=NS(),t=Math.max;function r(n,i,a){return i=t(i===void 0?n.length-1:i,0),function(){for(var o=arguments,u=-1,s=t(o.length-i,0),c=Array(s);++u0){if(++a>=e)return arguments[0]}else a=0;return i.apply(void 0,arguments)}}return sc=n,sc}var cc,ry;function BS(){if(ry)return cc;ry=1;var e=qS(),t=LS(),r=t(e);return cc=r,cc}var lc,ny;function FS(){if(ny)return lc;ny=1;var e=Zr(),t=RS(),r=BS();function n(i,a){return r(t(i,a,e),i+"")}return lc=n,lc}var fc,iy;function La(){if(iy)return fc;iy=1;var e=Bf(),t=oi(),r=eh(),n=kt();function i(a,o,u){if(!n(u))return!1;var s=typeof o;return(s=="number"?t(u)&&r(o,u.length):s=="string"&&o in u)?e(u[o],a):!1}return fc=i,fc}var hc,ay;function zS(){if(ay)return hc;ay=1;var e=T0(),t=kS(),r=FS(),n=La(),i=r(function(a,o){if(a==null)return[];var u=o.length;return u>1&&n(a,o[0],o[1])?o=[]:u>2&&n(o[0],o[1],o[2])&&(o=[o[0]]),t(a,e(o,1),[])});return hc=i,hc}var US=zS();const ih=ue(US);function Sn(e){"@babel/helpers - typeof";return Sn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Sn(e)}function Ml(){return Ml=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=t.x),"".concat(nn,"-left"),L(r)&&t&&L(t.x)&&r=t.y),"".concat(nn,"-top"),L(n)&&t&&L(t.y)&&nv?Math.max(f,s[n]):Math.max(l,s[n])}function iA(e){var t=e.translateX,r=e.translateY,n=e.useTranslate3d;return{transform:n?"translate3d(".concat(t,"px, ").concat(r,"px, 0)"):"translate(".concat(t,"px, ").concat(r,"px)")}}function aA(e){var t=e.allowEscapeViewBox,r=e.coordinate,n=e.offsetTopLeft,i=e.position,a=e.reverseDirection,o=e.tooltipBox,u=e.useTranslate3d,s=e.viewBox,c,f,l;return o.height>0&&o.width>0&&r?(f=sy({allowEscapeViewBox:t,coordinate:r,key:"x",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.width,viewBox:s,viewBoxDimension:s.width}),l=sy({allowEscapeViewBox:t,coordinate:r,key:"y",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.height,viewBox:s,viewBoxDimension:s.height}),c=iA({translateX:f,translateY:l,useTranslate3d:u})):c=rA,{cssProperties:c,cssClasses:nA({translateX:f,translateY:l,coordinate:r})}}function Pr(e){"@babel/helpers - typeof";return Pr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Pr(e)}function cy(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function ly(e){for(var t=1;tfy||Math.abs(n.height-this.state.lastBoundingBox.height)>fy)&&this.setState({lastBoundingBox:{width:n.width,height:n.height}})}else(this.state.lastBoundingBox.width!==-1||this.state.lastBoundingBox.height!==-1)&&this.setState({lastBoundingBox:{width:-1,height:-1}})}},{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyDown),this.updateBBox()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyDown)}},{key:"componentDidUpdate",value:function(){var n,i;this.props.active&&this.updateBBox(),this.state.dismissed&&(((n=this.props.coordinate)===null||n===void 0?void 0:n.x)!==this.state.dismissedAtCoordinate.x||((i=this.props.coordinate)===null||i===void 0?void 0:i.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}},{key:"render",value:function(){var n=this,i=this.props,a=i.active,o=i.allowEscapeViewBox,u=i.animationDuration,s=i.animationEasing,c=i.children,f=i.coordinate,l=i.hasPayload,h=i.isAnimationActive,p=i.offset,y=i.position,v=i.reverseDirection,d=i.useTranslate3d,g=i.viewBox,x=i.wrapperStyle,w=aA({allowEscapeViewBox:o,coordinate:f,offsetTopLeft:p,position:y,reverseDirection:v,tooltipBox:this.state.lastBoundingBox,useTranslate3d:d,viewBox:g}),O=w.cssClasses,m=w.cssProperties,b=ly(ly({transition:h&&a?"transform ".concat(u,"ms ").concat(s):void 0},m),{},{pointerEvents:"none",visibility:!this.state.dismissed&&a&&l?"visible":"hidden",position:"absolute",top:0,left:0},x);return A.createElement("div",{tabIndex:-1,className:O,style:b,ref:function(S){n.wrapperNode=S}},c)}}])})(N.PureComponent),vA=function(){return!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout)},Jr={isSsr:vA()};function Tr(e){"@babel/helpers - typeof";return Tr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Tr(e)}function hy(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function dy(e){for(var t=1;t0;return A.createElement(pA,{allowEscapeViewBox:o,animationDuration:u,animationEasing:s,isAnimationActive:h,active:a,coordinate:f,hasPayload:b,offset:p,position:d,reverseDirection:g,useTranslate3d:x,viewBox:w,wrapperStyle:O},AA(c,dy(dy({},this.props),{},{payload:m})))}}])})(N.PureComponent);ah(Ue,"displayName","Tooltip");ah(Ue,"defaultProps",{accessibilityLayer:!1,allowEscapeViewBox:{x:!1,y:!1},animationDuration:400,animationEasing:"ease",contentStyle:{},coordinate:{x:0,y:0},cursor:!0,cursorStyle:{},filterNull:!0,isAnimationActive:!Jr.isSsr,itemStyle:{},labelStyle:{},offset:10,reverseDirection:{x:!1,y:!1},separator:" : ",trigger:"hover",useTranslate3d:!1,viewBox:{x:0,y:0,height:0,width:0},wrapperStyle:{}});var pc,py;function PA(){if(py)return pc;py=1;var e=ct(),t=function(){return e.Date.now()};return pc=t,pc}var vc,vy;function TA(){if(vy)return vc;vy=1;var e=/\s/;function t(r){for(var n=r.length;n--&&e.test(r.charAt(n)););return n}return vc=t,vc}var yc,yy;function jA(){if(yy)return yc;yy=1;var e=TA(),t=/^\s+/;function r(n){return n&&n.slice(0,e(n)+1).replace(t,"")}return yc=r,yc}var mc,my;function N0(){if(my)return mc;my=1;var e=jA(),t=kt(),r=Xr(),n=NaN,i=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,o=/^0o[0-7]+$/i,u=parseInt;function s(c){if(typeof c=="number")return c;if(r(c))return n;if(t(c)){var f=typeof c.valueOf=="function"?c.valueOf():c;c=t(f)?f+"":f}if(typeof c!="string")return c===0?c:+c;c=e(c);var l=a.test(c);return l||o.test(c)?u(c.slice(2),l?2:8):i.test(c)?n:+c}return mc=s,mc}var gc,gy;function EA(){if(gy)return gc;gy=1;var e=kt(),t=PA(),r=N0(),n="Expected a function",i=Math.max,a=Math.min;function o(u,s,c){var f,l,h,p,y,v,d=0,g=!1,x=!1,w=!0;if(typeof u!="function")throw new TypeError(n);s=r(s)||0,e(c)&&(g=!!c.leading,x="maxWait"in c,h=x?i(r(c.maxWait)||0,s):h,w="trailing"in c?!!c.trailing:w);function O(M){var I=f,C=l;return f=l=void 0,d=M,p=u.apply(C,I),p}function m(M){return d=M,y=setTimeout(S,s),g?O(M):p}function b(M){var I=M-v,C=M-d,R=s-I;return x?a(R,h-C):R}function _(M){var I=M-v,C=M-d;return v===void 0||I>=s||I<0||x&&C>=h}function S(){var M=t();if(_(M))return P(M);y=setTimeout(S,b(M))}function P(M){return y=void 0,w&&f?O(M):(f=l=void 0,p)}function $(){y!==void 0&&clearTimeout(y),d=0,f=v=l=y=void 0}function j(){return y===void 0?p:P(t())}function T(){var M=t(),I=_(M);if(f=arguments,l=this,v=M,I){if(y===void 0)return m(v);if(x)return clearTimeout(y),y=setTimeout(S,s),O(v)}return y===void 0&&(y=setTimeout(S,s)),p}return T.cancel=$,T.flush=j,T}return gc=o,gc}var bc,by;function MA(){if(by)return bc;by=1;var e=EA(),t=kt(),r="Expected a function";function n(i,a,o){var u=!0,s=!0;if(typeof i!="function")throw new TypeError(r);return t(o)&&(u="leading"in o?!!o.leading:u,s="trailing"in o?!!o.trailing:s),e(i,a,{leading:u,maxWait:a,trailing:s})}return bc=n,bc}var $A=MA();const R0=ue($A);function Pn(e){"@babel/helpers - typeof";return Pn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Pn(e)}function xy(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function vi(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&(M=R0(M,v,{trailing:!0,leading:!1}));var I=new ResizeObserver(M),C=m.current.getBoundingClientRect(),R=C.width,D=C.height;return j(R,D),I.observe(m.current),function(){I.disconnect()}},[j,v]);var T=N.useMemo(function(){var M=P.containerWidth,I=P.containerHeight;if(M<0||I<0)return null;nt(Gt(o)||Gt(s),`The width(%s) and height(%s) are both fixed numbers, + maybe you don't need to use a ResponsiveContainer.`,o,s),nt(!r||r>0,"The aspect(%s) must be greater than zero.",r);var C=Gt(o)?M:o,R=Gt(s)?I:s;r&&r>0&&(C?R=C/r:R&&(C=R*r),h&&R>h&&(R=h)),nt(C>0||R>0,`The width(%s) and height(%s) of chart should be greater than 0, + please check the style of container, or the props width(%s) and height(%s), + or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the + height and width.`,C,R,o,s,f,l,r);var D=!Array.isArray(p)&&yt(p.type).endsWith("Chart");return A.Children.map(p,function(B){return A.isValidElement(B)?N.cloneElement(B,vi({width:C,height:R},D?{style:vi({height:"100%",width:"100%",maxHeight:R,maxWidth:C},B.props.style)}:{})):B})},[r,p,s,h,l,f,P,o]);return A.createElement("div",{id:d?"".concat(d):void 0,className:Q("recharts-responsive-container",g),style:vi(vi({},O),{},{width:o,height:s,minWidth:f,minHeight:l,maxHeight:h}),ref:m},T)}),Ba=function(t){return null};Ba.displayName="Cell";function Tn(e){"@babel/helpers - typeof";return Tn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Tn(e)}function Oy(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function kl(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||Jr.isSsr)return{width:0,height:0};var n=HA(r),i=JSON.stringify({text:t,copyStyle:n});if(fr.widthCache[i])return fr.widthCache[i];try{var a=document.getElementById(_y);a||(a=document.createElement("span"),a.setAttribute("id",_y),a.setAttribute("aria-hidden","true"),document.body.appendChild(a));var o=kl(kl({},WA),n);Object.assign(a.style,o),a.textContent="".concat(t);var u=a.getBoundingClientRect(),s={width:u.width,height:u.height};return fr.widthCache[i]=s,++fr.cacheCount>UA&&(fr.cacheCount=0,fr.widthCache={}),s}catch{return{width:0,height:0}}},KA=function(t){return{top:t.top+window.scrollY-document.documentElement.clientTop,left:t.left+window.scrollX-document.documentElement.clientLeft}};function jn(e){"@babel/helpers - typeof";return jn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},jn(e)}function Li(e,t){return YA(e)||XA(e,t)||VA(e,t)||GA()}function GA(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function VA(e,t){if(e){if(typeof e=="string")return Sy(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Sy(e,t)}}function Sy(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function lP(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function My(e,t){return pP(e)||dP(e,t)||hP(e,t)||fP()}function fP(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function hP(e,t){if(e){if(typeof e=="string")return $y(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return $y(e,t)}}function $y(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&arguments[0]!==void 0?arguments[0]:[];return C.reduce(function(R,D){var B=D.word,F=D.width,H=R[R.length-1];if(H&&(i==null||a||H.width+F+nD.width?R:D})};if(!f)return p;for(var v="…",d=function(C){var R=l.slice(0,C),D=B0({breakAll:c,style:s,children:R+v}).wordsWithComputedWidth,B=h(D),F=B.length>o||y(B).width>Number(i);return[F,B]},g=0,x=l.length-1,w=0,O;g<=x&&w<=l.length-1;){var m=Math.floor((g+x)/2),b=m-1,_=d(b),S=My(_,2),P=S[0],$=S[1],j=d(m),T=My(j,1),M=T[0];if(!P&&!M&&(g=m+1),P&&M&&(x=m-1),!P&&M){O=$;break}w++}return O||p},Cy=function(t){var r=ee(t)?[]:t.toString().split(L0);return[{words:r}]},yP=function(t){var r=t.width,n=t.scaleToFit,i=t.children,a=t.style,o=t.breakAll,u=t.maxLines;if((r||n)&&!Jr.isSsr){var s,c,f=B0({breakAll:o,children:i,style:a});if(f){var l=f.wordsWithComputedWidth,h=f.spaceWidth;s=l,c=h}else return Cy(i);return vP({breakAll:o,children:i,maxLines:u,style:a},s,c,r,n)}return Cy(i)},Iy="#808080",rr=function(t){var r=t.x,n=r===void 0?0:r,i=t.y,a=i===void 0?0:i,o=t.lineHeight,u=o===void 0?"1em":o,s=t.capHeight,c=s===void 0?"0.71em":s,f=t.scaleToFit,l=f===void 0?!1:f,h=t.textAnchor,p=h===void 0?"start":h,y=t.verticalAnchor,v=y===void 0?"end":y,d=t.fill,g=d===void 0?Iy:d,x=Ey(t,sP),w=N.useMemo(function(){return yP({breakAll:x.breakAll,children:x.children,maxLines:x.maxLines,scaleToFit:l,style:x.style,width:x.width})},[x.breakAll,x.children,x.maxLines,l,x.style,x.width]),O=x.dx,m=x.dy,b=x.angle,_=x.className,S=x.breakAll,P=Ey(x,cP);if(!Se(n)||!Se(a))return null;var $=n+(L(O)?O:0),j=a+(L(m)?m:0),T;switch(v){case"start":T=xc("calc(".concat(c,")"));break;case"middle":T=xc("calc(".concat((w.length-1)/2," * -").concat(u," + (").concat(c," / 2))"));break;default:T=xc("calc(".concat(w.length-1," * -").concat(u,")"));break}var M=[];if(l){var I=w[0].width,C=x.width;M.push("scale(".concat((L(C)?C/I:1)/I,")"))}return b&&M.push("rotate(".concat(b,", ").concat($,", ").concat(j,")")),M.length&&(P.transform=M.join(" ")),A.createElement("text",Nl({},X(P,!0),{x:$,y:j,className:Q("recharts-text",_),textAnchor:p,fill:g.includes("url")?Iy:g}),w.map(function(R,D){var B=R.words.join(S?"":" ");return A.createElement("tspan",{x:$,dy:D===0?T:u,key:"".concat(B,"-").concat(D)},B)}))};function Ct(e,t){return e==null||t==null?NaN:et?1:e>=t?0:NaN}function mP(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function oh(e){let t,r,n;e.length!==2?(t=Ct,r=(u,s)=>Ct(e(u),s),n=(u,s)=>e(u)-s):(t=e===Ct||e===mP?e:gP,r=e,n=e);function i(u,s,c=0,f=u.length){if(c>>1;r(u[l],s)<0?c=l+1:f=l}while(c>>1;r(u[l],s)<=0?c=l+1:f=l}while(cc&&n(u[l-1],s)>-n(u[l],s)?l-1:l}return{left:i,center:o,right:a}}function gP(){return 0}function F0(e){return e===null?NaN:+e}function*bP(e,t){for(let r of e)r!=null&&(r=+r)>=r&&(yield r)}const xP=oh(Ct),ui=xP.right;oh(F0).center;class ky extends Map{constructor(t,r=_P){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),t!=null)for(const[n,i]of t)this.set(n,i)}get(t){return super.get(Ny(this,t))}has(t){return super.has(Ny(this,t))}set(t,r){return super.set(wP(this,t),r)}delete(t){return super.delete(OP(this,t))}}function Ny({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function wP({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function OP({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function _P(e){return e!==null&&typeof e=="object"?e.valueOf():e}function SP(e=Ct){if(e===Ct)return z0;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,r)=>{const n=e(t,r);return n||n===0?n:(e(r,r)===0)-(e(t,t)===0)}}function z0(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et?1:0)}const AP=Math.sqrt(50),PP=Math.sqrt(10),TP=Math.sqrt(2);function Bi(e,t,r){const n=(t-e)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),o=a>=AP?10:a>=PP?5:a>=TP?2:1;let u,s,c;return i<0?(c=Math.pow(10,-i)/o,u=Math.round(e*c),s=Math.round(t*c),u/ct&&--s,c=-c):(c=Math.pow(10,i)*o,u=Math.round(e/c),s=Math.round(t/c),u*ct&&--s),s0))return[];if(e===t)return[e];const n=t=i))return[];const u=a-i+1,s=new Array(u);if(n)if(o<0)for(let c=0;c=n)&&(r=n);return r}function Dy(e,t){let r;for(const n of e)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);return r}function U0(e,t,r=0,n=1/0,i){if(t=Math.floor(t),r=Math.floor(Math.max(0,r)),n=Math.floor(Math.min(e.length-1,n)),!(r<=t&&t<=n))return e;for(i=i===void 0?z0:SP(i);n>r;){if(n-r>600){const s=n-r+1,c=t-r+1,f=Math.log(s),l=.5*Math.exp(2*f/3),h=.5*Math.sqrt(f*l*(s-l)/s)*(c-s/2<0?-1:1),p=Math.max(r,Math.floor(t-c*l/s+h)),y=Math.min(n,Math.floor(t+(s-c)*l/s+h));U0(e,t,p,y,i)}const a=e[t];let o=r,u=n;for(an(e,r,t),i(e[n],a)>0&&an(e,r,n);o0;)--u}i(e[r],a)===0?an(e,r,u):(++u,an(e,u,n)),u<=t&&(r=u+1),t<=u&&(n=u-1)}return e}function an(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function jP(e,t,r){if(e=Float64Array.from(bP(e)),!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return Dy(e);if(t>=1)return Ry(e);var n,i=(n-1)*t,a=Math.floor(i),o=Ry(U0(e,a).subarray(0,a+1)),u=Dy(e.subarray(a+1));return o+(u-o)*(i-a)}}function EP(e,t,r=F0){if(!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return+r(e[0],0,e);if(t>=1)return+r(e[n-1],n-1,e);var n,i=(n-1)*t,a=Math.floor(i),o=+r(e[a],a,e),u=+r(e[a+1],a+1,e);return o+(u-o)*(i-a)}}function MP(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,a=new Array(i);++n>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?mi(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?mi(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=CP.exec(e))?new qe(t[1],t[2],t[3],1):(t=IP.exec(e))?new qe(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=kP.exec(e))?mi(t[1],t[2],t[3],t[4]):(t=NP.exec(e))?mi(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=RP.exec(e))?Wy(t[1],t[2]/100,t[3]/100,1):(t=DP.exec(e))?Wy(t[1],t[2]/100,t[3]/100,t[4]):qy.hasOwnProperty(e)?Fy(qy[e]):e==="transparent"?new qe(NaN,NaN,NaN,0):null}function Fy(e){return new qe(e>>16&255,e>>8&255,e&255,1)}function mi(e,t,r,n){return n<=0&&(e=t=r=NaN),new qe(e,t,r,n)}function BP(e){return e instanceof si||(e=Cn(e)),e?(e=e.rgb(),new qe(e.r,e.g,e.b,e.opacity)):new qe}function Bl(e,t,r,n){return arguments.length===1?BP(e):new qe(e,t,r,n??1)}function qe(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}sh(qe,Bl,H0(si,{brighter(e){return e=e==null?Fi:Math.pow(Fi,e),new qe(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Mn:Math.pow(Mn,e),new qe(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new qe(Jt(this.r),Jt(this.g),Jt(this.b),zi(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:zy,formatHex:zy,formatHex8:FP,formatRgb:Uy,toString:Uy}));function zy(){return`#${Vt(this.r)}${Vt(this.g)}${Vt(this.b)}`}function FP(){return`#${Vt(this.r)}${Vt(this.g)}${Vt(this.b)}${Vt((isNaN(this.opacity)?1:this.opacity)*255)}`}function Uy(){const e=zi(this.opacity);return`${e===1?"rgb(":"rgba("}${Jt(this.r)}, ${Jt(this.g)}, ${Jt(this.b)}${e===1?")":`, ${e})`}`}function zi(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Jt(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Vt(e){return e=Jt(e),(e<16?"0":"")+e.toString(16)}function Wy(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new rt(e,t,r,n)}function K0(e){if(e instanceof rt)return new rt(e.h,e.s,e.l,e.opacity);if(e instanceof si||(e=Cn(e)),!e)return new rt;if(e instanceof rt)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),a=Math.max(t,r,n),o=NaN,u=a-i,s=(a+i)/2;return u?(t===a?o=(r-n)/u+(r0&&s<1?0:o,new rt(o,u,s,e.opacity)}function zP(e,t,r,n){return arguments.length===1?K0(e):new rt(e,t,r,n??1)}function rt(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}sh(rt,zP,H0(si,{brighter(e){return e=e==null?Fi:Math.pow(Fi,e),new rt(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Mn:Math.pow(Mn,e),new rt(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new qe(wc(e>=240?e-240:e+120,i,n),wc(e,i,n),wc(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new rt(Hy(this.h),gi(this.s),gi(this.l),zi(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=zi(this.opacity);return`${e===1?"hsl(":"hsla("}${Hy(this.h)}, ${gi(this.s)*100}%, ${gi(this.l)*100}%${e===1?")":`, ${e})`}`}}));function Hy(e){return e=(e||0)%360,e<0?e+360:e}function gi(e){return Math.max(0,Math.min(1,e||0))}function wc(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const ch=e=>()=>e;function UP(e,t){return function(r){return e+r*t}}function WP(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function HP(e){return(e=+e)==1?G0:function(t,r){return r-t?WP(t,r,e):ch(isNaN(t)?r:t)}}function G0(e,t){var r=t-e;return r?UP(e,r):ch(isNaN(e)?t:e)}const Ky=(function e(t){var r=HP(t);function n(i,a){var o=r((i=Bl(i)).r,(a=Bl(a)).r),u=r(i.g,a.g),s=r(i.b,a.b),c=G0(i.opacity,a.opacity);return function(f){return i.r=o(f),i.g=u(f),i.b=s(f),i.opacity=c(f),i+""}}return n.gamma=e,n})(1);function KP(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(a){for(i=0;ir&&(a=t.slice(r,a),u[o]?u[o]+=a:u[++o]=a),(n=n[0])===(i=i[0])?u[o]?u[o]+=i:u[++o]=i:(u[++o]=null,s.push({i:o,x:Ui(n,i)})),r=Oc.lastIndex;return rt&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function nT(e,t,r){var n=e[0],i=e[1],a=t[0],o=t[1];return i2?iT:nT,s=c=null,l}function l(h){return h==null||isNaN(h=+h)?a:(s||(s=u(e.map(n),t,r)))(n(o(h)))}return l.invert=function(h){return o(i((c||(c=u(t,e.map(n),Ui)))(h)))},l.domain=function(h){return arguments.length?(e=Array.from(h,Wi),f()):e.slice()},l.range=function(h){return arguments.length?(t=Array.from(h),f()):t.slice()},l.rangeRound=function(h){return t=Array.from(h),r=lh,f()},l.clamp=function(h){return arguments.length?(o=h?!0:Ne,f()):o!==Ne},l.interpolate=function(h){return arguments.length?(r=h,f()):r},l.unknown=function(h){return arguments.length?(a=h,l):a},function(h,p){return n=h,i=p,f()}}function fh(){return Fa()(Ne,Ne)}function aT(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function Hi(e,t){if(!isFinite(e)||e===0)return null;var r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"),n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function jr(e){return e=Hi(Math.abs(e)),e?e[1]:NaN}function oT(e,t){return function(r,n){for(var i=r.length,a=[],o=0,u=e[0],s=0;i>0&&u>0&&(s+u+1>n&&(u=Math.max(1,n-s)),a.push(r.substring(i-=u,i+u)),!((s+=u+1)>n));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}function uT(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var sT=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function In(e){if(!(t=sT.exec(e)))throw new Error("invalid format: "+e);var t;return new hh({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}In.prototype=hh.prototype;function hh(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}hh.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function cT(e){e:for(var t=e.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var Ki;function lT(e,t){var r=Hi(e,t);if(!r)return Ki=void 0,e.toPrecision(t);var n=r[0],i=r[1],a=i-(Ki=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=n.length;return a===o?n:a>o?n+new Array(a-o+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+Hi(e,Math.max(0,t+a-1))[0]}function Vy(e,t){var r=Hi(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const Xy={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:aT,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>Vy(e*100,t),r:Vy,s:lT,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function Yy(e){return e}var Zy=Array.prototype.map,Jy=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function fT(e){var t=e.grouping===void 0||e.thousands===void 0?Yy:oT(Zy.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",a=e.numerals===void 0?Yy:uT(Zy.call(e.numerals,String)),o=e.percent===void 0?"%":e.percent+"",u=e.minus===void 0?"−":e.minus+"",s=e.nan===void 0?"NaN":e.nan+"";function c(l,h){l=In(l);var p=l.fill,y=l.align,v=l.sign,d=l.symbol,g=l.zero,x=l.width,w=l.comma,O=l.precision,m=l.trim,b=l.type;b==="n"?(w=!0,b="g"):Xy[b]||(O===void 0&&(O=12),m=!0,b="g"),(g||p==="0"&&y==="=")&&(g=!0,p="0",y="=");var _=(h&&h.prefix!==void 0?h.prefix:"")+(d==="$"?r:d==="#"&&/[boxX]/.test(b)?"0"+b.toLowerCase():""),S=(d==="$"?n:/[%p]/.test(b)?o:"")+(h&&h.suffix!==void 0?h.suffix:""),P=Xy[b],$=/[defgprs%]/.test(b);O=O===void 0?6:/[gprs]/.test(b)?Math.max(1,Math.min(21,O)):Math.max(0,Math.min(20,O));function j(T){var M=_,I=S,C,R,D;if(b==="c")I=P(T)+I,T="";else{T=+T;var B=T<0||1/T<0;if(T=isNaN(T)?s:P(Math.abs(T),O),m&&(T=cT(T)),B&&+T==0&&v!=="+"&&(B=!1),M=(B?v==="("?v:u:v==="-"||v==="("?"":v)+M,I=(b==="s"&&!isNaN(T)&&Ki!==void 0?Jy[8+Ki/3]:"")+I+(B&&v==="("?")":""),$){for(C=-1,R=T.length;++CD||D>57){I=(D===46?i+T.slice(C+1):T.slice(C))+I,T=T.slice(0,C);break}}}w&&!g&&(T=t(T,1/0));var F=M.length+T.length+I.length,H=F>1)+M+T+I+H.slice(F);break;default:T=H+M+T+I;break}return a(T)}return j.toString=function(){return l+""},j}function f(l,h){var p=Math.max(-8,Math.min(8,Math.floor(jr(h)/3)))*3,y=Math.pow(10,-p),v=c((l=In(l),l.type="f",l),{suffix:Jy[8+p/3]});return function(d){return v(y*d)}}return{format:c,formatPrefix:f}}var bi,dh,V0;hT({thousands:",",grouping:[3],currency:["$",""]});function hT(e){return bi=fT(e),dh=bi.format,V0=bi.formatPrefix,bi}function dT(e){return Math.max(0,-jr(Math.abs(e)))}function pT(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(jr(t)/3)))*3-jr(Math.abs(e)))}function vT(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,jr(t)-jr(e))+1}function X0(e,t,r,n){var i=ql(e,t,r),a;switch(n=In(n??",f"),n.type){case"s":{var o=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(a=pT(i,o))&&(n.precision=a),V0(n,o)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=vT(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=dT(i))&&(n.precision=a-(n.type==="%")*2);break}}return dh(n)}function Nt(e){var t=e.domain;return e.ticks=function(r){var n=t();return Rl(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return X0(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,a=n.length-1,o=n[i],u=n[a],s,c,f=10;for(u0;){if(c=Dl(o,u,r),c===s)return n[i]=o,n[a]=u,t(n);if(c>0)o=Math.floor(o/c)*c,u=Math.ceil(u/c)*c;else if(c<0)o=Math.ceil(o*c)/c,u=Math.floor(u*c)/c;else break;s=c}return e},e}function Gi(){var e=fh();return e.copy=function(){return ci(e,Gi())},Qe.apply(e,arguments),Nt(e)}function Y0(e){var t;function r(n){return n==null||isNaN(n=+n)?t:n}return r.invert=r,r.domain=r.range=function(n){return arguments.length?(e=Array.from(n,Wi),r):e.slice()},r.unknown=function(n){return arguments.length?(t=n,r):t},r.copy=function(){return Y0(e).unknown(t)},e=arguments.length?Array.from(e,Wi):[0,1],Nt(r)}function Z0(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],a=e[n],o;return aMath.pow(e,t)}function xT(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function tm(e){return(t,r)=>-e(-t,r)}function ph(e){const t=e(Qy,em),r=t.domain;let n=10,i,a;function o(){return i=xT(n),a=bT(n),r()[0]<0?(i=tm(i),a=tm(a),e(yT,mT)):e(Qy,em),t}return t.base=function(u){return arguments.length?(n=+u,o()):n},t.domain=function(u){return arguments.length?(r(u),o()):r()},t.ticks=u=>{const s=r();let c=s[0],f=s[s.length-1];const l=f0){for(;h<=p;++h)for(y=1;yf)break;g.push(v)}}else for(;h<=p;++h)for(y=n-1;y>=1;--y)if(v=h>0?y/a(-h):y*a(h),!(vf)break;g.push(v)}g.length*2{if(u==null&&(u=10),s==null&&(s=n===10?"s":","),typeof s!="function"&&(!(n%1)&&(s=In(s)).precision==null&&(s.trim=!0),s=dh(s)),u===1/0)return s;const c=Math.max(1,n*u/t.ticks().length);return f=>{let l=f/a(Math.round(i(f)));return l*nr(Z0(r(),{floor:u=>a(Math.floor(i(u))),ceil:u=>a(Math.ceil(i(u)))})),t}function J0(){const e=ph(Fa()).domain([1,10]);return e.copy=()=>ci(e,J0()).base(e.base()),Qe.apply(e,arguments),e}function rm(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function nm(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function vh(e){var t=1,r=e(rm(t),nm(t));return r.constant=function(n){return arguments.length?e(rm(t=+n),nm(t)):t},Nt(r)}function Q0(){var e=vh(Fa());return e.copy=function(){return ci(e,Q0()).constant(e.constant())},Qe.apply(e,arguments)}function im(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function wT(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function OT(e){return e<0?-e*e:e*e}function yh(e){var t=e(Ne,Ne),r=1;function n(){return r===1?e(Ne,Ne):r===.5?e(wT,OT):e(im(r),im(1/r))}return t.exponent=function(i){return arguments.length?(r=+i,n()):r},Nt(t)}function mh(){var e=yh(Fa());return e.copy=function(){return ci(e,mh()).exponent(e.exponent())},Qe.apply(e,arguments),e}function _T(){return mh.apply(null,arguments).exponent(.5)}function am(e){return Math.sign(e)*e*e}function ST(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function ex(){var e=fh(),t=[0,1],r=!1,n;function i(a){var o=ST(e(a));return isNaN(o)?n:r?Math.round(o):o}return i.invert=function(a){return e.invert(am(a))},i.domain=function(a){return arguments.length?(e.domain(a),i):e.domain()},i.range=function(a){return arguments.length?(e.range((t=Array.from(a,Wi)).map(am)),i):t.slice()},i.rangeRound=function(a){return i.range(a).round(!0)},i.round=function(a){return arguments.length?(r=!!a,i):r},i.clamp=function(a){return arguments.length?(e.clamp(a),i):e.clamp()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return ex(e.domain(),t).round(r).clamp(e.clamp()).unknown(n)},Qe.apply(i,arguments),Nt(i)}function tx(){var e=[],t=[],r=[],n;function i(){var o=0,u=Math.max(1,t.length);for(r=new Array(u-1);++o0?r[u-1]:e[0],u=r?[n[r-1],t]:[n[c-1],n[c]]},o.unknown=function(s){return arguments.length&&(a=s),o},o.thresholds=function(){return n.slice()},o.copy=function(){return rx().domain([e,t]).range(i).unknown(a)},Qe.apply(Nt(o),arguments)}function nx(){var e=[.5],t=[0,1],r,n=1;function i(a){return a!=null&&a<=a?t[ui(e,a,0,n)]:r}return i.domain=function(a){return arguments.length?(e=Array.from(a),n=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(a){return arguments.length?(t=Array.from(a),n=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(a){var o=t.indexOf(a);return[e[o-1],e[o]]},i.unknown=function(a){return arguments.length?(r=a,i):r},i.copy=function(){return nx().domain(e).range(t).unknown(r)},Qe.apply(i,arguments)}const _c=new Date,Sc=new Date;function Ae(e,t,r,n){function i(a){return e(a=arguments.length===0?new Date:new Date(+a)),a}return i.floor=a=>(e(a=new Date(+a)),a),i.ceil=a=>(e(a=new Date(a-1)),t(a,1),e(a),a),i.round=a=>{const o=i(a),u=i.ceil(a);return a-o(t(a=new Date(+a),o==null?1:Math.floor(o)),a),i.range=(a,o,u)=>{const s=[];if(a=i.ceil(a),u=u==null?1:Math.floor(u),!(a0))return s;let c;do s.push(c=new Date(+a)),t(a,u),e(a);while(cAe(o=>{if(o>=o)for(;e(o),!a(o);)o.setTime(o-1)},(o,u)=>{if(o>=o)if(u<0)for(;++u<=0;)for(;t(o,-1),!a(o););else for(;--u>=0;)for(;t(o,1),!a(o););}),r&&(i.count=(a,o)=>(_c.setTime(+a),Sc.setTime(+o),e(_c),e(Sc),Math.floor(r(_c,Sc))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?o=>n(o)%a===0:o=>i.count(0,o)%a===0):i)),i}const Vi=Ae(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);Vi.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?Ae(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):Vi);Vi.range;const dt=1e3,Ye=dt*60,pt=Ye*60,gt=pt*24,gh=gt*7,om=gt*30,Ac=gt*365,Xt=Ae(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*dt)},(e,t)=>(t-e)/dt,e=>e.getUTCSeconds());Xt.range;const bh=Ae(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*dt)},(e,t)=>{e.setTime(+e+t*Ye)},(e,t)=>(t-e)/Ye,e=>e.getMinutes());bh.range;const xh=Ae(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*Ye)},(e,t)=>(t-e)/Ye,e=>e.getUTCMinutes());xh.range;const wh=Ae(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*dt-e.getMinutes()*Ye)},(e,t)=>{e.setTime(+e+t*pt)},(e,t)=>(t-e)/pt,e=>e.getHours());wh.range;const Oh=Ae(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*pt)},(e,t)=>(t-e)/pt,e=>e.getUTCHours());Oh.range;const li=Ae(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Ye)/gt,e=>e.getDate()-1);li.range;const za=Ae(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/gt,e=>e.getUTCDate()-1);za.range;const ix=Ae(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/gt,e=>Math.floor(e/gt));ix.range;function ur(e){return Ae(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*Ye)/gh)}const Ua=ur(0),Xi=ur(1),AT=ur(2),PT=ur(3),Er=ur(4),TT=ur(5),jT=ur(6);Ua.range;Xi.range;AT.range;PT.range;Er.range;TT.range;jT.range;function sr(e){return Ae(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/gh)}const Wa=sr(0),Yi=sr(1),ET=sr(2),MT=sr(3),Mr=sr(4),$T=sr(5),CT=sr(6);Wa.range;Yi.range;ET.range;MT.range;Mr.range;$T.range;CT.range;const _h=Ae(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());_h.range;const Sh=Ae(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());Sh.range;const bt=Ae(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());bt.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Ae(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});bt.range;const xt=Ae(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());xt.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Ae(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});xt.range;function ax(e,t,r,n,i,a){const o=[[Xt,1,dt],[Xt,5,5*dt],[Xt,15,15*dt],[Xt,30,30*dt],[a,1,Ye],[a,5,5*Ye],[a,15,15*Ye],[a,30,30*Ye],[i,1,pt],[i,3,3*pt],[i,6,6*pt],[i,12,12*pt],[n,1,gt],[n,2,2*gt],[r,1,gh],[t,1,om],[t,3,3*om],[e,1,Ac]];function u(c,f,l){const h=fd).right(o,h);if(p===o.length)return e.every(ql(c/Ac,f/Ac,l));if(p===0)return Vi.every(Math.max(ql(c,f,l),1));const[y,v]=o[h/o[p-1][2]53)return null;"w"in q||(q.w=1),"Z"in q?(te=Tc(on(q.y,0,1)),xe=te.getUTCDay(),te=xe>4||xe===0?Yi.ceil(te):Yi(te),te=za.offset(te,(q.V-1)*7),q.y=te.getUTCFullYear(),q.m=te.getUTCMonth(),q.d=te.getUTCDate()+(q.w+6)%7):(te=Pc(on(q.y,0,1)),xe=te.getDay(),te=xe>4||xe===0?Xi.ceil(te):Xi(te),te=li.offset(te,(q.V-1)*7),q.y=te.getFullYear(),q.m=te.getMonth(),q.d=te.getDate()+(q.w+6)%7)}else("W"in q||"U"in q)&&("w"in q||(q.w="u"in q?q.u%7:"W"in q?1:0),xe="Z"in q?Tc(on(q.y,0,1)).getUTCDay():Pc(on(q.y,0,1)).getDay(),q.m=0,q.d="W"in q?(q.w+6)%7+q.W*7-(xe+5)%7:q.w+q.U*7-(xe+6)%7);return"Z"in q?(q.H+=q.Z/100|0,q.M+=q.Z%100,Tc(q)):Pc(q)}}function S(z,Z,J,q){for(var ve=0,te=Z.length,xe=J.length,we,De;ve=xe)return-1;if(we=Z.charCodeAt(ve++),we===37){if(we=Z.charAt(ve++),De=m[we in um?Z.charAt(ve++):we],!De||(q=De(z,J,q))<0)return-1}else if(we!=J.charCodeAt(q++))return-1}return q}function P(z,Z,J){var q=c.exec(Z.slice(J));return q?(z.p=f.get(q[0].toLowerCase()),J+q[0].length):-1}function $(z,Z,J){var q=p.exec(Z.slice(J));return q?(z.w=y.get(q[0].toLowerCase()),J+q[0].length):-1}function j(z,Z,J){var q=l.exec(Z.slice(J));return q?(z.w=h.get(q[0].toLowerCase()),J+q[0].length):-1}function T(z,Z,J){var q=g.exec(Z.slice(J));return q?(z.m=x.get(q[0].toLowerCase()),J+q[0].length):-1}function M(z,Z,J){var q=v.exec(Z.slice(J));return q?(z.m=d.get(q[0].toLowerCase()),J+q[0].length):-1}function I(z,Z,J){return S(z,t,Z,J)}function C(z,Z,J){return S(z,r,Z,J)}function R(z,Z,J){return S(z,n,Z,J)}function D(z){return o[z.getDay()]}function B(z){return a[z.getDay()]}function F(z){return s[z.getMonth()]}function H(z){return u[z.getMonth()]}function G(z){return i[+(z.getHours()>=12)]}function U(z){return 1+~~(z.getMonth()/3)}function V(z){return o[z.getUTCDay()]}function he(z){return a[z.getUTCDay()]}function me(z){return s[z.getUTCMonth()]}function Be(z){return u[z.getUTCMonth()]}function qt(z){return i[+(z.getUTCHours()>=12)]}function Re(z){return 1+~~(z.getUTCMonth()/3)}return{format:function(z){var Z=b(z+="",w);return Z.toString=function(){return z},Z},parse:function(z){var Z=_(z+="",!1);return Z.toString=function(){return z},Z},utcFormat:function(z){var Z=b(z+="",O);return Z.toString=function(){return z},Z},utcParse:function(z){var Z=_(z+="",!0);return Z.toString=function(){return z},Z}}}var um={"-":"",_:" ",0:"0"},je=/^\s*\d+/,qT=/^%/,LT=/[\\^$*+?|[\]().{}]/g;function re(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",a=i.length;return n+(a[t.toLowerCase(),r]))}function FT(e,t,r){var n=je.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function zT(e,t,r){var n=je.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function UT(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function WT(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function HT(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function sm(e,t,r){var n=je.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function cm(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function KT(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function GT(e,t,r){var n=je.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function VT(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function lm(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function XT(e,t,r){var n=je.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function fm(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function YT(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function ZT(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function JT(e,t,r){var n=je.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function QT(e,t,r){var n=je.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function ej(e,t,r){var n=qT.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function tj(e,t,r){var n=je.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function rj(e,t,r){var n=je.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function hm(e,t){return re(e.getDate(),t,2)}function nj(e,t){return re(e.getHours(),t,2)}function ij(e,t){return re(e.getHours()%12||12,t,2)}function aj(e,t){return re(1+li.count(bt(e),e),t,3)}function ox(e,t){return re(e.getMilliseconds(),t,3)}function oj(e,t){return ox(e,t)+"000"}function uj(e,t){return re(e.getMonth()+1,t,2)}function sj(e,t){return re(e.getMinutes(),t,2)}function cj(e,t){return re(e.getSeconds(),t,2)}function lj(e){var t=e.getDay();return t===0?7:t}function fj(e,t){return re(Ua.count(bt(e)-1,e),t,2)}function ux(e){var t=e.getDay();return t>=4||t===0?Er(e):Er.ceil(e)}function hj(e,t){return e=ux(e),re(Er.count(bt(e),e)+(bt(e).getDay()===4),t,2)}function dj(e){return e.getDay()}function pj(e,t){return re(Xi.count(bt(e)-1,e),t,2)}function vj(e,t){return re(e.getFullYear()%100,t,2)}function yj(e,t){return e=ux(e),re(e.getFullYear()%100,t,2)}function mj(e,t){return re(e.getFullYear()%1e4,t,4)}function gj(e,t){var r=e.getDay();return e=r>=4||r===0?Er(e):Er.ceil(e),re(e.getFullYear()%1e4,t,4)}function bj(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+re(t/60|0,"0",2)+re(t%60,"0",2)}function dm(e,t){return re(e.getUTCDate(),t,2)}function xj(e,t){return re(e.getUTCHours(),t,2)}function wj(e,t){return re(e.getUTCHours()%12||12,t,2)}function Oj(e,t){return re(1+za.count(xt(e),e),t,3)}function sx(e,t){return re(e.getUTCMilliseconds(),t,3)}function _j(e,t){return sx(e,t)+"000"}function Sj(e,t){return re(e.getUTCMonth()+1,t,2)}function Aj(e,t){return re(e.getUTCMinutes(),t,2)}function Pj(e,t){return re(e.getUTCSeconds(),t,2)}function Tj(e){var t=e.getUTCDay();return t===0?7:t}function jj(e,t){return re(Wa.count(xt(e)-1,e),t,2)}function cx(e){var t=e.getUTCDay();return t>=4||t===0?Mr(e):Mr.ceil(e)}function Ej(e,t){return e=cx(e),re(Mr.count(xt(e),e)+(xt(e).getUTCDay()===4),t,2)}function Mj(e){return e.getUTCDay()}function $j(e,t){return re(Yi.count(xt(e)-1,e),t,2)}function Cj(e,t){return re(e.getUTCFullYear()%100,t,2)}function Ij(e,t){return e=cx(e),re(e.getUTCFullYear()%100,t,2)}function kj(e,t){return re(e.getUTCFullYear()%1e4,t,4)}function Nj(e,t){var r=e.getUTCDay();return e=r>=4||r===0?Mr(e):Mr.ceil(e),re(e.getUTCFullYear()%1e4,t,4)}function Rj(){return"+0000"}function pm(){return"%"}function vm(e){return+e}function ym(e){return Math.floor(+e/1e3)}var hr,lx,fx;Dj({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function Dj(e){return hr=DT(e),lx=hr.format,hr.parse,fx=hr.utcFormat,hr.utcParse,hr}function qj(e){return new Date(e)}function Lj(e){return e instanceof Date?+e:+new Date(+e)}function Ah(e,t,r,n,i,a,o,u,s,c){var f=fh(),l=f.invert,h=f.domain,p=c(".%L"),y=c(":%S"),v=c("%I:%M"),d=c("%I %p"),g=c("%a %d"),x=c("%b %d"),w=c("%B"),O=c("%Y");function m(b){return(s(b)t(i/(e.length-1)))},r.quantiles=function(n){return Array.from({length:n+1},(i,a)=>jP(e,a/n))},r.copy=function(){return vx(t).domain(e)},At.apply(r,arguments)}function Ka(){var e=0,t=.5,r=1,n=1,i,a,o,u,s,c=Ne,f,l=!1,h;function p(v){return isNaN(v=+v)?h:(v=.5+((v=+f(v))-a)*(n*vr}return Ec=e,Ec}var Mc,xm;function Wj(){if(xm)return Mc;xm=1;var e=Ga(),t=bx(),r=Zr();function n(i){return i&&i.length?e(i,r,t):void 0}return Mc=n,Mc}var Hj=Wj();const Va=ue(Hj);var $c,wm;function xx(){if(wm)return $c;wm=1;function e(t,r){return te.e^a.s<0?1:-1;for(n=a.d.length,i=e.d.length,t=0,r=ne.d[t]^a.s<0?1:-1;return n===i?0:n>i^a.s<0?1:-1};W.decimalPlaces=W.dp=function(){var e=this,t=e.d.length-1,r=(t-e.e)*de;if(t=e.d[t],t)for(;t%10==0;t/=10)r--;return r<0?0:r};W.dividedBy=W.div=function(e){return mt(this,new this.constructor(e))};W.dividedToIntegerBy=W.idiv=function(e){var t=this,r=t.constructor;return se(mt(t,new r(e),0,1),r.precision)};W.equals=W.eq=function(e){return!this.cmp(e)};W.exponent=function(){return be(this)};W.greaterThan=W.gt=function(e){return this.cmp(e)>0};W.greaterThanOrEqualTo=W.gte=function(e){return this.cmp(e)>=0};W.isInteger=W.isint=function(){return this.e>this.d.length-2};W.isNegative=W.isneg=function(){return this.s<0};W.isPositive=W.ispos=function(){return this.s>0};W.isZero=function(){return this.s===0};W.lessThan=W.lt=function(e){return this.cmp(e)<0};W.lessThanOrEqualTo=W.lte=function(e){return this.cmp(e)<1};W.logarithm=W.log=function(e){var t,r=this,n=r.constructor,i=n.precision,a=i+5;if(e===void 0)e=new n(10);else if(e=new n(e),e.s<1||e.eq(We))throw Error(Je+"NaN");if(r.s<1)throw Error(Je+(r.s?"NaN":"-Infinity"));return r.eq(We)?new n(0):(pe=!1,t=mt(kn(r,a),kn(e,a),a),pe=!0,se(t,i))};W.minus=W.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?Sx(t,e):Ox(t,(e.s=-e.s,e))};W.modulo=W.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(e=new n(e),!e.s)throw Error(Je+"NaN");return r.s?(pe=!1,t=mt(r,e,0,1).times(e),pe=!0,r.minus(t)):se(new n(r),i)};W.naturalExponential=W.exp=function(){return _x(this)};W.naturalLogarithm=W.ln=function(){return kn(this)};W.negated=W.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};W.plus=W.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?Ox(t,e):Sx(t,(e.s=-e.s,e))};W.precision=W.sd=function(e){var t,r,n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(Qt+e);if(t=be(i)+1,n=i.d.length-1,r=n*de+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r};W.squareRoot=W.sqrt=function(){var e,t,r,n,i,a,o,u=this,s=u.constructor;if(u.s<1){if(!u.s)return new s(0);throw Error(Je+"NaN")}for(e=be(u),pe=!1,i=Math.sqrt(+u),i==0||i==1/0?(t=at(u.d),(t.length+e)%2==0&&(t+="0"),i=Math.sqrt(t),e=tn((e+1)/2)-(e<0||e%2),i==1/0?t="5e"+e:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),n=new s(t)):n=new s(i.toString()),r=s.precision,i=o=r+3;;)if(a=n,n=a.plus(mt(u,a,o+2)).times(.5),at(a.d).slice(0,o)===(t=at(n.d)).slice(0,o)){if(t=t.slice(o-3,o+1),i==o&&t=="4999"){if(se(a,r+1,0),a.times(a).eq(u)){n=a;break}}else if(t!="9999")break;o+=4}return pe=!0,se(n,r)};W.times=W.mul=function(e){var t,r,n,i,a,o,u,s,c,f=this,l=f.constructor,h=f.d,p=(e=new l(e)).d;if(!f.s||!e.s)return new l(0);for(e.s*=f.s,r=f.e+e.e,s=h.length,c=p.length,s=0;){for(t=0,i=s+n;i>n;)u=a[i]+p[n]*h[i-n-1]+t,a[i--]=u%Pe|0,t=u/Pe|0;a[i]=(a[i]+t)%Pe|0}for(;!a[--o];)a.pop();return t?++r:a.shift(),e.d=a,e.e=r,pe?se(e,l.precision):e};W.toDecimalPlaces=W.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(st(e,0,en),t===void 0?t=n.rounding:st(t,0,8),se(r,e+be(r)+1,t))};W.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=nr(n,!0):(st(e,0,en),t===void 0?t=i.rounding:st(t,0,8),n=se(new i(n),e+1,t),r=nr(n,!0,e+1)),r};W.toFixed=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?nr(i):(st(e,0,en),t===void 0?t=a.rounding:st(t,0,8),n=se(new a(i),e+be(i)+1,t),r=nr(n.abs(),!1,e+be(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)};W.toInteger=W.toint=function(){var e=this,t=e.constructor;return se(new t(e),be(e)+1,t.rounding)};W.toNumber=function(){return+this};W.toPower=W.pow=function(e){var t,r,n,i,a,o,u=this,s=u.constructor,c=12,f=+(e=new s(e));if(!e.s)return new s(We);if(u=new s(u),!u.s){if(e.s<1)throw Error(Je+"Infinity");return u}if(u.eq(We))return u;if(n=s.precision,e.eq(We))return se(u,n);if(t=e.e,r=e.d.length-1,o=t>=r,a=u.s,o){if((r=f<0?-f:f)<=wx){for(i=new s(We),t=Math.ceil(n/de+4),pe=!1;r%2&&(i=i.times(u),Tm(i.d,t)),r=tn(r/2),r!==0;)u=u.times(u),Tm(u.d,t);return pe=!0,e.s<0?new s(We).div(i):se(i,n)}}else if(a<0)throw Error(Je+"NaN");return a=a<0&&e.d[Math.max(t,r)]&1?-1:1,u.s=1,pe=!1,i=e.times(kn(u,n+c)),pe=!0,i=_x(i),i.s=a,i};W.toPrecision=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?(r=be(i),n=nr(i,r<=a.toExpNeg||r>=a.toExpPos)):(st(e,1,en),t===void 0?t=a.rounding:st(t,0,8),i=se(new a(i),e,t),r=be(i),n=nr(i,e<=r||r<=a.toExpNeg,e)),n};W.toSignificantDigits=W.tosd=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(st(e,1,en),t===void 0?t=n.rounding:st(t,0,8)),se(new n(r),e,t)};W.toString=W.valueOf=W.val=W.toJSON=W[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=be(e),r=e.constructor;return nr(e,t<=r.toExpNeg||t>=r.toExpPos)};function Ox(e,t){var r,n,i,a,o,u,s,c,f=e.constructor,l=f.precision;if(!e.s||!t.s)return t.s||(t=new f(e)),pe?se(t,l):t;if(s=e.d,c=t.d,o=e.e,i=t.e,s=s.slice(),a=o-i,a){for(a<0?(n=s,a=-a,u=c.length):(n=c,i=o,u=s.length),o=Math.ceil(l/de),u=o>u?o+1:u+1,a>u&&(a=u,n.length=1),n.reverse();a--;)n.push(0);n.reverse()}for(u=s.length,a=c.length,u-a<0&&(a=u,n=c,c=s,s=n),r=0;a;)r=(s[--a]=s[a]+c[a]+r)/Pe|0,s[a]%=Pe;for(r&&(s.unshift(r),++i),u=s.length;s[--u]==0;)s.pop();return t.d=s,t.e=i,pe?se(t,l):t}function st(e,t,r){if(e!==~~e||er)throw Error(Qt+e)}function at(e){var t,r,n,i=e.length-1,a="",o=e[0];if(i>0){for(a+=o,t=1;to?1:-1;else for(u=s=0;ui[u]?1:-1;break}return s}function r(n,i,a){for(var o=0;a--;)n[a]-=o,o=n[a]1;)n.shift()}return function(n,i,a,o){var u,s,c,f,l,h,p,y,v,d,g,x,w,O,m,b,_,S,P=n.constructor,$=n.s==i.s?1:-1,j=n.d,T=i.d;if(!n.s)return new P(n);if(!i.s)throw Error(Je+"Division by zero");for(s=n.e-i.e,_=T.length,m=j.length,p=new P($),y=p.d=[],c=0;T[c]==(j[c]||0);)++c;if(T[c]>(j[c]||0)&&--s,a==null?x=a=P.precision:o?x=a+(be(n)-be(i))+1:x=a,x<0)return new P(0);if(x=x/de+2|0,c=0,_==1)for(f=0,T=T[0],x++;(c1&&(T=e(T,f),j=e(j,f),_=T.length,m=j.length),O=_,v=j.slice(0,_),d=v.length;d<_;)v[d++]=0;S=T.slice(),S.unshift(0),b=T[0],T[1]>=Pe/2&&++b;do f=0,u=t(T,v,_,d),u<0?(g=v[0],_!=d&&(g=g*Pe+(v[1]||0)),f=g/b|0,f>1?(f>=Pe&&(f=Pe-1),l=e(T,f),h=l.length,d=v.length,u=t(l,v,h,d),u==1&&(f--,r(l,_16)throw Error(jh+be(e));if(!e.s)return new f(We);for(pe=!1,u=l,o=new f(.03125);e.abs().gte(.1);)e=e.times(o),c+=5;for(n=Math.log(Ht(2,c))/Math.LN10*2+5|0,u+=n,r=i=a=new f(We),f.precision=u;;){if(i=se(i.times(e),u),r=r.times(++s),o=a.plus(mt(i,r,u)),at(o.d).slice(0,u)===at(a.d).slice(0,u)){for(;c--;)a=se(a.times(a),u);return f.precision=l,t==null?(pe=!0,se(a,l)):a}a=o}}function be(e){for(var t=e.e*de,r=e.d[0];r>=10;r/=10)t++;return t}function Rc(e,t,r){if(t>e.LN10.sd())throw pe=!0,r&&(e.precision=r),Error(Je+"LN10 precision limit exceeded");return se(new e(e.LN10),t)}function Et(e){for(var t="";e--;)t+="0";return t}function kn(e,t){var r,n,i,a,o,u,s,c,f,l=1,h=10,p=e,y=p.d,v=p.constructor,d=v.precision;if(p.s<1)throw Error(Je+(p.s?"NaN":"-Infinity"));if(p.eq(We))return new v(0);if(t==null?(pe=!1,c=d):c=t,p.eq(10))return t==null&&(pe=!0),Rc(v,c);if(c+=h,v.precision=c,r=at(y),n=r.charAt(0),a=be(p),Math.abs(a)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)p=p.times(e),r=at(p.d),n=r.charAt(0),l++;a=be(p),n>1?(p=new v("0."+r),a++):p=new v(n+"."+r.slice(1))}else return s=Rc(v,c+2,d).times(a+""),p=kn(new v(n+"."+r.slice(1)),c-h).plus(s),v.precision=d,t==null?(pe=!0,se(p,d)):p;for(u=o=p=mt(p.minus(We),p.plus(We),c),f=se(p.times(p),c),i=3;;){if(o=se(o.times(f),c),s=u.plus(mt(o,new v(i),c)),at(s.d).slice(0,c)===at(u.d).slice(0,c))return u=u.times(2),a!==0&&(u=u.plus(Rc(v,c+2,d).times(a+""))),u=mt(u,new v(l),c),v.precision=d,t==null?(pe=!0,se(u,d)):u;u=s,i+=2}}function Pm(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;)++n;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(n,i),t){if(i-=n,r=r-n-1,e.e=tn(r/de),e.d=[],n=(r+1)%de,r<0&&(n+=de),nZi||e.e<-Zi))throw Error(jh+r)}else e.s=0,e.e=0,e.d=[0];return e}function se(e,t,r){var n,i,a,o,u,s,c,f,l=e.d;for(o=1,a=l[0];a>=10;a/=10)o++;if(n=t-o,n<0)n+=de,i=t,c=l[f=0];else{if(f=Math.ceil((n+1)/de),a=l.length,f>=a)return e;for(c=a=l[f],o=1;a>=10;a/=10)o++;n%=de,i=n-de+o}if(r!==void 0&&(a=Ht(10,o-i-1),u=c/a%10|0,s=t<0||l[f+1]!==void 0||c%a,s=r<4?(u||s)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||s||r==6&&(n>0?i>0?c/Ht(10,o-i):0:l[f-1])%10&1||r==(e.s<0?8:7))),t<1||!l[0])return s?(a=be(e),l.length=1,t=t-a-1,l[0]=Ht(10,(de-t%de)%de),e.e=tn(-t/de)||0):(l.length=1,l[0]=e.e=e.s=0),e;if(n==0?(l.length=f,a=1,f--):(l.length=f+1,a=Ht(10,de-n),l[f]=i>0?(c/Ht(10,o-i)%Ht(10,i)|0)*a:0),s)for(;;)if(f==0){(l[0]+=a)==Pe&&(l[0]=1,++e.e);break}else{if(l[f]+=a,l[f]!=Pe)break;l[f--]=0,a=1}for(n=l.length;l[--n]===0;)l.pop();if(pe&&(e.e>Zi||e.e<-Zi))throw Error(jh+be(e));return e}function Sx(e,t){var r,n,i,a,o,u,s,c,f,l,h=e.constructor,p=h.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new h(e),pe?se(t,p):t;if(s=e.d,l=t.d,n=t.e,c=e.e,s=s.slice(),o=c-n,o){for(f=o<0,f?(r=s,o=-o,u=l.length):(r=l,n=c,u=s.length),i=Math.max(Math.ceil(p/de),u)+2,o>i&&(o=i,r.length=1),r.reverse(),i=o;i--;)r.push(0);r.reverse()}else{for(i=s.length,u=l.length,f=i0;--i)s[u++]=0;for(i=l.length;i>o;){if(s[--i]0?a=a.charAt(0)+"."+a.slice(1)+Et(n):o>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(i<0?"e":"e+")+i):i<0?(a="0."+Et(-i-1)+a,r&&(n=r-o)>0&&(a+=Et(n))):i>=o?(a+=Et(i+1-o),r&&(n=r-i-1)>0&&(a=a+"."+Et(n))):((n=i+1)0&&(i+1===o&&(a+="."),a+=Et(n))),e.s<0?"-"+a:a}function Tm(e,t){if(e.length>t)return e.length=t,!0}function Ax(e){var t,r,n;function i(a){var o=this;if(!(o instanceof i))return new i(a);if(o.constructor=i,a instanceof i){o.s=a.s,o.e=a.e,o.d=(a=a.d)?a.slice():a;return}if(typeof a=="number"){if(a*0!==0)throw Error(Qt+a);if(a>0)o.s=1;else if(a<0)a=-a,o.s=-1;else{o.s=0,o.e=0,o.d=[0];return}if(a===~~a&&a<1e7){o.e=0,o.d=[a];return}return Pm(o,a.toString())}else if(typeof a!="string")throw Error(Qt+a);if(a.charCodeAt(0)===45?(a=a.slice(1),o.s=-1):o.s=1,tE.test(a))Pm(o,a);else throw Error(Qt+a)}if(i.prototype=W,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=Ax,i.config=i.set=rE,e===void 0&&(e={}),e)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t=i[t+1]&&n<=i[t+2])this[r]=n;else throw Error(Qt+r+": "+n);if((n=e[r="LN10"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(Qt+r+": "+n);return this}var Eh=Ax(eE);We=new Eh(1);const oe=Eh;function nE(e){return uE(e)||oE(e)||aE(e)||iE()}function iE(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function aE(e,t){if(e){if(typeof e=="string")return Ul(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Ul(e,t)}}function oE(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function uE(e){if(Array.isArray(e))return Ul(e)}function Ul(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=t?r.apply(void 0,i):e(t-o,jm(function(){for(var u=arguments.length,s=new Array(u),c=0;ce.length)&&(t=e.length);for(var r=0,n=new Array(t);r"u"||!(Symbol.iterator in Object(e)))){var r=[],n=!0,i=!1,a=void 0;try{for(var o=e[Symbol.iterator](),u;!(n=(u=o.next()).done)&&(r.push(u.value),!(t&&r.length===t));n=!0);}catch(s){i=!0,a=s}finally{try{!n&&o.return!=null&&o.return()}finally{if(i)throw a}}return r}}function OE(e){if(Array.isArray(e))return e}function Mx(e){var t=Nn(e,2),r=t[0],n=t[1],i=r,a=n;return r>n&&(i=n,a=r),[i,a]}function $x(e,t,r){if(e.lte(0))return new oe(0);var n=Ja.getDigitCount(e.toNumber()),i=new oe(10).pow(n),a=e.div(i),o=n!==1?.05:.1,u=new oe(Math.ceil(a.div(o).toNumber())).add(r).mul(o),s=u.mul(i);return t?s:new oe(Math.ceil(s))}function _E(e,t,r){var n=1,i=new oe(e);if(!i.isint()&&r){var a=Math.abs(e);a<1?(n=new oe(10).pow(Ja.getDigitCount(e)-1),i=new oe(Math.floor(i.div(n).toNumber())).mul(n)):a>1&&(i=new oe(Math.floor(e)))}else e===0?i=new oe(Math.floor((t-1)/2)):r||(i=new oe(Math.floor(e)));var o=Math.floor((t-1)/2),u=fE(lE(function(s){return i.add(new oe(s-o).mul(n)).toNumber()}),Wl);return u(0,t)}function Cx(e,t,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((t-e)/(r-1)))return{step:new oe(0),tickMin:new oe(0),tickMax:new oe(0)};var a=$x(new oe(t).sub(e).div(r-1),n,i),o;e<=0&&t>=0?o=new oe(0):(o=new oe(e).add(t).div(2),o=o.sub(new oe(o).mod(a)));var u=Math.ceil(o.sub(e).div(a).toNumber()),s=Math.ceil(new oe(t).sub(o).div(a).toNumber()),c=u+s+1;return c>r?Cx(e,t,r,n,i+1):(c0?s+(r-c):s,u=t>0?u:u+(r-c)),{step:a,tickMin:o.sub(new oe(u).mul(a)),tickMax:o.add(new oe(s).mul(a))})}function SE(e){var t=Nn(e,2),r=t[0],n=t[1],i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=Math.max(i,2),u=Mx([r,n]),s=Nn(u,2),c=s[0],f=s[1];if(c===-1/0||f===1/0){var l=f===1/0?[c].concat(Kl(Wl(0,i-1).map(function(){return 1/0}))):[].concat(Kl(Wl(0,i-1).map(function(){return-1/0})),[f]);return r>n?Hl(l):l}if(c===f)return _E(c,i,a);var h=Cx(c,f,o,a),p=h.step,y=h.tickMin,v=h.tickMax,d=Ja.rangeStep(y,v.add(new oe(.1).mul(p)),p);return r>n?Hl(d):d}function AE(e,t){var r=Nn(e,2),n=r[0],i=r[1],a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=Mx([n,i]),u=Nn(o,2),s=u[0],c=u[1];if(s===-1/0||c===1/0)return[n,i];if(s===c)return[s];var f=Math.max(t,2),l=$x(new oe(c).sub(s).div(f-1),a,0),h=[].concat(Kl(Ja.rangeStep(new oe(s),new oe(c).sub(new oe(.99).mul(l)),l)),[c]);return n>i?Hl(h):h}var PE=jx(SE),TE=jx(AE),jE="Invariant failed";function ir(e,t){throw new Error(jE)}var EE=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function $r(e){"@babel/helpers - typeof";return $r=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},$r(e)}function Ji(){return Ji=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function RE(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function DE(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qE(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&arguments[1]!==void 0?arguments[1]:[],i=arguments.length>2?arguments[2]:void 0,a=arguments.length>3?arguments[3]:void 0,o=-1,u=(r=n==null?void 0:n.length)!==null&&r!==void 0?r:0;if(u<=1)return 0;if(a&&a.axisType==="angleAxis"&&Math.abs(Math.abs(a.range[1]-a.range[0])-360)<=1e-6)for(var s=a.range,c=0;c0?i[c-1].coordinate:i[u-1].coordinate,l=i[c].coordinate,h=c>=u-1?i[0].coordinate:i[c+1].coordinate,p=void 0;if(Ie(l-f)!==Ie(h-l)){var y=[];if(Ie(h-l)===Ie(s[1]-s[0])){p=h;var v=l+s[1]-s[0];y[0]=Math.min(v,(v+f)/2),y[1]=Math.max(v,(v+f)/2)}else{p=f;var d=h+s[1]-s[0];y[0]=Math.min(l,(d+l)/2),y[1]=Math.max(l,(d+l)/2)}var g=[Math.min(l,(p+l)/2),Math.max(l,(p+l)/2)];if(t>g[0]&&t<=g[1]||t>=y[0]&&t<=y[1]){o=i[c].index;break}}else{var x=Math.min(f,h),w=Math.max(f,h);if(t>(x+l)/2&&t<=(w+l)/2){o=i[c].index;break}}}else for(var O=0;O0&&O(n[O].coordinate+n[O-1].coordinate)/2&&t<=(n[O].coordinate+n[O+1].coordinate)/2||O===u-1&&t>(n[O].coordinate+n[O-1].coordinate)/2){o=n[O].index;break}return o},Mh=function(t){var r,n=t,i=n.type.displayName,a=(r=t.type)!==null&&r!==void 0&&r.defaultProps?ye(ye({},t.type.defaultProps),t.props):t.props,o=a.stroke,u=a.fill,s;switch(i){case"Line":s=o;break;case"Area":case"Radar":s=o&&o!=="none"?o:u;break;default:s=u;break}return s},tM=function(t){var r=t.barSize,n=t.totalSize,i=t.stackGroups,a=i===void 0?{}:i;if(!a)return{};for(var o={},u=Object.keys(a),s=0,c=u.length;s=0});if(g&&g.length){var x=g[0].type.defaultProps,w=x!==void 0?ye(ye({},x),g[0].props):g[0].props,O=w.barSize,m=w[d];o[m]||(o[m]=[]);var b=ee(O)?r:O;o[m].push({item:g[0],stackList:g.slice(1),barSize:ee(b)?void 0:ke(b,n,0)})}}return o},rM=function(t){var r=t.barGap,n=t.barCategoryGap,i=t.bandSize,a=t.sizeList,o=a===void 0?[]:a,u=t.maxBarSize,s=o.length;if(s<1)return null;var c=ke(r,i,0,!0),f,l=[];if(o[0].barSize===+o[0].barSize){var h=!1,p=i/s,y=o.reduce(function(O,m){return O+m.barSize||0},0);y+=(s-1)*c,y>=i&&(y-=(s-1)*c,c=0),y>=i&&p>0&&(h=!0,p*=.9,y=s*p);var v=(i-y)/2>>0,d={offset:v-c,size:0};f=o.reduce(function(O,m){var b={item:m.item,position:{offset:d.offset+d.size+c,size:h?p:m.barSize}},_=[].concat($m(O),[b]);return d=_[_.length-1].position,m.stackList&&m.stackList.length&&m.stackList.forEach(function(S){_.push({item:S,position:d})}),_},l)}else{var g=ke(n,i,0,!0);i-2*g-(s-1)*c<=0&&(c=0);var x=(i-2*g-(s-1)*c)/s;x>1&&(x>>=0);var w=u===+u?Math.min(x,u):x;f=o.reduce(function(O,m,b){var _=[].concat($m(O),[{item:m.item,position:{offset:g+(x+c)*b+(x-w)/2,size:w}}]);return m.stackList&&m.stackList.length&&m.stackList.forEach(function(S){_.push({item:S,position:_[_.length-1].position})}),_},l)}return f},nM=function(t,r,n,i){var a=n.children,o=n.width,u=n.margin,s=o-(u.left||0)-(u.right||0),c=Rx({children:a,legendWidth:s});if(c){var f=i||{},l=f.width,h=f.height,p=c.align,y=c.verticalAlign,v=c.layout;if((v==="vertical"||v==="horizontal"&&y==="middle")&&p!=="center"&&L(t[p]))return ye(ye({},t),{},Or({},p,t[p]+(l||0)));if((v==="horizontal"||v==="vertical"&&p==="center")&&y!=="middle"&&L(t[y]))return ye(ye({},t),{},Or({},y,t[y]+(h||0)))}return t},iM=function(t,r,n){return ee(r)?!0:t==="horizontal"?r==="yAxis":t==="vertical"||n==="x"?r==="xAxis":n==="y"?r==="yAxis":!0},Dx=function(t,r,n,i,a){var o=r.props.children,u=Ze(o,Qa).filter(function(c){return iM(i,a,c.props.direction)});if(u&&u.length){var s=u.map(function(c){return c.props.dataKey});return t.reduce(function(c,f){var l=Ce(f,n);if(ee(l))return c;var h=Array.isArray(l)?[Xa(l),Va(l)]:[l,l],p=s.reduce(function(y,v){var d=Ce(f,v,0),g=h[0]-Math.abs(Array.isArray(d)?d[0]:d),x=h[1]+Math.abs(Array.isArray(d)?d[1]:d);return[Math.min(g,y[0]),Math.max(x,y[1])]},[1/0,-1/0]);return[Math.min(p[0],c[0]),Math.max(p[1],c[1])]},[1/0,-1/0])}return null},aM=function(t,r,n,i,a){var o=r.map(function(u){return Dx(t,u,n,a,i)}).filter(function(u){return!ee(u)});return o&&o.length?o.reduce(function(u,s){return[Math.min(u[0],s[0]),Math.max(u[1],s[1])]},[1/0,-1/0]):null},qx=function(t,r,n,i,a){var o=r.map(function(s){var c=s.props.dataKey;return n==="number"&&c&&Dx(t,s,c,i)||gn(t,c,n,a)});if(n==="number")return o.reduce(function(s,c){return[Math.min(s[0],c[0]),Math.max(s[1],c[1])]},[1/0,-1/0]);var u={};return o.reduce(function(s,c){for(var f=0,l=c.length;f=2?Ie(u[0]-u[1])*2*c:c,r&&(t.ticks||t.niceTicks)){var f=(t.ticks||t.niceTicks).map(function(l){var h=a?a.indexOf(l):l;return{coordinate:i(h)+c,value:l,offset:c}});return f.filter(function(l){return!ii(l.coordinate)})}return t.isCategorical&&t.categoricalDomain?t.categoricalDomain.map(function(l,h){return{coordinate:i(l)+c,value:l,index:h,offset:c}}):i.ticks&&!n?i.ticks(t.tickCount).map(function(l){return{coordinate:i(l)+c,value:l,offset:c}}):i.domain().map(function(l,h){return{coordinate:i(l)+c,value:a?a[l]:l,index:h,offset:c}})},Dc=new WeakMap,xi=function(t,r){if(typeof r!="function")return t;Dc.has(t)||Dc.set(t,new WeakMap);var n=Dc.get(t);if(n.has(r))return n.get(r);var i=function(){t.apply(void 0,arguments),r.apply(void 0,arguments)};return n.set(r,i),i},Fx=function(t,r,n){var i=t.scale,a=t.type,o=t.layout,u=t.axisType;if(i==="auto")return o==="radial"&&u==="radiusAxis"?{scale:En(),realScaleType:"band"}:o==="radial"&&u==="angleAxis"?{scale:Gi(),realScaleType:"linear"}:a==="category"&&r&&(r.indexOf("LineChart")>=0||r.indexOf("AreaChart")>=0||r.indexOf("ComposedChart")>=0&&!n)?{scale:mn(),realScaleType:"point"}:a==="category"?{scale:En(),realScaleType:"band"}:{scale:Gi(),realScaleType:"linear"};if(er(i)){var s="scale".concat(Ia(i));return{scale:(mm[s]||mn)(),realScaleType:mm[s]?s:"point"}}return Y(i)?{scale:i}:{scale:mn(),realScaleType:"point"}},Im=1e-4,zx=function(t){var r=t.domain();if(!(!r||r.length<=2)){var n=r.length,i=t.range(),a=Math.min(i[0],i[1])-Im,o=Math.max(i[0],i[1])+Im,u=t(r[0]),s=t(r[n-1]);(uo||so)&&t.domain([r[0],r[n-1]])}},oM=function(t,r){if(!t)return null;for(var n=0,i=t.length;ni)&&(a[1]=i),a[0]>i&&(a[0]=i),a[1]=0?(t[u][n][0]=a,t[u][n][1]=a+s,a=t[u][n][1]):(t[u][n][0]=o,t[u][n][1]=o+s,o=t[u][n][1])}},cM=function(t){var r=t.length;if(!(r<=0))for(var n=0,i=t[0].length;n=0?(t[o][n][0]=a,t[o][n][1]=a+u,a=t[o][n][1]):(t[o][n][0]=0,t[o][n][1]=0)}},lM={sign:sM,expand:Z_,none:_r,silhouette:J_,wiggle:Q_,positive:cM},fM=function(t,r,n){var i=r.map(function(u){return u.props.dataKey}),a=lM[n],o=Y_().keys(i).value(function(u,s){return+Ce(u,s,0)}).order(Al).offset(a);return o(t)},hM=function(t,r,n,i,a,o){if(!t)return null;var u=o?r.reverse():r,s={},c=u.reduce(function(l,h){var p,y=(p=h.type)!==null&&p!==void 0&&p.defaultProps?ye(ye({},h.type.defaultProps),h.props):h.props,v=y.stackId,d=y.hide;if(d)return l;var g=y[n],x=l[g]||{hasStack:!1,stackGroups:{}};if(Se(v)){var w=x.stackGroups[v]||{numericAxisId:n,cateAxisId:i,items:[]};w.items.push(h),x.hasStack=!0,x.stackGroups[v]=w}else x.stackGroups[ai("_stackId_")]={numericAxisId:n,cateAxisId:i,items:[h]};return ye(ye({},l),{},Or({},g,x))},s),f={};return Object.keys(c).reduce(function(l,h){var p=c[h];if(p.hasStack){var y={};p.stackGroups=Object.keys(p.stackGroups).reduce(function(v,d){var g=p.stackGroups[d];return ye(ye({},v),{},Or({},d,{numericAxisId:n,cateAxisId:i,items:g.items,stackedData:fM(t,g.items,a)}))},y)}return ye(ye({},l),{},Or({},h,p))},f)},Ux=function(t,r){var n=r.realScaleType,i=r.type,a=r.tickCount,o=r.originalDomain,u=r.allowDecimals,s=n||r.scale;if(s!=="auto"&&s!=="linear")return null;if(a&&i==="number"&&o&&(o[0]==="auto"||o[1]==="auto")){var c=t.domain();if(!c.length)return null;var f=PE(c,a,u);return t.domain([Xa(f),Va(f)]),{niceTicks:f}}if(a&&i==="number"){var l=t.domain(),h=TE(l,a,u);return{niceTicks:h}}return null},km=function(t){var r=t.axis,n=t.ticks,i=t.offset,a=t.bandSize,o=t.entry,u=t.index;if(r.type==="category")return n[u]?n[u].coordinate+i:null;var s=Ce(o,r.dataKey,r.domain[u]);return ee(s)?null:r.scale(s)-a/2+i},dM=function(t){var r=t.numericAxis,n=r.scale.domain();if(r.type==="number"){var i=Math.min(n[0],n[1]),a=Math.max(n[0],n[1]);return i<=0&&a>=0?0:a<0?a:i}return n[0]},pM=function(t,r){var n,i=(n=t.type)!==null&&n!==void 0&&n.defaultProps?ye(ye({},t.type.defaultProps),t.props):t.props,a=i.stackId;if(Se(a)){var o=r[a];if(o){var u=o.items.indexOf(t);return u>=0?o.stackedData[u]:null}}return null},vM=function(t){return t.reduce(function(r,n){return[Xa(n.concat([r[0]]).filter(L)),Va(n.concat([r[1]]).filter(L))]},[1/0,-1/0])},Wx=function(t,r,n){return Object.keys(t).reduce(function(i,a){var o=t[a],u=o.stackedData,s=u.reduce(function(c,f){var l=vM(f.slice(r,n+1));return[Math.min(c[0],l[0]),Math.max(c[1],l[1])]},[1/0,-1/0]);return[Math.min(s[0],i[0]),Math.max(s[1],i[1])]},[1/0,-1/0]).map(function(i){return i===1/0||i===-1/0?0:i})},Nm=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Rm=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Yl=function(t,r,n){if(Y(t))return t(r,n);if(!Array.isArray(t))return r;var i=[];if(L(t[0]))i[0]=n?t[0]:Math.min(t[0],r[0]);else if(Nm.test(t[0])){var a=+Nm.exec(t[0])[1];i[0]=r[0]-a}else Y(t[0])?i[0]=t[0](r[0]):i[0]=r[0];if(L(t[1]))i[1]=n?t[1]:Math.max(t[1],r[1]);else if(Rm.test(t[1])){var o=+Rm.exec(t[1])[1];i[1]=r[1]+o}else Y(t[1])?i[1]=t[1](r[1]):i[1]=r[1];return i},ea=function(t,r,n){if(t&&t.scale&&t.scale.bandwidth){var i=t.scale.bandwidth();if(!n||i>0)return i}if(t&&r&&r.length>=2){for(var a=ih(r,function(l){return l.coordinate}),o=1/0,u=1,s=a.length;ue.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(t-(n.left||0)-(n.right||0)),Math.abs(r-(n.top||0)-(n.bottom||0)))/2},SM=function(t,r,n,i,a){var o=t.width,u=t.height,s=t.startAngle,c=t.endAngle,f=ke(t.cx,o,o/2),l=ke(t.cy,u,u/2),h=Gx(o,u,n),p=ke(t.innerRadius,h,0),y=ke(t.outerRadius,h,h*.8),v=Object.keys(r);return v.reduce(function(d,g){var x=r[g],w=x.domain,O=x.reversed,m;if(ee(x.range))i==="angleAxis"?m=[s,c]:i==="radiusAxis"&&(m=[p,y]),O&&(m=[m[1],m[0]]);else{m=x.range;var b=m,_=gM(b,2);s=_[0],c=_[1]}var S=Fx(x,a),P=S.realScaleType,$=S.scale;$.domain(w).range(m),zx($);var j=Ux($,ht(ht({},x),{},{realScaleType:P})),T=ht(ht(ht({},x),j),{},{range:m,radius:y,realScaleType:P,scale:$,cx:f,cy:l,innerRadius:p,outerRadius:y,startAngle:s,endAngle:c});return ht(ht({},d),{},Kx({},g,T))},{})},AM=function(t,r){var n=t.x,i=t.y,a=r.x,o=r.y;return Math.sqrt(Math.pow(n-a,2)+Math.pow(i-o,2))},PM=function(t,r){var n=t.x,i=t.y,a=r.cx,o=r.cy,u=AM({x:n,y:i},{x:a,y:o});if(u<=0)return{radius:u};var s=(n-a)/u,c=Math.acos(s);return i>o&&(c=2*Math.PI-c),{radius:u,angle:_M(c),angleInRadian:c}},TM=function(t){var r=t.startAngle,n=t.endAngle,i=Math.floor(r/360),a=Math.floor(n/360),o=Math.min(i,a);return{startAngle:r-o*360,endAngle:n-o*360}},jM=function(t,r){var n=r.startAngle,i=r.endAngle,a=Math.floor(n/360),o=Math.floor(i/360),u=Math.min(a,o);return t+u*360},Bm=function(t,r){var n=t.x,i=t.y,a=PM({x:n,y:i},r),o=a.radius,u=a.angle,s=r.innerRadius,c=r.outerRadius;if(oc)return!1;if(o===0)return!0;var f=TM(r),l=f.startAngle,h=f.endAngle,p=u,y;if(l<=h){for(;p>h;)p-=360;for(;p=l&&p<=h}else{for(;p>l;)p-=360;for(;p=h&&p<=l}return y?ht(ht({},r),{},{radius:o,angle:jM(p,r)}):null},Vx=function(t){return!N.isValidElement(t)&&!Y(t)&&typeof t!="boolean"?t.className:""};function Ln(e){"@babel/helpers - typeof";return Ln=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ln(e)}var EM=["offset"];function MM(e){return kM(e)||IM(e)||CM(e)||$M()}function $M(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function CM(e,t){if(e){if(typeof e=="string")return Zl(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Zl(e,t)}}function IM(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function kM(e){if(Array.isArray(e))return Zl(e)}function Zl(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function RM(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function Fm(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function _e(e){for(var t=1;t=0?1:-1,w,O;i==="insideStart"?(w=p+x*o,O=v):i==="insideEnd"?(w=y-x*o,O=!v):i==="end"&&(w=y+x*o,O=v),O=g<=0?O:!O;var m=fe(c,f,d,w),b=fe(c,f,d,w+(O?1:-1)*359),_="M".concat(m.x,",").concat(m.y,` + A`).concat(d,",").concat(d,",0,1,").concat(O?0:1,`, + `).concat(b.x,",").concat(b.y),S=ee(t.id)?ai("recharts-radial-line-"):t.id;return A.createElement("text",Bn({},n,{dominantBaseline:"central",className:Q("recharts-radial-bar-label",u)}),A.createElement("defs",null,A.createElement("path",{id:S,d:_})),A.createElement("textPath",{xlinkHref:"#".concat(S)},r))},UM=function(t){var r=t.viewBox,n=t.offset,i=t.position,a=r,o=a.cx,u=a.cy,s=a.innerRadius,c=a.outerRadius,f=a.startAngle,l=a.endAngle,h=(f+l)/2;if(i==="outside"){var p=fe(o,u,c+n,h),y=p.x,v=p.y;return{x:y,y:v,textAnchor:y>=o?"start":"end",verticalAnchor:"middle"}}if(i==="center")return{x:o,y:u,textAnchor:"middle",verticalAnchor:"middle"};if(i==="centerTop")return{x:o,y:u,textAnchor:"middle",verticalAnchor:"start"};if(i==="centerBottom")return{x:o,y:u,textAnchor:"middle",verticalAnchor:"end"};var d=(s+c)/2,g=fe(o,u,d,h),x=g.x,w=g.y;return{x,y:w,textAnchor:"middle",verticalAnchor:"middle"}},WM=function(t){var r=t.viewBox,n=t.parentViewBox,i=t.offset,a=t.position,o=r,u=o.x,s=o.y,c=o.width,f=o.height,l=f>=0?1:-1,h=l*i,p=l>0?"end":"start",y=l>0?"start":"end",v=c>=0?1:-1,d=v*i,g=v>0?"end":"start",x=v>0?"start":"end";if(a==="top"){var w={x:u+c/2,y:s-l*i,textAnchor:"middle",verticalAnchor:p};return _e(_e({},w),n?{height:Math.max(s-n.y,0),width:c}:{})}if(a==="bottom"){var O={x:u+c/2,y:s+f+h,textAnchor:"middle",verticalAnchor:y};return _e(_e({},O),n?{height:Math.max(n.y+n.height-(s+f),0),width:c}:{})}if(a==="left"){var m={x:u-d,y:s+f/2,textAnchor:g,verticalAnchor:"middle"};return _e(_e({},m),n?{width:Math.max(m.x-n.x,0),height:f}:{})}if(a==="right"){var b={x:u+c+d,y:s+f/2,textAnchor:x,verticalAnchor:"middle"};return _e(_e({},b),n?{width:Math.max(n.x+n.width-b.x,0),height:f}:{})}var _=n?{width:c,height:f}:{};return a==="insideLeft"?_e({x:u+d,y:s+f/2,textAnchor:x,verticalAnchor:"middle"},_):a==="insideRight"?_e({x:u+c-d,y:s+f/2,textAnchor:g,verticalAnchor:"middle"},_):a==="insideTop"?_e({x:u+c/2,y:s+h,textAnchor:"middle",verticalAnchor:y},_):a==="insideBottom"?_e({x:u+c/2,y:s+f-h,textAnchor:"middle",verticalAnchor:p},_):a==="insideTopLeft"?_e({x:u+d,y:s+h,textAnchor:x,verticalAnchor:y},_):a==="insideTopRight"?_e({x:u+c-d,y:s+h,textAnchor:g,verticalAnchor:y},_):a==="insideBottomLeft"?_e({x:u+d,y:s+f-h,textAnchor:x,verticalAnchor:p},_):a==="insideBottomRight"?_e({x:u+c-d,y:s+f-h,textAnchor:g,verticalAnchor:p},_):Yr(a)&&(L(a.x)||Gt(a.x))&&(L(a.y)||Gt(a.y))?_e({x:u+ke(a.x,c),y:s+ke(a.y,f),textAnchor:"end",verticalAnchor:"end"},_):_e({x:u+c/2,y:s+f/2,textAnchor:"middle",verticalAnchor:"middle"},_)},HM=function(t){return"cx"in t&&L(t.cx)};function Te(e){var t=e.offset,r=t===void 0?5:t,n=NM(e,EM),i=_e({offset:r},n),a=i.viewBox,o=i.position,u=i.value,s=i.children,c=i.content,f=i.className,l=f===void 0?"":f,h=i.textBreakAll;if(!a||ee(u)&&ee(s)&&!N.isValidElement(c)&&!Y(c))return null;if(N.isValidElement(c))return N.cloneElement(c,i);var p;if(Y(c)){if(p=N.createElement(c,i),N.isValidElement(p))return p}else p=BM(i);var y=HM(a),v=X(i,!0);if(y&&(o==="insideStart"||o==="insideEnd"||o==="end"))return zM(i,p,v);var d=y?UM(i):WM(i);return A.createElement(rr,Bn({className:Q("recharts-label",l)},v,d,{breakAll:h}),p)}Te.displayName="Label";var Xx=function(t){var r=t.cx,n=t.cy,i=t.angle,a=t.startAngle,o=t.endAngle,u=t.r,s=t.radius,c=t.innerRadius,f=t.outerRadius,l=t.x,h=t.y,p=t.top,y=t.left,v=t.width,d=t.height,g=t.clockWise,x=t.labelViewBox;if(x)return x;if(L(v)&&L(d)){if(L(l)&&L(h))return{x:l,y:h,width:v,height:d};if(L(p)&&L(y))return{x:p,y,width:v,height:d}}return L(l)&&L(h)?{x:l,y:h,width:0,height:0}:L(r)&&L(n)?{cx:r,cy:n,startAngle:a||i||0,endAngle:o||i||0,innerRadius:c||0,outerRadius:f||s||u||0,clockWise:g}:t.viewBox?t.viewBox:{}},KM=function(t,r){return t?t===!0?A.createElement(Te,{key:"label-implicit",viewBox:r}):Se(t)?A.createElement(Te,{key:"label-implicit",viewBox:r,value:t}):N.isValidElement(t)?t.type===Te?N.cloneElement(t,{key:"label-implicit",viewBox:r}):A.createElement(Te,{key:"label-implicit",content:t,viewBox:r}):Y(t)?A.createElement(Te,{key:"label-implicit",content:t,viewBox:r}):Yr(t)?A.createElement(Te,Bn({viewBox:r},t,{key:"label-implicit"})):null:null},GM=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&n&&!t.label)return null;var i=t.children,a=Xx(t),o=Ze(i,Te).map(function(s,c){return N.cloneElement(s,{viewBox:r||a,key:"label-".concat(c)})});if(!n)return o;var u=KM(t.label,r||a);return[u].concat(MM(o))};Te.parseViewBox=Xx;Te.renderCallByParent=GM;var qc,zm;function VM(){if(zm)return qc;zm=1;function e(t){var r=t==null?0:t.length;return r?t[r-1]:void 0}return qc=e,qc}var XM=VM();const YM=ue(XM);function Fn(e){"@babel/helpers - typeof";return Fn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Fn(e)}var ZM=["valueAccessor"],JM=["data","dataKey","clockWise","id","textBreakAll"];function QM(e){return n$(e)||r$(e)||t$(e)||e$()}function e$(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function t$(e,t){if(e){if(typeof e=="string")return Jl(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Jl(e,t)}}function r$(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function n$(e){if(Array.isArray(e))return Jl(e)}function Jl(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function u$(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var s$=function(t){return Array.isArray(t.value)?YM(t.value):t.value};function It(e){var t=e.valueAccessor,r=t===void 0?s$:t,n=Hm(e,ZM),i=n.data,a=n.dataKey,o=n.clockWise,u=n.id,s=n.textBreakAll,c=Hm(n,JM);return!i||!i.length?null:A.createElement(ae,{className:"recharts-label-list"},i.map(function(f,l){var h=ee(a)?r(f,l):Ce(f&&f.payload,a),p=ee(u)?{}:{id:"".concat(u,"-").concat(l)};return A.createElement(Te,ra({},X(f,!0),c,p,{parentViewBox:f.parentViewBox,value:h,textBreakAll:s,viewBox:Te.parseViewBox(ee(o)?f:Wm(Wm({},f),{},{clockWise:o})),key:"label-".concat(l),index:l}))}))}It.displayName="LabelList";function c$(e,t){return e?e===!0?A.createElement(It,{key:"labelList-implicit",data:t}):A.isValidElement(e)||Y(e)?A.createElement(It,{key:"labelList-implicit",data:t,content:e}):Yr(e)?A.createElement(It,ra({data:t},e,{key:"labelList-implicit"})):null:null}function l$(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&r&&!e.label)return null;var n=e.children,i=Ze(n,It).map(function(o,u){return N.cloneElement(o,{data:t,key:"labelList-".concat(u)})});if(!r)return i;var a=c$(e.label,t);return[a].concat(QM(i))}It.renderCallByParent=l$;function zn(e){"@babel/helpers - typeof";return zn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},zn(e)}function Ql(){return Ql=Object.assign?Object.assign.bind():function(e){for(var t=1;t180),",").concat(+(o>c),`, + `).concat(l.x,",").concat(l.y,` + `);if(i>0){var p=fe(r,n,i,o),y=fe(r,n,i,c);h+="L ".concat(y.x,",").concat(y.y,` + A `).concat(i,",").concat(i,`,0, + `).concat(+(Math.abs(s)>180),",").concat(+(o<=c),`, + `).concat(p.x,",").concat(p.y," Z")}else h+="L ".concat(r,",").concat(n," Z");return h},v$=function(t){var r=t.cx,n=t.cy,i=t.innerRadius,a=t.outerRadius,o=t.cornerRadius,u=t.forceCornerRadius,s=t.cornerIsExternal,c=t.startAngle,f=t.endAngle,l=Ie(f-c),h=wi({cx:r,cy:n,radius:a,angle:c,sign:l,cornerRadius:o,cornerIsExternal:s}),p=h.circleTangency,y=h.lineTangency,v=h.theta,d=wi({cx:r,cy:n,radius:a,angle:f,sign:-l,cornerRadius:o,cornerIsExternal:s}),g=d.circleTangency,x=d.lineTangency,w=d.theta,O=s?Math.abs(c-f):Math.abs(c-f)-v-w;if(O<0)return u?"M ".concat(y.x,",").concat(y.y,` + a`).concat(o,",").concat(o,",0,0,1,").concat(o*2,`,0 + a`).concat(o,",").concat(o,",0,0,1,").concat(-o*2,`,0 + `):Yx({cx:r,cy:n,innerRadius:i,outerRadius:a,startAngle:c,endAngle:f});var m="M ".concat(y.x,",").concat(y.y,` + A`).concat(o,",").concat(o,",0,0,").concat(+(l<0),",").concat(p.x,",").concat(p.y,` + A`).concat(a,",").concat(a,",0,").concat(+(O>180),",").concat(+(l<0),",").concat(g.x,",").concat(g.y,` + A`).concat(o,",").concat(o,",0,0,").concat(+(l<0),",").concat(x.x,",").concat(x.y,` + `);if(i>0){var b=wi({cx:r,cy:n,radius:i,angle:c,sign:l,isExternal:!0,cornerRadius:o,cornerIsExternal:s}),_=b.circleTangency,S=b.lineTangency,P=b.theta,$=wi({cx:r,cy:n,radius:i,angle:f,sign:-l,isExternal:!0,cornerRadius:o,cornerIsExternal:s}),j=$.circleTangency,T=$.lineTangency,M=$.theta,I=s?Math.abs(c-f):Math.abs(c-f)-P-M;if(I<0&&o===0)return"".concat(m,"L").concat(r,",").concat(n,"Z");m+="L".concat(T.x,",").concat(T.y,` + A`).concat(o,",").concat(o,",0,0,").concat(+(l<0),",").concat(j.x,",").concat(j.y,` + A`).concat(i,",").concat(i,",0,").concat(+(I>180),",").concat(+(l>0),",").concat(_.x,",").concat(_.y,` + A`).concat(o,",").concat(o,",0,0,").concat(+(l<0),",").concat(S.x,",").concat(S.y,"Z")}else m+="L".concat(r,",").concat(n,"Z");return m},y$={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},Zx=function(t){var r=Gm(Gm({},y$),t),n=r.cx,i=r.cy,a=r.innerRadius,o=r.outerRadius,u=r.cornerRadius,s=r.forceCornerRadius,c=r.cornerIsExternal,f=r.startAngle,l=r.endAngle,h=r.className;if(o0&&Math.abs(f-l)<360?d=v$({cx:n,cy:i,innerRadius:a,outerRadius:o,cornerRadius:Math.min(v,y/2),forceCornerRadius:s,cornerIsExternal:c,startAngle:f,endAngle:l}):d=Yx({cx:n,cy:i,innerRadius:a,outerRadius:o,startAngle:f,endAngle:l}),A.createElement("path",Ql({},X(r,!0),{className:p,d,role:"img"}))};function Un(e){"@babel/helpers - typeof";return Un=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Un(e)}function ef(){return ef=Object.assign?Object.assign.bind():function(e){for(var t=1;tj$.call(e,t));function cr(e,t){return e===t||!e&&!t&&e!==e&&t!==t}const $$="__v",C$="__o",I$="_owner",{getOwnPropertyDescriptor:tg,keys:rg}=Object;function k$(e,t){return e.byteLength===t.byteLength&&na(new Uint8Array(e),new Uint8Array(t))}function N$(e,t,r){let n=e.length;if(t.length!==n)return!1;for(;n-- >0;)if(!r.equals(e[n],t[n],n,n,e,t,r))return!1;return!0}function R$(e,t){return e.byteLength===t.byteLength&&na(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}function D$(e,t){return cr(e.getTime(),t.getTime())}function q$(e,t){return e.name===t.name&&e.message===t.message&&e.cause===t.cause&&e.stack===t.stack}function L$(e,t){return e===t}function ng(e,t,r){const n=e.size;if(n!==t.size)return!1;if(!n)return!0;const i=new Array(n),a=e.entries();let o,u,s=0;for(;(o=a.next())&&!o.done;){const c=t.entries();let f=!1,l=0;for(;(u=c.next())&&!u.done;){if(i[l]){l++;continue}const h=o.value,p=u.value;if(r.equals(h[0],p[0],s,l,e,t,r)&&r.equals(h[1],p[1],h[0],p[0],e,t,r)){f=i[l]=!0;break}l++}if(!f)return!1;s++}return!0}const B$=cr;function F$(e,t,r){const n=rg(e);let i=n.length;if(rg(t).length!==i)return!1;for(;i-- >0;)if(!Jx(e,t,r,n[i]))return!1;return!0}function fn(e,t,r){const n=eg(e);let i=n.length;if(eg(t).length!==i)return!1;let a,o,u;for(;i-- >0;)if(a=n[i],!Jx(e,t,r,a)||(o=tg(e,a),u=tg(t,a),(o||u)&&(!o||!u||o.configurable!==u.configurable||o.enumerable!==u.enumerable||o.writable!==u.writable)))return!1;return!0}function z$(e,t){return cr(e.valueOf(),t.valueOf())}function U$(e,t){return e.source===t.source&&e.flags===t.flags}function ig(e,t,r){const n=e.size;if(n!==t.size)return!1;if(!n)return!0;const i=new Array(n),a=e.values();let o,u;for(;(o=a.next())&&!o.done;){const s=t.values();let c=!1,f=0;for(;(u=s.next())&&!u.done;){if(!i[f]&&r.equals(o.value,u.value,o.value,u.value,e,t,r)){c=i[f]=!0;break}f++}if(!c)return!1}return!0}function na(e,t){let r=e.byteLength;if(t.byteLength!==r||e.byteOffset!==t.byteOffset)return!1;for(;r-- >0;)if(e[r]!==t[r])return!1;return!0}function W$(e,t){return e.hostname===t.hostname&&e.pathname===t.pathname&&e.protocol===t.protocol&&e.port===t.port&&e.hash===t.hash&&e.username===t.username&&e.password===t.password}function Jx(e,t,r,n){return(n===I$||n===C$||n===$$)&&(e.$$typeof||t.$$typeof)?!0:M$(t,n)&&r.equals(e[n],t[n],n,n,e,t,r)}const H$="[object ArrayBuffer]",K$="[object Arguments]",G$="[object Boolean]",V$="[object DataView]",X$="[object Date]",Y$="[object Error]",Z$="[object Map]",J$="[object Number]",Q$="[object Object]",eC="[object RegExp]",tC="[object Set]",rC="[object String]",nC={"[object Int8Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Int16Array]":!0,"[object Uint16Array]":!0,"[object Int32Array]":!0,"[object Uint32Array]":!0,"[object Float16Array]":!0,"[object Float32Array]":!0,"[object Float64Array]":!0,"[object BigInt64Array]":!0,"[object BigUint64Array]":!0},iC="[object URL]",aC=Object.prototype.toString;function oC({areArrayBuffersEqual:e,areArraysEqual:t,areDataViewsEqual:r,areDatesEqual:n,areErrorsEqual:i,areFunctionsEqual:a,areMapsEqual:o,areNumbersEqual:u,areObjectsEqual:s,arePrimitiveWrappersEqual:c,areRegExpsEqual:f,areSetsEqual:l,areTypedArraysEqual:h,areUrlsEqual:p,unknownTagComparators:y}){return function(d,g,x){if(d===g)return!0;if(d==null||g==null)return!1;const w=typeof d;if(w!==typeof g)return!1;if(w!=="object")return w==="number"?u(d,g,x):w==="function"?a(d,g,x):!1;const O=d.constructor;if(O!==g.constructor)return!1;if(O===Object)return s(d,g,x);if(Array.isArray(d))return t(d,g,x);if(O===Date)return n(d,g,x);if(O===RegExp)return f(d,g,x);if(O===Map)return o(d,g,x);if(O===Set)return l(d,g,x);const m=aC.call(d);if(m===X$)return n(d,g,x);if(m===eC)return f(d,g,x);if(m===Z$)return o(d,g,x);if(m===tC)return l(d,g,x);if(m===Q$)return typeof d.then!="function"&&typeof g.then!="function"&&s(d,g,x);if(m===iC)return p(d,g,x);if(m===Y$)return i(d,g,x);if(m===K$)return s(d,g,x);if(nC[m])return h(d,g,x);if(m===H$)return e(d,g,x);if(m===V$)return r(d,g,x);if(m===G$||m===J$||m===rC)return c(d,g,x);if(y){let b=y[m];if(!b){const _=E$(d);_&&(b=y[_])}if(b)return b(d,g,x)}return!1}}function uC({circular:e,createCustomConfig:t,strict:r}){let n={areArrayBuffersEqual:k$,areArraysEqual:r?fn:N$,areDataViewsEqual:R$,areDatesEqual:D$,areErrorsEqual:q$,areFunctionsEqual:L$,areMapsEqual:r?zc(ng,fn):ng,areNumbersEqual:B$,areObjectsEqual:r?fn:F$,arePrimitiveWrappersEqual:z$,areRegExpsEqual:U$,areSetsEqual:r?zc(ig,fn):ig,areTypedArraysEqual:r?zc(na,fn):na,areUrlsEqual:W$,unknownTagComparators:void 0};if(t&&(n=Object.assign({},n,t(n))),e){const i=_i(n.areArraysEqual),a=_i(n.areMapsEqual),o=_i(n.areObjectsEqual),u=_i(n.areSetsEqual);n=Object.assign({},n,{areArraysEqual:i,areMapsEqual:a,areObjectsEqual:o,areSetsEqual:u})}return n}function sC(e){return function(t,r,n,i,a,o,u){return e(t,r,u)}}function cC({circular:e,comparator:t,createState:r,equals:n,strict:i}){if(r)return function(u,s){const{cache:c=e?new WeakMap:void 0,meta:f}=r();return t(u,s,{cache:c,equals:n,meta:f,strict:i})};if(e)return function(u,s){return t(u,s,{cache:new WeakMap,equals:n,meta:void 0,strict:i})};const a={cache:void 0,equals:n,meta:void 0,strict:i};return function(u,s){return t(u,s,a)}}const lC=Dt();Dt({strict:!0});Dt({circular:!0});Dt({circular:!0,strict:!0});Dt({createInternalComparator:()=>cr});Dt({strict:!0,createInternalComparator:()=>cr});Dt({circular:!0,createInternalComparator:()=>cr});Dt({circular:!0,createInternalComparator:()=>cr,strict:!0});function Dt(e={}){const{circular:t=!1,createInternalComparator:r,createState:n,strict:i=!1}=e,a=uC(e),o=oC(a),u=r?r(o):sC(o);return cC({circular:t,comparator:o,createState:n,equals:u,strict:i})}function fC(e){typeof requestAnimationFrame<"u"&&requestAnimationFrame(e)}function ag(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=-1,n=function i(a){r<0&&(r=a),a-r>t?(e(a),r=-1):fC(i)};requestAnimationFrame(n)}function rf(e){"@babel/helpers - typeof";return rf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},rf(e)}function hC(e){return yC(e)||vC(e)||pC(e)||dC()}function dC(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function pC(e,t){if(e){if(typeof e=="string")return og(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return og(e,t)}}function og(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);re.length)&&(t=e.length);for(var r=0,n=new Array(t);r1?1:g<0?0:g},v=function(g){for(var x=g>1?1:g,w=x,O=0;O<8;++O){var m=l(w)-x,b=p(w);if(Math.abs(m-x)0&&arguments[0]!==void 0?arguments[0]:{},r=t.stiff,n=r===void 0?100:r,i=t.damping,a=i===void 0?8:i,o=t.dt,u=o===void 0?17:o,s=function(f,l,h){var p=-(f-l)*n,y=h*a,v=h+(p-y)*u/1e3,d=h*u/1e3+f;return Math.abs(d-l)e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function GC(e,t){if(e==null)return{};var r={},n=Object.keys(e),i,a;for(a=0;a=0)&&(r[i]=e[i]);return r}function Uc(e){return ZC(e)||YC(e)||XC(e)||VC()}function VC(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function XC(e,t){if(e){if(typeof e=="string")return sf(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return sf(e,t)}}function YC(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function ZC(e){if(Array.isArray(e))return sf(e)}function sf(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function oa(e){return oa=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},oa(e)}var wt=(function(e){rI(r,e);var t=nI(r);function r(n,i){var a;JC(this,r),a=t.call(this,n,i);var o=a.props,u=o.isActive,s=o.attributeName,c=o.from,f=o.to,l=o.steps,h=o.children,p=o.duration;if(a.handleStyleChange=a.handleStyleChange.bind(ff(a)),a.changeStyle=a.changeStyle.bind(ff(a)),!u||p<=0)return a.state={style:{}},typeof h=="function"&&(a.state={style:f}),lf(a);if(l&&l.length)a.state={style:l[0].style};else if(c){if(typeof h=="function")return a.state={style:c},lf(a);a.state={style:s?vn({},s,c):c}}else a.state={style:{}};return a}return eI(r,[{key:"componentDidMount",value:function(){var i=this.props,a=i.isActive,o=i.canBegin;this.mounted=!0,!(!a||!o)&&this.runAnimation(this.props)}},{key:"componentDidUpdate",value:function(i){var a=this.props,o=a.isActive,u=a.canBegin,s=a.attributeName,c=a.shouldReAnimate,f=a.to,l=a.from,h=this.state.style;if(u){if(!o){var p={style:s?vn({},s,f):f};this.state&&h&&(s&&h[s]!==f||!s&&h!==f)&&this.setState(p);return}if(!(lC(i.to,f)&&i.canBegin&&i.isActive)){var y=!i.canBegin||!i.isActive;this.manager&&this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation();var v=y||c?l:i.to;if(this.state&&h){var d={style:s?vn({},s,v):v};(s&&h[s]!==v||!s&&h!==v)&&this.setState(d)}this.runAnimation(et(et({},this.props),{},{from:v,begin:0}))}}}},{key:"componentWillUnmount",value:function(){this.mounted=!1;var i=this.props.onAnimationEnd;this.unSubscribe&&this.unSubscribe(),this.manager&&(this.manager.stop(),this.manager=null),this.stopJSAnimation&&this.stopJSAnimation(),i&&i()}},{key:"handleStyleChange",value:function(i){this.changeStyle(i)}},{key:"changeStyle",value:function(i){this.mounted&&this.setState({style:i})}},{key:"runJSAnimation",value:function(i){var a=this,o=i.from,u=i.to,s=i.duration,c=i.easing,f=i.begin,l=i.onAnimationEnd,h=i.onAnimationStart,p=WC(o,u,IC(c),s,this.changeStyle),y=function(){a.stopJSAnimation=p()};this.manager.start([h,f,y,s,l])}},{key:"runStepAnimation",value:function(i){var a=this,o=i.steps,u=i.begin,s=i.onAnimationStart,c=o[0],f=c.style,l=c.duration,h=l===void 0?0:l,p=function(v,d,g){if(g===0)return v;var x=d.duration,w=d.easing,O=w===void 0?"ease":w,m=d.style,b=d.properties,_=d.onAnimationEnd,S=g>0?o[g-1]:d,P=b||Object.keys(m);if(typeof O=="function"||O==="spring")return[].concat(Uc(v),[a.runJSAnimation.bind(a,{from:S.style,to:m,duration:x,easing:O}),x]);var $=cg(P,x,O),j=et(et(et({},S.style),m),{},{transition:$});return[].concat(Uc(v),[j,x,_]).filter(wC)};return this.manager.start([s].concat(Uc(o.reduce(p,[f,Math.max(h,u)])),[i.onAnimationEnd]))}},{key:"runAnimation",value:function(i){this.manager||(this.manager=mC());var a=i.begin,o=i.duration,u=i.attributeName,s=i.to,c=i.easing,f=i.onAnimationStart,l=i.onAnimationEnd,h=i.steps,p=i.children,y=this.manager;if(this.unSubscribe=y.subscribe(this.handleStyleChange),typeof c=="function"||typeof p=="function"||c==="spring"){this.runJSAnimation(i);return}if(h.length>1){this.runStepAnimation(i);return}var v=u?vn({},u,s):s,d=cg(Object.keys(v),o,c);y.start([f,a,et(et({},v),{},{transition:d}),o,l])}},{key:"render",value:function(){var i=this.props,a=i.children;i.begin;var o=i.duration;i.attributeName,i.easing;var u=i.isActive;i.steps,i.from,i.to,i.canBegin,i.onAnimationEnd,i.shouldReAnimate,i.onAnimationReStart;var s=KC(i,HC),c=N.Children.count(a),f=this.state.style;if(typeof a=="function")return a(f);if(!u||c===0||o<=0)return a;var l=function(p){var y=p.props,v=y.style,d=v===void 0?{}:v,g=y.className,x=N.cloneElement(p,et(et({},s),{},{style:et(et({},d),f),className:g}));return x};return c===1?l(N.Children.only(a)):A.createElement("div",null,N.Children.map(a,function(h){return l(h)}))}}]),r})(N.PureComponent);wt.displayName="Animate";wt.defaultProps={begin:0,duration:1e3,from:"",to:"",attributeName:"",easing:"ease",isActive:!0,canBegin:!0,steps:[],onAnimationEnd:function(){},onAnimationStart:function(){}};wt.propTypes={from:ie.oneOfType([ie.object,ie.string]),to:ie.oneOfType([ie.object,ie.string]),attributeName:ie.string,duration:ie.number,begin:ie.number,easing:ie.oneOfType([ie.string,ie.func]),steps:ie.arrayOf(ie.shape({duration:ie.number.isRequired,style:ie.object.isRequired,easing:ie.oneOfType([ie.oneOf(["ease","ease-in","ease-out","ease-in-out","linear"]),ie.func]),properties:ie.arrayOf("string"),onAnimationEnd:ie.func})),children:ie.oneOfType([ie.node,ie.func]),isActive:ie.bool,canBegin:ie.bool,onAnimationEnd:ie.func,shouldReAnimate:ie.bool,onAnimationStart:ie.func,onAnimationReStart:ie.func};function Kn(e){"@babel/helpers - typeof";return Kn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Kn(e)}function ua(){return ua=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0?1:-1,s=n>=0?1:-1,c=i>=0&&n>=0||i<0&&n<0?1:0,f;if(o>0&&a instanceof Array){for(var l=[0,0,0,0],h=0,p=4;ho?o:a[h];f="M".concat(t,",").concat(r+u*l[0]),l[0]>0&&(f+="A ".concat(l[0],",").concat(l[0],",0,0,").concat(c,",").concat(t+s*l[0],",").concat(r)),f+="L ".concat(t+n-s*l[1],",").concat(r),l[1]>0&&(f+="A ".concat(l[1],",").concat(l[1],",0,0,").concat(c,`, + `).concat(t+n,",").concat(r+u*l[1])),f+="L ".concat(t+n,",").concat(r+i-u*l[2]),l[2]>0&&(f+="A ".concat(l[2],",").concat(l[2],",0,0,").concat(c,`, + `).concat(t+n-s*l[2],",").concat(r+i)),f+="L ".concat(t+s*l[3],",").concat(r+i),l[3]>0&&(f+="A ".concat(l[3],",").concat(l[3],",0,0,").concat(c,`, + `).concat(t,",").concat(r+i-u*l[3])),f+="Z"}else if(o>0&&a===+a&&a>0){var y=Math.min(o,a);f="M ".concat(t,",").concat(r+u*y,` + A `).concat(y,",").concat(y,",0,0,").concat(c,",").concat(t+s*y,",").concat(r,` + L `).concat(t+n-s*y,",").concat(r,` + A `).concat(y,",").concat(y,",0,0,").concat(c,",").concat(t+n,",").concat(r+u*y,` + L `).concat(t+n,",").concat(r+i-u*y,` + A `).concat(y,",").concat(y,",0,0,").concat(c,",").concat(t+n-s*y,",").concat(r+i,` + L `).concat(t+s*y,",").concat(r+i,` + A `).concat(y,",").concat(y,",0,0,").concat(c,",").concat(t,",").concat(r+i-u*y," Z")}else f="M ".concat(t,",").concat(r," h ").concat(n," v ").concat(i," h ").concat(-n," Z");return f},dI=function(t,r){if(!t||!r)return!1;var n=t.x,i=t.y,a=r.x,o=r.y,u=r.width,s=r.height;if(Math.abs(u)>0&&Math.abs(s)>0){var c=Math.min(a,a+u),f=Math.max(a,a+u),l=Math.min(o,o+s),h=Math.max(o,o+s);return n>=c&&n<=f&&i>=l&&i<=h}return!1},pI={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},$h=function(t){var r=mg(mg({},pI),t),n=N.useRef(),i=N.useState(-1),a=aI(i,2),o=a[0],u=a[1];N.useEffect(function(){if(n.current&&n.current.getTotalLength)try{var O=n.current.getTotalLength();O&&u(O)}catch{}},[]);var s=r.x,c=r.y,f=r.width,l=r.height,h=r.radius,p=r.className,y=r.animationEasing,v=r.animationDuration,d=r.animationBegin,g=r.isAnimationActive,x=r.isUpdateAnimationActive;if(s!==+s||c!==+c||f!==+f||l!==+l||f===0||l===0)return null;var w=Q("recharts-rectangle",p);return x?A.createElement(wt,{canBegin:o>0,from:{width:f,height:l,x:s,y:c},to:{width:f,height:l,x:s,y:c},duration:v,animationEasing:y,isActive:x},function(O){var m=O.width,b=O.height,_=O.x,S=O.y;return A.createElement(wt,{canBegin:o>0,from:"0px ".concat(o===-1?1:o,"px"),to:"".concat(o,"px 0px"),attributeName:"strokeDasharray",begin:d,duration:v,isActive:g,easing:y},A.createElement("path",ua({},X(r,!0),{className:w,d:gg(_,S,m,b,h),ref:n})))}):A.createElement("path",ua({},X(r,!0),{className:w,d:gg(s,c,f,l,h)}))},vI=["points","className","baseLinePoints","connectNulls"];function yr(){return yr=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function mI(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function bg(e){return wI(e)||xI(e)||bI(e)||gI()}function gI(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function bI(e,t){if(e){if(typeof e=="string")return hf(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return hf(e,t)}}function xI(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function wI(e){if(Array.isArray(e))return hf(e)}function hf(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&arguments[0]!==void 0?arguments[0]:[],r=[[]];return t.forEach(function(n){xg(n)?r[r.length-1].push(n):r[r.length-1].length>0&&r.push([])}),xg(t[0])&&r[r.length-1].push(t[0]),r[r.length-1].length<=0&&(r=r.slice(0,-1)),r},xn=function(t,r){var n=OI(t);r&&(n=[n.reduce(function(a,o){return[].concat(bg(a),bg(o))},[])]);var i=n.map(function(a){return a.reduce(function(o,u,s){return"".concat(o).concat(s===0?"M":"L").concat(u.x,",").concat(u.y)},"")}).join("");return n.length===1?"".concat(i,"Z"):i},_I=function(t,r,n){var i=xn(t,n);return"".concat(i.slice(-1)==="Z"?i.slice(0,-1):i,"L").concat(xn(r.reverse(),n).slice(1))},SI=function(t){var r=t.points,n=t.className,i=t.baseLinePoints,a=t.connectNulls,o=yI(t,vI);if(!r||!r.length)return null;var u=Q("recharts-polygon",n);if(i&&i.length){var s=o.stroke&&o.stroke!=="none",c=_I(r,i,a);return A.createElement("g",{className:u},A.createElement("path",yr({},X(o,!0),{fill:c.slice(-1)==="Z"?o.fill:"none",stroke:"none",d:c})),s?A.createElement("path",yr({},X(o,!0),{fill:"none",d:xn(r,a)})):null,s?A.createElement("path",yr({},X(o,!0),{fill:"none",d:xn(i,a)})):null)}var f=xn(r,a);return A.createElement("path",yr({},X(o,!0),{fill:f.slice(-1)==="Z"?o.fill:"none",className:u,d:f}))};function df(){return df=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function $I(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var CI=function(t,r,n,i,a,o){return"M".concat(t,",").concat(a,"v").concat(i,"M").concat(o,",").concat(r,"h").concat(n)},II=function(t){var r=t.x,n=r===void 0?0:r,i=t.y,a=i===void 0?0:i,o=t.top,u=o===void 0?0:o,s=t.left,c=s===void 0?0:s,f=t.width,l=f===void 0?0:f,h=t.height,p=h===void 0?0:h,y=t.className,v=MI(t,AI),d=PI({x:n,y:a,top:u,left:c,width:l,height:p},v);return!L(n)||!L(a)||!L(l)||!L(p)||!L(u)||!L(c)?null:A.createElement("path",pf({},X(d,!0),{className:Q("recharts-cross",y),d:CI(n,a,l,p,u,c)}))},Wc,Og;function kI(){if(Og)return Wc;Og=1;var e=Ga(),t=bx(),r=lt();function n(i,a){return i&&i.length?e(i,r(a,2),t):void 0}return Wc=n,Wc}var NI=kI();const RI=ue(NI);var Hc,_g;function DI(){if(_g)return Hc;_g=1;var e=Ga(),t=lt(),r=xx();function n(i,a){return i&&i.length?e(i,t(a,2),r):void 0}return Hc=n,Hc}var qI=DI();const LI=ue(qI);var BI=["cx","cy","angle","ticks","axisLine"],FI=["ticks","tick","angle","tickFormatter","stroke"];function Ir(e){"@babel/helpers - typeof";return Ir=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ir(e)}function wn(){return wn=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function zI(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function UI(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Pg(e,t){for(var r=0;rEg?o=i==="outer"?"start":"end":a<-Eg?o=i==="outer"?"end":"start":o="middle",o}},{key:"renderAxisLine",value:function(){var n=this.props,i=n.cx,a=n.cy,o=n.radius,u=n.axisLine,s=n.axisLineType,c=Ut(Ut({},X(this.props,!1)),{},{fill:"none"},X(u,!1));if(s==="circle")return A.createElement(Ch,Kt({className:"recharts-polar-angle-axis-line"},c,{cx:i,cy:a,r:o}));var f=this.props.ticks,l=f.map(function(h){return fe(i,a,o,h.coordinate)});return A.createElement(SI,Kt({className:"recharts-polar-angle-axis-line"},c,{points:l}))}},{key:"renderTicks",value:function(){var n=this,i=this.props,a=i.ticks,o=i.tick,u=i.tickLine,s=i.tickFormatter,c=i.stroke,f=X(this.props,!1),l=X(o,!1),h=Ut(Ut({},f),{},{fill:"none"},X(u,!1)),p=a.map(function(y,v){var d=n.getTickLineCoord(y),g=n.getTickTextAnchor(y),x=Ut(Ut(Ut({textAnchor:g},f),{},{stroke:"none",fill:c},l),{},{index:v,payload:y,x:d.x2,y:d.y2});return A.createElement(ae,Kt({className:Q("recharts-polar-angle-axis-tick",Vx(o)),key:"tick-".concat(y.coordinate)},tr(n.props,y,v)),u&&A.createElement("line",Kt({className:"recharts-polar-angle-axis-tick-line"},h,d)),o&&t.renderTickItem(o,x,s?s(y.value,v):y.value))});return A.createElement(ae,{className:"recharts-polar-angle-axis-ticks"},p)}},{key:"render",value:function(){var n=this.props,i=n.ticks,a=n.radius,o=n.axisLine;return a<=0||!i||!i.length?null:A.createElement(ae,{className:Q("recharts-polar-angle-axis",this.props.className)},o&&this.renderAxisLine(),this.renderTicks())}}],[{key:"renderTickItem",value:function(n,i,a){var o;return A.isValidElement(n)?o=A.cloneElement(n,i):Y(n)?o=n(i):o=A.createElement(rr,Kt({},i,{className:"recharts-polar-angle-axis-tick-value"}),a),o}}])})(N.PureComponent);ro(no,"displayName","PolarAngleAxis");ro(no,"axisType","angleAxis");ro(no,"defaultProps",{type:"category",angleAxisId:0,scale:"auto",cx:0,cy:0,orientation:"outer",axisLine:!0,tickLine:!0,tickSize:8,tick:!0,hide:!1,allowDuplicatedCategory:!0});var Kc,Mg;function ik(){if(Mg)return Kc;Mg=1;var e=b0(),t=e(Object.getPrototypeOf,Object);return Kc=t,Kc}var Gc,$g;function ak(){if($g)return Gc;$g=1;var e=_t(),t=ik(),r=St(),n="[object Object]",i=Function.prototype,a=Object.prototype,o=i.toString,u=a.hasOwnProperty,s=o.call(Object);function c(f){if(!r(f)||e(f)!=n)return!1;var l=t(f);if(l===null)return!0;var h=u.call(l,"constructor")&&l.constructor;return typeof h=="function"&&h instanceof h&&o.call(h)==s}return Gc=c,Gc}var ok=ak();const uk=ue(ok);var Vc,Cg;function sk(){if(Cg)return Vc;Cg=1;var e=_t(),t=St(),r="[object Boolean]";function n(i){return i===!0||i===!1||t(i)&&e(i)==r}return Vc=n,Vc}var ck=sk();const lk=ue(ck);function Vn(e){"@babel/helpers - typeof";return Vn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Vn(e)}function la(){return la=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r0,from:{upperWidth:0,lowerWidth:0,height:h,x:s,y:c},to:{upperWidth:f,lowerWidth:l,height:h,x:s,y:c},duration:v,animationEasing:y,isActive:g},function(w){var O=w.upperWidth,m=w.lowerWidth,b=w.height,_=w.x,S=w.y;return A.createElement(wt,{canBegin:o>0,from:"0px ".concat(o===-1?1:o,"px"),to:"".concat(o,"px 0px"),attributeName:"strokeDasharray",begin:d,duration:v,easing:y},A.createElement("path",la({},X(r,!0),{className:x,d:Rg(_,S,O,m,b),ref:n})))}):A.createElement("g",null,A.createElement("path",la({},X(r,!0),{className:x,d:Rg(s,c,f,l,h)})))},wk=["option","shapeType","propTransformer","activeClassName","isActive"];function Xn(e){"@babel/helpers - typeof";return Xn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xn(e)}function Ok(e,t){if(e==null)return{};var r=_k(e,t),n,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function _k(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function Dg(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function fa(e){for(var t=1;t0?He(w,"paddingAngle",0):0;if(m){var _=jt(m.endAngle-m.startAngle,w.endAngle-w.startAngle),S=ce(ce({},w),{},{startAngle:x+b,endAngle:x+_(v)+b});d.push(S),x=S.endAngle}else{var P=w.endAngle,$=w.startAngle,j=jt(0,P-$),T=j(v),M=ce(ce({},w),{},{startAngle:x+b,endAngle:x+T+b});d.push(M),x=M.endAngle}}),A.createElement(ae,null,n.renderSectorsStatically(d))})}},{key:"attachKeyboardHandlers",value:function(n){var i=this;n.onkeydown=function(a){if(!a.altKey)switch(a.key){case"ArrowLeft":{var o=++i.state.sectorToFocus%i.sectorRefs.length;i.sectorRefs[o].focus(),i.setState({sectorToFocus:o});break}case"ArrowRight":{var u=--i.state.sectorToFocus<0?i.sectorRefs.length-1:i.state.sectorToFocus%i.sectorRefs.length;i.sectorRefs[u].focus(),i.setState({sectorToFocus:u});break}case"Escape":{i.sectorRefs[i.state.sectorToFocus].blur(),i.setState({sectorToFocus:0});break}}}}},{key:"renderSectors",value:function(){var n=this.props,i=n.sectors,a=n.isAnimationActive,o=this.state.prevSectors;return a&&i&&i.length&&(!o||!Ya(o,i))?this.renderSectorsWithAnimation():this.renderSectorsStatically(i)}},{key:"componentDidMount",value:function(){this.pieRef&&this.attachKeyboardHandlers(this.pieRef)}},{key:"render",value:function(){var n=this,i=this.props,a=i.hide,o=i.sectors,u=i.className,s=i.label,c=i.cx,f=i.cy,l=i.innerRadius,h=i.outerRadius,p=i.isAnimationActive,y=this.state.isAnimationFinished;if(a||!o||!o.length||!L(c)||!L(f)||!L(l)||!L(h))return null;var v=Q("recharts-pie",u);return A.createElement(ae,{tabIndex:this.props.rootTabIndex,className:v,ref:function(g){n.pieRef=g}},this.renderSectors(),s&&this.renderLabels(o),Te.renderCallByParent(this.props,null,!1),(!p||y)&&It.renderCallByParent(this.props,o,!1))}}],[{key:"getDerivedStateFromProps",value:function(n,i){return i.prevIsAnimationActive!==n.isAnimationActive?{prevIsAnimationActive:n.isAnimationActive,prevAnimationId:n.animationId,curSectors:n.sectors,prevSectors:[],isAnimationFinished:!0}:n.isAnimationActive&&n.animationId!==i.prevAnimationId?{prevAnimationId:n.animationId,curSectors:n.sectors,prevSectors:i.curSectors,isAnimationFinished:!0}:n.sectors!==i.curSectors?{curSectors:n.sectors,isAnimationFinished:!0}:null}},{key:"getTextAnchor",value:function(n,i){return n>i?"start":n=360?x:x-1)*s,O=d-x*p-w,m=i.reduce(function(S,P){var $=Ce(P,g,0);return S+(L($)?$:0)},0),b;if(m>0){var _;b=i.map(function(S,P){var $=Ce(S,g,0),j=Ce(S,f,P),T=(L($)?$:0)/m,M;P?M=_.endAngle+Ie(v)*s*($!==0?1:0):M=o;var I=M+Ie(v)*(($!==0?p:0)+T*O),C=(M+I)/2,R=(y.innerRadius+y.outerRadius)/2,D=[{name:j,value:$,payload:S,dataKey:g,type:h}],B=fe(y.cx,y.cy,R,C);return _=ce(ce(ce({percent:T,cornerRadius:a,name:j,tooltipPayload:D,midAngle:C,middleRadius:R,tooltipPosition:B},S),y),{},{value:Ce(S,g),startAngle:M,endAngle:I,payload:S,paddingAngle:Ie(v)*s}),_})}return ce(ce({},y),{},{sectors:b,data:i})});var Xc,Fg;function Wk(){if(Fg)return Xc;Fg=1;var e=Math.ceil,t=Math.max;function r(n,i,a,o){for(var u=-1,s=t(e((i-n)/(a||1)),0),c=Array(s);s--;)c[o?s:++u]=n,n+=a;return c}return Xc=r,Xc}var Yc,zg;function hw(){if(zg)return Yc;zg=1;var e=N0(),t=1/0,r=17976931348623157e292;function n(i){if(!i)return i===0?i:0;if(i=e(i),i===t||i===-t){var a=i<0?-1:1;return a*r}return i===i?i:0}return Yc=n,Yc}var Zc,Ug;function Hk(){if(Ug)return Zc;Ug=1;var e=Wk(),t=La(),r=hw();function n(i){return function(a,o,u){return u&&typeof u!="number"&&t(a,o,u)&&(o=u=void 0),a=r(a),o===void 0?(o=a,a=0):o=r(o),u=u===void 0?a0&&n.handleDrag(i.changedTouches[0])}),Fe(n,"handleDragEnd",function(){n.setState({isTravellerMoving:!1,isSlideMoving:!1},function(){var i=n.props,a=i.endIndex,o=i.onDragEnd,u=i.startIndex;o==null||o({endIndex:a,startIndex:u})}),n.detachDragEndListener()}),Fe(n,"handleLeaveWrapper",function(){(n.state.isTravellerMoving||n.state.isSlideMoving)&&(n.leaveTimer=window.setTimeout(n.handleDragEnd,n.props.leaveTimeOut))}),Fe(n,"handleEnterSlideOrTraveller",function(){n.setState({isTextActive:!0})}),Fe(n,"handleLeaveSlideOrTraveller",function(){n.setState({isTextActive:!1})}),Fe(n,"handleSlideDragStart",function(i){var a=Xg(i)?i.changedTouches[0]:i;n.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:a.pageX}),n.attachDragEndListener()}),n.travellerDragStartHandlers={startX:n.handleTravellerDragStart.bind(n,"startX"),endX:n.handleTravellerDragStart.bind(n,"endX")},n.state={},n}return nN(t,e),Qk(t,[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(n){var i=n.startX,a=n.endX,o=this.state.scaleValues,u=this.props,s=u.gap,c=u.data,f=c.length-1,l=Math.min(i,a),h=Math.max(i,a),p=t.getIndexInRange(o,l),y=t.getIndexInRange(o,h);return{startIndex:p-p%s,endIndex:y===f?f:y-y%s}}},{key:"getTextOfTick",value:function(n){var i=this.props,a=i.data,o=i.tickFormatter,u=i.dataKey,s=Ce(a[n],u,n);return Y(o)?o(s,n):s}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(n){var i=this.state,a=i.slideMoveStartX,o=i.startX,u=i.endX,s=this.props,c=s.x,f=s.width,l=s.travellerWidth,h=s.startIndex,p=s.endIndex,y=s.onChange,v=n.pageX-a;v>0?v=Math.min(v,c+f-l-u,c+f-l-o):v<0&&(v=Math.max(v,c-o,c-u));var d=this.getIndex({startX:o+v,endX:u+v});(d.startIndex!==h||d.endIndex!==p)&&y&&y(d),this.setState({startX:o+v,endX:u+v,slideMoveStartX:n.pageX})}},{key:"handleTravellerDragStart",value:function(n,i){var a=Xg(i)?i.changedTouches[0]:i;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:n,brushMoveStartX:a.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(n){var i=this.state,a=i.brushMoveStartX,o=i.movingTravellerId,u=i.endX,s=i.startX,c=this.state[o],f=this.props,l=f.x,h=f.width,p=f.travellerWidth,y=f.onChange,v=f.gap,d=f.data,g={startX:this.state.startX,endX:this.state.endX},x=n.pageX-a;x>0?x=Math.min(x,l+h-p-c):x<0&&(x=Math.max(x,l-c)),g[o]=c+x;var w=this.getIndex(g),O=w.startIndex,m=w.endIndex,b=function(){var S=d.length-1;return o==="startX"&&(u>s?O%v===0:m%v===0)||us?m%v===0:O%v===0)||u>s&&m===S};this.setState(Fe(Fe({},o,c+x),"brushMoveStartX",n.pageX),function(){y&&b()&&y(w)})}},{key:"handleTravellerMoveKeyboard",value:function(n,i){var a=this,o=this.state,u=o.scaleValues,s=o.startX,c=o.endX,f=this.state[i],l=u.indexOf(f);if(l!==-1){var h=l+n;if(!(h===-1||h>=u.length)){var p=u[h];i==="startX"&&p>=c||i==="endX"&&p<=s||this.setState(Fe({},i,p),function(){a.props.onChange(a.getIndex({startX:a.state.startX,endX:a.state.endX}))})}}}},{key:"renderBackground",value:function(){var n=this.props,i=n.x,a=n.y,o=n.width,u=n.height,s=n.fill,c=n.stroke;return A.createElement("rect",{stroke:c,fill:s,x:i,y:a,width:o,height:u})}},{key:"renderPanorama",value:function(){var n=this.props,i=n.x,a=n.y,o=n.width,u=n.height,s=n.data,c=n.children,f=n.padding,l=N.Children.only(c);return l?A.cloneElement(l,{x:i,y:a,width:o,height:u,margin:f,compact:!0,data:s}):null}},{key:"renderTravellerLayer",value:function(n,i){var a,o,u=this,s=this.props,c=s.y,f=s.travellerWidth,l=s.height,h=s.traveller,p=s.ariaLabel,y=s.data,v=s.startIndex,d=s.endIndex,g=Math.max(n,this.props.x),x=Qc(Qc({},X(this.props,!1)),{},{x:g,y:c,width:f,height:l}),w=p||"Min value: ".concat((a=y[v])===null||a===void 0?void 0:a.name,", Max value: ").concat((o=y[d])===null||o===void 0?void 0:o.name);return A.createElement(ae,{tabIndex:0,role:"slider","aria-label":w,"aria-valuenow":n,className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[i],onTouchStart:this.travellerDragStartHandlers[i],onKeyDown:function(m){["ArrowLeft","ArrowRight"].includes(m.key)&&(m.preventDefault(),m.stopPropagation(),u.handleTravellerMoveKeyboard(m.key==="ArrowRight"?1:-1,i))},onFocus:function(){u.setState({isTravellerFocused:!0})},onBlur:function(){u.setState({isTravellerFocused:!1})},style:{cursor:"col-resize"}},t.renderTraveller(h,x))}},{key:"renderSlide",value:function(n,i){var a=this.props,o=a.y,u=a.height,s=a.stroke,c=a.travellerWidth,f=Math.min(n,i)+c,l=Math.max(Math.abs(i-n)-c,0);return A.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:s,fillOpacity:.2,x:f,y:o,width:l,height:u})}},{key:"renderText",value:function(){var n=this.props,i=n.startIndex,a=n.endIndex,o=n.y,u=n.height,s=n.travellerWidth,c=n.stroke,f=this.state,l=f.startX,h=f.endX,p=5,y={pointerEvents:"none",fill:c};return A.createElement(ae,{className:"recharts-brush-texts"},A.createElement(rr,pa({textAnchor:"end",verticalAnchor:"middle",x:Math.min(l,h)-p,y:o+u/2},y),this.getTextOfTick(i)),A.createElement(rr,pa({textAnchor:"start",verticalAnchor:"middle",x:Math.max(l,h)+s+p,y:o+u/2},y),this.getTextOfTick(a)))}},{key:"render",value:function(){var n=this.props,i=n.data,a=n.className,o=n.children,u=n.x,s=n.y,c=n.width,f=n.height,l=n.alwaysShowText,h=this.state,p=h.startX,y=h.endX,v=h.isTextActive,d=h.isSlideMoving,g=h.isTravellerMoving,x=h.isTravellerFocused;if(!i||!i.length||!L(u)||!L(s)||!L(c)||!L(f)||c<=0||f<=0)return null;var w=Q("recharts-brush",a),O=A.Children.count(o)===1,m=Zk("userSelect","none");return A.createElement(ae,{className:w,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:m},this.renderBackground(),O&&this.renderPanorama(),this.renderSlide(p,y),this.renderTravellerLayer(p,"startX"),this.renderTravellerLayer(y,"endX"),(v||d||g||x||l)&&this.renderText())}}],[{key:"renderDefaultTraveller",value:function(n){var i=n.x,a=n.y,o=n.width,u=n.height,s=n.stroke,c=Math.floor(a+u/2)-1;return A.createElement(A.Fragment,null,A.createElement("rect",{x:i,y:a,width:o,height:u,fill:s,stroke:"none"}),A.createElement("line",{x1:i+1,y1:c,x2:i+o-1,y2:c,fill:"none",stroke:"#fff"}),A.createElement("line",{x1:i+1,y1:c+2,x2:i+o-1,y2:c+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(n,i){var a;return A.isValidElement(n)?a=A.cloneElement(n,i):Y(n)?a=n(i):a=t.renderDefaultTraveller(i),a}},{key:"getDerivedStateFromProps",value:function(n,i){var a=n.data,o=n.width,u=n.x,s=n.travellerWidth,c=n.updateId,f=n.startIndex,l=n.endIndex;if(a!==i.prevData||c!==i.prevUpdateId)return Qc({prevData:a,prevTravellerWidth:s,prevUpdateId:c,prevX:u,prevWidth:o},a&&a.length?aN({data:a,width:o,x:u,travellerWidth:s,startIndex:f,endIndex:l}):{scale:null,scaleValues:null});if(i.scale&&(o!==i.prevWidth||u!==i.prevX||s!==i.prevTravellerWidth)){i.scale.range([u,u+o-s]);var h=i.scale.domain().map(function(p){return i.scale(p)});return{prevData:a,prevTravellerWidth:s,prevUpdateId:c,prevX:u,prevWidth:o,startX:i.scale(n.startIndex),endX:i.scale(n.endIndex),scaleValues:h}}return null}},{key:"getIndexInRange",value:function(n,i){for(var a=n.length,o=0,u=a-1;u-o>1;){var s=Math.floor((o+u)/2);n[s]>i?u=s:o=s}return i>=n[u]?u:o}}])})(N.PureComponent);Fe(Dr,"displayName","Brush");Fe(Dr,"defaultProps",{height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1});var el,Yg;function oN(){if(Yg)return el;Yg=1;var e=nh();function t(r,n){var i;return e(r,function(a,o,u){return i=n(a,o,u),!i}),!!i}return el=t,el}var tl,Zg;function uN(){if(Zg)return tl;Zg=1;var e=h0(),t=lt(),r=oN(),n=Le(),i=La();function a(o,u,s){var c=n(o)?e:r;return s&&i(o,u,s)&&(u=void 0),c(o,t(u,3))}return tl=a,tl}var sN=uN();const cN=ue(sN);var ut=function(t,r){var n=t.alwaysShow,i=t.ifOverflow;return n&&(i="extendDomain"),i===r},rl,Jg;function lN(){if(Jg)return rl;Jg=1;var e=M0();function t(r,n,i){n=="__proto__"&&e?e(r,n,{configurable:!0,enumerable:!0,value:i,writable:!0}):r[n]=i}return rl=t,rl}var nl,Qg;function fN(){if(Qg)return nl;Qg=1;var e=lN(),t=j0(),r=lt();function n(i,a){var o={};return a=r(a,3),t(i,function(u,s,c){e(o,s,a(u,s,c))}),o}return nl=n,nl}var hN=fN();const dN=ue(hN);var il,eb;function pN(){if(eb)return il;eb=1;function e(t,r){for(var n=-1,i=t==null?0:t.length;++n=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function _N(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function SN(e,t){var r=e.x,n=e.y,i=ON(e,gN),a="".concat(r),o=parseInt(a,10),u="".concat(n),s=parseInt(u,10),c="".concat(t.height||i.height),f=parseInt(c,10),l="".concat(t.width||i.width),h=parseInt(l,10);return hn(hn(hn(hn(hn({},t),i),o?{x:o}:{}),s?{y:s}:{}),{},{height:f,width:h,name:t.name,radius:t.radius})}function ib(e){return A.createElement(cw,bf({shapeType:"rectangle",propTransformer:SN,activeClassName:"recharts-active-bar"},e))}var AN=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return function(n,i){if(typeof t=="number")return t;var a=L(n)||KO(n);return a?t(n,i):(a||ir(),r)}},PN=["value","background"],mw;function qr(e){"@babel/helpers - typeof";return qr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qr(e)}function TN(e,t){if(e==null)return{};var r=jN(e,t),n,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function jN(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function ya(){return ya=Object.assign?Object.assign.bind():function(e){for(var t=1;t0&&Math.abs(C)0&&Math.abs(I)0&&(M=Math.min((he||0)-(I[me-1]||0),M))}),Number.isFinite(M)){var C=M/T,R=v.layout==="vertical"?n.height:n.width;if(v.padding==="gap"&&(_=C*R/2),v.padding==="no-gap"){var D=ke(t.barCategoryGap,C*R),B=C*R/2;_=B-D-(B-D)/R*D}}}i==="xAxis"?S=[n.left+(w.left||0)+(_||0),n.left+n.width-(w.right||0)-(_||0)]:i==="yAxis"?S=s==="horizontal"?[n.top+n.height-(w.bottom||0),n.top+(w.top||0)]:[n.top+(w.top||0)+(_||0),n.top+n.height-(w.bottom||0)-(_||0)]:S=v.range,m&&(S=[S[1],S[0]]);var F=Fx(v,a,h),H=F.scale,G=F.realScaleType;H.domain(g).range(S),zx(H);var U=Ux(H,tt(tt({},v),{},{realScaleType:G}));i==="xAxis"?(j=d==="top"&&!O||d==="bottom"&&O,P=n.left,$=l[b]-j*v.height):i==="yAxis"&&(j=d==="left"&&!O||d==="right"&&O,P=l[b]-j*v.width,$=n.top);var V=tt(tt(tt({},v),U),{},{realScaleType:G,x:P,y:$,scale:H,width:i==="xAxis"?n.width:v.width,height:i==="yAxis"?n.height:v.height});return V.bandSize=ea(V,U),!v.hide&&i==="xAxis"?l[b]+=(j?-1:1)*V.height:v.hide||(l[b]+=(j?-1:1)*V.width),tt(tt({},p),{},oo({},y,V))},{})},ww=function(t,r){var n=t.x,i=t.y,a=r.x,o=r.y;return{x:Math.min(n,a),y:Math.min(i,o),width:Math.abs(a-n),height:Math.abs(o-i)}},BN=function(t){var r=t.x1,n=t.y1,i=t.x2,a=t.y2;return ww({x:r,y:n},{x:i,y:a})},Ow=(function(){function e(t){RN(this,e),this.scale=t}return DN(e,[{key:"domain",get:function(){return this.scale.domain}},{key:"range",get:function(){return this.scale.range}},{key:"rangeMin",get:function(){return this.range()[0]}},{key:"rangeMax",get:function(){return this.range()[1]}},{key:"bandwidth",get:function(){return this.scale.bandwidth}},{key:"apply",value:function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.bandAware,a=n.position;if(r!==void 0){if(a)switch(a){case"start":return this.scale(r);case"middle":{var o=this.bandwidth?this.bandwidth()/2:0;return this.scale(r)+o}case"end":{var u=this.bandwidth?this.bandwidth():0;return this.scale(r)+u}default:return this.scale(r)}if(i){var s=this.bandwidth?this.bandwidth()/2:0;return this.scale(r)+s}return this.scale(r)}}},{key:"isInRange",value:function(r){var n=this.range(),i=n[0],a=n[n.length-1];return i<=a?r>=i&&r<=a:r>=a&&r<=i}}],[{key:"create",value:function(r){return new e(r)}}])})();oo(Ow,"EPS",1e-4);var Ih=function(t){var r=Object.keys(t).reduce(function(n,i){return tt(tt({},n),{},oo({},i,Ow.create(t[i])))},{});return tt(tt({},r),{},{apply:function(i){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=a.bandAware,u=a.position;return dN(i,function(s,c){return r[c].apply(s,{bandAware:o,position:u})})},isInRange:function(i){return yw(i,function(a,o){return r[o].isInRange(a)})}})};function FN(e){return(e%180+180)%180}var zN=function(t){var r=t.width,n=t.height,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=FN(i),o=a*Math.PI/180,u=Math.atan(n/r),s=o>u&&o-1?s[c?a[f]:f]:void 0}}return ul=n,ul}var sl,lb;function WN(){if(lb)return sl;lb=1;var e=hw();function t(r){var n=e(r),i=n%1;return n===n?i?n-i:n:0}return sl=t,sl}var cl,fb;function HN(){if(fb)return cl;fb=1;var e=_0(),t=lt(),r=WN(),n=Math.max;function i(a,o,u){var s=a==null?0:a.length;if(!s)return-1;var c=u==null?0:r(u);return c<0&&(c=n(s+c,0)),e(a,t(o,3),c)}return cl=i,cl}var ll,hb;function KN(){if(hb)return ll;hb=1;var e=UN(),t=HN(),r=e(t);return ll=r,ll}var GN=KN();const VN=ue(GN);var XN=Lb();const YN=ue(XN);var ZN=YN(function(e){return{x:e.left,y:e.top,width:e.width,height:e.height}},function(e){return["l",e.left,"t",e.top,"w",e.width,"h",e.height].join("")}),kh=N.createContext(void 0),Nh=N.createContext(void 0),_w=N.createContext(void 0),Sw=N.createContext({}),Aw=N.createContext(void 0),Pw=N.createContext(0),Tw=N.createContext(0),db=function(t){var r=t.state,n=r.xAxisMap,i=r.yAxisMap,a=r.offset,o=t.clipPathId,u=t.children,s=t.width,c=t.height,f=ZN(a);return A.createElement(kh.Provider,{value:n},A.createElement(Nh.Provider,{value:i},A.createElement(Sw.Provider,{value:a},A.createElement(_w.Provider,{value:f},A.createElement(Aw.Provider,{value:o},A.createElement(Pw.Provider,{value:c},A.createElement(Tw.Provider,{value:s},u)))))))},JN=function(){return N.useContext(Aw)},jw=function(t){var r=N.useContext(kh);r==null&&ir();var n=r[t];return n==null&&ir(),n},QN=function(){var t=N.useContext(kh);return Mt(t)},eR=function(){var t=N.useContext(Nh),r=VN(t,function(n){return yw(n.domain,Number.isFinite)});return r||Mt(t)},Ew=function(t){var r=N.useContext(Nh);r==null&&ir();var n=r[t];return n==null&&ir(),n},tR=function(){var t=N.useContext(_w);return t},rR=function(){return N.useContext(Sw)},Rh=function(){return N.useContext(Tw)},Dh=function(){return N.useContext(Pw)};function Lr(e){"@babel/helpers - typeof";return Lr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Lr(e)}function nR(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function iR(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);re*i)return!1;var a=r();return e*(t-e*a/2-n)>=0&&e*(t+e*a/2-i)<=0}function LR(e,t){return Rw(e,t+1)}function BR(e,t,r,n,i){for(var a=(n||[]).slice(),o=t.start,u=t.end,s=0,c=1,f=o,l=function(){var y=n==null?void 0:n[s];if(y===void 0)return{v:Rw(n,c)};var v=s,d,g=function(){return d===void 0&&(d=r(y,v)),d},x=y.coordinate,w=s===0||wa(e,x,g,f,u);w||(s=0,f=o,c+=1),w&&(f=x+e*(g()/2+i),s+=c)},h;c<=a.length;)if(h=l(),h)return h.v;return[]}function ei(e){"@babel/helpers - typeof";return ei=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ei(e)}function wb(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Me(e){for(var t=1;t0?p.coordinate-d*e:p.coordinate})}else a[h]=p=Me(Me({},p),{},{tickCoord:p.coordinate});var g=wa(e,p.tickCoord,v,u,s);g&&(s=p.tickCoord-e*(v()/2+i),a[h]=Me(Me({},p),{},{isShow:!0}))},f=o-1;f>=0;f--)c(f);return a}function HR(e,t,r,n,i,a){var o=(n||[]).slice(),u=o.length,s=t.start,c=t.end;if(a){var f=n[u-1],l=r(f,u-1),h=e*(f.coordinate+e*l/2-c);o[u-1]=f=Me(Me({},f),{},{tickCoord:h>0?f.coordinate-h*e:f.coordinate});var p=wa(e,f.tickCoord,function(){return l},s,c);p&&(c=f.tickCoord-e*(l/2+i),o[u-1]=Me(Me({},f),{},{isShow:!0}))}for(var y=a?u-1:u,v=function(x){var w=o[x],O,m=function(){return O===void 0&&(O=r(w,x)),O};if(x===0){var b=e*(w.coordinate-e*m()/2-s);o[x]=w=Me(Me({},w),{},{tickCoord:b<0?w.coordinate-b*e:w.coordinate})}else o[x]=w=Me(Me({},w),{},{tickCoord:w.coordinate});var _=wa(e,w.tickCoord,m,s,c);_&&(s=w.tickCoord+e*(m()/2+i),o[x]=Me(Me({},w),{},{isShow:!0}))},d=0;d=2?Ie(i[1].coordinate-i[0].coordinate):1,g=qR(a,d,p);return s==="equidistantPreserveStart"?BR(d,g,v,i,o):(s==="preserveStart"||s==="preserveStartEnd"?h=HR(d,g,v,i,o,s==="preserveStartEnd"):h=WR(d,g,v,i,o),h.filter(function(x){return x.isShow}))}var KR=["viewBox"],GR=["viewBox"],VR=["ticks"];function zr(e){"@babel/helpers - typeof";return zr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},zr(e)}function gr(){return gr=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function XR(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function YR(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _b(e,t){for(var r=0;r0?s(this.props):s(p)),o<=0||u<=0||!y||!y.length?null:A.createElement(ae,{className:Q("recharts-cartesian-axis",c),ref:function(d){n.layerReference=d}},a&&this.renderAxisLine(),this.renderTicks(y,this.state.fontSize,this.state.letterSpacing),Te.renderCallByParent(this.props))}}],[{key:"renderTickItem",value:function(n,i,a){var o,u=Q(i.className,"recharts-cartesian-axis-tick-value");return A.isValidElement(n)?o=A.cloneElement(n,Oe(Oe({},i),{},{className:u})):Y(n)?o=n(Oe(Oe({},i),{},{className:u})):o=A.createElement(rr,gr({},i,{className:"recharts-cartesian-axis-tick-value"}),a),o}}])})(N.Component);Fh(rn,"displayName","CartesianAxis");Fh(rn,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var nD=["x1","y1","x2","y2","key"],iD=["offset"];function ar(e){"@babel/helpers - typeof";return ar=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ar(e)}function Sb(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $e(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function sD(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var cD=function(t){var r=t.fill;if(!r||r==="none")return null;var n=t.fillOpacity,i=t.x,a=t.y,o=t.width,u=t.height,s=t.ry;return A.createElement("rect",{x:i,y:a,ry:s,width:o,height:u,stroke:"none",fill:r,fillOpacity:n,className:"recharts-cartesian-grid-bg"})};function Lw(e,t){var r;if(A.isValidElement(e))r=A.cloneElement(e,t);else if(Y(e))r=e(t);else{var n=t.x1,i=t.y1,a=t.x2,o=t.y2,u=t.key,s=Ab(t,nD),c=X(s,!1);c.offset;var f=Ab(c,iD);r=A.createElement("line",Yt({},f,{x1:n,y1:i,x2:a,y2:o,fill:"none",key:u}))}return r}function lD(e){var t=e.x,r=e.width,n=e.horizontal,i=n===void 0?!0:n,a=e.horizontalPoints;if(!i||!a||!a.length)return null;var o=a.map(function(u,s){var c=$e($e({},e),{},{x1:t,y1:u,x2:t+r,y2:u,key:"line-".concat(s),index:s});return Lw(i,c)});return A.createElement("g",{className:"recharts-cartesian-grid-horizontal"},o)}function fD(e){var t=e.y,r=e.height,n=e.vertical,i=n===void 0?!0:n,a=e.verticalPoints;if(!i||!a||!a.length)return null;var o=a.map(function(u,s){var c=$e($e({},e),{},{x1:u,y1:t,x2:u,y2:t+r,key:"line-".concat(s),index:s});return Lw(i,c)});return A.createElement("g",{className:"recharts-cartesian-grid-vertical"},o)}function hD(e){var t=e.horizontalFill,r=e.fillOpacity,n=e.x,i=e.y,a=e.width,o=e.height,u=e.horizontalPoints,s=e.horizontal,c=s===void 0?!0:s;if(!c||!t||!t.length)return null;var f=u.map(function(h){return Math.round(h+i-i)}).sort(function(h,p){return h-p});i!==f[0]&&f.unshift(0);var l=f.map(function(h,p){var y=!f[p+1],v=y?i+o-h:f[p+1]-h;if(v<=0)return null;var d=p%t.length;return A.createElement("rect",{key:"react-".concat(p),y:h,x:n,height:v,width:a,stroke:"none",fill:t[d],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return A.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},l)}function dD(e){var t=e.vertical,r=t===void 0?!0:t,n=e.verticalFill,i=e.fillOpacity,a=e.x,o=e.y,u=e.width,s=e.height,c=e.verticalPoints;if(!r||!n||!n.length)return null;var f=c.map(function(h){return Math.round(h+a-a)}).sort(function(h,p){return h-p});a!==f[0]&&f.unshift(0);var l=f.map(function(h,p){var y=!f[p+1],v=y?a+u-h:f[p+1]-h;if(v<=0)return null;var d=p%n.length;return A.createElement("rect",{key:"react-".concat(p),x:h,y:o,width:v,height:s,stroke:"none",fill:n[d],fillOpacity:i,className:"recharts-cartesian-grid-bg"})});return A.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},l)}var pD=function(t,r){var n=t.xAxis,i=t.width,a=t.height,o=t.offset;return Bx(Bh($e($e($e({},rn.defaultProps),n),{},{ticks:vt(n,!0),viewBox:{x:0,y:0,width:i,height:a}})),o.left,o.left+o.width,r)},vD=function(t,r){var n=t.yAxis,i=t.width,a=t.height,o=t.offset;return Bx(Bh($e($e($e({},rn.defaultProps),n),{},{ticks:vt(n,!0),viewBox:{x:0,y:0,width:i,height:a}})),o.top,o.top+o.height,r)},dr={horizontal:!0,vertical:!0,stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[]};function _a(e){var t,r,n,i,a,o,u=Rh(),s=Dh(),c=rR(),f=$e($e({},e),{},{stroke:(t=e.stroke)!==null&&t!==void 0?t:dr.stroke,fill:(r=e.fill)!==null&&r!==void 0?r:dr.fill,horizontal:(n=e.horizontal)!==null&&n!==void 0?n:dr.horizontal,horizontalFill:(i=e.horizontalFill)!==null&&i!==void 0?i:dr.horizontalFill,vertical:(a=e.vertical)!==null&&a!==void 0?a:dr.vertical,verticalFill:(o=e.verticalFill)!==null&&o!==void 0?o:dr.verticalFill,x:L(e.x)?e.x:c.left,y:L(e.y)?e.y:c.top,width:L(e.width)?e.width:c.width,height:L(e.height)?e.height:c.height}),l=f.x,h=f.y,p=f.width,y=f.height,v=f.syncWithTicks,d=f.horizontalValues,g=f.verticalValues,x=QN(),w=eR();if(!L(p)||p<=0||!L(y)||y<=0||!L(l)||l!==+l||!L(h)||h!==+h)return null;var O=f.verticalCoordinatesGenerator||pD,m=f.horizontalCoordinatesGenerator||vD,b=f.horizontalPoints,_=f.verticalPoints;if((!b||!b.length)&&Y(m)){var S=d&&d.length,P=m({yAxis:w?$e($e({},w),{},{ticks:S?d:w.ticks}):void 0,width:u,height:s,offset:c},S?!0:v);nt(Array.isArray(P),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(ar(P),"]")),Array.isArray(P)&&(b=P)}if((!_||!_.length)&&Y(O)){var $=g&&g.length,j=O({xAxis:x?$e($e({},x),{},{ticks:$?g:x.ticks}):void 0,width:u,height:s,offset:c},$?!0:v);nt(Array.isArray(j),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(ar(j),"]")),Array.isArray(j)&&(_=j)}return A.createElement("g",{className:"recharts-cartesian-grid"},A.createElement(cD,{fill:f.fill,fillOpacity:f.fillOpacity,x:f.x,y:f.y,width:f.width,height:f.height,ry:f.ry}),A.createElement(lD,Yt({},f,{offset:c,horizontalPoints:b,xAxis:x,yAxis:w})),A.createElement(fD,Yt({},f,{offset:c,verticalPoints:_,xAxis:x,yAxis:w})),A.createElement(hD,Yt({},f,{horizontalPoints:b})),A.createElement(dD,Yt({},f,{verticalPoints:_})))}_a.displayName="CartesianGrid";function Ur(e){"@babel/helpers - typeof";return Ur=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ur(e)}function yD(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function mD(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function i2(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function a2(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o2(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r0?o:t&&t.length&&L(i)&&L(a)?t.slice(i,a+1):[]};function Jw(e){return e==="number"?[0,"auto"]:void 0}var Rf=function(t,r,n,i){var a=t.graphicalItems,o=t.tooltipAxis,u=fo(r,t);return n<0||!a||!a.length||n>=u.length?null:a.reduce(function(s,c){var f,l=(f=c.props.data)!==null&&f!==void 0?f:r;l&&t.dataStartIndex+t.dataEndIndex!==0&&t.dataEndIndex-t.dataStartIndex>=n&&(l=l.slice(t.dataStartIndex,t.dataEndIndex+1));var h;if(o.dataKey&&!o.allowDuplicatedCategory){var p=l===void 0?u:l;h=yl(p,o.dataKey,i)}else h=l&&l[n]||u[n];return h?[].concat(Vr(s),[Hx(c,h)]):s},[])},Cb=function(t,r,n,i){var a=i||{x:t.chartX,y:t.chartY},o=g2(a,n),u=t.orderedTooltipTicks,s=t.tooltipAxis,c=t.tooltipTicks,f=eM(o,u,c,s);if(f>=0&&c){var l=c[f]&&c[f].value,h=Rf(t,r,f,l),p=b2(n,u,f,a);return{activeTooltipIndex:f,activeLabel:l,activePayload:h,activeCoordinate:p}}return null},x2=function(t,r){var n=r.axes,i=r.graphicalItems,a=r.axisType,o=r.axisIdKey,u=r.stackGroups,s=r.dataStartIndex,c=r.dataEndIndex,f=t.layout,l=t.children,h=t.stackOffset,p=Lx(f,a);return n.reduce(function(y,v){var d,g=v.type.defaultProps!==void 0?k(k({},v.type.defaultProps),v.props):v.props,x=g.type,w=g.dataKey,O=g.allowDataOverflow,m=g.allowDuplicatedCategory,b=g.scale,_=g.ticks,S=g.includeHidden,P=g[o];if(y[P])return y;var $=fo(t.data,{graphicalItems:i.filter(function(U){var V,he=o in U.props?U.props[o]:(V=U.type.defaultProps)===null||V===void 0?void 0:V[o];return he===P}),dataStartIndex:s,dataEndIndex:c}),j=$.length,T,M,I;KD(g.domain,O,x)&&(T=Yl(g.domain,null,O),p&&(x==="number"||b!=="auto")&&(I=gn($,w,"category")));var C=Jw(x);if(!T||T.length===0){var R,D=(R=g.domain)!==null&&R!==void 0?R:C;if(w){if(T=gn($,w,x),x==="category"&&p){var B=VO(T);m&&B?(M=T,T=da(0,j)):m||(T=Dm(D,T,v).reduce(function(U,V){return U.indexOf(V)>=0?U:[].concat(Vr(U),[V])},[]))}else if(x==="category")m?T=T.filter(function(U){return U!==""&&!ee(U)}):T=Dm(D,T,v).reduce(function(U,V){return U.indexOf(V)>=0||V===""||ee(V)?U:[].concat(Vr(U),[V])},[]);else if(x==="number"){var F=aM($,i.filter(function(U){var V,he,me=o in U.props?U.props[o]:(V=U.type.defaultProps)===null||V===void 0?void 0:V[o],Be="hide"in U.props?U.props.hide:(he=U.type.defaultProps)===null||he===void 0?void 0:he.hide;return me===P&&(S||!Be)}),w,a,f);F&&(T=F)}p&&(x==="number"||b!=="auto")&&(I=gn($,w,"category"))}else p?T=da(0,j):u&&u[P]&&u[P].hasStack&&x==="number"?T=h==="expand"?[0,1]:Wx(u[P].stackGroups,s,c):T=qx($,i.filter(function(U){var V=o in U.props?U.props[o]:U.type.defaultProps[o],he="hide"in U.props?U.props.hide:U.type.defaultProps.hide;return V===P&&(S||!he)}),x,f,!0);if(x==="number")T=If(l,T,P,a,_),D&&(T=Yl(D,T,O));else if(x==="category"&&D){var H=D,G=T.every(function(U){return H.indexOf(U)>=0});G&&(T=H)}}return k(k({},y),{},K({},P,k(k({},g),{},{axisType:a,domain:T,categoricalDomain:I,duplicateDomain:M,originalDomain:(d=g.domain)!==null&&d!==void 0?d:C,isCategorical:p,layout:f})))},{})},w2=function(t,r){var n=r.graphicalItems,i=r.Axis,a=r.axisType,o=r.axisIdKey,u=r.stackGroups,s=r.dataStartIndex,c=r.dataEndIndex,f=t.layout,l=t.children,h=fo(t.data,{graphicalItems:n,dataStartIndex:s,dataEndIndex:c}),p=h.length,y=Lx(f,a),v=-1;return n.reduce(function(d,g){var x=g.type.defaultProps!==void 0?k(k({},g.type.defaultProps),g.props):g.props,w=x[o],O=Jw("number");if(!d[w]){v++;var m;return y?m=da(0,p):u&&u[w]&&u[w].hasStack?(m=Wx(u[w].stackGroups,s,c),m=If(l,m,w,a)):(m=Yl(O,qx(h,n.filter(function(b){var _,S,P=o in b.props?b.props[o]:(_=b.type.defaultProps)===null||_===void 0?void 0:_[o],$="hide"in b.props?b.props.hide:(S=b.type.defaultProps)===null||S===void 0?void 0:S.hide;return P===w&&!$}),"number",f),i.defaultProps.allowDataOverflow),m=If(l,m,w,a)),k(k({},d),{},K({},w,k(k({axisType:a},i.defaultProps),{},{hide:!0,orientation:He(y2,"".concat(a,".").concat(v%2),null),domain:m,originalDomain:O,isCategorical:y,layout:f})))}return d},{})},O2=function(t,r){var n=r.axisType,i=n===void 0?"xAxis":n,a=r.AxisComp,o=r.graphicalItems,u=r.stackGroups,s=r.dataStartIndex,c=r.dataEndIndex,f=t.children,l="".concat(i,"Id"),h=Ze(f,a),p={};return h&&h.length?p=x2(t,{axes:h,graphicalItems:o,axisType:i,axisIdKey:l,stackGroups:u,dataStartIndex:s,dataEndIndex:c}):o&&o.length&&(p=w2(t,{Axis:a,graphicalItems:o,axisType:i,axisIdKey:l,stackGroups:u,dataStartIndex:s,dataEndIndex:c})),p},_2=function(t){var r=Mt(t),n=vt(r,!1,!0);return{tooltipTicks:n,orderedTooltipTicks:ih(n,function(i){return i.coordinate}),tooltipAxis:r,tooltipAxisBandSize:ea(r,n)}},Ib=function(t){var r=t.children,n=t.defaultShowTooltip,i=ze(r,Dr),a=0,o=0;return t.data&&t.data.length!==0&&(o=t.data.length-1),i&&i.props&&(i.props.startIndex>=0&&(a=i.props.startIndex),i.props.endIndex>=0&&(o=i.props.endIndex)),{chartX:0,chartY:0,dataStartIndex:a,dataEndIndex:o,activeTooltipIndex:-1,isTooltipActive:!!n}},S2=function(t){return!t||!t.length?!1:t.some(function(r){var n=yt(r&&r.type);return n&&n.indexOf("Bar")>=0})},kb=function(t){return t==="horizontal"?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:t==="vertical"?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:t==="centric"?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},A2=function(t,r){var n=t.props,i=t.graphicalItems,a=t.xAxisMap,o=a===void 0?{}:a,u=t.yAxisMap,s=u===void 0?{}:u,c=n.width,f=n.height,l=n.children,h=n.margin||{},p=ze(l,Dr),y=ze(l,Zt),v=Object.keys(s).reduce(function(m,b){var _=s[b],S=_.orientation;return!_.mirror&&!_.hide?k(k({},m),{},K({},S,m[S]+_.width)):m},{left:h.left||0,right:h.right||0}),d=Object.keys(o).reduce(function(m,b){var _=o[b],S=_.orientation;return!_.mirror&&!_.hide?k(k({},m),{},K({},S,He(m,"".concat(S))+_.height)):m},{top:h.top||0,bottom:h.bottom||0}),g=k(k({},d),v),x=g.bottom;p&&(g.bottom+=p.props.height||Dr.defaultProps.height),y&&r&&(g=nM(g,i,n,r));var w=c-g.left-g.right,O=f-g.top-g.bottom;return k(k({brushBottom:x},g),{},{width:Math.max(w,0),height:Math.max(O,0)})},P2=function(t,r){if(r==="xAxis")return t[r].width;if(r==="yAxis")return t[r].height},Qw=function(t){var r=t.chartName,n=t.GraphicalChild,i=t.defaultTooltipEventType,a=i===void 0?"axis":i,o=t.validateTooltipEventTypes,u=o===void 0?["axis"]:o,s=t.axisComponents,c=t.legendContent,f=t.formatAxisMap,l=t.defaultProps,h=function(g,x){var w=x.graphicalItems,O=x.stackGroups,m=x.offset,b=x.updateId,_=x.dataStartIndex,S=x.dataEndIndex,P=g.barSize,$=g.layout,j=g.barGap,T=g.barCategoryGap,M=g.maxBarSize,I=kb($),C=I.numericAxisName,R=I.cateAxisName,D=S2(w),B=[];return w.forEach(function(F,H){var G=fo(g.data,{graphicalItems:[F],dataStartIndex:_,dataEndIndex:S}),U=F.type.defaultProps!==void 0?k(k({},F.type.defaultProps),F.props):F.props,V=U.dataKey,he=U.maxBarSize,me=U["".concat(C,"Id")],Be=U["".concat(R,"Id")],qt={},Re=s.reduce(function(Lt,Bt){var ho=x["".concat(Bt.axisType,"Map")],zh=U["".concat(Bt.axisType,"Id")];ho&&ho[zh]||Bt.axisType==="zAxis"||ir();var Uh=ho[zh];return k(k({},Lt),{},K(K({},Bt.axisType,Uh),"".concat(Bt.axisType,"Ticks"),vt(Uh)))},qt),z=Re[R],Z=Re["".concat(R,"Ticks")],J=O&&O[me]&&O[me].hasStack&&pM(F,O[me].stackGroups),q=yt(F.type).indexOf("Bar")>=0,ve=ea(z,Z),te=[],xe=D&&tM({barSize:P,stackGroups:O,totalSize:P2(Re,R)});if(q){var we,De,Tt=ee(he)?M:he,lr=(we=(De=ea(z,Z,!0))!==null&&De!==void 0?De:Tt)!==null&&we!==void 0?we:0;te=rM({barGap:j,barCategoryGap:T,bandSize:lr!==ve?lr:ve,sizeList:xe[Be],maxBarSize:Tt}),lr!==ve&&(te=te.map(function(Lt){return k(k({},Lt),{},{position:k(k({},Lt.position),{},{offset:Lt.position.offset-lr/2})})}))}var fi=F&&F.type&&F.type.getComposedData;fi&&B.push({props:k(k({},fi(k(k({},Re),{},{displayedData:G,props:g,dataKey:V,item:F,bandSize:ve,barPosition:te,offset:m,stackedData:J,layout:$,dataStartIndex:_,dataEndIndex:S}))),{},K(K(K({key:F.key||"item-".concat(H)},C,Re[C]),R,Re[R]),"animationId",b)),childIndex:o_(F,g.children),item:F})}),B},p=function(g,x){var w=g.props,O=g.dataStartIndex,m=g.dataEndIndex,b=g.updateId;if(!Jd({props:w}))return null;var _=w.children,S=w.layout,P=w.stackOffset,$=w.data,j=w.reverseStackOrder,T=kb(S),M=T.numericAxisName,I=T.cateAxisName,C=Ze(_,n),R=hM($,C,"".concat(M,"Id"),"".concat(I,"Id"),P,j),D=s.reduce(function(U,V){var he="".concat(V.axisType,"Map");return k(k({},U),{},K({},he,O2(w,k(k({},V),{},{graphicalItems:C,stackGroups:V.axisType===M&&R,dataStartIndex:O,dataEndIndex:m}))))},{}),B=A2(k(k({},D),{},{props:w,graphicalItems:C}),x==null?void 0:x.legendBBox);Object.keys(D).forEach(function(U){D[U]=f(w,D[U],B,U.replace("Map",""),r)});var F=D["".concat(I,"Map")],H=_2(F),G=h(w,k(k({},D),{},{dataStartIndex:O,dataEndIndex:m,updateId:b,graphicalItems:C,stackGroups:R,offset:B}));return k(k({formattedGraphicalItems:G,graphicalItems:C,offset:B,stackGroups:R},H),D)},y=(function(d){function g(x){var w,O,m;return a2(this,g),m=s2(this,g,[x]),K(m,"eventEmitterSymbol",Symbol("rechartsEventEmitter")),K(m,"accessibilityManager",new HD),K(m,"handleLegendBBoxUpdate",function(b){if(b){var _=m.state,S=_.dataStartIndex,P=_.dataEndIndex,$=_.updateId;m.setState(k({legendBBox:b},p({props:m.props,dataStartIndex:S,dataEndIndex:P,updateId:$},k(k({},m.state),{},{legendBBox:b}))))}}),K(m,"handleReceiveSyncEvent",function(b,_,S){if(m.props.syncId===b){if(S===m.eventEmitterSymbol&&typeof m.props.syncMethod!="function")return;m.applySyncEvent(_)}}),K(m,"handleBrushChange",function(b){var _=b.startIndex,S=b.endIndex;if(_!==m.state.dataStartIndex||S!==m.state.dataEndIndex){var P=m.state.updateId;m.setState(function(){return k({dataStartIndex:_,dataEndIndex:S},p({props:m.props,dataStartIndex:_,dataEndIndex:S,updateId:P},m.state))}),m.triggerSyncEvent({dataStartIndex:_,dataEndIndex:S})}}),K(m,"handleMouseEnter",function(b){var _=m.getMouseInfo(b);if(_){var S=k(k({},_),{},{isTooltipActive:!0});m.setState(S),m.triggerSyncEvent(S);var P=m.props.onMouseEnter;Y(P)&&P(S,b)}}),K(m,"triggeredAfterMouseMove",function(b){var _=m.getMouseInfo(b),S=_?k(k({},_),{},{isTooltipActive:!0}):{isTooltipActive:!1};m.setState(S),m.triggerSyncEvent(S);var P=m.props.onMouseMove;Y(P)&&P(S,b)}),K(m,"handleItemMouseEnter",function(b){m.setState(function(){return{isTooltipActive:!0,activeItem:b,activePayload:b.tooltipPayload,activeCoordinate:b.tooltipPosition||{x:b.cx,y:b.cy}}})}),K(m,"handleItemMouseLeave",function(){m.setState(function(){return{isTooltipActive:!1}})}),K(m,"handleMouseMove",function(b){b.persist(),m.throttleTriggeredAfterMouseMove(b)}),K(m,"handleMouseLeave",function(b){m.throttleTriggeredAfterMouseMove.cancel();var _={isTooltipActive:!1};m.setState(_),m.triggerSyncEvent(_);var S=m.props.onMouseLeave;Y(S)&&S(_,b)}),K(m,"handleOuterEvent",function(b){var _=a_(b),S=He(m.props,"".concat(_));if(_&&Y(S)){var P,$;/.*touch.*/i.test(_)?$=m.getMouseInfo(b.changedTouches[0]):$=m.getMouseInfo(b),S((P=$)!==null&&P!==void 0?P:{},b)}}),K(m,"handleClick",function(b){var _=m.getMouseInfo(b);if(_){var S=k(k({},_),{},{isTooltipActive:!0});m.setState(S),m.triggerSyncEvent(S);var P=m.props.onClick;Y(P)&&P(S,b)}}),K(m,"handleMouseDown",function(b){var _=m.props.onMouseDown;if(Y(_)){var S=m.getMouseInfo(b);_(S,b)}}),K(m,"handleMouseUp",function(b){var _=m.props.onMouseUp;if(Y(_)){var S=m.getMouseInfo(b);_(S,b)}}),K(m,"handleTouchMove",function(b){b.changedTouches!=null&&b.changedTouches.length>0&&m.throttleTriggeredAfterMouseMove(b.changedTouches[0])}),K(m,"handleTouchStart",function(b){b.changedTouches!=null&&b.changedTouches.length>0&&m.handleMouseDown(b.changedTouches[0])}),K(m,"handleTouchEnd",function(b){b.changedTouches!=null&&b.changedTouches.length>0&&m.handleMouseUp(b.changedTouches[0])}),K(m,"handleDoubleClick",function(b){var _=m.props.onDoubleClick;if(Y(_)){var S=m.getMouseInfo(b);_(S,b)}}),K(m,"handleContextMenu",function(b){var _=m.props.onContextMenu;if(Y(_)){var S=m.getMouseInfo(b);_(S,b)}}),K(m,"triggerSyncEvent",function(b){m.props.syncId!==void 0&&dl.emit(pl,m.props.syncId,b,m.eventEmitterSymbol)}),K(m,"applySyncEvent",function(b){var _=m.props,S=_.layout,P=_.syncMethod,$=m.state.updateId,j=b.dataStartIndex,T=b.dataEndIndex;if(b.dataStartIndex!==void 0||b.dataEndIndex!==void 0)m.setState(k({dataStartIndex:j,dataEndIndex:T},p({props:m.props,dataStartIndex:j,dataEndIndex:T,updateId:$},m.state)));else if(b.activeTooltipIndex!==void 0){var M=b.chartX,I=b.chartY,C=b.activeTooltipIndex,R=m.state,D=R.offset,B=R.tooltipTicks;if(!D)return;if(typeof P=="function")C=P(B,b);else if(P==="value"){C=-1;for(var F=0;F=0){var J,q;if(M.dataKey&&!M.allowDuplicatedCategory){var ve=typeof M.dataKey=="function"?Z:"payload.".concat(M.dataKey.toString());J=yl(F,ve,C),q=H&&G&&yl(G,ve,C)}else J=F==null?void 0:F[I],q=H&&G&&G[I];if(Be||me){var te=b.props.activeIndex!==void 0?b.props.activeIndex:I;return[N.cloneElement(b,k(k(k({},P.props),Re),{},{activeIndex:te})),null,null]}if(!ee(J))return[z].concat(Vr(m.renderActivePoints({item:P,activePoint:J,basePoint:q,childIndex:I,isRange:H})))}else{var xe,we=(xe=m.getItemByXY(m.state.activeCoordinate))!==null&&xe!==void 0?xe:{graphicalItem:z},De=we.graphicalItem,Tt=De.item,lr=Tt===void 0?b:Tt,fi=De.childIndex,Lt=k(k(k({},P.props),Re),{},{activeIndex:fi});return[N.cloneElement(lr,Lt),null,null]}return H?[z,null,null]:[z,null]}),K(m,"renderCustomized",function(b,_,S){return N.cloneElement(b,k(k({key:"recharts-customized-".concat(S)},m.props),m.state))}),K(m,"renderMap",{CartesianGrid:{handler:Ai,once:!0},ReferenceArea:{handler:m.renderReferenceElement},ReferenceLine:{handler:Ai},ReferenceDot:{handler:m.renderReferenceElement},XAxis:{handler:Ai},YAxis:{handler:Ai},Brush:{handler:m.renderBrush,once:!0},Bar:{handler:m.renderGraphicChild},Line:{handler:m.renderGraphicChild},Area:{handler:m.renderGraphicChild},Radar:{handler:m.renderGraphicChild},RadialBar:{handler:m.renderGraphicChild},Scatter:{handler:m.renderGraphicChild},Pie:{handler:m.renderGraphicChild},Funnel:{handler:m.renderGraphicChild},Tooltip:{handler:m.renderCursor,once:!0},PolarGrid:{handler:m.renderPolarGrid,once:!0},PolarAngleAxis:{handler:m.renderPolarAxis},PolarRadiusAxis:{handler:m.renderPolarAxis},Customized:{handler:m.renderCustomized}}),m.clipPathId="".concat((w=x.id)!==null&&w!==void 0?w:ai("recharts"),"-clip"),m.throttleTriggeredAfterMouseMove=R0(m.triggeredAfterMouseMove,(O=x.throttleDelay)!==null&&O!==void 0?O:1e3/60),m.state={},m}return f2(g,d),u2(g,[{key:"componentDidMount",value:function(){var w,O;this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:(w=this.props.margin.left)!==null&&w!==void 0?w:0,top:(O=this.props.margin.top)!==null&&O!==void 0?O:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.triggeredAfterMouseMove,layout:this.props.layout}),this.displayDefaultTooltip()}},{key:"displayDefaultTooltip",value:function(){var w=this.props,O=w.children,m=w.data,b=w.height,_=w.layout,S=ze(O,Ue);if(S){var P=S.props.defaultIndex;if(!(typeof P!="number"||P<0||P>this.state.tooltipTicks.length-1)){var $=this.state.tooltipTicks[P]&&this.state.tooltipTicks[P].value,j=Rf(this.state,m,P,$),T=this.state.tooltipTicks[P].coordinate,M=(this.state.offset.top+b)/2,I=_==="horizontal",C=I?{x:T,y:M}:{y:T,x:M},R=this.state.formattedGraphicalItems.find(function(B){var F=B.item;return F.type.name==="Scatter"});R&&(C=k(k({},C),R.props.points[P].tooltipPosition),j=R.props.points[P].tooltipPayload);var D={activeTooltipIndex:P,isTooltipActive:!0,activeLabel:$,activePayload:j,activeCoordinate:C};this.setState(D),this.renderCursor(S),this.accessibilityManager.setIndex(P)}}}},{key:"getSnapshotBeforeUpdate",value:function(w,O){if(!this.props.accessibilityLayer)return null;if(this.state.tooltipTicks!==O.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==w.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==w.margin){var m,b;this.accessibilityManager.setDetails({offset:{left:(m=this.props.margin.left)!==null&&m!==void 0?m:0,top:(b=this.props.margin.top)!==null&&b!==void 0?b:0}})}return null}},{key:"componentDidUpdate",value:function(w){gl([ze(w.children,Ue)],[ze(this.props.children,Ue)])||this.displayDefaultTooltip()}},{key:"componentWillUnmount",value:function(){this.removeListener(),this.throttleTriggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var w=ze(this.props.children,Ue);if(w&&typeof w.props.shared=="boolean"){var O=w.props.shared?"axis":"item";return u.indexOf(O)>=0?O:a}return a}},{key:"getMouseInfo",value:function(w){if(!this.container)return null;var O=this.container,m=O.getBoundingClientRect(),b=KA(m),_={chartX:Math.round(w.pageX-b.left),chartY:Math.round(w.pageY-b.top)},S=m.width/O.offsetWidth||1,P=this.inRange(_.chartX,_.chartY,S);if(!P)return null;var $=this.state,j=$.xAxisMap,T=$.yAxisMap,M=this.getTooltipEventType(),I=Cb(this.state,this.props.data,this.props.layout,P);if(M!=="axis"&&j&&T){var C=Mt(j).scale,R=Mt(T).scale,D=C&&C.invert?C.invert(_.chartX):null,B=R&&R.invert?R.invert(_.chartY):null;return k(k({},_),{},{xValue:D,yValue:B},I)}return I?k(k({},_),I):null}},{key:"inRange",value:function(w,O){var m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,b=this.props.layout,_=w/m,S=O/m;if(b==="horizontal"||b==="vertical"){var P=this.state.offset,$=_>=P.left&&_<=P.left+P.width&&S>=P.top&&S<=P.top+P.height;return $?{x:_,y:S}:null}var j=this.state,T=j.angleAxisMap,M=j.radiusAxisMap;if(T&&M){var I=Mt(T);return Bm({x:_,y:S},I)}return null}},{key:"parseEventsOfWrapper",value:function(){var w=this.props.children,O=this.getTooltipEventType(),m=ze(w,Ue),b={};m&&O==="axis"&&(m.props.trigger==="click"?b={onClick:this.handleClick}:b={onMouseEnter:this.handleMouseEnter,onDoubleClick:this.handleDoubleClick,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onContextMenu:this.handleContextMenu});var _=Ei(this.props,this.handleOuterEvent);return k(k({},_),b)}},{key:"addListener",value:function(){dl.on(pl,this.handleReceiveSyncEvent)}},{key:"removeListener",value:function(){dl.removeListener(pl,this.handleReceiveSyncEvent)}},{key:"filterFormatItem",value:function(w,O,m){for(var b=this.state.formattedGraphicalItems,_=0,S=b.length;_{const t=N.useMemo(()=>Array.from(e.values()).filter(i=>i.telemetry).map(i=>({name:i.name.length>18?i.name.slice(0,16)+"..":i.name,fullName:i.name,killsPerHour:parseInt(i.telemetry.kills_per_hour)||0,totalKills:i.telemetry.kills||0})).sort((i,a)=>a.killsPerHour-i.killsPerHour).slice(0,30),[e]),r=N.useMemo(()=>Array.from(e.values()).filter(i=>{var a;return(a=i.combat)==null?void 0:a.session}).map(i=>({name:i.name.length>18?i.name.slice(0,16)+"..":i.name,fullName:i.name,damage:i.combat.session.total_damage_given})).sort((i,a)=>a.damage-i.damage).slice(0,30),[e]),n=N.useMemo(()=>{var a;const i={};for(const o of e.values()){const u=(a=o.combat)==null?void 0:a.session;if(u!=null&&u.monsters){for(const s of Object.values(u.monsters))if(s.offense)for(const c of Object.values(s.offense))for(const[f,l]of Object.entries(c))f==="None"||f==="Unknown"||(i[f]=(i[f]||0)+(l.damage||0))}}return Object.entries(i).map(([o,u])=>({name:o,value:u})).filter(o=>o.value>0).sort((o,u)=>u.value-o.value)},[e]);return E.jsxs("div",{className:"combat-tab",children:[E.jsxs("div",{className:"chart-section",children:[E.jsx("h3",{className:"chart-title",children:"Kills per Hour"}),E.jsx(Ti,{width:"100%",height:Math.max(200,t.length*28),children:E.jsxs(Df,{data:t,layout:"vertical",margin:{left:10,right:20,top:5,bottom:5},children:[E.jsx(_a,{strokeDasharray:"3 3",stroke:"#333"}),E.jsx(Wr,{type:"number",stroke:"#888",fontSize:11}),E.jsx(Kr,{type:"category",dataKey:"name",width:130,stroke:"#888",fontSize:11}),E.jsx(Ue,{contentStyle:{background:"#1a1a1a",border:"1px solid #444",fontSize:12},formatter:i=>[i.toLocaleString(),"Kills/hr"],labelFormatter:(i,a)=>{var o,u;return((u=(o=a==null?void 0:a[0])==null?void 0:o.payload)==null?void 0:u.fullName)||i}}),E.jsx(Ot,{dataKey:"killsPerHour",fill:"#44cc44",radius:[0,3,3,0]})]})})]}),r.length>0&&E.jsxs("div",{className:"chart-section",children:[E.jsx("h3",{className:"chart-title",children:"Total Damage (Session)"}),E.jsx(Ti,{width:"100%",height:Math.max(200,r.length*28),children:E.jsxs(Df,{data:r,layout:"vertical",margin:{left:10,right:20,top:5,bottom:5},children:[E.jsx(_a,{strokeDasharray:"3 3",stroke:"#333"}),E.jsx(Wr,{type:"number",stroke:"#888",fontSize:11}),E.jsx(Kr,{type:"category",dataKey:"name",width:130,stroke:"#888",fontSize:11}),E.jsx(Ue,{contentStyle:{background:"#1a1a1a",border:"1px solid #444",fontSize:12},formatter:i=>[i.toLocaleString(),"Damage"],labelFormatter:(i,a)=>{var o,u;return((u=(o=a==null?void 0:a[0])==null?void 0:o.payload)==null?void 0:u.fullName)||i}}),E.jsx(Ot,{dataKey:"damage",fill:"#ff6644",radius:[0,3,3,0]})]})})]}),n.length>0&&E.jsxs("div",{className:"chart-section",children:[E.jsx("h3",{className:"chart-title",children:"Damage by Element (All Characters)"}),E.jsx(Ti,{width:"100%",height:300,children:E.jsxs(T2,{children:[E.jsx(Pt,{data:n,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",outerRadius:100,label:({name:i,percent:a})=>`${i} ${(a*100).toFixed(0)}%`,labelLine:!0,fontSize:12,children:n.map(i=>E.jsx(Ba,{fill:j2[i.name]||"#888"},i.name))}),E.jsx(Ue,{contentStyle:{background:"#1a1a1a",border:"1px solid #444",fontSize:12},formatter:i=>i.toLocaleString()}),E.jsx(Zt,{wrapperStyle:{fontSize:12,color:"#aaa"}})]})})]})]})},M2=({characters:e,totalRares:t,totalKills:r,recentRares:n})=>{const i=N.useMemo(()=>Array.from(e.values()).filter(o=>o.telemetry&&(o.telemetry.total_rares??0)>0).map(o=>({name:o.name.length>18?o.name.slice(0,16)+"..":o.name,fullName:o.name,rares:o.telemetry.total_rares??0})).sort((o,u)=>u.rares-o.rares),[e]),a=t>0?Math.round(r/t):0;return E.jsxs("div",{className:"rares-tab",children:[E.jsxs("div",{className:"rares-summary",children:[E.jsxs("div",{className:"rare-stat-card",children:[E.jsx("span",{className:"rare-stat-value",children:t}),E.jsx("span",{className:"rare-stat-label",children:"Total Rares Found"})]}),E.jsxs("div",{className:"rare-stat-card",children:[E.jsx("span",{className:"rare-stat-value",children:r.toLocaleString()}),E.jsx("span",{className:"rare-stat-label",children:"Total Kills"})]}),E.jsxs("div",{className:"rare-stat-card",children:[E.jsx("span",{className:"rare-stat-value",children:a>0?`1 in ${a.toLocaleString()}`:"--"}),E.jsx("span",{className:"rare-stat-label",children:"Drop Rate"})]})]}),n.length>0&&E.jsxs("div",{className:"chart-section",children:[E.jsx("h3",{className:"chart-title",children:"Recent Rare Drops (This Session)"}),E.jsx("div",{className:"rare-timeline",children:n.map((o,u)=>E.jsxs("div",{className:"rare-event",children:[E.jsx("span",{className:"rare-time",children:new Date(o.timestamp).toLocaleTimeString()}),E.jsx("span",{className:"rare-char",children:o.character_name}),E.jsx("span",{className:"rare-name",children:o.name})]},u))})]}),i.length>0&&E.jsxs("div",{className:"chart-section",children:[E.jsx("h3",{className:"chart-title",children:"Rares per Character (Lifetime)"}),E.jsx(Ti,{width:"100%",height:Math.max(200,i.length*28),children:E.jsxs(Df,{data:i,layout:"vertical",margin:{left:10,right:20,top:5,bottom:5},children:[E.jsx(_a,{strokeDasharray:"3 3",stroke:"#333"}),E.jsx(Wr,{type:"number",stroke:"#888",fontSize:11}),E.jsx(Kr,{type:"category",dataKey:"name",width:130,stroke:"#888",fontSize:11}),E.jsx(Ue,{contentStyle:{background:"#1a1a1a",border:"1px solid #444",fontSize:12},formatter:o=>[o,"Rares"],labelFormatter:(o,u)=>{var s,c;return((c=(s=u==null?void 0:u[0])==null?void 0:s.payload)==null?void 0:c.fullName)||o}}),E.jsx(Ot,{dataKey:"rares",fill:"#ffcc00",radius:[0,3,3,0]})]})})]})]})},pr={west:-102.1,east:102.1,north:102.1,south:-102.1},Ta=800;function $2(e,t){const r=(e-pr.west)/(pr.east-pr.west)*Ta,n=(pr.north-t)/(pr.north-pr.south)*Ta;return{x:r,y:n}}const C2=({characters:e})=>{const t=N.useRef(null),[r,n]=N.useState(null),i=N.useMemo(()=>Array.from(e.values()).filter(o=>o.telemetry&&o.telemetry.ew!==void 0).map(o=>{const u=o.telemetry,{x:s,y:c}=$2(u.ew,u.ns),f=(u.vt_state||"").toLowerCase()==="combat"||(u.vt_state||"").toLowerCase()==="hunt";return{name:o.name,x:s,y:c,isHunting:f,ns:u.ns,ew:u.ew}}),[e]),a=N.useCallback(o=>n(o),[]);return E.jsxs("div",{className:"map-tab",children:[E.jsxs("div",{className:"map-container",ref:t,children:[E.jsx("img",{src:"/dereth_highres.png",alt:"Dereth Map",className:"map-image",draggable:!1}),E.jsx("svg",{className:"map-overlay",viewBox:`0 0 ${Ta} ${Ta}`,children:i.map(o=>{var u,s;return E.jsxs("g",{children:[E.jsx("circle",{cx:o.x,cy:o.y,r:r===o.name?6:4,fill:o.isHunting?"#44cc44":"#ffaa00",stroke:"#000",strokeWidth:1,opacity:.9,onMouseEnter:()=>a(o.name),onMouseLeave:()=>a(null),style:{cursor:"pointer"}}),r===o.name&&E.jsxs("text",{x:o.x+8,y:o.y+4,fill:"#fff",fontSize:11,stroke:"#000",strokeWidth:.3,paintOrder:"stroke",children:[o.name," (",(u=o.ns)==null?void 0:u.toFixed(1),"N, ",(s=o.ew)==null?void 0:s.toFixed(1),"E)"]})]},o.name)})})]}),E.jsxs("div",{className:"map-legend",children:[E.jsxs("span",{children:[E.jsx("span",{className:"legend-dot hunting"})," Hunting/Combat"]}),E.jsxs("span",{children:[E.jsx("span",{className:"legend-dot other"})," Other state"]}),E.jsxs("span",{className:"map-count",children:[i.length," characters on map"]})]})]})},I2=()=>{const[e,t]=N.useState(""),[r,n]=N.useState([]),[i,a]=N.useState(0),[o,u]=N.useState(!1),s=N.useRef(0),c=N.useCallback(async l=>{if(l.length<2){n([]),a(0);return}u(!0);try{const h=await eO(`/search/items?q=${encodeURIComponent(l)}&limit=100`);n(h.results??[]),a(h.total??0)}catch{n([])}u(!1)},[]),f=N.useCallback(l=>{const h=l.target.value;t(h),clearTimeout(s.current),s.current=window.setTimeout(()=>c(h),400)},[c]);return E.jsxs("div",{className:"inventory-tab",children:[E.jsxs("div",{className:"search-bar",children:[E.jsx("input",{type:"text",value:e,onChange:f,placeholder:"Search items across all characters...",className:"search-input"}),o&&E.jsx("span",{className:"search-spinner",children:"Searching..."})]}),i>0&&E.jsxs("div",{className:"search-count",children:[i.toLocaleString()," results"]}),E.jsxs("div",{className:"search-results",children:[r.length===0&&e.length>=2&&!o&&E.jsx("div",{className:"search-empty",children:"No items found"}),E.jsxs("table",{className:"results-table",children:[E.jsx("thead",{children:E.jsxs("tr",{children:[E.jsx("th",{children:"Character"}),E.jsx("th",{children:"Item"}),E.jsx("th",{children:"Type"}),E.jsx("th",{children:"Material"}),E.jsx("th",{children:"Set"}),E.jsx("th",{children:"Work"})]})}),E.jsx("tbody",{children:r.map((l,h)=>E.jsxs("tr",{children:[E.jsx("td",{children:l.character_name}),E.jsx("td",{className:"item-name",children:l.item_name}),E.jsx("td",{children:l.type||""}),E.jsx("td",{children:l.material||""}),E.jsx("td",{children:l.set_name||""}),E.jsx("td",{children:l.workmanship||""})]},h))})]})]})]})};function R2({data:e,onViewToggle:t}){const r=[{id:"combat",label:"Combat",content:E.jsx(E2,{characters:e.characters})},{id:"rares",label:"Rares",content:E.jsx(M2,{characters:e.characters,totalRares:e.totalRares,totalKills:e.totalKills,recentRares:e.recentRares})},{id:"map",label:"Map",content:E.jsx(C2,{characters:e.characters})},{id:"inventory",label:"Inventory",content:E.jsx(I2,{})}];return E.jsxs(tO,{children:[E.jsx("div",{style:{display:"flex",justifyContent:"flex-start",marginBottom:8},children:E.jsx("button",{onClick:t,className:"tab-btn",children:"Map View"})}),E.jsx(rO,{activeChars:e.characters.size,totalKills:e.totalKills,totalRares:e.totalRares,serverHealth:e.serverHealth}),E.jsx(iO,{characters:e.characters}),E.jsx(aO,{tabs:r})]})}export{R2 as default}; diff --git a/static/v2/assets/InventoryWindow-DLq3agcE.js b/static/assets/InventoryWindow-CulnI71j.js similarity index 99% rename from static/v2/assets/InventoryWindow-DLq3agcE.js rename to static/assets/InventoryWindow-CulnI71j.js index 68734bad..b0102059 100644 --- a/static/v2/assets/InventoryWindow-DLq3agcE.js +++ b/static/assets/InventoryWindow-CulnI71j.js @@ -1 +1 @@ -import{r as g,a as F,j as n,D as P}from"./index-BfJ04YaG.js";import"./react-DlyoauG8.js";function X(e){var l,d;if(!e)return e;const t=c=>c!=null&&c!==-1&&c!==-1?c:void 0,s=e.IntValues||{};return{item_id:e.item_id??e.Id??0,name:e.name??e.Name??((l=e.StringValues)==null?void 0:l["1"])??"Unknown",icon:e.icon??e.Icon??0,object_class:e.object_class??e.ObjectClass??0,current_wielded_location:e.current_wielded_location??t(e.CurrentWieldedLocation)??t(Number(s[10]))??0,container_id:e.container_id??e.ContainerId??0,items_capacity:e.items_capacity??t(e.ItemsCapacity)??t(Number(s[6]))??((d=e.enhanced_properties)==null?void 0:d.ItemSlots_Decal)??void 0,value:e.value??t(e.Value)??t(Number(s[19]))??0,burden:e.burden??t(e.Burden)??t(Number(s[5]))??0,armor_level:e.armor_level??t(e.ArmorLevel),max_damage:e.max_damage??t(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??t(e.Tinks),workmanship:e.workmanship??t(e.Workmanship),equip_skill:e.equip_skill??e.equip_skill_name??e.EquipSkill??void 0,wield_level:e.wield_level??t(e.WieldLevel),skill_level:e.skill_level??t(e.SkillLevel),lore_requirement:e.lore_requirement??t(e.LoreRequirement),attack_bonus:e.attack_bonus??t(e.AttackBonus),melee_defense_bonus:e.melee_defense_bonus??t(e.MeleeDefenseBonus),magic_defense_bonus:e.magic_defense_bonus??t(e.MagicDBonus),damage_bonus:e.damage_bonus??t(e.DamageBonus),damage_rating:e.damage_rating??t(e.DamRating),crit_rating:e.crit_rating??t(e.CritRating),heal_boost_rating:e.heal_boost_rating??t(e.HealBoostRating),current_mana:e.current_mana??t(Number(s[218103815]))??void 0,max_mana:e.max_mana??t(Number(s[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??t(Number(s[218103849]))??void 0,icon_underlay_id:e.icon_underlay_id??t(Number(s[218103850]))??void 0,_raw:e}}function E(e){return!e||e<=0?"06000133":(e+100663296).toString(16).toUpperCase().padStart(8,"0")}const I={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}},M={},G=[32768,67108864,65536,131072,262144,524288],J=[1,512,2048,1024,4096,8192,16384,32,256],Z=[2,4,134217728,268435456,536870912,1073741824],ee=[2097152,1048576,4194304,16777216,33554432,8388608];(()=>{const e=new Set;Object.entries(I).forEach(([t,s])=>{const l=`${s.row}-${s.col}`,d=parseInt(t);e.has(l)||(e.add(l),G.includes(d)?M[l]="#3a2555":J.includes(d)?M[l]="#1e2e55":Z.includes(d)?M[l]="#1e3e3e":ee.includes(d)?M[l]="#142040":M[l]="#2a2a2a")})})();const $="#af7a30";function z({item:e,size:t=36}){const s={position:"absolute",top:0,left:0,width:t,height:t,border:"none",background:"transparent",imageRendering:"pixelated"},l=e.icon_underlay_id&&e.icon_underlay_id>100?`/icons/${E(e.icon_underlay_id)}.png`:null,d=e.icon_overlay_id&&e.icon_overlay_id>100?`/icons/${E(e.icon_overlay_id)}.png`:null;return n.jsxs("div",{style:{width:t,height:t,position:"relative"},children:[l&&n.jsx("img",{src:l,alt:"",style:{...s,zIndex:1},onError:c=>{c.target.style.display="none"}}),n.jsx("img",{src:`/icons/${E(e.icon)}.png`,alt:e.name,style:{...s,zIndex:2},onError:c=>{c.target.src="/icons/06000133.png"}}),d&&n.jsx("img",{src:d,alt:"",style:{...s,zIndex:3},onError:c=>{c.target.style.display="none"}})]})}function ne({item:e,x:t,y:s}){var b,f;const l=p=>p!=null&&p!==-1&&p!==-1,d=p=>p.toLocaleString(),c=p=>`${((p-1)*100).toFixed(1)}%`;return n.jsxs("div",{style:{position:"fixed",left:t+14,top:s+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]}),l(e.armor_level)&&n.jsxs("div",{style:{color:"#88ff88"},children:["Armor Level: ",e.armor_level]}),l(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}`:""]}),l(e.attack_bonus)&&e.attack_bonus!==1&&n.jsxs("div",{style:{color:"#88ff88"},children:["Attack: +",c(e.attack_bonus)]}),l(e.melee_defense_bonus)&&e.melee_defense_bonus!==1&&n.jsxs("div",{style:{color:"#88ff88"},children:["Melee Def: +",c(e.melee_defense_bonus)]}),l(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]}),l(e.wield_level)&&n.jsxs("div",{style:{color:"#ffaa00"},children:["Wield Level: ",e.wield_level]}),l(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]}),l(e.tinks)&&n.jsxs("div",{style:{color:"#88ff88"},children:["Tinks: ",e.tinks]}),l(e.damage_rating)&&n.jsxs("div",{children:["Damage Rating: ",e.damage_rating]}),l(e.crit_rating)&&n.jsxs("div",{children:["Crit Rating: ",e.crit_rating]}),l(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]}),l(e.current_mana)&&l(e.max_mana)&&n.jsxs("div",{style:{color:"#98d7ff"},children:["Mana: ",e.current_mana," / ",e.max_mana]}),((f=(b=e.spells)==null?void 0:b.spells)==null?void 0:f.length)>0&&n.jsxs("div",{style:{color:"#4a90e2",marginTop:4,fontSize:12},children:["Spells: ",e.spells.spells.map(p=>p.name).join(", ")]})]})}function V({iconSrc:e,isActive:t,fillPct:s,label:l,onClick:d}){const c=s>90?"#b7432c":s>70?"#d8a431":"#00ff00";return n.jsxs("div",{onClick:d,title:l,style:{display:"flex",alignItems:"flex-start",gap:2,cursor:"pointer",flexShrink:0,marginTop:3,position:"relative"},children:[t&&n.jsx("span",{style:{position:"absolute",left:-11,top:8,color:$,fontSize:10},children:"▶"}),n.jsx("div",{style:{width:30,height:30,border:t?"1px solid #00ff00":"1px solid #333",boxShadow:t?"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:b=>{b.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(s)}% full`,children:n.jsx("div",{style:{position:"absolute",bottom:0,left:0,right:0,height:`${s}%`,background:c,minHeight:s>0?2:0}})})]})}const ae=({id:e,charName:t,zIndex:s})=>{var T,O,U;const[l,d]=g.useState([]),[c,b]=g.useState(!0),[f,p]=g.useState(null),[L,D]=g.useState(null),[m,Y]=g.useState(null),[te,ie]=g.useState(null);g.useEffect(()=>{b(!0),Promise.all([F(`/inventory/${encodeURIComponent(t)}?limit=1000`).catch(()=>({items:[]})),F(`/character-stats/${encodeURIComponent(t)}`).catch(()=>null)]).then(([o,i])=>{const a=o.items??[];d(a.map(X)),Y(i)}).finally(()=>b(!1))},[t]);const h=g.useCallback((o,i)=>{D(o&&i?{item:o,x:i.clientX,y:i.clientY}:null)},[]),K=g.useMemo(()=>{const o=new Set,i=[];return Object.entries(I).forEach(([a,u])=>{const _=`${u.row}-${u.col}`;o.has(_)||(o.add(_),i.push({key:_,...u,mask:parseInt(a)}))}),i},[]),{equippedMap:A,containers:w,packItems:B}=g.useMemo(()=>{const o=new Map,i=[],a=new Set,u=new Map;l.forEach(r=>{r.object_class===10&&(i.push(r),a.add(r.item_id))}),i.sort((r,v)=>(r.item_id>>>0)-(v.item_id>>>0));let _=null;return l.forEach(r=>{r.current_wielded_location>0&&r.container_id&&!a.has(r.container_id)&&(_=r.container_id)}),l.forEach(r=>{if(a.has(r.item_id))return;const v=r.current_wielded_location;if(v>0)if(r.object_class===2)Object.entries(I).forEach(([S,x])=>{if((v&parseInt(S))===parseInt(S)){const y=`${x.row}-${x.col}`;o.has(y)||o.set(y,r)}});else{let S=!1;if(I[v]){const x=I[v],y=`${x.row}-${x.col}`;o.has(y)||(o.set(y,r),S=!0)}if(!S){for(const[x,y]of Object.entries(I))if((v&parseInt(x))===parseInt(x)){const N=`${y.row}-${y.col}`;if(!o.has(N)){o.set(N,r),S=!0;break}}}}else{let k=r.container_id||0;_&&k===_&&(k=0),u.has(k)||u.set(k,[]),u.get(k).push(r)}}),{equippedMap:o,containers:i,packItems:u}},[l]);let j=B.get(0)??[],q=0;if(j.length===0){let o=0;for(const[i,a]of B.entries())!w.some(u=>u.item_id===i)&&a.length>o&&(o=a.length,q=i);j=B.get(q)??[]}const W=f!==null?B.get(f)??[]:j,H=(m==null?void 0:m.burden_units)??((T=m==null?void 0:m.stats_data)==null?void 0:T.burden_units)??0,C=(m==null?void 0:m.encumbrance_capacity)??((O=m==null?void 0:m.stats_data)==null?void 0:O.encumbrance_capacity)??0,R=C>0?Math.min(200,H/C*100):0,Q=R>150?"#b7432c":R>100?"#d8a431":"#2e8b57";return c?n.jsx(P,{id:e,title:`Inventory: ${t}`,zIndex:s,width:572,height:720,children:n.jsx("div",{style:{padding:20,color:"#666",fontStyle:"italic"},children:"Loading inventory..."})}):n.jsxs(P,{id:e,title:`Inventory: ${t}`,zIndex:s,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:K.map(o=>{const i=A.get(o.key),a=M[o.key]??"#2a2a2a";return n.jsx("div",{style:{position:"absolute",left:(o.col-1)*44+4,top:(o.row-1)*44+4,width:36,height:36,background:i?"#5a5a62":a,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:u=>i&&h(i,u),onMouseMove:u=>i&&h(i,u),onMouseLeave:()=>h(null),children:i?n.jsx(z,{item:i,size:32}):n.jsx("img",{src:"/icons/06000133.png",alt:"",style:{width:28,height:28,opacity:.15,filter:"grayscale(100%)",imageRendering:"pixelated"}})},o.key)})}),n.jsxs("div",{style:{padding:"3px 6px",fontSize:11,color:"#ccc",background:"#111",borderBottom:`1px solid ${$}`},children:["Contents of ",f!==null?((U=w.find(o=>o.item_id===f))==null?void 0:U.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:[W.map((o,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:a=>h(o,a),onMouseMove:a=>h(o,a),onMouseLeave:()=>h(null),children:n.jsx(z,{item:o,size:32})},o.item_id??i)),Array.from({length:Math.max(0,24-W.length)}).map((o,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:C>0?`${Math.floor(R)}%`:"Burden"}),n.jsx("div",{style:{width:14,height:40,background:"#111",border:"1px solid #555",position:"relative",overflow:"hidden",marginBottom:6,flexShrink:0},title:C>0?`${H.toLocaleString()} / ${C.toLocaleString()}`:`Burden: ${l.reduce((o,i)=>o+(i.burden??0),0).toLocaleString()}`,children:n.jsx("div",{style:{position:"absolute",bottom:0,left:0,right:0,height:`${R/2}%`,background:Q,transition:"height 0.3s"}})}),n.jsx(V,{iconSrc:"/icons/0600127E.png",isActive:f===null,fillPct:j.length>0?Math.min(100,j.length/102*100):0,label:`Backpack (${j.length}/102)`,onClick:()=>p(null)}),w.map(o=>{const i=o.item_id,a=l.filter(r=>r.container_id===i&&r.item_id!==i).length,u=o.items_capacity||24,_=u>0?Math.min(100,a/u*100):0;return n.jsx(V,{iconSrc:`/icons/${E(o.icon)}.png`,isActive:f===i,fillPct:_,label:`${o.name} (${a}/${u})`,onClick:()=>p(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:[Array.from(A.values()).filter(o=>o.current_mana>0||o.max_mana>0).sort((o,i)=>(o.current_mana??999999)-(i.current_mana??999999)).map((o,i)=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,padding:"2px 4px",borderBottom:"1px solid #1a1a1a",cursor:"pointer"},onMouseEnter:a=>h(o,a),onMouseMove:a=>h(o,a),onMouseLeave:()=>h(null),children:[n.jsx("div",{style:{width:20,height:20,flexShrink:0},children:n.jsx(z,{item:o,size:20})}),n.jsx("div",{style:{width:8,height:8,borderRadius:"50%",background:o.current_mana>0?"#4c4":"#c44",flexShrink:0}}),n.jsx("div",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontSize:"0.68rem",color:"#ccc"},children:o.name}),n.jsxs("div",{style:{fontSize:"0.65rem",color:"#88bbff",whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums"},children:[o.current_mana??0,"/",o.max_mana??0]}),n.jsx("div",{style:{fontSize:"0.63rem",color:"#9c9",whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums",minWidth:42,textAlign:"right"},children:o.max_mana>0?oe(o.current_mana??0,o.max_mana??0):""})]},i)),Array.from(A.values()).filter(o=>o.current_mana>0||o.max_mana>0).length===0&&n.jsx("div",{style:{padding:12,color:"#555",textAlign:"center",fontSize:"0.7rem"},children:"No mana items equipped"})]})]})]}),L&&n.jsx(ne,{item:L.item,x:L.x,y:L.y})]})};function oe(e,t){if(t<=0||e<=0)return"0h00m";const s=e*20,l=Math.floor(s/3600),d=Math.floor(s%3600/60);return`~${l}h${String(d).padStart(2,"0")}m`}export{ae as InventoryWindow}; +import{r as g,a as F,j as n,D as P}from"./index-DnlpBAAU.js";import"./react-DlyoauG8.js";function X(e){var l,d;if(!e)return e;const t=c=>c!=null&&c!==-1&&c!==-1?c:void 0,s=e.IntValues||{};return{item_id:e.item_id??e.Id??0,name:e.name??e.Name??((l=e.StringValues)==null?void 0:l["1"])??"Unknown",icon:e.icon??e.Icon??0,object_class:e.object_class??e.ObjectClass??0,current_wielded_location:e.current_wielded_location??t(e.CurrentWieldedLocation)??t(Number(s[10]))??0,container_id:e.container_id??e.ContainerId??0,items_capacity:e.items_capacity??t(e.ItemsCapacity)??t(Number(s[6]))??((d=e.enhanced_properties)==null?void 0:d.ItemSlots_Decal)??void 0,value:e.value??t(e.Value)??t(Number(s[19]))??0,burden:e.burden??t(e.Burden)??t(Number(s[5]))??0,armor_level:e.armor_level??t(e.ArmorLevel),max_damage:e.max_damage??t(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??t(e.Tinks),workmanship:e.workmanship??t(e.Workmanship),equip_skill:e.equip_skill??e.equip_skill_name??e.EquipSkill??void 0,wield_level:e.wield_level??t(e.WieldLevel),skill_level:e.skill_level??t(e.SkillLevel),lore_requirement:e.lore_requirement??t(e.LoreRequirement),attack_bonus:e.attack_bonus??t(e.AttackBonus),melee_defense_bonus:e.melee_defense_bonus??t(e.MeleeDefenseBonus),magic_defense_bonus:e.magic_defense_bonus??t(e.MagicDBonus),damage_bonus:e.damage_bonus??t(e.DamageBonus),damage_rating:e.damage_rating??t(e.DamRating),crit_rating:e.crit_rating??t(e.CritRating),heal_boost_rating:e.heal_boost_rating??t(e.HealBoostRating),current_mana:e.current_mana??t(Number(s[218103815]))??void 0,max_mana:e.max_mana??t(Number(s[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??t(Number(s[218103849]))??void 0,icon_underlay_id:e.icon_underlay_id??t(Number(s[218103850]))??void 0,_raw:e}}function E(e){return!e||e<=0?"06000133":(e+100663296).toString(16).toUpperCase().padStart(8,"0")}const I={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}},M={},G=[32768,67108864,65536,131072,262144,524288],J=[1,512,2048,1024,4096,8192,16384,32,256],Z=[2,4,134217728,268435456,536870912,1073741824],ee=[2097152,1048576,4194304,16777216,33554432,8388608];(()=>{const e=new Set;Object.entries(I).forEach(([t,s])=>{const l=`${s.row}-${s.col}`,d=parseInt(t);e.has(l)||(e.add(l),G.includes(d)?M[l]="#3a2555":J.includes(d)?M[l]="#1e2e55":Z.includes(d)?M[l]="#1e3e3e":ee.includes(d)?M[l]="#142040":M[l]="#2a2a2a")})})();const $="#af7a30";function z({item:e,size:t=36}){const s={position:"absolute",top:0,left:0,width:t,height:t,border:"none",background:"transparent",imageRendering:"pixelated"},l=e.icon_underlay_id&&e.icon_underlay_id>100?`/icons/${E(e.icon_underlay_id)}.png`:null,d=e.icon_overlay_id&&e.icon_overlay_id>100?`/icons/${E(e.icon_overlay_id)}.png`:null;return n.jsxs("div",{style:{width:t,height:t,position:"relative"},children:[l&&n.jsx("img",{src:l,alt:"",style:{...s,zIndex:1},onError:c=>{c.target.style.display="none"}}),n.jsx("img",{src:`/icons/${E(e.icon)}.png`,alt:e.name,style:{...s,zIndex:2},onError:c=>{c.target.src="/icons/06000133.png"}}),d&&n.jsx("img",{src:d,alt:"",style:{...s,zIndex:3},onError:c=>{c.target.style.display="none"}})]})}function ne({item:e,x:t,y:s}){var b,f;const l=p=>p!=null&&p!==-1&&p!==-1,d=p=>p.toLocaleString(),c=p=>`${((p-1)*100).toFixed(1)}%`;return n.jsxs("div",{style:{position:"fixed",left:t+14,top:s+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]}),l(e.armor_level)&&n.jsxs("div",{style:{color:"#88ff88"},children:["Armor Level: ",e.armor_level]}),l(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}`:""]}),l(e.attack_bonus)&&e.attack_bonus!==1&&n.jsxs("div",{style:{color:"#88ff88"},children:["Attack: +",c(e.attack_bonus)]}),l(e.melee_defense_bonus)&&e.melee_defense_bonus!==1&&n.jsxs("div",{style:{color:"#88ff88"},children:["Melee Def: +",c(e.melee_defense_bonus)]}),l(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]}),l(e.wield_level)&&n.jsxs("div",{style:{color:"#ffaa00"},children:["Wield Level: ",e.wield_level]}),l(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]}),l(e.tinks)&&n.jsxs("div",{style:{color:"#88ff88"},children:["Tinks: ",e.tinks]}),l(e.damage_rating)&&n.jsxs("div",{children:["Damage Rating: ",e.damage_rating]}),l(e.crit_rating)&&n.jsxs("div",{children:["Crit Rating: ",e.crit_rating]}),l(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]}),l(e.current_mana)&&l(e.max_mana)&&n.jsxs("div",{style:{color:"#98d7ff"},children:["Mana: ",e.current_mana," / ",e.max_mana]}),((f=(b=e.spells)==null?void 0:b.spells)==null?void 0:f.length)>0&&n.jsxs("div",{style:{color:"#4a90e2",marginTop:4,fontSize:12},children:["Spells: ",e.spells.spells.map(p=>p.name).join(", ")]})]})}function V({iconSrc:e,isActive:t,fillPct:s,label:l,onClick:d}){const c=s>90?"#b7432c":s>70?"#d8a431":"#00ff00";return n.jsxs("div",{onClick:d,title:l,style:{display:"flex",alignItems:"flex-start",gap:2,cursor:"pointer",flexShrink:0,marginTop:3,position:"relative"},children:[t&&n.jsx("span",{style:{position:"absolute",left:-11,top:8,color:$,fontSize:10},children:"▶"}),n.jsx("div",{style:{width:30,height:30,border:t?"1px solid #00ff00":"1px solid #333",boxShadow:t?"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:b=>{b.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(s)}% full`,children:n.jsx("div",{style:{position:"absolute",bottom:0,left:0,right:0,height:`${s}%`,background:c,minHeight:s>0?2:0}})})]})}const ae=({id:e,charName:t,zIndex:s})=>{var T,O,U;const[l,d]=g.useState([]),[c,b]=g.useState(!0),[f,p]=g.useState(null),[L,D]=g.useState(null),[m,Y]=g.useState(null),[te,ie]=g.useState(null);g.useEffect(()=>{b(!0),Promise.all([F(`/inventory/${encodeURIComponent(t)}?limit=1000`).catch(()=>({items:[]})),F(`/character-stats/${encodeURIComponent(t)}`).catch(()=>null)]).then(([o,i])=>{const a=o.items??[];d(a.map(X)),Y(i)}).finally(()=>b(!1))},[t]);const h=g.useCallback((o,i)=>{D(o&&i?{item:o,x:i.clientX,y:i.clientY}:null)},[]),K=g.useMemo(()=>{const o=new Set,i=[];return Object.entries(I).forEach(([a,u])=>{const _=`${u.row}-${u.col}`;o.has(_)||(o.add(_),i.push({key:_,...u,mask:parseInt(a)}))}),i},[]),{equippedMap:A,containers:w,packItems:B}=g.useMemo(()=>{const o=new Map,i=[],a=new Set,u=new Map;l.forEach(r=>{r.object_class===10&&(i.push(r),a.add(r.item_id))}),i.sort((r,v)=>(r.item_id>>>0)-(v.item_id>>>0));let _=null;return l.forEach(r=>{r.current_wielded_location>0&&r.container_id&&!a.has(r.container_id)&&(_=r.container_id)}),l.forEach(r=>{if(a.has(r.item_id))return;const v=r.current_wielded_location;if(v>0)if(r.object_class===2)Object.entries(I).forEach(([S,x])=>{if((v&parseInt(S))===parseInt(S)){const y=`${x.row}-${x.col}`;o.has(y)||o.set(y,r)}});else{let S=!1;if(I[v]){const x=I[v],y=`${x.row}-${x.col}`;o.has(y)||(o.set(y,r),S=!0)}if(!S){for(const[x,y]of Object.entries(I))if((v&parseInt(x))===parseInt(x)){const N=`${y.row}-${y.col}`;if(!o.has(N)){o.set(N,r),S=!0;break}}}}else{let k=r.container_id||0;_&&k===_&&(k=0),u.has(k)||u.set(k,[]),u.get(k).push(r)}}),{equippedMap:o,containers:i,packItems:u}},[l]);let j=B.get(0)??[],q=0;if(j.length===0){let o=0;for(const[i,a]of B.entries())!w.some(u=>u.item_id===i)&&a.length>o&&(o=a.length,q=i);j=B.get(q)??[]}const W=f!==null?B.get(f)??[]:j,H=(m==null?void 0:m.burden_units)??((T=m==null?void 0:m.stats_data)==null?void 0:T.burden_units)??0,C=(m==null?void 0:m.encumbrance_capacity)??((O=m==null?void 0:m.stats_data)==null?void 0:O.encumbrance_capacity)??0,R=C>0?Math.min(200,H/C*100):0,Q=R>150?"#b7432c":R>100?"#d8a431":"#2e8b57";return c?n.jsx(P,{id:e,title:`Inventory: ${t}`,zIndex:s,width:572,height:720,children:n.jsx("div",{style:{padding:20,color:"#666",fontStyle:"italic"},children:"Loading inventory..."})}):n.jsxs(P,{id:e,title:`Inventory: ${t}`,zIndex:s,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:K.map(o=>{const i=A.get(o.key),a=M[o.key]??"#2a2a2a";return n.jsx("div",{style:{position:"absolute",left:(o.col-1)*44+4,top:(o.row-1)*44+4,width:36,height:36,background:i?"#5a5a62":a,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:u=>i&&h(i,u),onMouseMove:u=>i&&h(i,u),onMouseLeave:()=>h(null),children:i?n.jsx(z,{item:i,size:32}):n.jsx("img",{src:"/icons/06000133.png",alt:"",style:{width:28,height:28,opacity:.15,filter:"grayscale(100%)",imageRendering:"pixelated"}})},o.key)})}),n.jsxs("div",{style:{padding:"3px 6px",fontSize:11,color:"#ccc",background:"#111",borderBottom:`1px solid ${$}`},children:["Contents of ",f!==null?((U=w.find(o=>o.item_id===f))==null?void 0:U.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:[W.map((o,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:a=>h(o,a),onMouseMove:a=>h(o,a),onMouseLeave:()=>h(null),children:n.jsx(z,{item:o,size:32})},o.item_id??i)),Array.from({length:Math.max(0,24-W.length)}).map((o,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:C>0?`${Math.floor(R)}%`:"Burden"}),n.jsx("div",{style:{width:14,height:40,background:"#111",border:"1px solid #555",position:"relative",overflow:"hidden",marginBottom:6,flexShrink:0},title:C>0?`${H.toLocaleString()} / ${C.toLocaleString()}`:`Burden: ${l.reduce((o,i)=>o+(i.burden??0),0).toLocaleString()}`,children:n.jsx("div",{style:{position:"absolute",bottom:0,left:0,right:0,height:`${R/2}%`,background:Q,transition:"height 0.3s"}})}),n.jsx(V,{iconSrc:"/icons/0600127E.png",isActive:f===null,fillPct:j.length>0?Math.min(100,j.length/102*100):0,label:`Backpack (${j.length}/102)`,onClick:()=>p(null)}),w.map(o=>{const i=o.item_id,a=l.filter(r=>r.container_id===i&&r.item_id!==i).length,u=o.items_capacity||24,_=u>0?Math.min(100,a/u*100):0;return n.jsx(V,{iconSrc:`/icons/${E(o.icon)}.png`,isActive:f===i,fillPct:_,label:`${o.name} (${a}/${u})`,onClick:()=>p(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:[Array.from(A.values()).filter(o=>o.current_mana>0||o.max_mana>0).sort((o,i)=>(o.current_mana??999999)-(i.current_mana??999999)).map((o,i)=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,padding:"2px 4px",borderBottom:"1px solid #1a1a1a",cursor:"pointer"},onMouseEnter:a=>h(o,a),onMouseMove:a=>h(o,a),onMouseLeave:()=>h(null),children:[n.jsx("div",{style:{width:20,height:20,flexShrink:0},children:n.jsx(z,{item:o,size:20})}),n.jsx("div",{style:{width:8,height:8,borderRadius:"50%",background:o.current_mana>0?"#4c4":"#c44",flexShrink:0}}),n.jsx("div",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontSize:"0.68rem",color:"#ccc"},children:o.name}),n.jsxs("div",{style:{fontSize:"0.65rem",color:"#88bbff",whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums"},children:[o.current_mana??0,"/",o.max_mana??0]}),n.jsx("div",{style:{fontSize:"0.63rem",color:"#9c9",whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums",minWidth:42,textAlign:"right"},children:o.max_mana>0?oe(o.current_mana??0,o.max_mana??0):""})]},i)),Array.from(A.values()).filter(o=>o.current_mana>0||o.max_mana>0).length===0&&n.jsx("div",{style:{padding:12,color:"#555",textAlign:"center",fontSize:"0.7rem"},children:"No mana items equipped"})]})]})]}),L&&n.jsx(ne,{item:L.item,x:L.x,y:L.y})]})};function oe(e,t){if(t<=0||e<=0)return"0h00m";const s=e*20,l=Math.floor(s/3600),d=Math.floor(s%3600/60);return`~${l}h${String(d).padStart(2,"0")}m`}export{ae as InventoryWindow}; diff --git a/static/assets/InventoryWindow-i56DdW3Q.js b/static/assets/InventoryWindow-i56DdW3Q.js new file mode 100644 index 00000000..44602713 --- /dev/null +++ b/static/assets/InventoryWindow-i56DdW3Q.js @@ -0,0 +1 @@ +import{r as g,a as F,j as n,D as P}from"./index-DzGubmvT.js";import"./react-DlyoauG8.js";function X(e){var l,d;if(!e)return e;const t=c=>c!=null&&c!==-1&&c!==-1?c:void 0,s=e.IntValues||{};return{item_id:e.item_id??e.Id??0,name:e.name??e.Name??((l=e.StringValues)==null?void 0:l["1"])??"Unknown",icon:e.icon??e.Icon??0,object_class:e.object_class??e.ObjectClass??0,current_wielded_location:e.current_wielded_location??t(e.CurrentWieldedLocation)??t(Number(s[10]))??0,container_id:e.container_id??e.ContainerId??0,items_capacity:e.items_capacity??t(e.ItemsCapacity)??t(Number(s[6]))??((d=e.enhanced_properties)==null?void 0:d.ItemSlots_Decal)??void 0,value:e.value??t(e.Value)??t(Number(s[19]))??0,burden:e.burden??t(e.Burden)??t(Number(s[5]))??0,armor_level:e.armor_level??t(e.ArmorLevel),max_damage:e.max_damage??t(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??t(e.Tinks),workmanship:e.workmanship??t(e.Workmanship),equip_skill:e.equip_skill??e.equip_skill_name??e.EquipSkill??void 0,wield_level:e.wield_level??t(e.WieldLevel),skill_level:e.skill_level??t(e.SkillLevel),lore_requirement:e.lore_requirement??t(e.LoreRequirement),attack_bonus:e.attack_bonus??t(e.AttackBonus),melee_defense_bonus:e.melee_defense_bonus??t(e.MeleeDefenseBonus),magic_defense_bonus:e.magic_defense_bonus??t(e.MagicDBonus),damage_bonus:e.damage_bonus??t(e.DamageBonus),damage_rating:e.damage_rating??t(e.DamRating),crit_rating:e.crit_rating??t(e.CritRating),heal_boost_rating:e.heal_boost_rating??t(e.HealBoostRating),current_mana:e.current_mana??t(Number(s[218103815]))??void 0,max_mana:e.max_mana??t(Number(s[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??t(Number(s[218103849]))??void 0,icon_underlay_id:e.icon_underlay_id??t(Number(s[218103850]))??void 0,_raw:e}}function E(e){return!e||e<=0?"06000133":(e+100663296).toString(16).toUpperCase().padStart(8,"0")}const I={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}},M={},G=[32768,67108864,65536,131072,262144,524288],J=[1,512,2048,1024,4096,8192,16384,32,256],Z=[2,4,134217728,268435456,536870912,1073741824],ee=[2097152,1048576,4194304,16777216,33554432,8388608];(()=>{const e=new Set;Object.entries(I).forEach(([t,s])=>{const l=`${s.row}-${s.col}`,d=parseInt(t);e.has(l)||(e.add(l),G.includes(d)?M[l]="#3a2555":J.includes(d)?M[l]="#1e2e55":Z.includes(d)?M[l]="#1e3e3e":ee.includes(d)?M[l]="#142040":M[l]="#2a2a2a")})})();const $="#af7a30";function z({item:e,size:t=36}){const s={position:"absolute",top:0,left:0,width:t,height:t,border:"none",background:"transparent",imageRendering:"pixelated"},l=e.icon_underlay_id&&e.icon_underlay_id>100?`/icons/${E(e.icon_underlay_id)}.png`:null,d=e.icon_overlay_id&&e.icon_overlay_id>100?`/icons/${E(e.icon_overlay_id)}.png`:null;return n.jsxs("div",{style:{width:t,height:t,position:"relative"},children:[l&&n.jsx("img",{src:l,alt:"",style:{...s,zIndex:1},onError:c=>{c.target.style.display="none"}}),n.jsx("img",{src:`/icons/${E(e.icon)}.png`,alt:e.name,style:{...s,zIndex:2},onError:c=>{c.target.src="/icons/06000133.png"}}),d&&n.jsx("img",{src:d,alt:"",style:{...s,zIndex:3},onError:c=>{c.target.style.display="none"}})]})}function ne({item:e,x:t,y:s}){var b,f;const l=p=>p!=null&&p!==-1&&p!==-1,d=p=>p.toLocaleString(),c=p=>`${((p-1)*100).toFixed(1)}%`;return n.jsxs("div",{style:{position:"fixed",left:t+14,top:s+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]}),l(e.armor_level)&&n.jsxs("div",{style:{color:"#88ff88"},children:["Armor Level: ",e.armor_level]}),l(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}`:""]}),l(e.attack_bonus)&&e.attack_bonus!==1&&n.jsxs("div",{style:{color:"#88ff88"},children:["Attack: +",c(e.attack_bonus)]}),l(e.melee_defense_bonus)&&e.melee_defense_bonus!==1&&n.jsxs("div",{style:{color:"#88ff88"},children:["Melee Def: +",c(e.melee_defense_bonus)]}),l(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]}),l(e.wield_level)&&n.jsxs("div",{style:{color:"#ffaa00"},children:["Wield Level: ",e.wield_level]}),l(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]}),l(e.tinks)&&n.jsxs("div",{style:{color:"#88ff88"},children:["Tinks: ",e.tinks]}),l(e.damage_rating)&&n.jsxs("div",{children:["Damage Rating: ",e.damage_rating]}),l(e.crit_rating)&&n.jsxs("div",{children:["Crit Rating: ",e.crit_rating]}),l(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]}),l(e.current_mana)&&l(e.max_mana)&&n.jsxs("div",{style:{color:"#98d7ff"},children:["Mana: ",e.current_mana," / ",e.max_mana]}),((f=(b=e.spells)==null?void 0:b.spells)==null?void 0:f.length)>0&&n.jsxs("div",{style:{color:"#4a90e2",marginTop:4,fontSize:12},children:["Spells: ",e.spells.spells.map(p=>p.name).join(", ")]})]})}function V({iconSrc:e,isActive:t,fillPct:s,label:l,onClick:d}){const c=s>90?"#b7432c":s>70?"#d8a431":"#00ff00";return n.jsxs("div",{onClick:d,title:l,style:{display:"flex",alignItems:"flex-start",gap:2,cursor:"pointer",flexShrink:0,marginTop:3,position:"relative"},children:[t&&n.jsx("span",{style:{position:"absolute",left:-11,top:8,color:$,fontSize:10},children:"▶"}),n.jsx("div",{style:{width:30,height:30,border:t?"1px solid #00ff00":"1px solid #333",boxShadow:t?"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:b=>{b.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(s)}% full`,children:n.jsx("div",{style:{position:"absolute",bottom:0,left:0,right:0,height:`${s}%`,background:c,minHeight:s>0?2:0}})})]})}const ae=({id:e,charName:t,zIndex:s})=>{var T,O,U;const[l,d]=g.useState([]),[c,b]=g.useState(!0),[f,p]=g.useState(null),[L,D]=g.useState(null),[m,Y]=g.useState(null),[te,ie]=g.useState(null);g.useEffect(()=>{b(!0),Promise.all([F(`/inventory/${encodeURIComponent(t)}?limit=1000`).catch(()=>({items:[]})),F(`/character-stats/${encodeURIComponent(t)}`).catch(()=>null)]).then(([o,i])=>{const a=o.items??[];d(a.map(X)),Y(i)}).finally(()=>b(!1))},[t]);const h=g.useCallback((o,i)=>{D(o&&i?{item:o,x:i.clientX,y:i.clientY}:null)},[]),K=g.useMemo(()=>{const o=new Set,i=[];return Object.entries(I).forEach(([a,u])=>{const _=`${u.row}-${u.col}`;o.has(_)||(o.add(_),i.push({key:_,...u,mask:parseInt(a)}))}),i},[]),{equippedMap:A,containers:w,packItems:B}=g.useMemo(()=>{const o=new Map,i=[],a=new Set,u=new Map;l.forEach(r=>{r.object_class===10&&(i.push(r),a.add(r.item_id))}),i.sort((r,v)=>(r.item_id>>>0)-(v.item_id>>>0));let _=null;return l.forEach(r=>{r.current_wielded_location>0&&r.container_id&&!a.has(r.container_id)&&(_=r.container_id)}),l.forEach(r=>{if(a.has(r.item_id))return;const v=r.current_wielded_location;if(v>0)if(r.object_class===2)Object.entries(I).forEach(([S,x])=>{if((v&parseInt(S))===parseInt(S)){const y=`${x.row}-${x.col}`;o.has(y)||o.set(y,r)}});else{let S=!1;if(I[v]){const x=I[v],y=`${x.row}-${x.col}`;o.has(y)||(o.set(y,r),S=!0)}if(!S){for(const[x,y]of Object.entries(I))if((v&parseInt(x))===parseInt(x)){const N=`${y.row}-${y.col}`;if(!o.has(N)){o.set(N,r),S=!0;break}}}}else{let k=r.container_id||0;_&&k===_&&(k=0),u.has(k)||u.set(k,[]),u.get(k).push(r)}}),{equippedMap:o,containers:i,packItems:u}},[l]);let j=B.get(0)??[],q=0;if(j.length===0){let o=0;for(const[i,a]of B.entries())!w.some(u=>u.item_id===i)&&a.length>o&&(o=a.length,q=i);j=B.get(q)??[]}const W=f!==null?B.get(f)??[]:j,H=(m==null?void 0:m.burden_units)??((T=m==null?void 0:m.stats_data)==null?void 0:T.burden_units)??0,C=(m==null?void 0:m.encumbrance_capacity)??((O=m==null?void 0:m.stats_data)==null?void 0:O.encumbrance_capacity)??0,R=C>0?Math.min(200,H/C*100):0,Q=R>150?"#b7432c":R>100?"#d8a431":"#2e8b57";return c?n.jsx(P,{id:e,title:`Inventory: ${t}`,zIndex:s,width:572,height:720,children:n.jsx("div",{style:{padding:20,color:"#666",fontStyle:"italic"},children:"Loading inventory..."})}):n.jsxs(P,{id:e,title:`Inventory: ${t}`,zIndex:s,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:K.map(o=>{const i=A.get(o.key),a=M[o.key]??"#2a2a2a";return n.jsx("div",{style:{position:"absolute",left:(o.col-1)*44+4,top:(o.row-1)*44+4,width:36,height:36,background:i?"#5a5a62":a,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:u=>i&&h(i,u),onMouseMove:u=>i&&h(i,u),onMouseLeave:()=>h(null),children:i?n.jsx(z,{item:i,size:32}):n.jsx("img",{src:"/icons/06000133.png",alt:"",style:{width:28,height:28,opacity:.15,filter:"grayscale(100%)",imageRendering:"pixelated"}})},o.key)})}),n.jsxs("div",{style:{padding:"3px 6px",fontSize:11,color:"#ccc",background:"#111",borderBottom:`1px solid ${$}`},children:["Contents of ",f!==null?((U=w.find(o=>o.item_id===f))==null?void 0:U.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:[W.map((o,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:a=>h(o,a),onMouseMove:a=>h(o,a),onMouseLeave:()=>h(null),children:n.jsx(z,{item:o,size:32})},o.item_id??i)),Array.from({length:Math.max(0,24-W.length)}).map((o,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:C>0?`${Math.floor(R)}%`:"Burden"}),n.jsx("div",{style:{width:14,height:40,background:"#111",border:"1px solid #555",position:"relative",overflow:"hidden",marginBottom:6,flexShrink:0},title:C>0?`${H.toLocaleString()} / ${C.toLocaleString()}`:`Burden: ${l.reduce((o,i)=>o+(i.burden??0),0).toLocaleString()}`,children:n.jsx("div",{style:{position:"absolute",bottom:0,left:0,right:0,height:`${R/2}%`,background:Q,transition:"height 0.3s"}})}),n.jsx(V,{iconSrc:"/icons/0600127E.png",isActive:f===null,fillPct:j.length>0?Math.min(100,j.length/102*100):0,label:`Backpack (${j.length}/102)`,onClick:()=>p(null)}),w.map(o=>{const i=o.item_id,a=l.filter(r=>r.container_id===i&&r.item_id!==i).length,u=o.items_capacity||24,_=u>0?Math.min(100,a/u*100):0;return n.jsx(V,{iconSrc:`/icons/${E(o.icon)}.png`,isActive:f===i,fillPct:_,label:`${o.name} (${a}/${u})`,onClick:()=>p(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:[Array.from(A.values()).filter(o=>o.current_mana>0||o.max_mana>0).sort((o,i)=>(o.current_mana??999999)-(i.current_mana??999999)).map((o,i)=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,padding:"2px 4px",borderBottom:"1px solid #1a1a1a",cursor:"pointer"},onMouseEnter:a=>h(o,a),onMouseMove:a=>h(o,a),onMouseLeave:()=>h(null),children:[n.jsx("div",{style:{width:20,height:20,flexShrink:0},children:n.jsx(z,{item:o,size:20})}),n.jsx("div",{style:{width:8,height:8,borderRadius:"50%",background:o.current_mana>0?"#4c4":"#c44",flexShrink:0}}),n.jsx("div",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontSize:"0.68rem",color:"#ccc"},children:o.name}),n.jsxs("div",{style:{fontSize:"0.65rem",color:"#88bbff",whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums"},children:[o.current_mana??0,"/",o.max_mana??0]}),n.jsx("div",{style:{fontSize:"0.63rem",color:"#9c9",whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums",minWidth:42,textAlign:"right"},children:o.max_mana>0?oe(o.current_mana??0,o.max_mana??0):""})]},i)),Array.from(A.values()).filter(o=>o.current_mana>0||o.max_mana>0).length===0&&n.jsx("div",{style:{padding:12,color:"#555",textAlign:"center",fontSize:"0.7rem"},children:"No mana items equipped"})]})]})]}),L&&n.jsx(ne,{item:L.item,x:L.x,y:L.y})]})};function oe(e,t){if(t<=0||e<=0)return"0h00m";const s=e*20,l=Math.floor(s/3600),d=Math.floor(s%3600/60);return`~${l}h${String(d).padStart(2,"0")}m`}export{ae as InventoryWindow}; diff --git a/static/v2/assets/IssuesWindow-CSupRDWU.js b/static/assets/IssuesWindow-C0mPCUzZ.js similarity index 99% rename from static/v2/assets/IssuesWindow-CSupRDWU.js rename to static/assets/IssuesWindow-C0mPCUzZ.js index 0f905c02..ec752f72 100644 --- a/static/v2/assets/IssuesWindow-CSupRDWU.js +++ b/static/assets/IssuesWindow-C0mPCUzZ.js @@ -1 +1 @@ -import{r as n,a as W,j as e,D as L}from"./index-BfJ04YaG.js";import"./react-DlyoauG8.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-DzGubmvT.js";import"./react-DlyoauG8.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/IssuesWindow-Dy_uT95Z.js b/static/assets/IssuesWindow-Dy_uT95Z.js new file mode 100644 index 00000000..cfa8b6a7 --- /dev/null +++ b/static/assets/IssuesWindow-Dy_uT95Z.js @@ -0,0 +1 @@ +import{r as n,a as W,j as e,D as L}from"./index-DnlpBAAU.js";import"./react-DlyoauG8.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/v2/assets/RadarWindow-T2z8FzRN.js b/static/assets/RadarWindow-D-MsBExK.js similarity index 99% rename from static/v2/assets/RadarWindow-T2z8FzRN.js rename to static/assets/RadarWindow-D-MsBExK.js index c5144804..e78de7cd 100644 --- a/static/v2/assets/RadarWindow-T2z8FzRN.js +++ b/static/assets/RadarWindow-D-MsBExK.js @@ -1 +1 @@ -import{r as x,j as c,D as ne}from"./index-BfJ04YaG.js";import"./react-DlyoauG8.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-DnlpBAAU.js";import"./react-DlyoauG8.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/RadarWindow-DdjDk5uC.js b/static/assets/RadarWindow-DdjDk5uC.js new file mode 100644 index 00000000..ab89b9c8 --- /dev/null +++ b/static/assets/RadarWindow-DdjDk5uC.js @@ -0,0 +1 @@ +import{r as x,j as c,D as ne}from"./index-DzGubmvT.js";import"./react-DlyoauG8.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/v2/assets/StatsWindow-BT7jJ8yH.js b/static/assets/StatsWindow-DHrHJUlg.js similarity index 93% rename from static/v2/assets/StatsWindow-BT7jJ8yH.js rename to static/assets/StatsWindow-DHrHJUlg.js index 4ce1021e..50789d15 100644 --- a/static/v2/assets/StatsWindow-BT7jJ8yH.js +++ b/static/assets/StatsWindow-DHrHJUlg.js @@ -1 +1 @@ -import{r as o,j as t,D as d}from"./index-BfJ04YaG.js";import"./react-DlyoauG8.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-DzGubmvT.js";import"./react-DlyoauG8.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/StatsWindow-q03hLla2.js b/static/assets/StatsWindow-q03hLla2.js new file mode 100644 index 00000000..ab3a7526 --- /dev/null +++ b/static/assets/StatsWindow-q03hLla2.js @@ -0,0 +1 @@ +import{r as o,j as t,D as d}from"./index-DnlpBAAU.js";import"./react-DlyoauG8.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/v2/assets/VitalSharingWindow-CwE3JOVC.js b/static/assets/VitalSharingWindow-By-4xWC-.js similarity index 97% rename from static/v2/assets/VitalSharingWindow-CwE3JOVC.js rename to static/assets/VitalSharingWindow-By-4xWC-.js index d4d1b489..d2e4eece 100644 --- a/static/v2/assets/VitalSharingWindow-CwE3JOVC.js +++ b/static/assets/VitalSharingWindow-By-4xWC-.js @@ -1 +1 @@ -import{r as n,j as t,D as x,a as m}from"./index-BfJ04YaG.js";import"./react-DlyoauG8.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-DzGubmvT.js";import"./react-DlyoauG8.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/VitalSharingWindow-CJ_MKmdH.js b/static/assets/VitalSharingWindow-CJ_MKmdH.js new file mode 100644 index 00000000..40dd9522 --- /dev/null +++ b/static/assets/VitalSharingWindow-CJ_MKmdH.js @@ -0,0 +1 @@ +import{r as n,j as t,D as x,a as m}from"./index-DnlpBAAU.js";import"./react-DlyoauG8.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-CyLyPOVJ.css b/static/assets/index-CyLyPOVJ.css new file mode 100644 index 00000000..784c0d04 --- /dev/null +++ b/static/assets/index-CyLyPOVJ.css @@ -0,0 +1 @@ +*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--bg-body: #0d0d0d;--bg-card: #1a1a1a;--bg-card-hover: #222;--bg-header: #111;--border: #333;--text: #ddd;--text-muted: #888;--text-dim: #555;--accent: #4488ff;--hp: linear-gradient(90deg, #ff4444, #ff6666);--hp-bg: #330000;--sta: linear-gradient(90deg, #ffaa00, #ffcc44);--sta-bg: #331a00;--mana: linear-gradient(90deg, #4488ff, #66aaff);--mana-bg: #001433;--badge-combat: #44cc44;--badge-nav: #ffaa00;--badge-idle: #666;--radius: 6px}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg-body);color:var(--text);line-height:1.4;min-height:100vh}.dashboard{display:flex;flex-direction:column;min-height:100vh}.dashboard-header{background:var(--bg-header);border-bottom:1px solid var(--border);padding:12px 24px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100}.dashboard-title{font-size:1.2rem;font-weight:600;color:var(--accent)}.dashboard-nav{display:flex;gap:16px}.nav-link{color:var(--text-muted);text-decoration:none;font-size:.85rem;transition:color .2s}.nav-link:hover{color:var(--text)}.dashboard-main{flex:1;padding:16px 24px;max-width:1600px;margin:0 auto;width:100%}.global-stats{display:flex;gap:24px;padding:12px 0;margin-bottom:16px;border-bottom:1px solid var(--border);flex-wrap:wrap}.global-stat{display:flex;align-items:center;gap:6px}.global-value{font-size:1.1rem;font-weight:600;color:var(--text)}.global-label{font-size:.75rem;color:var(--text-muted)}.server-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.server-dot.online{background:#4c4}.server-dot.offline{background:#c44}.char-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}.grid-empty{text-align:center;color:var(--text-muted);padding:48px;font-size:1rem}.char-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px;cursor:pointer;transition:background .15s,border-color .15s}.char-card:hover{background:var(--bg-card-hover);border-color:#444}.char-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.char-name{font-size:.9rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.char-badge{font-size:.65rem;font-weight:700;text-transform:uppercase;padding:2px 8px;border-radius:3px;letter-spacing:.5px}.badge-combat{background:#4c43;color:var(--badge-combat)}.badge-nav{background:#fa03;color:var(--badge-nav)}.badge-idle{background:#64646433;color:var(--badge-idle)}.char-vitals{display:flex;flex-direction:column;gap:3px;margin-bottom:8px}.char-vitals-placeholder{font-size:.75rem;color:var(--text-dim);margin-bottom:8px;font-style:italic}.vital-bar{display:flex;align-items:center;gap:6px}.vital-label{font-size:.65rem;color:var(--text-muted);width:20px;text-align:right}.vital-track{flex:1;height:6px;border-radius:3px;overflow:hidden}.vital-fill{height:100%;border-radius:3px;transition:width .3s ease-out}.vital-text{font-size:.65rem;color:var(--text-muted);width:65px;text-align:right;font-variant-numeric:tabular-nums}.char-stats-row{display:flex;gap:12px;margin-bottom:4px}.stat{display:flex;flex-direction:column;align-items:center}.stat-value{font-size:.85rem;font-weight:600;font-variant-numeric:tabular-nums}.stat-label{font-size:.6rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.3px}.char-location{font-size:.7rem;color:var(--text-dim);text-align:right}.char-expanded{margin-top:8px;padding-top:8px;border-top:1px solid var(--border)}.expanded-row{display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-muted);margin-bottom:2px}.vitae-warn{color:#f66;font-size:.8rem;font-weight:600;margin-bottom:4px}.tab-container{margin-top:24px;border-top:1px solid var(--border);padding-top:16px}.tab-bar{display:flex;gap:4px;margin-bottom:16px;overflow-x:auto;-webkit-overflow-scrolling:touch}.tab-btn{padding:8px 20px;font-size:.85rem;background:var(--bg-card);color:var(--text-muted);border:1px solid var(--border);border-radius:var(--radius) var(--radius) 0 0;cursor:pointer;transition:background .15s,color .15s;white-space:nowrap}.tab-btn:hover{background:var(--bg-card-hover);color:var(--text)}.tab-btn.active{background:var(--bg-card-hover);color:var(--accent);border-bottom-color:var(--bg-body)}.tab-content{min-height:300px}.chart-section{margin-bottom:24px}.chart-title{font-size:.9rem;font-weight:600;color:var(--text);margin-bottom:12px}.rares-summary{display:flex;gap:16px;margin-bottom:20px;flex-wrap:wrap}.rare-stat-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:12px 20px;display:flex;flex-direction:column;align-items:center;min-width:140px}.rare-stat-value{font-size:1.3rem;font-weight:700;color:#fc0}.rare-stat-label{font-size:.7rem;color:var(--text-muted);margin-top:4px}.rare-timeline{max-height:200px;overflow-y:auto}.rare-event{display:flex;gap:12px;padding:4px 0;border-bottom:1px solid #222;font-size:.8rem}.rare-time{color:var(--text-dim);width:80px}.rare-char{color:var(--text-muted);width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rare-name{color:#fc0;font-weight:600}.map-tab{display:flex;flex-direction:column;align-items:center}.map-container{position:relative;width:100%;max-width:800px;aspect-ratio:1}.map-image{width:100%;height:100%;object-fit:contain;display:block}.map-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.map-legend{display:flex;gap:16px;align-items:center;margin-top:8px;font-size:.75rem;color:var(--text-muted)}.legend-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px}.legend-dot.hunting{background:#4c4}.legend-dot.other{background:#fa0}.map-count{margin-left:auto}.inventory-tab{width:100%}.search-bar{display:flex;align-items:center;gap:8px;margin-bottom:8px}.search-input{flex:1;padding:8px 12px;font-size:.9rem;background:var(--bg-card);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);outline:none}.search-input:focus{border-color:var(--accent)}.search-spinner{font-size:.75rem;color:var(--text-muted)}.search-count{font-size:.75rem;color:var(--text-muted);margin-bottom:8px}.search-empty{text-align:center;color:var(--text-dim);padding:24px}.results-table{width:100%;border-collapse:collapse;font-size:.8rem}.results-table th{text-align:left;padding:6px 8px;border-bottom:1px solid var(--border);color:var(--text-muted);font-weight:600;font-size:.72rem;text-transform:uppercase;letter-spacing:.3px}.results-table td{padding:4px 8px;border-bottom:1px solid #1a1a1a;color:var(--text)}.results-table tr:hover td{background:var(--bg-card-hover)}.item-name{font-weight:500}@media(max-width:768px){.dashboard-header{flex-direction:column;gap:8px;padding:10px 16px}.dashboard-main{padding:12px}.global-stats{gap:16px}.char-grid{grid-template-columns:1fr}.char-stats-row{gap:8px}}@media(max-width:480px){.dashboard-nav{gap:10px;font-size:.8rem}.char-card{padding:10px}}.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}.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-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-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-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-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}}@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}} diff --git a/static/v2/assets/index-BfJ04YaG.js b/static/assets/index-DnlpBAAU.js similarity index 86% rename from static/v2/assets/index-BfJ04YaG.js rename to static/assets/index-DnlpBAAU.js index a6639845..d38f5311 100644 --- a/static/v2/assets/index-BfJ04YaG.js +++ b/static/assets/index-DnlpBAAU.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StatsWindow-BT7jJ8yH.js","assets/react-DlyoauG8.js","assets/CharacterWindow-C26CdTBY.js","assets/InventoryWindow-DLq3agcE.js","assets/RadarWindow-T2z8FzRN.js","assets/CombatStatsWindow-Ct0adxan.js","assets/CombatPickerWindow-BOlAFaCG.js","assets/IssuesWindow-CSupRDWU.js","assets/VitalSharingWindow-CwE3JOVC.js","assets/DashboardView-ReNIceoO.js"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StatsWindow-q03hLla2.js","assets/react-DlyoauG8.js","assets/CharacterWindow-CKLgR9TL.js","assets/InventoryWindow-CulnI71j.js","assets/RadarWindow-D-MsBExK.js","assets/CombatStatsWindow-LemLw4OR.js","assets/CombatPickerWindow-CLkjJTHh.js","assets/IssuesWindow-Dy_uT95Z.js","assets/VitalSharingWindow-CJ_MKmdH.js","assets/DashboardView-BLrx64Ns.js"])))=>i.map(i=>d[i]); import{r as p0,g as tv,a as av}from"./react-DlyoauG8.js";(function(){const O=document.createElement("link").relList;if(O&&O.supports&&O.supports("modulepreload"))return;for(const p of document.querySelectorAll('link[rel="modulepreload"]'))o(p);new MutationObserver(p=>{for(const E of p)if(E.type==="childList")for(const D of E.addedNodes)D.tagName==="LINK"&&D.rel==="modulepreload"&&o(D)}).observe(document,{childList:!0,subtree:!0});function M(p){const E={};return p.integrity&&(E.integrity=p.integrity),p.referrerPolicy&&(E.referrerPolicy=p.referrerPolicy),p.crossOrigin==="use-credentials"?E.credentials="include":p.crossOrigin==="anonymous"?E.credentials="omit":E.credentials="same-origin",E}function o(p){if(p.ep)return;p.ep=!0;const E=M(p);fetch(p.href,E)}})();var sf={exports:{}},gu={};/** * @license React * react-jsx-runtime.production.js @@ -31,4 +31,4 @@ import{r as p0,g as tv,a as av}from"./react-DlyoauG8.js";(function(){const O=doc `+f[e].replace(" at new "," at ");return l.displayName&&S.includes("")&&(S=S.replace("",l.displayName)),S}while(1<=e&&0<=u);break}}}finally{Kn=!1,Error.prepareStackTrace=a}return(a=l?l.displayName||l.name:"")?Ta(a):""}function j0(l,t){switch(l.tag){case 26:case 27:case 5:return Ta(l.type);case 16:return Ta("Lazy");case 13:return l.child!==t&&t!==null?Ta("Suspense Fallback"):Ta("Suspense");case 19:return Ta("SuspenseList");case 0:case 15:return Jn(l.type,!1);case 11:return Jn(l.type.render,!1);case 1:return Jn(l.type,!0);case 31:return Ta("Activity");default:return""}}function yf(l){try{var t="",a=null;do t+=j0(l,a),a=l,l=l.return;while(l);return t}catch(e){return` Error generating stack: `+e.message+` `+e.stack}}var wn=Object.prototype.hasOwnProperty,Wn=d.unstable_scheduleCallback,kn=d.unstable_cancelCallback,C0=d.unstable_shouldYield,R0=d.unstable_requestPaint,$l=d.unstable_now,H0=d.unstable_getCurrentPriorityLevel,rf=d.unstable_ImmediatePriority,gf=d.unstable_UserBlockingPriority,Mu=d.unstable_NormalPriority,B0=d.unstable_LowPriority,Sf=d.unstable_IdlePriority,q0=d.log,Y0=d.unstable_setDisableYieldValue,_e=null,Il=null;function Wt(l){if(typeof q0=="function"&&Y0(l),Il&&typeof Il.setStrictMode=="function")try{Il.setStrictMode(_e,l)}catch{}}var Pl=Math.clz32?Math.clz32:Q0,X0=Math.log,G0=Math.LN2;function Q0(l){return l>>>=0,l===0?32:31-(X0(l)/G0|0)|0}var _u=256,pu=262144,Du=4194304;function Aa(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 Ou(l,t,a){var e=l.pendingLanes;if(e===0)return 0;var u=0,n=l.suspendedLanes,c=l.pingedLanes;l=l.warmLanes;var i=e&134217727;return i!==0?(e=i&~n,e!==0?u=Aa(e):(c&=i,c!==0?u=Aa(c):a||(a=i&~l,a!==0&&(u=Aa(a))))):(i=e&~n,i!==0?u=Aa(i):c!==0?u=Aa(c):a||(a=e&~l,a!==0&&(u=Aa(a)))),u===0?0:t!==0&&t!==u&&(t&n)===0&&(n=u&-u,a=t&-t,n>=a||n===32&&(a&4194048)!==0)?t:u}function pe(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function Z0(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 bf(){var l=Du;return Du<<=1,(Du&62914560)===0&&(Du=4194304),l}function Fn(l){for(var t=[],a=0;31>a;a++)t.push(l);return t}function De(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function V0(l,t,a,e,u,n){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,f=l.expirationTimes,v=l.hiddenUpdates;for(a=c&~a;0"u")return null;try{return l.activeElement||l.body}catch{return l.body}}var k0=/[\n"\\]/g;function ft(l){return l.replace(k0,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function ac(l,t,a,e,u,n,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?ec(l,c,it(t)):a!=null?ec(l,c,it(a)):e!=null&&l.removeAttribute("value"),u==null&&n!=null&&(l.defaultChecked=!!n),u!=null&&(l.checked=u&&typeof u!="function"&&typeof u!="symbol"),i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?l.name=""+it(i):l.removeAttribute("name")}function jf(l,t,a,e,u,n,c,i){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(l.type=n),t!=null||a!=null){if(!(n!=="submit"&&n!=="reset"||t!=null)){tc(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??u,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),tc(l)}function ec(l,t,a){t==="number"&&Uu(l.ownerDocument)===l||l.defaultValue===""+a||(l.defaultValue=""+a)}function Ja(l,t,a,e){if(l=l.options,t){t={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),fc=!1;if(Nt)try{var Ue={};Object.defineProperty(Ue,"passive",{get:function(){fc=!0}}),window.addEventListener("test",Ue,Ue),window.removeEventListener("test",Ue,Ue)}catch{fc=!1}var Ft=null,sc=null,Cu=null;function Xf(){if(Cu)return Cu;var l,t=sc,a=t.length,e,u="value"in Ft?Ft.value:Ft.textContent,n=u.length;for(l=0;l=Re),Kf=" ",Jf=!1;function wf(l,t){switch(l){case"keyup":return Ed.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Wf(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var Fa=!1;function _d(l,t){switch(l){case"compositionend":return Wf(t);case"keypress":return t.which!==32?null:(Jf=!0,Kf);case"textInput":return l=t.data,l===Kf&&Jf?null:l;default:return null}}function pd(l,t){if(Fa)return l==="compositionend"||!vc&&wf(l,t)?(l=Xf(),Cu=sc=Ft=null,Fa=!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=as(a)}}function us(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?us(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function ns(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=Uu(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=Uu(l.document)}return t}function gc(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 Rd=Nt&&"documentMode"in document&&11>=document.documentMode,$a=null,Sc=null,Ye=null,bc=!1;function cs(l,t,a){var e=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;bc||$a==null||$a!==Uu(e)||(e=$a,"selectionStart"in e&&gc(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=Dn(Sc,"onSelect"),0>=c,u-=c,At=1<<32-Pl(t)+u|a<J?(ll=X,X=null):ll=X.sibling;var el=y(m,X,h[J],z);if(el===null){X===null&&(X=ll);break}l&&X&&el.alternate===null&&t(m,X),s=n(el,s,J),al===null?G=el:al.sibling=el,al=el,X=ll}if(J===h.length)return a(m,X),tl&&Ut(m,J),G;if(X===null){for(;JJ?(ll=X,X=null):ll=X.sibling;var Sa=y(m,X,el.value,z);if(Sa===null){X===null&&(X=ll);break}l&&X&&Sa.alternate===null&&t(m,X),s=n(Sa,s,J),al===null?G=Sa:al.sibling=Sa,al=Sa,X=ll}if(el.done)return a(m,X),tl&&Ut(m,J),G;if(X===null){for(;!el.done;J++,el=h.next())el=A(m,el.value,z),el!==null&&(s=n(el,s,J),al===null?G=el:al.sibling=el,al=el);return tl&&Ut(m,J),G}for(X=e(X);!el.done;J++,el=h.next())el=g(X,m,J,el.value,z),el!==null&&(l&&el.alternate!==null&&X.delete(el.key===null?J:el.key),s=n(el,s,J),al===null?G=el:al.sibling=el,al=el);return l&&X.forEach(function(lv){return t(m,lv)}),tl&&Ut(m,J),G}function ol(m,s,h,z){if(typeof h=="object"&&h!==null&&h.type===I&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case W:l:{for(var G=h.key;s!==null;){if(s.key===G){if(G=h.type,G===I){if(s.tag===7){a(m,s.sibling),z=u(s,h.props.children),z.return=m,m=z;break l}}else if(s.elementType===G||typeof G=="object"&&G!==null&&G.$$typeof===Y&&Ca(G)===s.type){a(m,s.sibling),z=u(s,h.props),Le(z,h),z.return=m,m=z;break l}a(m,s);break}else t(m,s);s=s.sibling}h.type===I?(z=Oa(h.props.children,m.mode,z,h.key),z.return=m,m=z):(z=Vu(h.type,h.key,h.props,null,m.mode,z),Le(z,h),z.return=m,m=z)}return c(m);case Z:l:{for(G=h.key;s!==null;){if(s.key===G)if(s.tag===4&&s.stateNode.containerInfo===h.containerInfo&&s.stateNode.implementation===h.implementation){a(m,s.sibling),z=u(s,h.children||[]),z.return=m,m=z;break l}else{a(m,s);break}else t(m,s);s=s.sibling}z=pc(h,m.mode,z),z.return=m,m=z}return c(m);case Y:return h=Ca(h),ol(m,s,h,z)}if(pt(h))return q(m,s,h,z);if(_l(h)){if(G=_l(h),typeof G!="function")throw Error(o(150));return h=G.call(h),Q(m,s,h,z)}if(typeof h.then=="function")return ol(m,s,Fu(h),z);if(h.$$typeof===Al)return ol(m,s,Ju(m,h),z);$u(m,h)}return typeof h=="string"&&h!==""||typeof h=="number"||typeof h=="bigint"?(h=""+h,s!==null&&s.tag===6?(a(m,s.sibling),z=u(s,h),z.return=m,m=z):(a(m,s),z=_c(h,m.mode,z),z.return=m,m=z),c(m)):a(m,s)}return function(m,s,h,z){try{Ve=0;var G=ol(m,s,h,z);return fe=null,G}catch(X){if(X===ie||X===Wu)throw X;var al=tt(29,X,null,m.mode);return al.lanes=z,al.return=m,al}finally{}}}var Ha=Ns(!0),xs=Ns(!1),ta=!1;function Yc(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Xc(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 aa(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function ea(l,t,a){var e=l.updateQueue;if(e===null)return null;if(e=e.shared,(ul&2)!==0){var u=e.pending;return u===null?t.next=t:(t.next=u.next,u.next=t),e.pending=t,t=Zu(l),hs(l,null,a),t}return Qu(l,e,t,a),Zu(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,Tf(l,a)}}function Gc(l,t){var a=l.updateQueue,e=l.alternate;if(e!==null&&(e=e.updateQueue,a===e)){var u=null,n=null;if(a=a.firstBaseUpdate,a!==null){do{var c={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};n===null?u=n=c:n=n.next=c,a=a.next}while(a!==null);n===null?u=n=t:n=n.next=t}else u=n=t;a={baseState:e.baseState,firstBaseUpdate:u,lastBaseUpdate:n,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 Qc=!1;function Je(){if(Qc){var l=ce;if(l!==null)throw l}}function we(l,t,a,e){Qc=!1;var u=l.updateQueue;ta=!1;var n=u.firstBaseUpdate,c=u.lastBaseUpdate,i=u.shared.pending;if(i!==null){u.shared.pending=null;var f=i,v=f.next;f.next=null,c===null?n=v:c.next=v,c=f;var S=l.alternate;S!==null&&(S=S.updateQueue,i=S.lastBaseUpdate,i!==c&&(i===null?S.firstBaseUpdate=v:i.next=v,S.lastBaseUpdate=f))}if(n!==null){var A=u.baseState;c=0,S=v=f=null,i=n;do{var y=i.lane&-536870913,g=y!==i.lane;if(g?(P&y)===y:(e&y)===y){y!==0&&y===ne&&(Qc=!0),S!==null&&(S=S.next={lane:0,tag:i.tag,payload:i.payload,callback:null,next:null});l:{var q=l,Q=i;y=t;var ol=a;switch(Q.tag){case 1:if(q=Q.payload,typeof q=="function"){A=q.call(ol,A,y);break l}A=q;break l;case 3:q.flags=q.flags&-65537|128;case 0:if(q=Q.payload,y=typeof q=="function"?q.call(ol,A,y):q,y==null)break l;A=x({},A,y);break l;case 2:ta=!0}}y=i.callback,y!==null&&(l.flags|=64,g&&(l.flags|=8192),g=u.callbacks,g===null?u.callbacks=[y]:g.push(y))}else g={lane:y,tag:i.tag,payload:i.payload,callback:i.callback,next:null},S===null?(v=S=g,f=A):S=S.next=g,c|=y;if(i=i.next,i===null){if(i=u.shared.pending,i===null)break;g=i,i=g.next,g.next=null,u.lastBaseUpdate=g,u.shared.pending=null}}while(!0);S===null&&(f=A),u.baseState=f,u.firstBaseUpdate=v,u.lastBaseUpdate=S,n===null&&(u.shared.lanes=0),fa|=c,l.lanes=c,l.memoizedState=A}}function Us(l,t){if(typeof l!="function")throw Error(o(191,l));l.call(t)}function js(l,t){var a=l.callbacks;if(a!==null)for(l.callbacks=null,l=0;ln?n:8;var c=T.T,i={};T.T=i,ci(l,!1,t,a);try{var f=u(),v=T.S;if(v!==null&&v(i,f),f!==null&&typeof f=="object"&&typeof f.then=="function"){var S=Vd(f,e);Fe(l,t,S,ct(l))}else Fe(l,t,e,ct(l))}catch(A){Fe(l,t,{then:function(){},status:"rejected",reason:A},ct())}finally{C.p=n,c!==null&&i.types!==null&&(c.types=i.types),T.T=c}}function kd(){}function ui(l,t,a,e){if(l.tag!==5)throw Error(o(476));var u=oo(l).queue;so(l,u,t,V,a===null?kd:function(){return mo(l),a(e)})}function oo(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:V,baseState:V,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ht,lastRenderedState:V},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ht,lastRenderedState:a},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function mo(l){var t=oo(l);t.next===null&&(t=l.alternate.memoizedState),Fe(l,t.next.queue,{},ct())}function ni(){return ql(hu)}function ho(){return Ml().memoizedState}function vo(){return Ml().memoizedState}function Fd(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var a=ct();l=aa(a);var e=ea(t,l,a);e!==null&&(Wl(e,t,a),Ke(e,t,a)),t={cache:Rc()},l.payload=t;return}t=t.return}}function $d(l,t,a){var e=ct();a={lane:e,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},fn(l)?ro(t,a):(a=Ec(l,t,a,e),a!==null&&(Wl(a,l,e),go(a,t,e)))}function yo(l,t,a){var e=ct();Fe(l,t,a,e)}function Fe(l,t,a,e){var u={lane:e,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(fn(l))ro(t,u);else{var n=l.alternate;if(l.lanes===0&&(n===null||n.lanes===0)&&(n=t.lastRenderedReducer,n!==null))try{var c=t.lastRenderedState,i=n(c,a);if(u.hasEagerState=!0,u.eagerState=i,lt(i,c))return Qu(l,t,u,0),ml===null&&Gu(),!1}catch{}finally{}if(a=Ec(l,t,u,e),a!==null)return Wl(a,l,e),go(a,t,e),!0}return!1}function ci(l,t,a,e){if(e={lane:2,revertLane:Yi(),gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null},fn(l)){if(t)throw Error(o(479))}else t=Ec(l,a,e,2),t!==null&&Wl(t,l,2)}function fn(l){var t=l.alternate;return l===K||t!==null&&t===K}function ro(l,t){oe=ln=!0;var a=l.pending;a===null?t.next=t:(t.next=a.next,a.next=t),l.pending=t}function go(l,t,a){if((a&4194048)!==0){var e=t.lanes;e&=l.pendingLanes,a|=e,t.lanes=a,Tf(l,a)}}var $e={readContext:ql,use:en,useCallback:zl,useContext:zl,useEffect:zl,useImperativeHandle:zl,useLayoutEffect:zl,useInsertionEffect:zl,useMemo:zl,useReducer:zl,useRef:zl,useState:zl,useDebugValue:zl,useDeferredValue:zl,useTransition:zl,useSyncExternalStore:zl,useId:zl,useHostTransitionStatus:zl,useFormState:zl,useActionState:zl,useOptimistic:zl,useMemoCache:zl,useCacheRefresh:zl};$e.useEffectEvent=zl;var So={readContext:ql,use:en,useCallback:function(l,t){return Ql().memoizedState=[l,t===void 0?null:t],l},useContext:ql,useEffect:lo,useImperativeHandle:function(l,t,a){a=a!=null?a.concat([l]):null,nn(4194308,4,uo.bind(null,t,l),a)},useLayoutEffect:function(l,t){return nn(4194308,4,l,t)},useInsertionEffect:function(l,t){nn(4,2,l,t)},useMemo:function(l,t){var a=Ql();t=t===void 0?null:t;var e=l();if(Ba){Wt(!0);try{l()}finally{Wt(!1)}}return a.memoizedState=[e,t],e},useReducer:function(l,t,a){var e=Ql();if(a!==void 0){var u=a(t);if(Ba){Wt(!0);try{a(t)}finally{Wt(!1)}}}else u=t;return e.memoizedState=e.baseState=u,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:u},e.queue=l,l=l.dispatch=$d.bind(null,K,l),[e.memoizedState,l]},useRef:function(l){var t=Ql();return l={current:l},t.memoizedState=l},useState:function(l){l=Pc(l);var t=l.queue,a=yo.bind(null,K,t);return t.dispatch=a,[l.memoizedState,a]},useDebugValue:ai,useDeferredValue:function(l,t){var a=Ql();return ei(a,l,t)},useTransition:function(){var l=Pc(!1);return l=so.bind(null,K,l.queue,!0,!1),Ql().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,a){var e=K,u=Ql();if(tl){if(a===void 0)throw Error(o(407));a=a()}else{if(a=t(),ml===null)throw Error(o(349));(P&127)!==0||Ys(e,t,a)}u.memoizedState=a;var n={value:a,getSnapshot:t};return u.queue=n,lo(Gs.bind(null,e,n,l),[l]),e.flags|=2048,de(9,{destroy:void 0},Xs.bind(null,e,n,a,t),null),a},useId:function(){var l=Ql(),t=ml.identifierPrefix;if(tl){var a=Et,e=At;a=(e&~(1<<32-Pl(e)-1)).toString(32)+a,t="_"+t+"R_"+a,a=tn++,0<\/script>",n=n.removeChild(n.firstChild);break;case"select":n=typeof e.is=="string"?c.createElement("select",{is:e.is}):c.createElement("select"),e.multiple?n.multiple=!0:e.size&&(n.size=e.size);break;default:n=typeof e.is=="string"?c.createElement(u,{is:e.is}):c.createElement(u)}}n[Hl]=t,n[Zl]=e;l:for(c=t.child;c!==null;){if(c.tag===5||c.tag===6)n.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=n;l:switch(Xl(n,u,e),u){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 gl(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(o(166));if(l=wt.current,ee(t)){if(l=t.stateNode,a=t.memoizedProps,e=null,u=Bl,u!==null)switch(u.tag){case 27:case 5:e=u.memoizedProps}l[Hl]=t,l=!!(l.nodeValue===a||e!==null&&e.suppressHydrationWarning===!0||qm(l.nodeValue,a)),l||Pt(t,!0)}else l=On(l).createTextNode(e),l[Hl]=t,t.stateNode=l}return gl(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(o(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(o(557));l[Hl]=t}else Na(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;gl(t),l=!1}else a=xc(),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(o(558))}return gl(t),null;case 13:if(e=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(u=ee(t),e!==null&&e.dehydrated!==null){if(l===null){if(!u)throw Error(o(318));if(u=t.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(o(317));u[Hl]=t}else Na(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;gl(t),u=!1}else u=xc(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=u),u=!0;if(!u)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,u=null,e.alternate!==null&&e.alternate.memoizedState!==null&&e.alternate.memoizedState.cachePool!==null&&(u=e.alternate.memoizedState.cachePool.pool),n=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),n!==u&&(e.flags|=2048)),a!==l&&a&&(t.child.flags|=8192),hn(t,t.updateQueue),gl(t),null);case 4:return Ga(),l===null&&Zi(t.stateNode.containerInfo),gl(t),null;case 10:return Ct(t.type),gl(t),null;case 19:if(bl(El),e=t.memoizedState,e===null)return gl(t),null;if(u=(t.flags&128)!==0,n=e.rendering,n===null)if(u)Pe(e,!1);else{if(Tl!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(n=Pu(l),n!==null){for(t.flags|=128,Pe(e,!1),l=n.updateQueue,t.updateQueue=l,hn(t,l),t.subtreeFlags=0,l=a,a=t.child;a!==null;)vs(a,l),a=a.sibling;return nl(El,El.current&1|2),tl&&Ut(t,e.treeForkCount),t.child}l=l.sibling}e.tail!==null&&$l()>Sn&&(t.flags|=128,u=!0,Pe(e,!1),t.lanes=4194304)}else{if(!u)if(l=Pu(n),l!==null){if(t.flags|=128,u=!0,l=l.updateQueue,t.updateQueue=l,hn(t,l),Pe(e,!0),e.tail===null&&e.tailMode==="hidden"&&!n.alternate&&!tl)return gl(t),null}else 2*$l()-e.renderingStartTime>Sn&&a!==536870912&&(t.flags|=128,u=!0,Pe(e,!1),t.lanes=4194304);e.isBackwards?(n.sibling=t.child,t.child=n):(l=e.last,l!==null?l.sibling=n:t.child=n,e.last=n)}return e.tail!==null?(l=e.tail,e.rendering=l,e.tail=l.sibling,e.renderingStartTime=$l(),l.sibling=null,a=El.current,nl(El,u?a&1|2:a&1),tl&&Ut(t,e.treeForkCount),l):(gl(t),null);case 22:case 23:return et(t),Vc(),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&&(gl(t),t.subtreeFlags&6&&(t.flags|=8192)):gl(t),a=t.updateQueue,a!==null&&hn(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&&bl(ja),null;case 24:return a=null,l!==null&&(a=l.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),Ct(pl),gl(t),null;case 25:return null;case 30:return null}throw Error(o(156,t.tag))}function ah(l,t){switch(Oc(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return Ct(pl),Ga(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return Eu(t),null;case 31:if(t.memoizedState!==null){if(et(t),t.alternate===null)throw Error(o(340));Na()}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(o(340));Na()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return bl(El),null;case 4:return Ga(),null;case 10:return Ct(t.type),null;case 22:case 23:return et(t),Vc(),l!==null&&bl(ja),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return Ct(pl),null;case 25:return null;default:return null}}function Zo(l,t){switch(Oc(t),t.tag){case 3:Ct(pl),Ga();break;case 26:case 27:case 5:Eu(t);break;case 4:Ga();break;case 31:t.memoizedState!==null&&et(t);break;case 13:et(t);break;case 19:bl(El);break;case 10:Ct(t.type);break;case 22:case 23:et(t),Vc(),l!==null&&bl(ja);break;case 24:Ct(pl)}}function lu(l,t){try{var a=t.updateQueue,e=a!==null?a.lastEffect:null;if(e!==null){var u=e.next;a=u;do{if((a.tag&l)===l){e=void 0;var n=a.create,c=a.inst;e=n(),c.destroy=e}a=a.next}while(a!==u)}}catch(i){il(t,t.return,i)}}function ca(l,t,a){try{var e=t.updateQueue,u=e!==null?e.lastEffect:null;if(u!==null){var n=u.next;e=n;do{if((e.tag&l)===l){var c=e.inst,i=c.destroy;if(i!==void 0){c.destroy=void 0,u=t;var f=a,v=i;try{v()}catch(S){il(u,f,S)}}}e=e.next}while(e!==n)}}catch(S){il(t,t.return,S)}}function Vo(l){var t=l.updateQueue;if(t!==null){var a=l.stateNode;try{js(t,a)}catch(e){il(l,l.return,e)}}}function Lo(l,t,a){a.props=qa(l.type,l.memoizedProps),a.state=l.memoizedState;try{a.componentWillUnmount()}catch(e){il(l,t,e)}}function tu(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(u){il(l,t,u)}}function Mt(l,t){var a=l.ref,e=l.refCleanup;if(a!==null)if(typeof e=="function")try{e()}catch(u){il(l,t,u)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(u){il(l,t,u)}else a.current=null}function Ko(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(u){il(l,l.return,u)}}function Ti(l,t,a){try{var e=l.stateNode;Mh(e,l.type,a,t),e[Zl]=t}catch(u){il(l,l.return,u)}}function Jo(l){return l.tag===5||l.tag===3||l.tag===26||l.tag===27&&ha(l.type)||l.tag===4}function Ai(l){l:for(;;){for(;l.sibling===null;){if(l.return===null||Jo(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&&ha(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 Ei(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=Ot));else if(e!==4&&(e===27&&ha(l.type)&&(a=l.stateNode,t=null),l=l.child,l!==null))for(Ei(l,t,a),l=l.sibling;l!==null;)Ei(l,t,a),l=l.sibling}function vn(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&&ha(l.type)&&(a=l.stateNode),l=l.child,l!==null))for(vn(l,t,a),l=l.sibling;l!==null;)vn(l,t,a),l=l.sibling}function wo(l){var t=l.stateNode,a=l.memoizedProps;try{for(var e=l.type,u=t.attributes;u.length;)t.removeAttributeNode(u[0]);Xl(t,e,a),t[Hl]=l,t[Zl]=a}catch(n){il(l,l.return,n)}}var Yt=!1,Nl=!1,Mi=!1,Wo=typeof WeakSet=="function"?WeakSet:Set,Cl=null;function eh(l,t){if(l=l.containerInfo,Ki=Hn,l=ns(l),gc(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 u=e.anchorOffset,n=e.focusNode;e=e.focusOffset;try{a.nodeType,n.nodeType}catch{a=null;break l}var c=0,i=-1,f=-1,v=0,S=0,A=l,y=null;t:for(;;){for(var g;A!==a||u!==0&&A.nodeType!==3||(i=c+u),A!==n||e!==0&&A.nodeType!==3||(f=c+e),A.nodeType===3&&(c+=A.nodeValue.length),(g=A.firstChild)!==null;)y=A,A=g;for(;;){if(A===l)break t;if(y===a&&++v===u&&(i=c),y===n&&++S===e&&(f=c),(g=A.nextSibling)!==null)break;A=y,y=A.parentNode}A=g}a=i===-1||f===-1?null:{start:i,end:f}}else a=null}a=a||{start:0,end:0}}else a=null;for(Ji={focusedElem:l,selectionRange:a},Hn=!1,Cl=t;Cl!==null;)if(t=Cl,l=t.child,(t.subtreeFlags&1028)!==0&&l!==null)l.return=t,Cl=l;else for(;Cl!==null;){switch(t=Cl,n=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"))),Xl(n,e,a),n[Hl]=l,jl(n),e=n;break l;case"link":var c=l0("link","href",u).get(e+(a.href||""));if(c){for(var i=0;iol&&(c=ol,ol=Q,Q=c);var m=es(i,Q),s=es(i,ol);if(m&&s&&(g.rangeCount!==1||g.anchorNode!==m.node||g.anchorOffset!==m.offset||g.focusNode!==s.node||g.focusOffset!==s.offset)){var h=A.createRange();h.setStart(m.node,m.offset),g.removeAllRanges(),Q>ol?(g.addRange(h),g.extend(s.node,s.offset)):(h.setEnd(s.node,s.offset),g.addRange(h))}}}}for(A=[],g=i;g=g.parentNode;)g.nodeType===1&&A.push({element:g,left:g.scrollLeft,top:g.scrollTop});for(typeof i.focus=="function"&&i.focus(),i=0;ia?32:a,T.T=null,a=Ui,Ui=null;var n=oa,c=Vt;if(xl=0,ge=oa=null,Vt=0,(ul&6)!==0)throw Error(o(331));var i=ul;if(ul|=4,nm(n.current),am(n,n.current,c,a),ul=i,iu(0,!1),Il&&typeof Il.onPostCommitFiberRoot=="function")try{Il.onPostCommitFiberRoot(_e,n)}catch{}return!0}finally{C.p=u,T.T=e,Em(l,t)}}function _m(l,t,a){t=ot(a,t),t=oi(l.stateNode,t,2),l=ea(l,t,2),l!==null&&(De(l,2),_t(l))}function il(l,t,a){if(l.tag===3)_m(l,l,a);else for(;t!==null;){if(t.tag===3){_m(t,l,a);break}else if(t.tag===1){var e=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof e.componentDidCatch=="function"&&(sa===null||!sa.has(e))){l=ot(a,l),a=po(2),e=ea(t,a,2),e!==null&&(Do(a,e,t,l),De(e,2),_t(e));break}}t=t.return}}function Hi(l,t,a){var e=l.pingCache;if(e===null){e=l.pingCache=new ch;var u=new Set;e.set(t,u)}else u=e.get(t),u===void 0&&(u=new Set,e.set(t,u));u.has(a)||(Di=!0,u.add(a),l=mh.bind(null,l,t,a),t.then(l,l))}function mh(l,t,a){var e=l.pingCache;e!==null&&e.delete(t),l.pingedLanes|=l.suspendedLanes&a,l.warmLanes&=~a,ml===l&&(P&a)===a&&(Tl===4||Tl===3&&(P&62914560)===P&&300>$l()-gn?(ul&2)===0&&Se(l,0):Oi|=a,re===P&&(re=0)),_t(l)}function pm(l,t){t===0&&(t=bf()),l=Da(l,t),l!==null&&(De(l,t),_t(l))}function dh(l){var t=l.memoizedState,a=0;t!==null&&(a=t.retryLane),pm(l,a)}function hh(l,t){var a=0;switch(l.tag){case 31:case 13:var e=l.stateNode,u=l.memoizedState;u!==null&&(a=u.retryLane);break;case 19:e=l.stateNode;break;case 22:e=l.stateNode._retryCache;break;default:throw Error(o(314))}e!==null&&e.delete(t),pm(l,a)}function vh(l,t){return Wn(l,t)}var Mn=null,ze=null,Bi=!1,_n=!1,qi=!1,da=0;function _t(l){l!==ze&&l.next===null&&(ze===null?Mn=ze=l:ze=ze.next=l),_n=!0,Bi||(Bi=!0,rh())}function iu(l,t){if(!qi&&_n){qi=!0;do for(var a=!1,e=Mn;e!==null;){if(l!==0){var u=e.pendingLanes;if(u===0)var n=0;else{var c=e.suspendedLanes,i=e.pingedLanes;n=(1<<31-Pl(42|l)+1)-1,n&=u&~(c&~i),n=n&201326741?n&201326741|1:n?n|2:0}n!==0&&(a=!0,xm(e,n))}else n=P,n=Ou(e,e===ml?n:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),(n&3)===0||pe(e,n)||(a=!0,xm(e,n));e=e.next}while(a);qi=!1}}function yh(){Dm()}function Dm(){_n=Bi=!1;var l=0;da!==0&&ph()&&(l=da);for(var t=$l(),a=null,e=Mn;e!==null;){var u=e.next,n=Om(e,t);n===0?(e.next=null,a===null?Mn=u:a.next=u,u===null&&(ze=a)):(a=e,(l!==0||(n&3)!==0)&&(_n=!0)),e=u}xl!==0&&xl!==5||iu(l),da!==0&&(da=0)}function Om(l,t){for(var a=l.suspendedLanes,e=l.pingedLanes,u=l.expirationTimes,n=l.pendingLanes&-62914561;0i)break;var S=f.transferSize,A=f.initiatorType;S&&Ym(A)&&(f=f.responseEnd,c+=S*(f"u"?null:document;function Fm(l,t,a){var e=Te;if(e&&typeof t=="string"&&t){var u=ft(t);u='link[rel="'+l+'"][href="'+u+'"]',typeof a=="string"&&(u+='[crossorigin="'+a+'"]'),km.has(u)||(km.add(u),l={rel:l,crossOrigin:a,href:t},e.querySelector(u)===null&&(t=e.createElement("link"),Xl(t,"link",l),jl(t),e.head.appendChild(t)))}}function Hh(l){Lt.D(l),Fm("dns-prefetch",l,null)}function Bh(l,t){Lt.C(l,t),Fm("preconnect",l,t)}function qh(l,t,a){Lt.L(l,t,a);var e=Te;if(e&&l&&t){var u='link[rel="preload"][as="'+ft(t)+'"]';t==="image"&&a&&a.imageSrcSet?(u+='[imagesrcset="'+ft(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(u+='[imagesizes="'+ft(a.imageSizes)+'"]')):u+='[href="'+ft(l)+'"]';var n=u;switch(t){case"style":n=Ae(l);break;case"script":n=Ee(l)}rt.has(n)||(l=x({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:l,as:t},a),rt.set(n,l),e.querySelector(u)!==null||t==="style"&&e.querySelector(mu(n))||t==="script"&&e.querySelector(du(n))||(t=e.createElement("link"),Xl(t,"link",l),jl(t),e.head.appendChild(t)))}}function Yh(l,t){Lt.m(l,t);var a=Te;if(a&&l){var e=t&&typeof t.as=="string"?t.as:"script",u='link[rel="modulepreload"][as="'+ft(e)+'"][href="'+ft(l)+'"]',n=u;switch(e){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":n=Ee(l)}if(!rt.has(n)&&(l=x({rel:"modulepreload",href:l},t),rt.set(n,l),a.querySelector(u)===null)){switch(e){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(du(n)))return}e=a.createElement("link"),Xl(e,"link",l),jl(e),a.head.appendChild(e)}}}function Xh(l,t,a){Lt.S(l,t,a);var e=Te;if(e&&l){var u=La(e).hoistableStyles,n=Ae(l);t=t||"default";var c=u.get(n);if(!c){var i={loading:0,preload:null};if(c=e.querySelector(mu(n)))i.loading=5;else{l=x({rel:"stylesheet",href:l,"data-precedence":t},a),(a=rt.get(n))&&Pi(l,a);var f=c=e.createElement("link");jl(f),Xl(f,"link",l),f._p=new Promise(function(v,S){f.onload=v,f.onerror=S}),f.addEventListener("load",function(){i.loading|=1}),f.addEventListener("error",function(){i.loading|=2}),i.loading|=4,xn(c,t,e)}c={type:"stylesheet",instance:c,count:1,state:i},u.set(n,c)}}}function Gh(l,t){Lt.X(l,t);var a=Te;if(a&&l){var e=La(a).hoistableScripts,u=Ee(l),n=e.get(u);n||(n=a.querySelector(du(u)),n||(l=x({src:l,async:!0},t),(t=rt.get(u))&&lf(l,t),n=a.createElement("script"),jl(n),Xl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},e.set(u,n))}}function Qh(l,t){Lt.M(l,t);var a=Te;if(a&&l){var e=La(a).hoistableScripts,u=Ee(l),n=e.get(u);n||(n=a.querySelector(du(u)),n||(l=x({src:l,async:!0,type:"module"},t),(t=rt.get(u))&&lf(l,t),n=a.createElement("script"),jl(n),Xl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},e.set(u,n))}}function $m(l,t,a,e){var u=(u=wt.current)?Nn(u):null;if(!u)throw Error(o(446));switch(l){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=Ae(a.href),a=La(u).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=Ae(a.href);var n=La(u).hoistableStyles,c=n.get(l);if(c||(u=u.ownerDocument||u,c={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},n.set(l,c),(n=u.querySelector(mu(l)))&&!n._p&&(c.instance=n,c.state.loading=5),rt.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},rt.set(l,a),n||Zh(u,l,a,c.state))),t&&e===null)throw Error(o(528,""));return c}if(t&&e!==null)throw Error(o(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Ee(a),a=La(u).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(o(444,l))}}function Ae(l){return'href="'+ft(l)+'"'}function mu(l){return'link[rel="stylesheet"]['+l+"]"}function Im(l){return x({},l,{"data-precedence":l.precedence,precedence:null})}function Zh(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}),Xl(t,"link",a),jl(t),l.head.appendChild(t))}function Ee(l){return'[src="'+ft(l)+'"]'}function du(l){return"script[async]"+l}function Pm(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,jl(e),e;var u=x({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return e=(l.ownerDocument||l).createElement("style"),jl(e),Xl(e,"style",u),xn(e,a.precedence,l),t.instance=e;case"stylesheet":u=Ae(a.href);var n=l.querySelector(mu(u));if(n)return t.state.loading|=4,t.instance=n,jl(n),n;e=Im(a),(u=rt.get(u))&&Pi(e,u),n=(l.ownerDocument||l).createElement("link"),jl(n);var c=n;return c._p=new Promise(function(i,f){c.onload=i,c.onerror=f}),Xl(n,"link",e),t.state.loading|=4,xn(n,a.precedence,l),t.instance=n;case"script":return n=Ee(a.src),(u=l.querySelector(du(n)))?(t.instance=u,jl(u),u):(e=a,(u=rt.get(n))&&(e=x({},a),lf(e,u)),l=l.ownerDocument||l,u=l.createElement("script"),jl(u),Xl(u,"link",e),l.head.appendChild(u),t.instance=u);case"void":return null;default:throw Error(o(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(e=t.instance,t.state.loading|=4,xn(e,a.precedence,l));return t.instance}function xn(l,t,a){for(var e=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=e.length?e[e.length-1]:null,n=u,c=0;c title"):null)}function Vh(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 a0(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function Lh(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 u=Ae(e.href),n=t.querySelector(mu(u));if(n){t=n._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=jn.bind(l),t.then(l,l)),a.state.loading|=4,a.instance=n,jl(n);return}n=t.ownerDocument||t,e=Im(e),(u=rt.get(u))&&Pi(e,u),n=n.createElement("link"),jl(n);var c=n;c._p=new Promise(function(i,f){c.onload=i,c.onerror=f}),Xl(n,"link",e),a.instance=n}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(l.count++,a=jn.bind(l),t.addEventListener("load",a),t.addEventListener("error",a))}}var tf=0;function Kh(l,t){return l.stylesheets&&l.count===0&&Rn(l,l.stylesheets),0tf?50:800)+t);return l.unsuspend=a,function(){l.unsuspend=null,clearTimeout(e),clearTimeout(u)}}:null}function jn(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Rn(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var Cn=null;function Rn(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Cn=new Map,t.forEach(Jh,l),Cn=null,jn.call(l))}function Jh(l,t){if(!(t.state.loading&4)){var a=Cn.get(l);if(a)var e=a.get(null);else{a=new Map,Cn.set(l,a);for(var u=l.querySelectorAll("link[data-precedence],style[data-precedence]"),n=0;n"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(d)}catch(O){console.error(O)}}return d(),of.exports=iv(),of.exports}var sv=fv();const ov="modulepreload",mv=function(d){return"/v2/"+d},A0={},Kt=function(O,M,o){let p=Promise.resolve();if(M&&M.length>0){let D=function(U){return Promise.all(U.map(B=>Promise.resolve(B).then(x=>({status:"fulfilled",value:x}),x=>({status:"rejected",reason:x}))))};document.getElementsByTagName("link");const N=document.querySelector("meta[property=csp-nonce]"),b=(N==null?void 0:N.nonce)||(N==null?void 0:N.getAttribute("nonce"));p=D(M.map(U=>{if(U=mv(U),U in A0)return;A0[U]=!0;const B=U.endsWith(".css"),x=B?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${U}"]${x}`))return;const H=document.createElement("link");if(H.rel=B?"stylesheet":ov,B||(H.as="script"),H.crossOrigin="",H.href=U,b&&H.setAttribute("nonce",b),document.head.appendChild(H),B)return new Promise((W,Z)=>{H.addEventListener("load",W),H.addEventListener("error",()=>Z(new Error(`Unable to preload CSS for ${U}`)))})}))}function E(D){const N=new Event("vite:preloadError",{cancelable:!0});if(N.payload=D,window.dispatchEvent(N),!N.defaultPrevented)throw D}return p.then(D=>{for(const N of D||[])N.status==="rejected"&&E(N.reason);return O().catch(E)})},D0=_.createContext({windows:[],openWindow:()=>{},closeWindow:()=>{},bringToFront:()=>{}}),dv=({children:d})=>{const[O,M]=_.useState([]),o=_.useRef(1e4),p=_.useCallback((N,b,U)=>{M(B=>B.find(H=>H.id===N)?B.map(H=>H.id===N?{...H,zIndex:++o.current}:H):[...B,{id:N,title:b,charName:U,zIndex:++o.current}])},[]),E=_.useCallback(N=>{M(b=>b.filter(U=>U.id!==N))},[]),D=_.useCallback(N=>{M(b=>b.map(U=>U.id===N?{...U,zIndex:++o.current}:U))},[]);return r.jsx(D0.Provider,{value:{windows:O,openWindow:p,closeWindow:E,bringToFront:D},children:d})},Zn=()=>_.useContext(D0),gt={west:-102.1,east:102.1,north:102.1,south:-102.1};function zu(d,O,M,o){const p=(d-gt.west)/(gt.east-gt.west)*M,E=(gt.north-O)/(gt.north-gt.south)*o;return{x:p,y:E}}function hv(d,O,M,o,p,E,D){const N=(d-o)/M,b=(O-p)/M,U=gt.west+N/E*(gt.east-gt.west),B=gt.north-b/D*(gt.north-gt.south);return{ew:U,ns:B}}function hf(d,O){const M=d>=0?"N":"S",o=O>=0?"E":"W";return`${Math.abs(d).toFixed(1)}${M}, ${Math.abs(O).toFixed(1)}${o}`}const O0=bu.memo(({players:d,imgW:O,imgH:M,getColor:o,onHover:p,onSelect:E,selectedPlayer:D})=>{const N=_.useMemo(()=>d.filter(b=>b.ew!==void 0&&b.ns!==void 0).map(b=>({...b,pos:zu(b.ew,b.ns,O,M),color:o(b.character_name)})),[d,O,M,o]);return r.jsx("div",{className:"ml-dots-layer",children:N.map(b=>r.jsx("div",{className:`ml-dot ${D===b.character_name?"ml-dot-selected":""}`,style:{left:b.pos.x,top:b.pos.y,backgroundColor:b.color},onMouseEnter:U=>{var x;const B=(x=U.currentTarget.closest(".ml-map-container"))==null?void 0:x.getBoundingClientRect();B&&p(b,U.clientX-B.left,U.clientY-B.top)},onMouseLeave:()=>p(null,0,0),onClick:()=>E(b.character_name)},b.character_name))})});O0.displayName="PlayerDots";const vv="/api";async function ba(d){const O=await fetch(`${vv}${d}`,{credentials:"include"});if(!O.ok)throw new Error(`API ${d}: ${O.status}`);return O.json()}function yv(){return`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/ws/live`}const N0=bu.memo(({imgW:d,imgH:O,getColor:M})=>{const[o,p]=_.useState([]);_.useEffect(()=>{const D=async()=>{try{const b=await ba("/trails/?seconds=600");p(b.trails??[])}catch{}};D();const N=setInterval(D,2e3);return()=>clearInterval(N)},[]);const E=_.useMemo(()=>{const D={};for(const N of o){const{x:b,y:U}=zu(N.ew,N.ns,d,O);D[N.character_name]||(D[N.character_name]=[]),D[N.character_name].push(`${b},${U}`)}return Object.entries(D).filter(([,N])=>N.length>=2).map(([N,b])=>({name:N,points:b.join(" ")}))},[o,d,O]);return r.jsx("svg",{className:"ml-trails-svg",viewBox:`0 0 ${d} ${O}`,preserveAspectRatio:"none",children:E.map(D=>r.jsx("polyline",{points:D.points,stroke:M(D.name),fill:"none",strokeWidth:2,strokeOpacity:.7,strokeLinecap:"round",strokeLinejoin:"round"},D.name))})});N0.displayName="TrailsSVG";const rv=({imgW:d,imgH:O,enabled:M})=>{const o=_.useRef(null),[p,E]=_.useState([]);return _.useEffect(()=>{if(!M)return;(async()=>{try{const N=await ba("/spawns/heatmap?hours=24&limit=50000");E(N.spawn_points??[])}catch{}})()},[M]),_.useEffect(()=>{const D=o.current;if(!D||!M||p.length===0||d===0)return;D.width=d,D.height=O;const N=D.getContext("2d");if(N){N.clearRect(0,0,d,O);for(const b of p){const{x:U,y:B}=zu(b.ew,b.ns,d,O),x=Math.max(5,Math.min(12,5+Math.sqrt(b.intensity*.5))),H=N.createRadialGradient(U,B,0,U,B,x);H.addColorStop(0,`rgba(255, 0, 0, ${Math.min(.9,b.intensity/40)})`),H.addColorStop(.6,`rgba(255, 100, 0, ${Math.min(.4,b.intensity/120)})`),H.addColorStop(1,"rgba(255, 150, 0, 0)"),N.fillStyle=H,N.fillRect(U-x,B-x,x*2,x*2)}}},[p,d,O,M]),M?r.jsx("canvas",{ref:o,className:"ml-heatmap-canvas"}):null},gv=({imgW:d,imgH:O,enabled:M})=>{const[o,p]=_.useState([]);_.useEffect(()=>{if(!M)return;const D=async()=>{try{const b=await ba("/portals");p(b.portals??[])}catch{}};D();const N=setInterval(D,6e4);return()=>clearInterval(N)},[M]);const E=_.useMemo(()=>o.map(D=>({...D,pos:zu(D.coordinates.ew,D.coordinates.ns,d,O)})),[o,d,O]);return!M||E.length===0?null:r.jsx("div",{className:"ml-portals-layer",children:E.map((D,N)=>r.jsx("div",{className:"ml-portal-icon",style:{left:D.pos.x,top:D.pos.y},title:`${D.portal_name} (by ${D.discovered_by})`},N))})},E0=20,M0=.3,Sv=({players:d,getColor:O,onSelectPlayer:M,showHeatmap:o,showPortals:p,selectedPlayer:E})=>{var hl;const D=_.useRef(null),N=_.useRef(null),[b,U]=_.useState({w:0,h:0}),[B,x]=_.useState(null),H=_.useRef(null),W=_.useRef({scale:1,offX:0,offY:0}),Z=_.useRef({dragging:!1,sx:0,sy:0,startOffX:0,startOffY:0}),I=_.useCallback(()=>{if(N.current){const{scale:j,offX:R,offY:Y}=W.current;N.current.style.transform=`translate(${R}px, ${Y}px) scale(${j})`}},[]),Rl=_.useCallback(j=>{const R=j.currentTarget;if(U({w:R.naturalWidth,h:R.naturalHeight}),D.current){const Y=D.current.clientWidth,w=D.current.clientHeight,k=Math.min(Y/R.naturalWidth,w/R.naturalHeight);W.current={scale:k,offX:(Y-R.naturalWidth*k)/2,offY:(w-R.naturalHeight*k)/2},I()}},[I]),kl=_.useCallback(j=>{var Jt;j.preventDefault();const R=(Jt=D.current)==null?void 0:Jt.getBoundingClientRect();if(!R)return;const Y=W.current,w=j.deltaY<0?1.1:.9,k=Math.min(E0,Math.max(M0,Y.scale*w)),dl=k/Y.scale,_l=j.clientX-R.left,za=j.clientY-R.top;W.current={scale:k,offX:_l-(_l-Y.offX)*dl,offY:za-(za-Y.offY)*dl},I()},[I]),Fl=_.useCallback(j=>{if(j.button!==0)return;const R=W.current;Z.current={dragging:!0,sx:j.clientX,sy:j.clientY,startOffX:R.offX,startOffY:R.offY}},[]);_.useEffect(()=>{const j=Y=>{const w=Z.current;if(w.dragging&&(W.current.offX=w.startOffX+(Y.clientX-w.sx),W.current.offY=w.startOffY+(Y.clientY-w.sy),I()),D.current&&b.w>0&&H.current){const k=D.current.getBoundingClientRect(),dl=W.current,_l=hv(Y.clientX-k.left,Y.clientY-k.top,dl.scale,dl.offX,dl.offY,b.w,b.h);H.current.textContent=hf(_l.ns,_l.ew)}},R=()=>{Z.current.dragging=!1};return window.addEventListener("mousemove",j),window.addEventListener("mouseup",R),()=>{window.removeEventListener("mousemove",j),window.removeEventListener("mouseup",R)}},[I,b.w,b.h]);const Al=_.useRef(null);_.useEffect(()=>{if(!E||b.w===0||!D.current||Al.current===E)return;const j=d.find(dl=>dl.character_name===E);if(!j)return;Al.current=E;const{x:R,y:Y}=zu(j.ew,j.ns,b.w,b.h),w=D.current.getBoundingClientRect(),k=3;W.current={scale:Math.min(E0,Math.max(M0,k)),offX:w.width/2-R*k,offY:w.height/2-Y*k},I()},[E,d,b.w,b.h,I]),_.useEffect(()=>{E||(Al.current=null)},[E]);const L=_.useCallback((j,R,Y)=>{x(j?{x:R,y:Y,player:j}:null)},[]);return r.jsxs("div",{className:"ml-map-container",ref:D,onWheel:kl,onMouseDown:Fl,children:[r.jsxs("div",{ref:N,className:"ml-map-group",children:[r.jsx("img",{src:"/dereth.png",alt:"Dereth",className:"ml-map-img",onLoad:Rl,draggable:!1}),b.w>0&&r.jsxs(r.Fragment,{children:[r.jsx(rv,{imgW:b.w,imgH:b.h,enabled:o}),r.jsx(N0,{imgW:b.w,imgH:b.h,getColor:O}),r.jsx(O0,{players:d,imgW:b.w,imgH:b.h,getColor:O,onHover:L,onSelect:M,selectedPlayer:E}),r.jsx(gv,{imgW:b.w,imgH:b.h,enabled:p})]})]}),B&&r.jsxs("div",{className:"ml-tooltip",style:{left:B.x+12,top:B.y-10},children:[r.jsx("strong",{children:B.player.character_name}),r.jsx("br",{}),hf(B.player.ns,B.player.ew),r.jsx("br",{}),B.player.kills_per_hour," kph · ",(hl=B.player.kills)==null?void 0:hl.toLocaleString()," kills"]}),r.jsx("div",{className:"ml-coords",ref:H})]})},x0=bu.memo(({player:d,vitals:O,color:M,onSelect:o})=>{var U,B;const{openWindow:p}=Zn(),E=(d.vt_state||"idle").toLowerCase(),D=E==="combat"||E==="hunt",N=(d.total_rares??0)>0?Math.round((d.total_kills??0)/(d.total_rares??1)).toLocaleString():null,b=d.character_name;return r.jsxs("li",{className:"ml-player-row",style:{borderLeftColor:M},children:[r.jsxs("div",{className:"ml-pr-header",onClick:o,children:[r.jsx("span",{className:"ml-pr-name",children:b}),r.jsx("span",{className:"ml-pr-coords",children:hf(d.ns,d.ew)})]}),r.jsxs("div",{className:"ml-pr-vitals",children:[r.jsx("div",{className:"ml-vital-bar hp",children:r.jsx("div",{className:"ml-vital-fill",style:{width:`${(O==null?void 0:O.health_percentage)??0}%`}})}),r.jsx("div",{className:"ml-vital-bar sta",children:r.jsx("div",{className:"ml-vital-fill",style:{width:`${(O==null?void 0:O.stamina_percentage)??0}%`}})}),r.jsx("div",{className:"ml-vital-bar mana",children:r.jsx("div",{className:"ml-vital-fill",style:{width:`${(O==null?void 0:O.mana_percentage)??0}%`}})})]}),r.jsxs("div",{className:"ml-pr-grid",children:[r.jsxs("span",{className:"ml-gs",title:"Session kills",children:["⚔️ ",((U=d.kills)==null?void 0:U.toLocaleString())??0]}),r.jsxs("span",{className:"ml-gs",title:"Total kills",children:["🏆 ",(d.total_kills??0).toLocaleString()]}),r.jsxs("span",{className:"ml-gs",title:"Kills per hour",children:[d.kills_per_hour??"0"," ",r.jsx("span",{className:"ml-suffix",children:"KPH"})]}),r.jsxs("span",{className:"ml-gs",title:"Rares (session / total)",children:["💎 ",d.session_rares??0," / ",d.total_rares??0]}),r.jsx("span",{className:"ml-gs",title:"Kills per rare",children:N?r.jsxs(r.Fragment,{children:["📊 ",N," ",r.jsx("span",{className:"ml-suffix",children:"KPR"})]}):""}),r.jsx("span",{className:`ml-meta-pill ${D?"active":""}`,children:d.vt_state||"idle"}),r.jsxs("span",{className:"ml-gs",title:"Online time",children:["🕐 ",((B=d.onlinetime)==null?void 0:B.replace(/^00\./,""))??"--"]}),r.jsxs("span",{className:"ml-gs",title:"Deaths",children:["☠️ ",d.deaths??"0"]}),r.jsxs("span",{className:"ml-gs",title:"Prismatic tapers",children:[r.jsx("img",{src:"/prismatic-taper-icon.png",className:"ml-taper-icon",alt:""}),d.prismatic_taper_count??"0"]})]}),r.jsxs("div",{className:"ml-pr-buttons",children:[r.jsx("button",{className:"ml-btn accent",onClick:()=>p(`chat-${b}`,`Chat: ${b}`,b),children:"Chat"}),r.jsx("button",{className:"ml-btn accent",onClick:()=>p(`stats-${b}`,`Stats: ${b}`,b),children:"Stats"}),r.jsx("button",{className:"ml-btn accent",onClick:()=>p(`inv-${b}`,`Inventory: ${b}`,b),children:"Inv"}),r.jsx("button",{className:"ml-btn",onClick:()=>p(`char-${b}`,`Character: ${b}`,b),children:"Char"}),r.jsx("button",{className:"ml-btn",onClick:()=>p(`combat-${b}`,`Combat: ${b}`,b),children:"Combat"}),r.jsx("button",{className:"ml-btn",onClick:()=>p(`radar-${b}`,`Radar: ${b}`,b),children:"Radar"})]})]})});x0.displayName="PlayerRow";const bv=({players:d,vitals:O,getColor:M,onSelect:o})=>r.jsx("ul",{className:"ml-player-list",children:d.map(p=>r.jsx(x0,{player:p,vitals:O.get(p.character_name)??null,color:M(p.character_name),onSelect:()=>o(p.character_name)},p.character_name))}),zv=[{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"}],Tv=({value:d,onChange:O})=>r.jsx("div",{className:"ml-sort-buttons",children:zv.map(M=>r.jsx("button",{className:`ml-sort-btn ${d===M.key?"active":""}`,onClick:()=>O(M.key),children:M.label},M.key))}),Av=()=>{const{openWindow:d}=Zn();return r.jsxs("div",{className:"ml-tool-links",children:[r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>d("issues","Issues Board"),children:"📋 Issues"}),r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>d("vitalsharing","Vital Sharing"),children:"🤝 Vitals"}),r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>d("combatpicker","Combat Stats"),children:"⚔️ Combat"})]})},Ev=({players:d,vitals:O,serverHealth:M,totalRares:o,totalKills:p,getColor:E,onSelectPlayer:D,onViewToggle:N,showHeatmap:b,showPortals:U,onToggleHeatmap:B,onTogglePortals:x,version:H})=>{var j,R;const[W,Z]=_.useState("name"),[I,Rl]=_.useState(""),kl=_.useMemo(()=>d.reduce((Y,w)=>Y+(parseInt(w.kills_per_hour)||0),0),[d]),Fl=((j=M==null?void 0:M.status)==null?void 0:j.toLowerCase())==="online"||((R=M==null?void 0:M.status)==null?void 0:R.toLowerCase())==="up",Al=_.useDeferredValue(d),L=_.useDeferredValue(O),hl=_.useMemo(()=>{let Y=[...Al];switch(I&&(Y=Y.filter(w=>w.character_name.toLowerCase().startsWith(I.toLowerCase()))),W){case"kph":Y.sort((w,k)=>(parseInt(k.kills_per_hour)||0)-(parseInt(w.kills_per_hour)||0));break;case"skills":Y.sort((w,k)=>(k.kills||0)-(w.kills||0));break;case"srares":Y.sort((w,k)=>(k.session_rares??0)-(w.session_rares??0));break;case"tkills":Y.sort((w,k)=>(k.total_kills??0)-(w.total_kills??0));break;case"kpr":Y.sort((w,k)=>{const dl=(w.total_kills??0)/Math.max(1,w.total_rares??1),_l=(k.total_kills??0)/Math.max(1,k.total_rares??1);return dl-_l});break;default:Y.sort((w,k)=>w.character_name.localeCompare(k.character_name))}return Y},[Al,W,I]);return r.jsxs("div",{className:"ml-sidebar",children:[H&&r.jsxs("div",{className:"ml-version",children:["v",H]}),r.jsx("div",{className:"ml-sidebar-header",children:r.jsxs("span",{className:"ml-sidebar-title",children:["Active Mosswart Enjoyers (",d.length,")"]})}),r.jsxs("div",{className:"ml-server-status",children:[r.jsx("span",{className:`ml-status-dot ${Fl?"online":"offline"}`}),r.jsxs("span",{className:"ml-status-text",children:["Coldeve ",Fl?"Online":"Offline"]}),(M==null?void 0:M.player_count)!=null&&r.jsxs("span",{className:"ml-status-detail",children:["👥 ",M.player_count]}),(M==null?void 0:M.latency_ms)!=null&&r.jsxs("span",{className:"ml-status-detail",children:[Math.round(M.latency_ms),"ms"]}),(M==null?void 0:M.uptime_seconds)!=null&&r.jsxs("span",{className:"ml-status-detail",children:["Up: ",Math.floor(M.uptime_seconds/3600),"h"]})]}),r.jsxs("div",{className:"ml-counters",children:[r.jsxs("div",{className:"ml-counter rares",children:[r.jsx("span",{className:"ml-counter-val",children:o}),r.jsx("span",{className:"ml-counter-lbl",children:"Rares"})]}),r.jsxs("div",{className:`ml-counter kph ${kl>5e3?"ultra":""}`,children:[r.jsx("span",{className:"ml-counter-val",children:kl.toLocaleString()}),r.jsx("span",{className:"ml-counter-lbl",children:"Server KPH"})]}),r.jsxs("div",{className:"ml-counter kills",children:[r.jsx("span",{className:"ml-counter-val",children:p.toLocaleString()}),r.jsx("span",{className:"ml-counter-lbl",children:"Kills"})]})]}),r.jsxs("div",{className:"ml-tool-links",children:[r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:N,children:"📊 Dashboard"}),r.jsx("a",{href:"/inventory.html",target:"_blank",className:"ml-tool-link",children:"🔍 Inv Search"}),r.jsx("a",{href:"/suitbuilder.html",target:"_blank",className:"ml-tool-link",children:"🛡️ Suitbuilder"}),r.jsx("a",{href:"/debug.html",target:"_blank",className:"ml-tool-link",children:"🐛 Debug"}),r.jsx("a",{href:"/quest-status.html",target:"_blank",className:"ml-tool-link",children:"📜 Quests"})]}),r.jsx(Av,{}),r.jsxs("div",{className:"ml-toggles",children:[r.jsxs("label",{className:"ml-toggle-label",children:[r.jsx("input",{type:"checkbox",checked:b,onChange:Y=>B(Y.target.checked)}),r.jsx("span",{children:"Spawn Heatmap"})]}),r.jsxs("label",{className:"ml-toggle-label",children:[r.jsx("input",{type:"checkbox",checked:U,onChange:Y=>x(Y.target.checked)}),r.jsx("span",{children:"Portals"})]})]}),r.jsx(Tv,{value:W,onChange:Z}),r.jsx("input",{className:"ml-filter",type:"text",placeholder:"Filter players...",value:I,onChange:Y=>Rl(Y.target.value)}),r.jsx(bv,{players:hl,vitals:L,getColor:E,onSelect:D})]})},Mv=({id:d,title:O,zIndex:M,width:o=700,height:p=340,children:E})=>{const{closeWindow:D,bringToFront:N}=Zn(),b=_.useRef(null),U=_.useRef({dragging:!1,sx:0,sy:0,ox:0,oy:0}),B=_.useRef({x:420,y:10+Math.random()*40}),x=_.useCallback(H=>{var Z;H.preventDefault(),N(d);const W=(Z=b.current)==null?void 0:Z.getBoundingClientRect();W&&(U.current={dragging:!0,sx:H.clientX,sy:H.clientY,ox:W.left,oy:W.top})},[d,N]);return _.useEffect(()=>{const H=Z=>{const I=U.current;!I.dragging||!b.current||(B.current.x=I.ox+(Z.clientX-I.sx),B.current.y=I.oy+(Z.clientY-I.sy),b.current.style.left=`${B.current.x}px`,b.current.style.top=`${B.current.y}px`)},W=()=>{U.current.dragging=!1};return window.addEventListener("mousemove",H),window.addEventListener("mouseup",W),()=>{window.removeEventListener("mousemove",H),window.removeEventListener("mouseup",W)}},[]),r.jsxs("div",{ref:b,className:"ml-window",style:{zIndex:M,width:o,height:p,left:B.current.x,top:B.current.y},onMouseDown:()=>N(d),children:[r.jsxs("div",{className:"ml-window-header",onMouseDown:x,children:[r.jsx("span",{className:"ml-window-title",children:O}),r.jsx("button",{className:"ml-window-close",onClick:()=>D(d),children:"×"})]}),r.jsx("div",{className:"ml-window-content",children:E})]})},_v={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"},pv=({id:d,charName:O,zIndex:M,messages:o,socket:p})=>{const E=_.useRef(null),[D,N]=_.useState("");_.useEffect(()=>{E.current&&(E.current.scrollTop=E.current.scrollHeight)},[o.length]);const b=U=>{U.preventDefault();const B=D.trim();!B||!p||p.readyState!==WebSocket.OPEN||(p.send(JSON.stringify({player_name:O,command:B})),N(""))};return r.jsxs(Mv,{id:d,title:`Chat: ${O}`,zIndex:M,width:600,height:300,children:[r.jsx("div",{className:"ml-chat-messages",ref:E,children:o.map((U,B)=>r.jsx("div",{className:"ml-chat-line",style:{color:_v[U.color??2]??"#ddd"},children:U.text},B))}),r.jsx("form",{className:"ml-chat-form",onSubmit:b,children:r.jsx("input",{className:"ml-chat-input",value:D,onChange:U=>N(U.target.value),placeholder:"Enter chat..."})})]})},Dv=_.lazy(()=>Kt(()=>import("./StatsWindow-BT7jJ8yH.js"),__vite__mapDeps([0,1])).then(d=>({default:d.StatsWindow}))),Ov=_.lazy(()=>Kt(()=>import("./CharacterWindow-C26CdTBY.js"),__vite__mapDeps([2,1])).then(d=>({default:d.CharacterWindow}))),Nv=_.lazy(()=>Kt(()=>import("./InventoryWindow-DLq3agcE.js"),__vite__mapDeps([3,1])).then(d=>({default:d.InventoryWindow}))),xv=_.lazy(()=>Kt(()=>import("./RadarWindow-T2z8FzRN.js"),__vite__mapDeps([4,1])).then(d=>({default:d.RadarWindow}))),Uv=_.lazy(()=>Kt(()=>import("./CombatStatsWindow-Ct0adxan.js"),__vite__mapDeps([5,1])).then(d=>({default:d.CombatStatsWindow}))),jv=_.lazy(()=>Kt(()=>import("./CombatPickerWindow-BOlAFaCG.js"),__vite__mapDeps([6,1])).then(d=>({default:d.CombatPickerWindow}))),Cv=_.lazy(()=>Kt(()=>import("./IssuesWindow-CSupRDWU.js"),__vite__mapDeps([7,1])).then(d=>({default:d.IssuesWindow}))),Rv=_.lazy(()=>Kt(()=>import("./VitalSharingWindow-CwE3JOVC.js"),__vite__mapDeps([8,1])).then(d=>({default:d.VitalSharingWindow}))),U0=bu.memo(({characters:d,chatMessages:O,nearbyObjects:M,socket:o})=>{const{windows:p}=Zn();return r.jsx(_.Suspense,{fallback:null,children:p.map(E=>{var b;const D=E.charName??"";switch(E.id.split("-")[0]){case"chat":return r.jsx(pv,{id:E.id,charName:D,zIndex:E.zIndex,messages:O.get(D)??[],socket:o},E.id);case"stats":return r.jsx(Dv,{id:E.id,charName:D,zIndex:E.zIndex},E.id);case"char":return r.jsx(Ov,{id:E.id,charName:D,zIndex:E.zIndex,vitals:((b=d.get(D))==null?void 0:b.vitals)??void 0},E.id);case"inv":return r.jsx(Nv,{id:E.id,charName:D,zIndex:E.zIndex},E.id);case"radar":return r.jsx(xv,{id:E.id,charName:D,zIndex:E.zIndex,socket:o,radarData:M.get(D)??null},E.id);case"combat":return r.jsx(Uv,{id:E.id,charName:D,zIndex:E.zIndex},E.id);case"combatpicker":return r.jsx(jv,{id:E.id,zIndex:E.zIndex,characters:d},E.id);case"issues":return r.jsx(Cv,{id:E.id,zIndex:E.zIndex},E.id);case"vitalsharing":return r.jsx(Rv,{id:E.id,zIndex:E.zIndex},E.id);default:return null}})})});U0.displayName="WindowRenderer";let Hv=0;const Bv=({recentRares:d})=>{const[O,M]=_.useState([]),[o,p]=_.useState(0),[E,D]=_.useState([]);_.useEffect(()=>{if(d.length>o&&o>0){const b=d.slice(0,d.length-o);for(const U of b){const B=++Hv;M(x=>[...x,{key:B,charName:U.character_name,rareName:U.name,exiting:!1}]),N(),setTimeout(()=>{M(x=>x.map(H=>H.key===B?{...H,exiting:!0}:H)),setTimeout(()=>{M(x=>x.filter(H=>H.key!==B))},500)},6e3)}}p(d.length)},[d.length]);const N=_.useCallback(()=>{const b=Date.now(),U=["#FFD700","#FF4444","#FF8800","#AA44FF","#4488FF"],B=Array.from({length:30},(x,H)=>{const W=Math.PI*2*H/30+(Math.random()-.5)*.5,Z=100+Math.random()*200;return{dx:Math.cos(W)*Z,dy:Math.sin(W)*Z-50,color:U[Math.floor(Math.random()*U.length)]}});D(x=>[...x,{id:b,particles:B}]),setTimeout(()=>D(x=>x.filter(H=>H.id!==b)),2200)},[]);return r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"ml-rare-notifications",children:O.map(b=>r.jsxs("div",{className:`ml-rare-notif ${b.exiting?"exiting":""}`,children:[r.jsx("div",{className:"ml-rare-notif-title",children:"🎆 LEGENDARY RARE! 🎆"}),r.jsx("div",{className:"ml-rare-notif-name",children:b.rareName}),r.jsx("div",{className:"ml-rare-notif-by",children:"found by"}),r.jsx("div",{className:"ml-rare-notif-char",children:b.charName})]},b.key))}),r.jsx("div",{className:"ml-fireworks",children:E.map(b=>r.jsx(bu.Fragment,{children:b.particles.map((U,B)=>r.jsx("div",{className:"ml-firework-particle",style:{left:"50%",top:"30%",backgroundColor:U.color,"--dx":`${U.dx}px`,"--dy":`${U.dy+200}px`}},B))},b.id))})]})},_0=["#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 qv(d){let O=0;for(let M=0;M{let p=d.current.get(o);return p||(p=O.current<_0.length?_0[O.current++]:qv(o),d.current.set(o,p)),p},[])}const Xv=({data:d,onViewToggle:O})=>{const M=Yv(),[o,p]=_.useState(!1),[E,D]=_.useState(!1),[N,b]=_.useState(null),U=_.useMemo(()=>Array.from(d.characters.values()).filter(Z=>Z.telemetry).map(Z=>Z.telemetry),[d.characters]),B=_.useMemo(()=>new Map(Array.from(d.characters.values()).filter(Z=>Z.vitals).map(Z=>[Z.name,Z.vitals])),[d.characters]),[x,H]=_.useState("");_.useEffect(()=>{fetch("/api/api-version",{credentials:"include"}).then(Z=>Z.json()).then(Z=>H(Z.version??"")).catch(()=>{})},[]);const W=_.useCallback(Z=>{b(I=>I===Z?null:Z)},[]);return r.jsx(dv,{children:r.jsxs("div",{className:"ml-layout",children:[r.jsx(Ev,{players:U,vitals:B,serverHealth:d.serverHealth,totalRares:d.totalRares,totalKills:d.totalKills,getColor:M,onSelectPlayer:W,onViewToggle:O,showHeatmap:o,showPortals:E,onToggleHeatmap:p,onTogglePortals:D,version:x}),r.jsx(Sv,{players:U,getColor:M,onSelectPlayer:W,showHeatmap:o,showPortals:E,selectedPlayer:N}),r.jsx(U0,{characters:d.characters,chatMessages:d.chatMessages,nearbyObjects:d.nearbyObjects,socket:d.socketRef.current}),r.jsx(Bv,{recentRares:d.recentRares})]})})};function Gv(d){const O=_.useRef(null),M=_.useRef(0),o=_.useRef(d);o.current=d;const p=_.useCallback(()=>{var D;if(((D=O.current)==null?void 0:D.readyState)===WebSocket.OPEN)return;const E=new WebSocket(yv());O.current=E,E.addEventListener("message",N=>{try{const b=JSON.parse(N.data);o.current(b)}catch{}}),E.addEventListener("close",()=>{O.current=null,M.current=window.setTimeout(p,2e3)}),E.addEventListener("error",()=>{E.close()})},[]);return _.useEffect(()=>(p(),()=>{var E;clearTimeout(M.current),(E=O.current)==null||E.close(),O.current=null}),[p]),O}const Qv=()=>ba("/live"),Zv=()=>ba("/combat-stats"),Vv=()=>ba("/server-health"),Lv=()=>ba("/total-rares"),Kv=()=>ba("/total-kills");function Jv(){const[d,O]=_.useState(new Map),[M,o]=_.useState(null),[p,E]=_.useState(0),[D,N]=_.useState(0),[b,U]=_.useState([]),B=_.useRef(new Map),[x,H]=_.useState(0),[W,Z]=_.useState(new Map),I=_.useRef(d);I.current=d;const Rl=_.useCallback((L,hl)=>{O(j=>{const R=new Map(j),Y=R.get(L)??{name:L,telemetry:null,vitals:null,combat:null,lastUpdate:0};return R.set(L,hl(Y)),R})},[]),kl=_.useCallback(L=>{var hl;if(L.type){if(L.type==="telemetry"){const j=L;Rl(j.character_name,R=>({...R,telemetry:j,lastUpdate:Date.now()}))}else if(L.type==="vitals"){const j=L;Rl(j.character_name,R=>({...R,vitals:j,lastUpdate:Date.now()}))}else if(L.type==="combat_stats"){const j=L;Rl(j.character_name,R=>({...R,combat:j,lastUpdate:Date.now()}))}else if(L.type==="rare"){const j=L;U(R=>[j,...R].slice(0,50))}else if(L.type==="dungeon_map"){const j=L;j.landblock&&(window.__dungeonMapCache||(window.__dungeonMapCache={}),window.__dungeonMapCache[j.landblock]=j)}else if(L.type==="nearby_objects"){const j=L;if(Z(R=>{const Y=new Map(R);return Y.set(j.character_name,j),Y}),j.is_dungeon&&j.landblock&&!((hl=window.__dungeonMapCache)!=null&&hl[j.landblock])){const R=Fl.current;(R==null?void 0:R.readyState)===WebSocket.OPEN&&R.send(JSON.stringify({type:"request_dungeon_map",landblock:j.landblock}))}}else if(L.type==="chat"){const j=L,R=B.current.get(j.character_name)??[];R.push({text:j.text,color:j.color,timestamp:j.timestamp}),R.length>1e3&&R.splice(0,R.length-1e3),B.current.set(j.character_name,R),H(Y=>Y+1)}}},[Rl]),Fl=Gv(kl);_.useEffect(()=>{const L=async()=>{try{const j=await Qv();O(R=>{var w;const Y=new Map(R);for(const k of j.players??[]){const dl=Y.get(k.character_name);Y.set(k.character_name,{name:k.character_name,telemetry:k,vitals:(dl==null?void 0:dl.vitals)??null,combat:(dl==null?void 0:dl.combat)??null,lastUpdate:Date.now()})}for(const k of Y.keys())(w=j.players)!=null&&w.some(dl=>dl.character_name===k)||Y.delete(k);return Y})}catch{}};L();const hl=setInterval(L,5e3);return()=>clearInterval(hl)},[]),_.useEffect(()=>{const L=async()=>{try{const j=await Zv();for(const R of j.stats??[])Rl(R.character_name,Y=>({...Y,combat:{...R,type:"combat_stats"}}))}catch{}};L();const hl=setInterval(L,3e4);return()=>clearInterval(hl)},[Rl]),_.useEffect(()=>{const L=async()=>{try{o(await Vv())}catch{}};L();const hl=setInterval(L,3e4);return()=>clearInterval(hl)},[]),_.useEffect(()=>{const L=async()=>{try{const[j,R]=await Promise.all([Lv(),Kv()]);E(j.all_time??0),N(R.total??0)}catch{}};L();const hl=setInterval(L,3e5);return()=>clearInterval(hl)},[]);const Al=_.useMemo(()=>B.current,[x]);return{characters:d,serverHealth:M,totalRares:p,totalKills:D,recentRares:b,chatMessages:Al,nearbyObjects:W,socketRef:Fl}}const wv=_.lazy(()=>Kt(()=>import("./DashboardView-ReNIceoO.js"),__vite__mapDeps([9,1])));function Wv(){const[d,O]=_.useState(()=>localStorage.getItem("v2-view")||"map"),M=Jv(),o=()=>{const p=d==="map"?"dashboard":"map";O(p),localStorage.setItem("v2-view",p)};return d==="map"?r.jsx(Xv,{data:M,onViewToggle:o}):r.jsx(_.Suspense,{fallback:r.jsx("div",{style:{background:"#0d0d0d",color:"#888",padding:40,textAlign:"center"},children:"Loading dashboard..."}),children:r.jsx(wv,{data:M,onViewToggle:o})})}sv.createRoot(document.getElementById("root")).render(r.jsx(_.StrictMode,{children:r.jsx(Wv,{})}));"serviceWorker"in navigator&&navigator.serviceWorker.register("/v2/sw.js").catch(()=>{});export{Mv as D,bu as R,ba as a,r as j,_ as r,Zn as u}; +`).replace(Eh,"")}function qm(l,t){return t=Bm(t),Bm(l)===t}function sl(l,t,a,e,u,n){switch(a){case"children":typeof e=="string"?t==="body"||t==="textarea"&&e===""||wa(l,e):(typeof e=="number"||typeof e=="bigint")&&t!=="body"&&wa(l,""+e);break;case"className":xu(l,"class",e);break;case"tabIndex":xu(l,"tabindex",e);break;case"dir":case"role":case"viewBox":case"width":case"height":xu(l,a,e);break;case"style":Bf(l,e,n);break;case"data":if(t!=="object"){xu(l,"data",e);break}case"src":case"href":if(e===""&&(t!=="a"||a!=="href")){l.removeAttribute(a);break}if(e==null||typeof e=="function"||typeof e=="symbol"||typeof e=="boolean"){l.removeAttribute(a);break}e=ju(""+e),l.setAttribute(a,e);break;case"action":case"formAction":if(typeof e=="function"){l.setAttribute(a,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof n=="function"&&(a==="formAction"?(t!=="input"&&sl(l,t,"name",u.name,u,null),sl(l,t,"formEncType",u.formEncType,u,null),sl(l,t,"formMethod",u.formMethod,u,null),sl(l,t,"formTarget",u.formTarget,u,null)):(sl(l,t,"encType",u.encType,u,null),sl(l,t,"method",u.method,u,null),sl(l,t,"target",u.target,u,null)));if(e==null||typeof e=="symbol"||typeof e=="boolean"){l.removeAttribute(a);break}e=ju(""+e),l.setAttribute(a,e);break;case"onClick":e!=null&&(l.onclick=Ot);break;case"onScroll":e!=null&&$("scroll",l);break;case"onScrollEnd":e!=null&&$("scrollend",l);break;case"dangerouslySetInnerHTML":if(e!=null){if(typeof e!="object"||!("__html"in e))throw Error(o(61));if(a=e.__html,a!=null){if(u.children!=null)throw Error(o(60));l.innerHTML=a}}break;case"multiple":l.multiple=e&&typeof e!="function"&&typeof e!="symbol";break;case"muted":l.muted=e&&typeof e!="function"&&typeof e!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(e==null||typeof e=="function"||typeof e=="boolean"||typeof e=="symbol"){l.removeAttribute("xlink:href");break}a=ju(""+e),l.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":e!=null&&typeof e!="function"&&typeof e!="symbol"?l.setAttribute(a,""+e):l.removeAttribute(a);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":e&&typeof e!="function"&&typeof e!="symbol"?l.setAttribute(a,""):l.removeAttribute(a);break;case"capture":case"download":e===!0?l.setAttribute(a,""):e!==!1&&e!=null&&typeof e!="function"&&typeof e!="symbol"?l.setAttribute(a,e):l.removeAttribute(a);break;case"cols":case"rows":case"size":case"span":e!=null&&typeof e!="function"&&typeof e!="symbol"&&!isNaN(e)&&1<=e?l.setAttribute(a,e):l.removeAttribute(a);break;case"rowSpan":case"start":e==null||typeof e=="function"||typeof e=="symbol"||isNaN(e)?l.removeAttribute(a):l.setAttribute(a,e);break;case"popover":$("beforetoggle",l),$("toggle",l),Nu(l,"popover",e);break;case"xlinkActuate":Dt(l,"http://www.w3.org/1999/xlink","xlink:actuate",e);break;case"xlinkArcrole":Dt(l,"http://www.w3.org/1999/xlink","xlink:arcrole",e);break;case"xlinkRole":Dt(l,"http://www.w3.org/1999/xlink","xlink:role",e);break;case"xlinkShow":Dt(l,"http://www.w3.org/1999/xlink","xlink:show",e);break;case"xlinkTitle":Dt(l,"http://www.w3.org/1999/xlink","xlink:title",e);break;case"xlinkType":Dt(l,"http://www.w3.org/1999/xlink","xlink:type",e);break;case"xmlBase":Dt(l,"http://www.w3.org/XML/1998/namespace","xml:base",e);break;case"xmlLang":Dt(l,"http://www.w3.org/XML/1998/namespace","xml:lang",e);break;case"xmlSpace":Dt(l,"http://www.w3.org/XML/1998/namespace","xml:space",e);break;case"is":Nu(l,"is",e);break;case"innerText":case"textContent":break;default:(!(2i)break;var S=f.transferSize,A=f.initiatorType;S&&Ym(A)&&(f=f.responseEnd,c+=S*(f"u"?null:document;function Fm(l,t,a){var e=Te;if(e&&typeof t=="string"&&t){var u=ft(t);u='link[rel="'+l+'"][href="'+u+'"]',typeof a=="string"&&(u+='[crossorigin="'+a+'"]'),km.has(u)||(km.add(u),l={rel:l,crossOrigin:a,href:t},e.querySelector(u)===null&&(t=e.createElement("link"),Xl(t,"link",l),jl(t),e.head.appendChild(t)))}}function Hh(l){Lt.D(l),Fm("dns-prefetch",l,null)}function Bh(l,t){Lt.C(l,t),Fm("preconnect",l,t)}function qh(l,t,a){Lt.L(l,t,a);var e=Te;if(e&&l&&t){var u='link[rel="preload"][as="'+ft(t)+'"]';t==="image"&&a&&a.imageSrcSet?(u+='[imagesrcset="'+ft(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(u+='[imagesizes="'+ft(a.imageSizes)+'"]')):u+='[href="'+ft(l)+'"]';var n=u;switch(t){case"style":n=Ae(l);break;case"script":n=Ee(l)}rt.has(n)||(l=x({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:l,as:t},a),rt.set(n,l),e.querySelector(u)!==null||t==="style"&&e.querySelector(mu(n))||t==="script"&&e.querySelector(du(n))||(t=e.createElement("link"),Xl(t,"link",l),jl(t),e.head.appendChild(t)))}}function Yh(l,t){Lt.m(l,t);var a=Te;if(a&&l){var e=t&&typeof t.as=="string"?t.as:"script",u='link[rel="modulepreload"][as="'+ft(e)+'"][href="'+ft(l)+'"]',n=u;switch(e){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":n=Ee(l)}if(!rt.has(n)&&(l=x({rel:"modulepreload",href:l},t),rt.set(n,l),a.querySelector(u)===null)){switch(e){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(du(n)))return}e=a.createElement("link"),Xl(e,"link",l),jl(e),a.head.appendChild(e)}}}function Xh(l,t,a){Lt.S(l,t,a);var e=Te;if(e&&l){var u=La(e).hoistableStyles,n=Ae(l);t=t||"default";var c=u.get(n);if(!c){var i={loading:0,preload:null};if(c=e.querySelector(mu(n)))i.loading=5;else{l=x({rel:"stylesheet",href:l,"data-precedence":t},a),(a=rt.get(n))&&Pi(l,a);var f=c=e.createElement("link");jl(f),Xl(f,"link",l),f._p=new Promise(function(v,S){f.onload=v,f.onerror=S}),f.addEventListener("load",function(){i.loading|=1}),f.addEventListener("error",function(){i.loading|=2}),i.loading|=4,xn(c,t,e)}c={type:"stylesheet",instance:c,count:1,state:i},u.set(n,c)}}}function Gh(l,t){Lt.X(l,t);var a=Te;if(a&&l){var e=La(a).hoistableScripts,u=Ee(l),n=e.get(u);n||(n=a.querySelector(du(u)),n||(l=x({src:l,async:!0},t),(t=rt.get(u))&&lf(l,t),n=a.createElement("script"),jl(n),Xl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},e.set(u,n))}}function Qh(l,t){Lt.M(l,t);var a=Te;if(a&&l){var e=La(a).hoistableScripts,u=Ee(l),n=e.get(u);n||(n=a.querySelector(du(u)),n||(l=x({src:l,async:!0,type:"module"},t),(t=rt.get(u))&&lf(l,t),n=a.createElement("script"),jl(n),Xl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},e.set(u,n))}}function $m(l,t,a,e){var u=(u=wt.current)?Nn(u):null;if(!u)throw Error(o(446));switch(l){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=Ae(a.href),a=La(u).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=Ae(a.href);var n=La(u).hoistableStyles,c=n.get(l);if(c||(u=u.ownerDocument||u,c={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},n.set(l,c),(n=u.querySelector(mu(l)))&&!n._p&&(c.instance=n,c.state.loading=5),rt.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},rt.set(l,a),n||Zh(u,l,a,c.state))),t&&e===null)throw Error(o(528,""));return c}if(t&&e!==null)throw Error(o(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Ee(a),a=La(u).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(o(444,l))}}function Ae(l){return'href="'+ft(l)+'"'}function mu(l){return'link[rel="stylesheet"]['+l+"]"}function Im(l){return x({},l,{"data-precedence":l.precedence,precedence:null})}function Zh(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}),Xl(t,"link",a),jl(t),l.head.appendChild(t))}function Ee(l){return'[src="'+ft(l)+'"]'}function du(l){return"script[async]"+l}function Pm(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,jl(e),e;var u=x({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return e=(l.ownerDocument||l).createElement("style"),jl(e),Xl(e,"style",u),xn(e,a.precedence,l),t.instance=e;case"stylesheet":u=Ae(a.href);var n=l.querySelector(mu(u));if(n)return t.state.loading|=4,t.instance=n,jl(n),n;e=Im(a),(u=rt.get(u))&&Pi(e,u),n=(l.ownerDocument||l).createElement("link"),jl(n);var c=n;return c._p=new Promise(function(i,f){c.onload=i,c.onerror=f}),Xl(n,"link",e),t.state.loading|=4,xn(n,a.precedence,l),t.instance=n;case"script":return n=Ee(a.src),(u=l.querySelector(du(n)))?(t.instance=u,jl(u),u):(e=a,(u=rt.get(n))&&(e=x({},a),lf(e,u)),l=l.ownerDocument||l,u=l.createElement("script"),jl(u),Xl(u,"link",e),l.head.appendChild(u),t.instance=u);case"void":return null;default:throw Error(o(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(e=t.instance,t.state.loading|=4,xn(e,a.precedence,l));return t.instance}function xn(l,t,a){for(var e=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=e.length?e[e.length-1]:null,n=u,c=0;c title"):null)}function Vh(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 a0(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function Lh(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 u=Ae(e.href),n=t.querySelector(mu(u));if(n){t=n._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=jn.bind(l),t.then(l,l)),a.state.loading|=4,a.instance=n,jl(n);return}n=t.ownerDocument||t,e=Im(e),(u=rt.get(u))&&Pi(e,u),n=n.createElement("link"),jl(n);var c=n;c._p=new Promise(function(i,f){c.onload=i,c.onerror=f}),Xl(n,"link",e),a.instance=n}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(l.count++,a=jn.bind(l),t.addEventListener("load",a),t.addEventListener("error",a))}}var tf=0;function Kh(l,t){return l.stylesheets&&l.count===0&&Rn(l,l.stylesheets),0tf?50:800)+t);return l.unsuspend=a,function(){l.unsuspend=null,clearTimeout(e),clearTimeout(u)}}:null}function jn(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Rn(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var Cn=null;function Rn(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Cn=new Map,t.forEach(Jh,l),Cn=null,jn.call(l))}function Jh(l,t){if(!(t.state.loading&4)){var a=Cn.get(l);if(a)var e=a.get(null);else{a=new Map,Cn.set(l,a);for(var u=l.querySelectorAll("link[data-precedence],style[data-precedence]"),n=0;n"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(d)}catch(O){console.error(O)}}return d(),of.exports=iv(),of.exports}var sv=fv();const ov="modulepreload",mv=function(d){return"/"+d},A0={},Kt=function(O,M,o){let p=Promise.resolve();if(M&&M.length>0){let D=function(U){return Promise.all(U.map(B=>Promise.resolve(B).then(x=>({status:"fulfilled",value:x}),x=>({status:"rejected",reason:x}))))};document.getElementsByTagName("link");const N=document.querySelector("meta[property=csp-nonce]"),b=(N==null?void 0:N.nonce)||(N==null?void 0:N.getAttribute("nonce"));p=D(M.map(U=>{if(U=mv(U),U in A0)return;A0[U]=!0;const B=U.endsWith(".css"),x=B?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${U}"]${x}`))return;const H=document.createElement("link");if(H.rel=B?"stylesheet":ov,B||(H.as="script"),H.crossOrigin="",H.href=U,b&&H.setAttribute("nonce",b),document.head.appendChild(H),B)return new Promise((W,Z)=>{H.addEventListener("load",W),H.addEventListener("error",()=>Z(new Error(`Unable to preload CSS for ${U}`)))})}))}function E(D){const N=new Event("vite:preloadError",{cancelable:!0});if(N.payload=D,window.dispatchEvent(N),!N.defaultPrevented)throw D}return p.then(D=>{for(const N of D||[])N.status==="rejected"&&E(N.reason);return O().catch(E)})},D0=_.createContext({windows:[],openWindow:()=>{},closeWindow:()=>{},bringToFront:()=>{}}),dv=({children:d})=>{const[O,M]=_.useState([]),o=_.useRef(1e4),p=_.useCallback((N,b,U)=>{M(B=>B.find(H=>H.id===N)?B.map(H=>H.id===N?{...H,zIndex:++o.current}:H):[...B,{id:N,title:b,charName:U,zIndex:++o.current}])},[]),E=_.useCallback(N=>{M(b=>b.filter(U=>U.id!==N))},[]),D=_.useCallback(N=>{M(b=>b.map(U=>U.id===N?{...U,zIndex:++o.current}:U))},[]);return r.jsx(D0.Provider,{value:{windows:O,openWindow:p,closeWindow:E,bringToFront:D},children:d})},Zn=()=>_.useContext(D0),gt={west:-102.1,east:102.1,north:102.1,south:-102.1};function zu(d,O,M,o){const p=(d-gt.west)/(gt.east-gt.west)*M,E=(gt.north-O)/(gt.north-gt.south)*o;return{x:p,y:E}}function hv(d,O,M,o,p,E,D){const N=(d-o)/M,b=(O-p)/M,U=gt.west+N/E*(gt.east-gt.west),B=gt.north-b/D*(gt.north-gt.south);return{ew:U,ns:B}}function hf(d,O){const M=d>=0?"N":"S",o=O>=0?"E":"W";return`${Math.abs(d).toFixed(1)}${M}, ${Math.abs(O).toFixed(1)}${o}`}const O0=bu.memo(({players:d,imgW:O,imgH:M,getColor:o,onHover:p,onSelect:E,selectedPlayer:D})=>{const N=_.useMemo(()=>d.filter(b=>b.ew!==void 0&&b.ns!==void 0).map(b=>({...b,pos:zu(b.ew,b.ns,O,M),color:o(b.character_name)})),[d,O,M,o]);return r.jsx("div",{className:"ml-dots-layer",children:N.map(b=>r.jsx("div",{className:`ml-dot ${D===b.character_name?"ml-dot-selected":""}`,style:{left:b.pos.x,top:b.pos.y,backgroundColor:b.color},onMouseEnter:U=>{var x;const B=(x=U.currentTarget.closest(".ml-map-container"))==null?void 0:x.getBoundingClientRect();B&&p(b,U.clientX-B.left,U.clientY-B.top)},onMouseLeave:()=>p(null,0,0),onClick:()=>E(b.character_name)},b.character_name))})});O0.displayName="PlayerDots";const vv="/api";async function ba(d){const O=await fetch(`${vv}${d}`,{credentials:"include"});if(!O.ok)throw new Error(`API ${d}: ${O.status}`);return O.json()}function yv(){return`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/ws/live`}const N0=bu.memo(({imgW:d,imgH:O,getColor:M})=>{const[o,p]=_.useState([]);_.useEffect(()=>{const D=async()=>{try{const b=await ba("/trails/?seconds=600");p(b.trails??[])}catch{}};D();const N=setInterval(D,2e3);return()=>clearInterval(N)},[]);const E=_.useMemo(()=>{const D={};for(const N of o){const{x:b,y:U}=zu(N.ew,N.ns,d,O);D[N.character_name]||(D[N.character_name]=[]),D[N.character_name].push(`${b},${U}`)}return Object.entries(D).filter(([,N])=>N.length>=2).map(([N,b])=>({name:N,points:b.join(" ")}))},[o,d,O]);return r.jsx("svg",{className:"ml-trails-svg",viewBox:`0 0 ${d} ${O}`,preserveAspectRatio:"none",children:E.map(D=>r.jsx("polyline",{points:D.points,stroke:M(D.name),fill:"none",strokeWidth:2,strokeOpacity:.7,strokeLinecap:"round",strokeLinejoin:"round"},D.name))})});N0.displayName="TrailsSVG";const rv=({imgW:d,imgH:O,enabled:M})=>{const o=_.useRef(null),[p,E]=_.useState([]);return _.useEffect(()=>{if(!M)return;(async()=>{try{const N=await ba("/spawns/heatmap?hours=24&limit=50000");E(N.spawn_points??[])}catch{}})()},[M]),_.useEffect(()=>{const D=o.current;if(!D||!M||p.length===0||d===0)return;D.width=d,D.height=O;const N=D.getContext("2d");if(N){N.clearRect(0,0,d,O);for(const b of p){const{x:U,y:B}=zu(b.ew,b.ns,d,O),x=Math.max(5,Math.min(12,5+Math.sqrt(b.intensity*.5))),H=N.createRadialGradient(U,B,0,U,B,x);H.addColorStop(0,`rgba(255, 0, 0, ${Math.min(.9,b.intensity/40)})`),H.addColorStop(.6,`rgba(255, 100, 0, ${Math.min(.4,b.intensity/120)})`),H.addColorStop(1,"rgba(255, 150, 0, 0)"),N.fillStyle=H,N.fillRect(U-x,B-x,x*2,x*2)}}},[p,d,O,M]),M?r.jsx("canvas",{ref:o,className:"ml-heatmap-canvas"}):null},gv=({imgW:d,imgH:O,enabled:M})=>{const[o,p]=_.useState([]);_.useEffect(()=>{if(!M)return;const D=async()=>{try{const b=await ba("/portals");p(b.portals??[])}catch{}};D();const N=setInterval(D,6e4);return()=>clearInterval(N)},[M]);const E=_.useMemo(()=>o.map(D=>({...D,pos:zu(D.coordinates.ew,D.coordinates.ns,d,O)})),[o,d,O]);return!M||E.length===0?null:r.jsx("div",{className:"ml-portals-layer",children:E.map((D,N)=>r.jsx("div",{className:"ml-portal-icon",style:{left:D.pos.x,top:D.pos.y},title:`${D.portal_name} (by ${D.discovered_by})`},N))})},E0=20,M0=.3,Sv=({players:d,getColor:O,onSelectPlayer:M,showHeatmap:o,showPortals:p,selectedPlayer:E})=>{var hl;const D=_.useRef(null),N=_.useRef(null),[b,U]=_.useState({w:0,h:0}),[B,x]=_.useState(null),H=_.useRef(null),W=_.useRef({scale:1,offX:0,offY:0}),Z=_.useRef({dragging:!1,sx:0,sy:0,startOffX:0,startOffY:0}),I=_.useCallback(()=>{if(N.current){const{scale:j,offX:R,offY:Y}=W.current;N.current.style.transform=`translate(${R}px, ${Y}px) scale(${j})`}},[]),Rl=_.useCallback(j=>{const R=j.currentTarget;if(U({w:R.naturalWidth,h:R.naturalHeight}),D.current){const Y=D.current.clientWidth,w=D.current.clientHeight,k=Math.min(Y/R.naturalWidth,w/R.naturalHeight);W.current={scale:k,offX:(Y-R.naturalWidth*k)/2,offY:(w-R.naturalHeight*k)/2},I()}},[I]),kl=_.useCallback(j=>{var Jt;j.preventDefault();const R=(Jt=D.current)==null?void 0:Jt.getBoundingClientRect();if(!R)return;const Y=W.current,w=j.deltaY<0?1.1:.9,k=Math.min(E0,Math.max(M0,Y.scale*w)),dl=k/Y.scale,_l=j.clientX-R.left,za=j.clientY-R.top;W.current={scale:k,offX:_l-(_l-Y.offX)*dl,offY:za-(za-Y.offY)*dl},I()},[I]),Fl=_.useCallback(j=>{if(j.button!==0)return;const R=W.current;Z.current={dragging:!0,sx:j.clientX,sy:j.clientY,startOffX:R.offX,startOffY:R.offY}},[]);_.useEffect(()=>{const j=Y=>{const w=Z.current;if(w.dragging&&(W.current.offX=w.startOffX+(Y.clientX-w.sx),W.current.offY=w.startOffY+(Y.clientY-w.sy),I()),D.current&&b.w>0&&H.current){const k=D.current.getBoundingClientRect(),dl=W.current,_l=hv(Y.clientX-k.left,Y.clientY-k.top,dl.scale,dl.offX,dl.offY,b.w,b.h);H.current.textContent=hf(_l.ns,_l.ew)}},R=()=>{Z.current.dragging=!1};return window.addEventListener("mousemove",j),window.addEventListener("mouseup",R),()=>{window.removeEventListener("mousemove",j),window.removeEventListener("mouseup",R)}},[I,b.w,b.h]);const Al=_.useRef(null);_.useEffect(()=>{if(!E||b.w===0||!D.current||Al.current===E)return;const j=d.find(dl=>dl.character_name===E);if(!j)return;Al.current=E;const{x:R,y:Y}=zu(j.ew,j.ns,b.w,b.h),w=D.current.getBoundingClientRect(),k=3;W.current={scale:Math.min(E0,Math.max(M0,k)),offX:w.width/2-R*k,offY:w.height/2-Y*k},I()},[E,d,b.w,b.h,I]),_.useEffect(()=>{E||(Al.current=null)},[E]);const L=_.useCallback((j,R,Y)=>{x(j?{x:R,y:Y,player:j}:null)},[]);return r.jsxs("div",{className:"ml-map-container",ref:D,onWheel:kl,onMouseDown:Fl,children:[r.jsxs("div",{ref:N,className:"ml-map-group",children:[r.jsx("img",{src:"/dereth.png",alt:"Dereth",className:"ml-map-img",onLoad:Rl,draggable:!1}),b.w>0&&r.jsxs(r.Fragment,{children:[r.jsx(rv,{imgW:b.w,imgH:b.h,enabled:o}),r.jsx(N0,{imgW:b.w,imgH:b.h,getColor:O}),r.jsx(O0,{players:d,imgW:b.w,imgH:b.h,getColor:O,onHover:L,onSelect:M,selectedPlayer:E}),r.jsx(gv,{imgW:b.w,imgH:b.h,enabled:p})]})]}),B&&r.jsxs("div",{className:"ml-tooltip",style:{left:B.x+12,top:B.y-10},children:[r.jsx("strong",{children:B.player.character_name}),r.jsx("br",{}),hf(B.player.ns,B.player.ew),r.jsx("br",{}),B.player.kills_per_hour," kph · ",(hl=B.player.kills)==null?void 0:hl.toLocaleString()," kills"]}),r.jsx("div",{className:"ml-coords",ref:H})]})},x0=bu.memo(({player:d,vitals:O,color:M,onSelect:o})=>{var U,B;const{openWindow:p}=Zn(),E=(d.vt_state||"idle").toLowerCase(),D=E==="combat"||E==="hunt",N=(d.total_rares??0)>0?Math.round((d.total_kills??0)/(d.total_rares??1)).toLocaleString():null,b=d.character_name;return r.jsxs("li",{className:"ml-player-row",style:{borderLeftColor:M},children:[r.jsxs("div",{className:"ml-pr-header",onClick:o,children:[r.jsx("span",{className:"ml-pr-name",children:b}),r.jsx("span",{className:"ml-pr-coords",children:hf(d.ns,d.ew)})]}),r.jsxs("div",{className:"ml-pr-vitals",children:[r.jsx("div",{className:"ml-vital-bar hp",children:r.jsx("div",{className:"ml-vital-fill",style:{width:`${(O==null?void 0:O.health_percentage)??0}%`}})}),r.jsx("div",{className:"ml-vital-bar sta",children:r.jsx("div",{className:"ml-vital-fill",style:{width:`${(O==null?void 0:O.stamina_percentage)??0}%`}})}),r.jsx("div",{className:"ml-vital-bar mana",children:r.jsx("div",{className:"ml-vital-fill",style:{width:`${(O==null?void 0:O.mana_percentage)??0}%`}})})]}),r.jsxs("div",{className:"ml-pr-grid",children:[r.jsxs("span",{className:"ml-gs",title:"Session kills",children:["⚔️ ",((U=d.kills)==null?void 0:U.toLocaleString())??0]}),r.jsxs("span",{className:"ml-gs",title:"Total kills",children:["🏆 ",(d.total_kills??0).toLocaleString()]}),r.jsxs("span",{className:"ml-gs",title:"Kills per hour",children:[d.kills_per_hour??"0"," ",r.jsx("span",{className:"ml-suffix",children:"KPH"})]}),r.jsxs("span",{className:"ml-gs",title:"Rares (session / total)",children:["💎 ",d.session_rares??0," / ",d.total_rares??0]}),r.jsx("span",{className:"ml-gs",title:"Kills per rare",children:N?r.jsxs(r.Fragment,{children:["📊 ",N," ",r.jsx("span",{className:"ml-suffix",children:"KPR"})]}):""}),r.jsx("span",{className:`ml-meta-pill ${D?"active":""}`,children:d.vt_state||"idle"}),r.jsxs("span",{className:"ml-gs",title:"Online time",children:["🕐 ",((B=d.onlinetime)==null?void 0:B.replace(/^00\./,""))??"--"]}),r.jsxs("span",{className:"ml-gs",title:"Deaths",children:["☠️ ",d.deaths??"0"]}),r.jsxs("span",{className:"ml-gs",title:"Prismatic tapers",children:[r.jsx("img",{src:"/prismatic-taper-icon.png",className:"ml-taper-icon",alt:""}),d.prismatic_taper_count??"0"]})]}),r.jsxs("div",{className:"ml-pr-buttons",children:[r.jsx("button",{className:"ml-btn accent",onClick:()=>p(`chat-${b}`,`Chat: ${b}`,b),children:"Chat"}),r.jsx("button",{className:"ml-btn accent",onClick:()=>p(`stats-${b}`,`Stats: ${b}`,b),children:"Stats"}),r.jsx("button",{className:"ml-btn accent",onClick:()=>p(`inv-${b}`,`Inventory: ${b}`,b),children:"Inv"}),r.jsx("button",{className:"ml-btn",onClick:()=>p(`char-${b}`,`Character: ${b}`,b),children:"Char"}),r.jsx("button",{className:"ml-btn",onClick:()=>p(`combat-${b}`,`Combat: ${b}`,b),children:"Combat"}),r.jsx("button",{className:"ml-btn",onClick:()=>p(`radar-${b}`,`Radar: ${b}`,b),children:"Radar"})]})]})});x0.displayName="PlayerRow";const bv=({players:d,vitals:O,getColor:M,onSelect:o})=>r.jsx("ul",{className:"ml-player-list",children:d.map(p=>r.jsx(x0,{player:p,vitals:O.get(p.character_name)??null,color:M(p.character_name),onSelect:()=>o(p.character_name)},p.character_name))}),zv=[{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"}],Tv=({value:d,onChange:O})=>r.jsx("div",{className:"ml-sort-buttons",children:zv.map(M=>r.jsx("button",{className:`ml-sort-btn ${d===M.key?"active":""}`,onClick:()=>O(M.key),children:M.label},M.key))}),Av=()=>{const{openWindow:d}=Zn();return r.jsxs("div",{className:"ml-tool-links",children:[r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>d("issues","Issues Board"),children:"📋 Issues"}),r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>d("vitalsharing","Vital Sharing"),children:"🤝 Vitals"}),r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>d("combatpicker","Combat Stats"),children:"⚔️ Combat"})]})},Ev=({players:d,vitals:O,serverHealth:M,totalRares:o,totalKills:p,getColor:E,onSelectPlayer:D,onViewToggle:N,showHeatmap:b,showPortals:U,onToggleHeatmap:B,onTogglePortals:x,version:H})=>{var j,R;const[W,Z]=_.useState("name"),[I,Rl]=_.useState(""),kl=_.useMemo(()=>d.reduce((Y,w)=>Y+(parseInt(w.kills_per_hour)||0),0),[d]),Fl=((j=M==null?void 0:M.status)==null?void 0:j.toLowerCase())==="online"||((R=M==null?void 0:M.status)==null?void 0:R.toLowerCase())==="up",Al=_.useDeferredValue(d),L=_.useDeferredValue(O),hl=_.useMemo(()=>{let Y=[...Al];switch(I&&(Y=Y.filter(w=>w.character_name.toLowerCase().startsWith(I.toLowerCase()))),W){case"kph":Y.sort((w,k)=>(parseInt(k.kills_per_hour)||0)-(parseInt(w.kills_per_hour)||0));break;case"skills":Y.sort((w,k)=>(k.kills||0)-(w.kills||0));break;case"srares":Y.sort((w,k)=>(k.session_rares??0)-(w.session_rares??0));break;case"tkills":Y.sort((w,k)=>(k.total_kills??0)-(w.total_kills??0));break;case"kpr":Y.sort((w,k)=>{const dl=(w.total_kills??0)/Math.max(1,w.total_rares??1),_l=(k.total_kills??0)/Math.max(1,k.total_rares??1);return dl-_l});break;default:Y.sort((w,k)=>w.character_name.localeCompare(k.character_name))}return Y},[Al,W,I]);return r.jsxs("div",{className:"ml-sidebar",children:[H&&r.jsxs("div",{className:"ml-version",children:["v",H]}),r.jsx("div",{className:"ml-sidebar-header",children:r.jsxs("span",{className:"ml-sidebar-title",children:["Active Mosswart Enjoyers (",d.length,")"]})}),r.jsxs("div",{className:"ml-server-status",children:[r.jsx("span",{className:`ml-status-dot ${Fl?"online":"offline"}`}),r.jsxs("span",{className:"ml-status-text",children:["Coldeve ",Fl?"Online":"Offline"]}),(M==null?void 0:M.player_count)!=null&&r.jsxs("span",{className:"ml-status-detail",children:["👥 ",M.player_count]}),(M==null?void 0:M.latency_ms)!=null&&r.jsxs("span",{className:"ml-status-detail",children:[Math.round(M.latency_ms),"ms"]}),(M==null?void 0:M.uptime_seconds)!=null&&r.jsxs("span",{className:"ml-status-detail",children:["Up: ",Math.floor(M.uptime_seconds/3600),"h"]})]}),r.jsxs("div",{className:"ml-counters",children:[r.jsxs("div",{className:"ml-counter rares",children:[r.jsx("span",{className:"ml-counter-val",children:o}),r.jsx("span",{className:"ml-counter-lbl",children:"Rares"})]}),r.jsxs("div",{className:`ml-counter kph ${kl>5e3?"ultra":""}`,children:[r.jsx("span",{className:"ml-counter-val",children:kl.toLocaleString()}),r.jsx("span",{className:"ml-counter-lbl",children:"Server KPH"})]}),r.jsxs("div",{className:"ml-counter kills",children:[r.jsx("span",{className:"ml-counter-val",children:p.toLocaleString()}),r.jsx("span",{className:"ml-counter-lbl",children:"Kills"})]})]}),r.jsxs("div",{className:"ml-tool-links",children:[r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:N,children:"📊 Dashboard"}),r.jsx("a",{href:"/inventory.html",target:"_blank",className:"ml-tool-link",children:"🔍 Inv Search"}),r.jsx("a",{href:"/suitbuilder.html",target:"_blank",className:"ml-tool-link",children:"🛡️ Suitbuilder"}),r.jsx("a",{href:"/debug.html",target:"_blank",className:"ml-tool-link",children:"🐛 Debug"}),r.jsx("a",{href:"/quest-status.html",target:"_blank",className:"ml-tool-link",children:"📜 Quests"})]}),r.jsx(Av,{}),r.jsxs("div",{className:"ml-toggles",children:[r.jsxs("label",{className:"ml-toggle-label",children:[r.jsx("input",{type:"checkbox",checked:b,onChange:Y=>B(Y.target.checked)}),r.jsx("span",{children:"Spawn Heatmap"})]}),r.jsxs("label",{className:"ml-toggle-label",children:[r.jsx("input",{type:"checkbox",checked:U,onChange:Y=>x(Y.target.checked)}),r.jsx("span",{children:"Portals"})]})]}),r.jsx(Tv,{value:W,onChange:Z}),r.jsx("input",{className:"ml-filter",type:"text",placeholder:"Filter players...",value:I,onChange:Y=>Rl(Y.target.value)}),r.jsx(bv,{players:hl,vitals:L,getColor:E,onSelect:D})]})},Mv=({id:d,title:O,zIndex:M,width:o=700,height:p=340,children:E})=>{const{closeWindow:D,bringToFront:N}=Zn(),b=_.useRef(null),U=_.useRef({dragging:!1,sx:0,sy:0,ox:0,oy:0}),B=_.useRef({x:420,y:10+Math.random()*40}),x=_.useCallback(H=>{var Z;H.preventDefault(),N(d);const W=(Z=b.current)==null?void 0:Z.getBoundingClientRect();W&&(U.current={dragging:!0,sx:H.clientX,sy:H.clientY,ox:W.left,oy:W.top})},[d,N]);return _.useEffect(()=>{const H=Z=>{const I=U.current;!I.dragging||!b.current||(B.current.x=I.ox+(Z.clientX-I.sx),B.current.y=I.oy+(Z.clientY-I.sy),b.current.style.left=`${B.current.x}px`,b.current.style.top=`${B.current.y}px`)},W=()=>{U.current.dragging=!1};return window.addEventListener("mousemove",H),window.addEventListener("mouseup",W),()=>{window.removeEventListener("mousemove",H),window.removeEventListener("mouseup",W)}},[]),r.jsxs("div",{ref:b,className:"ml-window",style:{zIndex:M,width:o,height:p,left:B.current.x,top:B.current.y},onMouseDown:()=>N(d),children:[r.jsxs("div",{className:"ml-window-header",onMouseDown:x,children:[r.jsx("span",{className:"ml-window-title",children:O}),r.jsx("button",{className:"ml-window-close",onClick:()=>D(d),children:"×"})]}),r.jsx("div",{className:"ml-window-content",children:E})]})},_v={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"},pv=({id:d,charName:O,zIndex:M,messages:o,socket:p})=>{const E=_.useRef(null),[D,N]=_.useState("");_.useEffect(()=>{E.current&&(E.current.scrollTop=E.current.scrollHeight)},[o.length]);const b=U=>{U.preventDefault();const B=D.trim();!B||!p||p.readyState!==WebSocket.OPEN||(p.send(JSON.stringify({player_name:O,command:B})),N(""))};return r.jsxs(Mv,{id:d,title:`Chat: ${O}`,zIndex:M,width:600,height:300,children:[r.jsx("div",{className:"ml-chat-messages",ref:E,children:o.map((U,B)=>r.jsx("div",{className:"ml-chat-line",style:{color:_v[U.color??2]??"#ddd"},children:U.text},B))}),r.jsx("form",{className:"ml-chat-form",onSubmit:b,children:r.jsx("input",{className:"ml-chat-input",value:D,onChange:U=>N(U.target.value),placeholder:"Enter chat..."})})]})},Dv=_.lazy(()=>Kt(()=>import("./StatsWindow-q03hLla2.js"),__vite__mapDeps([0,1])).then(d=>({default:d.StatsWindow}))),Ov=_.lazy(()=>Kt(()=>import("./CharacterWindow-CKLgR9TL.js"),__vite__mapDeps([2,1])).then(d=>({default:d.CharacterWindow}))),Nv=_.lazy(()=>Kt(()=>import("./InventoryWindow-CulnI71j.js"),__vite__mapDeps([3,1])).then(d=>({default:d.InventoryWindow}))),xv=_.lazy(()=>Kt(()=>import("./RadarWindow-D-MsBExK.js"),__vite__mapDeps([4,1])).then(d=>({default:d.RadarWindow}))),Uv=_.lazy(()=>Kt(()=>import("./CombatStatsWindow-LemLw4OR.js"),__vite__mapDeps([5,1])).then(d=>({default:d.CombatStatsWindow}))),jv=_.lazy(()=>Kt(()=>import("./CombatPickerWindow-CLkjJTHh.js"),__vite__mapDeps([6,1])).then(d=>({default:d.CombatPickerWindow}))),Cv=_.lazy(()=>Kt(()=>import("./IssuesWindow-Dy_uT95Z.js"),__vite__mapDeps([7,1])).then(d=>({default:d.IssuesWindow}))),Rv=_.lazy(()=>Kt(()=>import("./VitalSharingWindow-CJ_MKmdH.js"),__vite__mapDeps([8,1])).then(d=>({default:d.VitalSharingWindow}))),U0=bu.memo(({characters:d,chatMessages:O,nearbyObjects:M,socket:o})=>{const{windows:p}=Zn();return r.jsx(_.Suspense,{fallback:null,children:p.map(E=>{var b;const D=E.charName??"";switch(E.id.split("-")[0]){case"chat":return r.jsx(pv,{id:E.id,charName:D,zIndex:E.zIndex,messages:O.get(D)??[],socket:o},E.id);case"stats":return r.jsx(Dv,{id:E.id,charName:D,zIndex:E.zIndex},E.id);case"char":return r.jsx(Ov,{id:E.id,charName:D,zIndex:E.zIndex,vitals:((b=d.get(D))==null?void 0:b.vitals)??void 0},E.id);case"inv":return r.jsx(Nv,{id:E.id,charName:D,zIndex:E.zIndex},E.id);case"radar":return r.jsx(xv,{id:E.id,charName:D,zIndex:E.zIndex,socket:o,radarData:M.get(D)??null},E.id);case"combat":return r.jsx(Uv,{id:E.id,charName:D,zIndex:E.zIndex},E.id);case"combatpicker":return r.jsx(jv,{id:E.id,zIndex:E.zIndex,characters:d},E.id);case"issues":return r.jsx(Cv,{id:E.id,zIndex:E.zIndex},E.id);case"vitalsharing":return r.jsx(Rv,{id:E.id,zIndex:E.zIndex},E.id);default:return null}})})});U0.displayName="WindowRenderer";let Hv=0;const Bv=({recentRares:d})=>{const[O,M]=_.useState([]),[o,p]=_.useState(0),[E,D]=_.useState([]);_.useEffect(()=>{if(d.length>o&&o>0){const b=d.slice(0,d.length-o);for(const U of b){const B=++Hv;M(x=>[...x,{key:B,charName:U.character_name,rareName:U.name,exiting:!1}]),N(),setTimeout(()=>{M(x=>x.map(H=>H.key===B?{...H,exiting:!0}:H)),setTimeout(()=>{M(x=>x.filter(H=>H.key!==B))},500)},6e3)}}p(d.length)},[d.length]);const N=_.useCallback(()=>{const b=Date.now(),U=["#FFD700","#FF4444","#FF8800","#AA44FF","#4488FF"],B=Array.from({length:30},(x,H)=>{const W=Math.PI*2*H/30+(Math.random()-.5)*.5,Z=100+Math.random()*200;return{dx:Math.cos(W)*Z,dy:Math.sin(W)*Z-50,color:U[Math.floor(Math.random()*U.length)]}});D(x=>[...x,{id:b,particles:B}]),setTimeout(()=>D(x=>x.filter(H=>H.id!==b)),2200)},[]);return r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"ml-rare-notifications",children:O.map(b=>r.jsxs("div",{className:`ml-rare-notif ${b.exiting?"exiting":""}`,children:[r.jsx("div",{className:"ml-rare-notif-title",children:"🎆 LEGENDARY RARE! 🎆"}),r.jsx("div",{className:"ml-rare-notif-name",children:b.rareName}),r.jsx("div",{className:"ml-rare-notif-by",children:"found by"}),r.jsx("div",{className:"ml-rare-notif-char",children:b.charName})]},b.key))}),r.jsx("div",{className:"ml-fireworks",children:E.map(b=>r.jsx(bu.Fragment,{children:b.particles.map((U,B)=>r.jsx("div",{className:"ml-firework-particle",style:{left:"50%",top:"30%",backgroundColor:U.color,"--dx":`${U.dx}px`,"--dy":`${U.dy+200}px`}},B))},b.id))})]})},_0=["#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 qv(d){let O=0;for(let M=0;M{let p=d.current.get(o);return p||(p=O.current<_0.length?_0[O.current++]:qv(o),d.current.set(o,p)),p},[])}const Xv=({data:d,onViewToggle:O})=>{const M=Yv(),[o,p]=_.useState(!1),[E,D]=_.useState(!1),[N,b]=_.useState(null),U=_.useMemo(()=>Array.from(d.characters.values()).filter(Z=>Z.telemetry).map(Z=>Z.telemetry),[d.characters]),B=_.useMemo(()=>new Map(Array.from(d.characters.values()).filter(Z=>Z.vitals).map(Z=>[Z.name,Z.vitals])),[d.characters]),[x,H]=_.useState("");_.useEffect(()=>{fetch("/api/api-version",{credentials:"include"}).then(Z=>Z.json()).then(Z=>H(Z.version??"")).catch(()=>{})},[]);const W=_.useCallback(Z=>{b(I=>I===Z?null:Z)},[]);return r.jsx(dv,{children:r.jsxs("div",{className:"ml-layout",children:[r.jsx(Ev,{players:U,vitals:B,serverHealth:d.serverHealth,totalRares:d.totalRares,totalKills:d.totalKills,getColor:M,onSelectPlayer:W,onViewToggle:O,showHeatmap:o,showPortals:E,onToggleHeatmap:p,onTogglePortals:D,version:x}),r.jsx(Sv,{players:U,getColor:M,onSelectPlayer:W,showHeatmap:o,showPortals:E,selectedPlayer:N}),r.jsx(U0,{characters:d.characters,chatMessages:d.chatMessages,nearbyObjects:d.nearbyObjects,socket:d.socketRef.current}),r.jsx(Bv,{recentRares:d.recentRares})]})})};function Gv(d){const O=_.useRef(null),M=_.useRef(0),o=_.useRef(d);o.current=d;const p=_.useCallback(()=>{var D;if(((D=O.current)==null?void 0:D.readyState)===WebSocket.OPEN)return;const E=new WebSocket(yv());O.current=E,E.addEventListener("message",N=>{try{const b=JSON.parse(N.data);o.current(b)}catch{}}),E.addEventListener("close",()=>{O.current=null,M.current=window.setTimeout(p,2e3)}),E.addEventListener("error",()=>{E.close()})},[]);return _.useEffect(()=>(p(),()=>{var E;clearTimeout(M.current),(E=O.current)==null||E.close(),O.current=null}),[p]),O}const Qv=()=>ba("/live"),Zv=()=>ba("/combat-stats"),Vv=()=>ba("/server-health"),Lv=()=>ba("/total-rares"),Kv=()=>ba("/total-kills");function Jv(){const[d,O]=_.useState(new Map),[M,o]=_.useState(null),[p,E]=_.useState(0),[D,N]=_.useState(0),[b,U]=_.useState([]),B=_.useRef(new Map),[x,H]=_.useState(0),[W,Z]=_.useState(new Map),I=_.useRef(d);I.current=d;const Rl=_.useCallback((L,hl)=>{O(j=>{const R=new Map(j),Y=R.get(L)??{name:L,telemetry:null,vitals:null,combat:null,lastUpdate:0};return R.set(L,hl(Y)),R})},[]),kl=_.useCallback(L=>{var hl;if(L.type){if(L.type==="telemetry"){const j=L;Rl(j.character_name,R=>({...R,telemetry:j,lastUpdate:Date.now()}))}else if(L.type==="vitals"){const j=L;Rl(j.character_name,R=>({...R,vitals:j,lastUpdate:Date.now()}))}else if(L.type==="combat_stats"){const j=L;Rl(j.character_name,R=>({...R,combat:j,lastUpdate:Date.now()}))}else if(L.type==="rare"){const j=L;U(R=>[j,...R].slice(0,50))}else if(L.type==="dungeon_map"){const j=L;j.landblock&&(window.__dungeonMapCache||(window.__dungeonMapCache={}),window.__dungeonMapCache[j.landblock]=j)}else if(L.type==="nearby_objects"){const j=L;if(Z(R=>{const Y=new Map(R);return Y.set(j.character_name,j),Y}),j.is_dungeon&&j.landblock&&!((hl=window.__dungeonMapCache)!=null&&hl[j.landblock])){const R=Fl.current;(R==null?void 0:R.readyState)===WebSocket.OPEN&&R.send(JSON.stringify({type:"request_dungeon_map",landblock:j.landblock}))}}else if(L.type==="chat"){const j=L,R=B.current.get(j.character_name)??[];R.push({text:j.text,color:j.color,timestamp:j.timestamp}),R.length>1e3&&R.splice(0,R.length-1e3),B.current.set(j.character_name,R),H(Y=>Y+1)}}},[Rl]),Fl=Gv(kl);_.useEffect(()=>{const L=async()=>{try{const j=await Qv();O(R=>{var w;const Y=new Map(R);for(const k of j.players??[]){const dl=Y.get(k.character_name);Y.set(k.character_name,{name:k.character_name,telemetry:k,vitals:(dl==null?void 0:dl.vitals)??null,combat:(dl==null?void 0:dl.combat)??null,lastUpdate:Date.now()})}for(const k of Y.keys())(w=j.players)!=null&&w.some(dl=>dl.character_name===k)||Y.delete(k);return Y})}catch{}};L();const hl=setInterval(L,5e3);return()=>clearInterval(hl)},[]),_.useEffect(()=>{const L=async()=>{try{const j=await Zv();for(const R of j.stats??[])Rl(R.character_name,Y=>({...Y,combat:{...R,type:"combat_stats"}}))}catch{}};L();const hl=setInterval(L,3e4);return()=>clearInterval(hl)},[Rl]),_.useEffect(()=>{const L=async()=>{try{o(await Vv())}catch{}};L();const hl=setInterval(L,3e4);return()=>clearInterval(hl)},[]),_.useEffect(()=>{const L=async()=>{try{const[j,R]=await Promise.all([Lv(),Kv()]);E(j.all_time??0),N(R.total??0)}catch{}};L();const hl=setInterval(L,3e5);return()=>clearInterval(hl)},[]);const Al=_.useMemo(()=>B.current,[x]);return{characters:d,serverHealth:M,totalRares:p,totalKills:D,recentRares:b,chatMessages:Al,nearbyObjects:W,socketRef:Fl}}const wv=_.lazy(()=>Kt(()=>import("./DashboardView-BLrx64Ns.js"),__vite__mapDeps([9,1])));function Wv(){const[d,O]=_.useState(()=>localStorage.getItem("v2-view")||"map"),M=Jv(),o=()=>{const p=d==="map"?"dashboard":"map";O(p),localStorage.setItem("v2-view",p)};return d==="map"?r.jsx(Xv,{data:M,onViewToggle:o}):r.jsx(_.Suspense,{fallback:r.jsx("div",{style:{background:"#0d0d0d",color:"#888",padding:40,textAlign:"center"},children:"Loading dashboard..."}),children:r.jsx(wv,{data:M,onViewToggle:o})})}sv.createRoot(document.getElementById("root")).render(r.jsx(_.StrictMode,{children:r.jsx(Wv,{})}));"serviceWorker"in navigator&&navigator.serviceWorker.register("/v2/sw.js").catch(()=>{});export{Mv as D,bu as R,ba as a,r as j,_ as r,Zn as u}; diff --git a/static/assets/index-DzGubmvT.js b/static/assets/index-DzGubmvT.js new file mode 100644 index 00000000..e7bd4f22 --- /dev/null +++ b/static/assets/index-DzGubmvT.js @@ -0,0 +1,34 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StatsWindow-DHrHJUlg.js","assets/react-DlyoauG8.js","assets/CharacterWindow-BNz9pNjP.js","assets/InventoryWindow-i56DdW3Q.js","assets/RadarWindow-DdjDk5uC.js","assets/CombatStatsWindow-DSQwtgMl.js","assets/CombatPickerWindow-BO4qfgdX.js","assets/IssuesWindow-C0mPCUzZ.js","assets/VitalSharingWindow-By-4xWC-.js","assets/DashboardView-CI4rL0mQ.js"])))=>i.map(i=>d[i]); +import{r as p0,g as tv,a as av}from"./react-DlyoauG8.js";(function(){const O=document.createElement("link").relList;if(O&&O.supports&&O.supports("modulepreload"))return;for(const p of document.querySelectorAll('link[rel="modulepreload"]'))o(p);new MutationObserver(p=>{for(const E of p)if(E.type==="childList")for(const D of E.addedNodes)D.tagName==="LINK"&&D.rel==="modulepreload"&&o(D)}).observe(document,{childList:!0,subtree:!0});function M(p){const E={};return p.integrity&&(E.integrity=p.integrity),p.referrerPolicy&&(E.referrerPolicy=p.referrerPolicy),p.crossOrigin==="use-credentials"?E.credentials="include":p.crossOrigin==="anonymous"?E.credentials="omit":E.credentials="same-origin",E}function o(p){if(p.ep)return;p.ep=!0;const E=M(p);fetch(p.href,E)}})();var sf={exports:{}},gu={};/** + * @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 r0;function ev(){if(r0)return gu;r0=1;var d=Symbol.for("react.transitional.element"),O=Symbol.for("react.fragment");function M(o,p,E){var D=null;if(E!==void 0&&(D=""+E),p.key!==void 0&&(D=""+p.key),"key"in p){E={};for(var N in p)N!=="key"&&(E[N]=p[N])}else E=p;return p=E.ref,{$$typeof:d,type:o,key:D,ref:p!==void 0?p:null,props:E}}return gu.Fragment=O,gu.jsx=M,gu.jsxs=M,gu}var g0;function uv(){return g0||(g0=1,sf.exports=ev()),sf.exports}var r=uv(),_=p0();const bu=tv(_);var of={exports:{}},Su={},mf={exports:{}},df={};/** + * @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 S0;function nv(){return S0||(S0=1,(function(d){function O(T,C){var V=T.length;T.push(C);l:for(;0>>1,yl=T[vl];if(0>>1;vlp(nl,V))Ulp(Tt,nl)?(T[vl]=Tt,T[Ul]=V,vl=Ul):(T[vl]=nl,T[bl]=V,vl=bl);else if(Ulp(Tt,V))T[vl]=Tt,T[Ul]=V,vl=Ul;else break l}}return C}function p(T,C){var V=T.sortIndex-C.sortIndex;return V!==0?V:T.id-C.id}if(d.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var E=performance;d.unstable_now=function(){return E.now()}}else{var D=Date,N=D.now();d.unstable_now=function(){return D.now()-N}}var b=[],U=[],B=1,x=null,H=3,W=!1,Z=!1,I=!1,Rl=!1,kl=typeof setTimeout=="function"?setTimeout:null,Fl=typeof clearTimeout=="function"?clearTimeout:null,Al=typeof setImmediate<"u"?setImmediate:null;function L(T){for(var C=M(U);C!==null;){if(C.callback===null)o(U);else if(C.startTime<=T)o(U),C.sortIndex=C.expirationTime,O(b,C);else break;C=M(U)}}function hl(T){if(I=!1,L(T),!Z)if(M(b)!==null)Z=!0,j||(j=!0,_l());else{var C=M(U);C!==null&&pt(hl,C.startTime-T)}}var j=!1,R=-1,Y=5,w=-1;function k(){return Rl?!0:!(d.unstable_now()-wT&&k());){var vl=x.callback;if(typeof vl=="function"){x.callback=null,H=x.priorityLevel;var yl=vl(x.expirationTime<=T);if(T=d.unstable_now(),typeof yl=="function"){x.callback=yl,L(T),C=!0;break t}x===M(b)&&o(b),L(T)}else o(b);x=M(b)}if(x!==null)C=!0;else{var Gl=M(U);Gl!==null&&pt(hl,Gl.startTime-T),C=!1}}break l}finally{x=null,H=V,W=!1}C=void 0}}finally{C?_l():j=!1}}}var _l;if(typeof Al=="function")_l=function(){Al(dl)};else if(typeof MessageChannel<"u"){var za=new MessageChannel,Jt=za.port2;za.port1.onmessage=dl,_l=function(){Jt.postMessage(null)}}else _l=function(){kl(dl,0)};function pt(T,C){R=kl(function(){T(d.unstable_now())},C)}d.unstable_IdlePriority=5,d.unstable_ImmediatePriority=1,d.unstable_LowPriority=4,d.unstable_NormalPriority=3,d.unstable_Profiling=null,d.unstable_UserBlockingPriority=2,d.unstable_cancelCallback=function(T){T.callback=null},d.unstable_forceFrameRate=function(T){0>T||125vl?(T.sortIndex=V,O(U,T),M(b)===null&&T===M(U)&&(I?(Fl(R),R=-1):I=!0,pt(hl,V-vl))):(T.sortIndex=yl,O(b,T),Z||W||(Z=!0,j||(j=!0,_l()))),T},d.unstable_shouldYield=k,d.unstable_wrapCallback=function(T){var C=H;return function(){var V=H;H=C;try{return T.apply(this,arguments)}finally{H=V}}}})(df)),df}var b0;function cv(){return b0||(b0=1,mf.exports=nv()),mf.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 z0;function iv(){if(z0)return Su;z0=1;var d=cv(),O=p0(),M=av();function o(l){var t="https://react.dev/errors/"+l;if(1yl||(l.current=vl[yl],vl[yl]=null,yl--)}function nl(l,t){yl++,vl[yl]=l.current,l.current=t}var Ul=Gl(null),Tt=Gl(null),wt=Gl(null),Tu=Gl(null);function Au(l,t){switch(nl(wt,t),nl(Tt,l),nl(Ul,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?Xm(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=Xm(t),l=Gm(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}bl(Ul),nl(Ul,l)}function Ga(){bl(Ul),bl(Tt),bl(wt)}function Vn(l){l.memoizedState!==null&&nl(Tu,l);var t=Ul.current,a=Gm(t,l.type);t!==a&&(nl(Tt,l),nl(Ul,a))}function Eu(l){Tt.current===l&&(bl(Ul),bl(Tt)),Tu.current===l&&(bl(Tu),hu._currentValue=V)}var Ln,vf;function Ta(l){if(Ln===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);Ln=t&&t[1]||"",vf=-1)":-1u||f[e]!==v[u]){var S=` +`+f[e].replace(" at new "," at ");return l.displayName&&S.includes("")&&(S=S.replace("",l.displayName)),S}while(1<=e&&0<=u);break}}}finally{Kn=!1,Error.prepareStackTrace=a}return(a=l?l.displayName||l.name:"")?Ta(a):""}function j0(l,t){switch(l.tag){case 26:case 27:case 5:return Ta(l.type);case 16:return Ta("Lazy");case 13:return l.child!==t&&t!==null?Ta("Suspense Fallback"):Ta("Suspense");case 19:return Ta("SuspenseList");case 0:case 15:return Jn(l.type,!1);case 11:return Jn(l.type.render,!1);case 1:return Jn(l.type,!0);case 31:return Ta("Activity");default:return""}}function yf(l){try{var t="",a=null;do t+=j0(l,a),a=l,l=l.return;while(l);return t}catch(e){return` +Error generating stack: `+e.message+` +`+e.stack}}var wn=Object.prototype.hasOwnProperty,Wn=d.unstable_scheduleCallback,kn=d.unstable_cancelCallback,C0=d.unstable_shouldYield,R0=d.unstable_requestPaint,$l=d.unstable_now,H0=d.unstable_getCurrentPriorityLevel,rf=d.unstable_ImmediatePriority,gf=d.unstable_UserBlockingPriority,Mu=d.unstable_NormalPriority,B0=d.unstable_LowPriority,Sf=d.unstable_IdlePriority,q0=d.log,Y0=d.unstable_setDisableYieldValue,_e=null,Il=null;function Wt(l){if(typeof q0=="function"&&Y0(l),Il&&typeof Il.setStrictMode=="function")try{Il.setStrictMode(_e,l)}catch{}}var Pl=Math.clz32?Math.clz32:Q0,X0=Math.log,G0=Math.LN2;function Q0(l){return l>>>=0,l===0?32:31-(X0(l)/G0|0)|0}var _u=256,pu=262144,Du=4194304;function Aa(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 Ou(l,t,a){var e=l.pendingLanes;if(e===0)return 0;var u=0,n=l.suspendedLanes,c=l.pingedLanes;l=l.warmLanes;var i=e&134217727;return i!==0?(e=i&~n,e!==0?u=Aa(e):(c&=i,c!==0?u=Aa(c):a||(a=i&~l,a!==0&&(u=Aa(a))))):(i=e&~n,i!==0?u=Aa(i):c!==0?u=Aa(c):a||(a=e&~l,a!==0&&(u=Aa(a)))),u===0?0:t!==0&&t!==u&&(t&n)===0&&(n=u&-u,a=t&-t,n>=a||n===32&&(a&4194048)!==0)?t:u}function pe(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function Z0(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 bf(){var l=Du;return Du<<=1,(Du&62914560)===0&&(Du=4194304),l}function Fn(l){for(var t=[],a=0;31>a;a++)t.push(l);return t}function De(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function V0(l,t,a,e,u,n){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,f=l.expirationTimes,v=l.hiddenUpdates;for(a=c&~a;0"u")return null;try{return l.activeElement||l.body}catch{return l.body}}var k0=/[\n"\\]/g;function ft(l){return l.replace(k0,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function ac(l,t,a,e,u,n,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?ec(l,c,it(t)):a!=null?ec(l,c,it(a)):e!=null&&l.removeAttribute("value"),u==null&&n!=null&&(l.defaultChecked=!!n),u!=null&&(l.checked=u&&typeof u!="function"&&typeof u!="symbol"),i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?l.name=""+it(i):l.removeAttribute("name")}function jf(l,t,a,e,u,n,c,i){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(l.type=n),t!=null||a!=null){if(!(n!=="submit"&&n!=="reset"||t!=null)){tc(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??u,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),tc(l)}function ec(l,t,a){t==="number"&&Uu(l.ownerDocument)===l||l.defaultValue===""+a||(l.defaultValue=""+a)}function Ja(l,t,a,e){if(l=l.options,t){t={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),fc=!1;if(Nt)try{var Ue={};Object.defineProperty(Ue,"passive",{get:function(){fc=!0}}),window.addEventListener("test",Ue,Ue),window.removeEventListener("test",Ue,Ue)}catch{fc=!1}var Ft=null,sc=null,Cu=null;function Xf(){if(Cu)return Cu;var l,t=sc,a=t.length,e,u="value"in Ft?Ft.value:Ft.textContent,n=u.length;for(l=0;l=Re),Kf=" ",Jf=!1;function wf(l,t){switch(l){case"keyup":return Ed.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Wf(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var Fa=!1;function _d(l,t){switch(l){case"compositionend":return Wf(t);case"keypress":return t.which!==32?null:(Jf=!0,Kf);case"textInput":return l=t.data,l===Kf&&Jf?null:l;default:return null}}function pd(l,t){if(Fa)return l==="compositionend"||!vc&&wf(l,t)?(l=Xf(),Cu=sc=Ft=null,Fa=!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=as(a)}}function us(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?us(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function ns(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=Uu(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=Uu(l.document)}return t}function gc(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 Rd=Nt&&"documentMode"in document&&11>=document.documentMode,$a=null,Sc=null,Ye=null,bc=!1;function cs(l,t,a){var e=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;bc||$a==null||$a!==Uu(e)||(e=$a,"selectionStart"in e&&gc(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=Dn(Sc,"onSelect"),0>=c,u-=c,At=1<<32-Pl(t)+u|a<J?(ll=X,X=null):ll=X.sibling;var el=y(m,X,h[J],z);if(el===null){X===null&&(X=ll);break}l&&X&&el.alternate===null&&t(m,X),s=n(el,s,J),al===null?G=el:al.sibling=el,al=el,X=ll}if(J===h.length)return a(m,X),tl&&Ut(m,J),G;if(X===null){for(;JJ?(ll=X,X=null):ll=X.sibling;var Sa=y(m,X,el.value,z);if(Sa===null){X===null&&(X=ll);break}l&&X&&Sa.alternate===null&&t(m,X),s=n(Sa,s,J),al===null?G=Sa:al.sibling=Sa,al=Sa,X=ll}if(el.done)return a(m,X),tl&&Ut(m,J),G;if(X===null){for(;!el.done;J++,el=h.next())el=A(m,el.value,z),el!==null&&(s=n(el,s,J),al===null?G=el:al.sibling=el,al=el);return tl&&Ut(m,J),G}for(X=e(X);!el.done;J++,el=h.next())el=g(X,m,J,el.value,z),el!==null&&(l&&el.alternate!==null&&X.delete(el.key===null?J:el.key),s=n(el,s,J),al===null?G=el:al.sibling=el,al=el);return l&&X.forEach(function(lv){return t(m,lv)}),tl&&Ut(m,J),G}function ol(m,s,h,z){if(typeof h=="object"&&h!==null&&h.type===I&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case W:l:{for(var G=h.key;s!==null;){if(s.key===G){if(G=h.type,G===I){if(s.tag===7){a(m,s.sibling),z=u(s,h.props.children),z.return=m,m=z;break l}}else if(s.elementType===G||typeof G=="object"&&G!==null&&G.$$typeof===Y&&Ca(G)===s.type){a(m,s.sibling),z=u(s,h.props),Le(z,h),z.return=m,m=z;break l}a(m,s);break}else t(m,s);s=s.sibling}h.type===I?(z=Oa(h.props.children,m.mode,z,h.key),z.return=m,m=z):(z=Vu(h.type,h.key,h.props,null,m.mode,z),Le(z,h),z.return=m,m=z)}return c(m);case Z:l:{for(G=h.key;s!==null;){if(s.key===G)if(s.tag===4&&s.stateNode.containerInfo===h.containerInfo&&s.stateNode.implementation===h.implementation){a(m,s.sibling),z=u(s,h.children||[]),z.return=m,m=z;break l}else{a(m,s);break}else t(m,s);s=s.sibling}z=pc(h,m.mode,z),z.return=m,m=z}return c(m);case Y:return h=Ca(h),ol(m,s,h,z)}if(pt(h))return q(m,s,h,z);if(_l(h)){if(G=_l(h),typeof G!="function")throw Error(o(150));return h=G.call(h),Q(m,s,h,z)}if(typeof h.then=="function")return ol(m,s,Fu(h),z);if(h.$$typeof===Al)return ol(m,s,Ju(m,h),z);$u(m,h)}return typeof h=="string"&&h!==""||typeof h=="number"||typeof h=="bigint"?(h=""+h,s!==null&&s.tag===6?(a(m,s.sibling),z=u(s,h),z.return=m,m=z):(a(m,s),z=_c(h,m.mode,z),z.return=m,m=z),c(m)):a(m,s)}return function(m,s,h,z){try{Ve=0;var G=ol(m,s,h,z);return fe=null,G}catch(X){if(X===ie||X===Wu)throw X;var al=tt(29,X,null,m.mode);return al.lanes=z,al.return=m,al}finally{}}}var Ha=Ns(!0),xs=Ns(!1),ta=!1;function Yc(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Xc(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 aa(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function ea(l,t,a){var e=l.updateQueue;if(e===null)return null;if(e=e.shared,(ul&2)!==0){var u=e.pending;return u===null?t.next=t:(t.next=u.next,u.next=t),e.pending=t,t=Zu(l),hs(l,null,a),t}return Qu(l,e,t,a),Zu(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,Tf(l,a)}}function Gc(l,t){var a=l.updateQueue,e=l.alternate;if(e!==null&&(e=e.updateQueue,a===e)){var u=null,n=null;if(a=a.firstBaseUpdate,a!==null){do{var c={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};n===null?u=n=c:n=n.next=c,a=a.next}while(a!==null);n===null?u=n=t:n=n.next=t}else u=n=t;a={baseState:e.baseState,firstBaseUpdate:u,lastBaseUpdate:n,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 Qc=!1;function Je(){if(Qc){var l=ce;if(l!==null)throw l}}function we(l,t,a,e){Qc=!1;var u=l.updateQueue;ta=!1;var n=u.firstBaseUpdate,c=u.lastBaseUpdate,i=u.shared.pending;if(i!==null){u.shared.pending=null;var f=i,v=f.next;f.next=null,c===null?n=v:c.next=v,c=f;var S=l.alternate;S!==null&&(S=S.updateQueue,i=S.lastBaseUpdate,i!==c&&(i===null?S.firstBaseUpdate=v:i.next=v,S.lastBaseUpdate=f))}if(n!==null){var A=u.baseState;c=0,S=v=f=null,i=n;do{var y=i.lane&-536870913,g=y!==i.lane;if(g?(P&y)===y:(e&y)===y){y!==0&&y===ne&&(Qc=!0),S!==null&&(S=S.next={lane:0,tag:i.tag,payload:i.payload,callback:null,next:null});l:{var q=l,Q=i;y=t;var ol=a;switch(Q.tag){case 1:if(q=Q.payload,typeof q=="function"){A=q.call(ol,A,y);break l}A=q;break l;case 3:q.flags=q.flags&-65537|128;case 0:if(q=Q.payload,y=typeof q=="function"?q.call(ol,A,y):q,y==null)break l;A=x({},A,y);break l;case 2:ta=!0}}y=i.callback,y!==null&&(l.flags|=64,g&&(l.flags|=8192),g=u.callbacks,g===null?u.callbacks=[y]:g.push(y))}else g={lane:y,tag:i.tag,payload:i.payload,callback:i.callback,next:null},S===null?(v=S=g,f=A):S=S.next=g,c|=y;if(i=i.next,i===null){if(i=u.shared.pending,i===null)break;g=i,i=g.next,g.next=null,u.lastBaseUpdate=g,u.shared.pending=null}}while(!0);S===null&&(f=A),u.baseState=f,u.firstBaseUpdate=v,u.lastBaseUpdate=S,n===null&&(u.shared.lanes=0),fa|=c,l.lanes=c,l.memoizedState=A}}function Us(l,t){if(typeof l!="function")throw Error(o(191,l));l.call(t)}function js(l,t){var a=l.callbacks;if(a!==null)for(l.callbacks=null,l=0;ln?n:8;var c=T.T,i={};T.T=i,ci(l,!1,t,a);try{var f=u(),v=T.S;if(v!==null&&v(i,f),f!==null&&typeof f=="object"&&typeof f.then=="function"){var S=Vd(f,e);Fe(l,t,S,ct(l))}else Fe(l,t,e,ct(l))}catch(A){Fe(l,t,{then:function(){},status:"rejected",reason:A},ct())}finally{C.p=n,c!==null&&i.types!==null&&(c.types=i.types),T.T=c}}function kd(){}function ui(l,t,a,e){if(l.tag!==5)throw Error(o(476));var u=oo(l).queue;so(l,u,t,V,a===null?kd:function(){return mo(l),a(e)})}function oo(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:V,baseState:V,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ht,lastRenderedState:V},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ht,lastRenderedState:a},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function mo(l){var t=oo(l);t.next===null&&(t=l.alternate.memoizedState),Fe(l,t.next.queue,{},ct())}function ni(){return ql(hu)}function ho(){return Ml().memoizedState}function vo(){return Ml().memoizedState}function Fd(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var a=ct();l=aa(a);var e=ea(t,l,a);e!==null&&(Wl(e,t,a),Ke(e,t,a)),t={cache:Rc()},l.payload=t;return}t=t.return}}function $d(l,t,a){var e=ct();a={lane:e,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},fn(l)?ro(t,a):(a=Ec(l,t,a,e),a!==null&&(Wl(a,l,e),go(a,t,e)))}function yo(l,t,a){var e=ct();Fe(l,t,a,e)}function Fe(l,t,a,e){var u={lane:e,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(fn(l))ro(t,u);else{var n=l.alternate;if(l.lanes===0&&(n===null||n.lanes===0)&&(n=t.lastRenderedReducer,n!==null))try{var c=t.lastRenderedState,i=n(c,a);if(u.hasEagerState=!0,u.eagerState=i,lt(i,c))return Qu(l,t,u,0),ml===null&&Gu(),!1}catch{}finally{}if(a=Ec(l,t,u,e),a!==null)return Wl(a,l,e),go(a,t,e),!0}return!1}function ci(l,t,a,e){if(e={lane:2,revertLane:Yi(),gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null},fn(l)){if(t)throw Error(o(479))}else t=Ec(l,a,e,2),t!==null&&Wl(t,l,2)}function fn(l){var t=l.alternate;return l===K||t!==null&&t===K}function ro(l,t){oe=ln=!0;var a=l.pending;a===null?t.next=t:(t.next=a.next,a.next=t),l.pending=t}function go(l,t,a){if((a&4194048)!==0){var e=t.lanes;e&=l.pendingLanes,a|=e,t.lanes=a,Tf(l,a)}}var $e={readContext:ql,use:en,useCallback:zl,useContext:zl,useEffect:zl,useImperativeHandle:zl,useLayoutEffect:zl,useInsertionEffect:zl,useMemo:zl,useReducer:zl,useRef:zl,useState:zl,useDebugValue:zl,useDeferredValue:zl,useTransition:zl,useSyncExternalStore:zl,useId:zl,useHostTransitionStatus:zl,useFormState:zl,useActionState:zl,useOptimistic:zl,useMemoCache:zl,useCacheRefresh:zl};$e.useEffectEvent=zl;var So={readContext:ql,use:en,useCallback:function(l,t){return Ql().memoizedState=[l,t===void 0?null:t],l},useContext:ql,useEffect:lo,useImperativeHandle:function(l,t,a){a=a!=null?a.concat([l]):null,nn(4194308,4,uo.bind(null,t,l),a)},useLayoutEffect:function(l,t){return nn(4194308,4,l,t)},useInsertionEffect:function(l,t){nn(4,2,l,t)},useMemo:function(l,t){var a=Ql();t=t===void 0?null:t;var e=l();if(Ba){Wt(!0);try{l()}finally{Wt(!1)}}return a.memoizedState=[e,t],e},useReducer:function(l,t,a){var e=Ql();if(a!==void 0){var u=a(t);if(Ba){Wt(!0);try{a(t)}finally{Wt(!1)}}}else u=t;return e.memoizedState=e.baseState=u,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:u},e.queue=l,l=l.dispatch=$d.bind(null,K,l),[e.memoizedState,l]},useRef:function(l){var t=Ql();return l={current:l},t.memoizedState=l},useState:function(l){l=Pc(l);var t=l.queue,a=yo.bind(null,K,t);return t.dispatch=a,[l.memoizedState,a]},useDebugValue:ai,useDeferredValue:function(l,t){var a=Ql();return ei(a,l,t)},useTransition:function(){var l=Pc(!1);return l=so.bind(null,K,l.queue,!0,!1),Ql().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,a){var e=K,u=Ql();if(tl){if(a===void 0)throw Error(o(407));a=a()}else{if(a=t(),ml===null)throw Error(o(349));(P&127)!==0||Ys(e,t,a)}u.memoizedState=a;var n={value:a,getSnapshot:t};return u.queue=n,lo(Gs.bind(null,e,n,l),[l]),e.flags|=2048,de(9,{destroy:void 0},Xs.bind(null,e,n,a,t),null),a},useId:function(){var l=Ql(),t=ml.identifierPrefix;if(tl){var a=Et,e=At;a=(e&~(1<<32-Pl(e)-1)).toString(32)+a,t="_"+t+"R_"+a,a=tn++,0<\/script>",n=n.removeChild(n.firstChild);break;case"select":n=typeof e.is=="string"?c.createElement("select",{is:e.is}):c.createElement("select"),e.multiple?n.multiple=!0:e.size&&(n.size=e.size);break;default:n=typeof e.is=="string"?c.createElement(u,{is:e.is}):c.createElement(u)}}n[Hl]=t,n[Zl]=e;l:for(c=t.child;c!==null;){if(c.tag===5||c.tag===6)n.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=n;l:switch(Xl(n,u,e),u){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 gl(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(o(166));if(l=wt.current,ee(t)){if(l=t.stateNode,a=t.memoizedProps,e=null,u=Bl,u!==null)switch(u.tag){case 27:case 5:e=u.memoizedProps}l[Hl]=t,l=!!(l.nodeValue===a||e!==null&&e.suppressHydrationWarning===!0||qm(l.nodeValue,a)),l||Pt(t,!0)}else l=On(l).createTextNode(e),l[Hl]=t,t.stateNode=l}return gl(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(o(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(o(557));l[Hl]=t}else Na(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;gl(t),l=!1}else a=xc(),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(o(558))}return gl(t),null;case 13:if(e=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(u=ee(t),e!==null&&e.dehydrated!==null){if(l===null){if(!u)throw Error(o(318));if(u=t.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(o(317));u[Hl]=t}else Na(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;gl(t),u=!1}else u=xc(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=u),u=!0;if(!u)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,u=null,e.alternate!==null&&e.alternate.memoizedState!==null&&e.alternate.memoizedState.cachePool!==null&&(u=e.alternate.memoizedState.cachePool.pool),n=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),n!==u&&(e.flags|=2048)),a!==l&&a&&(t.child.flags|=8192),hn(t,t.updateQueue),gl(t),null);case 4:return Ga(),l===null&&Zi(t.stateNode.containerInfo),gl(t),null;case 10:return Ct(t.type),gl(t),null;case 19:if(bl(El),e=t.memoizedState,e===null)return gl(t),null;if(u=(t.flags&128)!==0,n=e.rendering,n===null)if(u)Pe(e,!1);else{if(Tl!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(n=Pu(l),n!==null){for(t.flags|=128,Pe(e,!1),l=n.updateQueue,t.updateQueue=l,hn(t,l),t.subtreeFlags=0,l=a,a=t.child;a!==null;)vs(a,l),a=a.sibling;return nl(El,El.current&1|2),tl&&Ut(t,e.treeForkCount),t.child}l=l.sibling}e.tail!==null&&$l()>Sn&&(t.flags|=128,u=!0,Pe(e,!1),t.lanes=4194304)}else{if(!u)if(l=Pu(n),l!==null){if(t.flags|=128,u=!0,l=l.updateQueue,t.updateQueue=l,hn(t,l),Pe(e,!0),e.tail===null&&e.tailMode==="hidden"&&!n.alternate&&!tl)return gl(t),null}else 2*$l()-e.renderingStartTime>Sn&&a!==536870912&&(t.flags|=128,u=!0,Pe(e,!1),t.lanes=4194304);e.isBackwards?(n.sibling=t.child,t.child=n):(l=e.last,l!==null?l.sibling=n:t.child=n,e.last=n)}return e.tail!==null?(l=e.tail,e.rendering=l,e.tail=l.sibling,e.renderingStartTime=$l(),l.sibling=null,a=El.current,nl(El,u?a&1|2:a&1),tl&&Ut(t,e.treeForkCount),l):(gl(t),null);case 22:case 23:return et(t),Vc(),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&&(gl(t),t.subtreeFlags&6&&(t.flags|=8192)):gl(t),a=t.updateQueue,a!==null&&hn(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&&bl(ja),null;case 24:return a=null,l!==null&&(a=l.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),Ct(pl),gl(t),null;case 25:return null;case 30:return null}throw Error(o(156,t.tag))}function ah(l,t){switch(Oc(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return Ct(pl),Ga(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return Eu(t),null;case 31:if(t.memoizedState!==null){if(et(t),t.alternate===null)throw Error(o(340));Na()}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(o(340));Na()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return bl(El),null;case 4:return Ga(),null;case 10:return Ct(t.type),null;case 22:case 23:return et(t),Vc(),l!==null&&bl(ja),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return Ct(pl),null;case 25:return null;default:return null}}function Zo(l,t){switch(Oc(t),t.tag){case 3:Ct(pl),Ga();break;case 26:case 27:case 5:Eu(t);break;case 4:Ga();break;case 31:t.memoizedState!==null&&et(t);break;case 13:et(t);break;case 19:bl(El);break;case 10:Ct(t.type);break;case 22:case 23:et(t),Vc(),l!==null&&bl(ja);break;case 24:Ct(pl)}}function lu(l,t){try{var a=t.updateQueue,e=a!==null?a.lastEffect:null;if(e!==null){var u=e.next;a=u;do{if((a.tag&l)===l){e=void 0;var n=a.create,c=a.inst;e=n(),c.destroy=e}a=a.next}while(a!==u)}}catch(i){il(t,t.return,i)}}function ca(l,t,a){try{var e=t.updateQueue,u=e!==null?e.lastEffect:null;if(u!==null){var n=u.next;e=n;do{if((e.tag&l)===l){var c=e.inst,i=c.destroy;if(i!==void 0){c.destroy=void 0,u=t;var f=a,v=i;try{v()}catch(S){il(u,f,S)}}}e=e.next}while(e!==n)}}catch(S){il(t,t.return,S)}}function Vo(l){var t=l.updateQueue;if(t!==null){var a=l.stateNode;try{js(t,a)}catch(e){il(l,l.return,e)}}}function Lo(l,t,a){a.props=qa(l.type,l.memoizedProps),a.state=l.memoizedState;try{a.componentWillUnmount()}catch(e){il(l,t,e)}}function tu(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(u){il(l,t,u)}}function Mt(l,t){var a=l.ref,e=l.refCleanup;if(a!==null)if(typeof e=="function")try{e()}catch(u){il(l,t,u)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(u){il(l,t,u)}else a.current=null}function Ko(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(u){il(l,l.return,u)}}function Ti(l,t,a){try{var e=l.stateNode;Mh(e,l.type,a,t),e[Zl]=t}catch(u){il(l,l.return,u)}}function Jo(l){return l.tag===5||l.tag===3||l.tag===26||l.tag===27&&ha(l.type)||l.tag===4}function Ai(l){l:for(;;){for(;l.sibling===null;){if(l.return===null||Jo(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&&ha(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 Ei(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=Ot));else if(e!==4&&(e===27&&ha(l.type)&&(a=l.stateNode,t=null),l=l.child,l!==null))for(Ei(l,t,a),l=l.sibling;l!==null;)Ei(l,t,a),l=l.sibling}function vn(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&&ha(l.type)&&(a=l.stateNode),l=l.child,l!==null))for(vn(l,t,a),l=l.sibling;l!==null;)vn(l,t,a),l=l.sibling}function wo(l){var t=l.stateNode,a=l.memoizedProps;try{for(var e=l.type,u=t.attributes;u.length;)t.removeAttributeNode(u[0]);Xl(t,e,a),t[Hl]=l,t[Zl]=a}catch(n){il(l,l.return,n)}}var Yt=!1,Nl=!1,Mi=!1,Wo=typeof WeakSet=="function"?WeakSet:Set,Cl=null;function eh(l,t){if(l=l.containerInfo,Ki=Hn,l=ns(l),gc(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 u=e.anchorOffset,n=e.focusNode;e=e.focusOffset;try{a.nodeType,n.nodeType}catch{a=null;break l}var c=0,i=-1,f=-1,v=0,S=0,A=l,y=null;t:for(;;){for(var g;A!==a||u!==0&&A.nodeType!==3||(i=c+u),A!==n||e!==0&&A.nodeType!==3||(f=c+e),A.nodeType===3&&(c+=A.nodeValue.length),(g=A.firstChild)!==null;)y=A,A=g;for(;;){if(A===l)break t;if(y===a&&++v===u&&(i=c),y===n&&++S===e&&(f=c),(g=A.nextSibling)!==null)break;A=y,y=A.parentNode}A=g}a=i===-1||f===-1?null:{start:i,end:f}}else a=null}a=a||{start:0,end:0}}else a=null;for(Ji={focusedElem:l,selectionRange:a},Hn=!1,Cl=t;Cl!==null;)if(t=Cl,l=t.child,(t.subtreeFlags&1028)!==0&&l!==null)l.return=t,Cl=l;else for(;Cl!==null;){switch(t=Cl,n=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"))),Xl(n,e,a),n[Hl]=l,jl(n),e=n;break l;case"link":var c=l0("link","href",u).get(e+(a.href||""));if(c){for(var i=0;iol&&(c=ol,ol=Q,Q=c);var m=es(i,Q),s=es(i,ol);if(m&&s&&(g.rangeCount!==1||g.anchorNode!==m.node||g.anchorOffset!==m.offset||g.focusNode!==s.node||g.focusOffset!==s.offset)){var h=A.createRange();h.setStart(m.node,m.offset),g.removeAllRanges(),Q>ol?(g.addRange(h),g.extend(s.node,s.offset)):(h.setEnd(s.node,s.offset),g.addRange(h))}}}}for(A=[],g=i;g=g.parentNode;)g.nodeType===1&&A.push({element:g,left:g.scrollLeft,top:g.scrollTop});for(typeof i.focus=="function"&&i.focus(),i=0;ia?32:a,T.T=null,a=Ui,Ui=null;var n=oa,c=Vt;if(xl=0,ge=oa=null,Vt=0,(ul&6)!==0)throw Error(o(331));var i=ul;if(ul|=4,nm(n.current),am(n,n.current,c,a),ul=i,iu(0,!1),Il&&typeof Il.onPostCommitFiberRoot=="function")try{Il.onPostCommitFiberRoot(_e,n)}catch{}return!0}finally{C.p=u,T.T=e,Em(l,t)}}function _m(l,t,a){t=ot(a,t),t=oi(l.stateNode,t,2),l=ea(l,t,2),l!==null&&(De(l,2),_t(l))}function il(l,t,a){if(l.tag===3)_m(l,l,a);else for(;t!==null;){if(t.tag===3){_m(t,l,a);break}else if(t.tag===1){var e=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof e.componentDidCatch=="function"&&(sa===null||!sa.has(e))){l=ot(a,l),a=po(2),e=ea(t,a,2),e!==null&&(Do(a,e,t,l),De(e,2),_t(e));break}}t=t.return}}function Hi(l,t,a){var e=l.pingCache;if(e===null){e=l.pingCache=new ch;var u=new Set;e.set(t,u)}else u=e.get(t),u===void 0&&(u=new Set,e.set(t,u));u.has(a)||(Di=!0,u.add(a),l=mh.bind(null,l,t,a),t.then(l,l))}function mh(l,t,a){var e=l.pingCache;e!==null&&e.delete(t),l.pingedLanes|=l.suspendedLanes&a,l.warmLanes&=~a,ml===l&&(P&a)===a&&(Tl===4||Tl===3&&(P&62914560)===P&&300>$l()-gn?(ul&2)===0&&Se(l,0):Oi|=a,re===P&&(re=0)),_t(l)}function pm(l,t){t===0&&(t=bf()),l=Da(l,t),l!==null&&(De(l,t),_t(l))}function dh(l){var t=l.memoizedState,a=0;t!==null&&(a=t.retryLane),pm(l,a)}function hh(l,t){var a=0;switch(l.tag){case 31:case 13:var e=l.stateNode,u=l.memoizedState;u!==null&&(a=u.retryLane);break;case 19:e=l.stateNode;break;case 22:e=l.stateNode._retryCache;break;default:throw Error(o(314))}e!==null&&e.delete(t),pm(l,a)}function vh(l,t){return Wn(l,t)}var Mn=null,ze=null,Bi=!1,_n=!1,qi=!1,da=0;function _t(l){l!==ze&&l.next===null&&(ze===null?Mn=ze=l:ze=ze.next=l),_n=!0,Bi||(Bi=!0,rh())}function iu(l,t){if(!qi&&_n){qi=!0;do for(var a=!1,e=Mn;e!==null;){if(l!==0){var u=e.pendingLanes;if(u===0)var n=0;else{var c=e.suspendedLanes,i=e.pingedLanes;n=(1<<31-Pl(42|l)+1)-1,n&=u&~(c&~i),n=n&201326741?n&201326741|1:n?n|2:0}n!==0&&(a=!0,xm(e,n))}else n=P,n=Ou(e,e===ml?n:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),(n&3)===0||pe(e,n)||(a=!0,xm(e,n));e=e.next}while(a);qi=!1}}function yh(){Dm()}function Dm(){_n=Bi=!1;var l=0;da!==0&&ph()&&(l=da);for(var t=$l(),a=null,e=Mn;e!==null;){var u=e.next,n=Om(e,t);n===0?(e.next=null,a===null?Mn=u:a.next=u,u===null&&(ze=a)):(a=e,(l!==0||(n&3)!==0)&&(_n=!0)),e=u}xl!==0&&xl!==5||iu(l),da!==0&&(da=0)}function Om(l,t){for(var a=l.suspendedLanes,e=l.pingedLanes,u=l.expirationTimes,n=l.pendingLanes&-62914561;0i)break;var S=f.transferSize,A=f.initiatorType;S&&Ym(A)&&(f=f.responseEnd,c+=S*(f"u"?null:document;function Fm(l,t,a){var e=Te;if(e&&typeof t=="string"&&t){var u=ft(t);u='link[rel="'+l+'"][href="'+u+'"]',typeof a=="string"&&(u+='[crossorigin="'+a+'"]'),km.has(u)||(km.add(u),l={rel:l,crossOrigin:a,href:t},e.querySelector(u)===null&&(t=e.createElement("link"),Xl(t,"link",l),jl(t),e.head.appendChild(t)))}}function Hh(l){Lt.D(l),Fm("dns-prefetch",l,null)}function Bh(l,t){Lt.C(l,t),Fm("preconnect",l,t)}function qh(l,t,a){Lt.L(l,t,a);var e=Te;if(e&&l&&t){var u='link[rel="preload"][as="'+ft(t)+'"]';t==="image"&&a&&a.imageSrcSet?(u+='[imagesrcset="'+ft(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(u+='[imagesizes="'+ft(a.imageSizes)+'"]')):u+='[href="'+ft(l)+'"]';var n=u;switch(t){case"style":n=Ae(l);break;case"script":n=Ee(l)}rt.has(n)||(l=x({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:l,as:t},a),rt.set(n,l),e.querySelector(u)!==null||t==="style"&&e.querySelector(mu(n))||t==="script"&&e.querySelector(du(n))||(t=e.createElement("link"),Xl(t,"link",l),jl(t),e.head.appendChild(t)))}}function Yh(l,t){Lt.m(l,t);var a=Te;if(a&&l){var e=t&&typeof t.as=="string"?t.as:"script",u='link[rel="modulepreload"][as="'+ft(e)+'"][href="'+ft(l)+'"]',n=u;switch(e){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":n=Ee(l)}if(!rt.has(n)&&(l=x({rel:"modulepreload",href:l},t),rt.set(n,l),a.querySelector(u)===null)){switch(e){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(du(n)))return}e=a.createElement("link"),Xl(e,"link",l),jl(e),a.head.appendChild(e)}}}function Xh(l,t,a){Lt.S(l,t,a);var e=Te;if(e&&l){var u=La(e).hoistableStyles,n=Ae(l);t=t||"default";var c=u.get(n);if(!c){var i={loading:0,preload:null};if(c=e.querySelector(mu(n)))i.loading=5;else{l=x({rel:"stylesheet",href:l,"data-precedence":t},a),(a=rt.get(n))&&Pi(l,a);var f=c=e.createElement("link");jl(f),Xl(f,"link",l),f._p=new Promise(function(v,S){f.onload=v,f.onerror=S}),f.addEventListener("load",function(){i.loading|=1}),f.addEventListener("error",function(){i.loading|=2}),i.loading|=4,xn(c,t,e)}c={type:"stylesheet",instance:c,count:1,state:i},u.set(n,c)}}}function Gh(l,t){Lt.X(l,t);var a=Te;if(a&&l){var e=La(a).hoistableScripts,u=Ee(l),n=e.get(u);n||(n=a.querySelector(du(u)),n||(l=x({src:l,async:!0},t),(t=rt.get(u))&&lf(l,t),n=a.createElement("script"),jl(n),Xl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},e.set(u,n))}}function Qh(l,t){Lt.M(l,t);var a=Te;if(a&&l){var e=La(a).hoistableScripts,u=Ee(l),n=e.get(u);n||(n=a.querySelector(du(u)),n||(l=x({src:l,async:!0,type:"module"},t),(t=rt.get(u))&&lf(l,t),n=a.createElement("script"),jl(n),Xl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},e.set(u,n))}}function $m(l,t,a,e){var u=(u=wt.current)?Nn(u):null;if(!u)throw Error(o(446));switch(l){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=Ae(a.href),a=La(u).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=Ae(a.href);var n=La(u).hoistableStyles,c=n.get(l);if(c||(u=u.ownerDocument||u,c={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},n.set(l,c),(n=u.querySelector(mu(l)))&&!n._p&&(c.instance=n,c.state.loading=5),rt.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},rt.set(l,a),n||Zh(u,l,a,c.state))),t&&e===null)throw Error(o(528,""));return c}if(t&&e!==null)throw Error(o(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Ee(a),a=La(u).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(o(444,l))}}function Ae(l){return'href="'+ft(l)+'"'}function mu(l){return'link[rel="stylesheet"]['+l+"]"}function Im(l){return x({},l,{"data-precedence":l.precedence,precedence:null})}function Zh(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}),Xl(t,"link",a),jl(t),l.head.appendChild(t))}function Ee(l){return'[src="'+ft(l)+'"]'}function du(l){return"script[async]"+l}function Pm(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,jl(e),e;var u=x({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return e=(l.ownerDocument||l).createElement("style"),jl(e),Xl(e,"style",u),xn(e,a.precedence,l),t.instance=e;case"stylesheet":u=Ae(a.href);var n=l.querySelector(mu(u));if(n)return t.state.loading|=4,t.instance=n,jl(n),n;e=Im(a),(u=rt.get(u))&&Pi(e,u),n=(l.ownerDocument||l).createElement("link"),jl(n);var c=n;return c._p=new Promise(function(i,f){c.onload=i,c.onerror=f}),Xl(n,"link",e),t.state.loading|=4,xn(n,a.precedence,l),t.instance=n;case"script":return n=Ee(a.src),(u=l.querySelector(du(n)))?(t.instance=u,jl(u),u):(e=a,(u=rt.get(n))&&(e=x({},a),lf(e,u)),l=l.ownerDocument||l,u=l.createElement("script"),jl(u),Xl(u,"link",e),l.head.appendChild(u),t.instance=u);case"void":return null;default:throw Error(o(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(e=t.instance,t.state.loading|=4,xn(e,a.precedence,l));return t.instance}function xn(l,t,a){for(var e=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=e.length?e[e.length-1]:null,n=u,c=0;c title"):null)}function Vh(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 a0(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function Lh(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 u=Ae(e.href),n=t.querySelector(mu(u));if(n){t=n._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=jn.bind(l),t.then(l,l)),a.state.loading|=4,a.instance=n,jl(n);return}n=t.ownerDocument||t,e=Im(e),(u=rt.get(u))&&Pi(e,u),n=n.createElement("link"),jl(n);var c=n;c._p=new Promise(function(i,f){c.onload=i,c.onerror=f}),Xl(n,"link",e),a.instance=n}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(l.count++,a=jn.bind(l),t.addEventListener("load",a),t.addEventListener("error",a))}}var tf=0;function Kh(l,t){return l.stylesheets&&l.count===0&&Rn(l,l.stylesheets),0tf?50:800)+t);return l.unsuspend=a,function(){l.unsuspend=null,clearTimeout(e),clearTimeout(u)}}:null}function jn(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Rn(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var Cn=null;function Rn(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Cn=new Map,t.forEach(Jh,l),Cn=null,jn.call(l))}function Jh(l,t){if(!(t.state.loading&4)){var a=Cn.get(l);if(a)var e=a.get(null);else{a=new Map,Cn.set(l,a);for(var u=l.querySelectorAll("link[data-precedence],style[data-precedence]"),n=0;n"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(d)}catch(O){console.error(O)}}return d(),of.exports=iv(),of.exports}var sv=fv();const ov="modulepreload",mv=function(d){return"/"+d},A0={},Kt=function(O,M,o){let p=Promise.resolve();if(M&&M.length>0){let D=function(U){return Promise.all(U.map(B=>Promise.resolve(B).then(x=>({status:"fulfilled",value:x}),x=>({status:"rejected",reason:x}))))};document.getElementsByTagName("link");const N=document.querySelector("meta[property=csp-nonce]"),b=(N==null?void 0:N.nonce)||(N==null?void 0:N.getAttribute("nonce"));p=D(M.map(U=>{if(U=mv(U),U in A0)return;A0[U]=!0;const B=U.endsWith(".css"),x=B?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${U}"]${x}`))return;const H=document.createElement("link");if(H.rel=B?"stylesheet":ov,B||(H.as="script"),H.crossOrigin="",H.href=U,b&&H.setAttribute("nonce",b),document.head.appendChild(H),B)return new Promise((W,Z)=>{H.addEventListener("load",W),H.addEventListener("error",()=>Z(new Error(`Unable to preload CSS for ${U}`)))})}))}function E(D){const N=new Event("vite:preloadError",{cancelable:!0});if(N.payload=D,window.dispatchEvent(N),!N.defaultPrevented)throw D}return p.then(D=>{for(const N of D||[])N.status==="rejected"&&E(N.reason);return O().catch(E)})},D0=_.createContext({windows:[],openWindow:()=>{},closeWindow:()=>{},bringToFront:()=>{}}),dv=({children:d})=>{const[O,M]=_.useState([]),o=_.useRef(1e4),p=_.useCallback((N,b,U)=>{M(B=>B.find(H=>H.id===N)?B.map(H=>H.id===N?{...H,zIndex:++o.current}:H):[...B,{id:N,title:b,charName:U,zIndex:++o.current}])},[]),E=_.useCallback(N=>{M(b=>b.filter(U=>U.id!==N))},[]),D=_.useCallback(N=>{M(b=>b.map(U=>U.id===N?{...U,zIndex:++o.current}:U))},[]);return r.jsx(D0.Provider,{value:{windows:O,openWindow:p,closeWindow:E,bringToFront:D},children:d})},Zn=()=>_.useContext(D0),gt={west:-102.1,east:102.1,north:102.1,south:-102.1};function zu(d,O,M,o){const p=(d-gt.west)/(gt.east-gt.west)*M,E=(gt.north-O)/(gt.north-gt.south)*o;return{x:p,y:E}}function hv(d,O,M,o,p,E,D){const N=(d-o)/M,b=(O-p)/M,U=gt.west+N/E*(gt.east-gt.west),B=gt.north-b/D*(gt.north-gt.south);return{ew:U,ns:B}}function hf(d,O){const M=d>=0?"N":"S",o=O>=0?"E":"W";return`${Math.abs(d).toFixed(1)}${M}, ${Math.abs(O).toFixed(1)}${o}`}const O0=bu.memo(({players:d,imgW:O,imgH:M,getColor:o,onHover:p,onSelect:E,selectedPlayer:D})=>{const N=_.useMemo(()=>d.filter(b=>b.ew!==void 0&&b.ns!==void 0).map(b=>({...b,pos:zu(b.ew,b.ns,O,M),color:o(b.character_name)})),[d,O,M,o]);return r.jsx("div",{className:"ml-dots-layer",children:N.map(b=>r.jsx("div",{className:`ml-dot ${D===b.character_name?"ml-dot-selected":""}`,style:{left:b.pos.x,top:b.pos.y,backgroundColor:b.color},onMouseEnter:U=>{var x;const B=(x=U.currentTarget.closest(".ml-map-container"))==null?void 0:x.getBoundingClientRect();B&&p(b,U.clientX-B.left,U.clientY-B.top)},onMouseLeave:()=>p(null,0,0),onClick:()=>E(b.character_name)},b.character_name))})});O0.displayName="PlayerDots";const vv="/api";async function ba(d){const O=await fetch(`${vv}${d}`,{credentials:"include"});if(!O.ok)throw new Error(`API ${d}: ${O.status}`);return O.json()}function yv(){return`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/ws/live`}const N0=bu.memo(({imgW:d,imgH:O,getColor:M})=>{const[o,p]=_.useState([]);_.useEffect(()=>{const D=async()=>{try{const b=await ba("/trails/?seconds=600");p(b.trails??[])}catch{}};D();const N=setInterval(D,2e3);return()=>clearInterval(N)},[]);const E=_.useMemo(()=>{const D={};for(const N of o){const{x:b,y:U}=zu(N.ew,N.ns,d,O);D[N.character_name]||(D[N.character_name]=[]),D[N.character_name].push(`${b},${U}`)}return Object.entries(D).filter(([,N])=>N.length>=2).map(([N,b])=>({name:N,points:b.join(" ")}))},[o,d,O]);return r.jsx("svg",{className:"ml-trails-svg",viewBox:`0 0 ${d} ${O}`,preserveAspectRatio:"none",children:E.map(D=>r.jsx("polyline",{points:D.points,stroke:M(D.name),fill:"none",strokeWidth:2,strokeOpacity:.7,strokeLinecap:"round",strokeLinejoin:"round"},D.name))})});N0.displayName="TrailsSVG";const rv=({imgW:d,imgH:O,enabled:M})=>{const o=_.useRef(null),[p,E]=_.useState([]);return _.useEffect(()=>{if(!M)return;(async()=>{try{const N=await ba("/spawns/heatmap?hours=24&limit=50000");E(N.spawn_points??[])}catch{}})()},[M]),_.useEffect(()=>{const D=o.current;if(!D||!M||p.length===0||d===0)return;D.width=d,D.height=O;const N=D.getContext("2d");if(N){N.clearRect(0,0,d,O);for(const b of p){const{x:U,y:B}=zu(b.ew,b.ns,d,O),x=Math.max(5,Math.min(12,5+Math.sqrt(b.intensity*.5))),H=N.createRadialGradient(U,B,0,U,B,x);H.addColorStop(0,`rgba(255, 0, 0, ${Math.min(.9,b.intensity/40)})`),H.addColorStop(.6,`rgba(255, 100, 0, ${Math.min(.4,b.intensity/120)})`),H.addColorStop(1,"rgba(255, 150, 0, 0)"),N.fillStyle=H,N.fillRect(U-x,B-x,x*2,x*2)}}},[p,d,O,M]),M?r.jsx("canvas",{ref:o,className:"ml-heatmap-canvas"}):null},gv=({imgW:d,imgH:O,enabled:M})=>{const[o,p]=_.useState([]);_.useEffect(()=>{if(!M)return;const D=async()=>{try{const b=await ba("/portals");p(b.portals??[])}catch{}};D();const N=setInterval(D,6e4);return()=>clearInterval(N)},[M]);const E=_.useMemo(()=>o.map(D=>({...D,pos:zu(D.coordinates.ew,D.coordinates.ns,d,O)})),[o,d,O]);return!M||E.length===0?null:r.jsx("div",{className:"ml-portals-layer",children:E.map((D,N)=>r.jsx("div",{className:"ml-portal-icon",style:{left:D.pos.x,top:D.pos.y},title:`${D.portal_name} (by ${D.discovered_by})`},N))})},E0=20,M0=.3,Sv=({players:d,getColor:O,onSelectPlayer:M,showHeatmap:o,showPortals:p,selectedPlayer:E})=>{var hl;const D=_.useRef(null),N=_.useRef(null),[b,U]=_.useState({w:0,h:0}),[B,x]=_.useState(null),H=_.useRef(null),W=_.useRef({scale:1,offX:0,offY:0}),Z=_.useRef({dragging:!1,sx:0,sy:0,startOffX:0,startOffY:0}),I=_.useCallback(()=>{if(N.current){const{scale:j,offX:R,offY:Y}=W.current;N.current.style.transform=`translate(${R}px, ${Y}px) scale(${j})`}},[]),Rl=_.useCallback(j=>{const R=j.currentTarget;if(U({w:R.naturalWidth,h:R.naturalHeight}),D.current){const Y=D.current.clientWidth,w=D.current.clientHeight,k=Math.min(Y/R.naturalWidth,w/R.naturalHeight);W.current={scale:k,offX:(Y-R.naturalWidth*k)/2,offY:(w-R.naturalHeight*k)/2},I()}},[I]),kl=_.useCallback(j=>{var Jt;j.preventDefault();const R=(Jt=D.current)==null?void 0:Jt.getBoundingClientRect();if(!R)return;const Y=W.current,w=j.deltaY<0?1.1:.9,k=Math.min(E0,Math.max(M0,Y.scale*w)),dl=k/Y.scale,_l=j.clientX-R.left,za=j.clientY-R.top;W.current={scale:k,offX:_l-(_l-Y.offX)*dl,offY:za-(za-Y.offY)*dl},I()},[I]),Fl=_.useCallback(j=>{if(j.button!==0)return;const R=W.current;Z.current={dragging:!0,sx:j.clientX,sy:j.clientY,startOffX:R.offX,startOffY:R.offY}},[]);_.useEffect(()=>{const j=Y=>{const w=Z.current;if(w.dragging&&(W.current.offX=w.startOffX+(Y.clientX-w.sx),W.current.offY=w.startOffY+(Y.clientY-w.sy),I()),D.current&&b.w>0&&H.current){const k=D.current.getBoundingClientRect(),dl=W.current,_l=hv(Y.clientX-k.left,Y.clientY-k.top,dl.scale,dl.offX,dl.offY,b.w,b.h);H.current.textContent=hf(_l.ns,_l.ew)}},R=()=>{Z.current.dragging=!1};return window.addEventListener("mousemove",j),window.addEventListener("mouseup",R),()=>{window.removeEventListener("mousemove",j),window.removeEventListener("mouseup",R)}},[I,b.w,b.h]);const Al=_.useRef(null);_.useEffect(()=>{if(!E||b.w===0||!D.current||Al.current===E)return;const j=d.find(dl=>dl.character_name===E);if(!j)return;Al.current=E;const{x:R,y:Y}=zu(j.ew,j.ns,b.w,b.h),w=D.current.getBoundingClientRect(),k=3;W.current={scale:Math.min(E0,Math.max(M0,k)),offX:w.width/2-R*k,offY:w.height/2-Y*k},I()},[E,d,b.w,b.h,I]),_.useEffect(()=>{E||(Al.current=null)},[E]);const L=_.useCallback((j,R,Y)=>{x(j?{x:R,y:Y,player:j}:null)},[]);return r.jsxs("div",{className:"ml-map-container",ref:D,onWheel:kl,onMouseDown:Fl,children:[r.jsxs("div",{ref:N,className:"ml-map-group",children:[r.jsx("img",{src:"/dereth.png",alt:"Dereth",className:"ml-map-img",onLoad:Rl,draggable:!1}),b.w>0&&r.jsxs(r.Fragment,{children:[r.jsx(rv,{imgW:b.w,imgH:b.h,enabled:o}),r.jsx(N0,{imgW:b.w,imgH:b.h,getColor:O}),r.jsx(O0,{players:d,imgW:b.w,imgH:b.h,getColor:O,onHover:L,onSelect:M,selectedPlayer:E}),r.jsx(gv,{imgW:b.w,imgH:b.h,enabled:p})]})]}),B&&r.jsxs("div",{className:"ml-tooltip",style:{left:B.x+12,top:B.y-10},children:[r.jsx("strong",{children:B.player.character_name}),r.jsx("br",{}),hf(B.player.ns,B.player.ew),r.jsx("br",{}),B.player.kills_per_hour," kph · ",(hl=B.player.kills)==null?void 0:hl.toLocaleString()," kills"]}),r.jsx("div",{className:"ml-coords",ref:H})]})},x0=bu.memo(({player:d,vitals:O,color:M,onSelect:o})=>{var U,B;const{openWindow:p}=Zn(),E=(d.vt_state||"idle").toLowerCase(),D=E==="combat"||E==="hunt",N=(d.total_rares??0)>0?Math.round((d.total_kills??0)/(d.total_rares??1)).toLocaleString():null,b=d.character_name;return r.jsxs("li",{className:"ml-player-row",style:{borderLeftColor:M},children:[r.jsxs("div",{className:"ml-pr-header",onClick:o,children:[r.jsx("span",{className:"ml-pr-name",children:b}),r.jsx("span",{className:"ml-pr-coords",children:hf(d.ns,d.ew)})]}),r.jsxs("div",{className:"ml-pr-vitals",children:[r.jsx("div",{className:"ml-vital-bar hp",children:r.jsx("div",{className:"ml-vital-fill",style:{width:`${(O==null?void 0:O.health_percentage)??0}%`}})}),r.jsx("div",{className:"ml-vital-bar sta",children:r.jsx("div",{className:"ml-vital-fill",style:{width:`${(O==null?void 0:O.stamina_percentage)??0}%`}})}),r.jsx("div",{className:"ml-vital-bar mana",children:r.jsx("div",{className:"ml-vital-fill",style:{width:`${(O==null?void 0:O.mana_percentage)??0}%`}})})]}),r.jsxs("div",{className:"ml-pr-grid",children:[r.jsxs("span",{className:"ml-gs",title:"Session kills",children:["⚔️ ",((U=d.kills)==null?void 0:U.toLocaleString())??0]}),r.jsxs("span",{className:"ml-gs",title:"Total kills",children:["🏆 ",(d.total_kills??0).toLocaleString()]}),r.jsxs("span",{className:"ml-gs",title:"Kills per hour",children:[d.kills_per_hour??"0"," ",r.jsx("span",{className:"ml-suffix",children:"KPH"})]}),r.jsxs("span",{className:"ml-gs",title:"Rares (session / total)",children:["💎 ",d.session_rares??0," / ",d.total_rares??0]}),r.jsx("span",{className:"ml-gs",title:"Kills per rare",children:N?r.jsxs(r.Fragment,{children:["📊 ",N," ",r.jsx("span",{className:"ml-suffix",children:"KPR"})]}):""}),r.jsx("span",{className:`ml-meta-pill ${D?"active":""}`,children:d.vt_state||"idle"}),r.jsxs("span",{className:"ml-gs",title:"Online time",children:["🕐 ",((B=d.onlinetime)==null?void 0:B.replace(/^00\./,""))??"--"]}),r.jsxs("span",{className:"ml-gs",title:"Deaths",children:["☠️ ",d.deaths??"0"]}),r.jsxs("span",{className:"ml-gs",title:"Prismatic tapers",children:[r.jsx("img",{src:"/prismatic-taper-icon.png",className:"ml-taper-icon",alt:""}),d.prismatic_taper_count??"0"]})]}),r.jsxs("div",{className:"ml-pr-buttons",children:[r.jsx("button",{className:"ml-btn accent",onClick:()=>p(`chat-${b}`,`Chat: ${b}`,b),children:"Chat"}),r.jsx("button",{className:"ml-btn accent",onClick:()=>p(`stats-${b}`,`Stats: ${b}`,b),children:"Stats"}),r.jsx("button",{className:"ml-btn accent",onClick:()=>p(`inv-${b}`,`Inventory: ${b}`,b),children:"Inv"}),r.jsx("button",{className:"ml-btn",onClick:()=>p(`char-${b}`,`Character: ${b}`,b),children:"Char"}),r.jsx("button",{className:"ml-btn",onClick:()=>p(`combat-${b}`,`Combat: ${b}`,b),children:"Combat"}),r.jsx("button",{className:"ml-btn",onClick:()=>p(`radar-${b}`,`Radar: ${b}`,b),children:"Radar"})]})]})});x0.displayName="PlayerRow";const bv=({players:d,vitals:O,getColor:M,onSelect:o})=>r.jsx("ul",{className:"ml-player-list",children:d.map(p=>r.jsx(x0,{player:p,vitals:O.get(p.character_name)??null,color:M(p.character_name),onSelect:()=>o(p.character_name)},p.character_name))}),zv=[{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"}],Tv=({value:d,onChange:O})=>r.jsx("div",{className:"ml-sort-buttons",children:zv.map(M=>r.jsx("button",{className:`ml-sort-btn ${d===M.key?"active":""}`,onClick:()=>O(M.key),children:M.label},M.key))}),Av=()=>{const{openWindow:d}=Zn();return r.jsxs("div",{className:"ml-tool-links",children:[r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>d("issues","Issues Board"),children:"📋 Issues"}),r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>d("vitalsharing","Vital Sharing"),children:"🤝 Vitals"}),r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>d("combatpicker","Combat Stats"),children:"⚔️ Combat"})]})},Ev=({players:d,vitals:O,serverHealth:M,totalRares:o,totalKills:p,getColor:E,onSelectPlayer:D,onViewToggle:N,showHeatmap:b,showPortals:U,onToggleHeatmap:B,onTogglePortals:x,version:H})=>{var j,R;const[W,Z]=_.useState("name"),[I,Rl]=_.useState(""),kl=_.useMemo(()=>d.reduce((Y,w)=>Y+(parseInt(w.kills_per_hour)||0),0),[d]),Fl=((j=M==null?void 0:M.status)==null?void 0:j.toLowerCase())==="online"||((R=M==null?void 0:M.status)==null?void 0:R.toLowerCase())==="up",Al=_.useDeferredValue(d),L=_.useDeferredValue(O),hl=_.useMemo(()=>{let Y=[...Al];switch(I&&(Y=Y.filter(w=>w.character_name.toLowerCase().startsWith(I.toLowerCase()))),W){case"kph":Y.sort((w,k)=>(parseInt(k.kills_per_hour)||0)-(parseInt(w.kills_per_hour)||0));break;case"skills":Y.sort((w,k)=>(k.kills||0)-(w.kills||0));break;case"srares":Y.sort((w,k)=>(k.session_rares??0)-(w.session_rares??0));break;case"tkills":Y.sort((w,k)=>(k.total_kills??0)-(w.total_kills??0));break;case"kpr":Y.sort((w,k)=>{const dl=(w.total_kills??0)/Math.max(1,w.total_rares??1),_l=(k.total_kills??0)/Math.max(1,k.total_rares??1);return dl-_l});break;default:Y.sort((w,k)=>w.character_name.localeCompare(k.character_name))}return Y},[Al,W,I]);return r.jsxs("div",{className:"ml-sidebar",children:[H&&r.jsxs("div",{className:"ml-version",children:["v",H]}),r.jsx("div",{className:"ml-sidebar-header",children:r.jsxs("span",{className:"ml-sidebar-title",children:["Active Mosswart Enjoyers (",d.length,")"]})}),r.jsxs("div",{className:"ml-server-status",children:[r.jsx("span",{className:`ml-status-dot ${Fl?"online":"offline"}`}),r.jsxs("span",{className:"ml-status-text",children:["Coldeve ",Fl?"Online":"Offline"]}),(M==null?void 0:M.player_count)!=null&&r.jsxs("span",{className:"ml-status-detail",children:["👥 ",M.player_count]}),(M==null?void 0:M.latency_ms)!=null&&r.jsxs("span",{className:"ml-status-detail",children:[Math.round(M.latency_ms),"ms"]}),(M==null?void 0:M.uptime_seconds)!=null&&r.jsxs("span",{className:"ml-status-detail",children:["Up: ",Math.floor(M.uptime_seconds/3600),"h"]})]}),r.jsxs("div",{className:"ml-counters",children:[r.jsxs("div",{className:"ml-counter rares",children:[r.jsx("span",{className:"ml-counter-val",children:o}),r.jsx("span",{className:"ml-counter-lbl",children:"Rares"})]}),r.jsxs("div",{className:`ml-counter kph ${kl>5e3?"ultra":""}`,children:[r.jsx("span",{className:"ml-counter-val",children:kl.toLocaleString()}),r.jsx("span",{className:"ml-counter-lbl",children:"Server KPH"})]}),r.jsxs("div",{className:"ml-counter kills",children:[r.jsx("span",{className:"ml-counter-val",children:p.toLocaleString()}),r.jsx("span",{className:"ml-counter-lbl",children:"Kills"})]})]}),r.jsxs("div",{className:"ml-tool-links",children:[r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:N,children:"📊 Dashboard"}),r.jsx("a",{href:"/inventory.html",target:"_blank",className:"ml-tool-link",children:"🔍 Inv Search"}),r.jsx("a",{href:"/suitbuilder.html",target:"_blank",className:"ml-tool-link",children:"🛡️ Suitbuilder"}),r.jsx("a",{href:"/debug.html",target:"_blank",className:"ml-tool-link",children:"🐛 Debug"}),r.jsx("a",{href:"/quest-status.html",target:"_blank",className:"ml-tool-link",children:"📜 Quests"})]}),r.jsx(Av,{}),r.jsxs("div",{className:"ml-toggles",children:[r.jsxs("label",{className:"ml-toggle-label",children:[r.jsx("input",{type:"checkbox",checked:b,onChange:Y=>B(Y.target.checked)}),r.jsx("span",{children:"Spawn Heatmap"})]}),r.jsxs("label",{className:"ml-toggle-label",children:[r.jsx("input",{type:"checkbox",checked:U,onChange:Y=>x(Y.target.checked)}),r.jsx("span",{children:"Portals"})]})]}),r.jsx(Tv,{value:W,onChange:Z}),r.jsx("input",{className:"ml-filter",type:"text",placeholder:"Filter players...",value:I,onChange:Y=>Rl(Y.target.value)}),r.jsx(bv,{players:hl,vitals:L,getColor:E,onSelect:D})]})},Mv=({id:d,title:O,zIndex:M,width:o=700,height:p=340,children:E})=>{const{closeWindow:D,bringToFront:N}=Zn(),b=_.useRef(null),U=_.useRef({dragging:!1,sx:0,sy:0,ox:0,oy:0}),B=_.useRef({x:420,y:10+Math.random()*40}),x=_.useCallback(H=>{var Z;H.preventDefault(),N(d);const W=(Z=b.current)==null?void 0:Z.getBoundingClientRect();W&&(U.current={dragging:!0,sx:H.clientX,sy:H.clientY,ox:W.left,oy:W.top})},[d,N]);return _.useEffect(()=>{const H=Z=>{const I=U.current;!I.dragging||!b.current||(B.current.x=I.ox+(Z.clientX-I.sx),B.current.y=I.oy+(Z.clientY-I.sy),b.current.style.left=`${B.current.x}px`,b.current.style.top=`${B.current.y}px`)},W=()=>{U.current.dragging=!1};return window.addEventListener("mousemove",H),window.addEventListener("mouseup",W),()=>{window.removeEventListener("mousemove",H),window.removeEventListener("mouseup",W)}},[]),r.jsxs("div",{ref:b,className:"ml-window",style:{zIndex:M,width:o,height:p,left:B.current.x,top:B.current.y},onMouseDown:()=>N(d),children:[r.jsxs("div",{className:"ml-window-header",onMouseDown:x,children:[r.jsx("span",{className:"ml-window-title",children:O}),r.jsx("button",{className:"ml-window-close",onClick:()=>D(d),children:"×"})]}),r.jsx("div",{className:"ml-window-content",children:E})]})},_v={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"},pv=({id:d,charName:O,zIndex:M,messages:o,socket:p})=>{const E=_.useRef(null),[D,N]=_.useState("");_.useEffect(()=>{E.current&&(E.current.scrollTop=E.current.scrollHeight)},[o.length]);const b=U=>{U.preventDefault();const B=D.trim();!B||!p||p.readyState!==WebSocket.OPEN||(p.send(JSON.stringify({player_name:O,command:B})),N(""))};return r.jsxs(Mv,{id:d,title:`Chat: ${O}`,zIndex:M,width:600,height:300,children:[r.jsx("div",{className:"ml-chat-messages",ref:E,children:o.map((U,B)=>r.jsx("div",{className:"ml-chat-line",style:{color:_v[U.color??2]??"#ddd"},children:U.text},B))}),r.jsx("form",{className:"ml-chat-form",onSubmit:b,children:r.jsx("input",{className:"ml-chat-input",value:D,onChange:U=>N(U.target.value),placeholder:"Enter chat..."})})]})},Dv=_.lazy(()=>Kt(()=>import("./StatsWindow-DHrHJUlg.js"),__vite__mapDeps([0,1])).then(d=>({default:d.StatsWindow}))),Ov=_.lazy(()=>Kt(()=>import("./CharacterWindow-BNz9pNjP.js"),__vite__mapDeps([2,1])).then(d=>({default:d.CharacterWindow}))),Nv=_.lazy(()=>Kt(()=>import("./InventoryWindow-i56DdW3Q.js"),__vite__mapDeps([3,1])).then(d=>({default:d.InventoryWindow}))),xv=_.lazy(()=>Kt(()=>import("./RadarWindow-DdjDk5uC.js"),__vite__mapDeps([4,1])).then(d=>({default:d.RadarWindow}))),Uv=_.lazy(()=>Kt(()=>import("./CombatStatsWindow-DSQwtgMl.js"),__vite__mapDeps([5,1])).then(d=>({default:d.CombatStatsWindow}))),jv=_.lazy(()=>Kt(()=>import("./CombatPickerWindow-BO4qfgdX.js"),__vite__mapDeps([6,1])).then(d=>({default:d.CombatPickerWindow}))),Cv=_.lazy(()=>Kt(()=>import("./IssuesWindow-C0mPCUzZ.js"),__vite__mapDeps([7,1])).then(d=>({default:d.IssuesWindow}))),Rv=_.lazy(()=>Kt(()=>import("./VitalSharingWindow-By-4xWC-.js"),__vite__mapDeps([8,1])).then(d=>({default:d.VitalSharingWindow}))),U0=bu.memo(({characters:d,chatMessages:O,nearbyObjects:M,socket:o})=>{const{windows:p}=Zn();return r.jsx(_.Suspense,{fallback:null,children:p.map(E=>{var b;const D=E.charName??"";switch(E.id.split("-")[0]){case"chat":return r.jsx(pv,{id:E.id,charName:D,zIndex:E.zIndex,messages:O.get(D)??[],socket:o},E.id);case"stats":return r.jsx(Dv,{id:E.id,charName:D,zIndex:E.zIndex},E.id);case"char":return r.jsx(Ov,{id:E.id,charName:D,zIndex:E.zIndex,vitals:((b=d.get(D))==null?void 0:b.vitals)??void 0},E.id);case"inv":return r.jsx(Nv,{id:E.id,charName:D,zIndex:E.zIndex},E.id);case"radar":return r.jsx(xv,{id:E.id,charName:D,zIndex:E.zIndex,socket:o,radarData:M.get(D)??null},E.id);case"combat":return r.jsx(Uv,{id:E.id,charName:D,zIndex:E.zIndex},E.id);case"combatpicker":return r.jsx(jv,{id:E.id,zIndex:E.zIndex,characters:d},E.id);case"issues":return r.jsx(Cv,{id:E.id,zIndex:E.zIndex},E.id);case"vitalsharing":return r.jsx(Rv,{id:E.id,zIndex:E.zIndex},E.id);default:return null}})})});U0.displayName="WindowRenderer";let Hv=0;const Bv=({recentRares:d})=>{const[O,M]=_.useState([]),[o,p]=_.useState(0),[E,D]=_.useState([]);_.useEffect(()=>{if(d.length>o&&o>0){const b=d.slice(0,d.length-o);for(const U of b){const B=++Hv;M(x=>[...x,{key:B,charName:U.character_name,rareName:U.name,exiting:!1}]),N(),setTimeout(()=>{M(x=>x.map(H=>H.key===B?{...H,exiting:!0}:H)),setTimeout(()=>{M(x=>x.filter(H=>H.key!==B))},500)},6e3)}}p(d.length)},[d.length]);const N=_.useCallback(()=>{const b=Date.now(),U=["#FFD700","#FF4444","#FF8800","#AA44FF","#4488FF"],B=Array.from({length:30},(x,H)=>{const W=Math.PI*2*H/30+(Math.random()-.5)*.5,Z=100+Math.random()*200;return{dx:Math.cos(W)*Z,dy:Math.sin(W)*Z-50,color:U[Math.floor(Math.random()*U.length)]}});D(x=>[...x,{id:b,particles:B}]),setTimeout(()=>D(x=>x.filter(H=>H.id!==b)),2200)},[]);return r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"ml-rare-notifications",children:O.map(b=>r.jsxs("div",{className:`ml-rare-notif ${b.exiting?"exiting":""}`,children:[r.jsx("div",{className:"ml-rare-notif-title",children:"🎆 LEGENDARY RARE! 🎆"}),r.jsx("div",{className:"ml-rare-notif-name",children:b.rareName}),r.jsx("div",{className:"ml-rare-notif-by",children:"found by"}),r.jsx("div",{className:"ml-rare-notif-char",children:b.charName})]},b.key))}),r.jsx("div",{className:"ml-fireworks",children:E.map(b=>r.jsx(bu.Fragment,{children:b.particles.map((U,B)=>r.jsx("div",{className:"ml-firework-particle",style:{left:"50%",top:"30%",backgroundColor:U.color,"--dx":`${U.dx}px`,"--dy":`${U.dy+200}px`}},B))},b.id))})]})},_0=["#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 qv(d){let O=0;for(let M=0;M{let p=d.current.get(o);return p||(p=O.current<_0.length?_0[O.current++]:qv(o),d.current.set(o,p)),p},[])}const Xv=({data:d,onViewToggle:O})=>{const M=Yv(),[o,p]=_.useState(!1),[E,D]=_.useState(!1),[N,b]=_.useState(null),U=_.useMemo(()=>Array.from(d.characters.values()).filter(Z=>Z.telemetry).map(Z=>Z.telemetry),[d.characters]),B=_.useMemo(()=>new Map(Array.from(d.characters.values()).filter(Z=>Z.vitals).map(Z=>[Z.name,Z.vitals])),[d.characters]),[x,H]=_.useState("");_.useEffect(()=>{fetch("/api/api-version",{credentials:"include"}).then(Z=>Z.json()).then(Z=>H(Z.version??"")).catch(()=>{})},[]);const W=_.useCallback(Z=>{b(I=>I===Z?null:Z)},[]);return r.jsx(dv,{children:r.jsxs("div",{className:"ml-layout",children:[r.jsx(Ev,{players:U,vitals:B,serverHealth:d.serverHealth,totalRares:d.totalRares,totalKills:d.totalKills,getColor:M,onSelectPlayer:W,onViewToggle:O,showHeatmap:o,showPortals:E,onToggleHeatmap:p,onTogglePortals:D,version:x}),r.jsx(Sv,{players:U,getColor:M,onSelectPlayer:W,showHeatmap:o,showPortals:E,selectedPlayer:N}),r.jsx(U0,{characters:d.characters,chatMessages:d.chatMessages,nearbyObjects:d.nearbyObjects,socket:d.socketRef.current}),r.jsx(Bv,{recentRares:d.recentRares})]})})};function Gv(d){const O=_.useRef(null),M=_.useRef(0),o=_.useRef(d);o.current=d;const p=_.useCallback(()=>{var D;if(((D=O.current)==null?void 0:D.readyState)===WebSocket.OPEN)return;const E=new WebSocket(yv());O.current=E,E.addEventListener("message",N=>{try{const b=JSON.parse(N.data);o.current(b)}catch{}}),E.addEventListener("close",()=>{O.current=null,M.current=window.setTimeout(p,2e3)}),E.addEventListener("error",()=>{E.close()})},[]);return _.useEffect(()=>(p(),()=>{var E;clearTimeout(M.current),(E=O.current)==null||E.close(),O.current=null}),[p]),O}const Qv=()=>ba("/live"),Zv=()=>ba("/combat-stats"),Vv=()=>ba("/server-health"),Lv=()=>ba("/total-rares"),Kv=()=>ba("/total-kills");function Jv(){const[d,O]=_.useState(new Map),[M,o]=_.useState(null),[p,E]=_.useState(0),[D,N]=_.useState(0),[b,U]=_.useState([]),B=_.useRef(new Map),[x,H]=_.useState(0),[W,Z]=_.useState(new Map),I=_.useRef(d);I.current=d;const Rl=_.useCallback((L,hl)=>{O(j=>{const R=new Map(j),Y=R.get(L)??{name:L,telemetry:null,vitals:null,combat:null,lastUpdate:0};return R.set(L,hl(Y)),R})},[]),kl=_.useCallback(L=>{var hl;if(L.type){if(L.type==="telemetry"){const j=L;Rl(j.character_name,R=>({...R,telemetry:j,lastUpdate:Date.now()}))}else if(L.type==="vitals"){const j=L;Rl(j.character_name,R=>({...R,vitals:j,lastUpdate:Date.now()}))}else if(L.type==="combat_stats"){const j=L;Rl(j.character_name,R=>({...R,combat:j,lastUpdate:Date.now()}))}else if(L.type==="rare"){const j=L;U(R=>[j,...R].slice(0,50))}else if(L.type==="dungeon_map"){const j=L;j.landblock&&(window.__dungeonMapCache||(window.__dungeonMapCache={}),window.__dungeonMapCache[j.landblock]=j)}else if(L.type==="nearby_objects"){const j=L;if(Z(R=>{const Y=new Map(R);return Y.set(j.character_name,j),Y}),j.is_dungeon&&j.landblock&&!((hl=window.__dungeonMapCache)!=null&&hl[j.landblock])){const R=Fl.current;(R==null?void 0:R.readyState)===WebSocket.OPEN&&R.send(JSON.stringify({type:"request_dungeon_map",landblock:j.landblock}))}}else if(L.type==="chat"){const j=L,R=B.current.get(j.character_name)??[];R.push({text:j.text,color:j.color,timestamp:j.timestamp}),R.length>1e3&&R.splice(0,R.length-1e3),B.current.set(j.character_name,R),H(Y=>Y+1)}}},[Rl]),Fl=Gv(kl);_.useEffect(()=>{const L=async()=>{try{const j=await Qv();O(R=>{var w;const Y=new Map(R);for(const k of j.players??[]){const dl=Y.get(k.character_name);Y.set(k.character_name,{name:k.character_name,telemetry:k,vitals:(dl==null?void 0:dl.vitals)??null,combat:(dl==null?void 0:dl.combat)??null,lastUpdate:Date.now()})}for(const k of Y.keys())(w=j.players)!=null&&w.some(dl=>dl.character_name===k)||Y.delete(k);return Y})}catch{}};L();const hl=setInterval(L,5e3);return()=>clearInterval(hl)},[]),_.useEffect(()=>{const L=async()=>{try{const j=await Zv();for(const R of j.stats??[])Rl(R.character_name,Y=>({...Y,combat:{...R,type:"combat_stats"}}))}catch{}};L();const hl=setInterval(L,3e4);return()=>clearInterval(hl)},[Rl]),_.useEffect(()=>{const L=async()=>{try{o(await Vv())}catch{}};L();const hl=setInterval(L,3e4);return()=>clearInterval(hl)},[]),_.useEffect(()=>{const L=async()=>{try{const[j,R]=await Promise.all([Lv(),Kv()]);E(j.all_time??0),N(R.total??0)}catch{}};L();const hl=setInterval(L,3e5);return()=>clearInterval(hl)},[]);const Al=_.useMemo(()=>B.current,[x]);return{characters:d,serverHealth:M,totalRares:p,totalKills:D,recentRares:b,chatMessages:Al,nearbyObjects:W,socketRef:Fl}}const wv=_.lazy(()=>Kt(()=>import("./DashboardView-CI4rL0mQ.js"),__vite__mapDeps([9,1])));function Wv(){const[d,O]=_.useState(()=>localStorage.getItem("v2-view")||"map"),M=Jv(),o=()=>{const p=d==="map"?"dashboard":"map";O(p),localStorage.setItem("v2-view",p)};return d==="map"?r.jsx(Xv,{data:M,onViewToggle:o}):r.jsx(_.Suspense,{fallback:r.jsx("div",{style:{background:"#0d0d0d",color:"#888",padding:40,textAlign:"center"},children:"Loading dashboard..."}),children:r.jsx(wv,{data:M,onViewToggle:o})})}sv.createRoot(document.getElementById("root")).render(r.jsx(_.StrictMode,{children:r.jsx(Wv,{})}));"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").catch(()=>{});export{Mv as D,bu as R,ba as a,r as j,_ as r,Zn as u}; diff --git a/static/assets/react-DlyoauG8.js b/static/assets/react-DlyoauG8.js new file mode 100644 index 00000000..4aeb2ea7 --- /dev/null +++ b/static/assets/react-DlyoauG8.js @@ -0,0 +1,17 @@ +var ue=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function oe(p){return p&&p.__esModule&&Object.prototype.hasOwnProperty.call(p,"default")?p.default:p}var I={exports:{}},n={};/** + * @license React + * react.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 K;function te(){if(K)return n;K=1;var p=Symbol.for("react.transitional.element"),R=Symbol.for("react.portal"),g=Symbol.for("react.fragment"),y=Symbol.for("react.strict_mode"),P=Symbol.for("react.profiler"),w=Symbol.for("react.consumer"),m=Symbol.for("react.context"),T=Symbol.for("react.forward_ref"),i=Symbol.for("react.suspense"),t=Symbol.for("react.memo"),c=Symbol.for("react.lazy"),v=Symbol.for("react.activity"),C=Symbol.iterator;function A(e){return e===null||typeof e!="object"?null:(e=C&&e[C]||e["@@iterator"],typeof e=="function"?e:null)}var U={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Y=Object.assign,b={};function O(e,r,o){this.props=e,this.context=r,this.refs=b,this.updater=o||U}O.prototype.isReactComponent={},O.prototype.setState=function(e,r){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,r,"setState")},O.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function k(){}k.prototype=O.prototype;function H(e,r,o){this.props=e,this.context=r,this.refs=b,this.updater=o||U}var N=H.prototype=new k;N.constructor=H,Y(N,O.prototype),N.isPureReactComponent=!0;var q=Array.isArray;function D(){}var a={H:null,A:null,T:null,S:null},x=Object.prototype.hasOwnProperty;function j(e,r,o){var u=o.ref;return{$$typeof:p,type:e,key:r,ref:u!==void 0?u:null,props:o}}function Q(e,r){return j(e.type,r,e.props)}function L(e){return typeof e=="object"&&e!==null&&e.$$typeof===p}function Z(e){var r={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(o){return r[o]})}var G=/\/+/g;function M(e,r){return typeof e=="object"&&e!==null&&e.key!=null?Z(""+e.key):r.toString(36)}function J(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch(typeof e.status=="string"?e.then(D,D):(e.status="pending",e.then(function(r){e.status==="pending"&&(e.status="fulfilled",e.value=r)},function(r){e.status==="pending"&&(e.status="rejected",e.reason=r)})),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}function S(e,r,o,u,s){var f=typeof e;(f==="undefined"||f==="boolean")&&(e=null);var l=!1;if(e===null)l=!0;else switch(f){case"bigint":case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case p:case R:l=!0;break;case c:return l=e._init,S(l(e._payload),r,o,u,s)}}if(l)return s=s(e),l=u===""?"."+M(e,0):u,q(s)?(o="",l!=null&&(o=l.replace(G,"$&/")+"/"),S(s,r,o,"",function(ee){return ee})):s!=null&&(L(s)&&(s=Q(s,o+(s.key==null||e&&e.key===s.key?"":(""+s.key).replace(G,"$&/")+"/")+l)),r.push(s)),1;l=0;var E=u===""?".":u+":";if(q(e))for(var d=0;d"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(p)}catch(R){console.error(R)}}return p(),$.exports=ne(),$.exports}export{ie as a,ue as c,oe as g,re as r}; diff --git a/static/classic/index.html b/static/classic/index.html new file mode 100644 index 00000000..3cde6e95 --- /dev/null +++ b/static/classic/index.html @@ -0,0 +1,161 @@ + + + + + + Dereth Tracker + + + + + + +
+ + + + + +
+ + +
+ + +
+
+ Dereth map + + +
+
+
+
+
+
+ + + + + diff --git a/static/classic/script.js b/static/classic/script.js new file mode 100644 index 00000000..f7518b6f --- /dev/null +++ b/static/classic/script.js @@ -0,0 +1,4940 @@ +/* + * script.js - Frontend logic for Dereth Tracker Single-Page Application. + * Handles WebSocket communication, UI rendering of player lists, map display, + * and user interactions (filtering, sorting, chat, stats windows). + */ +/** + * script.js - Frontend controller for Dereth Tracker SPA + * + * Responsibilities: + * - Establish WebSocket connections to receive live telemetry and chat data + * - Fetch and render live player lists, trails, and map dots + * - Handle user interactions: filtering, sorting, selecting players + * - Manage dynamic UI components: chat windows, stats panels, tooltips + * - Provide smooth pan/zoom of map overlay using CSS transforms + * + * Structure: + * 1. DOM references and constant definitions + * 2. Color palette and assignment logic + * 3. Sorting and filtering setup + * 4. Utility functions (coordinate mapping, color hashing) + * 5. UI window creation (stats, chat) + * 6. Rendering functions for list and map + * 7. Event listeners for map interactions and WebSocket messages + */ +/* ---------- Debug configuration ---------------------------------- */ +const DEBUG = false; +function debugLog(...args) { if (DEBUG) console.log(...args); } + +function handleError(context, error, showUI = false) { + console.error(`[${context}]`, error); + if (showUI) { + const msg = document.createElement('div'); + msg.className = 'error-toast'; + msg.textContent = `${context}: ${error.message || 'Unknown error'}`; + document.body.appendChild(msg); + setTimeout(() => msg.remove(), GLOW_DURATION_MS); + } +} + +/* ---------- DOM references --------------------------------------- */ +const wrap = document.getElementById('mapContainer'); +const group = document.getElementById('mapGroup'); +const img = document.getElementById('map'); +const dots = document.getElementById('dots'); +const trailsContainer = document.getElementById('trails'); +const list = document.getElementById('playerList'); +const btnContainer = document.getElementById('sortButtons'); +const tooltip = document.getElementById('tooltip'); +const coordinates = document.getElementById('coordinates'); + +/* ---------- Element Pooling System for Performance ------------- */ +// Pools for reusing DOM elements to eliminate recreation overhead +const elementPools = { + dots: [], + listItems: [], + activeDots: new Set(), + activeListItems: new Set() +}; + +// Performance tracking +let performanceStats = { + // Lifetime totals + dotsCreated: 0, + dotsReused: 0, + listItemsCreated: 0, + listItemsReused: 0, + // Per-render stats (reset each render) + renderDotsCreated: 0, + renderDotsReused: 0, + renderListItemsCreated: 0, + renderListItemsReused: 0, + lastRenderTime: 0, + renderCount: 0 +}; + +function createNewDot() { + const dot = document.createElement('div'); + dot.className = 'dot'; + performanceStats.dotsCreated++; + performanceStats.renderDotsCreated++; + + // Add event listeners once when creating + dot.addEventListener('mouseenter', e => showTooltip(e, dot.playerData)); + dot.addEventListener('mousemove', e => showTooltip(e, dot.playerData)); + dot.addEventListener('mouseleave', hideTooltip); + dot.addEventListener('click', () => { + if (dot.playerData) { + const { x, y } = worldToPx(dot.playerData.ew, dot.playerData.ns); + selectPlayer(dot.playerData, x, y); + } + }); + + return dot; +} + +function createNewListItem() { + const li = document.createElement('li'); + li.className = 'player-item'; + performanceStats.listItemsCreated++; + performanceStats.renderListItemsCreated++; + + // Create the grid content container + const gridContent = document.createElement('div'); + gridContent.className = 'grid-content'; + li.appendChild(gridContent); + + // Create buttons once and keep them (no individual event listeners needed) + const buttonsContainer = document.createElement('div'); + buttonsContainer.className = 'buttons-container'; + + const chatBtn = document.createElement('button'); + chatBtn.className = 'chat-btn'; + chatBtn.textContent = 'Chat'; + chatBtn.addEventListener('click', (e) => { + debugLog('🔥 CHAT BUTTON CLICKED!', e.target, e.currentTarget); + e.stopPropagation(); + // Try button's own playerData first, fallback to DOM traversal + const playerData = e.currentTarget.playerData || e.target.closest('li.player-item')?.playerData; + debugLog('🔥 Player data found:', playerData); + if (playerData) { + debugLog('🔥 Opening chat for:', playerData.character_name); + showChatWindow(playerData.character_name); + } else { + debugLog('🔥 No player data found!'); + } + }); + + const statsBtn = document.createElement('button'); + statsBtn.className = 'stats-btn'; + statsBtn.textContent = 'Stats'; + statsBtn.addEventListener('click', (e) => { + debugLog('📊 STATS BUTTON CLICKED!', e.target, e.currentTarget); + e.stopPropagation(); + // Try button's own playerData first, fallback to DOM traversal + const playerData = e.currentTarget.playerData || e.target.closest('li.player-item')?.playerData; + debugLog('📊 Player data found:', playerData); + if (playerData) { + debugLog('📊 Opening stats for:', playerData.character_name); + showStatsWindow(playerData.character_name); + } else { + debugLog('📊 No player data found!'); + } + }); + + const inventoryBtn = document.createElement('button'); + inventoryBtn.className = 'inventory-btn'; + inventoryBtn.textContent = 'Inventory'; + inventoryBtn.addEventListener('click', (e) => { + debugLog('🎒 INVENTORY BUTTON CLICKED!', e.target, e.currentTarget); + e.stopPropagation(); + // Try button's own playerData first, fallback to DOM traversal + const playerData = e.currentTarget.playerData || e.target.closest('li.player-item')?.playerData; + debugLog('🎒 Player data found:', playerData); + if (playerData) { + debugLog('🎒 Opening inventory for:', playerData.character_name); + showInventoryWindow(playerData.character_name); + } else { + debugLog('🎒 No player data found!'); + } + }); + + const charBtn = document.createElement('button'); + charBtn.className = 'char-btn'; + charBtn.textContent = 'Char'; + charBtn.addEventListener('click', (e) => { + e.stopPropagation(); + const playerData = e.currentTarget.playerData || e.target.closest('li.player-item')?.playerData; + if (playerData) { + showCharacterWindow(playerData.character_name); + } + }); + + const radarBtn = document.createElement('button'); + radarBtn.className = 'radar-btn'; + radarBtn.textContent = 'Radar'; + radarBtn.addEventListener('click', (e) => { + e.stopPropagation(); + const playerData = e.currentTarget.playerData || e.target.closest('li.player-item')?.playerData; + if (playerData) { + showRadarWindow(playerData.character_name); + } + }); + + buttonsContainer.appendChild(chatBtn); + buttonsContainer.appendChild(statsBtn); + buttonsContainer.appendChild(inventoryBtn); + buttonsContainer.appendChild(charBtn); + buttonsContainer.appendChild(radarBtn); + li.appendChild(buttonsContainer); + + // Store references for easy access + li.gridContent = gridContent; + li.chatBtn = chatBtn; + li.statsBtn = statsBtn; + li.inventoryBtn = inventoryBtn; + li.charBtn = charBtn; + li.radarBtn = radarBtn; + + return li; +} + +function returnToPool() { + // Return unused dots to pool + elementPools.activeDots.forEach(dot => { + if (!dot.parentNode) { + elementPools.dots.push(dot); + elementPools.activeDots.delete(dot); + } + }); + + // Return unused list items to pool + elementPools.activeListItems.forEach(li => { + if (!li.parentNode) { + elementPools.listItems.push(li); + elementPools.activeListItems.delete(li); + } + }); +} + +/* ---------- Event Delegation System ---------------------------- */ +// Single event delegation handler for all player list interactions +function setupEventDelegation() { + list.addEventListener('click', e => { + const li = e.target.closest('li.player-item'); + if (!li || !li.playerData) return; + + const player = li.playerData; + const { x, y } = worldToPx(player.ew, player.ns); + + // Handle player selection (clicking anywhere else on the item, not on buttons) + // Button clicks are now handled by direct event listeners + if (!e.target.closest('button')) { + selectPlayer(player, x, y); + } + }); +} + +// Initialize event delegation when DOM is ready +document.addEventListener('DOMContentLoaded', setupEventDelegation); + +// Global drag system to prevent event listener accumulation +let currentDragWindow = null; +let dragStartX = 0, dragStartY = 0, dragStartLeft = 0, dragStartTop = 0; + +function makeDraggable(win, header) { + if (!window.__chatZ) window.__chatZ = 10000; + header.style.cursor = 'move'; + + const bringToFront = () => { + window.__chatZ += 1; + win.style.zIndex = window.__chatZ; + }; + + header.addEventListener('mousedown', e => { + if (e.target.closest('button')) return; + e.preventDefault(); + currentDragWindow = win; + bringToFront(); + dragStartX = e.clientX; + dragStartY = e.clientY; + dragStartLeft = win.offsetLeft; + dragStartTop = win.offsetTop; + document.body.classList.add('noselect'); + }); + + // Touch support + header.addEventListener('touchstart', e => { + if (e.touches.length !== 1 || e.target.closest('button')) return; + currentDragWindow = win; + bringToFront(); + const t = e.touches[0]; + dragStartX = t.clientX; + dragStartY = t.clientY; + dragStartLeft = win.offsetLeft; + dragStartTop = win.offsetTop; + }); +} + +// Global mouse handlers (only added once) +window.addEventListener('mousemove', e => { + if (!currentDragWindow) return; + const dx = e.clientX - dragStartX; + const dy = e.clientY - dragStartY; + currentDragWindow.style.left = `${dragStartLeft + dx}px`; + currentDragWindow.style.top = `${dragStartTop + dy}px`; +}); + +window.addEventListener('mouseup', () => { + if (currentDragWindow) { + currentDragWindow = null; + document.body.classList.remove('noselect'); + } +}); + +window.addEventListener('touchmove', e => { + if (!currentDragWindow || e.touches.length !== 1) return; + const t = e.touches[0]; + const dx = t.clientX - dragStartX; + const dy = t.clientY - dragStartY; + currentDragWindow.style.left = `${dragStartLeft + dx}px`; + currentDragWindow.style.top = `${dragStartTop + dy}px`; +}); + +window.addEventListener('touchend', () => { + currentDragWindow = null; +}); +// Filter input for player names (starts-with filter) +let currentFilter = ''; +const filterInput = document.getElementById('playerFilter'); +if (filterInput) { + filterInput.addEventListener('input', e => { + currentFilter = e.target.value.toLowerCase().trim(); + renderList(); + }); +} + +// WebSocket for chat and commands +let socket; +// Keep track of open chat windows: character_name -> DOM element +const chatWindows = {}; +// Keep track of open stats windows: character_name -> DOM element +const statsWindows = {}; +// Keep track of open inventory windows: character_name -> DOM element +const inventoryWindows = {}; +const equipmentCantripStates = {}; + +/** + * ---------- Application Constants ----------------------------- + * Defines key parameters for map rendering, data polling, and UI limits. + * + * MAX_Z: Maximum altitude difference considered (filter out outliers by Z) + * FOCUS_ZOOM: Zoom level when focusing on a selected character + * POLL_MS: Millisecond interval to fetch live player data and trails + * MAP_BOUNDS: World coordinate bounds for the game map (used for projection) + * API_BASE: Prefix for AJAX endpoints (set when behind a proxy) + * MAX_CHAT_LINES: Max number of lines per chat window to cap memory usage + * CHAT_COLOR_MAP: Color mapping for in-game chat channels by channel code + */ +/* ---------- constants ------------------------------------------- */ +const MAX_Z = 20; +const FOCUS_ZOOM = 3; // zoom level when you click a name +const POLL_MS = 2000; +const POLL_RARES_MS = 300000; // 5 minutes +const POLL_KILLS_MS = 300000; // 5 minutes +const POLL_HEALTH_MS = 30000; // 30 seconds +const NOTIFICATION_DURATION_MS = 6000; // Rare notification display time +const GLOW_DURATION_MS = 5000; // Player glow after rare find +const MAX_HEATMAP_POINTS = 50000; +const HEATMAP_HOURS = 24; +// UtilityBelt's more accurate coordinate bounds +const MAP_BOUNDS = { + west: -102.1, + east: 102.1, + north: 102.1, + south: -102.1 +}; + +// Base path for tracker API endpoints; prefix API calls with '/api' when served behind a proxy +// If serving APIs at root, leave empty +const API_BASE = ''; +// Maximum number of lines to retain in each chat window scrollback +const MAX_CHAT_LINES = 1000; +// Map numeric chat color codes to CSS hex colors +const CHAT_COLOR_MAP = { + 0: '#00FF00', // Broadcast + 2: '#FFFFFF', // Speech + 3: '#FFD700', // Tell + 4: '#CCCC00', // OutgoingTell + 5: '#FF00FF', // System + 6: '#FF0000', // Combat + 7: '#00CCFF', // Magic + 8: '#DDDDDD', // Channel + 9: '#FF9999', // ChannelSend + 10: '#FFFF33', // Social + 11: '#CCFF33', // SocialSend + 12: '#FFFFFF', // Emote + 13: '#00FFFF', // Advancement + 14: '#66CCFF', // Abuse + 15: '#FF0000', // Help + 16: '#33FF00', // Appraisal + 17: '#0099FF', // Spellcasting + 18: '#FF6600', // Allegiance + 19: '#CC66FF', // Fellowship + 20: '#00FF00', // WorldBroadcast + 21: '#FF0000', // CombatEnemy + 22: '#FF33CC', // CombatSelf + 23: '#00CC00', // Recall + 24: '#00FF00', // Craft + 25: '#00FF66', // Salvaging + 27: '#FFFFFF', // General + 28: '#33FF33', // Trade + 29: '#CCCCCC', // LFG + 30: '#CC00CC', // Roleplay + 31: '#FFFF00' // AdminTell +}; + +/* ---------- Heat Map Globals ---------- */ +let heatmapCanvas, heatmapCtx; +let heatmapEnabled = false; +let heatmapData = null; +let heatTimeout = null; +const HEAT_PADDING = 50; // px beyond viewport to still draw +const HEAT_THROTTLE = 16; // ~60 fps + +/* ---------- Portal Map Globals ---------- */ +let portalEnabled = false; +let portalData = null; +let portalContainer = null; + +/** + * ---------- Player Color Assignment ---------------------------- + * Uses a predefined accessible color palette for player dots to ensure + * high contrast and colorblind-friendly display. Once the palette + * is exhausted, falls back to a deterministic hash-to-hue function. + */ +/* ---------- player/dot color assignment ------------------------- */ +// A base palette of distinct, color-blind-friendly colors +const PALETTE = [ + // Original colorblind-friendly base palette + '#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', + '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf', + + // Extended high-contrast colors + '#ff4444', '#44ff44', '#4444ff', '#ffff44', '#ff44ff', + '#44ffff', '#ff8844', '#88ff44', '#4488ff', '#ff4488', + + // Darker variants + '#cc3333', '#33cc33', '#3333cc', '#cccc33', '#cc33cc', + '#33cccc', '#cc6633', '#66cc33', '#3366cc', '#cc3366', + + // Brighter variants + '#ff6666', '#66ff66', '#6666ff', '#ffff66', '#ff66ff', + '#66ffff', '#ffaa66', '#aaff66', '#66aaff', '#ff66aa', + + // Additional distinct colors + '#990099', '#009900', '#000099', '#990000', '#009999', + '#999900', '#aa5500', '#55aa00', '#0055aa', '#aa0055', + + // Light pastels for contrast + '#ffaaaa', '#aaffaa', '#aaaaff', '#ffffaa', '#ffaaff', + '#aaffff', '#ffccaa', '#ccffaa', '#aaccff', '#ffaacc' +]; +// Map from character name to assigned color +const colorMap = {}; +// Next index to pick from PALETTE +let nextPaletteIndex = 0; +/** + * Assigns or returns a consistent color for a given name. + * Uses a fixed palette first, then falls back to hue hashing. + */ +function getColorFor(name) { + if (colorMap[name]) { + return colorMap[name]; + } + let color; + if (nextPaletteIndex < PALETTE.length) { + color = PALETTE[nextPaletteIndex++]; + } else { + // Fallback: hash to HSL hue + color = hue(name); + } + colorMap[name] = color; + return color; +} + +/* + * ---------- Sort Configuration ------------------------------- + * Defines available sort criteria for the active player list: + * - name: alphabetical ascending + * - kph: kills per hour descending + * - kills: total kills descending + * - rares: rare events found during current session descending + * Each option includes a label for UI display and a comparator function. + */ +/* ---------- sort configuration ---------------------------------- */ +const sortOptions = [ + { + value: "name", + label: "Name", + comparator: (a, b) => a.character_name.localeCompare(b.character_name) + }, + { + value: "kph", + label: "KPH", + comparator: (a, b) => b.kills_per_hour - a.kills_per_hour + }, + { + value: "kills", + label: "S.Kills", + comparator: (a, b) => b.kills - a.kills + }, + { + value: "rares", + label: "S.Rares", + comparator: (a, b) => (b.session_rares || 0) - (a.session_rares || 0) + }, + { + value: "total_kills", + label: "T.Kills", + comparator: (a, b) => (b.total_kills || 0) - (a.total_kills || 0) + }, + { + value: "kpr", + label: "KPR", + comparator: (a, b) => { + const aKpr = (a.total_rares || 0) > 0 ? (a.total_kills || 0) / (a.total_rares || 0) : Infinity; + const bKpr = (b.total_rares || 0) > 0 ? (b.total_kills || 0) / (b.total_rares || 0) : Infinity; + return aKpr - bKpr; // Ascending - lower KPR is better (more efficient rare finding) + } + } +]; + +let currentSort = sortOptions[0]; +let currentPlayers = []; + +/* ---------- generate segmented buttons -------------------------- */ +sortOptions.forEach(opt => { + const btn = document.createElement('div'); + btn.className = 'btn'; + btn.textContent = opt.label; + btn.dataset.value = opt.value; + if (opt.value === currentSort.value) btn.classList.add('active'); + + btn.addEventListener('click', () => { + btnContainer.querySelectorAll('.btn') + .forEach(b => b.classList.remove('active')); + btn.classList.add('active'); + currentSort = opt; + renderList(); + }); + + btnContainer.appendChild(btn); +}); + +/* ---------- map & state variables ------------------------------- */ +let imgW = 0, imgH = 0; +let scale = 1, offX = 0, offY = 0, minScale = 1; +let dragging = false, sx = 0, sy = 0; +let selected = ""; +const pollIntervals = []; + +/* ---------- utility functions ----------------------------------- */ +const hue = name => { + let h = 0; + for (let c of name) h = c.charCodeAt(0) + ((h << 5) - h); + return `hsl(${Math.abs(h) % 360},72%,50%)`; +}; + +const loc = (ns, ew) => + `${Math.abs(ns).toFixed(1)}${ns>=0?"N":"S"} ` + + `${Math.abs(ew).toFixed(1)}${ew>=0?"E":"W"}`; + +function worldToPx(ew, ns) { + const x = ((ew - MAP_BOUNDS.west) + / (MAP_BOUNDS.east - MAP_BOUNDS.west)) * imgW; + const y = ((MAP_BOUNDS.north - ns) + / (MAP_BOUNDS.north - MAP_BOUNDS.south)) * imgH; + return { x, y }; +} + +function pxToWorld(x, y) { + // Convert screen coordinates to map image coordinates + const mapX = (x - offX) / scale; + const mapY = (y - offY) / scale; + + // Convert map image coordinates to world coordinates + const ew = MAP_BOUNDS.west + (mapX / imgW) * (MAP_BOUNDS.east - MAP_BOUNDS.west); + const ns = MAP_BOUNDS.north - (mapY / imgH) * (MAP_BOUNDS.north - MAP_BOUNDS.south); + + return { ew, ns }; +} + +/* ---------- Heat Map Functions ---------- */ + +function initHeatMap() { + heatmapCanvas = document.getElementById('heatmapCanvas'); + if (!heatmapCanvas) { + console.error('Heat map canvas not found'); + return; + } + + heatmapCtx = heatmapCanvas.getContext('2d'); + + const toggle = document.getElementById('heatmapToggle'); + if (toggle) { + toggle.addEventListener('change', e => { + heatmapEnabled = e.target.checked; + if (heatmapEnabled) { + fetchHeatmapData(); + } else { + clearHeatmap(); + } + }); + } + + window.addEventListener('resize', debounce(() => { + if (heatmapEnabled && heatmapData) { + renderHeatmap(); + } + }, 250)); +} + +async function fetchHeatmapData() { + try { + const response = await fetch(`${API_BASE}/spawns/heatmap?hours=${HEATMAP_HOURS}&limit=${MAX_HEATMAP_POINTS}`); + if (!response.ok) { + throw new Error(`Heat map API error: ${response.status}`); + } + + const data = await response.json(); + heatmapData = data.spawn_points; // [{ew, ns, intensity}] + debugLog(`Loaded ${heatmapData.length} heat map points from last ${data.hours_window} hours`); + renderHeatmap(); + } catch (err) { + handleError('Heatmap', err); + } +} + +function renderHeatmap() { + if (!heatmapEnabled || !heatmapData || !heatmapCanvas || !imgW || !imgH) { + return; + } + + // Set canvas size to match map dimensions (1:1 DPI) + heatmapCanvas.width = imgW; + heatmapCanvas.height = imgH; + heatmapCtx.clearRect(0, 0, imgW, imgH); + + // Current visible map rect in px for viewport culling + const vw = wrap.clientWidth; + const vh = wrap.clientHeight; + const viewL = -offX / scale; + const viewT = -offY / scale; + const viewR = viewL + vw / scale; + const viewB = viewT + vh / scale; + + // Render heat map points with viewport culling + for (const point of heatmapData) { + const { x, y } = worldToPx(point.ew, point.ns); + + // Skip points outside visible area (with padding for smooth edges) + if (x < viewL - HEAT_PADDING || x > viewR + HEAT_PADDING || + y < viewT - HEAT_PADDING || y > viewB + HEAT_PADDING) { + continue; + } + + // Smaller, more precise spots to clearly show individual spawn locations + const radius = Math.max(5, Math.min(12, 5 + Math.sqrt(point.intensity * 0.5))); + + // Sharp gradient with distinct boundaries between spawn points + const gradient = heatmapCtx.createRadialGradient(x, y, 0, x, y, radius); + gradient.addColorStop(0, `rgba(255, 0, 0, ${Math.min(0.9, point.intensity / 40)})`); // Bright red center + gradient.addColorStop(0.6, `rgba(255, 100, 0, ${Math.min(0.4, point.intensity / 120)})`); // Quick fade to orange + gradient.addColorStop(1, 'rgba(255, 150, 0, 0)'); + + heatmapCtx.fillStyle = gradient; + heatmapCtx.fillRect(x - radius, y - radius, radius * 2, radius * 2); + } +} + +function clearHeatmap() { + if (heatmapCtx && heatmapCanvas) { + heatmapCtx.clearRect(0, 0, heatmapCanvas.width, heatmapCanvas.height); + } +} + +/* ---------- Portal Map Functions ---------- */ +function initPortalMap() { + portalContainer = document.getElementById('portals'); + if (!portalContainer) { + console.error('Portal container not found'); + return; + } + + const toggle = document.getElementById('portalToggle'); + if (toggle) { + toggle.addEventListener('change', e => { + portalEnabled = e.target.checked; + if (portalEnabled) { + fetchPortalData(); + } else { + clearPortals(); + } + }); + } +} + +async function fetchPortalData() { + try { + const response = await fetch(`${API_BASE}/portals`); + if (!response.ok) { + throw new Error(`Portal API error: ${response.status}`); + } + + const data = await response.json(); + portalData = data.portals; // [{portal_name, coordinates: {ns, ew, z}, discovered_by, discovered_at}] + debugLog(`Loaded ${portalData.length} portals from last hour`); + renderPortals(); + } catch (err) { + handleError('Portals', err); + } +} + +function parseCoordinate(coord) { + // Handle both formats: + // String format: "42.3N", "15.7S", "33.7E", "28.2W" + // Numeric format: "-96.9330958" (already signed) + + // Check if it's already a number + if (typeof coord === 'number') { + return coord; + } + + // Check if it's a numeric string + const numericValue = parseFloat(coord); + if (!isNaN(numericValue) && coord.match(/^-?\d+\.?\d*$/)) { + return numericValue; + } + + // Parse string format like "42.3N" + const match = coord.match(/^([0-9.]+)([NSEW])$/); + if (!match) return 0; + + const value = parseFloat(match[1]); + const direction = match[2]; + + if (direction === 'S' || direction === 'W') { + return -value; + } + return value; +} + +function renderPortals() { + if (!portalEnabled || !portalData || !portalContainer || !imgW || !imgH) { + return; + } + + // Clear existing portals + clearPortals(); + + for (const portal of portalData) { + // Extract coordinates from new API format + const ns = portal.coordinates.ns; + const ew = portal.coordinates.ew; + + // Convert to pixel coordinates + const { x, y } = worldToPx(ew, ns); + + // Create portal icon + const icon = document.createElement('div'); + icon.className = 'portal-icon'; + icon.style.left = `${x}px`; + icon.style.top = `${y}px`; + icon.title = `${portal.portal_name} (discovered by ${portal.discovered_by})`; + + portalContainer.appendChild(icon); + } + + debugLog(`Rendered ${portalData.length} portal icons`); +} + +function clearPortals() { + if (portalContainer) { + portalContainer.innerHTML = ''; + } +} + +function debounce(fn, ms) { + let timeout; + return (...args) => { + clearTimeout(timeout); + timeout = setTimeout(() => fn(...args), ms); + }; +} + +/** + * Create or show a draggable window. Returns { win, content, isNew }. + * If window already exists, brings it to front and returns isNew: false. + */ +function createWindow(id, title, className, options = {}) { + const { onClose } = options; + + // Check if window already exists - bring to front + const existing = document.getElementById(id); + if (existing) { + existing.style.display = 'flex'; + if (!window.__chatZ) window.__chatZ = 10000; + window.__chatZ += 1; + existing.style.zIndex = window.__chatZ; + return { win: existing, content: existing.querySelector('.window-content'), isNew: false }; + } + + // Create new window + if (!window.__chatZ) window.__chatZ = 10000; + window.__chatZ += 1; + + const win = document.createElement('div'); + win.id = id; + win.className = className; + win.style.display = 'flex'; + win.style.zIndex = window.__chatZ; + + const header = document.createElement('div'); + header.className = 'chat-header'; + + const titleSpan = document.createElement('span'); + titleSpan.textContent = title; + header.appendChild(titleSpan); + + const closeBtn = document.createElement('button'); + closeBtn.className = 'chat-close-btn'; + closeBtn.textContent = '\u00D7'; + closeBtn.addEventListener('click', () => { + win.style.display = 'none'; + if (onClose) onClose(); + }); + header.appendChild(closeBtn); + + const content = document.createElement('div'); + content.className = 'window-content'; + + win.appendChild(header); + win.appendChild(content); + document.body.appendChild(win); + makeDraggable(win, header); + + return { win, content, isNew: true }; +} + +// Show or create a stats window for a character +function showStatsWindow(name) { + debugLog('showStatsWindow called for:', name); + const windowId = `statsWindow-${name}`; + + const { win, content, isNew } = createWindow( + windowId, `Stats: ${name}`, 'stats-window' + ); + + if (!isNew) { + debugLog('Existing stats window found, showing it'); + return; + } + + win.dataset.character = name; + statsWindows[name] = win; + + // Time period controls + const controls = document.createElement('div'); + controls.className = 'stats-controls'; + const timeRanges = [ + { label: '1H', value: 'now-1h' }, + { label: '6H', value: 'now-6h' }, + { label: '24H', value: 'now-24h' }, + { label: '7D', value: 'now-7d' } + ]; + + // Stats content container (iframes grid) + const statsContent = document.createElement('div'); + statsContent.className = 'chat-messages'; + statsContent.textContent = 'Loading stats...'; + + timeRanges.forEach(range => { + const btn = document.createElement('button'); + btn.className = 'time-range-btn'; + btn.textContent = range.label; + if (range.value === 'now-24h') btn.classList.add('active'); + btn.addEventListener('click', () => { + controls.querySelectorAll('.time-range-btn').forEach(b => b.classList.remove('active')); + btn.classList.add('active'); + updateStatsTimeRange(statsContent, name, range.value); + }); + controls.appendChild(btn); + }); + + content.appendChild(controls); + content.appendChild(statsContent); + + debugLog('Stats window created for:', name); + // Load initial stats with default 24h range + updateStatsTimeRange(statsContent, name, 'now-24h'); +} + +function updateStatsTimeRange(content, name, timeRange) { + content.innerHTML = ''; + const panels = [ + { title: 'Kills per Hour', id: 1 }, + { title: 'Memory (MB)', id: 2 }, + { title: 'CPU (%)', id: 3 }, + { title: 'Mem Handles', id: 4 } + ]; + panels.forEach(p => { + const iframe = document.createElement('iframe'); + iframe.src = + `/grafana/d-solo/dereth-tracker/dereth-tracker-dashboard` + + `?panelId=${p.id}` + + `&var-character=${encodeURIComponent(name)}` + + `&from=${timeRange}` + + `&to=now` + + `&theme=light`; + iframe.setAttribute('title', p.title); + iframe.width = '350'; + iframe.height = '200'; + iframe.frameBorder = '0'; + iframe.allowFullscreen = true; + content.appendChild(iframe); + }); +} + +// Show or create an inventory window for a character +/** + * Normalize raw plugin MyWorldObject format to flat fields expected by createInventorySlot. + * Plugin sends PascalCase computed properties: { Id, Icon, Name, Value, Burden, ArmorLevel, Material, ... } + * Also has raw dictionaries: { IntValues: {19: value, 5: burden, ...}, StringValues: {1: name, ...} } + * Inventory service sends flat lowercase: { item_id, icon, name, value, burden, armor_level, ... } + * + * MyWorldObject uses -1 as sentinel for "not set" on int/double properties. + */ +function normalizeInventoryItem(item) { + if (!item) return item; + if (item.name && item.item_id) return item; + + // MyWorldObject uses -1 as "not set" sentinel — filter those out + const v = (val) => (val !== undefined && val !== null && val !== -1) ? val : undefined; + + if (!item.item_id) item.item_id = item.Id; + if (!item.icon) item.icon = item.Icon; + if (!item.object_class) item.object_class = item.ObjectClass; + if (item.HasIdData !== undefined) item.has_id_data = item.HasIdData; + + const baseName = item.Name || (item.StringValues && item.StringValues['1']) || null; + const material = item.Material || null; + if (material) { + item.material = material; + item.material_name = material; + } + + // Prepend material to name (e.g. "Pants" → "Satin Pants") matching inventory-service + if (baseName) { + if (material && !baseName.toLowerCase().startsWith(material.toLowerCase())) { + item.name = material + ' ' + baseName; + } else { + item.name = baseName; + } + } + + const iv = item.IntValues || {}; + if (item.value === undefined) item.value = v(item.Value) ?? v(iv['19']); + if (item.burden === undefined) item.burden = v(item.Burden) ?? v(iv['5']); + + // Container/equipment tracking + if (item.container_id === undefined) item.container_id = item.ContainerId || 0; + if (item.current_wielded_location === undefined) { + item.current_wielded_location = v(item.CurrentWieldedLocation) ?? v(iv['10']) ?? 0; + } + if (item.items_capacity === undefined) item.items_capacity = v(item.ItemsCapacity) ?? v(iv['6']); + + const armor = v(item.ArmorLevel); + if (armor !== undefined) item.armor_level = armor; + + const maxDmg = v(item.MaxDamage); + if (maxDmg !== undefined) item.max_damage = maxDmg; + + const dmgBonus = v(item.DamageBonus); + if (dmgBonus !== undefined) item.damage_bonus = dmgBonus; + + const atkBonus = v(item.AttackBonus); + if (atkBonus !== undefined) item.attack_bonus = atkBonus; + + const elemDmg = v(item.ElementalDmgBonus); + if (elemDmg !== undefined) item.elemental_damage_vs_monsters = elemDmg; + + const meleeD = v(item.MeleeDefenseBonus); + if (meleeD !== undefined) item.melee_defense_bonus = meleeD; + + const magicD = v(item.MagicDBonus); + if (magicD !== undefined) item.magic_defense_bonus = magicD; + + const missileD = v(item.MissileDBonus); + if (missileD !== undefined) item.missile_defense_bonus = missileD; + + const manaC = v(item.ManaCBonus); + if (manaC !== undefined) item.mana_conversion_bonus = manaC; + + const wieldLvl = v(item.WieldLevel); + if (wieldLvl !== undefined) item.wield_level = wieldLvl; + + const skillLvl = v(item.SkillLevel); + if (skillLvl !== undefined) item.skill_level = skillLvl; + + const loreLvl = v(item.LoreRequirement); + if (loreLvl !== undefined) item.lore_requirement = loreLvl; + + if (item.EquipSkill) item.equip_skill = item.EquipSkill; + if (item.Mastery) item.mastery = item.Mastery; + if (item.ItemSet) item.item_set = item.ItemSet; + if (item.Imbue) item.imbue = item.Imbue; + + const tinks = v(item.Tinks); + if (tinks !== undefined) item.tinks = tinks; + + const work = v(item.Workmanship); + if (work !== undefined) item.workmanship = work; + + const damR = v(item.DamRating); + if (damR !== undefined) item.damage_rating = damR; + + const critR = v(item.CritRating); + if (critR !== undefined) item.crit_rating = critR; + + const healR = v(item.HealBoostRating); + if (healR !== undefined) item.heal_boost_rating = healR; + + const vitalR = v(item.VitalityRating); + if (vitalR !== undefined) item.vitality_rating = vitalR; + + const critDmgR = v(item.CritDamRating); + if (critDmgR !== undefined) item.crit_damage_rating = critDmgR; + + const damResR = v(item.DamResistRating); + if (damResR !== undefined) item.damage_resist_rating = damResR; + + const critResR = v(item.CritResistRating); + if (critResR !== undefined) item.crit_resist_rating = critResR; + + const critDmgResR = v(item.CritDamResistRating); + if (critDmgResR !== undefined) item.crit_damage_resist_rating = critDmgResR; + + if (item.Spells && Array.isArray(item.Spells) && item.Spells.length > 0 && !item.spells) { + item.spells = item.Spells; + } + + return item; +} + +/** + * Create a single inventory slot DOM element from item data. + * Used by both initial inventory load and live delta updates. + */ +function createInventorySlot(item) { + const slot = document.createElement('div'); + slot.className = 'inventory-slot'; + slot.setAttribute('data-item-id', item.item_id || item.Id || item.id || 0); + + // Create layered icon container + const iconContainer = document.createElement('div'); + iconContainer.className = 'item-icon-composite'; + + // Get base icon ID with portal.dat offset + const iconRaw = item.icon || item.Icon || 0; + const baseIconId = (iconRaw + 0x06000000).toString(16).toUpperCase().padStart(8, '0'); + + // Check for overlay and underlay from enhanced format or legacy format + let overlayIconId = null; + let underlayIconId = null; + + // Enhanced format (inventory service) - check for proper icon overlay/underlay properties + if (item.icon_overlay_id && item.icon_overlay_id > 0) { + overlayIconId = (item.icon_overlay_id + 0x06000000).toString(16).toUpperCase().padStart(8, '0'); + } + + if (item.icon_underlay_id && item.icon_underlay_id > 0) { + underlayIconId = (item.icon_underlay_id + 0x06000000).toString(16).toUpperCase().padStart(8, '0'); + } + + // Fallback: Enhanced format (inventory service) - check spells object for decal info + if (!overlayIconId && !underlayIconId && item.spells && typeof item.spells === 'object') { + if (item.spells.spell_decal_218103838 && item.spells.spell_decal_218103838 > 100) { + overlayIconId = (item.spells.spell_decal_218103838 + 0x06000000).toString(16).toUpperCase().padStart(8, '0'); + } + if (item.spells.spell_decal_218103848 && item.spells.spell_decal_218103848 > 100) { + underlayIconId = (item.spells.spell_decal_218103848 + 0x06000000).toString(16).toUpperCase().padStart(8, '0'); + } + } else if (item.IntValues) { + // Raw delta format from plugin - IntValues directly on item + if (item.IntValues['218103849'] && item.IntValues['218103849'] > 100) { + overlayIconId = (item.IntValues['218103849'] + 0x06000000).toString(16).toUpperCase().padStart(8, '0'); + } + if (item.IntValues['218103850'] && item.IntValues['218103850'] > 100) { + underlayIconId = (item.IntValues['218103850'] + 0x06000000).toString(16).toUpperCase().padStart(8, '0'); + } + } else if (item.item_data) { + // Legacy format - parse item_data + try { + const itemData = typeof item.item_data === 'string' ? JSON.parse(item.item_data) : item.item_data; + if (itemData.IntValues) { + if (itemData.IntValues['218103849'] && itemData.IntValues['218103849'] > 100) { + overlayIconId = (itemData.IntValues['218103849'] + 0x06000000).toString(16).toUpperCase().padStart(8, '0'); + } + if (itemData.IntValues['218103850'] && itemData.IntValues['218103850'] > 100) { + underlayIconId = (itemData.IntValues['218103850'] + 0x06000000).toString(16).toUpperCase().padStart(8, '0'); + } + } + } catch (e) { + console.warn('Failed to parse item data for', item.name || item.Name); + } + } + + // Create underlay (bottom layer) + if (underlayIconId) { + const underlayImg = document.createElement('img'); + underlayImg.className = 'icon-underlay'; + underlayImg.src = `/icons/${underlayIconId}.png`; + underlayImg.alt = 'underlay'; + underlayImg.onerror = function() { this.style.display = 'none'; }; + iconContainer.appendChild(underlayImg); + } + + // Create base icon (middle layer) + const baseImg = document.createElement('img'); + baseImg.className = 'icon-base'; + baseImg.src = `/icons/${baseIconId}.png`; + baseImg.alt = item.name || item.Name || 'Unknown Item'; + baseImg.onerror = function() { this.src = '/icons/06000133.png'; }; + iconContainer.appendChild(baseImg); + + // Create overlay (top layer) + if (overlayIconId) { + const overlayImg = document.createElement('img'); + overlayImg.className = 'icon-overlay'; + overlayImg.src = `/icons/${overlayIconId}.png`; + overlayImg.alt = 'overlay'; + overlayImg.onerror = function() { this.style.display = 'none'; }; + iconContainer.appendChild(overlayImg); + } + + // Create tooltip data (handle both inventory-service format and raw plugin format) + const itemName = item.name || item.Name || 'Unknown Item'; + slot.dataset.name = itemName; + slot.dataset.value = item.value || item.Value || 0; + slot.dataset.burden = item.burden || item.Burden || 0; + + // Store enhanced data for tooltips + if (item.max_damage !== undefined || item.object_class_name !== undefined || item.spells !== undefined) { + const enhancedData = {}; + const possibleProps = [ + 'max_damage', 'armor_level', 'damage_bonus', 'attack_bonus', + 'wield_level', 'skill_level', 'lore_requirement', 'equip_skill', 'equip_skill_name', + 'material', 'material_name', 'material_id', 'imbue', 'item_set', 'tinks', + 'workmanship', 'workmanship_text', 'damage_rating', 'crit_rating', + 'heal_boost_rating', 'has_id_data', 'object_class_name', 'spells', + 'enhanced_properties', 'damage_range', 'damage_type', 'min_damage', + 'speed_text', 'speed_value', 'mana_display', 'spellcraft', 'current_mana', 'max_mana', + 'melee_defense_bonus', 'magic_defense_bonus', 'missile_defense_bonus', + 'elemental_damage_vs_monsters', 'mana_conversion_bonus', 'icon_overlay_id', 'icon_underlay_id' + ]; + possibleProps.forEach(prop => { + if (item.hasOwnProperty(prop) && item[prop] !== undefined && item[prop] !== null) { + enhancedData[prop] = item[prop]; + } + }); + slot.dataset.enhancedData = JSON.stringify(enhancedData); + } else { + slot.dataset.enhancedData = JSON.stringify({}); + } + + // Add tooltip on hover + slot.addEventListener('mouseenter', e => showInventoryTooltip(e, slot)); + slot.addEventListener('mousemove', e => showInventoryTooltip(e, slot)); + slot.addEventListener('mouseleave', hideInventoryTooltip); + + slot.appendChild(iconContainer); + + // Add stack count if > 1 + const stackCount = item.count || item.Count || item.stack_count || item.StackCount || 1; + if (stackCount > 1) { + const countEl = document.createElement('div'); + countEl.className = 'inventory-count'; + countEl.textContent = stackCount; + slot.appendChild(countEl); + } + + return slot; +} + +/** + * Equipment slots mapping for the AC inventory layout. + * Grid matches the real AC "Equipment Slots Enabled" paperdoll view. + * + * Layout (6 cols × 6 rows): + * Col: 1 2 3 4 5 6 + * Row 1: Neck — Head Sigil(Blue) Sigil(Yellow) Sigil(Red) + * Row 2: Trinket — ChestArmor — — Cloak + * Row 3: Bracelet(L) UpperArmArmor AbdomenArmor — Bracelet(R) ChestWear(Shirt) + * Row 4: Ring(L) LowerArmArmor UpperLegArmor — Ring(R) AbdomenWear(Pants) + * Row 5: — Hands — LowerLegArmor — — + * Row 6: Shield — — Feet Weapon Ammo + */ +const EQUIP_SLOTS = { + // Row 1: Necklace, Head, 3× Aetheria/Sigil + 32768: { name: 'Neck', row: 1, col: 1 }, // EquipMask.NeckWear + 1: { name: 'Head', row: 1, col: 3 }, // EquipMask.HeadWear + 268435456: { name: 'Sigil (Blue)', row: 1, col: 5 }, // EquipMask.SigilOne + 536870912: { name: 'Sigil (Yellow)', row: 1, col: 6 }, // EquipMask.SigilTwo + 1073741824: { name: 'Sigil (Red)', row: 1, col: 7 }, // EquipMask.SigilThree + + // Row 2: Trinket, Chest Armor, Cloak + 67108864: { name: 'Trinket', row: 2, col: 1 }, // EquipMask.TrinketOne + 2048: { name: 'Upper Arm Armor',row: 2, col: 2 }, // EquipMask.UpperArmArmor + 512: { name: 'Chest Armor', row: 2, col: 3 }, // EquipMask.ChestArmor + 134217728: { name: 'Cloak', row: 2, col: 7 }, // EquipMask.Cloak + + // Row 3: Bracelet(L), Lower Arm Armor, Abdomen Armor, Upper Leg Armor, Bracelet(R), Shirt + 65536: { name: 'Bracelet (L)', row: 3, col: 1 }, // EquipMask.WristWearLeft + 4096: { name: 'Lower Arm Armor',row: 3, col: 2 }, // EquipMask.LowerArmArmor + 1024: { name: 'Abdomen Armor', row: 3, col: 3 }, // EquipMask.AbdomenArmor + 8192: { name: 'Upper Leg Armor',row: 3, col: 4 }, // EquipMask.UpperLegArmor + 131072: { name: 'Bracelet (R)', row: 3, col: 5 }, // EquipMask.WristWearRight + 2: { name: 'Shirt', row: 3, col: 7 }, // EquipMask.ChestWear + + // Row 4: Ring(L), Hands, Lower Leg Armor, Ring(R), Pants + 262144: { name: 'Ring (L)', row: 4, col: 1 }, // EquipMask.FingerWearLeft + 32: { name: 'Hands', row: 4, col: 2 }, // EquipMask.HandWear + 16384: { name: 'Lower Leg Armor',row: 4, col: 4 }, // EquipMask.LowerLegArmor + 524288: { name: 'Ring (R)', row: 4, col: 5 }, // EquipMask.FingerWearRight + 4: { name: 'Pants', row: 4, col: 7 }, // EquipMask.AbdomenWear + + // Row 5: Feet + 256: { name: 'Feet', row: 5, col: 4 }, // EquipMask.FootWear + + // Row 6: Shield, Weapon, Ammo + 2097152: { name: 'Shield', row: 6, col: 1 }, // EquipMask.Shield + 1048576: { name: 'Melee Weapon', row: 6, col: 3 }, // EquipMask.MeleeWeapon + 4194304: { name: 'Missile Weapon', row: 6, col: 3 }, // EquipMask.MissileWeapon + 16777216: { name: 'Held', row: 6, col: 3 }, // EquipMask.Held + 33554432: { name: 'Two Handed', row: 6, col: 3 }, // EquipMask.TwoHanded + 8388608: { name: 'Ammo', row: 6, col: 7 }, // EquipMask.Ammunition +}; + +const SLOT_COLORS = {}; +// Purple: jewelry +[32768, 67108864, 65536, 131072, 262144, 524288].forEach(m => SLOT_COLORS[m] = 'slot-purple'); +// Blue: armor +[1, 512, 2048, 1024, 4096, 8192, 16384, 32, 256].forEach(m => SLOT_COLORS[m] = 'slot-blue'); +// Teal: clothing/misc +[2, 4, 134217728, 268435456, 536870912, 1073741824].forEach(m => SLOT_COLORS[m] = 'slot-teal'); +// Dark blue: weapons/combat +[2097152, 1048576, 4194304, 16777216, 33554432, 8388608].forEach(m => SLOT_COLORS[m] = 'slot-darkblue'); + +/** + * Handle live inventory delta updates from WebSocket. + * Updates the inventory grid for a character if their inventory window is open. + */ +function updateInventoryLive(delta) { + const name = delta.character_name; + const win = inventoryWindows[name]; + if (!win || !win._inventoryState) { + return; + } + + const state = win._inventoryState; + const getItemId = (d) => { + if (d.item) return d.item.item_id || d.item.Id || d.item.id; + return d.item_id; + }; + + const itemId = getItemId(delta); + + if (delta.action === 'remove') { + state.items = state.items.filter(i => (i.item_id || i.Id || i.id) !== itemId); + } else if (delta.action === 'add' || delta.action === 'update') { + normalizeInventoryItem(delta.item); + const existingIdx = state.items.findIndex(i => (i.item_id || i.Id || i.id) === itemId); + if (existingIdx >= 0) { + state.items[existingIdx] = delta.item; + } else { + state.items.push(delta.item); + } + } + + renderInventoryState(state); +} + +function renderInventoryState(state) { + // 1. Clear equipment slots + state.slotMap.forEach((slotEl) => { + slotEl.innerHTML = ''; + const colorClass = slotEl.className.match(/slot-\w+/)?.[0] || ''; + slotEl.className = `inv-equip-slot empty ${colorClass}`; + delete slotEl.dataset.itemId; + }); + + // 2. Identify containers (object_class === 10) by item_id for sidebar + // These are packs/sacks/pouches/foci that appear in inventory as items + // but should ONLY show in the pack sidebar, not in the item grid. + const containers = []; // container objects (object_class=10) + const containerItemIds = new Set(); // item_ids of containers (to exclude from grid) + + state.items.forEach(item => { + if (item.object_class === 10) { + containers.push(item); + containerItemIds.add(item.item_id); + } + }); + + // 3. Separate equipped items from pack items, excluding containers from grid + const packItems = new Map(); // container_id → [items] (non-container items only) + + // Determine the character body container_id: items with wielded_location > 0 + // share a container_id that is NOT 0 and NOT a pack's item_id. + // We treat non-wielded items from the body container as "main backpack" items. + let bodyContainerId = null; + state.items.forEach(item => { + if (item.current_wielded_location && item.current_wielded_location > 0) { + const cid = item.container_id; + if (cid && cid !== 0 && !containerItemIds.has(cid)) { + bodyContainerId = cid; + } + } + }); + + state.items.forEach(item => { + // Skip container objects — they go in sidebar only + if (containerItemIds.has(item.item_id)) return; + + if (item.current_wielded_location && item.current_wielded_location > 0) { + const mask = item.current_wielded_location; + const isArmor = item.object_class === 2; + + // For armor (object_class=2): render in ALL matching slots (multi-slot display) + // For everything else (clothing, jewelry, weapons): place in first matching slot only + if (isArmor) { + Object.keys(EQUIP_SLOTS).forEach(m => { + const slotMask = parseInt(m); + if ((mask & slotMask) === slotMask) { + const slotDef = EQUIP_SLOTS[slotMask]; + const key = `${slotDef.row}-${slotDef.col}`; + if (state.slotMap.has(key)) { + const slotEl = state.slotMap.get(key); + if (!slotEl.dataset.itemId) { + slotEl.innerHTML = ''; + const colorClass = slotEl.className.match(/slot-\w+/)?.[0] || ''; + slotEl.className = `inv-equip-slot equipped ${colorClass}`; + slotEl.dataset.itemId = item.item_id; + slotEl.appendChild(createInventorySlot(item)); + } + } + } + }); + } else { + // Non-armor: find the first matching slot by exact mask key, then by bit overlap + let placed = false; + // Try exact mask match first (e.g. necklace mask=32768 matches key 32768 directly) + if (EQUIP_SLOTS[mask]) { + const slotDef = EQUIP_SLOTS[mask]; + const key = `${slotDef.row}-${slotDef.col}`; + if (state.slotMap.has(key)) { + const slotEl = state.slotMap.get(key); + if (!slotEl.dataset.itemId) { + slotEl.innerHTML = ''; + const colorClass = slotEl.className.match(/slot-\w+/)?.[0] || ''; + slotEl.className = `inv-equip-slot equipped ${colorClass}`; + slotEl.dataset.itemId = item.item_id; + slotEl.appendChild(createInventorySlot(item)); + placed = true; + } + } + } + // If no exact match, find first matching bit in EQUIP_SLOTS + if (!placed) { + for (const m of Object.keys(EQUIP_SLOTS)) { + const slotMask = parseInt(m); + if ((mask & slotMask) === slotMask) { + const slotDef = EQUIP_SLOTS[slotMask]; + const key = `${slotDef.row}-${slotDef.col}`; + if (state.slotMap.has(key)) { + const slotEl = state.slotMap.get(key); + if (!slotEl.dataset.itemId) { + slotEl.innerHTML = ''; + const colorClass = slotEl.className.match(/slot-\w+/)?.[0] || ''; + slotEl.className = `inv-equip-slot equipped ${colorClass}`; + slotEl.dataset.itemId = item.item_id; + slotEl.appendChild(createInventorySlot(item)); + placed = true; + break; + } + } + } + } + } + } + } else { + // Non-equipped, non-container → pack item. Group by container_id. + let cid = item.container_id || 0; + // Items on the character body (not wielded) → treat as main backpack (cid=0) + if (bodyContainerId !== null && cid === bodyContainerId) cid = 0; + if (!packItems.has(cid)) packItems.set(cid, []); + packItems.get(cid).push(item); + } + }); + + const stats = characterStats[state.characterName] || {}; + const burdenUnits = Number(stats.burden_units || 0); + const encumbranceCapacity = Number(stats.encumbrance_capacity || 0); + const burdenPct = encumbranceCapacity > 0 + ? Math.max(0, Math.min(200, (burdenUnits / encumbranceCapacity) * 100)) + : 0; + const burdenDisplay = Math.floor(burdenPct); + state.burdenLabel.textContent = `${burdenDisplay}%`; + state.burdenLabel.title = burdenUnits > 0 && encumbranceCapacity > 0 + ? `${burdenUnits.toLocaleString()} / ${encumbranceCapacity.toLocaleString()}` + : ''; + // Fill height: map 0-200% burden onto 0-100% bar height + state.burdenFill.style.height = `${burdenPct / 2}%`; + // Color by threshold + state.burdenFill.style.backgroundColor = burdenPct > 150 + ? '#b7432c' + : burdenPct > 100 + ? '#d8a431' + : '#2e8b57'; + + // 4. Sort containers for stable sidebar order (by unsigned item_id) + containers.sort((a, b) => { + const ua = a.item_id >>> 0; + const ub = b.item_id >>> 0; + return ua - ub; + }); + + // 5. Render packs in sidebar + state.packList.innerHTML = ''; + + // Helper: compute icon URL from raw icon id + const iconUrl = (iconRaw) => { + if (!iconRaw) return '/icons/06001080.png'; + const hex = (iconRaw + 0x06000000).toString(16).toUpperCase().padStart(8, '0'); + return `/icons/${hex}.png`; + }; + + // --- Main backpack (container_id === 0, non-containers) --- + const mainPackEl = document.createElement('div'); + mainPackEl.className = `inv-pack-icon ${state.activePack === null ? 'active' : ''}`; + const mainPackImg = document.createElement('img'); + mainPackImg.src = '/icons/0600127E.png'; + mainPackImg.onerror = function() { this.src = '/icons/06000133.png'; }; + + const mainFillCont = document.createElement('div'); + mainFillCont.className = 'inv-pack-fill-container'; + const mainFill = document.createElement('div'); + mainFill.className = 'inv-pack-fill'; + + // Main backpack items = container_id 0, excluding container objects + const mainPackItems = packItems.get(0) || []; + const mainPct = Math.min(100, (mainPackItems.length / 102) * 100); + mainFill.style.height = `${mainPct}%`; + + mainFillCont.appendChild(mainFill); + mainPackEl.appendChild(mainPackImg); + mainPackEl.appendChild(mainFillCont); + + mainPackEl.onclick = () => { + state.activePack = null; + renderInventoryState(state); + }; + state.packList.appendChild(mainPackEl); + + // --- Sub-packs: each container object (object_class=10) --- + containers.forEach(container => { + const cid = container.item_id; // items inside this pack have container_id = this item_id + const packEl = document.createElement('div'); + packEl.className = `inv-pack-icon ${state.activePack === cid ? 'active' : ''}`; + const packImg = document.createElement('img'); + // Use the container's actual icon from the API + packImg.src = iconUrl(container.icon); + packImg.onerror = function() { this.src = '/icons/06001080.png'; }; + + const fillCont = document.createElement('div'); + fillCont.className = 'inv-pack-fill-container'; + const fill = document.createElement('div'); + fill.className = 'inv-pack-fill'; + + const pItems = packItems.get(cid) || []; + const capacity = container.items_capacity || 24; // default pack capacity in AC + const pPct = Math.min(100, (pItems.length / capacity) * 100); + fill.style.height = `${pPct}%`; + + fillCont.appendChild(fill); + packEl.appendChild(packImg); + packEl.appendChild(fillCont); + + packEl.onclick = () => { + state.activePack = cid; + renderInventoryState(state); + }; + state.packList.appendChild(packEl); + }); + + // 6. Render item grid + state.itemGrid.innerHTML = ''; + let itemsToShow = []; + if (state.activePack === null) { + // Main backpack: non-container items with container_id === 0 + itemsToShow = mainPackItems; + state.contentsHeader.textContent = 'Contents of Backpack'; + } else { + // Sub-pack: items with matching container_id + itemsToShow = packItems.get(state.activePack) || []; + // Use the container's name for the header + const activeContainer = containers.find(c => c.item_id === state.activePack); + state.contentsHeader.textContent = activeContainer + ? `Contents of ${activeContainer.name}` + : 'Contents of Pack'; + } + + const numCells = Math.max(24, Math.ceil(itemsToShow.length / 6) * 6); + for (let i = 0; i < numCells; i++) { + const cell = document.createElement('div'); + if (i < itemsToShow.length) { + cell.className = 'inv-item-slot occupied'; + const itemNode = createInventorySlot(itemsToShow[i]); + cell.appendChild(itemNode); + } else { + cell.className = 'inv-item-slot'; + } + state.itemGrid.appendChild(cell); + } + + renderInventoryManaPanel(state); +} + +function getManaTrackedItems(state) { + if (!state || !state.items) return []; + + const overlayItems = equipmentCantripStates[state.characterName]?.items; + const overlayMap = new Map(); + if (Array.isArray(overlayItems)) { + overlayItems.forEach(item => { + if (item && item.item_id != null) { + overlayMap.set(Number(item.item_id), item); + } + }); + } + + const snapshotMs = Date.now(); + return state.items + .filter(item => (item.current_wielded_location || 0) > 0) + .filter(item => overlayMap.has(Number(item.item_id))) + .map(item => { + const result = { ...item }; + const overlay = overlayMap.get(Number(item.item_id)) || {}; + result.mana_state = overlay.state || 'unknown'; + if (overlay.current_mana !== undefined && overlay.current_mana !== null) { + result.current_mana = overlay.current_mana; + } + if (overlay.max_mana !== undefined && overlay.max_mana !== null) { + result.max_mana = overlay.max_mana; + } + if (overlay.mana_time_remaining_seconds !== undefined && overlay.mana_time_remaining_seconds !== null) { + result.mana_time_remaining_seconds = overlay.mana_time_remaining_seconds; + result.mana_snapshot_utc = equipmentCantripStates[state.characterName]?.timestamp || null; + } + + if (result.mana_time_remaining_seconds !== undefined && result.mana_time_remaining_seconds !== null) { + const snapshotUtc = result.mana_snapshot_utc ? Date.parse(result.mana_snapshot_utc) : NaN; + if (!Number.isNaN(snapshotUtc)) { + const elapsed = Math.max(0, Math.floor((snapshotMs - snapshotUtc) / 1000)); + result.live_mana_time_remaining_seconds = Math.max((result.mana_time_remaining_seconds || 0) - elapsed, 0); + } else { + result.live_mana_time_remaining_seconds = result.mana_time_remaining_seconds; + } + } else { + result.live_mana_time_remaining_seconds = null; + } + return result; + }) + .sort((a, b) => { + const aRemaining = a.live_mana_time_remaining_seconds; + const bRemaining = b.live_mana_time_remaining_seconds; + if (aRemaining === null && bRemaining === null) return (a.name || '').localeCompare(b.name || ''); + if (aRemaining === null) return 1; + if (bRemaining === null) return -1; + if (aRemaining !== bRemaining) return aRemaining - bRemaining; + return (a.name || '').localeCompare(b.name || ''); + }); +} + +function formatManaRemaining(totalSeconds) { + if (totalSeconds === null || totalSeconds === undefined) return '--'; + const safeSeconds = Math.max(0, Math.floor(totalSeconds)); + const hours = Math.floor(safeSeconds / 3600); + const minutes = Math.floor((safeSeconds % 3600) / 60); + return `${hours}h${String(minutes).padStart(2, '0')}m`; +} + +function renderInventoryManaPanel(state) { + if (!state || !state.manaListBody || !state.manaSummary) return; + + const items = getManaTrackedItems(state); + state.manaListBody.innerHTML = ''; + + if (items.length === 0) { + const empty = document.createElement('div'); + empty.className = 'inv-mana-empty'; + empty.textContent = 'No equipped mana-bearing items'; + state.manaListBody.appendChild(empty); + state.manaSummary.textContent = 'Mana: 0 tracked'; + return; + } + + const activeCount = items.filter(item => item.mana_state === 'active').length; + const lowCount = items.filter(item => (item.live_mana_time_remaining_seconds || 0) > 0 && item.live_mana_time_remaining_seconds <= 7200).length; + state.manaSummary.textContent = `Mana: ${items.length} tracked, ${activeCount} active, ${lowCount} low`; + + items.forEach(item => { + const row = document.createElement('div'); + row.className = 'inv-mana-row'; + + const iconWrap = document.createElement('div'); + iconWrap.className = 'inv-mana-icon'; + const iconSlot = createInventorySlot(item); + iconSlot.classList.add('mana-slot'); + iconWrap.appendChild(iconSlot); + + const nameEl = document.createElement('div'); + nameEl.className = 'inv-mana-name'; + nameEl.textContent = item.name || item.Name || 'Unknown Item'; + + const stateEl = document.createElement('div'); + const stateName = item.mana_state || 'unknown'; + stateEl.className = `inv-mana-state-dot mana-state-${stateName}`; + stateEl.title = stateName.replace(/_/g, ' '); + + const manaEl = document.createElement('div'); + manaEl.className = 'inv-mana-value'; + if (item.current_mana !== undefined && item.max_mana !== undefined) { + manaEl.textContent = `${item.current_mana} / ${item.max_mana}`; + } else if (item.mana_display) { + manaEl.textContent = item.mana_display; + } else { + manaEl.textContent = '--'; + } + + const timeEl = document.createElement('div'); + timeEl.className = 'inv-mana-time'; + timeEl.textContent = formatManaRemaining(item.live_mana_time_remaining_seconds); + + row.appendChild(iconWrap); + row.appendChild(nameEl); + row.appendChild(stateEl); + row.appendChild(manaEl); + row.appendChild(timeEl); + state.manaListBody.appendChild(row); + }); + +} + +function showInventoryWindow(name) { + debugLog('showInventoryWindow called for:', name); + const windowId = `inventoryWindow-${name}`; + + const { win, content, isNew } = createWindow( + windowId, `Inventory: ${name}`, 'inventory-window' + ); + + if (!isNew) { + debugLog('Existing inventory window found, showing it'); + return; + } + + win.dataset.character = name; + inventoryWindows[name] = win; + + const loading = document.createElement('div'); + loading.className = 'inventory-loading'; + loading.textContent = 'Loading inventory...'; + content.appendChild(loading); + + win.style.width = '572px'; + win.style.height = '720px'; + + const invContent = document.createElement('div'); + invContent.className = 'inventory-content'; + invContent.style.display = 'none'; + content.appendChild(invContent); + + const equipGrid = document.createElement('div'); + equipGrid.className = 'inv-equipment-grid'; + + const slotMap = new Map(); + const createdSlots = new Set(); + + Object.entries(EQUIP_SLOTS).forEach(([mask, slotDef]) => { + const key = `${slotDef.row}-${slotDef.col}`; + if (!createdSlots.has(key)) { + createdSlots.add(key); + const slotEl = document.createElement('div'); + const colorClass = SLOT_COLORS[parseInt(mask)] || 'slot-darkblue'; + slotEl.className = `inv-equip-slot empty ${colorClass}`; + slotEl.style.left = `${(slotDef.col - 1) * 44}px`; + slotEl.style.top = `${(slotDef.row - 1) * 44}px`; + slotEl.dataset.pos = key; + equipGrid.appendChild(slotEl); + slotMap.set(key, slotEl); + } + }); + + const sidebar = document.createElement('div'); + sidebar.className = 'inv-sidebar'; + + const manaPanel = document.createElement('div'); + manaPanel.className = 'inv-mana-panel'; + const manaHeader = document.createElement('div'); + manaHeader.className = 'inv-mana-header'; + manaHeader.textContent = 'Mana'; + const manaSummary = document.createElement('div'); + manaSummary.className = 'inv-mana-summary'; + manaSummary.textContent = 'Mana: loading'; + const manaListBody = document.createElement('div'); + manaListBody.className = 'inv-mana-list'; + manaPanel.appendChild(manaHeader); + manaPanel.appendChild(manaSummary); + manaPanel.appendChild(manaListBody); + + const burdenContainer = document.createElement('div'); + burdenContainer.className = 'inv-burden-bar'; + const burdenFill = document.createElement('div'); + burdenFill.className = 'inv-burden-fill'; + const burdenLabel = document.createElement('div'); + burdenLabel.className = 'inv-burden-label'; + burdenLabel.textContent = 'Burden'; + burdenContainer.appendChild(burdenFill); + sidebar.appendChild(burdenLabel); + sidebar.appendChild(burdenContainer); + + const packList = document.createElement('div'); + packList.className = 'inv-pack-list'; + sidebar.appendChild(packList); + + const leftColumn = document.createElement('div'); + leftColumn.className = 'inv-left-column'; + + const contentsHeader = document.createElement('div'); + contentsHeader.className = 'inv-contents-header'; + contentsHeader.textContent = 'Contents of Backpack'; + + const itemGrid = document.createElement('div'); + itemGrid.className = 'inv-item-grid'; + + leftColumn.appendChild(equipGrid); + leftColumn.appendChild(contentsHeader); + leftColumn.appendChild(itemGrid); + + invContent.appendChild(leftColumn); + invContent.appendChild(sidebar); + invContent.appendChild(manaPanel); + + const resizeGrip = document.createElement('div'); + resizeGrip.className = 'inv-resize-grip'; + win.appendChild(resizeGrip); + + let resizing = false; + let startY, startH; + + resizeGrip.addEventListener('mousedown', (e) => { + e.preventDefault(); + e.stopPropagation(); + resizing = true; + startY = e.clientY; + startH = win.offsetHeight; + document.body.style.cursor = 'ns-resize'; + document.body.style.userSelect = 'none'; + }); + + document.addEventListener('mousemove', (e) => { + if (!resizing) return; + const newH = Math.max(400, startH + (e.clientY - startY)); + win.style.height = newH + 'px'; + }); + + document.addEventListener('mouseup', () => { + if (!resizing) return; + resizing = false; + document.body.style.cursor = ''; + document.body.style.userSelect = ''; + }); + + win._inventoryState = { + windowEl: win, + items: [], + activePack: null, + slotMap: slotMap, + equipGrid: equipGrid, + itemGrid: itemGrid, + packList: packList, + burdenFill: burdenFill, + burdenLabel: burdenLabel, + contentsHeader: contentsHeader, + manaPanel: manaPanel, + manaSummary: manaSummary, + manaListBody: manaListBody, + characterName: name + }; + + fetch(`${API_BASE}/inventory/${encodeURIComponent(name)}?limit=1000`) + .then(response => { + if (!response.ok) throw new Error(`HTTP ${response.status}`); + return response.json(); + }) + .then(data => { + loading.style.display = 'none'; + invContent.style.display = 'flex'; + + data.items.forEach(i => normalizeInventoryItem(i)); + win._inventoryState.items = data.items; + + renderInventoryState(win._inventoryState); + }) + .catch(err => { + handleError('Inventory', err, true); + loading.textContent = `Failed to load inventory: ${err.message}`; + }); + + if (!characterStats[name]) { + fetch(`${API_BASE}/character-stats/${encodeURIComponent(name)}`) + .then(r => r.ok ? r.json() : null) + .then(data => { + if (data && !data.error) { + characterStats[name] = data; + if (win._inventoryState) { + renderInventoryState(win._inventoryState); + } + } + }) + .catch(() => {}); + } + + if (!equipmentCantripStates[name]) { + fetch(`${API_BASE}/equipment-cantrip-state/${encodeURIComponent(name)}`) + .then(r => r.ok ? r.json() : null) + .then(data => { + if (data && !data.error) { + equipmentCantripStates[name] = data; + if (win._inventoryState) { + renderInventoryState(win._inventoryState); + } + } + }) + .catch(() => {}); + } + + debugLog('Inventory window created for:', name); +} + +// === TreeStats Property ID Mappings === +const TS_AUGMENTATIONS = { + 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" +}; +const TS_AURAS = { + 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" +}; +const TS_RATINGS = { + 370: "Damage", 371: "Damage Resistance", 372: "Critical", 373: "Critical Resistance", + 374: "Critical Damage", 375: "Critical Damage Resistance", 376: "Healing Boost", + 379: "Vitality" +}; +const TS_SOCIETY = { 287: "Celestial Hand", 288: "Eldrytch Web", 289: "Radiant Blood" }; +const TS_MASTERIES = { 354: "Melee", 355: "Ranged", 362: "Summoning" }; +const TS_MASTERY_NAMES = { 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" }; +const TS_GENERAL = { 181: "Chess Rank", 192: "Fishing Skill", 199: "Total Augmentations", 322: "Aetheria Slots", 390: "Enlightenment" }; + +function _tsSocietyRank(v) { + if (v >= 1001) return "Master"; + if (v >= 301) return "Lord"; + if (v >= 151) return "Knight"; + if (v >= 31) return "Adept"; + return "Initiate"; +} + +function _tsSetupTabs(container) { + const tabs = container.querySelectorAll('.ts-tab'); + const boxes = container.querySelectorAll('.ts-box'); + tabs.forEach((tab, i) => { + tab.addEventListener('click', () => { + tabs.forEach(t => { t.classList.remove('active'); t.classList.add('inactive'); }); + boxes.forEach(b => { b.classList.remove('active'); b.classList.add('inactive'); }); + tab.classList.remove('inactive'); tab.classList.add('active'); + if (boxes[i]) { boxes[i].classList.remove('inactive'); boxes[i].classList.add('active'); } + }); + }); +} + +function showCharacterWindow(name) { + debugLog('showCharacterWindow called for:', name); + const windowId = `characterWindow-${name}`; + + const { win, content, isNew } = createWindow( + windowId, `Character: ${name}`, 'character-window' + ); + + if (!isNew) { + debugLog('Existing character window found, showing it'); + return; + } + + win.dataset.character = name; + characterWindows[name] = win; + + const esc = CSS.escape(name); + content.innerHTML = ` +
+

${name}

+
Awaiting character data...
+
+
+
Total XP: \u2014
+
Unassigned XP: \u2014
+
Luminance: \u2014
+
Deaths: \u2014
+
+
+
+
+
Attributes
+
Skills
+
Titles
+
+
+
+
+ Health +
+ \u2014 / \u2014 +
+
+ Stamina +
+ \u2014 / \u2014 +
+
+ Mana +
+ \u2014 / \u2014 +
+
+ + + + + + + + +
AttributeCreationBase
Strength\u2014\u2014
Endurance\u2014\u2014
Coordination\u2014\u2014
Quickness\u2014\u2014
Focus\u2014\u2014
Self\u2014\u2014
+ + + + + +
VitalBase
Health\u2014
Stamina\u2014
Mana\u2014
+ + +
Skill Credits\u2014
+
+
+
Awaiting data...
+
+
+
Awaiting data...
+
+
+
+
+
Augmentations
+
Ratings
+
Other
+
+
+
Awaiting data...
+
+
+
Awaiting data...
+
+
+
Awaiting data...
+
+
+
+
+
Allegiance
+
Awaiting data...
+
+ `; + + // Wire up tab switching + const leftTabs = document.getElementById(`charTabLeft-${esc}`); + const rightTabs = document.getElementById(`charTabRight-${esc}`); + if (leftTabs) _tsSetupTabs(leftTabs); + if (rightTabs) _tsSetupTabs(rightTabs); + + // Fetch existing data from API + fetch(`${API_BASE}/character-stats/${encodeURIComponent(name)}`) + .then(r => r.ok ? r.json() : null) + .then(data => { + if (data && !data.error) { + characterStats[name] = data; + updateCharacterWindow(name, data); + } + }) + .catch(err => handleError('Character stats', err)); + + // If we already have vitals from the live stream, apply them + if (characterVitals[name]) { + updateCharacterVitals(name, characterVitals[name]); + } +} + +function updateCharacterWindow(name, data) { + const esc = CSS.escape(name); + const fmt = n => n != null ? n.toLocaleString() : '\u2014'; + + // -- Header -- + const header = document.getElementById(`charHeader-${esc}`); + if (header) { + const level = data.level || '?'; + const race = data.race || ''; + const gender = data.gender || ''; + const parts = [gender, race].filter(Boolean).join(' '); + header.querySelector('.ts-subtitle').textContent = parts || 'Awaiting data...'; + const levelSpan = header.querySelector('.ts-level'); + if (levelSpan) levelSpan.textContent = level; + } + + // -- XP / Luminance row -- + const xplum = document.getElementById(`charXpLum-${esc}`); + if (xplum) { + const divs = xplum.querySelectorAll('div'); + if (divs[0]) divs[0].textContent = `Total XP: ${fmt(data.total_xp)}`; + if (divs[1]) divs[1].textContent = `Unassigned XP: ${fmt(data.unassigned_xp)}`; + if (divs[2]) { + const lum = data.luminance_earned != null && data.luminance_total != null + ? `${fmt(data.luminance_earned)} / ${fmt(data.luminance_total)}` + : '\u2014'; + divs[2].textContent = `Luminance: ${lum}`; + } + if (divs[3]) divs[3].textContent = `Deaths: ${fmt(data.deaths)}`; + } + + // -- Attributes table -- + const attribTable = document.getElementById(`charAttribTable-${esc}`); + if (attribTable && data.attributes) { + const order = ['strength', 'endurance', 'coordination', 'quickness', 'focus', 'self']; + const rows = attribTable.querySelectorAll('tr:not(.ts-colnames)'); + order.forEach((attr, i) => { + if (rows[i] && data.attributes[attr]) { + const cells = rows[i].querySelectorAll('td'); + if (cells[1]) cells[1].textContent = data.attributes[attr].creation ?? '\u2014'; + if (cells[2]) cells[2].textContent = data.attributes[attr].base ?? '\u2014'; + } + }); + } + + // -- Vitals table (base values) -- + const vitalsTable = document.getElementById(`charVitalsTable-${esc}`); + if (vitalsTable && data.vitals) { + const vOrder = ['health', 'stamina', 'mana']; + const vRows = vitalsTable.querySelectorAll('tr:not(.ts-colnames)'); + vOrder.forEach((v, i) => { + if (vRows[i] && data.vitals[v]) { + const cells = vRows[i].querySelectorAll('td'); + if (cells[1]) cells[1].textContent = data.vitals[v].base ?? '\u2014'; + } + }); + } + + // -- Skill credits -- + const creditsTable = document.getElementById(`charCredits-${esc}`); + if (creditsTable) { + const cell = creditsTable.querySelector('td.ts-headerright'); + if (cell) cell.textContent = fmt(data.skill_credits); + } + + // -- Skills tab -- + const skillsBox = document.getElementById(`charSkills-${esc}`); + if (skillsBox && data.skills) { + const grouped = { Specialized: [], Trained: [] }; + for (const [skill, info] of Object.entries(data.skills)) { + const training = info.training || 'Untrained'; + if (training === 'Untrained' || training === 'Unusable') continue; + const displayName = skill.replace(/_/g, ' ').replace(/\b\w/g, c => c.toUpperCase()); + if (grouped[training]) grouped[training].push({ name: displayName, base: info.base }); + } + for (const g of Object.values(grouped)) g.sort((a, b) => a.name.localeCompare(b.name)); + + let html = ''; + html += ''; + if (grouped.Specialized.length) { + for (const s of grouped.Specialized) { + html += ``; + } + } + if (grouped.Trained.length) { + for (const s of grouped.Trained) { + html += ``; + } + } + html += '
SkillLevel
${s.name}${s.base}
${s.name}${s.base}
'; + skillsBox.innerHTML = html; + } + + // -- Titles tab -- + const titlesBox = document.getElementById(`charTitles-${esc}`); + if (titlesBox) { + const statsData = data.stats_data || data; + const titles = statsData.titles; + if (titles && titles.length > 0) { + let html = '
'; + for (const t of titles) html += `
${t}
`; + html += '
'; + titlesBox.innerHTML = html; + } else { + titlesBox.innerHTML = '
No titles data
'; + } + } + + // -- Properties-based tabs (Augmentations, Ratings, Other) -- + const statsData = data.stats_data || data; + const props = statsData.properties || {}; + + // Augmentations tab + const augsBox = document.getElementById(`charAugs-${esc}`); + if (augsBox) { + let augRows = [], auraRows = []; + for (const [id, val] of Object.entries(props)) { + const nid = parseInt(id); + if (TS_AUGMENTATIONS[nid] && val > 0) augRows.push({ name: TS_AUGMENTATIONS[nid], uses: val }); + if (TS_AURAS[nid] && val > 0) auraRows.push({ name: TS_AURAS[nid], uses: val }); + } + if (augRows.length || auraRows.length) { + let html = ''; + if (augRows.length) { + html += '
Augmentations
'; + html += ''; + for (const a of augRows) html += ``; + html += '
NameUses
${a.name}${a.uses}
'; + } + if (auraRows.length) { + html += '
Auras
'; + html += ''; + for (const a of auraRows) html += ``; + html += '
NameUses
${a.name}${a.uses}
'; + } + augsBox.innerHTML = html; + } else { + augsBox.innerHTML = '
No augmentation data
'; + } + } + + // Ratings tab + const ratingsBox = document.getElementById(`charRatings-${esc}`); + if (ratingsBox) { + let rows = []; + for (const [id, val] of Object.entries(props)) { + const nid = parseInt(id); + if (TS_RATINGS[nid] && val > 0) rows.push({ name: TS_RATINGS[nid], value: val }); + } + if (rows.length) { + let html = ''; + for (const r of rows) html += ``; + html += '
RatingValue
${r.name}${r.value}
'; + ratingsBox.innerHTML = html; + } else { + ratingsBox.innerHTML = '
No rating data
'; + } + } + + // Other tab (General, Masteries, Society) + const otherBox = document.getElementById(`charOther-${esc}`); + if (otherBox) { + let html = ''; + + // General section + let generalRows = []; + if (data.birth) generalRows.push({ name: 'Birth', value: data.birth }); + if (data.deaths != null) generalRows.push({ name: 'Deaths', value: fmt(data.deaths) }); + for (const [id, val] of Object.entries(props)) { + const nid = parseInt(id); + if (TS_GENERAL[nid]) generalRows.push({ name: TS_GENERAL[nid], value: val }); + } + if (generalRows.length) { + html += '
General
'; + html += ''; + for (const r of generalRows) html += ``; + html += '
${r.name}${r.value}
'; + } + + // Masteries section + let masteryRows = []; + for (const [id, val] of Object.entries(props)) { + const nid = parseInt(id); + if (TS_MASTERIES[nid]) { + const mName = TS_MASTERY_NAMES[val] || `Unknown (${val})`; + masteryRows.push({ name: TS_MASTERIES[nid], value: mName }); + } + } + if (masteryRows.length) { + html += '
Masteries
'; + html += ''; + for (const m of masteryRows) html += ``; + html += '
${m.name}${m.value}
'; + } + + // Society section + let societyRows = []; + for (const [id, val] of Object.entries(props)) { + const nid = parseInt(id); + if (TS_SOCIETY[nid] && val > 0) { + societyRows.push({ name: TS_SOCIETY[nid], rank: _tsSocietyRank(val), value: val }); + } + } + if (societyRows.length) { + html += '
Society
'; + html += ''; + for (const s of societyRows) html += ``; + html += '
${s.name}${s.rank} (${s.value})
'; + } + + otherBox.innerHTML = html || '
No additional data
'; + } + + // -- Allegiance section -- + const allegDiv = document.getElementById(`charAllegiance-${esc}`); + if (allegDiv && data.allegiance) { + const a = data.allegiance; + let html = '
Allegiance
'; + html += ''; + if (a.name) html += ``; + if (a.monarch) html += ``; + if (a.patron) html += ``; + if (a.rank !== undefined) html += ``; + if (a.followers !== undefined) html += ``; + html += '
Name${a.name}
Monarch${a.monarch.name || '\u2014'}
Patron${a.patron.name || '\u2014'}
Rank${a.rank}
Followers${a.followers}
'; + allegDiv.innerHTML = html; + } +} + +function updateCharacterVitals(name, vitals) { + const esc = CSS.escape(name); + const vitalsDiv = document.getElementById(`charVitals-${esc}`); + if (!vitalsDiv) return; + + const vitalElements = vitalsDiv.querySelectorAll('.ts-vital'); + + if (vitalElements[0]) { + const fill = vitalElements[0].querySelector('.ts-vital-fill'); + const txt = vitalElements[0].querySelector('.ts-vital-text'); + if (fill) fill.style.width = `${vitals.health_percentage || 0}%`; + if (txt && vitals.health_current !== undefined) { + txt.textContent = `${vitals.health_current} / ${vitals.health_max}`; + } + } + if (vitalElements[1]) { + const fill = vitalElements[1].querySelector('.ts-vital-fill'); + const txt = vitalElements[1].querySelector('.ts-vital-text'); + if (fill) fill.style.width = `${vitals.stamina_percentage || 0}%`; + if (txt && vitals.stamina_current !== undefined) { + txt.textContent = `${vitals.stamina_current} / ${vitals.stamina_max}`; + } + } + if (vitalElements[2]) { + const fill = vitalElements[2].querySelector('.ts-vital-fill'); + const txt = vitalElements[2].querySelector('.ts-vital-text'); + if (fill) fill.style.width = `${vitals.mana_percentage || 0}%`; + if (txt && vitals.mana_current !== undefined) { + txt.textContent = `${vitals.mana_current} / ${vitals.mana_max}`; + } + } +} + +// Inventory tooltip functions +let inventoryTooltip = null; + +function showInventoryTooltip(e, slot) { + if (!inventoryTooltip) { + inventoryTooltip = document.createElement('div'); + inventoryTooltip.className = 'inventory-tooltip'; + document.body.appendChild(inventoryTooltip); + } + + const name = slot.dataset.name; + const value = parseInt(slot.dataset.value) || 0; + const burden = parseInt(slot.dataset.burden) || 0; + + // Build enhanced tooltip + let tooltipHTML = `
${name}
`; + + // Basic stats + tooltipHTML += `
`; + tooltipHTML += `
Value: ${value.toLocaleString()}
`; + tooltipHTML += `
Burden: ${burden}
`; + + // Add workmanship right after basic stats for weapons/items + if (slot.dataset.enhancedData) { + try { + const enhanced = JSON.parse(slot.dataset.enhancedData); + if (enhanced.workmanship_text) { + tooltipHTML += `
Workmanship: ${enhanced.workmanship_text}
`; + } + } catch (e) { + // Ignore parsing errors for this section + } + } + + tooltipHTML += `
`; + + // Enhanced data from inventory service + if (slot.dataset.enhancedData) { + try { + const enhanced = JSON.parse(slot.dataset.enhancedData); + + // Only show enhanced sections if we have enhanced data + if (Object.keys(enhanced).length > 0) { + + // Helper function to check for valid values + const isValid = (val) => val !== undefined && val !== null && val !== -1 && val !== -1.0; + + // Weapon-specific stats section (for weapons) + if (enhanced.damage_range || enhanced.speed_text || enhanced.equip_skill_name) { + tooltipHTML += `
`; + + // Skill requirement + if (enhanced.equip_skill_name) { + tooltipHTML += `
Skill: ${enhanced.equip_skill_name}
`; + } + + // Damage with type + if (enhanced.damage_range && enhanced.damage_type) { + const damageText = enhanced.damage_type !== 'Physical' ? + `${enhanced.damage_range}, ${enhanced.damage_type}` : + enhanced.damage_range; + tooltipHTML += `
Damage: ${damageText}
`; + } + + // Speed + if (enhanced.speed_text) { + tooltipHTML += `
Speed: ${enhanced.speed_text}
`; + } + + // Attack and defense bonuses (as percentages) + if (isValid(enhanced.attack_bonus)) { + const attackPercent = ((enhanced.attack_bonus - 1) * 100).toFixed(1); + if (attackPercent !== "0.0") { + tooltipHTML += `
Bonus to Attack Skill: ${attackPercent > 0 ? '+' : ''}${attackPercent}%
`; + } + } + + // Defense bonuses + if (enhanced.melee_defense_bonus && isValid(enhanced.melee_defense_bonus)) { + const defensePercent = ((enhanced.melee_defense_bonus - 1) * 100).toFixed(1); + if (defensePercent !== "0.0") { + tooltipHTML += `
Bonus to Melee Defense: ${defensePercent > 0 ? '+' : ''}${defensePercent}%
`; + } + } + + // Magic defense bonus + if (enhanced.magic_defense_bonus && isValid(enhanced.magic_defense_bonus)) { + const magicDefensePercent = ((enhanced.magic_defense_bonus - 1) * 100).toFixed(1); + if (magicDefensePercent !== "0.0") { + tooltipHTML += `
Bonus to Magic Defense: ${magicDefensePercent > 0 ? '+' : ''}${magicDefensePercent}%
`; + } + } + + // Elemental damage vs monsters + if (enhanced.elemental_damage_vs_monsters && isValid(enhanced.elemental_damage_vs_monsters)) { + const elementalPercent = ((enhanced.elemental_damage_vs_monsters - 1) * 100).toFixed(1); + if (elementalPercent !== "0.0") { + tooltipHTML += `
Elemental Damage vs Monsters: ${elementalPercent > 0 ? '+' : ''}${elementalPercent}%
`; + } + } + + tooltipHTML += `
`; + } + + // Traditional combat stats section (for non-weapons or additional stats) + const combatProps = []; + if (isValid(enhanced.armor_level)) combatProps.push(`Armor Level: ${enhanced.armor_level}`); + if (!enhanced.damage_range && isValid(enhanced.max_damage)) combatProps.push(`Max Damage: ${enhanced.max_damage}`); + if (!enhanced.attack_bonus && isValid(enhanced.damage_bonus)) combatProps.push(`Damage Bonus: ${enhanced.damage_bonus.toFixed(1)}`); + + if (combatProps.length > 0) { + tooltipHTML += `
Combat Stats
`; + combatProps.forEach(prop => { + tooltipHTML += `
${prop}
`; + }); + tooltipHTML += `
`; + } + + // Requirements section + const reqProps = []; + if (isValid(enhanced.wield_level)) reqProps.push(`Level Required: ${enhanced.wield_level}`); + if (isValid(enhanced.skill_level)) reqProps.push(`Skill Level: ${enhanced.skill_level}`); + if (enhanced.equip_skill_name) reqProps.push(`Skill: ${enhanced.equip_skill_name}`); + if (isValid(enhanced.lore_requirement)) reqProps.push(`Lore: ${enhanced.lore_requirement}`); + + if (reqProps.length > 0) { + tooltipHTML += `
Requirements
`; + reqProps.forEach(prop => { + tooltipHTML += `
${prop}
`; + }); + tooltipHTML += `
`; + } + + // Enhancement section + const enhanceProps = []; + if (enhanced.material_name) enhanceProps.push(`Material: ${enhanced.material_name}`); + if (enhanced.imbue) enhanceProps.push(`Imbue: ${enhanced.imbue}`); + if (enhanced.item_set) enhanceProps.push(`Set: ${enhanced.item_set}`); + if (isValid(enhanced.tinks)) enhanceProps.push(`Tinks: ${enhanced.tinks}`); + // Use workmanship_text if available, otherwise numeric value + if (enhanced.workmanship_text) { + enhanceProps.push(`Workmanship: ${enhanced.workmanship_text}`); + } else if (isValid(enhanced.workmanship)) { + enhanceProps.push(`Workmanship: ${enhanced.workmanship.toFixed(1)}`); + } + + if (enhanceProps.length > 0) { + tooltipHTML += `
Enhancements
`; + enhanceProps.forEach(prop => { + tooltipHTML += `
${prop}
`; + }); + tooltipHTML += `
`; + } + + // Ratings section + const ratingProps = []; + if (isValid(enhanced.damage_rating)) ratingProps.push(`Damage Rating: ${enhanced.damage_rating}`); + if (isValid(enhanced.crit_rating)) ratingProps.push(`Crit Rating: ${enhanced.crit_rating}`); + if (isValid(enhanced.heal_boost_rating)) ratingProps.push(`Heal Boost: ${enhanced.heal_boost_rating}`); + + if (ratingProps.length > 0) { + tooltipHTML += `
Ratings
`; + ratingProps.forEach(prop => { + tooltipHTML += `
${prop}
`; + }); + tooltipHTML += `
`; + } + + // Spells section (condensed list) + if (enhanced.spells && enhanced.spells.spells && enhanced.spells.spells.length > 0) { + const spellNames = enhanced.spells.spells.map(spell => spell.name).join(', '); + tooltipHTML += `
`; + tooltipHTML += `
Spells: ${spellNames}
`; + tooltipHTML += `
`; + } + + // Mana and Spellcraft section + if (enhanced.mana_display || enhanced.spellcraft) { + tooltipHTML += `
`; + if (enhanced.spellcraft) { + tooltipHTML += `
Spellcraft: ${enhanced.spellcraft}
`; + } + if (enhanced.mana_display) { + tooltipHTML += `
Mana: ${enhanced.mana_display}
`; + } + tooltipHTML += `
`; + } + + // Detailed Spell Descriptions section + if (enhanced.spells && enhanced.spells.spells && enhanced.spells.spells.length > 0) { + tooltipHTML += `
Spell Descriptions
`; + enhanced.spells.spells.forEach(spell => { + tooltipHTML += `
`; + tooltipHTML += `
${spell.name}
`; + if (spell.description) { + tooltipHTML += `
${spell.description}
`; + } + tooltipHTML += `
`; + }); + tooltipHTML += `
`; + } + + // Object class info + if (enhanced.object_class_name) { + tooltipHTML += `
`; + tooltipHTML += `
Type: ${enhanced.object_class_name}
`; + tooltipHTML += `
`; + } + + } // End of enhanced data check + + } catch (e) { + console.warn('Failed to parse enhanced tooltip data', e); + } + } + + inventoryTooltip.innerHTML = tooltipHTML; + + // Position tooltip near cursor + const x = e.clientX + 10; + const y = e.clientY + 10; + inventoryTooltip.style.left = `${x}px`; + inventoryTooltip.style.top = `${y}px`; + inventoryTooltip.style.display = 'block'; +} + +function hideInventoryTooltip() { + if (inventoryTooltip) { + inventoryTooltip.style.display = 'none'; + } +} + + +const applyTransform = () => + group.style.transform = `translate(${offX}px,${offY}px) scale(${scale})`; + +function clampPan() { + if (!imgW) return; + const r = wrap.getBoundingClientRect(); + const vw = r.width, vh = r.height; + const mw = imgW * scale, mh = imgH * scale; + + offX = mw <= vw ? (vw - mw) / 2 : Math.min(0, Math.max(vw - mw, offX)); + offY = mh <= vh ? (vh - mh) / 2 : Math.min(0, Math.max(vh - mh, offY)); +} + +function updateView() { + clampPan(); + applyTransform(); + + // Throttled heat map re-rendering during pan/zoom + if (heatmapEnabled && heatmapData && !heatTimeout) { + heatTimeout = setTimeout(() => { + renderHeatmap(); + heatTimeout = null; + }, HEAT_THROTTLE); + } +} + +let pendingFrame = null; +function scheduleViewUpdate() { + if (!pendingFrame) { + pendingFrame = requestAnimationFrame(() => { + updateView(); + pendingFrame = null; + }); + } +} + +function fitToWindow() { + const r = wrap.getBoundingClientRect(); + scale = Math.min(r.width / imgW, r.height / imgH); + minScale = scale; + updateView(); +} + +/* ---------- tooltip handlers ------------------------------------ */ +function showTooltip(evt, p) { + tooltip.textContent = `${p.character_name} — Kills: ${p.kills} - Kills/h: ${p.kills_per_hour}`; + const r = wrap.getBoundingClientRect(); + tooltip.style.left = `${evt.clientX - r.left + 10}px`; + tooltip.style.top = `${evt.clientY - r.top + 10}px`; + tooltip.style.display = 'block'; +} +function hideTooltip() { + tooltip.style.display = 'none'; +} + +/* ---------- polling and initialization -------------------------- */ +async function pollLive() { + try { + const [liveRes, trailsRes] = await Promise.all([ + fetch(`${API_BASE}/live/`), + fetch(`${API_BASE}/trails/?seconds=600`), + ]); + const { players } = await liveRes.json(); + const { trails } = await trailsRes.json(); + currentPlayers = players; + renderTrails(trails); + renderList(); + } catch (e) { + handleError('Player update', e); + } +} + +async function pollTotalRares() { + try { + const response = await fetch(`${API_BASE}/total-rares/`); + const data = await response.json(); + updateTotalRaresDisplay(data); + } catch (e) { + handleError('Rare counter', e); + } +} + +function updateTotalRaresDisplay(data) { + const countElement = document.getElementById('totalRaresCount'); + if (countElement && data.all_time !== undefined && data.today !== undefined) { + const allTimeFormatted = data.all_time.toLocaleString(); + const todayFormatted = data.today.toLocaleString(); + countElement.textContent = `${allTimeFormatted} (Today: ${todayFormatted})`; + } +} + +async function pollTotalKills() { + try { + const response = await fetch(`${API_BASE}/total-kills/`); + const data = await response.json(); + updateTotalKillsDisplay(data); + } catch (e) { + handleError('Kill counter', e); + } +} + +function updateTotalKillsDisplay(data) { + const killsElement = document.getElementById('totalKillsCount'); + if (killsElement && data.total !== undefined) { + killsElement.textContent = data.total.toLocaleString(); + } +} + +async function pollServerHealth() { + try { + const response = await fetch(`${API_BASE}/server-health`); + const data = await response.json(); + updateServerStatusDisplay(data); + } catch (e) { + handleError('Server health', e); + updateServerStatusDisplay({ status: 'error' }); + } +} + +function updateServerStatusDisplay(data) { + const statusDot = document.getElementById('statusDot'); + const statusText = document.getElementById('statusText'); + const playerCount = document.getElementById('playerCount'); + const latencyMs = document.getElementById('latencyMs'); + const uptime = document.getElementById('uptime'); + const lastRestart = document.getElementById('lastRestart'); + + if (!statusDot || !statusText) return; + + // Update status indicator + const status = data.status || 'unknown'; + statusDot.className = `status-dot status-${status}`; + statusText.textContent = status.charAt(0).toUpperCase() + status.slice(1); + + // Update player count + if (playerCount) { + playerCount.textContent = data.player_count !== null && data.player_count !== undefined ? data.player_count : '-'; + } + + // Update latency + if (latencyMs) { + latencyMs.textContent = data.latency_ms ? Math.round(data.latency_ms) : '-'; + } + + // Update uptime + if (uptime) { + uptime.textContent = data.uptime || '-'; + } + + // Update last restart with Stockholm timezone (24h format, no year) + if (lastRestart) { + if (data.last_restart) { + const restartDate = new Date(data.last_restart); + const formattedDate = restartDate.toLocaleString('sv-SE', { + timeZone: 'Europe/Stockholm', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + hour12: false + }); + lastRestart.textContent = formattedDate; + } else { + lastRestart.textContent = 'Unknown'; + } + } +} + +function handleServerStatusUpdate(msg) { + // Handle real-time server status updates via WebSocket + if (msg.status === 'up' && msg.message) { + // Show notification for server coming back online + debugLog(`Server Status: ${msg.message}`); + } + + // Trigger an immediate server health poll to refresh the display + pollServerHealth(); +} + +function startPolling() { + // Clear any existing intervals first (prevents leak on re-init) + pollIntervals.forEach(id => clearInterval(id)); + pollIntervals.length = 0; + + // Initial fetches + pollLive(); + pollTotalRares(); + pollTotalKills(); + pollServerHealth(); + + // Set up recurring polls + pollIntervals.push(setInterval(pollLive, POLL_MS)); + pollIntervals.push(setInterval(pollTotalRares, POLL_RARES_MS)); + pollIntervals.push(setInterval(pollTotalKills, POLL_KILLS_MS)); + pollIntervals.push(setInterval(pollServerHealth, POLL_HEALTH_MS)); +} + +img.onload = () => { + imgW = img.naturalWidth; + imgH = img.naturalHeight; + // size the SVG trails container to match the map dimensions + if (trailsContainer) { + trailsContainer.setAttribute('viewBox', `0 0 ${imgW} ${imgH}`); + trailsContainer.setAttribute('width', `${imgW}`); + trailsContainer.setAttribute('height', `${imgH}`); + } + fitToWindow(); + startPolling(); + initWebSocket(); + initHeatMap(); + initPortalMap(); +}; + +// Ensure server health polling starts regardless of image loading +document.addEventListener('DOMContentLoaded', () => { + // Start server health polling immediately on DOM ready + pollServerHealth(); +}); + +/* ---------- rendering sorted list & dots ------------------------ */ +/** + * Filter and sort the currentPlayers, then render them. + */ +function renderList() { + // Filter by name prefix + const filtered = currentPlayers.filter(p => + p.character_name.toLowerCase().startsWith(currentFilter) + ); + // Sort filtered list + filtered.sort(currentSort.comparator); + const sorted = filtered; + render(sorted); +} + +// Track when user might be interacting to avoid DOM manipulation during clicks +let userInteracting = false; +let interactionTimeout = null; + +// Add global mousedown/mouseup tracking to detect when user is clicking +document.addEventListener('mousedown', () => { + userInteracting = true; + if (interactionTimeout) clearTimeout(interactionTimeout); +}); + +document.addEventListener('mouseup', () => { + // Give a small buffer after mouseup to ensure click events complete + if (interactionTimeout) clearTimeout(interactionTimeout); + interactionTimeout = setTimeout(() => { + userInteracting = false; + }, 50); // 50ms buffer +}); + +function render(players) { + const startTime = performance.now(); + debugLog('🔄 RENDER STARTING:', new Date().toISOString()); + + // If user is actively clicking, defer this render briefly + if (userInteracting) { + debugLog('🔄 RENDER DEFERRED: User interaction detected'); + setTimeout(() => render(players), 100); + return; + } + + // Reset per-render stats + performanceStats.renderDotsCreated = 0; + performanceStats.renderDotsReused = 0; + performanceStats.renderListItemsCreated = 0; + performanceStats.renderListItemsReused = 0; + performanceStats.renderCount++; + + // Get existing elements and map them by player name for reuse + const existingDots = Array.from(dots.children); + const existingListItems = Array.from(list.children); + + // Create maps for efficient lookup by player name + const dotsByPlayer = new Map(); + const listItemsByPlayer = new Map(); + + existingDots.forEach(dot => { + if (dot.playerData && dot.playerData.character_name) { + dotsByPlayer.set(dot.playerData.character_name, dot); + } + }); + + existingListItems.forEach(li => { + if (li.playerData && li.playerData.character_name) { + listItemsByPlayer.set(li.playerData.character_name, li); + } + }); + + + // DON'T clear containers - we need to reuse elements + + // Update header with active player count + const header = document.getElementById('activePlayersHeader'); + if (header) { + header.textContent = `Active Mosswart Enjoyers (${players.length})`; + } + + // Calculate and update server KPH + const totalKPH = players.reduce((sum, p) => sum + (p.kills_per_hour || 0), 0); + const kphElement = document.getElementById('serverKphCount'); + if (kphElement) { + // Format with commas and one decimal place for EPIC display + const formattedKPH = totalKPH.toLocaleString('en-US', { + minimumFractionDigits: 1, + maximumFractionDigits: 1 + }); + kphElement.textContent = formattedKPH; + + // Add extra epic effect for high KPH + const container = document.getElementById('serverKphCounter'); + if (container) { + if (totalKPH > 5000) { + container.classList.add('ultra-epic'); + } else { + container.classList.remove('ultra-epic'); + } + } + } + + // Total kills is now fetched from the /total-kills/ API endpoint + // (see pollTotalKills function) to include ALL characters, not just online ones + + players.forEach((p) => { + const { x, y } = worldToPx(p.ew, p.ns); + + // Reuse existing dot by player name or create new one + let dot = dotsByPlayer.get(p.character_name); + if (!dot) { + dot = createNewDot(); + dots.appendChild(dot); + } else { + performanceStats.dotsReused++; + performanceStats.renderDotsReused++; + // Remove from the map so we don't count it as unused later + dotsByPlayer.delete(p.character_name); + } + + // Update dot properties + dot.style.left = `${x}px`; + dot.style.top = `${y}px`; + dot.style.background = getColorFor(p.character_name); + dot.playerData = p; // Store for event handlers + + // Update highlight state + if (p.character_name === selected) { + dot.classList.add('highlight'); + } else { + dot.classList.remove('highlight'); + } + + // Reuse existing list item by player name or create new one + let li = listItemsByPlayer.get(p.character_name); + if (!li) { + li = createNewListItem(); + list.appendChild(li); + } else { + performanceStats.listItemsReused++; + performanceStats.renderListItemsReused++; + // Remove from the map so we don't count it as unused later + listItemsByPlayer.delete(p.character_name); + } + + const color = getColorFor(p.character_name); + li.style.borderLeftColor = color; + li.playerData = p; // Store for event handlers BEFORE any DOM movement + + // Also store playerData directly on buttons for more reliable access + if (li.chatBtn) li.chatBtn.playerData = p; + if (li.statsBtn) li.statsBtn.playerData = p; + if (li.inventoryBtn) li.inventoryBtn.playerData = p; + if (li.radarBtn) li.radarBtn.playerData = p; + + // Only reorder element if it's actually out of place for current sort order + // Check if this element needs to be moved to maintain sort order + const expectedIndex = players.indexOf(p); + const currentIndex = Array.from(list.children).indexOf(li); + + if (currentIndex !== expectedIndex && li.parentNode) { + // Find the correct position to insert + if (expectedIndex === players.length - 1) { + // Should be last - only move if it's not already last + if (li !== list.lastElementChild) { + list.appendChild(li); + } + } else { + // Should be at a specific position + const nextPlayer = players[expectedIndex + 1]; + const nextElement = Array.from(list.children).find(el => + el.playerData && el.playerData.character_name === nextPlayer.character_name + ); + if (nextElement && li.nextElementSibling !== nextElement) { + list.insertBefore(li, nextElement); + } + } + } + + // Calculate KPR (Kills Per Rare) + const playerTotalKills = p.total_kills || 0; + const totalRares = p.total_rares || 0; + const kpr = totalRares > 0 ? Math.round(playerTotalKills / totalRares) : '∞'; + + // Update only the grid content via innerHTML (buttons preserved) + li.gridContent.innerHTML = ` + ${p.character_name}${createVitaeIndicator(p.character_name)} ${loc(p.ns, p.ew)} + ${createVitalsHTML(p.character_name)} + ${p.kills} + ${p.total_kills || 0} + ${p.kills_per_hour} + ${p.session_rares}/${p.total_rares} + ${kpr} + ${p.vt_state} + ${p.onlinetime} + ${p.deaths}/${p.total_deaths || 0} + ${p.prismatic_taper_count || 0} + `; + + // Color the metastate pill according to its value + const metaSpan = li.querySelector('.stat.meta'); + if (metaSpan) { + const goodStates = ['default', 'default2', 'hunt', 'combat']; + const state = (p.vt_state || '').toString().toLowerCase(); + metaSpan.classList.remove('green', 'red'); // Clear previous + if (goodStates.includes(state)) { + metaSpan.classList.add('green'); + } else { + metaSpan.classList.add('red'); + } + } + + // Update selected state + if (p.character_name === selected) { + li.classList.add('selected'); + } else { + li.classList.remove('selected'); + } + }); + + // Remove unused elements (any elements left in the maps are unused) + // These are dots for players that are no longer in the current player list + dotsByPlayer.forEach((dot, playerName) => { + dots.removeChild(dot); + }); + + // These are list items for players that are no longer in the current player list + listItemsByPlayer.forEach((li, playerName) => { + list.removeChild(li); + }); + + // Update performance stats + performanceStats.lastRenderTime = performance.now() - startTime; + + // Determine optimization status + const totalCreatedThisRender = performanceStats.renderDotsCreated + performanceStats.renderListItemsCreated; + const totalReusedThisRender = performanceStats.renderDotsReused + performanceStats.renderListItemsReused; + const isOptimized = totalCreatedThisRender === 0 && totalReusedThisRender > 0; + const isPartiallyOptimized = totalCreatedThisRender < players.length && totalReusedThisRender > 0; + + // Choose icon and color + let statusIcon = '🚀'; + let colorStyle = ''; + if (isOptimized) { + statusIcon = '✨'; + colorStyle = 'background: #1a4a1a; color: #4ade80; font-weight: bold;'; + } else if (isPartiallyOptimized) { + statusIcon = '⚡'; + colorStyle = 'background: #4a3a1a; color: #fbbf24; font-weight: bold;'; + } else { + statusIcon = '🔥'; + colorStyle = 'background: #4a1a1a; color: #f87171; font-weight: bold;'; + } + + // Performance stats are tracked but not logged to keep console clean + // Optimization is achieving 100% element reuse consistently + + const renderTime = performance.now() - startTime; + debugLog('🔄 RENDER COMPLETED:', renderTime.toFixed(2) + 'ms'); +} + +/* ---------- rendering trails ------------------------------- */ +function renderTrails(trailData) { + trailsContainer.innerHTML = ''; + // Build point strings directly - avoid intermediate arrays + const byChar = {}; + for (const pt of trailData) { + const { x, y } = worldToPx(pt.ew, pt.ns); + const key = pt.character_name; + if (!byChar[key]) byChar[key] = { points: `${x},${y}`, count: 1 }; + else { byChar[key].points += ` ${x},${y}`; byChar[key].count++; } + } + for (const name in byChar) { + if (byChar[name].count < 2) continue; + const poly = document.createElementNS('http://www.w3.org/2000/svg', 'polyline'); + poly.setAttribute('points', byChar[name].points); + poly.setAttribute('stroke', getColorFor(name)); + poly.setAttribute('fill', 'none'); + poly.setAttribute('class', 'trail-path'); + trailsContainer.appendChild(poly); + } +} +/* ---------- selection centering, focus zoom & blink ------------ */ +function selectPlayer(p, x, y) { + selected = p.character_name; + // set focus zoom + scale = Math.min(MAX_Z, Math.max(minScale, FOCUS_ZOOM)); + // center on the player + const r = wrap.getBoundingClientRect(); + offX = r.width / 2 - x * scale; + offY = r.height / 2 - y * scale; + updateView(); + renderList(); // keep sorted + highlight +} + +/* + * ---------- Chat & Command WebSocket Handlers ------------------ + * Maintains a persistent WebSocket connection to the /ws/live endpoint + * for receiving chat messages and sending user commands to plugin clients. + * Reconnects automatically on close and logs errors. + */ +// Initialize WebSocket for chat and command streams +function initWebSocket() { + const protocol = location.protocol === 'https:' ? 'wss:' : 'ws:'; + const wsUrl = `${protocol}//${location.host}${API_BASE}/ws/live`; + socket = new WebSocket(wsUrl); + socket.addEventListener('message', evt => { + let msg; + try { msg = JSON.parse(evt.data); } catch { return; } + if (msg.type === 'chat') { + appendChatMessage(msg); + } else if (msg.type === 'vitals') { + updateVitalsDisplay(msg); + } else if (msg.type === 'rare') { + triggerEpicRareNotification(msg.character_name, msg.name); + } else if (msg.type === 'character_stats') { + characterStats[msg.character_name] = msg; + updateCharacterWindow(msg.character_name, msg); + if (inventoryWindows[msg.character_name] && inventoryWindows[msg.character_name]._inventoryState) { + renderInventoryState(inventoryWindows[msg.character_name]._inventoryState); + } + } else if (msg.type === 'equipment_cantrip_state') { + equipmentCantripStates[msg.character_name] = msg; + if (inventoryWindows[msg.character_name] && inventoryWindows[msg.character_name]._inventoryState) { + renderInventoryState(inventoryWindows[msg.character_name]._inventoryState); + } + } else if (msg.type === 'inventory_delta') { + updateInventoryLive(msg); + } else if (msg.type === 'server_status') { + handleServerStatusUpdate(msg); + } else if (msg.type === 'nearby_objects') { + updateRadarWindow(msg); + } else if (msg.type === 'dungeon_map') { + if (msg.landblock) { + dungeonMapCache[msg.landblock] = msg; + // Update active radar window for this character + const rw = radarWindows[msg.character_name]; + if (rw) rw._radarDungeonLandblock = msg.landblock; + } + } else if (msg.type === 'combat_stats') { + liveCombatStats[msg.character_name] = msg; + updateCombatStatsWindows(msg.character_name); + } else if (msg.type === 'share_peer_removed') { + removeVitalSharingPeer(msg.character_name); + } else if (typeof msg.type === 'string' && msg.type.startsWith('share_')) { + updateVitalSharingPeer(msg); + } + }); + socket.addEventListener('close', () => setTimeout(initWebSocket, 2000)); + socket.addEventListener('error', e => handleError('WebSocket', e)); +} + +// Display or create a chat window for a character +function showChatWindow(name) { + debugLog('showChatWindow called for:', name); + const windowId = `chatWindow-${name}`; + + const { win, content, isNew } = createWindow( + windowId, `Chat: ${name}`, 'chat-window' + ); + + if (!isNew) { + debugLog('Existing chat window found, showing it'); + return; + } + + win.dataset.character = name; + chatWindows[name] = win; + + // Messages container + const msgs = document.createElement('div'); + msgs.className = 'chat-messages'; + content.appendChild(msgs); + + // Input form + const form = document.createElement('form'); + form.className = 'chat-form'; + const input = document.createElement('input'); + input.type = 'text'; + input.className = 'chat-input'; + input.placeholder = 'Enter chat...'; + form.appendChild(input); + form.addEventListener('submit', e => { + e.preventDefault(); + const text = input.value.trim(); + if (!text) return; + // Send command envelope: player_name and command only + socket.send(JSON.stringify({ player_name: name, command: text })); + input.value = ''; + }); + content.appendChild(form); + + debugLog('Chat window created for:', name); +} + +// Append a chat message to the correct window +/** + * Append a chat message to the correct window, optionally coloring the text. + * msg: { type: 'chat', character_name, text, color? } + */ +function appendChatMessage(msg) { + const { character_name: name, text, color } = msg; + const win = chatWindows[name]; + if (!win) return; + const msgs = win.querySelector('.chat-messages'); + const p = document.createElement('div'); + if (color !== undefined) { + let c = color; + if (typeof c === 'number') { + // map numeric chat code to configured color, or fallback to raw hex + if (CHAT_COLOR_MAP.hasOwnProperty(c)) { + c = CHAT_COLOR_MAP[c]; + } else { + c = '#' + c.toString(16).padStart(6, '0'); + } + } + p.style.color = c; + } + p.textContent = text; + msgs.appendChild(p); + // Enforce max number of lines in scrollback + while (msgs.children.length > MAX_CHAT_LINES) { + msgs.removeChild(msgs.firstChild); + } + // Scroll to bottom + msgs.scrollTop = msgs.scrollHeight; +} + +/* ---------- pan & zoom handlers -------------------------------- */ +wrap.addEventListener('wheel', e => { + e.preventDefault(); + if (!imgW) return; + + const r = wrap.getBoundingClientRect(); + const mx = (e.clientX - r.left - offX) / scale; + const my = (e.clientY - r.top - offY) / scale; + const factor = e.deltaY > 0 ? 0.9 : 1.1; + let ns = scale * factor; + ns = Math.max(minScale, Math.min(MAX_Z, ns)); + + offX -= mx * (ns - scale); + offY -= my * (ns - scale); + scale = ns; + scheduleViewUpdate(); +}, { passive: false }); + +wrap.addEventListener('mousedown', e => { + dragging = true; sx = e.clientX; sy = e.clientY; + wrap.classList.add('dragging'); +}); +window.addEventListener('mousemove', e => { + if (!dragging) return; + offX += e.clientX - sx; offY += e.clientY - sy; + sx = e.clientX; sy = e.clientY; + scheduleViewUpdate(); +}); +window.addEventListener('mouseup', () => { + dragging = false; wrap.classList.remove('dragging'); +}); + +wrap.addEventListener('touchstart', e => { + if (e.touches.length !== 1) return; + dragging = true; + sx = e.touches[0].clientX; sy = e.touches[0].clientY; +}); +wrap.addEventListener('touchmove', e => { + if (!dragging || e.touches.length !== 1) return; + const t = e.touches[0]; + offX += t.clientX - sx; offY += t.clientY - sy; + sx = t.clientX; sy = t.clientY; + scheduleViewUpdate(); +}); +wrap.addEventListener('touchend', () => { + dragging = false; +}); + +/* ---------- coordinate display on hover ---------------------------- */ +wrap.addEventListener('mousemove', e => { + if (!imgW) return; + + const r = wrap.getBoundingClientRect(); + const x = e.clientX - r.left; + const y = e.clientY - r.top; + + const { ew, ns } = pxToWorld(x, y); + + // Display coordinates using the same format as the existing loc function + coordinates.textContent = loc(ns, ew); + coordinates.style.left = `${x + 10}px`; + coordinates.style.top = `${y + 10}px`; + coordinates.style.display = 'block'; +}); + +wrap.addEventListener('mouseleave', () => { + coordinates.style.display = 'none'; +}); + +/* ---------- vitals display functions ----------------------------- */ +// Store vitals data per character +const characterVitals = {}; +const characterStats = {}; +const characterWindows = {}; + +function updateVitalsDisplay(vitalsMsg) { + // Store the vitals data for this character + characterVitals[vitalsMsg.character_name] = { + health_percentage: vitalsMsg.health_percentage, + stamina_percentage: vitalsMsg.stamina_percentage, + mana_percentage: vitalsMsg.mana_percentage, + health_current: vitalsMsg.health_current, + health_max: vitalsMsg.health_max, + stamina_current: vitalsMsg.stamina_current, + stamina_max: vitalsMsg.stamina_max, + mana_current: vitalsMsg.mana_current, + mana_max: vitalsMsg.mana_max, + vitae: vitalsMsg.vitae + }; + + // Re-render the player list to update vitals in the UI + renderList(); + + // Also update character window if open + updateCharacterVitals(vitalsMsg.character_name, characterVitals[vitalsMsg.character_name]); +} + +function createVitalsHTML(characterName) { + const vitals = characterVitals[characterName]; + if (!vitals) { + return ''; // No vitals data available + } + + return ` +
+
+
+
+
+
+
+
+
+
+
+ `; +} + +function createVitaeIndicator(characterName) { + const vitals = characterVitals[characterName]; + if (!vitals || !vitals.vitae || vitals.vitae >= 100) { + return ''; // No vitae penalty + } + + return `⚰️ ${vitals.vitae}%`; +} + +function getVitalClass(percentage) { + if (percentage <= 25) { + return 'critical-vital'; + } else if (percentage <= 50) { + return 'low-vital'; + } + return ''; +} + +/* ---------- epic rare notification system ------------------------ */ +// Track previous rare count to detect increases +let lastRareCount = 0; +let notificationQueue = []; +let isShowingNotification = false; + +function triggerEpicRareNotification(characterName, rareName) { + // Add to queue + notificationQueue.push({ characterName, rareName }); + + // Process queue if not already showing a notification + if (!isShowingNotification) { + processNotificationQueue(); + } + + // Trigger fireworks immediately + createFireworks(); + + // Highlight the player in the list + highlightRareFinder(characterName); +} + +function processNotificationQueue() { + if (notificationQueue.length === 0) { + isShowingNotification = false; + return; + } + + isShowingNotification = true; + const notification = notificationQueue.shift(); + + // Create notification element + const container = document.getElementById('rareNotifications'); + const notifEl = document.createElement('div'); + notifEl.className = 'rare-notification'; + notifEl.innerHTML = ` +
🎆 LEGENDARY RARE! 🎆
+
${notification.rareName}
+
found by
+
⚔️ ${notification.characterName} ⚔️
+ `; + + container.appendChild(notifEl); + + // Remove notification after display duration and process next + setTimeout(() => { + notifEl.style.animation = 'notification-slide-out 0.5s ease-in forwards'; + setTimeout(() => { + notifEl.remove(); + processNotificationQueue(); + }, 500); + }, NOTIFICATION_DURATION_MS); +} + +// Add slide out animation +const style = document.createElement('style'); +style.textContent = ` + @keyframes notification-slide-out { + to { + transform: translateY(-100px); + opacity: 0; + } + } +`; +document.head.appendChild(style); + +function createFireworks() { + const container = document.getElementById('fireworksContainer'); + const rareCounter = document.getElementById('totalRaresCounter'); + const rect = rareCounter.getBoundingClientRect(); + + // Create 30 particles + const particleCount = 30; + const colors = ['particle-gold', 'particle-red', 'particle-orange', 'particle-purple', 'particle-blue']; + + for (let i = 0; i < particleCount; i++) { + const particle = document.createElement('div'); + particle.className = `firework-particle ${colors[Math.floor(Math.random() * colors.length)]}`; + + // Start position at rare counter + particle.style.left = `${rect.left + rect.width / 2}px`; + particle.style.top = `${rect.top + rect.height / 2}px`; + + // Random explosion direction + const angle = (Math.PI * 2 * i) / particleCount + (Math.random() - 0.5) * 0.5; + const velocity = 100 + Math.random() * 200; + const dx = Math.cos(angle) * velocity; + const dy = Math.sin(angle) * velocity - 50; // Slight upward bias + + // Create custom animation for this particle + const animName = `particle-${Date.now()}-${i}`; + const keyframes = ` + @keyframes ${animName} { + 0% { + transform: translate(0, 0) scale(1); + opacity: 1; + } + 100% { + transform: translate(${dx}px, ${dy + 200}px) scale(0); + opacity: 0; + } + } + `; + + const styleEl = document.createElement('style'); + styleEl.textContent = keyframes; + document.head.appendChild(styleEl); + + particle.style.animation = `${animName} 2s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards`; + + container.appendChild(particle); + + // Clean up particle and animation after completion + setTimeout(() => { + particle.remove(); + styleEl.remove(); + }, 2000); + } +} + +function highlightRareFinder(characterName) { + // Use element pool for O(1) lookup instead of querySelectorAll + for (const item of elementPools.activeListItems) { + if (item.playerData && item.playerData.character_name === characterName) { + item.classList.add('rare-finder-glow'); + setTimeout(() => { + item.classList.remove('rare-finder-glow'); + }, GLOW_DURATION_MS); + break; + } + } +} + +// Update total rares display to trigger fireworks on increase +const originalUpdateTotalRaresDisplay = updateTotalRaresDisplay; +updateTotalRaresDisplay = function(data) { + originalUpdateTotalRaresDisplay(data); + + // Check if total increased + const newTotal = data.all_time || 0; + if (newTotal > lastRareCount && lastRareCount > 0) { + // Don't trigger on initial load + createFireworks(); + + // Check for milestones when count increases + if (newTotal > 0 && newTotal % 100 === 0) { + triggerMilestoneCelebration(newTotal); + } + } + lastRareCount = newTotal; +} + +function triggerMilestoneCelebration(rareNumber) { + debugLog(`🏆 MILESTONE: Rare #${rareNumber}! 🏆`); + + // Create full-screen milestone overlay + const overlay = document.createElement('div'); + overlay.className = 'milestone-overlay'; + + overlay.innerHTML = ` +
+
#${rareNumber}
+
🏆 EPIC MILESTONE! 🏆
+
Server Achievement Unlocked
+
+ `; + + document.body.appendChild(overlay); + + // Add screen shake effect + document.body.classList.add('screen-shake'); + + // Create massive firework explosion + createMilestoneFireworks(); + + // Remove milestone overlay after 5 seconds + setTimeout(() => { + overlay.style.animation = 'milestone-fade-in 0.5s ease-out reverse'; + document.body.classList.remove('screen-shake'); + setTimeout(() => { + overlay.remove(); + }, 500); + }, 5000); +} + +function createMilestoneFireworks() { + const container = document.getElementById('fireworksContainer'); + + // Create multiple bursts across the screen + const burstCount = 5; + const particlesPerBurst = 50; + const colors = ['#ffd700', '#ff6600', '#ff0044', '#cc00ff', '#00ccff', '#00ff00']; + + for (let burst = 0; burst < burstCount; burst++) { + setTimeout(() => { + // Random position for each burst + const x = Math.random() * window.innerWidth; + const y = Math.random() * (window.innerHeight * 0.7) + (window.innerHeight * 0.15); + + for (let i = 0; i < particlesPerBurst; i++) { + const particle = document.createElement('div'); + particle.className = 'milestone-particle'; + particle.style.background = colors[Math.floor(Math.random() * colors.length)]; + particle.style.boxShadow = `0 0 12px ${particle.style.background}`; + + // Start position + particle.style.left = `${x}px`; + particle.style.top = `${y}px`; + + // Random explosion direction + const angle = (Math.PI * 2 * i) / particlesPerBurst + (Math.random() - 0.5) * 0.8; + const velocity = 200 + Math.random() * 300; + const dx = Math.cos(angle) * velocity; + const dy = Math.sin(angle) * velocity - 100; // Upward bias + + // Create custom animation + const animName = `milestone-particle-${Date.now()}-${burst}-${i}`; + const keyframes = ` + @keyframes ${animName} { + 0% { + transform: translate(0, 0) scale(1); + opacity: 1; + } + 100% { + transform: translate(${dx}px, ${dy + 400}px) scale(0); + opacity: 0; + } + } + `; + + const styleEl = document.createElement('style'); + styleEl.textContent = keyframes; + document.head.appendChild(styleEl); + + particle.style.animation = `${animName} 3s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards`; + + container.appendChild(particle); + + // Clean up + setTimeout(() => { + particle.remove(); + styleEl.remove(); + }, 3000); + } + }, burst * 200); // Stagger bursts + } +} + +/* ==================== INVENTORY SEARCH FUNCTIONALITY ==================== */ + +/** + * Opens the dedicated inventory search page in a new browser tab. + */ +function openInventorySearch() { + // Open the dedicated inventory search page in a new tab + window.open('/inventory.html', '_blank'); +} + +/** + * Opens the Suitbuilder interface in a new browser tab. + */ +function openSuitbuilder() { + // Open the Suitbuilder page in a new tab + window.open('/suitbuilder.html', '_blank'); +} + +/** + * Opens the Player Debug interface in a new browser tab. + */ +function openPlayerDebug() { + // Open the Player Debug page in a new tab + window.open('/debug.html', '_blank'); +} + +/** + * Opens the Quest Status interface in a new browser tab. + */ +function openQuestStatus() { + // Open the Quest Status page in a new tab + window.open('/quest-status.html', '_blank'); +} + +/** + * Opens the Player Dashboard interface in a new browser tab. + */ +function openPlayerDashboard() { + // Open the Player Dashboard page in a new tab + window.open('/player-dashboard.html', '_blank'); +} + +// ─── Radar Window ────────────────────────────────────────────────── + +const radarWindows = {}; // character_name -> window element +const dungeonMapCache = {}; // landblock hex string -> dungeon map data +let dungeonTileCanvases = null; // env_id -> processed offscreen canvas + +// UB default source colors (ARGB as signed int32 → R,G,B) +// These are the colors embedded in the tile images that get remapped +const UB_TILE_COLORS = { + walls: { r: 0, g: 0, b: 255 }, // -16777089 → #0000FF + innerWalls: { r: 127, g: 127, b: 255 }, // -8404993 → #7F7FFF + rampedWalls: { r: 77, g: 255, b: 255 }, // -11622657 → #4DFFFF (approx) + floors: { r: 0, g: 127, b: 255 }, // -16744513 → #007FFF + stairs: { r: 0, g: 63, b: 255 }, // -16760961 → #003FFF +}; + +// Target display colors (UB-like appearance on dark background) +const DUNGEON_DISPLAY_COLORS = { + walls: { r: 140, g: 140, b: 180 }, // light gray-blue walls + innerWalls: { r: 100, g: 100, b: 140 }, // darker inner walls + rampedWalls: { r: 120, g: 160, b: 120 }, // greenish ramps + floors: { r: 60, g: 80, b: 60 }, // dark green floors + stairs: { r: 180, g: 160, b: 80 }, // yellowish stairs +}; + +// Process a tile image: make white transparent, remap UB colors +function processTileImage(img) { + const c = document.createElement('canvas'); + c.width = 10; + c.height = 10; + const ctx = c.getContext('2d'); + ctx.drawImage(img, 0, 0, 10, 10); + const imageData = ctx.getImageData(0, 0, 10, 10); + const d = imageData.data; + + for (let i = 0; i < d.length; i += 4) { + const r = d[i], g = d[i+1], b = d[i+2]; + + // Make white (and near-white) transparent + if (r > 240 && g > 240 && b > 240) { + d[i+3] = 0; // alpha = 0 + continue; + } + + // Color remap: match source colors and replace with display colors + let matched = false; + for (const [key, src] of Object.entries(UB_TILE_COLORS)) { + if (Math.abs(r - src.r) < 15 && Math.abs(g - src.g) < 15 && Math.abs(b - src.b) < 15) { + const dst = DUNGEON_DISPLAY_COLORS[key]; + d[i] = dst.r; d[i+1] = dst.g; d[i+2] = dst.b; + matched = true; + break; + } + } + + // Make black semi-transparent (outlines) + if (!matched && r < 15 && g < 15 && b < 15) { + d[i+3] = 100; + } + } + + ctx.putImageData(imageData, 0, 0); + return c; +} + +// Load dungeon tile textures (614 tiles, ~287KB JSON) +function loadDungeonTiles() { + if (dungeonTileCanvases) return; // already loading/loaded + dungeonTileCanvases = {}; + fetch('dungeon_tiles.json') + .then(r => r.json()) + .then(data => { + let loaded = 0; + const total = Object.keys(data).length; + Object.entries(data).forEach(([envId, dataUrl]) => { + const img = new Image(); + img.onload = () => { + dungeonTileCanvases[envId] = processTileImage(img); + loaded++; + if (loaded === total) console.log(`Processed ${total} dungeon tiles`); + }; + img.src = dataUrl; + }); + }) + .catch(err => console.warn('Failed to load dungeon tiles:', err)); +} + +const RADAR_COLORS = { + Monster: '#ff4444', + Player: '#4488ff', + NPC: '#44cc44', + Vendor: '#44cc44', + Portal: '#aa44ff', + Corpse: '#ff8800', + Container: '#cccc44', + Door: '#888888', +}; + +const RADAR_CANVAS_SIZE = 300; +const RADAR_DEFAULT_RANGE = 0.5; // AC coordinate units (~120m) + +function showRadarWindow(name) { + const windowId = `radarWindow-${name}`; + + const { win, content, isNew } = createWindow( + windowId, `Radar: ${name}`, 'radar-window', { + onClose: () => { + // Send stop_radar command + if (socket && socket.readyState === WebSocket.OPEN) { + socket.send(JSON.stringify({ player_name: name, command: 'stop_radar' })); + } + delete radarWindows[name]; + } + } + ); + + if (!isNew) { + // Window was hidden, not destroyed — re-register and restart streaming + radarWindows[name] = win; + if (socket && socket.readyState === WebSocket.OPEN) { + socket.send(JSON.stringify({ player_name: name, command: 'start_radar' })); + } + return; + } + + radarWindows[name] = win; + win.dataset.character = name; + + // Radar controls + const controls = document.createElement('div'); + controls.className = 'radar-controls'; + + const rangeDisplay = document.createElement('span'); + rangeDisplay.className = 'radar-range-display'; + rangeDisplay.textContent = 'Range: ~120m'; + controls.appendChild(rangeDisplay); + + const zoomHint = document.createElement('span'); + zoomHint.className = 'radar-zoom-hint'; + zoomHint.textContent = 'Scroll to zoom'; + controls.appendChild(zoomHint); + + content.appendChild(controls); + + // Canvas + const canvas = document.createElement('canvas'); + canvas.className = 'radar-canvas'; + canvas.width = RADAR_CANVAS_SIZE; + canvas.height = RADAR_CANVAS_SIZE; + content.appendChild(canvas); + + // Entity list + const listContainer = document.createElement('div'); + listContainer.className = 'radar-entity-list'; + + const listHeader = document.createElement('div'); + listHeader.className = 'radar-entity-header'; + listHeader.innerHTML = 'NameTypeDistDir'; + listContainer.appendChild(listHeader); + + const listBody = document.createElement('div'); + listBody.className = 'radar-entity-body'; + listContainer.appendChild(listBody); + content.appendChild(listContainer); + + // Load map image for radar background + const radarMapImg = new Image(); + radarMapImg.src = 'dereth.png'; + + // Store refs on the window + win._radarCanvas = canvas; + win._radarListBody = listBody; + win._radarRange = RADAR_DEFAULT_RANGE; + win._radarRangeDisplay = rangeDisplay; + win._radarSelectedId = null; + win._radarLastObjects = []; // cache for click hit-testing + win._radarMapImg = radarMapImg; + win._radarIsDungeon = false; + win._radarDungeonLandblock = null; + + // Scroll-wheel zoom on canvas + canvas.addEventListener('wheel', (e) => { + e.preventDefault(); + const factor = e.deltaY > 0 ? 1.25 : 0.8; + win._radarRange = Math.max(0.02, Math.min(5.0, win._radarRange * factor)); + const meters = Math.round(win._radarRange * 240); + win._radarRangeDisplay.textContent = `Range: ~${meters}m`; + }); + + // Click canvas to select nearest object + canvas.addEventListener('click', (e) => { + const rect = canvas.getBoundingClientRect(); + const mx = (e.clientX - rect.left) * (canvas.width / rect.width); + const my = (e.clientY - rect.top) * (canvas.height / rect.height); + // Find closest rendered dot + let closest = null; + let closestDist = 20; // max pixel distance to select + (win._radarLastObjects || []).forEach(obj => { + if (obj._px === undefined) return; + const d = Math.sqrt((mx - obj._px) ** 2 + (my - obj._py) ** 2); + if (d < closestDist) { closestDist = d; closest = obj; } + }); + win._radarSelectedId = closest ? closest.id : null; + }); + + // Load dungeon tiles on first radar open + loadDungeonTiles(); + + // Send start_radar command + if (socket && socket.readyState === WebSocket.OPEN) { + socket.send(JSON.stringify({ player_name: name, command: 'start_radar' })); + } +} + +function updateRadarWindow(msg) { + const name = msg.character_name; + const win = radarWindows[name]; + if (!win || win.style.display === 'none') return; + + const canvas = win._radarCanvas; + const listBody = win._radarListBody; + const range = win._radarRange || RADAR_DEFAULT_RANGE; + const selectedId = win._radarSelectedId; + const objects = msg.objects || []; + + const playerEW = msg.player_ew; + const playerNS = msg.player_ns; + const playerHeading = msg.player_heading || 0; + const isDungeon = msg.is_dungeon || false; + const landblock = msg.landblock || null; + const playerX = msg.player_x || 0; // raw physics X (dungeon) + const playerY = msg.player_y || 0; // raw physics Y (dungeon) + const playerRawZ = msg.player_raw_z || 0; + + // Update dungeon state + win._radarIsDungeon = isDungeon; + if (isDungeon && landblock) { + win._radarDungeonLandblock = landblock; + // Request dungeon map if not cached + if (!dungeonMapCache[landblock] && socket && socket.readyState === WebSocket.OPEN) { + socket.send(JSON.stringify({ type: 'request_dungeon_map', landblock })); + } + } + + // ─── Draw radar canvas ─── + const ctx = canvas.getContext('2d'); + const size = RADAR_CANVAS_SIZE; + const cx = size / 2; + const cy = size / 2; + // In dungeons, raw coords are game units; range is AC units (1 AC unit = 240 game units) + const scale = isDungeon ? (size / 2) / (range * 240) : (size / 2) / range; + + ctx.clearRect(0, 0, size, size); + + // Background + ctx.fillStyle = '#111'; + ctx.beginPath(); + ctx.arc(cx, cy, cx, 0, Math.PI * 2); + ctx.fill(); + + // Background: overworld map or dungeon cells + ctx.save(); + ctx.beginPath(); + ctx.arc(cx, cy, cx - 1, 0, Math.PI * 2); + ctx.clip(); + + if (isDungeon && landblock && dungeonMapCache[landblock]) { + // ─── Dungeon cell background with tile textures ─── + const dmap = dungeonMapCache[landblock]; + const playerRoundedZ = Math.floor((playerRawZ + 3) / 6) * 6; + ctx.translate(cx, cy); + // UB applies (heading - 180) rotation for dungeons (line 1013 DungeonMaps.cs) + // The layer has Y increasing downward; the 180° offset flips N/S + ctx.rotate(-(playerHeading - 180) * Math.PI / 180); + const cellSize = 10 * scale; // each cell is 10 game units + const hasTiles = dungeonTileCanvases && Object.keys(dungeonTileCanvases).length > 0; + + // Normalize rotation value to radians (exact copy of UB's DungeonCell.cs) + function cellRotation(rot) { + if (rot === 1) return Math.PI; + if (rot < -0.70 && rot > -0.8) return Math.PI / 2; + if (rot > 0.70 && rot < 0.8) return -Math.PI / 2; + return 0; + } + + // Draw non-current floors first (dimmed), then current floor on top + const sortedLevels = (dmap.z_levels || []).slice().sort((a, b) => { + const aCur = a.z === playerRoundedZ ? 1 : 0; + const bCur = b.z === playerRoundedZ ? 1 : 0; + return aCur - bCur; // current floor drawn last (on top) + }); + + sortedLevels.forEach(level => { + const isCurrentFloor = (level.z === playerRoundedZ); + ctx.globalAlpha = isCurrentFloor ? 0.85 : 0.12; + + (level.cells || []).forEach(cell => { + // X mirrored (matches UB's layer rendering), Y direct + const dx = -(cell.x - playerX) * scale; + const dy = (cell.y - playerY) * scale; + const tileCanvas = hasTiles ? dungeonTileCanvases[String(cell.env_id)] : null; + + if (tileCanvas) { + // Draw processed tile with per-cell rotation + ctx.save(); + ctx.translate(dx, dy); + ctx.rotate(cellRotation(cell.rotation)); + ctx.drawImage(tileCanvas, -cellSize / 2, -cellSize / 2, cellSize, cellSize); + ctx.restore(); + } else { + // Fallback: colored rectangle + ctx.fillStyle = isCurrentFloor ? '#3a5a3a' : '#1a2a1a'; + ctx.fillRect(dx - cellSize / 2, dy - cellSize / 2, cellSize, cellSize); + } + }); + }); + ctx.globalAlpha = 1.0; + ctx.setTransform(1, 0, 0, 1, 0, 0); // reset transform + } else if (!isDungeon) { + // ─── Overworld map background ─── + const mapImg = win._radarMapImg; + if (mapImg && mapImg.complete && mapImg.naturalWidth) { + const mapCoordRange = 204.2; + const pixPerCoord = mapImg.naturalWidth / mapCoordRange; + const mapPx = (playerEW + 102.1) * pixPerCoord; + const mapPy = (102.1 - playerNS) * pixPerCoord; + ctx.translate(cx, cy); + ctx.rotate(-playerHeading * Math.PI / 180); + ctx.globalAlpha = 0.4; + const srcSize = range * pixPerCoord * 2; + ctx.drawImage(mapImg, + mapPx - srcSize / 2, mapPy - srcSize / 2, srcSize, srcSize, + -cx, -cy, size, size + ); + ctx.globalAlpha = 1.0; + ctx.setTransform(1, 0, 0, 1, 0, 0); + } + } + ctx.restore(); + + // Range rings + ctx.strokeStyle = '#333'; + ctx.lineWidth = 1; + for (let i = 1; i <= 4; i++) { + ctx.beginPath(); + ctx.arc(cx, cy, (cx / 4) * i, 0, Math.PI * 2); + ctx.stroke(); + } + + // Crosshairs + ctx.strokeStyle = '#333'; + ctx.beginPath(); + ctx.moveTo(cx, 0); ctx.lineTo(cx, size); + ctx.moveTo(0, cy); ctx.lineTo(size, cy); + ctx.stroke(); + + // Always heading-up: player facing direction = up on canvas. + // Compass labels rotate around the edge based on player heading. + // AC heading: 0=N, 90=E, 180=S, 270=W (standard clockwise) + const headingRad = playerHeading * Math.PI / 180; + const compassLabels = [ + { label: 'N', angle: 0 }, + { label: 'E', angle: Math.PI / 2 }, + { label: 'S', angle: Math.PI }, + { label: 'W', angle: -Math.PI / 2 }, + ]; + ctx.font = 'bold 12px monospace'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + compassLabels.forEach(({ label, angle }) => { + // Rotate compass direction by negative heading so labels move as player turns + const a = angle - headingRad; + const lx = cx + Math.sin(a) * (cx - 12); + const ly = cy - Math.cos(a) * (cx - 12); + ctx.fillStyle = label === 'N' ? '#cc4444' : '#888'; + ctx.fillText(label, lx, ly); + }); + + // Facing direction indicator (always points up from center) + ctx.strokeStyle = '#666'; + ctx.lineWidth = 1; + ctx.beginPath(); + ctx.moveTo(cx, cy); + ctx.lineTo(cx, cy - cx * 0.85); + ctx.stroke(); + + // Rotate world by heading so player facing = up on canvas + // In dungeons, use (PI - heading) to match UB's canvas rotation + const rotAngle = isDungeon ? (Math.PI - headingRad) : headingRad; + + // Draw objects and cache positions for click hit-testing + const cosA = Math.cos(rotAngle); + const sinA = Math.sin(rotAngle); + objects.forEach(obj => { + // Use raw physics coords in dungeons (X mirrored), EW/NS on surface + let dX, dY; + if (isDungeon && obj.raw_x !== undefined) { + dX = -(obj.raw_x - playerX); // X mirrored to match tile space + dY = (obj.raw_y - playerY); // Y direct (180° heading offset handles N/S) + } else { + dX = obj.ew - playerEW; + dY = obj.ns - playerNS; + } + + const dx = dX * cosA - dY * sinA; + // In dungeons, don't negate dy (180° heading offset handles N/S) + // In overworld, negate for north-up + const dy = isDungeon ? (dX * sinA + dY * cosA) : -(dX * sinA + dY * cosA); + + const px = cx + dx * scale; + const py = cy + dy * scale; + + // Store pixel position for click hit-testing + obj._px = px; + obj._py = py; + + // Clip to circle + const distFromCenter = Math.sqrt((px - cx) ** 2 + (py - cy) ** 2); + if (distFromCenter > cx - 4) return; + + const color = RADAR_COLORS[obj.object_class] || '#999'; + const isSelected = obj.id === selectedId; + const dotSize = isSelected ? 6 : ((obj.object_class === 'Monster' || obj.object_class === 'Player') ? 4 : 3); + + // Selection ring + if (isSelected) { + ctx.strokeStyle = '#fff'; + ctx.lineWidth = 2; + ctx.beginPath(); + ctx.arc(px, py, dotSize + 3, 0, Math.PI * 2); + ctx.stroke(); + } + + ctx.fillStyle = color; + ctx.beginPath(); + ctx.arc(px, py, dotSize, 0, Math.PI * 2); + ctx.fill(); + + // Label for players, portals, and selected object + if (obj.object_class === 'Player' || obj.object_class === 'Portal' || isSelected) { + ctx.fillStyle = isSelected ? '#fff' : color; + ctx.font = '9px monospace'; + ctx.textAlign = 'left'; + ctx.fillText(obj.name, px + 6, py + 3); + } + }); + win._radarLastObjects = objects; + + // Player dot (center) + ctx.fillStyle = '#ffcc00'; + ctx.beginPath(); + ctx.arc(cx, cy, 5, 0, Math.PI * 2); + ctx.fill(); + ctx.strokeStyle = '#fff'; + ctx.lineWidth = 1; + ctx.stroke(); + + // ─── Update entity list ─── + // Sort by distance + const withDist = objects.map(obj => { + let distMeters, dX, dY; + if (isDungeon && obj.raw_x !== undefined) { + dX = -(obj.raw_x - playerX); // X mirrored + dY = (obj.raw_y - playerY); // Y direct + distMeters = Math.sqrt(dX * dX + dY * dY); // raw coords are ~meters + } else { + dX = obj.ew - playerEW; + dY = obj.ns - playerNS; + distMeters = Math.sqrt(dX * dX + dY * dY) * 240; + } + + // Compass direction + const angle = Math.atan2(dX, dY) * 180 / Math.PI; + const dir = compassDir(angle); + + return { ...obj, distMeters, dir }; + }); + withDist.sort((a, b) => a.distMeters - b.distMeters); + + // Rebuild list with selection support + listBody.innerHTML = ''; + let selectedRow = null; + withDist.forEach(obj => { + const row = document.createElement('div'); + row.className = 'radar-entity-row'; + if (obj.id === selectedId) { + row.classList.add('radar-entity-selected'); + selectedRow = row; + } + + // Click row to select on canvas + row.addEventListener('click', () => { + win._radarSelectedId = (win._radarSelectedId === obj.id) ? null : obj.id; + }); + + const colorDot = document.createElement('span'); + colorDot.className = 're-color'; + colorDot.style.background = RADAR_COLORS[obj.object_class] || '#999'; + row.appendChild(colorDot); + + const nameSpan = document.createElement('span'); + nameSpan.className = 're-name'; + nameSpan.textContent = obj.name; + row.appendChild(nameSpan); + + const typeSpan = document.createElement('span'); + typeSpan.className = 're-type'; + typeSpan.textContent = obj.object_class; + row.appendChild(typeSpan); + + const distSpan = document.createElement('span'); + distSpan.className = 're-dist'; + distSpan.textContent = obj.distMeters < 1000 + ? `${Math.round(obj.distMeters)}m` + : `${(obj.distMeters / 1000).toFixed(1)}km`; + row.appendChild(distSpan); + + const dirSpan = document.createElement('span'); + dirSpan.className = 're-dir'; + dirSpan.textContent = obj.dir; + row.appendChild(dirSpan); + + listBody.appendChild(row); + }); + + // Scroll selected row into view + if (selectedRow) selectedRow.scrollIntoView({ block: 'nearest' }); +} + +function compassDir(angleDeg) { + // angleDeg: 0 = N, 90 = E, -90 = W, 180 = S + const a = ((angleDeg % 360) + 360) % 360; + const dirs = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW']; + return dirs[Math.round(a / 45) % 8]; +} + +// ─── Version Display ──────────────────────────────────────────── + +fetch('/api-version').then(r => r.json()).then(d => { + const el = document.getElementById('versionDisplay'); + if (el) el.textContent = 'v' + d.version; +}).catch(() => {}); + +// ─── Current User Info ────────────────────────────────────────── +let _currentUser = null; + +fetch('/me').then(r => { + if (!r.ok) throw new Error('not authenticated'); + return r.json(); +}).then(data => { + _currentUser = data; + const userInfo = document.getElementById('userInfo'); + const nameEl = document.getElementById('currentUsername'); + const adminLink = document.getElementById('adminLink'); + if (userInfo && nameEl) { + nameEl.textContent = data.username; + userInfo.style.display = 'flex'; + } + if (adminLink && data.is_admin) { + adminLink.style.display = 'inline'; + } +}).catch(() => {}); + +// ─── Issues Board ─────────────────────────────────────────────── + +const ISSUE_CATEGORIES = { + 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' }, +}; + +function escapeHtml(str) { + const div = document.createElement('div'); + div.textContent = str; + return div.innerHTML; +} + +function showIssuesWindow() { + const { win, content, isNew } = createWindow( + 'issuesWindow', 'Issues Board', 'issues-window' + ); + + if (!isNew) { + refreshIssuesList(win); + return; + } + + win.style.width = '540px'; + win.style.height = '520px'; + + // Issues list container + const listDiv = document.createElement('div'); + listDiv.className = 'issues-list'; + content.appendChild(listDiv); + win._issuesList = listDiv; + + // Add issue form + const form = document.createElement('div'); + form.className = 'issues-form'; + form.innerHTML = ` +
+ + +
+
+ + +
+ `; + content.appendChild(form); + + // Add button handler + form.querySelector('#issueAddBtn').addEventListener('click', async () => { + const title = document.getElementById('issueTitle').value.trim(); + const desc = document.getElementById('issueDescription').value.trim(); + const cat = document.getElementById('issueCategory').value; + if (!title) return; + + await fetch('/issues', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ title, description: desc, category: cat }) + }); + document.getElementById('issueTitle').value = ''; + document.getElementById('issueDescription').value = ''; + refreshIssuesList(win); + }); + + refreshIssuesList(win); +} + +async function refreshIssuesList(win) { + const listDiv = win._issuesList; + if (!listDiv) return; + + try { + const resp = await fetch('/issues'); + const data = await resp.json(); + const issues = data.issues || []; + + if (issues.length === 0) { + listDiv.innerHTML = '
No open issues
'; + return; + } + + // Sort: unresolved first, then resolved + issues.sort((a, b) => (a.resolved ? 1 : 0) - (b.resolved ? 1 : 0)); + + listDiv.innerHTML = ''; + issues.forEach(issue => { + const cat = ISSUE_CATEGORIES[issue.category] || ISSUE_CATEGORIES.other; + const date = issue.created ? new Date(issue.created).toLocaleDateString('sv-SE') : ''; + const isResolved = !!issue.resolved; + const author = issue.author || 'User'; + const comments = issue.comments || []; + + const row = document.createElement('div'); + row.className = 'issue-row' + (isResolved ? ' issue-resolved' : ''); + + // Header line + const headerDiv = document.createElement('div'); + headerDiv.className = 'issue-header'; + headerDiv.innerHTML = ` + ${cat.label} + ${escapeHtml(issue.title)} + by ${escapeHtml(author)} + ${date} + `; + row.appendChild(headerDiv); + + // Description + if (issue.description) { + const descDiv = document.createElement('div'); + descDiv.className = 'issue-description'; + descDiv.textContent = issue.description; + row.appendChild(descDiv); + } + + // Action buttons + const actionsDiv = document.createElement('div'); + actionsDiv.className = 'issue-actions'; + + if (isResolved) { + const reopenBtn = document.createElement('button'); + reopenBtn.textContent = '\u21BA Reopen'; + reopenBtn.className = 'issue-reopen-btn'; + reopenBtn.addEventListener('click', async () => { + await fetch(`/issues/${issue.id}`, { + method: 'PATCH', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ resolved: false }) + }); + refreshIssuesList(win); + }); + actionsDiv.appendChild(reopenBtn); + + const deleteBtn = document.createElement('button'); + deleteBtn.textContent = '\uD83D\uDDD1 Delete'; + deleteBtn.className = 'issue-delete-btn'; + deleteBtn.addEventListener('click', async () => { + if (!confirm(`Delete issue "${issue.title}"?`)) return; + await fetch(`/issues/${issue.id}`, { method: 'DELETE' }); + refreshIssuesList(win); + }); + actionsDiv.appendChild(deleteBtn); + } else { + const resolveBtn = document.createElement('button'); + resolveBtn.textContent = '\u2713 Resolve'; + resolveBtn.className = 'issue-resolve-btn'; + resolveBtn.addEventListener('click', async () => { + await fetch(`/issues/${issue.id}`, { + method: 'PATCH', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ resolved: true }) + }); + refreshIssuesList(win); + }); + actionsDiv.appendChild(resolveBtn); + } + + // Edit button + const editBtn = document.createElement('button'); + editBtn.textContent = '\u270E Edit'; + editBtn.className = 'issue-edit-btn'; + editBtn.addEventListener('click', () => { + showEditIssueForm(row, issue, win); + }); + actionsDiv.appendChild(editBtn); + + row.appendChild(actionsDiv); + + // Comments section — always visible inline + showCommentsSection(row, issue, win); + + listDiv.appendChild(row); + }); + } catch (err) { + listDiv.innerHTML = '
Failed to load issues
'; + } +} + +function showEditIssueForm(row, issue, win) { + // Remove any existing edit form + const existing = row.querySelector('.issue-edit-form'); + if (existing) { existing.remove(); return; } + + const cat = issue.category || 'other'; + const form = document.createElement('div'); + form.className = 'issue-edit-form'; + form.innerHTML = ` +
+ + +
+
+ +
+ + +
+
+ `; + + form.querySelector('.edit-save-btn').addEventListener('click', async () => { + const title = form.querySelector('.edit-title').value.trim(); + const desc = form.querySelector('.edit-description').value.trim(); + const category = form.querySelector('.edit-category').value; + if (!title) return; + await fetch(`/issues/${issue.id}`, { + method: 'PATCH', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ title, description: desc, category }) + }); + refreshIssuesList(win); + }); + + form.querySelector('.edit-cancel-btn').addEventListener('click', () => { + form.remove(); + }); + + row.appendChild(form); +} + +function showCommentsSection(row, issue, win) { + const section = document.createElement('div'); + section.className = 'issue-comments-section'; + + const comments = issue.comments || []; + + // Render existing comments + const commentsListDiv = document.createElement('div'); + commentsListDiv.className = 'issue-comments-list'; + if (comments.length === 0) { + commentsListDiv.innerHTML = '
No comments yet
'; + } else { + comments.forEach(c => { + const cDiv = document.createElement('div'); + cDiv.className = 'issue-comment'; + const cDate = c.created ? new Date(c.created).toLocaleDateString('sv-SE') : ''; + cDiv.innerHTML = `${escapeHtml(c.author || 'Anonymous')} ${cDate}`; + const textDiv = document.createElement('div'); + textDiv.className = 'comment-text'; + textDiv.textContent = c.text; + cDiv.appendChild(textDiv); + commentsListDiv.appendChild(cDiv); + }); + } + section.appendChild(commentsListDiv); + + // Add comment form + const addDiv = document.createElement('div'); + addDiv.className = 'issue-comment-form'; + addDiv.innerHTML = ` +
+ + +
+ `; + + addDiv.querySelector('.comment-add-btn').addEventListener('click', async () => { + const text = addDiv.querySelector('.comment-text-input').value.trim(); + if (!text) return; + await fetch(`/issues/${issue.id}/comments`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ text }) + }); + refreshIssuesList(win); + }); + + section.appendChild(addDiv); + row.appendChild(section); +} + +// ─── Vital Sharing NetworkUI ─────────────────────────────────────────────── +// Live state fed by share_* WebSocket messages AND by /vital-sharing/peers +// polling. Keyed by character_name. +const vitalSharingPeers = {}; +let _vitalSharingPollTimer = null; + +function removeVitalSharingPeer(name) { + if (!name) return; + if (vitalSharingPeers[name]) { + delete vitalSharingPeers[name]; + renderVitalSharingWindow(); + } +} + +function updateVitalSharingPeer(msg) { + const name = msg.character_name; + if (!name) return; + const entry = vitalSharingPeers[name] || (vitalSharingPeers[name] = { + character_name: name, + tags: [], + vitals: null, + position: null, + last_update: null, + connected: true, + }); + entry.last_update = msg.timestamp || new Date().toISOString(); + if (Array.isArray(msg.tags)) entry.tags = msg.tags; + if (msg.type === 'share_vital_update') { + entry.vitals = { + current_health: msg.current_health, + max_health: msg.max_health, + current_stamina: msg.current_stamina, + max_stamina: msg.max_stamina, + current_mana: msg.current_mana, + max_mana: msg.max_mana, + }; + } else if (msg.type === 'share_position_update') { + entry.position = { + ew: msg.ew, ns: msg.ns, z: msg.z, heading: msg.heading, + }; + } + renderVitalSharingWindow(); +} + +function showVitalSharingWindow() { + const { win, content, isNew } = createWindow( + 'vitalSharingWindow', 'Vital Sharing Network', 'issues-window', + { onClose: () => { + if (_vitalSharingPollTimer) { + clearInterval(_vitalSharingPollTimer); + _vitalSharingPollTimer = null; + } + } + } + ); + + if (!isNew) { + refreshVitalSharingPeers(); + return; + } + + win.style.width = '520px'; + win.style.height = '500px'; + + const listDiv = document.createElement('div'); + listDiv.className = 'vital-sharing-list'; + listDiv.style.cssText = 'padding:6px;overflow-y:auto;flex:1;'; + content.appendChild(listDiv); + win._vitalSharingList = listDiv; + + refreshVitalSharingPeers(); + if (_vitalSharingPollTimer) clearInterval(_vitalSharingPollTimer); + _vitalSharingPollTimer = setInterval(refreshVitalSharingPeers, 5000); +} + +async function refreshVitalSharingPeers() { + try { + const resp = await fetch('/vital-sharing/peers'); + if (!resp.ok) return; + const data = await resp.json(); + const serverNames = new Set(); + (data.peers || []).forEach(p => { + serverNames.add(p.character_name); + const existing = vitalSharingPeers[p.character_name] || {}; + vitalSharingPeers[p.character_name] = { ...existing, ...p }; + }); + // Prune any local entries the server no longer knows about (unsubscribed + // or disconnected). This catches any race where the share_peer_removed + // broadcast didn't arrive. + Object.keys(vitalSharingPeers).forEach(name => { + if (!serverNames.has(name)) delete vitalSharingPeers[name]; + }); + } catch (e) { + // ignore transient errors + } + renderVitalSharingWindow(); +} + +function renderVitalSharingWindow() { + const win = document.getElementById('vitalSharingWindow'); + if (!win || win.style.display === 'none') return; + const listDiv = win._vitalSharingList; + if (!listDiv) return; + + const peers = Object.values(vitalSharingPeers).sort((a, b) => + (a.character_name || '').localeCompare(b.character_name || '') + ); + + if (peers.length === 0) { + listDiv.innerHTML = '
No vital-sharing peers connected
'; + return; + } + + listDiv.innerHTML = ''; + peers.forEach(p => { + const row = document.createElement('div'); + row.className = 'vital-sharing-peer'; + row.style.cssText = 'border:1px solid #444;background:#1f1f1f;padding:6px 8px;margin-bottom:5px;border-radius:3px;font-size:0.78rem;color:#ddd;'; + + const dot = p.plugin_connected + ? '' + : ''; + const subscribed = p.subscribed ? ' [subscribed]' : ''; + const tags = (p.tags || []).join(', ') || 'no tags'; + + let vitalsHtml = '(no vitals yet)'; + if (p.vitals && p.vitals.max_health) { + const v = p.vitals; + const pct = (cur, max) => max > 0 ? Math.max(0, Math.min(100, (cur / max) * 100)) : 0; + const bar = (label, cur, max, color) => ` +
+ ${label} +
+
+
+ ${cur ?? 0}/${max ?? 0} +
`; + vitalsHtml = + bar('HP', v.current_health, v.max_health, 'linear-gradient(90deg, #ff4444, #ff6666)') + + bar('STA', v.current_stamina, v.max_stamina, 'linear-gradient(90deg, #ffaa00, #ffcc44)') + + bar('MANA', v.current_mana, v.max_mana, 'linear-gradient(90deg, #4488ff, #66aaff)'); + } + + let posHtml = ''; + if (p.position && p.position.ew !== undefined) { + const fmt = (n) => (typeof n === 'number' ? n.toFixed(1) : n); + posHtml = `
+ ${fmt(p.position.ns)}N, ${fmt(p.position.ew)}E z=${fmt(p.position.z)} +
`; + } + + row.innerHTML = ` +
+ ${dot} + ${p.character_name} + ${subscribed} +
+
tags: ${tags}
+ ${vitalsHtml} + ${posHtml} + `; + listDiv.appendChild(row); + }); +} + +// ─── Combat Stats (Mag-Tools style) ─────────────────────────────────────── +const liveCombatStats = {}; +const combatStatsWindows = {}; +const DAMAGE_ELEMENTS = ['Typeless','Slash','Pierce','Bludgeon','Fire','Cold','Acid','Electric']; + +function showCombatStatsWindow(charName) { + // If called without a name, show a picker of all characters with data + if (!charName) { + const chars = Object.keys(liveCombatStats).sort(); + if (chars.length === 0) { + // Try fetching from API + fetch('/combat-stats').then(r => r.json()).then(data => { + if (data.stats && data.stats.length > 0) { + data.stats.forEach(s => { liveCombatStats[s.character_name] = s; }); + showCombatStatsPickerWindow(); + } else { + alert('No combat stats available yet. Kill some monsters first!'); + } + }); + return; + } + showCombatStatsPickerWindow(); + return; + } + + const windowId = `combatStatsWindow-${charName}`; + const { win, content, isNew } = createWindow(windowId, `Combat: ${charName}`, 'issues-window'); + + if (!isNew) { + renderCombatStatsContent(win, charName); + return; + } + + win.style.width = '620px'; + win.style.height = '560px'; + combatStatsWindows[charName] = win; + + // Session/Lifetime toggle + const controls = document.createElement('div'); + controls.style.cssText = 'padding:4px 8px;display:flex;gap:6px;align-items:center;border-bottom:1px solid #444;'; + const sessionBtn = document.createElement('button'); + sessionBtn.textContent = 'Session'; + sessionBtn.className = 'combat-stats-toggle active'; + sessionBtn.onclick = () => { win._combatMode = 'session'; sessionBtn.classList.add('active'); lifetimeBtn.classList.remove('active'); renderCombatStatsContent(win, charName); }; + const lifetimeBtn = document.createElement('button'); + lifetimeBtn.textContent = 'Lifetime'; + lifetimeBtn.className = 'combat-stats-toggle'; + lifetimeBtn.onclick = () => { win._combatMode = 'lifetime'; lifetimeBtn.classList.add('active'); sessionBtn.classList.remove('active'); renderCombatStatsContent(win, charName); }; + controls.appendChild(sessionBtn); + controls.appendChild(lifetimeBtn); + content.appendChild(controls); + + // Monster list (top) + const monsterDiv = document.createElement('div'); + monsterDiv.className = 'combat-monster-list'; + monsterDiv.style.cssText = 'height:180px;overflow-y:auto;border-bottom:1px solid #444;'; + content.appendChild(monsterDiv); + win._monsterList = monsterDiv; + + // Damage breakdown grid (bottom) + const breakdownDiv = document.createElement('div'); + breakdownDiv.className = 'combat-breakdown'; + breakdownDiv.style.cssText = 'flex:1;overflow-y:auto;padding:4px 6px;'; + content.appendChild(breakdownDiv); + win._breakdownGrid = breakdownDiv; + + win._combatMode = 'session'; + win._selectedMonster = null; // null = "All" + + renderCombatStatsContent(win, charName); +} + +function showCombatStatsPickerWindow() { + const { win, content, isNew } = createWindow('combatStatsPicker', 'Combat Stats — Select Character', 'issues-window'); + if (!isNew) { renderCombatStatsPicker(win); return; } + win.style.width = '320px'; + win.style.height = '400px'; + const listDiv = document.createElement('div'); + listDiv.style.cssText = 'padding:6px;overflow-y:auto;flex:1;'; + content.appendChild(listDiv); + win._pickerList = listDiv; + renderCombatStatsPicker(win); +} + +function renderCombatStatsPicker(win) { + const listDiv = win._pickerList; + if (!listDiv) return; + const chars = Object.keys(liveCombatStats).sort(); + listDiv.innerHTML = ''; + if (chars.length === 0) { + listDiv.innerHTML = '
No combat data yet
'; + return; + } + chars.forEach(name => { + const row = document.createElement('div'); + row.style.cssText = 'padding:4px 8px;cursor:pointer;border-bottom:1px solid #333;color:#ddd;font-size:0.85rem;'; + row.textContent = name; + row.onmouseenter = () => row.style.background = '#333'; + row.onmouseleave = () => row.style.background = ''; + row.onclick = () => { showCombatStatsWindow(name); }; + listDiv.appendChild(row); + }); +} + +function updateCombatStatsWindows(charName) { + const win = combatStatsWindows[charName]; + if (win && win.style.display !== 'none') { + renderCombatStatsContent(win, charName); + } +} + +function renderCombatStatsContent(win, charName) { + const data = liveCombatStats[charName]; + if (!data) return; + + const mode = win._combatMode || 'session'; + const stateData = data[mode]; + if (!stateData) return; + + const monsters = stateData.monsters || {}; + const monsterNames = Object.keys(monsters).filter(n => n !== '__cloak_surges__').sort(); + + // ── Monster list ── + const monsterDiv = win._monsterList; + if (monsterDiv) { + monsterDiv.innerHTML = ''; + + // Header row + const hdr = document.createElement('div'); + hdr.style.cssText = 'display:flex;gap:4px;padding:2px 6px;font-size:0.72rem;color:#888;border-bottom:1px solid #333;font-weight:bold;'; + hdr.innerHTML = `MonsterKillsDmg RecvDmg Given`; + monsterDiv.appendChild(hdr); + + // "All" row + const allRow = createMonsterRow('*', 'All', stateData.total_kills, stateData.total_damage_received, stateData.total_damage_given, win._selectedMonster === null); + allRow.onclick = () => { win._selectedMonster = null; renderCombatStatsContent(win, charName); }; + monsterDiv.appendChild(allRow); + + // Per-monster rows + monsterNames.forEach(name => { + const m = monsters[name]; + const selected = win._selectedMonster === name; + const row = createMonsterRow('', name, m.kill_count, m.damage_received, m.damage_given, selected); + row.onclick = () => { win._selectedMonster = name; renderCombatStatsContent(win, charName); }; + monsterDiv.appendChild(row); + }); + } + + // ── Breakdown grid ── + const grid = win._breakdownGrid; + if (!grid) return; + + // Gather stats for the selected monster or all + let offense = {}, defense = {}; + let totalAethSurges = 0, totalCloakSurges = 0; + + if (win._selectedMonster === null) { + // Aggregate all monsters + monsterNames.forEach(name => { + const m = monsters[name]; + mergeAttackStats(offense, m.offense || {}); + mergeAttackStats(defense, m.defense || {}); + totalAethSurges += m.aetheria_surges || 0; + totalCloakSurges += m.cloak_surges || 0; + }); + // Add cloak surges from the synthetic key + if (monsters['__cloak_surges__']) { + totalCloakSurges += monsters['__cloak_surges__'].cloak_surges || 0; + } + } else { + const m = monsters[win._selectedMonster]; + if (m) { + offense = m.offense || {}; + defense = m.defense || {}; + totalAethSurges = m.aetheria_surges || 0; + totalCloakSurges = m.cloak_surges || 0; + } + } + + // Compute aggregates for the right-side stats + const offAll = flattenStats(offense); + const defAll = flattenStats(defense); + const defMM = flattenStatsForType(defense, 'MeleeMissile'); + const defMag = flattenStatsForType(defense, 'Magic'); + + const totalAttacks = offAll.totalAttacks; + const failedAttacks = offAll.failedAttacks; + const hitRate = totalAttacks > 0 ? ((totalAttacks - failedAttacks) / totalAttacks * 100).toFixed(0) : '0'; + + const totalMeleeDefends = defMM.totalAttacks; + const totalEvades = defMM.failedAttacks; + const evadeRate = totalMeleeDefends > 0 ? (totalEvades / totalMeleeDefends * 100).toFixed(0) : '0'; + + const totalMagicDefends = defMag.totalAttacks; + const totalResists = defMag.failedAttacks; + const resistRate = totalMagicDefends > 0 ? (totalResists / totalMagicDefends * 100).toFixed(0) : '0'; + + const aethRate = totalAttacks > 0 ? (totalAethSurges / totalAttacks * 100).toFixed(1) : '0.0'; + const totalDefHits = (totalMeleeDefends - totalEvades) + (totalMagicDefends - totalResists); + const cloakRate = totalDefHits > 0 ? (totalCloakSurges / totalDefHits * 100).toFixed(1) : '0.0'; + + const crits = offAll.crits; + const hitsNonKill = totalAttacks - failedAttacks; + const critRate = hitsNonKill > 0 ? (crits / hitsNonKill * 100).toFixed(1) : '0.0'; + const normalHits = hitsNonKill - crits; + const avgNormal = normalHits > 0 ? Math.round(offAll.totalNormalDamage / normalHits) : 0; + const avgCrit = crits > 0 ? Math.round(offAll.totalCritDamage / crits) : 0; + + // Damage by element — offense (given) and defense (received) + const offDmgMM = {}, offDmgMag = {}, defDmgMM = {}, defDmgMag = {}; + let totalOffMM = 0, totalOffMag = 0, totalDefMM = 0, totalDefMag = 0; + DAMAGE_ELEMENTS.forEach(el => { + offDmgMM[el] = getDefDmg(offense, 'MeleeMissile', el); + offDmgMag[el] = getDefDmg(offense, 'Magic', el); + defDmgMM[el] = getDefDmg(defense, 'MeleeMissile', el); + defDmgMag[el] = getDefDmg(defense, 'Magic', el); + totalOffMM += offDmgMM[el]; + totalOffMag += offDmgMag[el]; + totalDefMM += defDmgMM[el]; + totalDefMag += defDmgMag[el]; + }); + + const totalDmgGiven = offAll.totalNormalDamage + offAll.totalCritDamage; + + // Build the grid HTML + const fmtN = n => n === 0 ? '' : n.toLocaleString(); + const rightCell = (text) => `${text}`; + const labelCell = (text) => `${text}`; + const headerCell = (text) => `${text}`; + const statLabel = (text) => `${text}`; + const sepCell = ``; + + let html = ''; + + // Column headers: Element | Dmg Given (M/M, Mag) | Dmg Recv (M/M, Mag) | Stats + html += `${headerCell('Given M/M')}${headerCell('Given Mag')}${sepCell}${headerCell('Recv M/M')}${headerCell('Recv Mag')}${sepCell}${statLabel('Attacks')}${rightCell(totalAttacks > 0 ? `${fmtN(totalAttacks)} (${hitRate}%)` : '')}`; + + // Stats to show on the right side of each element row + const rightStats = [ + ['Evades', () => totalMeleeDefends > 0 ? `${fmtN(totalMeleeDefends)} (${evadeRate}%)` : ''], + ['Resists', () => totalMagicDefends > 0 ? `${fmtN(totalMagicDefends)} (${resistRate}%)` : ''], + ['A.Surges', () => totalAethSurges > 0 ? `${fmtN(totalAethSurges)} (${aethRate}%)` : ''], + ['C.Surges', () => totalCloakSurges > 0 ? `${fmtN(totalCloakSurges)} (${cloakRate}%)` : ''], + ['', () => ''], + ['', () => ''], + ['Av/Mx', () => avgNormal > 0 ? `${fmtN(avgNormal)} / ${fmtN(offAll.maxNormalDamage)}` : ''], + ['Crits', () => crits > 0 ? `${fmtN(crits)} (${critRate}%)` : ''], + ]; + + for (let i = 0; i < DAMAGE_ELEMENTS.length; i++) { + const el = DAMAGE_ELEMENTS[i]; + const rs = rightStats[i] || ['', () => '']; + html += `${labelCell(el)}${rightCell(fmtN(offDmgMM[el]))}${rightCell(fmtN(offDmgMag[el]))}${sepCell}${rightCell(fmtN(defDmgMM[el]))}${rightCell(fmtN(defDmgMag[el]))}${sepCell}${rs[0] ? statLabel(rs[0]) : ''}${rightCell(rs[1]())}`; + } + + // Crit Avg/Max row + html += `${sepCell}${sepCell}${statLabel('Av/Mx')}${rightCell(avgCrit > 0 ? `${fmtN(avgCrit)} / ${fmtN(offAll.maxCritDamage)}` : '')}`; + + // Blank row + html += ``; + + // Total row + html += `${labelCell('Total')}${rightCell(fmtN(totalOffMM))}${rightCell(fmtN(totalOffMag))}${sepCell}${rightCell(fmtN(totalDefMM))}${rightCell(fmtN(totalDefMag))}${sepCell}${statLabel('Total')}${rightCell(fmtN(totalDmgGiven))}`; + + html += '
'; + grid.innerHTML = html; +} + +function createMonsterRow(marker, name, kills, dmgRecv, dmgGiven, selected) { + const row = document.createElement('div'); + const bg = selected ? 'background:#2a3a4a;' : ''; + row.style.cssText = `display:flex;gap:4px;padding:2px 6px;font-size:0.78rem;cursor:pointer;border-bottom:1px solid #222;${bg}color:#ddd;`; + row.onmouseenter = () => { if (!selected) row.style.background = '#252525'; }; + row.onmouseleave = () => { if (!selected) row.style.background = ''; }; + const fmtN = n => (!n || n === 0) ? '' : Number(n).toLocaleString(); + row.innerHTML = `${marker}${name}${fmtN(kills)}${fmtN(dmgRecv)}${fmtN(dmgGiven)}`; + return row; +} + +// ── Helpers for aggregating nested combat data ── +function mergeAttackStats(target, source) { + for (const [atk, byEl] of Object.entries(source)) { + if (!target[atk]) target[atk] = {}; + for (const [el, stats] of Object.entries(byEl)) { + if (!target[atk][el]) target[atk][el] = { 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 t = target[atk][el]; + t.total_attacks += stats.total_attacks || 0; + t.failed_attacks += stats.failed_attacks || 0; + t.crits += stats.crits || 0; + t.total_normal_damage += stats.total_normal_damage || 0; + t.max_normal_damage = Math.max(t.max_normal_damage, stats.max_normal_damage || 0); + t.total_crit_damage += stats.total_crit_damage || 0; + t.max_crit_damage = Math.max(t.max_crit_damage, stats.max_crit_damage || 0); + } + } +} + +function flattenStats(attackTypes) { + let r = { totalAttacks:0, failedAttacks:0, crits:0, totalNormalDamage:0, maxNormalDamage:0, totalCritDamage:0, maxCritDamage:0 }; + for (const byEl of Object.values(attackTypes)) { + for (const s of Object.values(byEl)) { + r.totalAttacks += s.total_attacks || 0; + r.failedAttacks += s.failed_attacks || 0; + r.crits += s.crits || 0; + r.totalNormalDamage += s.total_normal_damage || 0; + r.maxNormalDamage = Math.max(r.maxNormalDamage, s.max_normal_damage || 0); + r.totalCritDamage += s.total_crit_damage || 0; + r.maxCritDamage = Math.max(r.maxCritDamage, s.max_crit_damage || 0); + } + } + return r; +} + +function flattenStatsForType(attackTypes, type) { + let r = { totalAttacks:0, failedAttacks:0, crits:0, totalNormalDamage:0, maxNormalDamage:0, totalCritDamage:0, maxCritDamage:0 }; + const byEl = attackTypes[type]; + if (!byEl) return r; + for (const s of Object.values(byEl)) { + r.totalAttacks += s.total_attacks || 0; + r.failedAttacks += s.failed_attacks || 0; + r.crits += s.crits || 0; + r.totalNormalDamage += s.total_normal_damage || 0; + r.maxNormalDamage = Math.max(r.maxNormalDamage, s.max_normal_damage || 0); + r.totalCritDamage += s.total_crit_damage || 0; + r.maxCritDamage = Math.max(r.maxCritDamage, s.max_crit_damage || 0); + } + return r; +} + +function getDefDmg(defense, atkType, element) { + const byEl = defense[atkType]; + if (!byEl) return 0; + const s = byEl[element]; + if (!s) return 0; + return (s.total_normal_damage || 0) + (s.total_crit_damage || 0); +} diff --git a/static/classic/style-ac.css b/static/classic/style-ac.css new file mode 100644 index 00000000..a25e1680 --- /dev/null +++ b/static/classic/style-ac.css @@ -0,0 +1,739 @@ +/* + * style-ac.css - Asheron's Call themed styles for Dereth Tracker + * + * Recreates the classic AC UI with stone textures, beveled edges, + * golden accents, and medieval fantasy aesthetics. + */ + +/* CSS Custom Properties for AC theme colors and sizing */ +:root { + --sidebar-width: 340px; + + /* AC Color Palette */ + --ac-black: #0a0a0a; + --ac-dark-stone: #1a1a1a; + --ac-medium-stone: #2a2a2a; + --ac-light-stone: #3a3a3a; + --ac-border-dark: #000; + --ac-border-light: #4a4a4a; + --ac-gold: #d4af37; + --ac-gold-bright: #ffd700; + --ac-gold-dark: #b8941f; + --ac-green: #00ff00; + --ac-cyan: #00ffff; + --ac-text: #e0e0e0; + --ac-text-dim: #a0a0a0; + + /* Backgrounds */ + --bg-main: var(--ac-black); + --bg-side: var(--ac-dark-stone); + --card: var(--ac-medium-stone); + --card-hov: var(--ac-light-stone); + --text: var(--ac-text); + --accent: var(--ac-gold); +} + +/* Placeholder text in chat input */ +.chat-input::placeholder { + color: var(--ac-text-dim); + opacity: 0.7; +} + +html { + margin: 0; + height: 100%; + width: 100%; +} + +body { + margin: 0; + height: 100%; + display: flex; + overflow: hidden; + font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif; + background: var(--bg-main); + color: var(--text); + background-image: + repeating-linear-gradient( + 45deg, + transparent, + transparent 10px, + rgba(255, 255, 255, 0.01) 10px, + rgba(255, 255, 255, 0.01) 20px + ); +} + +/* AC-style stone textured panels with beveled edges */ +.ac-panel { + background: linear-gradient(135deg, var(--ac-medium-stone) 0%, var(--ac-dark-stone) 100%); + border: 2px solid var(--ac-border-dark); + box-shadow: + inset 2px 2px 3px rgba(255, 255, 255, 0.1), + inset -2px -2px 3px rgba(0, 0, 0, 0.5), + 0 2px 5px rgba(0, 0, 0, 0.8); + border-radius: 0; +} + +/* Sort buttons - AC style */ +.sort-buttons { + display: flex; + gap: 3px; + margin: 12px 16px 8px; + padding: 8px; + background: var(--ac-dark-stone); + border: 1px solid var(--ac-border-dark); + box-shadow: inset 1px 1px 3px rgba(0, 0, 0, 0.5); +} + +.sort-buttons .btn { + flex: 1; + padding: 5px 8px; + background: linear-gradient(180deg, var(--ac-light-stone) 0%, var(--ac-medium-stone) 100%); + color: var(--ac-text-dim); + border: 1px solid var(--ac-border-dark); + border-radius: 2px; + text-align: center; + cursor: pointer; + user-select: none; + font-size: 0.75rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + transition: all 0.15s; + box-shadow: + 1px 1px 2px rgba(0, 0, 0, 0.5), + inset 1px 1px 2px rgba(255, 255, 255, 0.1); +} + +.sort-buttons .btn:hover { + background: linear-gradient(180deg, var(--ac-light-stone) 0%, var(--ac-light-stone) 100%); + color: var(--ac-gold-bright); + box-shadow: + 1px 1px 2px rgba(0, 0, 0, 0.5), + inset 1px 1px 2px rgba(255, 255, 255, 0.2), + 0 0 5px rgba(212, 175, 55, 0.3); +} + +.sort-buttons .btn:active { + box-shadow: + inset 2px 2px 3px rgba(0, 0, 0, 0.7), + inset -1px -1px 2px rgba(255, 255, 255, 0.1); +} + +.sort-buttons .btn.active { + background: linear-gradient(180deg, var(--ac-gold) 0%, var(--ac-gold-dark) 100%); + color: var(--ac-black); + border-color: var(--ac-gold-dark); + font-weight: 700; + position: relative; + box-shadow: + 1px 1px 2px rgba(0, 0, 0, 0.5), + inset 1px 1px 2px rgba(255, 255, 255, 0.3), + 0 0 10px rgba(212, 175, 55, 0.5); +} + +.sort-buttons .btn.active:hover { + background: linear-gradient(180deg, var(--ac-gold-bright) 0%, var(--ac-gold) 100%); + color: var(--ac-black); +} + +/* Sort direction indicators */ +.sort-buttons .btn.active::after { + content: ''; + position: absolute; + top: 3px; + right: 3px; + width: 0; + height: 0; + border-left: 3px solid transparent; + border-right: 3px solid transparent; +} + +/* Most sorts are descending (down arrow) */ +.sort-buttons .btn.active::after { + border-top: 4px solid var(--ac-black); +} + +/* Name and KPR are ascending (up arrow) */ +.sort-buttons .btn.active[data-value="name"]::after, +.sort-buttons .btn.active[data-value="kpr"]::after { + border-top: none; + border-bottom: 4px solid var(--ac-black); +} + +/* Sidebar - AC stone panel style */ +#sidebar { + width: var(--sidebar-width); + scrollbar-width: thin; + scrollbar-color: var(--ac-gold-dark) var(--ac-dark-stone); + background: linear-gradient(180deg, var(--ac-dark-stone) 0%, var(--ac-black) 100%); + border-right: 3px solid var(--ac-border-dark); + box-shadow: + inset -2px 0 5px rgba(0, 0, 0, 0.5), + 2px 0 5px rgba(0, 0, 0, 0.8); + box-sizing: border-box; + padding: 18px 16px; + overflow-y: auto; +} + +#sidebar h2 { + margin: 8px 0 12px; + font-size: 1.25rem; + color: var(--ac-gold); + text-shadow: + 2px 2px 3px rgba(0, 0, 0, 0.8), + 0 0 10px rgba(212, 175, 55, 0.3); + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; +} + +#playerList { + list-style: none; + margin: 0; + padding: 0; +} + +/* Filter input - AC style */ +.player-filter { + width: 100%; + padding: 6px 10px; + margin-bottom: 12px; + background: var(--ac-dark-stone); + color: var(--ac-gold); + border: 2px solid var(--ac-border-dark); + border-radius: 2px; + font-size: 0.9rem; + box-sizing: border-box; + box-shadow: + inset 2px 2px 3px rgba(0, 0, 0, 0.5), + inset -1px -1px 2px rgba(255, 255, 255, 0.05); + font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif; +} + +.player-filter:focus { + outline: none; + border-color: var(--ac-gold-dark); + box-shadow: + inset 2px 2px 3px rgba(0, 0, 0, 0.5), + 0 0 5px rgba(212, 175, 55, 0.5); +} + +/* Map container */ +#mapContainer { + flex: 1; + position: relative; + overflow: hidden; + background: var(--bg-main); + box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.8); +} + +/* Player list items - AC stone panels */ +#playerList li { + display: grid; + grid-template-columns: 1fr auto auto auto auto auto; + grid-template-rows: auto auto auto auto; + grid-template-areas: + "name name name name name name" + "kills totalkills kph kph kph kph" + "rares kpr meta meta meta meta" + "onlinetime deaths tapers tapers tapers tapers"; + gap: 4px 8px; + margin: 6px 0; + padding: 10px 12px; + background: linear-gradient(135deg, var(--ac-medium-stone) 0%, var(--ac-dark-stone) 100%); + border: 2px solid var(--ac-border-dark); + border-left: 4px solid var(--ac-gold-dark); + transition: all 0.2s; + box-shadow: + 1px 1px 3px rgba(0, 0, 0, 0.5), + inset 1px 1px 2px rgba(255, 255, 255, 0.05); +} + +/* Grid assignments */ +.player-name { + grid-area: name; + font-weight: 700; + color: var(--ac-gold); + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); +} +.coordinates-inline { + font-size: 0.75rem; + color: var(--ac-text-dim); + font-weight: 400; + margin-left: 8px; +} + +.stat.kills { grid-area: kills; } +.stat.total-kills { grid-area: totalkills; } +.stat.kph { grid-area: kph; } +.stat.rares { grid-area: rares; } +.stat.kpr { grid-area: kpr; } +.stat.meta { grid-area: meta; } +.stat.onlinetime { grid-area: onlinetime; } +.stat.deaths { grid-area: deaths; } +.stat.tapers { grid-area: tapers; } + +/* Stat pills - AC style */ +#playerList li .stat { + background: linear-gradient(180deg, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.5) 100%); + padding: 4px 8px; + border-radius: 2px; + display: inline-block; + font-size: 0.75rem; + white-space: nowrap; + color: var(--ac-text); + border: 1px solid rgba(0, 0, 0, 0.5); + box-shadow: + 1px 1px 2px rgba(0, 0, 0, 0.3), + inset 1px 1px 1px rgba(255, 255, 255, 0.05); +} + +/* Icons & suffixes */ +.stat.kills::before { content: "⚔️ "; } +.stat.total-kills::before { content: "🏆 "; } +.stat.kph::after { content: " KPH"; font-size:0.7em; color: var(--ac-text-dim); } +.stat.rares::before { content: "💎 "; } +.stat.rares::after { content: " Rares"; font-size:0.7em; color: var(--ac-text-dim); } +.stat.kpr::before { content: "📊 "; } +.stat.kpr::after { content: " KPR"; font-size:0.7em; color: var(--ac-text-dim); } + +/* Metastate pills */ +#playerList li .stat.meta { + background: linear-gradient(180deg, var(--ac-gold) 0%, var(--ac-gold-dark) 100%); + color: var(--ac-black); + border-color: var(--ac-gold-dark); +} + +#playerList li .stat.meta.green { + background: linear-gradient(180deg, #4ade80 0%, #22c55e 100%); + color: var(--ac-black); + border-color: #16a34a; +} + +#playerList li .stat.meta.red { + background: linear-gradient(180deg, #f87171 0%, #ef4444 100%); + color: #fff; + border-color: #dc2626; +} + +/* Chat/Stats/Inventory buttons - AC style */ +.chat-btn, .stats-btn, .inventory-btn { + margin-top: 4px; + margin-right: 4px; + padding: 3px 8px; + background: linear-gradient(180deg, var(--ac-gold) 0%, var(--ac-gold-dark) 100%); + color: var(--ac-black); + border: 1px solid var(--ac-gold-dark); + border-radius: 2px; + font-size: 0.75rem; + font-weight: 600; + cursor: pointer; + text-transform: uppercase; + letter-spacing: 0.5px; + box-shadow: + 1px 1px 2px rgba(0, 0, 0, 0.5), + inset 1px 1px 1px rgba(255, 255, 255, 0.3); + transition: all 0.15s; +} + +.chat-btn:hover, .stats-btn:hover, .inventory-btn:hover { + background: linear-gradient(180deg, var(--ac-gold-bright) 0%, var(--ac-gold) 100%); + box-shadow: + 1px 1px 2px rgba(0, 0, 0, 0.5), + inset 1px 1px 1px rgba(255, 255, 255, 0.4), + 0 0 5px rgba(212, 175, 55, 0.5); +} + +/* Windows - AC stone panel style */ +.chat-window, .stats-window, .inventory-window { + position: absolute; + top: 10px; + left: calc(var(--sidebar-width) + 10px); + width: 760px; + height: 300px; + background: linear-gradient(135deg, var(--ac-medium-stone) 0%, var(--ac-dark-stone) 100%); + border: 3px solid var(--ac-border-dark); + display: flex; + flex-direction: column; + z-index: 10000; + box-shadow: + 0 5px 20px rgba(0, 0, 0, 0.8), + inset 2px 2px 3px rgba(255, 255, 255, 0.05); + border-radius: 2px; +} + +.window-content { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + min-height: 0; +} + +.chat-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 15px; + background: linear-gradient(180deg, var(--ac-light-stone) 0%, var(--ac-medium-stone) 100%); + border-bottom: 2px solid var(--ac-border-dark); + color: var(--ac-gold); + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); + box-shadow: 0 2px 3px rgba(0, 0, 0, 0.5); +} + +.chat-close-btn { + background: linear-gradient(180deg, #ef4444 0%, #dc2626 100%); + color: #fff; + border: 1px solid #991b1b; + border-radius: 2px; + padding: 2px 8px; + font-size: 1rem; + cursor: pointer; + font-weight: 700; + box-shadow: + 1px 1px 2px rgba(0, 0, 0, 0.5), + inset 1px 1px 1px rgba(255, 255, 255, 0.3); +} + +.chat-close-btn:hover { + background: linear-gradient(180deg, #f87171 0%, #ef4444 100%); + box-shadow: + 1px 1px 2px rgba(0, 0, 0, 0.5), + inset 1px 1px 1px rgba(255, 255, 255, 0.4), + 0 0 5px rgba(239, 68, 68, 0.5); +} + +.chat-messages { + flex: 1; + padding: 10px 15px; + overflow-y: auto; + background: rgba(0, 0, 0, 0.3); + color: var(--ac-green); + font-family: "Courier New", Courier, monospace; + font-size: 0.9rem; + line-height: 1.4; + box-shadow: inset 2px 2px 5px rgba(0, 0, 0, 0.5); +} + +.chat-messages::-webkit-scrollbar { + width: 10px; +} + +.chat-messages::-webkit-scrollbar-track { + background: var(--ac-dark-stone); + box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.5); +} + +.chat-messages::-webkit-scrollbar-thumb { + background: var(--ac-gold-dark); + border-radius: 2px; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); +} + +.chat-form { + display: flex; + padding: 10px 15px; + background: var(--ac-dark-stone); + border-top: 2px solid var(--ac-border-dark); + box-shadow: 0 -2px 3px rgba(0, 0, 0, 0.5); +} + +.chat-input { + flex: 1; + padding: 6px 10px; + background: rgba(0, 0, 0, 0.5); + color: var(--ac-green); + border: 2px solid var(--ac-border-dark); + border-radius: 2px; + font-family: "Courier New", Courier, monospace; + font-size: 0.9rem; + box-shadow: inset 2px 2px 3px rgba(0, 0, 0, 0.5); +} + +.chat-input:focus { + outline: none; + border-color: var(--ac-gold-dark); + box-shadow: + inset 2px 2px 3px rgba(0, 0, 0, 0.5), + 0 0 5px rgba(212, 175, 55, 0.3); +} + +/* Map elements */ +#mapGroup { + transform-origin: top left; + position: relative; +} + +#map { + display: block; + user-select: none; + -webkit-user-drag: none; + filter: brightness(0.9) contrast(1.1); +} + +.dot { + position: absolute; + width: 10px; + height: 10px; + border-radius: 50%; + transform: translate(-50%, -50%); + pointer-events: auto; + cursor: pointer; + z-index: 10; + box-shadow: + 0 0 5px rgba(0, 0, 0, 0.8), + 0 0 10px currentColor; + border: 1px solid rgba(0, 0, 0, 0.5); +} + +.dot.highlight { + animation: pulse 2s infinite; + z-index: 20; +} + +@keyframes pulse { + 0% { box-shadow: 0 0 5px rgba(0, 0, 0, 0.8), 0 0 10px currentColor; } + 50% { box-shadow: 0 0 10px rgba(0, 0, 0, 0.8), 0 0 20px currentColor, 0 0 30px currentColor; } + 100% { box-shadow: 0 0 5px rgba(0, 0, 0, 0.8), 0 0 10px currentColor; } +} + +/* Tooltip - AC style */ +.tooltip { + position: absolute; + display: none; + background: linear-gradient(135deg, rgba(26, 26, 26, 0.95) 0%, rgba(10, 10, 10, 0.95) 100%); + color: var(--ac-gold); + padding: 6px 10px; + border: 2px solid var(--ac-gold-dark); + border-radius: 2px; + font-size: 0.8rem; + pointer-events: none; + white-space: nowrap; + z-index: 1000; + box-shadow: + 0 2px 10px rgba(0, 0, 0, 0.8), + inset 1px 1px 2px rgba(255, 255, 255, 0.1); + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); +} + +/* Coordinate display - AC style */ +.coordinates { + position: absolute; + display: none; + background: linear-gradient(135deg, rgba(0, 50, 100, 0.95) 0%, rgba(0, 30, 60, 0.95) 100%); + color: var(--ac-cyan); + padding: 4px 8px; + border: 2px solid rgba(0, 100, 150, 0.8); + border-radius: 2px; + font-size: 0.75rem; + font-family: "Courier New", Courier, monospace; + font-weight: 700; + pointer-events: none; + white-space: nowrap; + z-index: 999; + box-shadow: + 0 2px 8px rgba(0, 0, 0, 0.8), + inset 1px 1px 2px rgba(255, 255, 255, 0.1); + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); +} + +/* Hover states */ +#playerList li:hover { + background: linear-gradient(135deg, var(--ac-light-stone) 0%, var(--ac-medium-stone) 100%); + border-left-color: var(--ac-gold-bright); + box-shadow: + 2px 2px 5px rgba(0, 0, 0, 0.5), + inset 1px 1px 2px rgba(255, 255, 255, 0.1), + 0 0 10px rgba(212, 175, 55, 0.2); +} + +#playerList li.selected { + background: linear-gradient(135deg, var(--ac-gold-dark) 0%, var(--ac-medium-stone) 100%); + border-left-color: var(--ac-gold-bright); + box-shadow: + 2px 2px 5px rgba(0, 0, 0, 0.5), + inset 1px 1px 2px rgba(255, 255, 255, 0.2), + 0 0 15px rgba(212, 175, 55, 0.3); +} + +/* Trail paths */ +#trails { + position: absolute; + top: 0; + left: 0; + pointer-events: none; + opacity: 0.7; +} + +.trail-path { + stroke-width: 2; + stroke-opacity: 0.8; + filter: drop-shadow(0 0 3px rgba(0, 0, 0, 0.8)); +} + +/* Stats window specific */ +.stats-window { + height: auto; +} + +.stats-window .chat-messages { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-auto-rows: auto; + gap: 10px; + padding: 10px; + overflow: visible; + background: var(--ac-dark-stone); + color: var(--ac-text); +} + +.stats-window iframe { + width: 350px; + height: 200px; + border: 2px solid var(--ac-border-dark); + box-shadow: + inset 2px 2px 3px rgba(0, 0, 0, 0.5), + 1px 1px 2px rgba(0, 0, 0, 0.3); + background: var(--ac-black); +} + +/* Stats time controls - AC style */ +.stats-controls { + display: flex; + gap: 8px; + padding: 10px 15px; + background: var(--ac-medium-stone); + border-bottom: 2px solid var(--ac-border-dark); + box-shadow: 0 2px 3px rgba(0, 0, 0, 0.5); +} + +.time-range-btn { + padding: 6px 12px; + background: linear-gradient(180deg, var(--ac-light-stone) 0%, var(--ac-medium-stone) 100%); + color: var(--ac-text-dim); + border: 1px solid var(--ac-border-dark); + border-radius: 2px; + font-size: 0.85rem; + font-weight: 600; + cursor: pointer; + transition: all 0.2s; + text-transform: uppercase; + letter-spacing: 0.5px; + box-shadow: + 1px 1px 2px rgba(0, 0, 0, 0.5), + inset 1px 1px 2px rgba(255, 255, 255, 0.1); +} + +.time-range-btn:hover { + background: linear-gradient(180deg, var(--ac-light-stone) 0%, var(--ac-light-stone) 100%); + color: var(--ac-gold); + box-shadow: + 1px 1px 2px rgba(0, 0, 0, 0.5), + inset 1px 1px 2px rgba(255, 255, 255, 0.2), + 0 0 5px rgba(212, 175, 55, 0.2); +} + +.time-range-btn.active { + background: linear-gradient(180deg, var(--ac-gold) 0%, var(--ac-gold-dark) 100%); + color: var(--ac-black); + border-color: var(--ac-gold-dark); + font-weight: 700; + box-shadow: + 1px 1px 2px rgba(0, 0, 0, 0.5), + inset 1px 1px 2px rgba(255, 255, 255, 0.3), + 0 0 10px rgba(212, 175, 55, 0.4); +} + +/* Inventory window */ +.inventory-content { + flex: 1; + padding: 15px; + background: var(--ac-dark-stone); + color: var(--ac-text); + overflow-y: auto; + box-shadow: inset 2px 2px 5px rgba(0, 0, 0, 0.5); +} + +.inventory-placeholder { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + font-size: 1.1rem; + color: var(--ac-text-dim); + font-style: italic; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); +} + +.stat.onlinetime::before { content: "🕑 "; } +.stat.deaths::before { content: "💀 "; } +.stat.tapers::before { + content: ""; + display: inline-block; + width: 16px; + height: 16px; + background-image: url('prismatic-taper-icon.png'); + background-size: contain; + background-repeat: no-repeat; + margin-right: 4px; + vertical-align: text-bottom; +} + +/* Disable text selection during drag */ +.noselect { + user-select: none !important; +} + +/* Custom scrollbar for sidebar */ +#sidebar::-webkit-scrollbar { + width: 12px; +} + +#sidebar::-webkit-scrollbar-track { + background: var(--ac-dark-stone); + box-shadow: inset 2px 2px 3px rgba(0, 0, 0, 0.5); +} + +#sidebar::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, var(--ac-gold) 0%, var(--ac-gold-dark) 100%); + border-radius: 2px; + border: 1px solid var(--ac-gold-dark); + box-shadow: + 1px 1px 2px rgba(0, 0, 0, 0.5), + inset 1px 1px 1px rgba(255, 255, 255, 0.3); +} + +#sidebar::-webkit-scrollbar-thumb:hover { + background: linear-gradient(180deg, var(--ac-gold-bright) 0%, var(--ac-gold) 100%); +} + +/* Map container special effects */ +#mapContainer.dragging { + cursor: move; +} + +/* Additional hover effects */ +.player-item { + position: relative; + overflow: hidden; +} + +.player-item::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent 0%, rgba(212, 175, 55, 0.2) 50%, transparent 100%); + transition: left 0.5s; +} + +.player-item:hover::before { + left: 100%; +} \ No newline at end of file diff --git a/static/classic/style.css b/static/classic/style.css new file mode 100644 index 00000000..471da663 --- /dev/null +++ b/static/classic/style.css @@ -0,0 +1,2890 @@ +/* + * style.css - Core styles for Dereth Tracker Single-Page Application + * + * Defines CSS variables for theming, layout rules for sidebar and map, + * interactive element styling (buttons, inputs), and responsive considerations. + */ +/* CSS Custom Properties for theme colors and sizing */ +:root { + --sidebar-width: 400px; + --bg-main: #111; + --bg-side: #1a1a1a; + --card: #222; + --card-hov:#333; + --text: #eee; + --accent: #88f; +} +/* + * style.css - Styling for Dereth Tracker SPA frontend. + * Defines layout, theming variables, and component styles (sidebar, map, controls). + */ +/* Placeholder text in chat input should be white */ +.chat-input::placeholder { + color: #fff; + opacity: 0.7; +} + +html { + margin: 0; + height: 100%; + width: 100%; +} + +body { + margin: 0; + height: 100%; + display: flex; + overflow: hidden; + font-family: "Segoe UI", sans-serif; + background: var(--bg-main); + color: var(--text); + position: relative; +} + +.sort-buttons { + /* Container for sorting controls; uses flex layout to distribute buttons equally */ + display: flex; + gap: 2px; + margin: 12px 16px 8px; +} +.sort-buttons .btn { + /* Compact styling for sort buttons to fit 6 options */ + flex: 1; + padding: 4px 6px; + background: #333; + color: #ccc; + border: 1px solid #666; + border-radius: 3px; + text-align: center; + cursor: pointer; + user-select: none; + font-size: 0.75rem; + font-weight: 500; + transition: all 0.15s; + min-width: 0; + white-space: nowrap; + overflow: hidden; +} +.sort-buttons .btn:hover { + background: #444; + color: #fff; + border-color: #777; +} + +.sort-buttons .btn.active { + /* Active sort button highlighted with accent color */ + background: var(--accent); + color: #111; + border-color: var(--accent); + position: relative; +} + +.sort-buttons .btn.active:hover { + background: var(--accent); + color: #111; +} + +/* Sort direction indicators */ +.sort-buttons .btn.active::after { + content: ''; + position: absolute; + top: 2px; + right: 2px; + width: 0; + height: 0; + border-left: 3px solid transparent; + border-right: 3px solid transparent; +} + +/* Most sorts are descending (down arrow) */ +.sort-buttons .btn.active::after { + border-top: 4px solid #111; +} + +/* Name and KPR are ascending (up arrow) */ +.sort-buttons .btn.active[data-value="name"]::after, +.sort-buttons .btn.active[data-value="kpr"]::after { + border-top: none; + border-bottom: 4px solid #111; +} + +/* ---------- sidebar --------------------------------------------- */ +#sidebar { + width: var(--sidebar-width); + scrollbar-width: none; + background: var(--bg-side); + border-right: 2px solid #333; + box-sizing: border-box; + padding: 18px 16px; + overflow-y: auto; + display: flex; + flex-direction: column; +} +#sidebar h2 { + margin: 8px 0 12px; + font-size: 1.25rem; + color: var(--accent); +} + +.total-rares-counter { + margin: 0 0 12px 0; + padding: 8px 12px; + background: linear-gradient(135deg, #2a2a2a, #1a1a1a); + border: 1px solid #444; + border-radius: 6px; + font-size: 0.95rem; + font-weight: 600; + color: #ffd700; + text-align: center; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); +} + +.total-rares-counter #totalRaresCount { + color: #fff; + margin-left: 4px; +} + +.server-kph-counter { + margin: 0 0 12px 0; + padding: 9px 12px; + background: linear-gradient(135deg, #2a2a44, #1a1a33); + border: 2px solid #4466aa; + border-radius: 6px; + font-size: 1rem; + font-weight: 600; + color: #aaccff; + text-align: center; + box-shadow: 0 3px 8px rgba(0, 0, 0, 0.4); + position: relative; + animation: kph-border-glow 4s ease-in-out infinite; +} + +@keyframes kph-border-glow { + 0%, 100% { border-color: #4466aa; box-shadow: 0 3px 8px rgba(0, 0, 0, 0.4); } + 50% { border-color: #6688cc; box-shadow: 0 3px 12px rgba(102, 136, 204, 0.3); } +} + +.server-kph-counter #serverKphCount { + color: #fff; + margin-left: 4px; + font-size: 1.1rem; + font-weight: 700; + text-shadow: 0 0 8px rgba(255, 255, 255, 0.3); + animation: kph-pulse 3s ease-in-out infinite; +} + +@keyframes kph-pulse { + 0%, 100% { transform: scale(1); } + 50% { transform: scale(1.02); } +} + +/* ULTRA MODE for KPH > 5000 */ +.server-kph-counter.ultra-epic { + background: linear-gradient(135deg, #6644ff, #4422cc, #6644ff); + background-size: 200% 200%; + animation: kph-border-glow 4s ease-in-out infinite, ultra-background 3s ease-in-out infinite; + border-color: #8866ff; + color: #eeeeff; + box-shadow: 0 4px 12px rgba(102, 68, 255, 0.5); +} + +@keyframes ultra-background { + 0% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } + 100% { background-position: 0% 50%; } +} + +.server-kph-counter.ultra-epic #serverKphCount { + font-size: 1.3rem; + color: #ffffff; + text-shadow: 0 0 12px rgba(255, 255, 255, 0.7); + animation: kph-pulse 3s ease-in-out infinite, ultra-glow 2s ease-in-out infinite alternate; +} + +@keyframes ultra-glow { + from { text-shadow: 0 0 12px rgba(255, 255, 255, 0.7); } + to { text-shadow: 0 0 18px rgba(255, 255, 255, 0.9), 0 0 25px rgba(136, 102, 255, 0.5); } +} + +/* Server Status Styling */ +.server-status-container { + margin: 0 0 16px 0; + padding: 12px; + background: linear-gradient(135deg, #2a4a2a, #1a3a1a); + border: 2px solid #44aa44; + border-radius: 8px; + box-shadow: 0 3px 8px rgba(0, 0, 0, 0.4); +} + +.server-status-container h3 { + margin: 0 0 10px 0; + font-size: 1.1rem; + color: #aaffaa; + text-align: center; + font-weight: 600; +} + +.status-indicator { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 8px; + font-weight: 600; + font-size: 1rem; +} + +.status-dot { + width: 12px; + height: 12px; + border-radius: 50%; + margin-right: 8px; + box-shadow: 0 0 6px rgba(0, 0, 0, 0.3); +} + +.status-dot.status-up { + background-color: #44ff44; + box-shadow: 0 0 8px rgba(68, 255, 68, 0.6); + animation: status-pulse-up 2s ease-in-out infinite; +} + +.status-dot.status-down { + background-color: #ff4444; + box-shadow: 0 0 8px rgba(255, 68, 68, 0.6); + animation: status-pulse-down 2s ease-in-out infinite; +} + +.status-dot.status-unknown, +.status-dot.status-error { + background-color: #ffaa44; + box-shadow: 0 0 8px rgba(255, 170, 68, 0.6); +} + +@keyframes status-pulse-up { + 0%, 100% { + box-shadow: 0 0 8px rgba(68, 255, 68, 0.6); + } + 50% { + box-shadow: 0 0 16px rgba(68, 255, 68, 0.9); + } +} + +@keyframes status-pulse-down { + 0%, 100% { + box-shadow: 0 0 8px rgba(255, 68, 68, 0.6); + } + 50% { + box-shadow: 0 0 16px rgba(255, 68, 68, 0.9); + } +} + +.status-details { + font-size: 0.85rem; + color: #ccc; + line-height: 1.6; + display: grid; + grid-template-columns: 1fr 1fr; + gap: 8px 16px; +} + +.status-details div { + display: flex; + align-items: center; + white-space: nowrap; +} + +.status-details span { + color: #fff; + font-weight: 500; + margin-left: 6px; +} + +.total-kills-counter { + margin: 0 0 12px 0; + padding: 8px 12px; + background: linear-gradient(135deg, #2a2a2a, #1a1a1a); + border: 1px solid #555; + border-radius: 6px; + font-size: 0.95rem; + font-weight: 600; + color: #ff6666; + text-align: center; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); +} + +.total-kills-counter #totalKillsCount { + color: #fff; + margin-left: 4px; +} +#playerList { + list-style: none; + margin: 0; + padding: 0; +} +/* Filter input in sidebar for player list */ +.player-filter { + width: 100%; + padding: 6px 8px; + margin-bottom: 12px; + background: var(--card); + color: var(--text); + border: 1px solid #555; + border-radius: 4px; + font-size: 0.9rem; + box-sizing: border-box; +} +#playerList li { + margin: 4px 0; + padding: 6px 8px; + background: var(--card); + border-left: 4px solid #555; + cursor: pointer; +} +#playerList li:hover { + background: var(--card-hov); +} +#playerList li.selected { + background: #454545; +} + +/* ---------- map container --------------------------------------- */ +#mapContainer { + flex: 1; + min-width: 0; + min-height: 0; + position: relative; + overflow: hidden; + background: #000; + cursor: grab; +} +#mapContainer.dragging { + cursor: grabbing; +} +#mapGroup { + position: absolute; + top: 0; + left: 0; + transform-origin: 0 0; +} +#map { + display: block; + user-select: none; + pointer-events: none; +} + +/* ---------- dots ------------------------------------------------ */ +#dots { + position: absolute; + top: 0; + left: 0; + pointer-events: none; +} +.dot { + position: absolute; + width: 6px; + height: 6px; + border-radius: 50%; + border: 1px solid #000; + transform: translate(-50%, -50%); + + /* enable events on each dot */ + pointer-events: auto; + cursor: pointer; +} +.dot.highlight { + width: 10px; + height: 10px; + animation: blink 0.6s step-end infinite; +} +@keyframes blink { + 50% { opacity: 0; } +} + +/* ---------- tooltip --------------------------------------------- */ +.tooltip { + position: absolute; + display: none; + background: rgba(0, 0, 0, 0.8); + color: #fff; + padding: 4px 8px; + border-radius: 4px; + font-size: 0.8rem; + pointer-events: none; + white-space: nowrap; + z-index: 1000; +} + +/* ---------- coordinate display ---------------------------------- */ +.coordinates { + position: absolute; + display: none; + background: rgba(0, 50, 100, 0.9); + color: #fff; + padding: 3px 6px; + border-radius: 3px; + font-size: 0.75rem; + font-family: monospace; + pointer-events: none; + white-space: nowrap; + z-index: 999; + border: 1px solid rgba(100, 150, 200, 0.5); +} +/* make each row a flex container */ +/* 2-column flex layout for each player row */ +/* make each row a flex container */ +/* make each row a vertical stack */ +/* make each player row into a 3×2 grid */ +#playerList li { + display: grid; + grid-template-columns: 1fr auto auto auto auto auto; + grid-template-rows: auto auto auto auto auto auto; + grid-template-areas: + "name name name name name name" + "vitals vitals vitals vitals vitals vitals" + "kills totalkills kph kph kph kph" + "rares kpr meta meta meta meta" + "onlinetime deaths tapers tapers tapers tapers" + "buttons buttons buttons buttons buttons buttons"; + gap: 4px 8px; + margin: 4px 0; + padding: 6px 10px; + background: var(--card); + border-left: 4px solid transparent; + transition: none; + font-size: 0.85rem; +} + +/* assign each span into its grid cell */ +.player-name { grid-area: name; font-weight: 600; color: var(--text); } +.coordinates-inline { font-size: 0.75rem; color: #aaa; font-weight: 400; margin-left: 8px; } + +.stat.kills { grid-area: kills; } +.stat.total-kills { grid-area: totalkills; } +.stat.kph { grid-area: kph; } +.stat.rares { grid-area: rares; } +.stat.kpr { grid-area: kpr; } +.stat.meta { grid-area: meta; } +.stat.onlinetime { grid-area: onlinetime; } +.stat.deaths { grid-area: deaths; } +.stat.tapers { grid-area: tapers; } + +.player-vitals { grid-area: vitals; } + +/* pill styling */ +#playerList li .stat { + background: rgba(255,255,255,0.1); + padding: 2px 6px; + border-radius: 10px; + display: inline-block; + font-size: 0.7rem; + white-space: nowrap; + color: var(--text); +} + +/* icons & suffixes */ +.stat.kills::before { content: "⚔️ "; } +.stat.total-kills::before { content: "🏆 "; } +.stat.kph::after { content: " KPH"; font-size:0.7em; color:#aaa; } +.stat.rares::before { content: "💎 "; } +.stat.rares::after { content: " Rares"; font-size:0.7em; color:#aaa; } +.stat.kpr::before { content: "📊 "; } +.stat.kpr::after { content: " KPR"; font-size:0.7em; color:#aaa; } +/* metastate pill colors are assigned dynamically: green for “good” states, red otherwise */ +#playerList li .stat.meta { + /* fallback */ + background: var(--accent); + color: #111; +} + +#playerList li .stat.meta.green { + background: #2ecc71; /* pleasant green */ + color: #111; +} + +#playerList li .stat.meta.red { + background: #e74c3c; /* vivid red */ + color: #fff; +} + +/* ---------- player item buttons ------------------------------- */ +.chat-btn, .stats-btn, .inventory-btn, .char-btn, .radar-btn { + padding: 1px 5px; + border: 1px solid #666; + border-radius: 3px; + font-size: 0.65rem; + cursor: pointer; + white-space: nowrap; +} + +.chat-btn, .stats-btn, .inventory-btn { + background: var(--accent); + color: #111; + border-color: var(--accent); +} + +/* Element pooling optimization containers */ +.grid-content { + display: contents; /* Makes container invisible to CSS Grid */ +} + +.buttons-container { + grid-area: buttons; + display: flex; + gap: 3px; + flex-wrap: wrap; +} + +.chat-window, .stats-window, .inventory-window, .character-window, .radar-window, .issues-window { + position: absolute; + top: 10px; + /* position window to start just right of the sidebar */ + left: calc(var(--sidebar-width) + 10px); + /* increase default size for better usability */ + width: 760px; /* increased width for larger terminal area */ + height: 300px; + background: var(--card); + border: 1px solid #555; + display: flex; + flex-direction: column; + z-index: 10000; +} + +.window-content { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + min-height: 0; +} + +.chat-header { + display: flex; + justify-content: space-between; + align-items: center; + background: var(--accent); + padding: 4px; + color: #111; + cursor: move; /* indicates the header is draggable */ +} + +.chat-close-btn { + background: transparent; + border: none; + font-size: 1.2rem; + line-height: 1; + cursor: pointer; +} + +.chat-messages { + flex: 1; + overflow-y: auto; + padding: 4px; + font-size: 0.85rem; + color: #fff; + /* reserve space so messages aren't hidden behind the input */ + padding-bottom: 40px; +} + +.chat-form { + display: flex; + border-top: 1px solid #333; + /* fix input area to the bottom of the chat window */ + position: absolute; + left: 0; + right: 0; + bottom: 0; + background: #333; + z-index: 10; +} + +.chat-input { + flex: 1; + padding: 4px 6px; + border: none; + background: #333; + color: #fff; + outline: none; +} + +/* Prevent text selection while dragging chat windows */ +body.noselect, body.noselect * { + user-select: none !important; +} +.stat.onlinetime::before { content: "🕑 "} +.stat.deaths::before { content: "💀 "} +.stat.tapers::before { + content: ""; + display: inline-block; + width: 16px; + height: 16px; + background-image: url('prismatic-taper-icon.png'); + background-size: contain; + background-repeat: no-repeat; + margin-right: 4px; + vertical-align: text-bottom; +} + +/* hover & selected states */ +#playerList li:hover { background: var(--card-hov); } +#playerList li.selected { background: #454545; } +/* trails paths */ +#trails { + position: absolute; + top: 0; + left: 0; + pointer-events: none; +} + +#portals { + position: absolute; + top: 0; + left: 0; + pointer-events: none; +} + +.portal-icon { + position: absolute; + width: 6px; + height: 6px; + font-size: 6px; + line-height: 1; + transform: translate(-50%, -50%); + z-index: 50; + opacity: 0.9; + text-shadow: 0 0 2px rgba(0, 0, 0, 0.8); +} + +.portal-icon::before { + content: '🌀'; + display: block; +} +.trail-path { + fill: none; + stroke-width: 2px; + stroke-opacity: 0.7; + stroke-linecap: round; + stroke-linejoin: round; +} +/* -------------------------------------------------------- */ +/* Stats window: 2×2 iframe grid and flexible height */ +.stats-window { + /* allow height to expand to fit two rows of panels */ + height: auto; +} +.stats-window .chat-messages { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-auto-rows: auto; + gap: 10px; + padding: 10px; + overflow: visible; + background: #f7f7f7; + color: #000; +} +.stats-window iframe { + width: 350px; + height: 200px; + border: none; +} + +/* ---------- stats window time controls --------------------------- */ +.stats-controls { + display: flex; + gap: 8px; + padding: 10px 15px; + background: #333; + border-bottom: 1px solid #555; +} + +.time-range-btn { + padding: 6px 12px; + background: #444; + color: #ccc; + border: 1px solid #666; + border-radius: 4px; + font-size: 0.85rem; + cursor: pointer; + transition: all 0.2s; +} + +.time-range-btn:hover { + background: #555; + color: #fff; +} + +.time-range-btn.active { + background: var(--accent); + color: #111; + border-color: var(--accent); +} + +/* ---------- inventory window styling (AC Layout) ----------------------------- */ +.inventory-content { + flex: 1; + display: flex; + flex-direction: row; + background: none; + color: var(--ac-text); + overflow: hidden; + padding: 8px; + gap: 20px; +} + +.inv-left-column { + display: flex; + flex-direction: column; + width: 316px; + flex: none; + min-height: 0; + overflow: hidden; +} + +.inventory-placeholder { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + font-size: 1.1rem; + color: #888; + font-style: italic; +} + +/* Inventory window specific styles */ +.inventory-window { + position: fixed; + top: 100px; + left: 400px; + width: 572px; + height: 720px; + background: rgba(20, 20, 20, 0.92); + backdrop-filter: blur(2px); + border: 2px solid var(--ac-gold); + border-radius: 4px; + display: flex; + flex-direction: column; + box-shadow: inset 0 0 10px #000, 0 4px 15px rgba(0, 0, 0, 0.8); + z-index: 1000; + font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif; + overflow: hidden; +} + +.inventory-loading { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + font-size: 1.1rem; + color: var(--ac-text-dim); +} + +.inv-equipment-grid { + position: relative; + width: 308px; + height: 264px; +} + +.inv-equip-slot { + position: absolute; + width: 36px; + height: 36px; + background: var(--ac-medium-stone); + border-top: 2px solid #3d4b5f; + border-left: 2px solid #3d4b5f; + border-bottom: 2px solid #12181a; + border-right: 2px solid #12181a; + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: center; +} + +.inv-equip-slot.equipped { + border: 2px solid var(--ac-cyan); + box-shadow: 0 0 5px var(--ac-cyan), inset 0 0 5px var(--ac-cyan); +} + +.inv-equip-slot.empty::before { + content: ""; + display: block; + width: 28px; + height: 28px; + background-image: url('/icons/06000133.png'); + background-size: contain; + opacity: 0.15; + filter: grayscale(100%); +} + +.inv-equip-slot .inventory-slot { + width: 100%; + height: 100%; +} + +.inv-sidebar { + width: 38px; + display: flex; + flex-direction: column; + align-items: center; + gap: 2px; + overflow: visible; + flex-shrink: 0; +} + +.inv-burden-bar { + width: 14px; + height: 40px; + background: #111; + border: 1px solid var(--ac-border-light); + position: relative; + overflow: hidden; + margin-bottom: 2px; + flex-shrink: 0; +} + +.inv-burden-fill { + width: 100%; + position: absolute; + left: 0; + right: 0; + bottom: 0; + height: 0%; + transition: height 0.3s ease, background-color 0.3s ease; +} + +.inv-burden-label { + text-align: center; + font-size: 9px; + color: #ccc; + white-space: nowrap; + margin-bottom: 2px; +} + +.inv-pack-list { + display: flex; + flex-direction: column; + gap: 2px; + width: 100%; + align-items: center; + flex: 1; + min-height: 0; + overflow: visible; +} + +.inv-pack-icon { + width: 32px; + height: 32px; + position: relative; + cursor: pointer; + border: 1px solid transparent; + display: flex; + align-items: center; + justify-content: center; + background: #000; + flex-shrink: 0; + margin-right: 0; +} + +.inv-pack-icon.active { + border: 1px solid var(--ac-green); + box-shadow: 0 0 4px var(--ac-green); +} + +.inv-pack-icon.active::before { + content: "▶"; + position: absolute; + left: -14px; + top: 10px; + color: var(--ac-gold); + font-size: 12px; +} + +.inv-pack-fill-container { + position: absolute; + bottom: -6px; + left: -1px; + width: 36px; + height: 4px; + background: #000; + border: 1px solid #333; +} + +.inv-pack-fill { + height: 100%; + background: var(--ac-green); + width: 0%; +} + +.inv-pack-icon img { + width: 28px; + height: 28px; + object-fit: contain; + image-rendering: pixelated; +} + +.inv-contents-header { + color: var(--ac-gold); + font-size: 14px; + margin-bottom: 4px; + text-align: center; + border-bottom: 1px solid var(--ac-border-light); + padding-bottom: 2px; +} + +.inv-item-grid { + display: grid; + grid-template-columns: repeat(6, 36px); + grid-auto-rows: 36px; + gap: 2px; + background: var(--ac-black); + padding: 4px; + border: 1px solid var(--ac-border-light); + flex: 1; + overflow-y: auto; + min-height: 0; + align-content: start; + justify-content: start; +} + +.inv-mana-panel { + width: 162px; + min-width: 162px; + display: flex; + flex-direction: column; + background: rgba(6, 10, 18, 0.92); + border: 1px solid var(--ac-border-light); + padding: 3px; + min-height: 0; + flex-shrink: 0; + overflow: hidden; +} + +.inv-mana-header { + color: var(--ac-gold); + font-size: 14px; + text-align: center; + border-bottom: 1px solid var(--ac-border-light); + padding-bottom: 2px; +} + +.inv-mana-summary { + color: var(--ac-text-dim); + font-size: 9px; + line-height: 1.2; + padding: 2px 0; + border-bottom: 1px solid rgba(255,255,255,0.08); + margin-bottom: 3px; +} + +.inv-mana-list { + flex: 1; + min-height: 0; + overflow: hidden; + display: flex; + flex-direction: column; + gap: 2px; +} + +.inv-mana-row { + display: grid; + grid-template-columns: 18px 1fr 14px; + grid-template-rows: auto auto; + gap: 1px 4px; + align-items: center; + background: rgba(18, 24, 34, 0.9); + border: 1px solid rgba(255,255,255,0.08); + padding: 1px 2px; + min-height: 20px; +} + +.inv-mana-icon { + grid-row: 1 / span 2; + width: 16px; + height: 16px; +} + +.inv-mana-icon .inventory-slot { + width: 16px; + height: 16px; +} + +.inv-mana-icon .inventory-slot.mana-slot { + width: 16px; + height: 16px; +} + +.inv-mana-icon .inventory-slot.mana-slot .item-icon-composite { + width: 14px; + height: 14px; +} + +.inv-mana-icon .inventory-slot.mana-slot .icon-underlay, +.inv-mana-icon .inventory-slot.mana-slot .icon-base, +.inv-mana-icon .inventory-slot.mana-slot .icon-overlay { + width: 14px; + height: 14px; +} + +.inv-mana-name { + color: #f2e6c9; + font-size: 9px; + line-height: 1.05; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + grid-column: 2; + grid-row: 1; +} + +.inv-mana-value, +.inv-mana-time { + font-size: 9px; + line-height: 1.1; +} + +.inv-mana-value { + color: #98d7ff; + grid-column: 2; + grid-row: 2; +} + +.inv-mana-time { + color: #cfe6a0; + grid-column: 3; + grid-row: 2; + text-align: right; + min-width: 34px; +} + +.inv-mana-state-dot { + grid-column: 3; + grid-row: 1; + width: 10px; + height: 10px; + border-radius: 50%; + justify-self: end; + align-self: start; + background: #97a1ad; + border: 1px solid rgba(0,0,0,0.65); + box-shadow: inset 0 0 1px rgba(255,255,255,0.2); +} + +.mana-state-active { + background: #76d17f; +} + +.mana-state-not_active { + background: #ff8e6f; +} + +.mana-state-unknown { + background: #d4c27a; +} + +.mana-state-not_activatable { + background: #97a1ad; +} + +.inv-mana-empty { + color: var(--ac-text-dim); + font-size: 11px; + text-align: center; + padding: 12px 6px; +} + +.inv-item-grid::-webkit-scrollbar { + width: 12px; +} +.inv-item-grid::-webkit-scrollbar-track { + background: #0a0a0a; + border: 1px solid #333; +} +.inv-item-grid::-webkit-scrollbar-thumb { + background: #0022cc; + border-top: 2px solid var(--ac-gold); + border-bottom: 2px solid var(--ac-gold); +} + +.inv-item-slot { + width: 36px; + height: 36px; + background: #0a0a0a; + border: 1px solid #222; + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: center; +} + +.inv-item-slot.occupied { + background: linear-gradient(135deg, #3d007a 0%, #1a0033 100%); + border: 1px solid #4a148c; +} + +/* Base slot styling used by createInventorySlot */ +.inventory-slot { + width: 36px; + height: 36px; + background: transparent; + border: none; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + padding: 0; + margin: 0; +} + +.inventory-slot:hover { + background: rgba(136, 136, 255, 0.3); +} + +.inventory-icon { + width: 36px; + height: 36px; + object-fit: contain; + image-rendering: pixelated; + border: none; + outline: none; +} + +/* Icon compositing */ +.item-icon-composite { + position: relative; + width: 36px; + height: 36px; + display: block; + background: transparent; + padding: 0; + margin: 0; +} + +.icon-underlay, +.icon-base, +.icon-overlay { + position: absolute; + top: 0; + left: 0; + width: 36px; + height: 36px; + border: none; + outline: none; + background: transparent; + padding: 0; + margin: 0; +} + +.icon-underlay { z-index: 1; } +.icon-base { z-index: 2; } +.icon-overlay { z-index: 3; } + +/* Item count (hidden in new AC layout, kept for compatibility) */ +.inventory-count { + display: none; +} + +/* Inventory tooltip */ +.inventory-tooltip { + position: fixed; + background: rgba(0, 0, 0, 0.95); + border: 1px solid #555; + border-radius: 4px; + padding: 10px; + pointer-events: none; + z-index: 20000; + display: none; + min-width: 200px; + max-width: 350px; + font-size: 0.9rem; +} + +.tooltip-name { + font-weight: bold; + color: var(--accent); + margin-bottom: 8px; + font-size: 1rem; +} + +.tooltip-section { + margin-bottom: 6px; +} + +.tooltip-section-title { + font-weight: bold; + color: #ffd700; + margin-bottom: 3px; + font-size: 0.85rem; + text-transform: uppercase; +} + +.tooltip-stats { + display: flex; + flex-direction: column; + gap: 3px; + font-size: 0.9rem; +} + +.tooltip-stat, +.tooltip-requirement, +.tooltip-property { + color: #ddd; + font-size: 0.85rem; + margin-left: 8px; +} + +.tooltip-requirement { + color: #ffaa00; +} + +.tooltip-property { + color: #88ff88; +} + +.tooltip-string { + color: #add8e6; + font-size: 0.8rem; + margin-left: 8px; +} + +.tooltip-spell { + color: #dda0dd; + font-size: 0.8rem; + margin-left: 8px; + margin-bottom: 2px; +} + +.spell-name { + color: #4a90e2; + font-weight: 500; +} + +.spell-school { + font-size: 11px; + color: #888; + font-style: italic; +} + +.tooltip-info { + color: #f0e68c; + font-size: 0.8rem; + margin-left: 8px; +} + +.tooltip-description { + color: #ccc; + font-style: italic; + margin-top: 8px; + padding-top: 8px; + border-top: 1px solid #444; +} + +.tooltip-value { + color: #4CAF50; +} + +.tooltip-burden { + color: #FFC107; +} + +.tooltip-source { + font-size: 10px; + color: #888; + margin-top: 4px; + text-align: center; +} + +/* ---------- inline vitals bars ---------------------------------- */ +.player-vitals { + grid-column: 1 / -1; + margin: 2px 0 4px 0; + display: flex; + flex-direction: column; + gap: 2px; +} + +.vital-bar-inline { + height: 5px; + background: #222; + border-radius: 3px; + overflow: hidden; + position: relative; +} + +.vitae-indicator { + font-size: 0.75rem; + color: #ff6666; + margin-left: 8px; + font-weight: 500; +} + +.vital-fill { + height: 100%; + transition: width 0.3s ease-out; + border-radius: 2px; +} + +.vital-fill.health { + background: linear-gradient(90deg, #ff4444, #ff6666); +} + +.vital-fill.stamina { + background: linear-gradient(90deg, #ffaa00, #ffcc44); +} + +.vital-fill.mana { + background: linear-gradient(90deg, #4488ff, #66aaff); +} + +/* Pulsing effects for low vitals */ +.vital-bar-inline.low-vital { + animation: pulse-bar-low 2s ease-in-out infinite; +} + +.vital-bar-inline.critical-vital { + animation: pulse-bar-critical 1s ease-in-out infinite; +} + +@keyframes pulse-bar-low { + 0%, 100% { background: #222; } + 50% { background: #332200; } +} + +@keyframes pulse-bar-critical { + 0%, 100% { background: #222; } + 50% { background: #440000; } +} + +/* ---------- epic rare notifications ------------------------------ */ +.rare-notifications { + position: fixed; + top: 20px; + left: 50%; + transform: translateX(-50%); + z-index: 10001; + pointer-events: none; +} + +.rare-notification { + background: linear-gradient(135deg, #ffd700, #ffed4e, #ffd700); + border: 3px solid #ff6600; + border-radius: 12px; + padding: 20px 30px; + margin-bottom: 10px; + text-align: center; + box-shadow: 0 8px 32px rgba(255, 215, 0, 0.5); + animation: notification-slide-in 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55), + epic-glow 2s ease-in-out infinite; + position: relative; + overflow: hidden; +} + +@keyframes notification-slide-in { + from { + transform: translateY(-100px); + opacity: 0; + } + to { + transform: translateY(0); + opacity: 1; + } +} + +@keyframes epic-glow { + 0%, 100% { + box-shadow: 0 8px 32px rgba(255, 215, 0, 0.5); + } + 50% { + box-shadow: 0 8px 48px rgba(255, 215, 0, 0.8); + } +} + +.rare-notification-title { + font-size: 1.2rem; + font-weight: 800; + color: #ff0044; + text-transform: uppercase; + margin-bottom: 8px; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3); + animation: epic-text-pulse 1s ease-in-out infinite; +} + +@keyframes epic-text-pulse { + 0%, 100% { transform: scale(1); } + 50% { transform: scale(1.05); } +} + +.rare-notification-mob { + font-size: 1.5rem; + font-weight: 700; + color: #1a0033; + margin-bottom: 4px; + text-shadow: 2px 2px 4px rgba(255, 255, 255, 0.5); +} + +.rare-notification-finder { + font-size: 1rem; + color: #333; + font-style: italic; + margin-bottom: 4px; +} + +.rare-notification-character { + font-size: 1.3rem; + font-weight: 700; + color: #ff0044; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3); +} + +/* Shine effect overlay */ +.rare-notification::before { + content: ''; + position: absolute; + top: -50%; + left: -50%; + width: 200%; + height: 200%; + background: linear-gradient(45deg, + transparent 30%, + rgba(255, 255, 255, 0.5) 50%, + transparent 70% + ); + transform: rotate(45deg); + animation: notification-shine 3s infinite; +} + +@keyframes notification-shine { + 0% { transform: translateX(-100%) translateY(-100%) rotate(45deg); } + 100% { transform: translateX(100%) translateY(100%) rotate(45deg); } +} + +/* ---------- fireworks particles ---------------------------------- */ +.fireworks-container { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 9999; +} + +.firework-particle { + position: absolute; + width: 6px; + height: 6px; + border-radius: 50%; + pointer-events: none; + animation: firework-fly 2s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards; +} + +@keyframes firework-fly { + 0% { + transform: translate(0, 0) scale(1); + opacity: 1; + } + 100% { + opacity: 0; + } +} + +/* Different particle colors */ +.particle-gold { background: #ffd700; box-shadow: 0 0 6px #ffd700; } +.particle-red { background: #ff4444; box-shadow: 0 0 6px #ff4444; } +.particle-orange { background: #ff8800; box-shadow: 0 0 6px #ff8800; } +.particle-purple { background: #cc00ff; box-shadow: 0 0 6px #cc00ff; } +.particle-blue { background: #00ccff; box-shadow: 0 0 6px #00ccff; } + +/* Character glow effect in player list */ +.player-item.rare-finder-glow { + animation: rare-finder-highlight 5s ease-in-out; + border-left-color: #ffd700 !important; + border-left-width: 6px !important; +} + +@keyframes rare-finder-highlight { + 0%, 100% { + background: var(--card); + box-shadow: none; + } + 50% { + background: rgba(255, 215, 0, 0.2); + box-shadow: 0 0 20px rgba(255, 215, 0, 0.5); + } +} + +/* ---------- milestone celebration overlay ------------------------ */ +.milestone-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: radial-gradient(ellipse at center, rgba(255, 215, 0, 0.3), rgba(0, 0, 0, 0.8)); + z-index: 20000; + display: flex; + align-items: center; + justify-content: center; + animation: milestone-fade-in 0.5s ease-out; +} + +@keyframes milestone-fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +.milestone-content { + text-align: center; + animation: milestone-zoom 0.8s cubic-bezier(0.68, -0.55, 0.265, 1.55); +} + +@keyframes milestone-zoom { + from { + transform: scale(0); + } + to { + transform: scale(1); + } +} + +.milestone-number { + font-size: 8rem; + font-weight: 900; + color: #ffd700; + text-shadow: + 0 0 30px #ffd700, + 0 0 60px #ff6600, + 0 0 90px #ff0044, + 0 0 120px #ff0044; + margin-bottom: 20px; + animation: milestone-pulse 1s ease-in-out infinite alternate; +} + +@keyframes milestone-pulse { + from { + transform: scale(1); + text-shadow: + 0 0 30px #ffd700, + 0 0 60px #ff6600, + 0 0 90px #ff0044, + 0 0 120px #ff0044; + } + to { + transform: scale(1.1); + text-shadow: + 0 0 40px #ffd700, + 0 0 80px #ff6600, + 0 0 120px #ff0044, + 0 0 160px #ff0044; + } +} + +.milestone-text { + font-size: 3rem; + font-weight: 700; + color: #fff; + text-transform: uppercase; + letter-spacing: 0.2em; + text-shadow: 0 0 20px rgba(255, 255, 255, 0.8); + animation: milestone-text-glow 2s ease-in-out infinite; +} + +@keyframes milestone-text-glow { + 0%, 100% { + opacity: 0.8; + } + 50% { + opacity: 1; + } +} + +.milestone-subtitle { + font-size: 1.5rem; + color: #ffcc00; + margin-top: 20px; + font-style: italic; + animation: milestone-subtitle-slide 1s ease-out; +} + +@keyframes milestone-subtitle-slide { + from { + transform: translateY(50px); + opacity: 0; + } + to { + transform: translateY(0); + opacity: 1; + } +} + +/* Milestone firework burst - larger particles */ +.milestone-particle { + position: absolute; + width: 12px; + height: 12px; + border-radius: 50%; + pointer-events: none; + background: #ffd700; + box-shadow: 0 0 12px #ffd700; +} + +/* Screen shake effect */ +@keyframes screen-shake { + 0%, 100% { transform: translate(0, 0); } + 10% { transform: translate(-5px, -5px); } + 20% { transform: translate(5px, -5px); } + 30% { transform: translate(-5px, 5px); } + 40% { transform: translate(5px, 5px); } + 50% { transform: translate(-3px, -3px); } + 60% { transform: translate(3px, -3px); } + 70% { transform: translate(-3px, 3px); } + 80% { transform: translate(3px, 3px); } + 90% { transform: translate(-1px, -1px); } +} + +.screen-shake { + animation: screen-shake 0.5s ease-in-out; +} + +/* ---------- Heat Map Canvas Layer ---------- */ +#heatmapCanvas { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; + opacity: 0.85; + mix-blend-mode: screen; /* Additive blending for nice heat map effect */ +} + +/* Trails and dots use default positioning - no changes needed for layering */ + +/* Heat map toggle styling */ +.heatmap-toggle { + margin: 0 0 12px; + padding: 6px 12px; + background: var(--card); + border: 1px solid var(--accent); + border-radius: 4px; + font-size: 0.9rem; +} + +.heatmap-toggle input { + margin-right: 8px; + cursor: pointer; +} + +.heatmap-toggle label { + cursor: pointer; + user-select: none; +} + +.portal-toggle { + margin: 0 0 12px; + padding: 6px 12px; + background: var(--card); + border: 1px solid #9c4aff; + border-radius: 4px; + font-size: 0.9rem; +} + +.portal-toggle input { + margin-right: 8px; + cursor: pointer; +} + +.portal-toggle label { + cursor: pointer; + user-select: none; +} + +/* Inventory search link styling */ +.inventory-search-link { + margin: 0 0 12px; + padding: 8px 12px; + background: var(--card); + border: 1px solid #4a9eff; + border-radius: 4px; + text-align: center; +} + +.inventory-search-link a { + color: #4a9eff; + text-decoration: none; + font-size: 0.9rem; + font-weight: 500; + display: block; + cursor: pointer; + user-select: none; + transition: all 0.2s ease; +} + +.inventory-search-link a:hover { + color: #fff; + background: rgba(74, 158, 255, 0.1); + border-radius: 2px; + padding: 2px 4px; + margin: -2px -4px; +} + +.suitbuilder-link { + margin: 0 0 12px; + padding: 8px 12px; + background: var(--card); + border: 1px solid #ff6b4a; + border-radius: 4px; + text-align: center; +} + +.suitbuilder-link a { + color: #ff6b4a; + text-decoration: none; + font-size: 0.9rem; + font-weight: 500; + display: block; + cursor: pointer; + user-select: none; + transition: all 0.2s ease; +} + +.suitbuilder-link a:hover { + color: #fff; + background: rgba(255, 107, 74, 0.1); + border-radius: 2px; + padding: 2px 4px; + margin: -2px -4px; +} + +.debug-link { + margin: 0 0 12px; + padding: 8px 12px; + background: var(--card); + border: 1px solid #4aff6b; + border-radius: 4px; + text-align: center; +} + +.debug-link a { + color: #4aff6b; + text-decoration: none; + font-size: 0.9rem; + font-weight: 500; + display: block; + cursor: pointer; + user-select: none; + transition: all 0.2s ease; +} + +.debug-link a:hover { + color: #fff; + background: rgba(74, 255, 107, 0.1); + border-radius: 2px; + padding: 2px 4px; + margin: -2px -4px; +} + +.quest-status-link { + margin: 0 0 12px; + padding: 8px 12px; + background: var(--card); + border: 1px solid #ffab4a; + border-radius: 4px; + text-align: center; +} + +.quest-status-link a { + color: #ffab4a; + text-decoration: none; + font-size: 0.9rem; + font-weight: 500; + display: block; + cursor: pointer; + user-select: none; + transition: all 0.2s ease; +} + +.quest-status-link a:hover { + color: #fff; + background: rgba(255, 171, 74, 0.1); + border-radius: 2px; + padding: 2px 4px; + margin: -2px -4px; +} + +.player-dashboard-link { + margin: 0 0 12px; + padding: 8px 12px; + background: var(--card); + border: 1px solid #88f; + border-radius: 4px; + text-align: center; +} + +.player-dashboard-link a { + color: #88f; + text-decoration: none; + font-size: 0.9rem; + font-weight: 500; + display: block; + cursor: pointer; + user-select: none; + transition: all 0.2s ease; +} + +.player-dashboard-link a:hover { + color: #fff; + background: rgba(136, 136, 255, 0.1); + border-radius: 2px; + padding: 2px 4px; + margin: -2px -4px; +} + +/* Sortable column styles for inventory tables */ +.sortable { + cursor: pointer; + user-select: none; + position: relative; + padding-right: 20px \!important; +} + +.sortable:hover { + background-color: rgba(255, 255, 255, 0.1); +} + +.results-table { + width: 100%; + border-collapse: collapse; + margin-top: 10px; +} + +.results-table th, +.results-table td { + padding: 8px 12px; + border-bottom: 1px solid #333; + text-align: left; +} + +.results-table th { + background-color: #222; + font-weight: bold; + color: #eee; +} + +.results-table tr:hover { + background-color: rgba(255, 255, 255, 0.05); +} + +.text-right { + text-align: right \!important; +} + +.results-info { + margin-bottom: 10px; + color: #ccc; + font-size: 14px; +} + +/* Spell/Cantrip column styling */ +.spells-cell { + font-size: 10px; + line-height: 1.2; + max-width: 200px; + word-wrap: break-word; + vertical-align: top; +} + +.legendary-cantrip { + color: #ffd700; + font-weight: bold; +} + +.regular-spell { + color: #88ccff; +} + +/* Error Toast */ +.error-toast { + position: fixed; + bottom: 20px; + right: 20px; + background: rgba(220, 38, 38, 0.9); + color: white; + padding: 12px 20px; + border-radius: 8px; + font-size: 13px; + z-index: 99999; + animation: toastFadeIn 0.3s ease; + max-width: 400px; +} + +@keyframes toastFadeIn { + from { opacity: 0; transform: translateY(10px); } + to { opacity: 1; transform: translateY(0); } +} + +/* ============================================ + Character Window - AC Game UI Replica + ============================================ */ +/* === TreeStats-themed Character Window === */ +.character-window { + width: 740px !important; + height: auto !important; + min-height: 300px; + max-height: 90vh; +} +.character-window .window-content { + background-color: #000022; + color: #fff; + font: 14px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + overflow-y: auto; + padding: 10px 15px 15px; +} + +/* -- Character header (name, level, title, server, XP/Lum) -- */ +.ts-character-header { + margin-bottom: 10px; +} +.ts-character-header h1 { + margin: 0 0 2px; + font-size: 28px; + color: #fff; + font-weight: bold; +} +.ts-character-header h1 span.ts-level { + font-size: 200%; + color: #fff27f; + float: right; +} +.ts-character-header .ts-subtitle { + font-size: 85%; + color: gold; +} +.ts-xplum { + font-size: 85%; + margin: 6px 0 10px; + display: grid; + grid-template-columns: 1fr 1fr; + gap: 0 20px; +} +.ts-xplum .ts-left { text-align: left; } +.ts-xplum .ts-right { text-align: right; } + +/* -- Tab containers (two side-by-side) -- */ +.ts-tabrow { + display: flex; + gap: 13px; + flex-wrap: wrap; +} +.ts-tabcontainer { + width: 320px; + margin-bottom: 15px; +} +.ts-tabbar { + height: 30px; + display: flex; +} +.ts-tab { + float: left; + display: block; + padding: 5px 5px; + height: 18px; + font-size: 12px; + font-weight: bold; + color: #fff; + text-align: center; + cursor: pointer; + user-select: none; +} +.ts-tab.active { + border-top: 2px solid #af7a30; + border-right: 2px solid #af7a30; + border-left: 2px solid #af7a30; + border-bottom: none; + background-color: rgba(0, 100, 0, 0.4); +} +.ts-tab.inactive { + border-top: 2px solid #000022; + border-right: 2px solid #000022; + border-left: 2px solid #000022; + border-bottom: none; +} +.ts-box { + background-color: black; + color: #fff; + border: 2px solid #af7a30; + max-height: 400px; + overflow-x: hidden; + overflow-y: auto; +} +.ts-box.active { display: block; } +.ts-box.inactive { display: none; } + +/* -- Tables inside boxes -- */ +table.ts-char { + width: 100%; + font-size: 13px; + border-collapse: collapse; + border-spacing: 0; +} +table.ts-char td { + padding: 2px 6px; + white-space: nowrap; +} +table.ts-char tr.ts-colnames td { + background-color: #222; + font-weight: bold; + font-size: 12px; +} + +/* Attribute cells */ +table.ts-char td.ts-headerleft { + background-color: rgba(0, 100, 0, 0.4); +} +table.ts-char td.ts-headerright { + background-color: rgba(0, 0, 100, 0.4); +} +table.ts-char td.ts-creation { + color: #ccc; +} + +/* Skill rows */ +table.ts-char td.ts-specialized { + background: linear-gradient(to right, #392067, #392067, black); +} +table.ts-char td.ts-trained { + background: linear-gradient(to right, #0f3c3e, #0f3c3e, black); +} + +/* Section headers inside boxes */ +.ts-box .ts-section-title { + background-color: #222; + padding: 4px 8px; + font-weight: bold; + font-size: 13px; + border-bottom: 1px solid #af7a30; +} + +/* Titles list */ +.ts-titles-list { + padding: 6px 10px; + font-size: 13px; +} +.ts-titles-list div { + padding: 1px 0; +} + +/* Properties (augmentations, ratings, other) */ +table.ts-props { + width: 100%; + font-size: 13px; + border-collapse: collapse; +} +table.ts-props td { + padding: 2px 6px; +} +table.ts-props tr.ts-colnames td { + background-color: #222; + font-weight: bold; +} + +/* -- Live vitals bars (inside Attributes tab) -- */ +.ts-vitals { + padding: 6px 8px; + display: flex; + flex-direction: column; + gap: 8px; + border-bottom: 2px solid #af7a30; +} +.ts-vital { + display: flex; + align-items: center; + gap: 6px; +} +.ts-vital-label { + width: 55px; + font-size: 12px; + color: #ccc; +} +.ts-vital-bar { + flex: 1; + height: 14px; + overflow: hidden; + position: relative; + border: 1px solid #af7a30; +} +.ts-vital-fill { + height: 100%; + transition: width 0.5s ease; +} +.ts-health-bar .ts-vital-fill { background: #cc3333; width: 0%; } +.ts-stamina-bar .ts-vital-fill { background: #ccaa33; width: 0%; } +.ts-mana-bar .ts-vital-fill { background: #3366cc; width: 0%; } +.ts-vital-text { + width: 80px; + text-align: right; + font-size: 12px; + color: #ccc; +} + +/* -- Allegiance section (below tabs) -- */ +.ts-allegiance-section { + margin-top: 5px; + border: 2px solid #af7a30; + background-color: black; + padding: 0; +} +.ts-allegiance-section .ts-section-title { + background-color: #222; + padding: 4px 8px; + font-weight: bold; + font-size: 13px; + border-bottom: 1px solid #af7a30; +} +table.ts-allegiance { + width: 100%; + font-size: 13px; + border-collapse: collapse; +} +table.ts-allegiance td { + padding: 2px 6px; +} +table.ts-allegiance td:first-child { + color: #ccc; + width: 100px; +} + +/* Awaiting data placeholder */ +.ts-placeholder { + color: #666; + font-style: italic; + padding: 10px; + text-align: center; +} + +/* Scrollbar styling for ts-box */ +.ts-box::-webkit-scrollbar { width: 8px; } +.ts-box::-webkit-scrollbar-track { background: #000; } +.ts-box::-webkit-scrollbar-thumb { background: #af7a30; } + +.char-btn { + background: #000022; + color: #af7a30; + border-color: #af7a30; +} +.char-btn:hover { + background: rgba(0, 100, 0, 0.4); +} + + +/* ============================================== + Inventory Window Visual Fixes - AC Game Match + ============================================== */ + +.inventory-window, +.inventory-window * { + font-family: "Times New Roman", Times, serif !important; + text-shadow: 1px 1px 0 #000 !important; +} + +.inventory-window .chat-header { + background: #0e0c08 !important; + border-bottom: 1px solid #8a7a44 !important; + color: #d4af37 !important; + padding: 4px 6px !important; + box-shadow: none !important; + font-size: 11px !important; + font-weight: bold !important; + height: 22px !important; + box-sizing: border-box !important; + display: flex !important; + align-items: center !important; +} + +.inventory-window .window-content { + background: linear-gradient(180deg, #1a1814 0%, #0e0c0a 100%) !important; + border: 2px solid #8a7a44 !important; + padding: 4px !important; +} + +.inv-equipment-grid { + background: + radial-gradient(ellipse at 20% 50%, rgba(30, 28, 25, 0.6) 0%, transparent 70%), + radial-gradient(ellipse at 80% 30%, rgba(25, 23, 20, 0.4) 0%, transparent 60%), + radial-gradient(ellipse at 50% 80%, rgba(35, 30, 25, 0.5) 0%, transparent 50%), + linear-gradient(180deg, #0e0c0a 0%, #141210 50%, #0c0a08 100%) !important; +} + +.inv-equip-slot { + width: 36px !important; + height: 36px !important; + border-top: 1px solid #2a2a30 !important; + border-left: 1px solid #2a2a30 !important; + border-bottom: 1px solid #0a0a0e !important; + border-right: 1px solid #0a0a0e !important; + background: #14141a !important; +} + +.inv-equip-slot.equipped { + border: 1px solid #222 !important; + background: #14141a !important; + box-shadow: none !important; +} + +/* Equipment slot color categories - matching real AC + Real AC uses clearly visible colored borders AND tinted backgrounds per slot type */ +.inv-equip-slot.slot-purple { + border: 1px solid #8040a8 !important; + background: #2a1538 !important; +} +.inv-equip-slot.slot-blue { + border: 1px solid #3060b0 !important; + background: #141e38 !important; +} +.inv-equip-slot.slot-teal { + border: 1px solid #309898 !important; + background: #0e2828 !important; +} +.inv-equip-slot.slot-darkblue { + border: 1px solid #1e3060 !important; + background: #0e1428 !important; +} +/* Brighter tint when equipped (item present) */ +.inv-equip-slot.equipped.slot-purple { + border: 1px solid #9050b8 !important; + background: #341a44 !important; +} +.inv-equip-slot.equipped.slot-blue { + border: 1px solid #4070c0 !important; + background: #1a2844 !important; +} +.inv-equip-slot.equipped.slot-teal { + border: 1px solid #40a8a8 !important; + background: #143030 !important; +} +.inv-equip-slot.equipped.slot-darkblue { + border: 1px solid #283870 !important; + background: #141a30 !important; +} + +.inv-equip-slot.empty::before { + opacity: 0.15 !important; + filter: grayscale(100%) !important; +} + +.inv-item-grid { + background: #1a1208 !important; + gap: 2px !important; +} + +.inv-item-slot.occupied { + background: #442c1e !important; + border: 1px solid #5a3c28 !important; +} + +.inv-item-slot { + background: #2a1c14 !important; + border: 1px solid #3a2818 !important; +} + +.inv-contents-header { + font-size: 10px !important; + font-family: "Times New Roman", Times, serif !important; + color: #ffffff !important; + border-bottom: none !important; + text-align: center !important; + padding-bottom: 2px !important; + margin-bottom: 2px !important; + text-transform: none !important; + letter-spacing: 0 !important; +} + +.inventory-content { + gap: 13px !important; +} + +.inv-left-column { + width: 316px !important; + flex: none !important; +} + +.inv-sidebar { + width: 38px !important; + align-items: center !important; +} + +.inv-pack-icon { + width: 32px !important; + height: 32px !important; + border: 1px solid #1a1a1a !important; + margin-bottom: 2px !important; + overflow: visible !important; + margin-right: 8px !important; +} + +.inv-pack-icon img { + width: 28px !important; + height: 28px !important; +} + +.inv-pack-icon.active { + border: 1px solid #8a7a44 !important; + position: relative !important; + box-shadow: none !important; +} + +.inv-pack-icon.active::before { + content: '' !important; + position: absolute !important; + left: -8px !important; + top: 50% !important; + transform: translateY(-50%) !important; + width: 0 !important; + height: 0 !important; + border-top: 6px solid transparent !important; + border-bottom: 6px solid transparent !important; + border-left: 7px solid #d4af37 !important; + display: block !important; +} + +.inv-pack-fill-container { + position: absolute !important; + right: -6px !important; + top: 0 !important; + bottom: auto !important; + left: auto !important; + width: 4px !important; + height: 32px !important; + background: #000 !important; + border: 1px solid #333 !important; + display: flex !important; + flex-direction: column-reverse !important; +} + +.inv-pack-fill { + width: 100% !important; + background: #00ff00 !important; + transition: height 0.3s ease !important; +} + +.inv-item-grid::-webkit-scrollbar { + width: 14px; +} +.inv-item-grid::-webkit-scrollbar-track { + background: #0e0a04; + border: 1px solid #8a7a44; +} +.inv-item-grid::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, #2244aa 0%, #1a3399 50%, #2244aa 100%); + border: 1px solid #8a7a44; +} +.inv-item-grid::-webkit-scrollbar-button:vertical:start:decrement, +.inv-item-grid::-webkit-scrollbar-button:vertical:end:increment { + background: #8a2020; + border: 1px solid #b89a30; + height: 14px; + display: block; +} + + + +.inventory-count { + display: block !important; + position: absolute; + top: 1px; + right: 1px; + bottom: auto; + left: auto; + font-size: 8px !important; + color: #fff !important; + background: #1a3399 !important; + padding: 0 2px !important; + line-height: 12px !important; + min-width: 8px !important; + text-align: center !important; + pointer-events: none; + z-index: 10; + text-shadow: none !important; +} + +.inventory-window { + border: 2px solid #8a7a44 !important; + background: #0e0c08 !important; + resize: none !important; + width: 572px !important; + min-height: 720px !important; +} + +.inv-mana-panel { + width: 162px !important; + min-width: 162px !important; + background: #111014 !important; + border: 1px solid #5a4a24 !important; + overflow: hidden !important; +} + +.inv-mana-header { + font-size: 10px !important; + color: #ffffff !important; + border-bottom: none !important; + padding-bottom: 2px !important; +} + +.inv-mana-summary { + font-size: 9px !important; + color: #d4af37 !important; +} + +.inv-mana-row { + grid-template-columns: 18px 1fr 14px !important; + grid-template-rows: auto auto !important; + gap: 1px 4px !important; + padding: 1px 2px !important; + background: #1a1208 !important; + border: 1px solid #3a2818 !important; +} + +.inv-mana-icon { + grid-row: 1 / span 2 !important; + width: 16px !important; + height: 16px !important; +} + +.inv-mana-icon .inventory-slot { + width: 16px !important; + height: 16px !important; +} + +.inv-mana-icon .inventory-slot.mana-slot .item-icon-composite, +.inv-mana-icon .inventory-slot.mana-slot .icon-underlay, +.inv-mana-icon .inventory-slot.mana-slot .icon-base, +.inv-mana-icon .inventory-slot.mana-slot .icon-overlay { + width: 14px !important; + height: 14px !important; +} + +.inv-mana-name { + font-size: 9px !important; + line-height: 1.05 !important; + white-space: nowrap !important; + overflow: hidden !important; + text-overflow: ellipsis !important; +} + +.inv-mana-value, +.inv-mana-time { + font-size: 9px !important; +} + +.inv-mana-state-dot { + width: 10px !important; + height: 10px !important; +} + +/* Custom resize grip for inventory window */ +.inv-resize-grip { + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 6px; + cursor: ns-resize; + z-index: 100; + background: transparent; + border-top: 1px solid #8a7a44; +} + +.inv-resize-grip::after { + content: ''; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: 30px; + height: 2px; + border-top: 1px solid #5a4a24; + border-bottom: 1px solid #5a4a24; +} + +/* ─── Radar Window ─── */ + +.radar-window { + width: 360px; + height: 560px; +} + +.radar-window .window-content { + display: flex; + flex-direction: column; + overflow: hidden; +} + +.radar-controls { + display: flex; + align-items: center; + gap: 12px; + padding: 4px 8px; + background: #1a1a1a; + border-bottom: 1px solid #333; + font-size: 0.8rem; +} + +.radar-controls label { + display: flex; + align-items: center; + gap: 4px; + color: #ccc; +} + +.radar-range-display { + color: #aaa; + font-size: 0.75rem; +} + +.radar-zoom-hint { + color: #555; + font-size: 0.7rem; + font-style: italic; +} + +.radar-canvas { + display: block; + margin: 0 auto; + border-bottom: 1px solid #333; + flex-shrink: 0; +} + +.radar-entity-list { + flex: 1; + overflow-y: auto; + font-size: 0.75rem; + min-height: 0; +} + +.radar-entity-header, +.radar-entity-row { + display: flex; + align-items: center; + padding: 2px 6px; + gap: 4px; +} + +.radar-entity-header { + background: #1a1a1a; + color: #888; + font-weight: bold; + border-bottom: 1px solid #333; + position: sticky; + top: 0; +} + +.radar-entity-row { + border-bottom: 1px solid #222; +} + +.radar-entity-row:hover { + background: #1a1a2a; + cursor: pointer; +} + +.radar-entity-selected { + background: #1a2a3a; + border-left: 2px solid #4488ff; +} + +.radar-entity-selected:hover { + background: #1a2a3a; +} + +.re-color { + width: 8px; + height: 8px; + border-radius: 50%; + flex-shrink: 0; + display: inline-block; +} + +.re-name { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: #ddd; +} + +.re-type { + width: 60px; + flex-shrink: 0; + color: #888; +} + +.re-dist { + width: 45px; + flex-shrink: 0; + text-align: right; + color: #aaa; +} + +.re-dir { + width: 24px; + flex-shrink: 0; + text-align: center; + color: #888; +} + +.radar-btn { + background: #553388; + color: #fff; + border-color: #774499; +} + +.radar-btn:hover { + background: #664499; +} + +/* ─── Issues Board ─── */ + +.issues-window { + width: 540px; + height: 520px; +} + +.issues-window .window-content { + display: flex; + flex-direction: column; + overflow: hidden; +} + +.issues-list { + flex: 1; + overflow-y: auto; + min-height: 0; + padding: 4px; +} + +.issue-row { + padding: 6px 8px; + border-bottom: 1px solid #333; + border-left: 3px solid transparent; + color: #ddd; +} + +.issue-row:hover { + background: #1a1a2a; +} + +.issue-header { + display: flex; + align-items: center; + gap: 6px; +} + +.issue-author { + color: #8a8a6a; + font-size: 0.65rem; + font-style: italic; +} + +.issue-row .issue-description { + color: #aaa; + font-size: 0.75rem; + margin-top: 2px; + padding-left: 4px; +} + +.issue-row.issue-resolved { + background: rgba(74, 170, 74, 0.12); + border-left-color: #4a4; +} + +.issue-row.issue-resolved strong { + text-decoration: line-through; + color: #888; +} + +.issue-row.issue-resolved .issue-description { + color: #666; +} + +.issue-category { + display: inline-block; + padding: 1px 6px; + border-radius: 3px; + color: #fff; + font-size: 0.65rem; + font-weight: bold; + text-transform: uppercase; +} + +.issue-actions { + display: flex; + gap: 4px; + margin-top: 4px; +} + +.issue-resolve-btn, +.issue-reopen-btn, +.issue-delete-btn, +.issue-edit-btn { + padding: 1px 6px; + font-size: 0.65rem; + background: transparent; + cursor: pointer; + border-radius: 3px; +} + +.issue-resolve-btn { + color: #4a4; + border: 1px solid #4a4; +} + +.issue-resolve-btn:hover { + background: #4a4; + color: #fff; +} + +.issue-reopen-btn { + color: #88a; + border: 1px solid #88a; +} + +.issue-reopen-btn:hover { + background: #88a; + color: #fff; +} + +.issue-delete-btn { + color: #c44; + border: 1px solid #c44; +} + +.issue-delete-btn:hover { + background: #c44; + color: #fff; +} + +.issue-edit-btn { + color: #ca4; + border: 1px solid #ca4; +} + +.issue-edit-btn:hover { + background: #ca4; + color: #fff; +} + +.issues-form { + padding: 6px 8px; + border-top: 1px solid #444; + background: #1a1a1a; +} + +/* Edit form */ +.issue-edit-form { + margin-top: 6px; + padding: 6px; + background: #1a1a2a; + border: 1px solid #444; + border-radius: 3px; +} + +/* Comments section */ +.issue-comments-section { + margin-top: 6px; + padding: 6px; + background: #151520; + border: 1px solid #333; + border-radius: 3px; +} + +.issue-comments-list { + max-height: 120px; + overflow-y: auto; + margin-bottom: 4px; +} + +.issue-comment { + padding: 3px 0; + border-bottom: 1px solid #2a2a2a; +} + +.issue-comment:last-child { + border-bottom: none; +} + +.comment-author { + color: #8a8a6a; + font-size: 0.7rem; + font-weight: bold; +} + +.comment-date { + color: #555; + font-size: 0.6rem; +} + +.comment-text { + color: #bbb; + font-size: 0.75rem; + padding-left: 4px; + margin-top: 1px; +} + +.issue-comment-form { + margin-top: 4px; +} + +/* ---------- User info section (sidebar bottom) ---------- */ +.user-info { + margin-top: auto; + padding: 10px 0 0; + border-top: 1px solid #333; + display: flex; + align-items: center; + gap: 8px; + font-size: 0.75rem; + flex-shrink: 0; +} + +.user-info-name { + color: #d4af37; + font-weight: bold; +} + +.user-info-admin { + color: #8a7a44; + text-decoration: none; + font-size: 0.7rem; +} + +.user-info-admin:hover { + color: #d4af37; +} + +.user-info-logout { + margin-left: auto; + color: #888; + text-decoration: none; + font-size: 0.7rem; +} + +.user-info-logout:hover { + color: #ff6b6b; +} + +/* ---------- Combat Stats window ---------- */ +.combat-stats-toggle { + padding: 2px 10px; + font-size: 0.75rem; + background: #2a2a2a; + color: #aaa; + border: 1px solid #555; + cursor: pointer; + border-radius: 3px; +} +.combat-stats-toggle.active { + background: #3a5070; + color: #fff; + border-color: #5588bb; +} diff --git a/static/index.html b/static/index.html index 3cde6e95..8c379889 100644 --- a/static/index.html +++ b/static/index.html @@ -1,161 +1,18 @@ - - - - Dereth Tracker - - - - - - -
- - - - - -
- - -
- - -
-
- Dereth map - - -
-
-
-
-
-
- - - - + + + + Mosswart Overlord v2 + + + + + + + + + +
+ diff --git a/static/sw.js b/static/sw.js new file mode 100644 index 00000000..71839ee5 --- /dev/null +++ b/static/sw.js @@ -0,0 +1,72 @@ +// Service worker for MosswartOverlord v2 — caches static assets for instant repeat loads +const CACHE_NAME = 'mo-v2-cache-v1'; +const STATIC_ASSETS = [ + '/dereth.png', + '/dereth_highres.png', + '/prismatic-taper-icon.png', + '/icons/0600127E.png', + '/icons/06000133.png', + '/icons/06001080.png', +]; + +self.addEventListener('install', (event) => { + event.waitUntil( + caches.open(CACHE_NAME).then(cache => cache.addAll(STATIC_ASSETS)) + ); + self.skipWaiting(); +}); + +self.addEventListener('activate', (event) => { + event.waitUntil( + caches.keys().then(keys => + Promise.all(keys.filter(k => k !== CACHE_NAME).map(k => caches.delete(k))) + ) + ); + self.clients.claim(); +}); + +self.addEventListener('fetch', (event) => { + const url = new URL(event.request.url); + + // Cache icon images on first fetch + if (url.pathname.startsWith('/icons/') && event.request.method === 'GET') { + event.respondWith( + caches.match(event.request).then(cached => { + if (cached) return cached; + return fetch(event.request).then(response => { + if (response.ok) { + const clone = response.clone(); + caches.open(CACHE_NAME).then(cache => cache.put(event.request, clone)); + } + return response; + }); + }) + ); + return; + } + + // Cache dungeon_tiles.json (large, rarely changes) + if (url.pathname === '/dungeon_tiles.json') { + event.respondWith( + caches.match(event.request).then(cached => { + if (cached) return cached; + return fetch(event.request).then(response => { + if (response.ok) { + const clone = response.clone(); + caches.open(CACHE_NAME).then(cache => cache.put(event.request, clone)); + } + return response; + }); + }) + ); + return; + } + + // Cache static assets (map images etc) + if (STATIC_ASSETS.some(a => url.pathname === a)) { + event.respondWith( + caches.match(event.request).then(cached => cached || fetch(event.request)) + ); + return; + } +}); diff --git a/static/v2/assets/CharacterWindow-BNz9pNjP.js b/static/v2/assets/CharacterWindow-BNz9pNjP.js new file mode 100644 index 00000000..7097ce50 --- /dev/null +++ b/static/v2/assets/CharacterWindow-BNz9pNjP.js @@ -0,0 +1 @@ +import{r as f,a as Y,j as e,D as X}from"./index-DzGubmvT.js";import"./react-DlyoauG8.js";const B={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"},F={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"},U={354:"Melee",355:"Ranged",362:"Summoning"},J={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"},D={181:"Chess Rank",192:"Fishing Skill",199:"Total Augmentations",322:"Aetheria Slots",390:"Enlightenment"};function K(c){return c>=1001?"Master":c>=301?"Lord":c>=151?"Knight":c>=31?"Adept":"Initiate"}const d="#af7a30",u="#000022",Z=({id:c,charName:g,zIndex:L,vitals:s})=>{var _,N;const[n,O]=f.useState(null),[j,H]=f.useState(0),[m,P]=f.useState(0);f.useEffect(()=>{Y(`/character-stats/${encodeURIComponent(g)}`).then(O).catch(()=>{})},[g]);const a=t=>t!=null?Number(t).toLocaleString():"—",o=(n==null?void 0:n.stats_data)||n||{},C=o.attributes||{},A=o.skills||{},V=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])=>B[parseInt(t)]&&Number(l)>0).map(([t,l])=>({name:B[parseInt(t)],uses:Number(l)})),w=Object.entries(h).filter(([t,l])=>F[parseInt(t)]&&Number(l)>0).map(([t,l])=>({name:F[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);D[i]&&x.push({name:D[i],value:l})});const y=[];Object.entries(h).forEach(([t,l])=>{const i=parseInt(t);U[i]&&y.push({name:U[i],value:J[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:K(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"},G={padding:"2px 6px",color:"#ccc"};return e.jsx(X,{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:()=>H(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:G,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=V[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:()=>P(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{Z as CharacterWindow}; diff --git a/static/v2/assets/CombatPickerWindow-BO4qfgdX.js b/static/v2/assets/CombatPickerWindow-BO4qfgdX.js new file mode 100644 index 00000000..134d3dee --- /dev/null +++ b/static/v2/assets/CombatPickerWindow-BO4qfgdX.js @@ -0,0 +1 @@ +import{u as c,j as r,D as d}from"./index-DzGubmvT.js";import"./react-DlyoauG8.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/v2/assets/CombatStatsWindow-DSQwtgMl.js b/static/v2/assets/CombatStatsWindow-DSQwtgMl.js new file mode 100644 index 00000000..2631a091 --- /dev/null +++ b/static/v2/assets/CombatStatsWindow-DSQwtgMl.js @@ -0,0 +1 @@ +import{r as A,a as B,j as t,D as L}from"./index-DzGubmvT.js";import"./react-DlyoauG8.js";const w=["Typeless","Slash","Pierce","Bludgeon","Fire","Cold","Acid","Electric"];function f(n,a,x){var c,h,u,k;return(((h=(c=n==null?void 0:n[a])==null?void 0:c[x])==null?void 0:h.total_normal_damage)??0)+(((k=(u=n==null?void 0:n[a])==null?void 0:u[x])==null?void 0:k.total_crit_damage)??0)}function G(n){let a={attacks:0,failed:0,crits:0,normalDmg:0,maxNormal:0,critDmg:0,maxCrit:0};if(!n)return a;for(const x of Object.values(n))for(const c of Object.values(x))a.attacks+=c.total_attacks??0,a.failed+=c.failed_attacks??0,a.crits+=c.crits??0,a.normalDmg+=c.total_normal_damage??0,a.maxNormal=Math.max(a.maxNormal,c.max_normal_damage??0),a.critDmg+=c.total_crit_damage??0,a.maxCrit=Math.max(a.maxCrit,c.max_crit_damage??0);return a}function F(n,a){let x={attacks:0,failed:0};const c=n==null?void 0:n[a];if(!c)return x;for(const h of Object.values(c))x.attacks+=h.total_attacks??0,x.failed+=h.failed_attacks??0;return x}const Y=({id:n,charName:a,zIndex:x})=>{const[c,h]=A.useState(null),[u,k]=A.useState("session"),[p,O]=A.useState(null);A.useEffect(()=>{B(`/combat-stats/${encodeURIComponent(a)}`).then(h).catch(()=>{});const e=setInterval(()=>{B(`/combat-stats/${encodeURIComponent(a)}`).then(h).catch(()=>{})},1e4);return()=>clearInterval(e)},[a]);const m=c==null?void 0:c[u],_=(m==null?void 0:m.monsters)??{},S=Object.keys(_).filter(e=>e!=="__cloak_surges__").sort(),r=A.useMemo(()=>{let e={},l={},v=0,$=0;const T=p?[_[p]].filter(Boolean):S.map(j=>_[j]);for(const j of T)if(j){for(const[g,D]of Object.entries(j.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(j.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+=j.aetheria_surges??0,$+=j.cloak_surges??0}return _.__cloak_surges__&&!p&&($+=_.__cloak_surges__.cloak_surges??0),{offense:e,defense:l,aeth:v,cloak:$}},[_,S,p]),o=G(r.offense),M=F(r.defense,"MeleeMissile"),b=F(r.defense,"Magic");o.attacks>0&&((o.attacks-o.failed)/o.attacks*100).toFixed(0);const N=M.attacks>0?(M.failed/M.attacks*100).toFixed(0):"0",W=b.attacks>0?(b.failed/b.attacks*100).toFixed(0):"0",C=o.attacks-o.failed,R=C-o.crits,z=R>0?Math.round(o.normalDmg/R):0;o.crits>0&&Math.round(o.critDmg/o.crits);const I=C>0?(o.crits/C*100).toFixed(1):"0",s=e=>e===0?"":e.toLocaleString();return t.jsxs(L,{id:n,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"},children:[t.jsx("button",{className:`ml-stats-range-btn ${u==="session"?"active":""}`,onClick:()=>k("session"),children:"Session"}),t.jsx("button",{className:`ml-stats-range-btn ${u==="lifetime"?"active":""}`,onClick:()=>k("lifetime"),children:"Lifetime"})]}),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:p===null?"#2a3a4a":"",borderBottom:"1px solid #222",color:"#ddd"},onClick:()=>O(null),children:[t.jsx("span",{style:{width:14,color:"#888"},children:p===null?"*":""}),t.jsx("span",{style:{flex:1},children:"All"}),t.jsx("span",{style:{width:40,textAlign:"right"},children:s((m==null?void 0:m.total_kills)??0)}),t.jsx("span",{style:{width:55,textAlign:"right"},children:s((m==null?void 0:m.total_damage_given)??0)})]}),S.map(e=>{const l=_[e];return t.jsxs("div",{style:{display:"flex",padding:"2px 6px",cursor:"pointer",background:p===e?"#2a3a4a":"",borderBottom:"1px solid #1a1a1a",color:"#ccc"},onClick:()=>O(e),children:[t.jsx("span",{style:{width:14,color:"#888"},children:p===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",M.attacks>0?`${s(M.attacks)} (${N}%)`:""],["Resists",b.attacks>0?`${s(b.attacks)} (${W}%)`:""],["A.Surges",r.aeth>0?`${s(r.aeth)}`:""],["C.Surges",r.cloak>0?`${s(r.cloak)}`:""],["",""],["",""],["Av/Mx",z>0?`${s(z)} / ${s(o.maxNormal)}`:""],["Crits",o.crits>0?`${s(o.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(f(r.offense,"MeleeMissile",e))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(f(r.offense,"Magic",e))}),t.jsx("td",{}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(f(r.defense,"MeleeMissile",e))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(f(r.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+f(r.offense,"MeleeMissile",l),0))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+f(r.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+f(r.defense,"MeleeMissile",l),0))}),t.jsx("td",{style:{textAlign:"right",padding:"1px 3px",color:"#ccc"},children:s(w.reduce((e,l)=>e+f(r.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(o.normalDmg+o.critDmg)})]})]})]})})]})]})};export{Y as CombatStatsWindow}; diff --git a/static/v2/assets/DashboardView-CI4rL0mQ.js b/static/v2/assets/DashboardView-CI4rL0mQ.js new file mode 100644 index 00000000..f29e7227 --- /dev/null +++ b/static/v2/assets/DashboardView-CI4rL0mQ.js @@ -0,0 +1,72 @@ +import{j as E,R as A,r as N,a as eO}from"./index-DzGubmvT.js";import{c as hi,g as ue}from"./react-DlyoauG8.js";const tO=({children:e})=>E.jsxs("div",{className:"dashboard",children:[E.jsx("header",{className:"dashboard-header",children:E.jsx("h1",{className:"dashboard-title",children:"Mosswart Overlord"})}),E.jsx("main",{className:"dashboard-main",children:e})]}),rO=({activeChars:e,totalKills:t,totalRares:r,serverHealth:n})=>{var o;const i=((o=n==null?void 0:n.status)==null?void 0:o.toLowerCase())??"unknown",a=i==="online"||i==="up";return E.jsxs("div",{className:"global-stats",children:[E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:"global-value",children:e}),E.jsx("span",{className:"global-label",children:"Active Characters"})]}),E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:"global-value",children:t.toLocaleString()}),E.jsx("span",{className:"global-label",children:"Total Kills"})]}),E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:"global-value",children:r}),E.jsx("span",{className:"global-label",children:"Total Rares"})]}),E.jsxs("div",{className:"global-stat",children:[E.jsx("span",{className:`server-dot ${a?"online":"offline"}`}),E.jsxs("span",{className:"global-value",children:[(n==null?void 0:n.latency_ms)??"--","ms"]}),E.jsx("span",{className:"global-label",children:"Coldeve"})]})]})},Pi=A.memo(({label:e,current:t,max:r,color:n,bgColor:i})=>{const a=r>0?Math.min(100,Math.max(0,t/r*100)):0;return E.jsxs("div",{className:"vital-bar",children:[E.jsx("span",{className:"vital-label",children:e}),E.jsx("div",{className:"vital-track",style:{backgroundColor:i},children:E.jsx("div",{className:"vital-fill",style:{width:`${a}%`,background:n}})}),E.jsxs("span",{className:"vital-text",children:[t,"/",r]})]})});Pi.displayName="VitalBar";const nO=e=>{const t=(e||"idle").toLowerCase();return t==="combat"||t==="hunt"?{label:t==="combat"?"Combat":"Hunt",cls:"badge-combat"}:t==="nav"||t==="navigation"?{label:"Nav",cls:"badge-nav"}:t==="default"||t==="idle"||t===""?{label:"Idle",cls:"badge-idle"}:{label:e,cls:"badge-nav"}},Nb=A.memo(({character:e})=>{var u,s,c,f,l,h;const[t,r]=N.useState(!1),{telemetry:n,vitals:i,combat:a}=e,o=nO((n==null?void 0:n.vt_state)??"");return E.jsxs("div",{className:"char-card",onClick:()=>r(!t),children:[E.jsxs("div",{className:"char-header",children:[E.jsx("span",{className:"char-name",children:e.name}),E.jsx("span",{className:`char-badge ${o.cls}`,children:o.label})]}),i?E.jsxs("div",{className:"char-vitals",children:[E.jsx(Pi,{label:"HP",current:i.health_current,max:i.health_max,color:"linear-gradient(90deg, #ff4444, #ff6666)",bgColor:"#330000"}),E.jsx(Pi,{label:"ST",current:i.stamina_current,max:i.stamina_max,color:"linear-gradient(90deg, #ffaa00, #ffcc44)",bgColor:"#331a00"}),E.jsx(Pi,{label:"MN",current:i.mana_current,max:i.mana_max,color:"linear-gradient(90deg, #4488ff, #66aaff)",bgColor:"#001433"})]}):E.jsx("div",{className:"char-vitals-placeholder",children:"Awaiting vitals..."}),E.jsxs("div",{className:"char-stats-row",children:[E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:(n==null?void 0:n.kills_per_hour)??"--"}),E.jsx("span",{className:"stat-label",children:"kills/hr"})]}),E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:((u=n==null?void 0:n.kills)==null?void 0:u.toLocaleString())??"--"}),E.jsx("span",{className:"stat-label",children:"kills"})]}),E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:(n==null?void 0:n.deaths)??"0"}),E.jsx("span",{className:"stat-label",children:"deaths"})]}),E.jsxs("div",{className:"stat",children:[E.jsx("span",{className:"stat-value",children:((s=n==null?void 0:n.onlinetime)==null?void 0:s.replace(/^00\./,""))??"--"}),E.jsx("span",{className:"stat-label",children:"uptime"})]})]}),n&&E.jsxs("div",{className:"char-location",children:[(c=n.ns)==null?void 0:c.toFixed(1),"N, ",(f=n.ew)==null?void 0:f.toFixed(1),"E"]}),t&&E.jsxs("div",{className:"char-expanded",children:[i!=null&&i.vitae?E.jsxs("div",{className:"vitae-warn",children:["Vitae: ",i.vitae,"%"]}):null,E.jsxs("div",{className:"expanded-row",children:[E.jsxs("span",{children:["Prismatics: ",(n==null?void 0:n.prismatic_taper_count)??"--"]}),E.jsxs("span",{children:["Total Deaths: ",(n==null?void 0:n.total_deaths)??"--"]})]}),(a==null?void 0:a.session)&&E.jsxs("div",{className:"expanded-row",children:[E.jsxs("span",{children:["Session Dmg: ",(l=a.session.total_damage_given)==null?void 0:l.toLocaleString()]}),E.jsxs("span",{children:["Session Kills: ",a.session.total_kills]})]}),E.jsxs("div",{className:"expanded-row",children:[E.jsxs("span",{children:["RAM: ",n!=null&&n.mem_mb?(n.mem_mb/1048576).toFixed(0)+" MB":"--"]}),E.jsxs("span",{children:["CPU: ",((h=n==null?void 0:n.cpu_pct)==null?void 0:h.toFixed(1))??"--","%"]})]})]})]})});Nb.displayName="CharacterCard";const iO=({characters:e})=>{const t=N.useMemo(()=>Array.from(e.values()).sort((r,n)=>r.name.localeCompare(n.name)),[e]);return t.length===0?E.jsx("div",{className:"grid-empty",children:"No active characters"}):E.jsx("div",{className:"char-grid",children:t.map(r=>E.jsx(Nb,{character:r},r.name))})},aO=({tabs:e})=>{var n,i;const[t,r]=N.useState(((n=e[0])==null?void 0:n.id)??"");return E.jsxs("div",{className:"tab-container",children:[E.jsx("div",{className:"tab-bar",children:e.map(a=>E.jsx("button",{className:`tab-btn ${t===a.id?"active":""}`,onClick:()=>r(a.id),children:a.label},a.id))}),E.jsx("div",{className:"tab-content",children:(i=e.find(a=>a.id===t))==null?void 0:i.content})]})};function Rb(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(t=0;t-1}return Wo=t,Wo}var Ho,wd;function OO(){if(wd)return Ho;wd=1;var e=Ea();function t(r,n){var i=this.__data__,a=e(i,r);return a<0?(++this.size,i.push([r,n])):i[a][1]=n,this}return Ho=t,Ho}var Ko,Od;function Ma(){if(Od)return Ko;Od=1;var e=gO(),t=bO(),r=xO(),n=wO(),i=OO();function a(o){var u=-1,s=o==null?0:o.length;for(this.clear();++u0?1:-1},Gt=function(t){return er(t)&&t.indexOf("%")===t.length-1},L=function(t){return HO(t)&&!ii(t)},KO=function(t){return ee(t)},Se=function(t){return L(t)||er(t)},GO=0,ai=function(t){var r=++GO;return"".concat(t||"").concat(r)},ke=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!L(t)&&!er(t))return n;var a;if(Gt(t)){var o=t.indexOf("%");a=r*parseFloat(t.slice(0,o))/100}else a=+t;return ii(a)&&(a=n),i&&a>r&&(a=r),a},Mt=function(t){if(!t)return null;var r=Object.keys(t);return r&&r.length?t[r[0]]:null},VO=function(t){if(!Array.isArray(t))return!1;for(var r=t.length,n={},i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function t_(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var Yd={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart",contextmenu:"onContextMenu",dblclick:"onDoubleClick"},yt=function(t){return typeof t=="string"?t:t?t.displayName||t.name||"Component":""},Zd=null,gu=null,Kf=function e(t){if(t===Zd&&Array.isArray(gu))return gu;var r=[];return N.Children.forEach(t,function(n){ee(n)||(FO.isFragment(n)?r=r.concat(e(n.props.children)):r.push(n))}),gu=r,Zd=t,r};function Ze(e,t){var r=[],n=[];return Array.isArray(t)?n=t.map(function(i){return yt(i)}):n=[yt(t)],Kf(e).forEach(function(i){var a=He(i,"type.displayName")||He(i,"type.name");n.indexOf(a)!==-1&&r.push(i)}),r}function ze(e,t){var r=Ze(e,t);return r&&r[0]}var Jd=function(t){if(!t||!t.props)return!1;var r=t.props,n=r.width,i=r.height;return!(!L(n)||n<=0||!L(i)||i<=0)},r_=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],n_=function(t){return t&&t.type&&er(t.type)&&r_.indexOf(t.type)>=0},i_=function(t,r,n,i){var a,o=(a=mu==null?void 0:mu[i])!==null&&a!==void 0?a:[];return r.startsWith("data-")||!Y(t)&&(i&&o.includes(r)||ZO.includes(r))||n&&Hf.includes(r)},X=function(t,r,n){if(!t||typeof t=="function"||typeof t=="boolean")return null;var i=t;if(N.isValidElement(t)&&(i=t.props),!Yr(i))return null;var a={};return Object.keys(i).forEach(function(o){var u;i_((u=i)===null||u===void 0?void 0:u[o],o,r,n)&&(a[o]=i[o])}),a},gl=function e(t,r){if(t===r)return!0;var n=N.Children.count(t);if(n!==N.Children.count(r))return!1;if(n===0)return!0;if(n===1)return Qd(Array.isArray(t)?t[0]:t,Array.isArray(r)?r[0]:r);for(var i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function c_(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function xl(e){var t=e.children,r=e.width,n=e.height,i=e.viewBox,a=e.className,o=e.style,u=e.title,s=e.desc,c=s_(e,u_),f=i||{width:r,height:n,x:0,y:0},l=Q("recharts-surface",a);return A.createElement("svg",bl({},X(c,!0,"svg"),{className:l,width:r,height:n,style:o,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height)}),A.createElement("title",null,u),A.createElement("desc",null,s),t)}var l_=["children","className"];function wl(){return wl=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function h_(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var ae=A.forwardRef(function(e,t){var r=e.children,n=e.className,i=f_(e,l_),a=Q("recharts-layer",n);return A.createElement("g",wl({className:a},X(i,!0),{ref:t}),r)}),nt=function(t,r){for(var n=arguments.length,i=new Array(n>2?n-2:0),a=2;aa?0:a+r),n=n>a?a:n,n<0&&(n+=a),a=r>n?0:n-r>>>0,r>>>=0;for(var o=Array(a);++i=a?r:e(r,n,i)}return xu=t,xu}var wu,np;function Wb(){if(np)return wu;np=1;var e="\\ud800-\\udfff",t="\\u0300-\\u036f",r="\\ufe20-\\ufe2f",n="\\u20d0-\\u20ff",i=t+r+n,a="\\ufe0e\\ufe0f",o="\\u200d",u=RegExp("["+o+e+i+a+"]");function s(c){return u.test(c)}return wu=s,wu}var Ou,ip;function v_(){if(ip)return Ou;ip=1;function e(t){return t.split("")}return Ou=e,Ou}var _u,ap;function y_(){if(ap)return _u;ap=1;var e="\\ud800-\\udfff",t="\\u0300-\\u036f",r="\\ufe20-\\ufe2f",n="\\u20d0-\\u20ff",i=t+r+n,a="\\ufe0e\\ufe0f",o="["+e+"]",u="["+i+"]",s="\\ud83c[\\udffb-\\udfff]",c="(?:"+u+"|"+s+")",f="[^"+e+"]",l="(?:\\ud83c[\\udde6-\\uddff]){2}",h="[\\ud800-\\udbff][\\udc00-\\udfff]",p="\\u200d",y=c+"?",v="["+a+"]?",d="(?:"+p+"(?:"+[f,l,h].join("|")+")"+v+y+")*",g=v+y+d,x="(?:"+[f+u+"?",u,l,h,o].join("|")+")",w=RegExp(s+"(?="+s+")|"+x+g,"g");function O(m){return m.match(w)||[]}return _u=O,_u}var Su,op;function m_(){if(op)return Su;op=1;var e=v_(),t=Wb(),r=y_();function n(i){return t(i)?r(i):e(i)}return Su=n,Su}var Au,up;function g_(){if(up)return Au;up=1;var e=p_(),t=Wb(),r=m_(),n=Bb();function i(a){return function(o){o=n(o);var u=t(o)?r(o):void 0,s=u?u[0]:o.charAt(0),c=u?e(u,1).join(""):o.slice(1);return s[a]()+c}}return Au=i,Au}var Pu,sp;function b_(){if(sp)return Pu;sp=1;var e=g_(),t=e("toUpperCase");return Pu=t,Pu}var x_=b_();const Ia=ue(x_);function le(e){return function(){return e}}const Hb=Math.cos,Mi=Math.sin,it=Math.sqrt,$i=Math.PI,ka=2*$i,Ol=Math.PI,_l=2*Ol,Wt=1e-6,w_=_l-Wt;function Kb(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return Kb;const r=10**t;return function(n){this._+=n[0];for(let i=1,a=n.length;iWt)if(!(Math.abs(l*s-c*f)>Wt)||!a)this._append`L${this._x1=t},${this._y1=r}`;else{let p=n-o,y=i-u,v=s*s+c*c,d=p*p+y*y,g=Math.sqrt(v),x=Math.sqrt(h),w=a*Math.tan((Ol-Math.acos((v+h-d)/(2*g*x)))/2),O=w/x,m=w/g;Math.abs(O-1)>Wt&&this._append`L${t+O*f},${r+O*l}`,this._append`A${a},${a},0,0,${+(l*p>f*y)},${this._x1=t+m*s},${this._y1=r+m*c}`}}arc(t,r,n,i,a,o){if(t=+t,r=+r,n=+n,o=!!o,n<0)throw new Error(`negative radius: ${n}`);let u=n*Math.cos(i),s=n*Math.sin(i),c=t+u,f=r+s,l=1^o,h=o?i-a:a-i;this._x1===null?this._append`M${c},${f}`:(Math.abs(this._x1-c)>Wt||Math.abs(this._y1-f)>Wt)&&this._append`L${c},${f}`,n&&(h<0&&(h=h%_l+_l),h>w_?this._append`A${n},${n},0,1,${l},${t-u},${r-s}A${n},${n},0,1,${l},${this._x1=c},${this._y1=f}`:h>Wt&&this._append`A${n},${n},0,${+(h>=Ol)},${l},${this._x1=t+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function Gf(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new __(t)}function Vf(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function Gb(e){this._context=e}Gb.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function Na(e){return new Gb(e)}function Vb(e){return e[0]}function Xb(e){return e[1]}function Yb(e,t){var r=le(!0),n=null,i=Na,a=null,o=Gf(u);e=typeof e=="function"?e:e===void 0?Vb:le(e),t=typeof t=="function"?t:t===void 0?Xb:le(t);function u(s){var c,f=(s=Vf(s)).length,l,h=!1,p;for(n==null&&(a=i(p=o())),c=0;c<=f;++c)!(c=p;--y)u.point(w[y],O[y]);u.lineEnd(),u.areaEnd()}g&&(w[h]=+e(d,h,l),O[h]=+t(d,h,l),u.point(n?+n(d,h,l):w[h],r?+r(d,h,l):O[h]))}if(x)return u=null,x+""||null}function f(){return Yb().defined(i).curve(o).context(a)}return c.x=function(l){return arguments.length?(e=typeof l=="function"?l:le(+l),n=null,c):e},c.x0=function(l){return arguments.length?(e=typeof l=="function"?l:le(+l),c):e},c.x1=function(l){return arguments.length?(n=l==null?null:typeof l=="function"?l:le(+l),c):n},c.y=function(l){return arguments.length?(t=typeof l=="function"?l:le(+l),r=null,c):t},c.y0=function(l){return arguments.length?(t=typeof l=="function"?l:le(+l),c):t},c.y1=function(l){return arguments.length?(r=l==null?null:typeof l=="function"?l:le(+l),c):r},c.lineX0=c.lineY0=function(){return f().x(e).y(t)},c.lineY1=function(){return f().x(e).y(r)},c.lineX1=function(){return f().x(n).y(t)},c.defined=function(l){return arguments.length?(i=typeof l=="function"?l:le(!!l),c):i},c.curve=function(l){return arguments.length?(o=l,a!=null&&(u=o(a)),c):o},c.context=function(l){return arguments.length?(l==null?a=u=null:u=o(a=l),c):a},c}class Zb{constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}}function S_(e){return new Zb(e,!0)}function A_(e){return new Zb(e,!1)}const Xf={draw(e,t){const r=it(t/$i);e.moveTo(r,0),e.arc(0,0,r,0,ka)}},P_={draw(e,t){const r=it(t/5)/2;e.moveTo(-3*r,-r),e.lineTo(-r,-r),e.lineTo(-r,-3*r),e.lineTo(r,-3*r),e.lineTo(r,-r),e.lineTo(3*r,-r),e.lineTo(3*r,r),e.lineTo(r,r),e.lineTo(r,3*r),e.lineTo(-r,3*r),e.lineTo(-r,r),e.lineTo(-3*r,r),e.closePath()}},Jb=it(1/3),T_=Jb*2,j_={draw(e,t){const r=it(t/T_),n=r*Jb;e.moveTo(0,-r),e.lineTo(n,0),e.lineTo(0,r),e.lineTo(-n,0),e.closePath()}},E_={draw(e,t){const r=it(t),n=-r/2;e.rect(n,n,r,r)}},M_=.8908130915292852,Qb=Mi($i/10)/Mi(7*$i/10),$_=Mi(ka/10)*Qb,C_=-Hb(ka/10)*Qb,I_={draw(e,t){const r=it(t*M_),n=$_*r,i=C_*r;e.moveTo(0,-r),e.lineTo(n,i);for(let a=1;a<5;++a){const o=ka*a/5,u=Hb(o),s=Mi(o);e.lineTo(s*r,-u*r),e.lineTo(u*n-s*i,s*n+u*i)}e.closePath()}},Tu=it(3),k_={draw(e,t){const r=-it(t/(Tu*3));e.moveTo(0,r*2),e.lineTo(-Tu*r,-r),e.lineTo(Tu*r,-r),e.closePath()}},Ke=-.5,Ge=it(3)/2,Sl=1/it(12),N_=(Sl/2+1)*3,R_={draw(e,t){const r=it(t/N_),n=r/2,i=r*Sl,a=n,o=r*Sl+r,u=-a,s=o;e.moveTo(n,i),e.lineTo(a,o),e.lineTo(u,s),e.lineTo(Ke*n-Ge*i,Ge*n+Ke*i),e.lineTo(Ke*a-Ge*o,Ge*a+Ke*o),e.lineTo(Ke*u-Ge*s,Ge*u+Ke*s),e.lineTo(Ke*n+Ge*i,Ke*i-Ge*n),e.lineTo(Ke*a+Ge*o,Ke*o-Ge*a),e.lineTo(Ke*u+Ge*s,Ke*s-Ge*u),e.closePath()}};function D_(e,t){let r=null,n=Gf(i);e=typeof e=="function"?e:le(e||Xf),t=typeof t=="function"?t:le(t===void 0?64:+t);function i(){let a;if(r||(r=a=n()),e.apply(this,arguments).draw(r,+t.apply(this,arguments)),a)return r=null,a+""||null}return i.type=function(a){return arguments.length?(e=typeof a=="function"?a:le(a),i):e},i.size=function(a){return arguments.length?(t=typeof a=="function"?a:le(+a),i):t},i.context=function(a){return arguments.length?(r=a??null,i):r},i}function Ci(){}function Ii(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function e0(e){this._context=e}e0.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Ii(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Ii(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function q_(e){return new e0(e)}function t0(e){this._context=e}t0.prototype={areaStart:Ci,areaEnd:Ci,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Ii(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function L_(e){return new t0(e)}function r0(e){this._context=e}r0.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Ii(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function B_(e){return new r0(e)}function n0(e){this._context=e}n0.prototype={areaStart:Ci,areaEnd:Ci,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function F_(e){return new n0(e)}function cp(e){return e<0?-1:1}function lp(e,t,r){var n=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(n||i<0&&-0),o=(r-e._y1)/(i||n<0&&-0),u=(a*i+o*n)/(n+i);return(cp(a)+cp(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function fp(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function ju(e,t,r){var n=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-n)/3;e._context.bezierCurveTo(n+u,i+u*t,a-u,o-u*r,a,o)}function ki(e){this._context=e}ki.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:ju(this,this._t0,fp(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,ju(this,fp(this,r=lp(this,e,t)),r);break;default:ju(this,this._t0,r=lp(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function i0(e){this._context=new a0(e)}(i0.prototype=Object.create(ki.prototype)).point=function(e,t){ki.prototype.point.call(this,t,e)};function a0(e){this._context=e}a0.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,a){this._context.bezierCurveTo(t,e,n,r,a,i)}};function z_(e){return new ki(e)}function U_(e){return new i0(e)}function o0(e){this._context=e}o0.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var n=hp(e),i=hp(t),a=0,o=1;o=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function H_(e){return new Ra(e,.5)}function K_(e){return new Ra(e,0)}function G_(e){return new Ra(e,1)}function _r(e,t){if((o=e.length)>1)for(var r=1,n,i,a=e[t[0]],o,u=a.length;r=0;)r[t]=t;return r}function V_(e,t){return e[t]}function X_(e){const t=[];return t.key=e,t}function Y_(){var e=le([]),t=Al,r=_r,n=V_;function i(a){var o=Array.from(e.apply(this,arguments),X_),u,s=o.length,c=-1,f;for(const l of a)for(u=0,++c;u0){for(var r,n,i=0,a=e[0].length,o;i0){for(var r=0,n=e[t[0]],i,a=n.length;r0)||!((a=(i=e[t[0]]).length)>0))){for(var r=0,n=1,i,a,o;n=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function a1(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var u0={symbolCircle:Xf,symbolCross:P_,symbolDiamond:j_,symbolSquare:E_,symbolStar:I_,symbolTriangle:k_,symbolWye:R_},o1=Math.PI/180,u1=function(t){var r="symbol".concat(Ia(t));return u0[r]||Xf},s1=function(t,r,n){if(r==="area")return t;switch(n){case"cross":return 5*t*t/9;case"diamond":return .5*t*t/Math.sqrt(3);case"square":return t*t;case"star":{var i=18*o1;return 1.25*t*t*(Math.tan(i)-Math.tan(i*2)*Math.pow(Math.tan(i),2))}case"triangle":return Math.sqrt(3)*t*t/4;case"wye":return(21-10*Math.sqrt(3))*t*t/8;default:return Math.PI*t*t/4}},c1=function(t,r){u0["symbol".concat(Ia(t))]=r},Yf=function(t){var r=t.type,n=r===void 0?"circle":r,i=t.size,a=i===void 0?64:i,o=t.sizeType,u=o===void 0?"area":o,s=i1(t,e1),c=pp(pp({},s),{},{type:n,size:a,sizeType:u}),f=function(){var d=u1(n),g=D_().type(d).size(s1(a,u,n));return g()},l=c.className,h=c.cx,p=c.cy,y=X(c,!0);return h===+h&&p===+p&&a===+a?A.createElement("path",Pl({},y,{className:Q("recharts-symbols",l),transform:"translate(".concat(h,", ").concat(p,")"),d:f()})):null};Yf.registerSymbol=c1;function Sr(e){"@babel/helpers - typeof";return Sr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Sr(e)}function Tl(){return Tl=Object.assign?Object.assign.bind():function(e){for(var t=1;t`);var x=p.inactive?c:p.color;return A.createElement("li",Tl({className:d,style:l,key:"legend-item-".concat(y)},tr(n.props,p,y)),A.createElement(xl,{width:o,height:o,viewBox:f,style:h},n.renderIcon(p)),A.createElement("span",{className:"recharts-legend-item-text",style:{color:x}},v?v(g,p,y):g))})}},{key:"render",value:function(){var n=this.props,i=n.payload,a=n.layout,o=n.align;if(!i||!i.length)return null;var u={padding:0,margin:0,textAlign:a==="horizontal"?o:"left"};return A.createElement("ul",{className:"recharts-default-legend",style:u},this.renderItems())}}])})(N.PureComponent);_n(Zf,"displayName","Legend");_n(Zf,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"middle",inactiveColor:"#ccc"});var Eu,yp;function b1(){if(yp)return Eu;yp=1;var e=Ma();function t(){this.__data__=new e,this.size=0}return Eu=t,Eu}var Mu,mp;function x1(){if(mp)return Mu;mp=1;function e(t){var r=this.__data__,n=r.delete(t);return this.size=r.size,n}return Mu=e,Mu}var $u,gp;function w1(){if(gp)return $u;gp=1;function e(t){return this.__data__.get(t)}return $u=e,$u}var Cu,bp;function O1(){if(bp)return Cu;bp=1;function e(t){return this.__data__.has(t)}return Cu=e,Cu}var Iu,xp;function _1(){if(xp)return Iu;xp=1;var e=Ma(),t=Ff(),r=zf(),n=200;function i(a,o){var u=this.__data__;if(u instanceof e){var s=u.__data__;if(!t||s.lengthp))return!1;var v=l.get(o),d=l.get(u);if(v&&d)return v==u&&d==o;var g=-1,x=!0,w=s&i?new e:void 0;for(l.set(o,u),l.set(u,o);++g-1&&n%1==0&&n-1&&r%1==0&&r<=e}return ts=t,ts}var rs,Wp;function R1(){if(Wp)return rs;Wp=1;var e=_t(),t=th(),r=St(),n="[object Arguments]",i="[object Array]",a="[object Boolean]",o="[object Date]",u="[object Error]",s="[object Function]",c="[object Map]",f="[object Number]",l="[object Object]",h="[object RegExp]",p="[object Set]",y="[object String]",v="[object WeakMap]",d="[object ArrayBuffer]",g="[object DataView]",x="[object Float32Array]",w="[object Float64Array]",O="[object Int8Array]",m="[object Int16Array]",b="[object Int32Array]",_="[object Uint8Array]",S="[object Uint8ClampedArray]",P="[object Uint16Array]",$="[object Uint32Array]",j={};j[x]=j[w]=j[O]=j[m]=j[b]=j[_]=j[S]=j[P]=j[$]=!0,j[n]=j[i]=j[d]=j[a]=j[g]=j[o]=j[u]=j[s]=j[c]=j[f]=j[l]=j[h]=j[p]=j[y]=j[v]=!1;function T(M){return r(M)&&t(M.length)&&!!j[e(M)]}return rs=T,rs}var ns,Hp;function m0(){if(Hp)return ns;Hp=1;function e(t){return function(r){return t(r)}}return ns=e,ns}var pn={exports:{}};pn.exports;var Kp;function D1(){return Kp||(Kp=1,(function(e,t){var r=Db(),n=t&&!t.nodeType&&t,i=n&&!0&&e&&!e.nodeType&&e,a=i&&i.exports===n,o=a&&r.process,u=(function(){try{var s=i&&i.require&&i.require("util").types;return s||o&&o.binding&&o.binding("util")}catch{}})();e.exports=u})(pn,pn.exports)),pn.exports}var is,Gp;function g0(){if(Gp)return is;Gp=1;var e=R1(),t=m0(),r=D1(),n=r&&r.isTypedArray,i=n?t(n):e;return is=i,is}var as,Vp;function q1(){if(Vp)return as;Vp=1;var e=I1(),t=Qf(),r=Le(),n=y0(),i=eh(),a=g0(),o=Object.prototype,u=o.hasOwnProperty;function s(c,f){var l=r(c),h=!l&&t(c),p=!l&&!h&&n(c),y=!l&&!h&&!p&&a(c),v=l||h||p||y,d=v?e(c.length,String):[],g=d.length;for(var x in c)(f||u.call(c,x))&&!(v&&(x=="length"||p&&(x=="offset"||x=="parent")||y&&(x=="buffer"||x=="byteLength"||x=="byteOffset")||i(x,g)))&&d.push(x);return d}return as=s,as}var os,Xp;function L1(){if(Xp)return os;Xp=1;var e=Object.prototype;function t(r){var n=r&&r.constructor,i=typeof n=="function"&&n.prototype||e;return r===i}return os=t,os}var us,Yp;function b0(){if(Yp)return us;Yp=1;function e(t,r){return function(n){return t(r(n))}}return us=e,us}var ss,Zp;function B1(){if(Zp)return ss;Zp=1;var e=b0(),t=e(Object.keys,Object);return ss=t,ss}var cs,Jp;function F1(){if(Jp)return cs;Jp=1;var e=L1(),t=B1(),r=Object.prototype,n=r.hasOwnProperty;function i(a){if(!e(a))return t(a);var o=[];for(var u in Object(a))n.call(a,u)&&u!="constructor"&&o.push(u);return o}return cs=i,cs}var ls,Qp;function oi(){if(Qp)return ls;Qp=1;var e=Lf(),t=th();function r(n){return n!=null&&t(n.length)&&!e(n)}return ls=r,ls}var fs,ev;function Da(){if(ev)return fs;ev=1;var e=q1(),t=F1(),r=oi();function n(i){return r(i)?e(i):t(i)}return fs=n,fs}var hs,tv;function z1(){if(tv)return hs;tv=1;var e=E1(),t=C1(),r=Da();function n(i){return e(i,r,t)}return hs=n,hs}var ds,rv;function U1(){if(rv)return ds;rv=1;var e=z1(),t=1,r=Object.prototype,n=r.hasOwnProperty;function i(a,o,u,s,c,f){var l=u&t,h=e(a),p=h.length,y=e(o),v=y.length;if(p!=v&&!l)return!1;for(var d=p;d--;){var g=h[d];if(!(l?g in o:n.call(o,g)))return!1}var x=f.get(a),w=f.get(o);if(x&&w)return x==o&&w==a;var O=!0;f.set(a,o),f.set(o,a);for(var m=l;++d-1}return Ls=t,Ls}var Bs,Ev;function cS(){if(Ev)return Bs;Ev=1;function e(t,r,n){for(var i=-1,a=t==null?0:t.length;++i=o){var g=c?null:i(s);if(g)return a(g);y=!1,h=n,d=new e}else d=c?[]:v;e:for(;++l=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function SS(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function AS(e){return e.value}function PS(e,t){if(A.isValidElement(e))return A.cloneElement(e,t);if(typeof e=="function")return A.createElement(e,t);t.ref;var r=_S(t,vS);return A.createElement(Zf,r)}var Dv=1,Zt=(function(e){function t(){var r;yS(this,t);for(var n=arguments.length,i=new Array(n),a=0;aDv||Math.abs(i.height-this.lastBoundingBox.height)>Dv)&&(this.lastBoundingBox.width=i.width,this.lastBoundingBox.height=i.height,n&&n(i)):(this.lastBoundingBox.width!==-1||this.lastBoundingBox.height!==-1)&&(this.lastBoundingBox.width=-1,this.lastBoundingBox.height=-1,n&&n(null))}},{key:"getBBoxSnapshot",value:function(){return this.lastBoundingBox.width>=0&&this.lastBoundingBox.height>=0?ft({},this.lastBoundingBox):{width:0,height:0}}},{key:"getDefaultPosition",value:function(n){var i=this.props,a=i.layout,o=i.align,u=i.verticalAlign,s=i.margin,c=i.chartWidth,f=i.chartHeight,l,h;if(!n||(n.left===void 0||n.left===null)&&(n.right===void 0||n.right===null))if(o==="center"&&a==="vertical"){var p=this.getBBoxSnapshot();l={left:((c||0)-p.width)/2}}else l=o==="right"?{right:s&&s.right||0}:{left:s&&s.left||0};if(!n||(n.top===void 0||n.top===null)&&(n.bottom===void 0||n.bottom===null))if(u==="middle"){var y=this.getBBoxSnapshot();h={top:((f||0)-y.height)/2}}else h=u==="bottom"?{bottom:s&&s.bottom||0}:{top:s&&s.top||0};return ft(ft({},l),h)}},{key:"render",value:function(){var n=this,i=this.props,a=i.content,o=i.width,u=i.height,s=i.wrapperStyle,c=i.payloadUniqBy,f=i.payload,l=ft(ft({position:"absolute",width:o||"auto",height:u||"auto"},this.getDefaultPosition(s)),s);return A.createElement("div",{className:"recharts-legend-wrapper",style:l,ref:function(p){n.wrapperNode=p}},PS(a,ft(ft({},this.props),{},{payload:S0(f,c,AS)})))}}],[{key:"getWithHeight",value:function(n,i){var a=ft(ft({},this.defaultProps),n.props),o=a.layout;return o==="vertical"&&L(n.props.height)?{height:n.props.height}:o==="horizontal"?{width:n.props.width||i}:null}}])})(N.PureComponent);qa(Zt,"displayName","Legend");qa(Zt,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"});var Hs,qv;function TS(){if(qv)return Hs;qv=1;var e=ni(),t=Qf(),r=Le(),n=e?e.isConcatSpreadable:void 0;function i(a){return r(a)||t(a)||!!(n&&a&&a[n])}return Hs=i,Hs}var Ks,Lv;function T0(){if(Lv)return Ks;Lv=1;var e=v0(),t=TS();function r(n,i,a,o,u){var s=-1,c=n.length;for(a||(a=t),u||(u=[]);++s0&&a(f)?i>1?r(f,i-1,a,o,u):e(u,f):o||(u[u.length]=f)}return u}return Ks=r,Ks}var Gs,Bv;function jS(){if(Bv)return Gs;Bv=1;function e(t){return function(r,n,i){for(var a=-1,o=Object(r),u=i(r),s=u.length;s--;){var c=u[t?s:++a];if(n(o[c],c,o)===!1)break}return r}}return Gs=e,Gs}var Vs,Fv;function ES(){if(Fv)return Vs;Fv=1;var e=jS(),t=e();return Vs=t,Vs}var Xs,zv;function j0(){if(zv)return Xs;zv=1;var e=ES(),t=Da();function r(n,i){return n&&e(n,i,t)}return Xs=r,Xs}var Ys,Uv;function MS(){if(Uv)return Ys;Uv=1;var e=oi();function t(r,n){return function(i,a){if(i==null)return i;if(!e(i))return r(i,a);for(var o=i.length,u=n?o:-1,s=Object(i);(n?u--:++un||u&&s&&f&&!c&&!l||a&&s&&f||!i&&f||!o)return 1;if(!a&&!u&&!l&&r=c)return f;var l=i[a];return f*(l=="desc"?-1:1)}}return r.index-n.index}return tc=t,tc}var rc,Xv;function kS(){if(Xv)return rc;Xv=1;var e=Uf(),t=Wf(),r=lt(),n=E0(),i=$S(),a=m0(),o=IS(),u=Zr(),s=Le();function c(f,l,h){l.length?l=e(l,function(v){return s(v)?function(d){return t(d,v.length===1?v[0]:v)}:v}):l=[u];var p=-1;l=e(l,a(r));var y=n(f,function(v,d,g){var x=e(l,function(w){return w(v)});return{criteria:x,index:++p,value:v}});return i(y,function(v,d){return o(v,d,h)})}return rc=c,rc}var nc,Yv;function NS(){if(Yv)return nc;Yv=1;function e(t,r,n){switch(n.length){case 0:return t.call(r);case 1:return t.call(r,n[0]);case 2:return t.call(r,n[0],n[1]);case 3:return t.call(r,n[0],n[1],n[2])}return t.apply(r,n)}return nc=e,nc}var ic,Zv;function RS(){if(Zv)return ic;Zv=1;var e=NS(),t=Math.max;function r(n,i,a){return i=t(i===void 0?n.length-1:i,0),function(){for(var o=arguments,u=-1,s=t(o.length-i,0),c=Array(s);++u0){if(++a>=e)return arguments[0]}else a=0;return i.apply(void 0,arguments)}}return sc=n,sc}var cc,ry;function BS(){if(ry)return cc;ry=1;var e=qS(),t=LS(),r=t(e);return cc=r,cc}var lc,ny;function FS(){if(ny)return lc;ny=1;var e=Zr(),t=RS(),r=BS();function n(i,a){return r(t(i,a,e),i+"")}return lc=n,lc}var fc,iy;function La(){if(iy)return fc;iy=1;var e=Bf(),t=oi(),r=eh(),n=kt();function i(a,o,u){if(!n(u))return!1;var s=typeof o;return(s=="number"?t(u)&&r(o,u.length):s=="string"&&o in u)?e(u[o],a):!1}return fc=i,fc}var hc,ay;function zS(){if(ay)return hc;ay=1;var e=T0(),t=kS(),r=FS(),n=La(),i=r(function(a,o){if(a==null)return[];var u=o.length;return u>1&&n(a,o[0],o[1])?o=[]:u>2&&n(o[0],o[1],o[2])&&(o=[o[0]]),t(a,e(o,1),[])});return hc=i,hc}var US=zS();const ih=ue(US);function Sn(e){"@babel/helpers - typeof";return Sn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Sn(e)}function Ml(){return Ml=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=t.x),"".concat(nn,"-left"),L(r)&&t&&L(t.x)&&r=t.y),"".concat(nn,"-top"),L(n)&&t&&L(t.y)&&nv?Math.max(f,s[n]):Math.max(l,s[n])}function iA(e){var t=e.translateX,r=e.translateY,n=e.useTranslate3d;return{transform:n?"translate3d(".concat(t,"px, ").concat(r,"px, 0)"):"translate(".concat(t,"px, ").concat(r,"px)")}}function aA(e){var t=e.allowEscapeViewBox,r=e.coordinate,n=e.offsetTopLeft,i=e.position,a=e.reverseDirection,o=e.tooltipBox,u=e.useTranslate3d,s=e.viewBox,c,f,l;return o.height>0&&o.width>0&&r?(f=sy({allowEscapeViewBox:t,coordinate:r,key:"x",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.width,viewBox:s,viewBoxDimension:s.width}),l=sy({allowEscapeViewBox:t,coordinate:r,key:"y",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.height,viewBox:s,viewBoxDimension:s.height}),c=iA({translateX:f,translateY:l,useTranslate3d:u})):c=rA,{cssProperties:c,cssClasses:nA({translateX:f,translateY:l,coordinate:r})}}function Pr(e){"@babel/helpers - typeof";return Pr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Pr(e)}function cy(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function ly(e){for(var t=1;tfy||Math.abs(n.height-this.state.lastBoundingBox.height)>fy)&&this.setState({lastBoundingBox:{width:n.width,height:n.height}})}else(this.state.lastBoundingBox.width!==-1||this.state.lastBoundingBox.height!==-1)&&this.setState({lastBoundingBox:{width:-1,height:-1}})}},{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyDown),this.updateBBox()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyDown)}},{key:"componentDidUpdate",value:function(){var n,i;this.props.active&&this.updateBBox(),this.state.dismissed&&(((n=this.props.coordinate)===null||n===void 0?void 0:n.x)!==this.state.dismissedAtCoordinate.x||((i=this.props.coordinate)===null||i===void 0?void 0:i.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}},{key:"render",value:function(){var n=this,i=this.props,a=i.active,o=i.allowEscapeViewBox,u=i.animationDuration,s=i.animationEasing,c=i.children,f=i.coordinate,l=i.hasPayload,h=i.isAnimationActive,p=i.offset,y=i.position,v=i.reverseDirection,d=i.useTranslate3d,g=i.viewBox,x=i.wrapperStyle,w=aA({allowEscapeViewBox:o,coordinate:f,offsetTopLeft:p,position:y,reverseDirection:v,tooltipBox:this.state.lastBoundingBox,useTranslate3d:d,viewBox:g}),O=w.cssClasses,m=w.cssProperties,b=ly(ly({transition:h&&a?"transform ".concat(u,"ms ").concat(s):void 0},m),{},{pointerEvents:"none",visibility:!this.state.dismissed&&a&&l?"visible":"hidden",position:"absolute",top:0,left:0},x);return A.createElement("div",{tabIndex:-1,className:O,style:b,ref:function(S){n.wrapperNode=S}},c)}}])})(N.PureComponent),vA=function(){return!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout)},Jr={isSsr:vA()};function Tr(e){"@babel/helpers - typeof";return Tr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Tr(e)}function hy(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function dy(e){for(var t=1;t0;return A.createElement(pA,{allowEscapeViewBox:o,animationDuration:u,animationEasing:s,isAnimationActive:h,active:a,coordinate:f,hasPayload:b,offset:p,position:d,reverseDirection:g,useTranslate3d:x,viewBox:w,wrapperStyle:O},AA(c,dy(dy({},this.props),{},{payload:m})))}}])})(N.PureComponent);ah(Ue,"displayName","Tooltip");ah(Ue,"defaultProps",{accessibilityLayer:!1,allowEscapeViewBox:{x:!1,y:!1},animationDuration:400,animationEasing:"ease",contentStyle:{},coordinate:{x:0,y:0},cursor:!0,cursorStyle:{},filterNull:!0,isAnimationActive:!Jr.isSsr,itemStyle:{},labelStyle:{},offset:10,reverseDirection:{x:!1,y:!1},separator:" : ",trigger:"hover",useTranslate3d:!1,viewBox:{x:0,y:0,height:0,width:0},wrapperStyle:{}});var pc,py;function PA(){if(py)return pc;py=1;var e=ct(),t=function(){return e.Date.now()};return pc=t,pc}var vc,vy;function TA(){if(vy)return vc;vy=1;var e=/\s/;function t(r){for(var n=r.length;n--&&e.test(r.charAt(n)););return n}return vc=t,vc}var yc,yy;function jA(){if(yy)return yc;yy=1;var e=TA(),t=/^\s+/;function r(n){return n&&n.slice(0,e(n)+1).replace(t,"")}return yc=r,yc}var mc,my;function N0(){if(my)return mc;my=1;var e=jA(),t=kt(),r=Xr(),n=NaN,i=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,o=/^0o[0-7]+$/i,u=parseInt;function s(c){if(typeof c=="number")return c;if(r(c))return n;if(t(c)){var f=typeof c.valueOf=="function"?c.valueOf():c;c=t(f)?f+"":f}if(typeof c!="string")return c===0?c:+c;c=e(c);var l=a.test(c);return l||o.test(c)?u(c.slice(2),l?2:8):i.test(c)?n:+c}return mc=s,mc}var gc,gy;function EA(){if(gy)return gc;gy=1;var e=kt(),t=PA(),r=N0(),n="Expected a function",i=Math.max,a=Math.min;function o(u,s,c){var f,l,h,p,y,v,d=0,g=!1,x=!1,w=!0;if(typeof u!="function")throw new TypeError(n);s=r(s)||0,e(c)&&(g=!!c.leading,x="maxWait"in c,h=x?i(r(c.maxWait)||0,s):h,w="trailing"in c?!!c.trailing:w);function O(M){var I=f,C=l;return f=l=void 0,d=M,p=u.apply(C,I),p}function m(M){return d=M,y=setTimeout(S,s),g?O(M):p}function b(M){var I=M-v,C=M-d,R=s-I;return x?a(R,h-C):R}function _(M){var I=M-v,C=M-d;return v===void 0||I>=s||I<0||x&&C>=h}function S(){var M=t();if(_(M))return P(M);y=setTimeout(S,b(M))}function P(M){return y=void 0,w&&f?O(M):(f=l=void 0,p)}function $(){y!==void 0&&clearTimeout(y),d=0,f=v=l=y=void 0}function j(){return y===void 0?p:P(t())}function T(){var M=t(),I=_(M);if(f=arguments,l=this,v=M,I){if(y===void 0)return m(v);if(x)return clearTimeout(y),y=setTimeout(S,s),O(v)}return y===void 0&&(y=setTimeout(S,s)),p}return T.cancel=$,T.flush=j,T}return gc=o,gc}var bc,by;function MA(){if(by)return bc;by=1;var e=EA(),t=kt(),r="Expected a function";function n(i,a,o){var u=!0,s=!0;if(typeof i!="function")throw new TypeError(r);return t(o)&&(u="leading"in o?!!o.leading:u,s="trailing"in o?!!o.trailing:s),e(i,a,{leading:u,maxWait:a,trailing:s})}return bc=n,bc}var $A=MA();const R0=ue($A);function Pn(e){"@babel/helpers - typeof";return Pn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Pn(e)}function xy(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function vi(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&(M=R0(M,v,{trailing:!0,leading:!1}));var I=new ResizeObserver(M),C=m.current.getBoundingClientRect(),R=C.width,D=C.height;return j(R,D),I.observe(m.current),function(){I.disconnect()}},[j,v]);var T=N.useMemo(function(){var M=P.containerWidth,I=P.containerHeight;if(M<0||I<0)return null;nt(Gt(o)||Gt(s),`The width(%s) and height(%s) are both fixed numbers, + maybe you don't need to use a ResponsiveContainer.`,o,s),nt(!r||r>0,"The aspect(%s) must be greater than zero.",r);var C=Gt(o)?M:o,R=Gt(s)?I:s;r&&r>0&&(C?R=C/r:R&&(C=R*r),h&&R>h&&(R=h)),nt(C>0||R>0,`The width(%s) and height(%s) of chart should be greater than 0, + please check the style of container, or the props width(%s) and height(%s), + or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the + height and width.`,C,R,o,s,f,l,r);var D=!Array.isArray(p)&&yt(p.type).endsWith("Chart");return A.Children.map(p,function(B){return A.isValidElement(B)?N.cloneElement(B,vi({width:C,height:R},D?{style:vi({height:"100%",width:"100%",maxHeight:R,maxWidth:C},B.props.style)}:{})):B})},[r,p,s,h,l,f,P,o]);return A.createElement("div",{id:d?"".concat(d):void 0,className:Q("recharts-responsive-container",g),style:vi(vi({},O),{},{width:o,height:s,minWidth:f,minHeight:l,maxHeight:h}),ref:m},T)}),Ba=function(t){return null};Ba.displayName="Cell";function Tn(e){"@babel/helpers - typeof";return Tn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Tn(e)}function Oy(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function kl(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||Jr.isSsr)return{width:0,height:0};var n=HA(r),i=JSON.stringify({text:t,copyStyle:n});if(fr.widthCache[i])return fr.widthCache[i];try{var a=document.getElementById(_y);a||(a=document.createElement("span"),a.setAttribute("id",_y),a.setAttribute("aria-hidden","true"),document.body.appendChild(a));var o=kl(kl({},WA),n);Object.assign(a.style,o),a.textContent="".concat(t);var u=a.getBoundingClientRect(),s={width:u.width,height:u.height};return fr.widthCache[i]=s,++fr.cacheCount>UA&&(fr.cacheCount=0,fr.widthCache={}),s}catch{return{width:0,height:0}}},KA=function(t){return{top:t.top+window.scrollY-document.documentElement.clientTop,left:t.left+window.scrollX-document.documentElement.clientLeft}};function jn(e){"@babel/helpers - typeof";return jn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},jn(e)}function Li(e,t){return YA(e)||XA(e,t)||VA(e,t)||GA()}function GA(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function VA(e,t){if(e){if(typeof e=="string")return Sy(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Sy(e,t)}}function Sy(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function lP(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function My(e,t){return pP(e)||dP(e,t)||hP(e,t)||fP()}function fP(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function hP(e,t){if(e){if(typeof e=="string")return $y(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return $y(e,t)}}function $y(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&arguments[0]!==void 0?arguments[0]:[];return C.reduce(function(R,D){var B=D.word,F=D.width,H=R[R.length-1];if(H&&(i==null||a||H.width+F+nD.width?R:D})};if(!f)return p;for(var v="…",d=function(C){var R=l.slice(0,C),D=B0({breakAll:c,style:s,children:R+v}).wordsWithComputedWidth,B=h(D),F=B.length>o||y(B).width>Number(i);return[F,B]},g=0,x=l.length-1,w=0,O;g<=x&&w<=l.length-1;){var m=Math.floor((g+x)/2),b=m-1,_=d(b),S=My(_,2),P=S[0],$=S[1],j=d(m),T=My(j,1),M=T[0];if(!P&&!M&&(g=m+1),P&&M&&(x=m-1),!P&&M){O=$;break}w++}return O||p},Cy=function(t){var r=ee(t)?[]:t.toString().split(L0);return[{words:r}]},yP=function(t){var r=t.width,n=t.scaleToFit,i=t.children,a=t.style,o=t.breakAll,u=t.maxLines;if((r||n)&&!Jr.isSsr){var s,c,f=B0({breakAll:o,children:i,style:a});if(f){var l=f.wordsWithComputedWidth,h=f.spaceWidth;s=l,c=h}else return Cy(i);return vP({breakAll:o,children:i,maxLines:u,style:a},s,c,r,n)}return Cy(i)},Iy="#808080",rr=function(t){var r=t.x,n=r===void 0?0:r,i=t.y,a=i===void 0?0:i,o=t.lineHeight,u=o===void 0?"1em":o,s=t.capHeight,c=s===void 0?"0.71em":s,f=t.scaleToFit,l=f===void 0?!1:f,h=t.textAnchor,p=h===void 0?"start":h,y=t.verticalAnchor,v=y===void 0?"end":y,d=t.fill,g=d===void 0?Iy:d,x=Ey(t,sP),w=N.useMemo(function(){return yP({breakAll:x.breakAll,children:x.children,maxLines:x.maxLines,scaleToFit:l,style:x.style,width:x.width})},[x.breakAll,x.children,x.maxLines,l,x.style,x.width]),O=x.dx,m=x.dy,b=x.angle,_=x.className,S=x.breakAll,P=Ey(x,cP);if(!Se(n)||!Se(a))return null;var $=n+(L(O)?O:0),j=a+(L(m)?m:0),T;switch(v){case"start":T=xc("calc(".concat(c,")"));break;case"middle":T=xc("calc(".concat((w.length-1)/2," * -").concat(u," + (").concat(c," / 2))"));break;default:T=xc("calc(".concat(w.length-1," * -").concat(u,")"));break}var M=[];if(l){var I=w[0].width,C=x.width;M.push("scale(".concat((L(C)?C/I:1)/I,")"))}return b&&M.push("rotate(".concat(b,", ").concat($,", ").concat(j,")")),M.length&&(P.transform=M.join(" ")),A.createElement("text",Nl({},X(P,!0),{x:$,y:j,className:Q("recharts-text",_),textAnchor:p,fill:g.includes("url")?Iy:g}),w.map(function(R,D){var B=R.words.join(S?"":" ");return A.createElement("tspan",{x:$,dy:D===0?T:u,key:"".concat(B,"-").concat(D)},B)}))};function Ct(e,t){return e==null||t==null?NaN:et?1:e>=t?0:NaN}function mP(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function oh(e){let t,r,n;e.length!==2?(t=Ct,r=(u,s)=>Ct(e(u),s),n=(u,s)=>e(u)-s):(t=e===Ct||e===mP?e:gP,r=e,n=e);function i(u,s,c=0,f=u.length){if(c>>1;r(u[l],s)<0?c=l+1:f=l}while(c>>1;r(u[l],s)<=0?c=l+1:f=l}while(cc&&n(u[l-1],s)>-n(u[l],s)?l-1:l}return{left:i,center:o,right:a}}function gP(){return 0}function F0(e){return e===null?NaN:+e}function*bP(e,t){for(let r of e)r!=null&&(r=+r)>=r&&(yield r)}const xP=oh(Ct),ui=xP.right;oh(F0).center;class ky extends Map{constructor(t,r=_P){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),t!=null)for(const[n,i]of t)this.set(n,i)}get(t){return super.get(Ny(this,t))}has(t){return super.has(Ny(this,t))}set(t,r){return super.set(wP(this,t),r)}delete(t){return super.delete(OP(this,t))}}function Ny({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function wP({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function OP({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function _P(e){return e!==null&&typeof e=="object"?e.valueOf():e}function SP(e=Ct){if(e===Ct)return z0;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,r)=>{const n=e(t,r);return n||n===0?n:(e(r,r)===0)-(e(t,t)===0)}}function z0(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et?1:0)}const AP=Math.sqrt(50),PP=Math.sqrt(10),TP=Math.sqrt(2);function Bi(e,t,r){const n=(t-e)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),o=a>=AP?10:a>=PP?5:a>=TP?2:1;let u,s,c;return i<0?(c=Math.pow(10,-i)/o,u=Math.round(e*c),s=Math.round(t*c),u/ct&&--s,c=-c):(c=Math.pow(10,i)*o,u=Math.round(e/c),s=Math.round(t/c),u*ct&&--s),s0))return[];if(e===t)return[e];const n=t=i))return[];const u=a-i+1,s=new Array(u);if(n)if(o<0)for(let c=0;c=n)&&(r=n);return r}function Dy(e,t){let r;for(const n of e)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);return r}function U0(e,t,r=0,n=1/0,i){if(t=Math.floor(t),r=Math.floor(Math.max(0,r)),n=Math.floor(Math.min(e.length-1,n)),!(r<=t&&t<=n))return e;for(i=i===void 0?z0:SP(i);n>r;){if(n-r>600){const s=n-r+1,c=t-r+1,f=Math.log(s),l=.5*Math.exp(2*f/3),h=.5*Math.sqrt(f*l*(s-l)/s)*(c-s/2<0?-1:1),p=Math.max(r,Math.floor(t-c*l/s+h)),y=Math.min(n,Math.floor(t+(s-c)*l/s+h));U0(e,t,p,y,i)}const a=e[t];let o=r,u=n;for(an(e,r,t),i(e[n],a)>0&&an(e,r,n);o0;)--u}i(e[r],a)===0?an(e,r,u):(++u,an(e,u,n)),u<=t&&(r=u+1),t<=u&&(n=u-1)}return e}function an(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function jP(e,t,r){if(e=Float64Array.from(bP(e)),!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return Dy(e);if(t>=1)return Ry(e);var n,i=(n-1)*t,a=Math.floor(i),o=Ry(U0(e,a).subarray(0,a+1)),u=Dy(e.subarray(a+1));return o+(u-o)*(i-a)}}function EP(e,t,r=F0){if(!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return+r(e[0],0,e);if(t>=1)return+r(e[n-1],n-1,e);var n,i=(n-1)*t,a=Math.floor(i),o=+r(e[a],a,e),u=+r(e[a+1],a+1,e);return o+(u-o)*(i-a)}}function MP(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,a=new Array(i);++n>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?mi(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?mi(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=CP.exec(e))?new qe(t[1],t[2],t[3],1):(t=IP.exec(e))?new qe(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=kP.exec(e))?mi(t[1],t[2],t[3],t[4]):(t=NP.exec(e))?mi(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=RP.exec(e))?Wy(t[1],t[2]/100,t[3]/100,1):(t=DP.exec(e))?Wy(t[1],t[2]/100,t[3]/100,t[4]):qy.hasOwnProperty(e)?Fy(qy[e]):e==="transparent"?new qe(NaN,NaN,NaN,0):null}function Fy(e){return new qe(e>>16&255,e>>8&255,e&255,1)}function mi(e,t,r,n){return n<=0&&(e=t=r=NaN),new qe(e,t,r,n)}function BP(e){return e instanceof si||(e=Cn(e)),e?(e=e.rgb(),new qe(e.r,e.g,e.b,e.opacity)):new qe}function Bl(e,t,r,n){return arguments.length===1?BP(e):new qe(e,t,r,n??1)}function qe(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}sh(qe,Bl,H0(si,{brighter(e){return e=e==null?Fi:Math.pow(Fi,e),new qe(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Mn:Math.pow(Mn,e),new qe(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new qe(Jt(this.r),Jt(this.g),Jt(this.b),zi(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:zy,formatHex:zy,formatHex8:FP,formatRgb:Uy,toString:Uy}));function zy(){return`#${Vt(this.r)}${Vt(this.g)}${Vt(this.b)}`}function FP(){return`#${Vt(this.r)}${Vt(this.g)}${Vt(this.b)}${Vt((isNaN(this.opacity)?1:this.opacity)*255)}`}function Uy(){const e=zi(this.opacity);return`${e===1?"rgb(":"rgba("}${Jt(this.r)}, ${Jt(this.g)}, ${Jt(this.b)}${e===1?")":`, ${e})`}`}function zi(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Jt(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Vt(e){return e=Jt(e),(e<16?"0":"")+e.toString(16)}function Wy(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new rt(e,t,r,n)}function K0(e){if(e instanceof rt)return new rt(e.h,e.s,e.l,e.opacity);if(e instanceof si||(e=Cn(e)),!e)return new rt;if(e instanceof rt)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),a=Math.max(t,r,n),o=NaN,u=a-i,s=(a+i)/2;return u?(t===a?o=(r-n)/u+(r0&&s<1?0:o,new rt(o,u,s,e.opacity)}function zP(e,t,r,n){return arguments.length===1?K0(e):new rt(e,t,r,n??1)}function rt(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}sh(rt,zP,H0(si,{brighter(e){return e=e==null?Fi:Math.pow(Fi,e),new rt(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Mn:Math.pow(Mn,e),new rt(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new qe(wc(e>=240?e-240:e+120,i,n),wc(e,i,n),wc(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new rt(Hy(this.h),gi(this.s),gi(this.l),zi(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=zi(this.opacity);return`${e===1?"hsl(":"hsla("}${Hy(this.h)}, ${gi(this.s)*100}%, ${gi(this.l)*100}%${e===1?")":`, ${e})`}`}}));function Hy(e){return e=(e||0)%360,e<0?e+360:e}function gi(e){return Math.max(0,Math.min(1,e||0))}function wc(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const ch=e=>()=>e;function UP(e,t){return function(r){return e+r*t}}function WP(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function HP(e){return(e=+e)==1?G0:function(t,r){return r-t?WP(t,r,e):ch(isNaN(t)?r:t)}}function G0(e,t){var r=t-e;return r?UP(e,r):ch(isNaN(e)?t:e)}const Ky=(function e(t){var r=HP(t);function n(i,a){var o=r((i=Bl(i)).r,(a=Bl(a)).r),u=r(i.g,a.g),s=r(i.b,a.b),c=G0(i.opacity,a.opacity);return function(f){return i.r=o(f),i.g=u(f),i.b=s(f),i.opacity=c(f),i+""}}return n.gamma=e,n})(1);function KP(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(a){for(i=0;ir&&(a=t.slice(r,a),u[o]?u[o]+=a:u[++o]=a),(n=n[0])===(i=i[0])?u[o]?u[o]+=i:u[++o]=i:(u[++o]=null,s.push({i:o,x:Ui(n,i)})),r=Oc.lastIndex;return rt&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function nT(e,t,r){var n=e[0],i=e[1],a=t[0],o=t[1];return i2?iT:nT,s=c=null,l}function l(h){return h==null||isNaN(h=+h)?a:(s||(s=u(e.map(n),t,r)))(n(o(h)))}return l.invert=function(h){return o(i((c||(c=u(t,e.map(n),Ui)))(h)))},l.domain=function(h){return arguments.length?(e=Array.from(h,Wi),f()):e.slice()},l.range=function(h){return arguments.length?(t=Array.from(h),f()):t.slice()},l.rangeRound=function(h){return t=Array.from(h),r=lh,f()},l.clamp=function(h){return arguments.length?(o=h?!0:Ne,f()):o!==Ne},l.interpolate=function(h){return arguments.length?(r=h,f()):r},l.unknown=function(h){return arguments.length?(a=h,l):a},function(h,p){return n=h,i=p,f()}}function fh(){return Fa()(Ne,Ne)}function aT(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function Hi(e,t){if(!isFinite(e)||e===0)return null;var r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"),n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function jr(e){return e=Hi(Math.abs(e)),e?e[1]:NaN}function oT(e,t){return function(r,n){for(var i=r.length,a=[],o=0,u=e[0],s=0;i>0&&u>0&&(s+u+1>n&&(u=Math.max(1,n-s)),a.push(r.substring(i-=u,i+u)),!((s+=u+1)>n));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}function uT(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var sT=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function In(e){if(!(t=sT.exec(e)))throw new Error("invalid format: "+e);var t;return new hh({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}In.prototype=hh.prototype;function hh(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}hh.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function cT(e){e:for(var t=e.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var Ki;function lT(e,t){var r=Hi(e,t);if(!r)return Ki=void 0,e.toPrecision(t);var n=r[0],i=r[1],a=i-(Ki=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=n.length;return a===o?n:a>o?n+new Array(a-o+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+Hi(e,Math.max(0,t+a-1))[0]}function Vy(e,t){var r=Hi(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const Xy={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:aT,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>Vy(e*100,t),r:Vy,s:lT,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function Yy(e){return e}var Zy=Array.prototype.map,Jy=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function fT(e){var t=e.grouping===void 0||e.thousands===void 0?Yy:oT(Zy.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",a=e.numerals===void 0?Yy:uT(Zy.call(e.numerals,String)),o=e.percent===void 0?"%":e.percent+"",u=e.minus===void 0?"−":e.minus+"",s=e.nan===void 0?"NaN":e.nan+"";function c(l,h){l=In(l);var p=l.fill,y=l.align,v=l.sign,d=l.symbol,g=l.zero,x=l.width,w=l.comma,O=l.precision,m=l.trim,b=l.type;b==="n"?(w=!0,b="g"):Xy[b]||(O===void 0&&(O=12),m=!0,b="g"),(g||p==="0"&&y==="=")&&(g=!0,p="0",y="=");var _=(h&&h.prefix!==void 0?h.prefix:"")+(d==="$"?r:d==="#"&&/[boxX]/.test(b)?"0"+b.toLowerCase():""),S=(d==="$"?n:/[%p]/.test(b)?o:"")+(h&&h.suffix!==void 0?h.suffix:""),P=Xy[b],$=/[defgprs%]/.test(b);O=O===void 0?6:/[gprs]/.test(b)?Math.max(1,Math.min(21,O)):Math.max(0,Math.min(20,O));function j(T){var M=_,I=S,C,R,D;if(b==="c")I=P(T)+I,T="";else{T=+T;var B=T<0||1/T<0;if(T=isNaN(T)?s:P(Math.abs(T),O),m&&(T=cT(T)),B&&+T==0&&v!=="+"&&(B=!1),M=(B?v==="("?v:u:v==="-"||v==="("?"":v)+M,I=(b==="s"&&!isNaN(T)&&Ki!==void 0?Jy[8+Ki/3]:"")+I+(B&&v==="("?")":""),$){for(C=-1,R=T.length;++CD||D>57){I=(D===46?i+T.slice(C+1):T.slice(C))+I,T=T.slice(0,C);break}}}w&&!g&&(T=t(T,1/0));var F=M.length+T.length+I.length,H=F>1)+M+T+I+H.slice(F);break;default:T=H+M+T+I;break}return a(T)}return j.toString=function(){return l+""},j}function f(l,h){var p=Math.max(-8,Math.min(8,Math.floor(jr(h)/3)))*3,y=Math.pow(10,-p),v=c((l=In(l),l.type="f",l),{suffix:Jy[8+p/3]});return function(d){return v(y*d)}}return{format:c,formatPrefix:f}}var bi,dh,V0;hT({thousands:",",grouping:[3],currency:["$",""]});function hT(e){return bi=fT(e),dh=bi.format,V0=bi.formatPrefix,bi}function dT(e){return Math.max(0,-jr(Math.abs(e)))}function pT(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(jr(t)/3)))*3-jr(Math.abs(e)))}function vT(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,jr(t)-jr(e))+1}function X0(e,t,r,n){var i=ql(e,t,r),a;switch(n=In(n??",f"),n.type){case"s":{var o=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(a=pT(i,o))&&(n.precision=a),V0(n,o)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=vT(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=dT(i))&&(n.precision=a-(n.type==="%")*2);break}}return dh(n)}function Nt(e){var t=e.domain;return e.ticks=function(r){var n=t();return Rl(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return X0(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,a=n.length-1,o=n[i],u=n[a],s,c,f=10;for(u0;){if(c=Dl(o,u,r),c===s)return n[i]=o,n[a]=u,t(n);if(c>0)o=Math.floor(o/c)*c,u=Math.ceil(u/c)*c;else if(c<0)o=Math.ceil(o*c)/c,u=Math.floor(u*c)/c;else break;s=c}return e},e}function Gi(){var e=fh();return e.copy=function(){return ci(e,Gi())},Qe.apply(e,arguments),Nt(e)}function Y0(e){var t;function r(n){return n==null||isNaN(n=+n)?t:n}return r.invert=r,r.domain=r.range=function(n){return arguments.length?(e=Array.from(n,Wi),r):e.slice()},r.unknown=function(n){return arguments.length?(t=n,r):t},r.copy=function(){return Y0(e).unknown(t)},e=arguments.length?Array.from(e,Wi):[0,1],Nt(r)}function Z0(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],a=e[n],o;return aMath.pow(e,t)}function xT(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function tm(e){return(t,r)=>-e(-t,r)}function ph(e){const t=e(Qy,em),r=t.domain;let n=10,i,a;function o(){return i=xT(n),a=bT(n),r()[0]<0?(i=tm(i),a=tm(a),e(yT,mT)):e(Qy,em),t}return t.base=function(u){return arguments.length?(n=+u,o()):n},t.domain=function(u){return arguments.length?(r(u),o()):r()},t.ticks=u=>{const s=r();let c=s[0],f=s[s.length-1];const l=f0){for(;h<=p;++h)for(y=1;yf)break;g.push(v)}}else for(;h<=p;++h)for(y=n-1;y>=1;--y)if(v=h>0?y/a(-h):y*a(h),!(vf)break;g.push(v)}g.length*2{if(u==null&&(u=10),s==null&&(s=n===10?"s":","),typeof s!="function"&&(!(n%1)&&(s=In(s)).precision==null&&(s.trim=!0),s=dh(s)),u===1/0)return s;const c=Math.max(1,n*u/t.ticks().length);return f=>{let l=f/a(Math.round(i(f)));return l*nr(Z0(r(),{floor:u=>a(Math.floor(i(u))),ceil:u=>a(Math.ceil(i(u)))})),t}function J0(){const e=ph(Fa()).domain([1,10]);return e.copy=()=>ci(e,J0()).base(e.base()),Qe.apply(e,arguments),e}function rm(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function nm(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function vh(e){var t=1,r=e(rm(t),nm(t));return r.constant=function(n){return arguments.length?e(rm(t=+n),nm(t)):t},Nt(r)}function Q0(){var e=vh(Fa());return e.copy=function(){return ci(e,Q0()).constant(e.constant())},Qe.apply(e,arguments)}function im(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function wT(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function OT(e){return e<0?-e*e:e*e}function yh(e){var t=e(Ne,Ne),r=1;function n(){return r===1?e(Ne,Ne):r===.5?e(wT,OT):e(im(r),im(1/r))}return t.exponent=function(i){return arguments.length?(r=+i,n()):r},Nt(t)}function mh(){var e=yh(Fa());return e.copy=function(){return ci(e,mh()).exponent(e.exponent())},Qe.apply(e,arguments),e}function _T(){return mh.apply(null,arguments).exponent(.5)}function am(e){return Math.sign(e)*e*e}function ST(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function ex(){var e=fh(),t=[0,1],r=!1,n;function i(a){var o=ST(e(a));return isNaN(o)?n:r?Math.round(o):o}return i.invert=function(a){return e.invert(am(a))},i.domain=function(a){return arguments.length?(e.domain(a),i):e.domain()},i.range=function(a){return arguments.length?(e.range((t=Array.from(a,Wi)).map(am)),i):t.slice()},i.rangeRound=function(a){return i.range(a).round(!0)},i.round=function(a){return arguments.length?(r=!!a,i):r},i.clamp=function(a){return arguments.length?(e.clamp(a),i):e.clamp()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return ex(e.domain(),t).round(r).clamp(e.clamp()).unknown(n)},Qe.apply(i,arguments),Nt(i)}function tx(){var e=[],t=[],r=[],n;function i(){var o=0,u=Math.max(1,t.length);for(r=new Array(u-1);++o0?r[u-1]:e[0],u=r?[n[r-1],t]:[n[c-1],n[c]]},o.unknown=function(s){return arguments.length&&(a=s),o},o.thresholds=function(){return n.slice()},o.copy=function(){return rx().domain([e,t]).range(i).unknown(a)},Qe.apply(Nt(o),arguments)}function nx(){var e=[.5],t=[0,1],r,n=1;function i(a){return a!=null&&a<=a?t[ui(e,a,0,n)]:r}return i.domain=function(a){return arguments.length?(e=Array.from(a),n=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(a){return arguments.length?(t=Array.from(a),n=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(a){var o=t.indexOf(a);return[e[o-1],e[o]]},i.unknown=function(a){return arguments.length?(r=a,i):r},i.copy=function(){return nx().domain(e).range(t).unknown(r)},Qe.apply(i,arguments)}const _c=new Date,Sc=new Date;function Ae(e,t,r,n){function i(a){return e(a=arguments.length===0?new Date:new Date(+a)),a}return i.floor=a=>(e(a=new Date(+a)),a),i.ceil=a=>(e(a=new Date(a-1)),t(a,1),e(a),a),i.round=a=>{const o=i(a),u=i.ceil(a);return a-o(t(a=new Date(+a),o==null?1:Math.floor(o)),a),i.range=(a,o,u)=>{const s=[];if(a=i.ceil(a),u=u==null?1:Math.floor(u),!(a0))return s;let c;do s.push(c=new Date(+a)),t(a,u),e(a);while(cAe(o=>{if(o>=o)for(;e(o),!a(o);)o.setTime(o-1)},(o,u)=>{if(o>=o)if(u<0)for(;++u<=0;)for(;t(o,-1),!a(o););else for(;--u>=0;)for(;t(o,1),!a(o););}),r&&(i.count=(a,o)=>(_c.setTime(+a),Sc.setTime(+o),e(_c),e(Sc),Math.floor(r(_c,Sc))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?o=>n(o)%a===0:o=>i.count(0,o)%a===0):i)),i}const Vi=Ae(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);Vi.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?Ae(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):Vi);Vi.range;const dt=1e3,Ye=dt*60,pt=Ye*60,gt=pt*24,gh=gt*7,om=gt*30,Ac=gt*365,Xt=Ae(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*dt)},(e,t)=>(t-e)/dt,e=>e.getUTCSeconds());Xt.range;const bh=Ae(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*dt)},(e,t)=>{e.setTime(+e+t*Ye)},(e,t)=>(t-e)/Ye,e=>e.getMinutes());bh.range;const xh=Ae(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*Ye)},(e,t)=>(t-e)/Ye,e=>e.getUTCMinutes());xh.range;const wh=Ae(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*dt-e.getMinutes()*Ye)},(e,t)=>{e.setTime(+e+t*pt)},(e,t)=>(t-e)/pt,e=>e.getHours());wh.range;const Oh=Ae(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*pt)},(e,t)=>(t-e)/pt,e=>e.getUTCHours());Oh.range;const li=Ae(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Ye)/gt,e=>e.getDate()-1);li.range;const za=Ae(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/gt,e=>e.getUTCDate()-1);za.range;const ix=Ae(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/gt,e=>Math.floor(e/gt));ix.range;function ur(e){return Ae(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*Ye)/gh)}const Ua=ur(0),Xi=ur(1),AT=ur(2),PT=ur(3),Er=ur(4),TT=ur(5),jT=ur(6);Ua.range;Xi.range;AT.range;PT.range;Er.range;TT.range;jT.range;function sr(e){return Ae(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/gh)}const Wa=sr(0),Yi=sr(1),ET=sr(2),MT=sr(3),Mr=sr(4),$T=sr(5),CT=sr(6);Wa.range;Yi.range;ET.range;MT.range;Mr.range;$T.range;CT.range;const _h=Ae(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());_h.range;const Sh=Ae(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());Sh.range;const bt=Ae(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());bt.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Ae(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});bt.range;const xt=Ae(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());xt.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Ae(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});xt.range;function ax(e,t,r,n,i,a){const o=[[Xt,1,dt],[Xt,5,5*dt],[Xt,15,15*dt],[Xt,30,30*dt],[a,1,Ye],[a,5,5*Ye],[a,15,15*Ye],[a,30,30*Ye],[i,1,pt],[i,3,3*pt],[i,6,6*pt],[i,12,12*pt],[n,1,gt],[n,2,2*gt],[r,1,gh],[t,1,om],[t,3,3*om],[e,1,Ac]];function u(c,f,l){const h=fd).right(o,h);if(p===o.length)return e.every(ql(c/Ac,f/Ac,l));if(p===0)return Vi.every(Math.max(ql(c,f,l),1));const[y,v]=o[h/o[p-1][2]53)return null;"w"in q||(q.w=1),"Z"in q?(te=Tc(on(q.y,0,1)),xe=te.getUTCDay(),te=xe>4||xe===0?Yi.ceil(te):Yi(te),te=za.offset(te,(q.V-1)*7),q.y=te.getUTCFullYear(),q.m=te.getUTCMonth(),q.d=te.getUTCDate()+(q.w+6)%7):(te=Pc(on(q.y,0,1)),xe=te.getDay(),te=xe>4||xe===0?Xi.ceil(te):Xi(te),te=li.offset(te,(q.V-1)*7),q.y=te.getFullYear(),q.m=te.getMonth(),q.d=te.getDate()+(q.w+6)%7)}else("W"in q||"U"in q)&&("w"in q||(q.w="u"in q?q.u%7:"W"in q?1:0),xe="Z"in q?Tc(on(q.y,0,1)).getUTCDay():Pc(on(q.y,0,1)).getDay(),q.m=0,q.d="W"in q?(q.w+6)%7+q.W*7-(xe+5)%7:q.w+q.U*7-(xe+6)%7);return"Z"in q?(q.H+=q.Z/100|0,q.M+=q.Z%100,Tc(q)):Pc(q)}}function S(z,Z,J,q){for(var ve=0,te=Z.length,xe=J.length,we,De;ve=xe)return-1;if(we=Z.charCodeAt(ve++),we===37){if(we=Z.charAt(ve++),De=m[we in um?Z.charAt(ve++):we],!De||(q=De(z,J,q))<0)return-1}else if(we!=J.charCodeAt(q++))return-1}return q}function P(z,Z,J){var q=c.exec(Z.slice(J));return q?(z.p=f.get(q[0].toLowerCase()),J+q[0].length):-1}function $(z,Z,J){var q=p.exec(Z.slice(J));return q?(z.w=y.get(q[0].toLowerCase()),J+q[0].length):-1}function j(z,Z,J){var q=l.exec(Z.slice(J));return q?(z.w=h.get(q[0].toLowerCase()),J+q[0].length):-1}function T(z,Z,J){var q=g.exec(Z.slice(J));return q?(z.m=x.get(q[0].toLowerCase()),J+q[0].length):-1}function M(z,Z,J){var q=v.exec(Z.slice(J));return q?(z.m=d.get(q[0].toLowerCase()),J+q[0].length):-1}function I(z,Z,J){return S(z,t,Z,J)}function C(z,Z,J){return S(z,r,Z,J)}function R(z,Z,J){return S(z,n,Z,J)}function D(z){return o[z.getDay()]}function B(z){return a[z.getDay()]}function F(z){return s[z.getMonth()]}function H(z){return u[z.getMonth()]}function G(z){return i[+(z.getHours()>=12)]}function U(z){return 1+~~(z.getMonth()/3)}function V(z){return o[z.getUTCDay()]}function he(z){return a[z.getUTCDay()]}function me(z){return s[z.getUTCMonth()]}function Be(z){return u[z.getUTCMonth()]}function qt(z){return i[+(z.getUTCHours()>=12)]}function Re(z){return 1+~~(z.getUTCMonth()/3)}return{format:function(z){var Z=b(z+="",w);return Z.toString=function(){return z},Z},parse:function(z){var Z=_(z+="",!1);return Z.toString=function(){return z},Z},utcFormat:function(z){var Z=b(z+="",O);return Z.toString=function(){return z},Z},utcParse:function(z){var Z=_(z+="",!0);return Z.toString=function(){return z},Z}}}var um={"-":"",_:" ",0:"0"},je=/^\s*\d+/,qT=/^%/,LT=/[\\^$*+?|[\]().{}]/g;function re(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",a=i.length;return n+(a[t.toLowerCase(),r]))}function FT(e,t,r){var n=je.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function zT(e,t,r){var n=je.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function UT(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function WT(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function HT(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function sm(e,t,r){var n=je.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function cm(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function KT(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function GT(e,t,r){var n=je.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function VT(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function lm(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function XT(e,t,r){var n=je.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function fm(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function YT(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function ZT(e,t,r){var n=je.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function JT(e,t,r){var n=je.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function QT(e,t,r){var n=je.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function ej(e,t,r){var n=qT.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function tj(e,t,r){var n=je.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function rj(e,t,r){var n=je.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function hm(e,t){return re(e.getDate(),t,2)}function nj(e,t){return re(e.getHours(),t,2)}function ij(e,t){return re(e.getHours()%12||12,t,2)}function aj(e,t){return re(1+li.count(bt(e),e),t,3)}function ox(e,t){return re(e.getMilliseconds(),t,3)}function oj(e,t){return ox(e,t)+"000"}function uj(e,t){return re(e.getMonth()+1,t,2)}function sj(e,t){return re(e.getMinutes(),t,2)}function cj(e,t){return re(e.getSeconds(),t,2)}function lj(e){var t=e.getDay();return t===0?7:t}function fj(e,t){return re(Ua.count(bt(e)-1,e),t,2)}function ux(e){var t=e.getDay();return t>=4||t===0?Er(e):Er.ceil(e)}function hj(e,t){return e=ux(e),re(Er.count(bt(e),e)+(bt(e).getDay()===4),t,2)}function dj(e){return e.getDay()}function pj(e,t){return re(Xi.count(bt(e)-1,e),t,2)}function vj(e,t){return re(e.getFullYear()%100,t,2)}function yj(e,t){return e=ux(e),re(e.getFullYear()%100,t,2)}function mj(e,t){return re(e.getFullYear()%1e4,t,4)}function gj(e,t){var r=e.getDay();return e=r>=4||r===0?Er(e):Er.ceil(e),re(e.getFullYear()%1e4,t,4)}function bj(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+re(t/60|0,"0",2)+re(t%60,"0",2)}function dm(e,t){return re(e.getUTCDate(),t,2)}function xj(e,t){return re(e.getUTCHours(),t,2)}function wj(e,t){return re(e.getUTCHours()%12||12,t,2)}function Oj(e,t){return re(1+za.count(xt(e),e),t,3)}function sx(e,t){return re(e.getUTCMilliseconds(),t,3)}function _j(e,t){return sx(e,t)+"000"}function Sj(e,t){return re(e.getUTCMonth()+1,t,2)}function Aj(e,t){return re(e.getUTCMinutes(),t,2)}function Pj(e,t){return re(e.getUTCSeconds(),t,2)}function Tj(e){var t=e.getUTCDay();return t===0?7:t}function jj(e,t){return re(Wa.count(xt(e)-1,e),t,2)}function cx(e){var t=e.getUTCDay();return t>=4||t===0?Mr(e):Mr.ceil(e)}function Ej(e,t){return e=cx(e),re(Mr.count(xt(e),e)+(xt(e).getUTCDay()===4),t,2)}function Mj(e){return e.getUTCDay()}function $j(e,t){return re(Yi.count(xt(e)-1,e),t,2)}function Cj(e,t){return re(e.getUTCFullYear()%100,t,2)}function Ij(e,t){return e=cx(e),re(e.getUTCFullYear()%100,t,2)}function kj(e,t){return re(e.getUTCFullYear()%1e4,t,4)}function Nj(e,t){var r=e.getUTCDay();return e=r>=4||r===0?Mr(e):Mr.ceil(e),re(e.getUTCFullYear()%1e4,t,4)}function Rj(){return"+0000"}function pm(){return"%"}function vm(e){return+e}function ym(e){return Math.floor(+e/1e3)}var hr,lx,fx;Dj({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function Dj(e){return hr=DT(e),lx=hr.format,hr.parse,fx=hr.utcFormat,hr.utcParse,hr}function qj(e){return new Date(e)}function Lj(e){return e instanceof Date?+e:+new Date(+e)}function Ah(e,t,r,n,i,a,o,u,s,c){var f=fh(),l=f.invert,h=f.domain,p=c(".%L"),y=c(":%S"),v=c("%I:%M"),d=c("%I %p"),g=c("%a %d"),x=c("%b %d"),w=c("%B"),O=c("%Y");function m(b){return(s(b)t(i/(e.length-1)))},r.quantiles=function(n){return Array.from({length:n+1},(i,a)=>jP(e,a/n))},r.copy=function(){return vx(t).domain(e)},At.apply(r,arguments)}function Ka(){var e=0,t=.5,r=1,n=1,i,a,o,u,s,c=Ne,f,l=!1,h;function p(v){return isNaN(v=+v)?h:(v=.5+((v=+f(v))-a)*(n*vr}return Ec=e,Ec}var Mc,xm;function Wj(){if(xm)return Mc;xm=1;var e=Ga(),t=bx(),r=Zr();function n(i){return i&&i.length?e(i,r,t):void 0}return Mc=n,Mc}var Hj=Wj();const Va=ue(Hj);var $c,wm;function xx(){if(wm)return $c;wm=1;function e(t,r){return te.e^a.s<0?1:-1;for(n=a.d.length,i=e.d.length,t=0,r=ne.d[t]^a.s<0?1:-1;return n===i?0:n>i^a.s<0?1:-1};W.decimalPlaces=W.dp=function(){var e=this,t=e.d.length-1,r=(t-e.e)*de;if(t=e.d[t],t)for(;t%10==0;t/=10)r--;return r<0?0:r};W.dividedBy=W.div=function(e){return mt(this,new this.constructor(e))};W.dividedToIntegerBy=W.idiv=function(e){var t=this,r=t.constructor;return se(mt(t,new r(e),0,1),r.precision)};W.equals=W.eq=function(e){return!this.cmp(e)};W.exponent=function(){return be(this)};W.greaterThan=W.gt=function(e){return this.cmp(e)>0};W.greaterThanOrEqualTo=W.gte=function(e){return this.cmp(e)>=0};W.isInteger=W.isint=function(){return this.e>this.d.length-2};W.isNegative=W.isneg=function(){return this.s<0};W.isPositive=W.ispos=function(){return this.s>0};W.isZero=function(){return this.s===0};W.lessThan=W.lt=function(e){return this.cmp(e)<0};W.lessThanOrEqualTo=W.lte=function(e){return this.cmp(e)<1};W.logarithm=W.log=function(e){var t,r=this,n=r.constructor,i=n.precision,a=i+5;if(e===void 0)e=new n(10);else if(e=new n(e),e.s<1||e.eq(We))throw Error(Je+"NaN");if(r.s<1)throw Error(Je+(r.s?"NaN":"-Infinity"));return r.eq(We)?new n(0):(pe=!1,t=mt(kn(r,a),kn(e,a),a),pe=!0,se(t,i))};W.minus=W.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?Sx(t,e):Ox(t,(e.s=-e.s,e))};W.modulo=W.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(e=new n(e),!e.s)throw Error(Je+"NaN");return r.s?(pe=!1,t=mt(r,e,0,1).times(e),pe=!0,r.minus(t)):se(new n(r),i)};W.naturalExponential=W.exp=function(){return _x(this)};W.naturalLogarithm=W.ln=function(){return kn(this)};W.negated=W.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};W.plus=W.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?Ox(t,e):Sx(t,(e.s=-e.s,e))};W.precision=W.sd=function(e){var t,r,n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(Qt+e);if(t=be(i)+1,n=i.d.length-1,r=n*de+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r};W.squareRoot=W.sqrt=function(){var e,t,r,n,i,a,o,u=this,s=u.constructor;if(u.s<1){if(!u.s)return new s(0);throw Error(Je+"NaN")}for(e=be(u),pe=!1,i=Math.sqrt(+u),i==0||i==1/0?(t=at(u.d),(t.length+e)%2==0&&(t+="0"),i=Math.sqrt(t),e=tn((e+1)/2)-(e<0||e%2),i==1/0?t="5e"+e:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),n=new s(t)):n=new s(i.toString()),r=s.precision,i=o=r+3;;)if(a=n,n=a.plus(mt(u,a,o+2)).times(.5),at(a.d).slice(0,o)===(t=at(n.d)).slice(0,o)){if(t=t.slice(o-3,o+1),i==o&&t=="4999"){if(se(a,r+1,0),a.times(a).eq(u)){n=a;break}}else if(t!="9999")break;o+=4}return pe=!0,se(n,r)};W.times=W.mul=function(e){var t,r,n,i,a,o,u,s,c,f=this,l=f.constructor,h=f.d,p=(e=new l(e)).d;if(!f.s||!e.s)return new l(0);for(e.s*=f.s,r=f.e+e.e,s=h.length,c=p.length,s=0;){for(t=0,i=s+n;i>n;)u=a[i]+p[n]*h[i-n-1]+t,a[i--]=u%Pe|0,t=u/Pe|0;a[i]=(a[i]+t)%Pe|0}for(;!a[--o];)a.pop();return t?++r:a.shift(),e.d=a,e.e=r,pe?se(e,l.precision):e};W.toDecimalPlaces=W.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(st(e,0,en),t===void 0?t=n.rounding:st(t,0,8),se(r,e+be(r)+1,t))};W.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=nr(n,!0):(st(e,0,en),t===void 0?t=i.rounding:st(t,0,8),n=se(new i(n),e+1,t),r=nr(n,!0,e+1)),r};W.toFixed=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?nr(i):(st(e,0,en),t===void 0?t=a.rounding:st(t,0,8),n=se(new a(i),e+be(i)+1,t),r=nr(n.abs(),!1,e+be(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)};W.toInteger=W.toint=function(){var e=this,t=e.constructor;return se(new t(e),be(e)+1,t.rounding)};W.toNumber=function(){return+this};W.toPower=W.pow=function(e){var t,r,n,i,a,o,u=this,s=u.constructor,c=12,f=+(e=new s(e));if(!e.s)return new s(We);if(u=new s(u),!u.s){if(e.s<1)throw Error(Je+"Infinity");return u}if(u.eq(We))return u;if(n=s.precision,e.eq(We))return se(u,n);if(t=e.e,r=e.d.length-1,o=t>=r,a=u.s,o){if((r=f<0?-f:f)<=wx){for(i=new s(We),t=Math.ceil(n/de+4),pe=!1;r%2&&(i=i.times(u),Tm(i.d,t)),r=tn(r/2),r!==0;)u=u.times(u),Tm(u.d,t);return pe=!0,e.s<0?new s(We).div(i):se(i,n)}}else if(a<0)throw Error(Je+"NaN");return a=a<0&&e.d[Math.max(t,r)]&1?-1:1,u.s=1,pe=!1,i=e.times(kn(u,n+c)),pe=!0,i=_x(i),i.s=a,i};W.toPrecision=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?(r=be(i),n=nr(i,r<=a.toExpNeg||r>=a.toExpPos)):(st(e,1,en),t===void 0?t=a.rounding:st(t,0,8),i=se(new a(i),e,t),r=be(i),n=nr(i,e<=r||r<=a.toExpNeg,e)),n};W.toSignificantDigits=W.tosd=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(st(e,1,en),t===void 0?t=n.rounding:st(t,0,8)),se(new n(r),e,t)};W.toString=W.valueOf=W.val=W.toJSON=W[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=be(e),r=e.constructor;return nr(e,t<=r.toExpNeg||t>=r.toExpPos)};function Ox(e,t){var r,n,i,a,o,u,s,c,f=e.constructor,l=f.precision;if(!e.s||!t.s)return t.s||(t=new f(e)),pe?se(t,l):t;if(s=e.d,c=t.d,o=e.e,i=t.e,s=s.slice(),a=o-i,a){for(a<0?(n=s,a=-a,u=c.length):(n=c,i=o,u=s.length),o=Math.ceil(l/de),u=o>u?o+1:u+1,a>u&&(a=u,n.length=1),n.reverse();a--;)n.push(0);n.reverse()}for(u=s.length,a=c.length,u-a<0&&(a=u,n=c,c=s,s=n),r=0;a;)r=(s[--a]=s[a]+c[a]+r)/Pe|0,s[a]%=Pe;for(r&&(s.unshift(r),++i),u=s.length;s[--u]==0;)s.pop();return t.d=s,t.e=i,pe?se(t,l):t}function st(e,t,r){if(e!==~~e||er)throw Error(Qt+e)}function at(e){var t,r,n,i=e.length-1,a="",o=e[0];if(i>0){for(a+=o,t=1;to?1:-1;else for(u=s=0;ui[u]?1:-1;break}return s}function r(n,i,a){for(var o=0;a--;)n[a]-=o,o=n[a]1;)n.shift()}return function(n,i,a,o){var u,s,c,f,l,h,p,y,v,d,g,x,w,O,m,b,_,S,P=n.constructor,$=n.s==i.s?1:-1,j=n.d,T=i.d;if(!n.s)return new P(n);if(!i.s)throw Error(Je+"Division by zero");for(s=n.e-i.e,_=T.length,m=j.length,p=new P($),y=p.d=[],c=0;T[c]==(j[c]||0);)++c;if(T[c]>(j[c]||0)&&--s,a==null?x=a=P.precision:o?x=a+(be(n)-be(i))+1:x=a,x<0)return new P(0);if(x=x/de+2|0,c=0,_==1)for(f=0,T=T[0],x++;(c1&&(T=e(T,f),j=e(j,f),_=T.length,m=j.length),O=_,v=j.slice(0,_),d=v.length;d<_;)v[d++]=0;S=T.slice(),S.unshift(0),b=T[0],T[1]>=Pe/2&&++b;do f=0,u=t(T,v,_,d),u<0?(g=v[0],_!=d&&(g=g*Pe+(v[1]||0)),f=g/b|0,f>1?(f>=Pe&&(f=Pe-1),l=e(T,f),h=l.length,d=v.length,u=t(l,v,h,d),u==1&&(f--,r(l,_16)throw Error(jh+be(e));if(!e.s)return new f(We);for(pe=!1,u=l,o=new f(.03125);e.abs().gte(.1);)e=e.times(o),c+=5;for(n=Math.log(Ht(2,c))/Math.LN10*2+5|0,u+=n,r=i=a=new f(We),f.precision=u;;){if(i=se(i.times(e),u),r=r.times(++s),o=a.plus(mt(i,r,u)),at(o.d).slice(0,u)===at(a.d).slice(0,u)){for(;c--;)a=se(a.times(a),u);return f.precision=l,t==null?(pe=!0,se(a,l)):a}a=o}}function be(e){for(var t=e.e*de,r=e.d[0];r>=10;r/=10)t++;return t}function Rc(e,t,r){if(t>e.LN10.sd())throw pe=!0,r&&(e.precision=r),Error(Je+"LN10 precision limit exceeded");return se(new e(e.LN10),t)}function Et(e){for(var t="";e--;)t+="0";return t}function kn(e,t){var r,n,i,a,o,u,s,c,f,l=1,h=10,p=e,y=p.d,v=p.constructor,d=v.precision;if(p.s<1)throw Error(Je+(p.s?"NaN":"-Infinity"));if(p.eq(We))return new v(0);if(t==null?(pe=!1,c=d):c=t,p.eq(10))return t==null&&(pe=!0),Rc(v,c);if(c+=h,v.precision=c,r=at(y),n=r.charAt(0),a=be(p),Math.abs(a)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)p=p.times(e),r=at(p.d),n=r.charAt(0),l++;a=be(p),n>1?(p=new v("0."+r),a++):p=new v(n+"."+r.slice(1))}else return s=Rc(v,c+2,d).times(a+""),p=kn(new v(n+"."+r.slice(1)),c-h).plus(s),v.precision=d,t==null?(pe=!0,se(p,d)):p;for(u=o=p=mt(p.minus(We),p.plus(We),c),f=se(p.times(p),c),i=3;;){if(o=se(o.times(f),c),s=u.plus(mt(o,new v(i),c)),at(s.d).slice(0,c)===at(u.d).slice(0,c))return u=u.times(2),a!==0&&(u=u.plus(Rc(v,c+2,d).times(a+""))),u=mt(u,new v(l),c),v.precision=d,t==null?(pe=!0,se(u,d)):u;u=s,i+=2}}function Pm(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;)++n;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(n,i),t){if(i-=n,r=r-n-1,e.e=tn(r/de),e.d=[],n=(r+1)%de,r<0&&(n+=de),nZi||e.e<-Zi))throw Error(jh+r)}else e.s=0,e.e=0,e.d=[0];return e}function se(e,t,r){var n,i,a,o,u,s,c,f,l=e.d;for(o=1,a=l[0];a>=10;a/=10)o++;if(n=t-o,n<0)n+=de,i=t,c=l[f=0];else{if(f=Math.ceil((n+1)/de),a=l.length,f>=a)return e;for(c=a=l[f],o=1;a>=10;a/=10)o++;n%=de,i=n-de+o}if(r!==void 0&&(a=Ht(10,o-i-1),u=c/a%10|0,s=t<0||l[f+1]!==void 0||c%a,s=r<4?(u||s)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||s||r==6&&(n>0?i>0?c/Ht(10,o-i):0:l[f-1])%10&1||r==(e.s<0?8:7))),t<1||!l[0])return s?(a=be(e),l.length=1,t=t-a-1,l[0]=Ht(10,(de-t%de)%de),e.e=tn(-t/de)||0):(l.length=1,l[0]=e.e=e.s=0),e;if(n==0?(l.length=f,a=1,f--):(l.length=f+1,a=Ht(10,de-n),l[f]=i>0?(c/Ht(10,o-i)%Ht(10,i)|0)*a:0),s)for(;;)if(f==0){(l[0]+=a)==Pe&&(l[0]=1,++e.e);break}else{if(l[f]+=a,l[f]!=Pe)break;l[f--]=0,a=1}for(n=l.length;l[--n]===0;)l.pop();if(pe&&(e.e>Zi||e.e<-Zi))throw Error(jh+be(e));return e}function Sx(e,t){var r,n,i,a,o,u,s,c,f,l,h=e.constructor,p=h.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new h(e),pe?se(t,p):t;if(s=e.d,l=t.d,n=t.e,c=e.e,s=s.slice(),o=c-n,o){for(f=o<0,f?(r=s,o=-o,u=l.length):(r=l,n=c,u=s.length),i=Math.max(Math.ceil(p/de),u)+2,o>i&&(o=i,r.length=1),r.reverse(),i=o;i--;)r.push(0);r.reverse()}else{for(i=s.length,u=l.length,f=i0;--i)s[u++]=0;for(i=l.length;i>o;){if(s[--i]0?a=a.charAt(0)+"."+a.slice(1)+Et(n):o>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(i<0?"e":"e+")+i):i<0?(a="0."+Et(-i-1)+a,r&&(n=r-o)>0&&(a+=Et(n))):i>=o?(a+=Et(i+1-o),r&&(n=r-i-1)>0&&(a=a+"."+Et(n))):((n=i+1)0&&(i+1===o&&(a+="."),a+=Et(n))),e.s<0?"-"+a:a}function Tm(e,t){if(e.length>t)return e.length=t,!0}function Ax(e){var t,r,n;function i(a){var o=this;if(!(o instanceof i))return new i(a);if(o.constructor=i,a instanceof i){o.s=a.s,o.e=a.e,o.d=(a=a.d)?a.slice():a;return}if(typeof a=="number"){if(a*0!==0)throw Error(Qt+a);if(a>0)o.s=1;else if(a<0)a=-a,o.s=-1;else{o.s=0,o.e=0,o.d=[0];return}if(a===~~a&&a<1e7){o.e=0,o.d=[a];return}return Pm(o,a.toString())}else if(typeof a!="string")throw Error(Qt+a);if(a.charCodeAt(0)===45?(a=a.slice(1),o.s=-1):o.s=1,tE.test(a))Pm(o,a);else throw Error(Qt+a)}if(i.prototype=W,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=Ax,i.config=i.set=rE,e===void 0&&(e={}),e)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t=i[t+1]&&n<=i[t+2])this[r]=n;else throw Error(Qt+r+": "+n);if((n=e[r="LN10"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(Qt+r+": "+n);return this}var Eh=Ax(eE);We=new Eh(1);const oe=Eh;function nE(e){return uE(e)||oE(e)||aE(e)||iE()}function iE(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function aE(e,t){if(e){if(typeof e=="string")return Ul(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Ul(e,t)}}function oE(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function uE(e){if(Array.isArray(e))return Ul(e)}function Ul(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=t?r.apply(void 0,i):e(t-o,jm(function(){for(var u=arguments.length,s=new Array(u),c=0;ce.length)&&(t=e.length);for(var r=0,n=new Array(t);r"u"||!(Symbol.iterator in Object(e)))){var r=[],n=!0,i=!1,a=void 0;try{for(var o=e[Symbol.iterator](),u;!(n=(u=o.next()).done)&&(r.push(u.value),!(t&&r.length===t));n=!0);}catch(s){i=!0,a=s}finally{try{!n&&o.return!=null&&o.return()}finally{if(i)throw a}}return r}}function OE(e){if(Array.isArray(e))return e}function Mx(e){var t=Nn(e,2),r=t[0],n=t[1],i=r,a=n;return r>n&&(i=n,a=r),[i,a]}function $x(e,t,r){if(e.lte(0))return new oe(0);var n=Ja.getDigitCount(e.toNumber()),i=new oe(10).pow(n),a=e.div(i),o=n!==1?.05:.1,u=new oe(Math.ceil(a.div(o).toNumber())).add(r).mul(o),s=u.mul(i);return t?s:new oe(Math.ceil(s))}function _E(e,t,r){var n=1,i=new oe(e);if(!i.isint()&&r){var a=Math.abs(e);a<1?(n=new oe(10).pow(Ja.getDigitCount(e)-1),i=new oe(Math.floor(i.div(n).toNumber())).mul(n)):a>1&&(i=new oe(Math.floor(e)))}else e===0?i=new oe(Math.floor((t-1)/2)):r||(i=new oe(Math.floor(e)));var o=Math.floor((t-1)/2),u=fE(lE(function(s){return i.add(new oe(s-o).mul(n)).toNumber()}),Wl);return u(0,t)}function Cx(e,t,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((t-e)/(r-1)))return{step:new oe(0),tickMin:new oe(0),tickMax:new oe(0)};var a=$x(new oe(t).sub(e).div(r-1),n,i),o;e<=0&&t>=0?o=new oe(0):(o=new oe(e).add(t).div(2),o=o.sub(new oe(o).mod(a)));var u=Math.ceil(o.sub(e).div(a).toNumber()),s=Math.ceil(new oe(t).sub(o).div(a).toNumber()),c=u+s+1;return c>r?Cx(e,t,r,n,i+1):(c0?s+(r-c):s,u=t>0?u:u+(r-c)),{step:a,tickMin:o.sub(new oe(u).mul(a)),tickMax:o.add(new oe(s).mul(a))})}function SE(e){var t=Nn(e,2),r=t[0],n=t[1],i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=Math.max(i,2),u=Mx([r,n]),s=Nn(u,2),c=s[0],f=s[1];if(c===-1/0||f===1/0){var l=f===1/0?[c].concat(Kl(Wl(0,i-1).map(function(){return 1/0}))):[].concat(Kl(Wl(0,i-1).map(function(){return-1/0})),[f]);return r>n?Hl(l):l}if(c===f)return _E(c,i,a);var h=Cx(c,f,o,a),p=h.step,y=h.tickMin,v=h.tickMax,d=Ja.rangeStep(y,v.add(new oe(.1).mul(p)),p);return r>n?Hl(d):d}function AE(e,t){var r=Nn(e,2),n=r[0],i=r[1],a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=Mx([n,i]),u=Nn(o,2),s=u[0],c=u[1];if(s===-1/0||c===1/0)return[n,i];if(s===c)return[s];var f=Math.max(t,2),l=$x(new oe(c).sub(s).div(f-1),a,0),h=[].concat(Kl(Ja.rangeStep(new oe(s),new oe(c).sub(new oe(.99).mul(l)),l)),[c]);return n>i?Hl(h):h}var PE=jx(SE),TE=jx(AE),jE="Invariant failed";function ir(e,t){throw new Error(jE)}var EE=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function $r(e){"@babel/helpers - typeof";return $r=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},$r(e)}function Ji(){return Ji=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function RE(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function DE(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qE(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&arguments[1]!==void 0?arguments[1]:[],i=arguments.length>2?arguments[2]:void 0,a=arguments.length>3?arguments[3]:void 0,o=-1,u=(r=n==null?void 0:n.length)!==null&&r!==void 0?r:0;if(u<=1)return 0;if(a&&a.axisType==="angleAxis"&&Math.abs(Math.abs(a.range[1]-a.range[0])-360)<=1e-6)for(var s=a.range,c=0;c0?i[c-1].coordinate:i[u-1].coordinate,l=i[c].coordinate,h=c>=u-1?i[0].coordinate:i[c+1].coordinate,p=void 0;if(Ie(l-f)!==Ie(h-l)){var y=[];if(Ie(h-l)===Ie(s[1]-s[0])){p=h;var v=l+s[1]-s[0];y[0]=Math.min(v,(v+f)/2),y[1]=Math.max(v,(v+f)/2)}else{p=f;var d=h+s[1]-s[0];y[0]=Math.min(l,(d+l)/2),y[1]=Math.max(l,(d+l)/2)}var g=[Math.min(l,(p+l)/2),Math.max(l,(p+l)/2)];if(t>g[0]&&t<=g[1]||t>=y[0]&&t<=y[1]){o=i[c].index;break}}else{var x=Math.min(f,h),w=Math.max(f,h);if(t>(x+l)/2&&t<=(w+l)/2){o=i[c].index;break}}}else for(var O=0;O0&&O(n[O].coordinate+n[O-1].coordinate)/2&&t<=(n[O].coordinate+n[O+1].coordinate)/2||O===u-1&&t>(n[O].coordinate+n[O-1].coordinate)/2){o=n[O].index;break}return o},Mh=function(t){var r,n=t,i=n.type.displayName,a=(r=t.type)!==null&&r!==void 0&&r.defaultProps?ye(ye({},t.type.defaultProps),t.props):t.props,o=a.stroke,u=a.fill,s;switch(i){case"Line":s=o;break;case"Area":case"Radar":s=o&&o!=="none"?o:u;break;default:s=u;break}return s},tM=function(t){var r=t.barSize,n=t.totalSize,i=t.stackGroups,a=i===void 0?{}:i;if(!a)return{};for(var o={},u=Object.keys(a),s=0,c=u.length;s=0});if(g&&g.length){var x=g[0].type.defaultProps,w=x!==void 0?ye(ye({},x),g[0].props):g[0].props,O=w.barSize,m=w[d];o[m]||(o[m]=[]);var b=ee(O)?r:O;o[m].push({item:g[0],stackList:g.slice(1),barSize:ee(b)?void 0:ke(b,n,0)})}}return o},rM=function(t){var r=t.barGap,n=t.barCategoryGap,i=t.bandSize,a=t.sizeList,o=a===void 0?[]:a,u=t.maxBarSize,s=o.length;if(s<1)return null;var c=ke(r,i,0,!0),f,l=[];if(o[0].barSize===+o[0].barSize){var h=!1,p=i/s,y=o.reduce(function(O,m){return O+m.barSize||0},0);y+=(s-1)*c,y>=i&&(y-=(s-1)*c,c=0),y>=i&&p>0&&(h=!0,p*=.9,y=s*p);var v=(i-y)/2>>0,d={offset:v-c,size:0};f=o.reduce(function(O,m){var b={item:m.item,position:{offset:d.offset+d.size+c,size:h?p:m.barSize}},_=[].concat($m(O),[b]);return d=_[_.length-1].position,m.stackList&&m.stackList.length&&m.stackList.forEach(function(S){_.push({item:S,position:d})}),_},l)}else{var g=ke(n,i,0,!0);i-2*g-(s-1)*c<=0&&(c=0);var x=(i-2*g-(s-1)*c)/s;x>1&&(x>>=0);var w=u===+u?Math.min(x,u):x;f=o.reduce(function(O,m,b){var _=[].concat($m(O),[{item:m.item,position:{offset:g+(x+c)*b+(x-w)/2,size:w}}]);return m.stackList&&m.stackList.length&&m.stackList.forEach(function(S){_.push({item:S,position:_[_.length-1].position})}),_},l)}return f},nM=function(t,r,n,i){var a=n.children,o=n.width,u=n.margin,s=o-(u.left||0)-(u.right||0),c=Rx({children:a,legendWidth:s});if(c){var f=i||{},l=f.width,h=f.height,p=c.align,y=c.verticalAlign,v=c.layout;if((v==="vertical"||v==="horizontal"&&y==="middle")&&p!=="center"&&L(t[p]))return ye(ye({},t),{},Or({},p,t[p]+(l||0)));if((v==="horizontal"||v==="vertical"&&p==="center")&&y!=="middle"&&L(t[y]))return ye(ye({},t),{},Or({},y,t[y]+(h||0)))}return t},iM=function(t,r,n){return ee(r)?!0:t==="horizontal"?r==="yAxis":t==="vertical"||n==="x"?r==="xAxis":n==="y"?r==="yAxis":!0},Dx=function(t,r,n,i,a){var o=r.props.children,u=Ze(o,Qa).filter(function(c){return iM(i,a,c.props.direction)});if(u&&u.length){var s=u.map(function(c){return c.props.dataKey});return t.reduce(function(c,f){var l=Ce(f,n);if(ee(l))return c;var h=Array.isArray(l)?[Xa(l),Va(l)]:[l,l],p=s.reduce(function(y,v){var d=Ce(f,v,0),g=h[0]-Math.abs(Array.isArray(d)?d[0]:d),x=h[1]+Math.abs(Array.isArray(d)?d[1]:d);return[Math.min(g,y[0]),Math.max(x,y[1])]},[1/0,-1/0]);return[Math.min(p[0],c[0]),Math.max(p[1],c[1])]},[1/0,-1/0])}return null},aM=function(t,r,n,i,a){var o=r.map(function(u){return Dx(t,u,n,a,i)}).filter(function(u){return!ee(u)});return o&&o.length?o.reduce(function(u,s){return[Math.min(u[0],s[0]),Math.max(u[1],s[1])]},[1/0,-1/0]):null},qx=function(t,r,n,i,a){var o=r.map(function(s){var c=s.props.dataKey;return n==="number"&&c&&Dx(t,s,c,i)||gn(t,c,n,a)});if(n==="number")return o.reduce(function(s,c){return[Math.min(s[0],c[0]),Math.max(s[1],c[1])]},[1/0,-1/0]);var u={};return o.reduce(function(s,c){for(var f=0,l=c.length;f=2?Ie(u[0]-u[1])*2*c:c,r&&(t.ticks||t.niceTicks)){var f=(t.ticks||t.niceTicks).map(function(l){var h=a?a.indexOf(l):l;return{coordinate:i(h)+c,value:l,offset:c}});return f.filter(function(l){return!ii(l.coordinate)})}return t.isCategorical&&t.categoricalDomain?t.categoricalDomain.map(function(l,h){return{coordinate:i(l)+c,value:l,index:h,offset:c}}):i.ticks&&!n?i.ticks(t.tickCount).map(function(l){return{coordinate:i(l)+c,value:l,offset:c}}):i.domain().map(function(l,h){return{coordinate:i(l)+c,value:a?a[l]:l,index:h,offset:c}})},Dc=new WeakMap,xi=function(t,r){if(typeof r!="function")return t;Dc.has(t)||Dc.set(t,new WeakMap);var n=Dc.get(t);if(n.has(r))return n.get(r);var i=function(){t.apply(void 0,arguments),r.apply(void 0,arguments)};return n.set(r,i),i},Fx=function(t,r,n){var i=t.scale,a=t.type,o=t.layout,u=t.axisType;if(i==="auto")return o==="radial"&&u==="radiusAxis"?{scale:En(),realScaleType:"band"}:o==="radial"&&u==="angleAxis"?{scale:Gi(),realScaleType:"linear"}:a==="category"&&r&&(r.indexOf("LineChart")>=0||r.indexOf("AreaChart")>=0||r.indexOf("ComposedChart")>=0&&!n)?{scale:mn(),realScaleType:"point"}:a==="category"?{scale:En(),realScaleType:"band"}:{scale:Gi(),realScaleType:"linear"};if(er(i)){var s="scale".concat(Ia(i));return{scale:(mm[s]||mn)(),realScaleType:mm[s]?s:"point"}}return Y(i)?{scale:i}:{scale:mn(),realScaleType:"point"}},Im=1e-4,zx=function(t){var r=t.domain();if(!(!r||r.length<=2)){var n=r.length,i=t.range(),a=Math.min(i[0],i[1])-Im,o=Math.max(i[0],i[1])+Im,u=t(r[0]),s=t(r[n-1]);(uo||so)&&t.domain([r[0],r[n-1]])}},oM=function(t,r){if(!t)return null;for(var n=0,i=t.length;ni)&&(a[1]=i),a[0]>i&&(a[0]=i),a[1]=0?(t[u][n][0]=a,t[u][n][1]=a+s,a=t[u][n][1]):(t[u][n][0]=o,t[u][n][1]=o+s,o=t[u][n][1])}},cM=function(t){var r=t.length;if(!(r<=0))for(var n=0,i=t[0].length;n=0?(t[o][n][0]=a,t[o][n][1]=a+u,a=t[o][n][1]):(t[o][n][0]=0,t[o][n][1]=0)}},lM={sign:sM,expand:Z_,none:_r,silhouette:J_,wiggle:Q_,positive:cM},fM=function(t,r,n){var i=r.map(function(u){return u.props.dataKey}),a=lM[n],o=Y_().keys(i).value(function(u,s){return+Ce(u,s,0)}).order(Al).offset(a);return o(t)},hM=function(t,r,n,i,a,o){if(!t)return null;var u=o?r.reverse():r,s={},c=u.reduce(function(l,h){var p,y=(p=h.type)!==null&&p!==void 0&&p.defaultProps?ye(ye({},h.type.defaultProps),h.props):h.props,v=y.stackId,d=y.hide;if(d)return l;var g=y[n],x=l[g]||{hasStack:!1,stackGroups:{}};if(Se(v)){var w=x.stackGroups[v]||{numericAxisId:n,cateAxisId:i,items:[]};w.items.push(h),x.hasStack=!0,x.stackGroups[v]=w}else x.stackGroups[ai("_stackId_")]={numericAxisId:n,cateAxisId:i,items:[h]};return ye(ye({},l),{},Or({},g,x))},s),f={};return Object.keys(c).reduce(function(l,h){var p=c[h];if(p.hasStack){var y={};p.stackGroups=Object.keys(p.stackGroups).reduce(function(v,d){var g=p.stackGroups[d];return ye(ye({},v),{},Or({},d,{numericAxisId:n,cateAxisId:i,items:g.items,stackedData:fM(t,g.items,a)}))},y)}return ye(ye({},l),{},Or({},h,p))},f)},Ux=function(t,r){var n=r.realScaleType,i=r.type,a=r.tickCount,o=r.originalDomain,u=r.allowDecimals,s=n||r.scale;if(s!=="auto"&&s!=="linear")return null;if(a&&i==="number"&&o&&(o[0]==="auto"||o[1]==="auto")){var c=t.domain();if(!c.length)return null;var f=PE(c,a,u);return t.domain([Xa(f),Va(f)]),{niceTicks:f}}if(a&&i==="number"){var l=t.domain(),h=TE(l,a,u);return{niceTicks:h}}return null},km=function(t){var r=t.axis,n=t.ticks,i=t.offset,a=t.bandSize,o=t.entry,u=t.index;if(r.type==="category")return n[u]?n[u].coordinate+i:null;var s=Ce(o,r.dataKey,r.domain[u]);return ee(s)?null:r.scale(s)-a/2+i},dM=function(t){var r=t.numericAxis,n=r.scale.domain();if(r.type==="number"){var i=Math.min(n[0],n[1]),a=Math.max(n[0],n[1]);return i<=0&&a>=0?0:a<0?a:i}return n[0]},pM=function(t,r){var n,i=(n=t.type)!==null&&n!==void 0&&n.defaultProps?ye(ye({},t.type.defaultProps),t.props):t.props,a=i.stackId;if(Se(a)){var o=r[a];if(o){var u=o.items.indexOf(t);return u>=0?o.stackedData[u]:null}}return null},vM=function(t){return t.reduce(function(r,n){return[Xa(n.concat([r[0]]).filter(L)),Va(n.concat([r[1]]).filter(L))]},[1/0,-1/0])},Wx=function(t,r,n){return Object.keys(t).reduce(function(i,a){var o=t[a],u=o.stackedData,s=u.reduce(function(c,f){var l=vM(f.slice(r,n+1));return[Math.min(c[0],l[0]),Math.max(c[1],l[1])]},[1/0,-1/0]);return[Math.min(s[0],i[0]),Math.max(s[1],i[1])]},[1/0,-1/0]).map(function(i){return i===1/0||i===-1/0?0:i})},Nm=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Rm=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Yl=function(t,r,n){if(Y(t))return t(r,n);if(!Array.isArray(t))return r;var i=[];if(L(t[0]))i[0]=n?t[0]:Math.min(t[0],r[0]);else if(Nm.test(t[0])){var a=+Nm.exec(t[0])[1];i[0]=r[0]-a}else Y(t[0])?i[0]=t[0](r[0]):i[0]=r[0];if(L(t[1]))i[1]=n?t[1]:Math.max(t[1],r[1]);else if(Rm.test(t[1])){var o=+Rm.exec(t[1])[1];i[1]=r[1]+o}else Y(t[1])?i[1]=t[1](r[1]):i[1]=r[1];return i},ea=function(t,r,n){if(t&&t.scale&&t.scale.bandwidth){var i=t.scale.bandwidth();if(!n||i>0)return i}if(t&&r&&r.length>=2){for(var a=ih(r,function(l){return l.coordinate}),o=1/0,u=1,s=a.length;ue.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(t-(n.left||0)-(n.right||0)),Math.abs(r-(n.top||0)-(n.bottom||0)))/2},SM=function(t,r,n,i,a){var o=t.width,u=t.height,s=t.startAngle,c=t.endAngle,f=ke(t.cx,o,o/2),l=ke(t.cy,u,u/2),h=Gx(o,u,n),p=ke(t.innerRadius,h,0),y=ke(t.outerRadius,h,h*.8),v=Object.keys(r);return v.reduce(function(d,g){var x=r[g],w=x.domain,O=x.reversed,m;if(ee(x.range))i==="angleAxis"?m=[s,c]:i==="radiusAxis"&&(m=[p,y]),O&&(m=[m[1],m[0]]);else{m=x.range;var b=m,_=gM(b,2);s=_[0],c=_[1]}var S=Fx(x,a),P=S.realScaleType,$=S.scale;$.domain(w).range(m),zx($);var j=Ux($,ht(ht({},x),{},{realScaleType:P})),T=ht(ht(ht({},x),j),{},{range:m,radius:y,realScaleType:P,scale:$,cx:f,cy:l,innerRadius:p,outerRadius:y,startAngle:s,endAngle:c});return ht(ht({},d),{},Kx({},g,T))},{})},AM=function(t,r){var n=t.x,i=t.y,a=r.x,o=r.y;return Math.sqrt(Math.pow(n-a,2)+Math.pow(i-o,2))},PM=function(t,r){var n=t.x,i=t.y,a=r.cx,o=r.cy,u=AM({x:n,y:i},{x:a,y:o});if(u<=0)return{radius:u};var s=(n-a)/u,c=Math.acos(s);return i>o&&(c=2*Math.PI-c),{radius:u,angle:_M(c),angleInRadian:c}},TM=function(t){var r=t.startAngle,n=t.endAngle,i=Math.floor(r/360),a=Math.floor(n/360),o=Math.min(i,a);return{startAngle:r-o*360,endAngle:n-o*360}},jM=function(t,r){var n=r.startAngle,i=r.endAngle,a=Math.floor(n/360),o=Math.floor(i/360),u=Math.min(a,o);return t+u*360},Bm=function(t,r){var n=t.x,i=t.y,a=PM({x:n,y:i},r),o=a.radius,u=a.angle,s=r.innerRadius,c=r.outerRadius;if(oc)return!1;if(o===0)return!0;var f=TM(r),l=f.startAngle,h=f.endAngle,p=u,y;if(l<=h){for(;p>h;)p-=360;for(;p=l&&p<=h}else{for(;p>l;)p-=360;for(;p=h&&p<=l}return y?ht(ht({},r),{},{radius:o,angle:jM(p,r)}):null},Vx=function(t){return!N.isValidElement(t)&&!Y(t)&&typeof t!="boolean"?t.className:""};function Ln(e){"@babel/helpers - typeof";return Ln=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ln(e)}var EM=["offset"];function MM(e){return kM(e)||IM(e)||CM(e)||$M()}function $M(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function CM(e,t){if(e){if(typeof e=="string")return Zl(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Zl(e,t)}}function IM(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function kM(e){if(Array.isArray(e))return Zl(e)}function Zl(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function RM(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function Fm(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function _e(e){for(var t=1;t=0?1:-1,w,O;i==="insideStart"?(w=p+x*o,O=v):i==="insideEnd"?(w=y-x*o,O=!v):i==="end"&&(w=y+x*o,O=v),O=g<=0?O:!O;var m=fe(c,f,d,w),b=fe(c,f,d,w+(O?1:-1)*359),_="M".concat(m.x,",").concat(m.y,` + A`).concat(d,",").concat(d,",0,1,").concat(O?0:1,`, + `).concat(b.x,",").concat(b.y),S=ee(t.id)?ai("recharts-radial-line-"):t.id;return A.createElement("text",Bn({},n,{dominantBaseline:"central",className:Q("recharts-radial-bar-label",u)}),A.createElement("defs",null,A.createElement("path",{id:S,d:_})),A.createElement("textPath",{xlinkHref:"#".concat(S)},r))},UM=function(t){var r=t.viewBox,n=t.offset,i=t.position,a=r,o=a.cx,u=a.cy,s=a.innerRadius,c=a.outerRadius,f=a.startAngle,l=a.endAngle,h=(f+l)/2;if(i==="outside"){var p=fe(o,u,c+n,h),y=p.x,v=p.y;return{x:y,y:v,textAnchor:y>=o?"start":"end",verticalAnchor:"middle"}}if(i==="center")return{x:o,y:u,textAnchor:"middle",verticalAnchor:"middle"};if(i==="centerTop")return{x:o,y:u,textAnchor:"middle",verticalAnchor:"start"};if(i==="centerBottom")return{x:o,y:u,textAnchor:"middle",verticalAnchor:"end"};var d=(s+c)/2,g=fe(o,u,d,h),x=g.x,w=g.y;return{x,y:w,textAnchor:"middle",verticalAnchor:"middle"}},WM=function(t){var r=t.viewBox,n=t.parentViewBox,i=t.offset,a=t.position,o=r,u=o.x,s=o.y,c=o.width,f=o.height,l=f>=0?1:-1,h=l*i,p=l>0?"end":"start",y=l>0?"start":"end",v=c>=0?1:-1,d=v*i,g=v>0?"end":"start",x=v>0?"start":"end";if(a==="top"){var w={x:u+c/2,y:s-l*i,textAnchor:"middle",verticalAnchor:p};return _e(_e({},w),n?{height:Math.max(s-n.y,0),width:c}:{})}if(a==="bottom"){var O={x:u+c/2,y:s+f+h,textAnchor:"middle",verticalAnchor:y};return _e(_e({},O),n?{height:Math.max(n.y+n.height-(s+f),0),width:c}:{})}if(a==="left"){var m={x:u-d,y:s+f/2,textAnchor:g,verticalAnchor:"middle"};return _e(_e({},m),n?{width:Math.max(m.x-n.x,0),height:f}:{})}if(a==="right"){var b={x:u+c+d,y:s+f/2,textAnchor:x,verticalAnchor:"middle"};return _e(_e({},b),n?{width:Math.max(n.x+n.width-b.x,0),height:f}:{})}var _=n?{width:c,height:f}:{};return a==="insideLeft"?_e({x:u+d,y:s+f/2,textAnchor:x,verticalAnchor:"middle"},_):a==="insideRight"?_e({x:u+c-d,y:s+f/2,textAnchor:g,verticalAnchor:"middle"},_):a==="insideTop"?_e({x:u+c/2,y:s+h,textAnchor:"middle",verticalAnchor:y},_):a==="insideBottom"?_e({x:u+c/2,y:s+f-h,textAnchor:"middle",verticalAnchor:p},_):a==="insideTopLeft"?_e({x:u+d,y:s+h,textAnchor:x,verticalAnchor:y},_):a==="insideTopRight"?_e({x:u+c-d,y:s+h,textAnchor:g,verticalAnchor:y},_):a==="insideBottomLeft"?_e({x:u+d,y:s+f-h,textAnchor:x,verticalAnchor:p},_):a==="insideBottomRight"?_e({x:u+c-d,y:s+f-h,textAnchor:g,verticalAnchor:p},_):Yr(a)&&(L(a.x)||Gt(a.x))&&(L(a.y)||Gt(a.y))?_e({x:u+ke(a.x,c),y:s+ke(a.y,f),textAnchor:"end",verticalAnchor:"end"},_):_e({x:u+c/2,y:s+f/2,textAnchor:"middle",verticalAnchor:"middle"},_)},HM=function(t){return"cx"in t&&L(t.cx)};function Te(e){var t=e.offset,r=t===void 0?5:t,n=NM(e,EM),i=_e({offset:r},n),a=i.viewBox,o=i.position,u=i.value,s=i.children,c=i.content,f=i.className,l=f===void 0?"":f,h=i.textBreakAll;if(!a||ee(u)&&ee(s)&&!N.isValidElement(c)&&!Y(c))return null;if(N.isValidElement(c))return N.cloneElement(c,i);var p;if(Y(c)){if(p=N.createElement(c,i),N.isValidElement(p))return p}else p=BM(i);var y=HM(a),v=X(i,!0);if(y&&(o==="insideStart"||o==="insideEnd"||o==="end"))return zM(i,p,v);var d=y?UM(i):WM(i);return A.createElement(rr,Bn({className:Q("recharts-label",l)},v,d,{breakAll:h}),p)}Te.displayName="Label";var Xx=function(t){var r=t.cx,n=t.cy,i=t.angle,a=t.startAngle,o=t.endAngle,u=t.r,s=t.radius,c=t.innerRadius,f=t.outerRadius,l=t.x,h=t.y,p=t.top,y=t.left,v=t.width,d=t.height,g=t.clockWise,x=t.labelViewBox;if(x)return x;if(L(v)&&L(d)){if(L(l)&&L(h))return{x:l,y:h,width:v,height:d};if(L(p)&&L(y))return{x:p,y,width:v,height:d}}return L(l)&&L(h)?{x:l,y:h,width:0,height:0}:L(r)&&L(n)?{cx:r,cy:n,startAngle:a||i||0,endAngle:o||i||0,innerRadius:c||0,outerRadius:f||s||u||0,clockWise:g}:t.viewBox?t.viewBox:{}},KM=function(t,r){return t?t===!0?A.createElement(Te,{key:"label-implicit",viewBox:r}):Se(t)?A.createElement(Te,{key:"label-implicit",viewBox:r,value:t}):N.isValidElement(t)?t.type===Te?N.cloneElement(t,{key:"label-implicit",viewBox:r}):A.createElement(Te,{key:"label-implicit",content:t,viewBox:r}):Y(t)?A.createElement(Te,{key:"label-implicit",content:t,viewBox:r}):Yr(t)?A.createElement(Te,Bn({viewBox:r},t,{key:"label-implicit"})):null:null},GM=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&n&&!t.label)return null;var i=t.children,a=Xx(t),o=Ze(i,Te).map(function(s,c){return N.cloneElement(s,{viewBox:r||a,key:"label-".concat(c)})});if(!n)return o;var u=KM(t.label,r||a);return[u].concat(MM(o))};Te.parseViewBox=Xx;Te.renderCallByParent=GM;var qc,zm;function VM(){if(zm)return qc;zm=1;function e(t){var r=t==null?0:t.length;return r?t[r-1]:void 0}return qc=e,qc}var XM=VM();const YM=ue(XM);function Fn(e){"@babel/helpers - typeof";return Fn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Fn(e)}var ZM=["valueAccessor"],JM=["data","dataKey","clockWise","id","textBreakAll"];function QM(e){return n$(e)||r$(e)||t$(e)||e$()}function e$(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function t$(e,t){if(e){if(typeof e=="string")return Jl(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Jl(e,t)}}function r$(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function n$(e){if(Array.isArray(e))return Jl(e)}function Jl(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function u$(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var s$=function(t){return Array.isArray(t.value)?YM(t.value):t.value};function It(e){var t=e.valueAccessor,r=t===void 0?s$:t,n=Hm(e,ZM),i=n.data,a=n.dataKey,o=n.clockWise,u=n.id,s=n.textBreakAll,c=Hm(n,JM);return!i||!i.length?null:A.createElement(ae,{className:"recharts-label-list"},i.map(function(f,l){var h=ee(a)?r(f,l):Ce(f&&f.payload,a),p=ee(u)?{}:{id:"".concat(u,"-").concat(l)};return A.createElement(Te,ra({},X(f,!0),c,p,{parentViewBox:f.parentViewBox,value:h,textBreakAll:s,viewBox:Te.parseViewBox(ee(o)?f:Wm(Wm({},f),{},{clockWise:o})),key:"label-".concat(l),index:l}))}))}It.displayName="LabelList";function c$(e,t){return e?e===!0?A.createElement(It,{key:"labelList-implicit",data:t}):A.isValidElement(e)||Y(e)?A.createElement(It,{key:"labelList-implicit",data:t,content:e}):Yr(e)?A.createElement(It,ra({data:t},e,{key:"labelList-implicit"})):null:null}function l$(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&r&&!e.label)return null;var n=e.children,i=Ze(n,It).map(function(o,u){return N.cloneElement(o,{data:t,key:"labelList-".concat(u)})});if(!r)return i;var a=c$(e.label,t);return[a].concat(QM(i))}It.renderCallByParent=l$;function zn(e){"@babel/helpers - typeof";return zn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},zn(e)}function Ql(){return Ql=Object.assign?Object.assign.bind():function(e){for(var t=1;t180),",").concat(+(o>c),`, + `).concat(l.x,",").concat(l.y,` + `);if(i>0){var p=fe(r,n,i,o),y=fe(r,n,i,c);h+="L ".concat(y.x,",").concat(y.y,` + A `).concat(i,",").concat(i,`,0, + `).concat(+(Math.abs(s)>180),",").concat(+(o<=c),`, + `).concat(p.x,",").concat(p.y," Z")}else h+="L ".concat(r,",").concat(n," Z");return h},v$=function(t){var r=t.cx,n=t.cy,i=t.innerRadius,a=t.outerRadius,o=t.cornerRadius,u=t.forceCornerRadius,s=t.cornerIsExternal,c=t.startAngle,f=t.endAngle,l=Ie(f-c),h=wi({cx:r,cy:n,radius:a,angle:c,sign:l,cornerRadius:o,cornerIsExternal:s}),p=h.circleTangency,y=h.lineTangency,v=h.theta,d=wi({cx:r,cy:n,radius:a,angle:f,sign:-l,cornerRadius:o,cornerIsExternal:s}),g=d.circleTangency,x=d.lineTangency,w=d.theta,O=s?Math.abs(c-f):Math.abs(c-f)-v-w;if(O<0)return u?"M ".concat(y.x,",").concat(y.y,` + a`).concat(o,",").concat(o,",0,0,1,").concat(o*2,`,0 + a`).concat(o,",").concat(o,",0,0,1,").concat(-o*2,`,0 + `):Yx({cx:r,cy:n,innerRadius:i,outerRadius:a,startAngle:c,endAngle:f});var m="M ".concat(y.x,",").concat(y.y,` + A`).concat(o,",").concat(o,",0,0,").concat(+(l<0),",").concat(p.x,",").concat(p.y,` + A`).concat(a,",").concat(a,",0,").concat(+(O>180),",").concat(+(l<0),",").concat(g.x,",").concat(g.y,` + A`).concat(o,",").concat(o,",0,0,").concat(+(l<0),",").concat(x.x,",").concat(x.y,` + `);if(i>0){var b=wi({cx:r,cy:n,radius:i,angle:c,sign:l,isExternal:!0,cornerRadius:o,cornerIsExternal:s}),_=b.circleTangency,S=b.lineTangency,P=b.theta,$=wi({cx:r,cy:n,radius:i,angle:f,sign:-l,isExternal:!0,cornerRadius:o,cornerIsExternal:s}),j=$.circleTangency,T=$.lineTangency,M=$.theta,I=s?Math.abs(c-f):Math.abs(c-f)-P-M;if(I<0&&o===0)return"".concat(m,"L").concat(r,",").concat(n,"Z");m+="L".concat(T.x,",").concat(T.y,` + A`).concat(o,",").concat(o,",0,0,").concat(+(l<0),",").concat(j.x,",").concat(j.y,` + A`).concat(i,",").concat(i,",0,").concat(+(I>180),",").concat(+(l>0),",").concat(_.x,",").concat(_.y,` + A`).concat(o,",").concat(o,",0,0,").concat(+(l<0),",").concat(S.x,",").concat(S.y,"Z")}else m+="L".concat(r,",").concat(n,"Z");return m},y$={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},Zx=function(t){var r=Gm(Gm({},y$),t),n=r.cx,i=r.cy,a=r.innerRadius,o=r.outerRadius,u=r.cornerRadius,s=r.forceCornerRadius,c=r.cornerIsExternal,f=r.startAngle,l=r.endAngle,h=r.className;if(o0&&Math.abs(f-l)<360?d=v$({cx:n,cy:i,innerRadius:a,outerRadius:o,cornerRadius:Math.min(v,y/2),forceCornerRadius:s,cornerIsExternal:c,startAngle:f,endAngle:l}):d=Yx({cx:n,cy:i,innerRadius:a,outerRadius:o,startAngle:f,endAngle:l}),A.createElement("path",Ql({},X(r,!0),{className:p,d,role:"img"}))};function Un(e){"@babel/helpers - typeof";return Un=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Un(e)}function ef(){return ef=Object.assign?Object.assign.bind():function(e){for(var t=1;tj$.call(e,t));function cr(e,t){return e===t||!e&&!t&&e!==e&&t!==t}const $$="__v",C$="__o",I$="_owner",{getOwnPropertyDescriptor:tg,keys:rg}=Object;function k$(e,t){return e.byteLength===t.byteLength&&na(new Uint8Array(e),new Uint8Array(t))}function N$(e,t,r){let n=e.length;if(t.length!==n)return!1;for(;n-- >0;)if(!r.equals(e[n],t[n],n,n,e,t,r))return!1;return!0}function R$(e,t){return e.byteLength===t.byteLength&&na(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}function D$(e,t){return cr(e.getTime(),t.getTime())}function q$(e,t){return e.name===t.name&&e.message===t.message&&e.cause===t.cause&&e.stack===t.stack}function L$(e,t){return e===t}function ng(e,t,r){const n=e.size;if(n!==t.size)return!1;if(!n)return!0;const i=new Array(n),a=e.entries();let o,u,s=0;for(;(o=a.next())&&!o.done;){const c=t.entries();let f=!1,l=0;for(;(u=c.next())&&!u.done;){if(i[l]){l++;continue}const h=o.value,p=u.value;if(r.equals(h[0],p[0],s,l,e,t,r)&&r.equals(h[1],p[1],h[0],p[0],e,t,r)){f=i[l]=!0;break}l++}if(!f)return!1;s++}return!0}const B$=cr;function F$(e,t,r){const n=rg(e);let i=n.length;if(rg(t).length!==i)return!1;for(;i-- >0;)if(!Jx(e,t,r,n[i]))return!1;return!0}function fn(e,t,r){const n=eg(e);let i=n.length;if(eg(t).length!==i)return!1;let a,o,u;for(;i-- >0;)if(a=n[i],!Jx(e,t,r,a)||(o=tg(e,a),u=tg(t,a),(o||u)&&(!o||!u||o.configurable!==u.configurable||o.enumerable!==u.enumerable||o.writable!==u.writable)))return!1;return!0}function z$(e,t){return cr(e.valueOf(),t.valueOf())}function U$(e,t){return e.source===t.source&&e.flags===t.flags}function ig(e,t,r){const n=e.size;if(n!==t.size)return!1;if(!n)return!0;const i=new Array(n),a=e.values();let o,u;for(;(o=a.next())&&!o.done;){const s=t.values();let c=!1,f=0;for(;(u=s.next())&&!u.done;){if(!i[f]&&r.equals(o.value,u.value,o.value,u.value,e,t,r)){c=i[f]=!0;break}f++}if(!c)return!1}return!0}function na(e,t){let r=e.byteLength;if(t.byteLength!==r||e.byteOffset!==t.byteOffset)return!1;for(;r-- >0;)if(e[r]!==t[r])return!1;return!0}function W$(e,t){return e.hostname===t.hostname&&e.pathname===t.pathname&&e.protocol===t.protocol&&e.port===t.port&&e.hash===t.hash&&e.username===t.username&&e.password===t.password}function Jx(e,t,r,n){return(n===I$||n===C$||n===$$)&&(e.$$typeof||t.$$typeof)?!0:M$(t,n)&&r.equals(e[n],t[n],n,n,e,t,r)}const H$="[object ArrayBuffer]",K$="[object Arguments]",G$="[object Boolean]",V$="[object DataView]",X$="[object Date]",Y$="[object Error]",Z$="[object Map]",J$="[object Number]",Q$="[object Object]",eC="[object RegExp]",tC="[object Set]",rC="[object String]",nC={"[object Int8Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Int16Array]":!0,"[object Uint16Array]":!0,"[object Int32Array]":!0,"[object Uint32Array]":!0,"[object Float16Array]":!0,"[object Float32Array]":!0,"[object Float64Array]":!0,"[object BigInt64Array]":!0,"[object BigUint64Array]":!0},iC="[object URL]",aC=Object.prototype.toString;function oC({areArrayBuffersEqual:e,areArraysEqual:t,areDataViewsEqual:r,areDatesEqual:n,areErrorsEqual:i,areFunctionsEqual:a,areMapsEqual:o,areNumbersEqual:u,areObjectsEqual:s,arePrimitiveWrappersEqual:c,areRegExpsEqual:f,areSetsEqual:l,areTypedArraysEqual:h,areUrlsEqual:p,unknownTagComparators:y}){return function(d,g,x){if(d===g)return!0;if(d==null||g==null)return!1;const w=typeof d;if(w!==typeof g)return!1;if(w!=="object")return w==="number"?u(d,g,x):w==="function"?a(d,g,x):!1;const O=d.constructor;if(O!==g.constructor)return!1;if(O===Object)return s(d,g,x);if(Array.isArray(d))return t(d,g,x);if(O===Date)return n(d,g,x);if(O===RegExp)return f(d,g,x);if(O===Map)return o(d,g,x);if(O===Set)return l(d,g,x);const m=aC.call(d);if(m===X$)return n(d,g,x);if(m===eC)return f(d,g,x);if(m===Z$)return o(d,g,x);if(m===tC)return l(d,g,x);if(m===Q$)return typeof d.then!="function"&&typeof g.then!="function"&&s(d,g,x);if(m===iC)return p(d,g,x);if(m===Y$)return i(d,g,x);if(m===K$)return s(d,g,x);if(nC[m])return h(d,g,x);if(m===H$)return e(d,g,x);if(m===V$)return r(d,g,x);if(m===G$||m===J$||m===rC)return c(d,g,x);if(y){let b=y[m];if(!b){const _=E$(d);_&&(b=y[_])}if(b)return b(d,g,x)}return!1}}function uC({circular:e,createCustomConfig:t,strict:r}){let n={areArrayBuffersEqual:k$,areArraysEqual:r?fn:N$,areDataViewsEqual:R$,areDatesEqual:D$,areErrorsEqual:q$,areFunctionsEqual:L$,areMapsEqual:r?zc(ng,fn):ng,areNumbersEqual:B$,areObjectsEqual:r?fn:F$,arePrimitiveWrappersEqual:z$,areRegExpsEqual:U$,areSetsEqual:r?zc(ig,fn):ig,areTypedArraysEqual:r?zc(na,fn):na,areUrlsEqual:W$,unknownTagComparators:void 0};if(t&&(n=Object.assign({},n,t(n))),e){const i=_i(n.areArraysEqual),a=_i(n.areMapsEqual),o=_i(n.areObjectsEqual),u=_i(n.areSetsEqual);n=Object.assign({},n,{areArraysEqual:i,areMapsEqual:a,areObjectsEqual:o,areSetsEqual:u})}return n}function sC(e){return function(t,r,n,i,a,o,u){return e(t,r,u)}}function cC({circular:e,comparator:t,createState:r,equals:n,strict:i}){if(r)return function(u,s){const{cache:c=e?new WeakMap:void 0,meta:f}=r();return t(u,s,{cache:c,equals:n,meta:f,strict:i})};if(e)return function(u,s){return t(u,s,{cache:new WeakMap,equals:n,meta:void 0,strict:i})};const a={cache:void 0,equals:n,meta:void 0,strict:i};return function(u,s){return t(u,s,a)}}const lC=Dt();Dt({strict:!0});Dt({circular:!0});Dt({circular:!0,strict:!0});Dt({createInternalComparator:()=>cr});Dt({strict:!0,createInternalComparator:()=>cr});Dt({circular:!0,createInternalComparator:()=>cr});Dt({circular:!0,createInternalComparator:()=>cr,strict:!0});function Dt(e={}){const{circular:t=!1,createInternalComparator:r,createState:n,strict:i=!1}=e,a=uC(e),o=oC(a),u=r?r(o):sC(o);return cC({circular:t,comparator:o,createState:n,equals:u,strict:i})}function fC(e){typeof requestAnimationFrame<"u"&&requestAnimationFrame(e)}function ag(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=-1,n=function i(a){r<0&&(r=a),a-r>t?(e(a),r=-1):fC(i)};requestAnimationFrame(n)}function rf(e){"@babel/helpers - typeof";return rf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},rf(e)}function hC(e){return yC(e)||vC(e)||pC(e)||dC()}function dC(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function pC(e,t){if(e){if(typeof e=="string")return og(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return og(e,t)}}function og(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);re.length)&&(t=e.length);for(var r=0,n=new Array(t);r1?1:g<0?0:g},v=function(g){for(var x=g>1?1:g,w=x,O=0;O<8;++O){var m=l(w)-x,b=p(w);if(Math.abs(m-x)0&&arguments[0]!==void 0?arguments[0]:{},r=t.stiff,n=r===void 0?100:r,i=t.damping,a=i===void 0?8:i,o=t.dt,u=o===void 0?17:o,s=function(f,l,h){var p=-(f-l)*n,y=h*a,v=h+(p-y)*u/1e3,d=h*u/1e3+f;return Math.abs(d-l)e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function GC(e,t){if(e==null)return{};var r={},n=Object.keys(e),i,a;for(a=0;a=0)&&(r[i]=e[i]);return r}function Uc(e){return ZC(e)||YC(e)||XC(e)||VC()}function VC(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function XC(e,t){if(e){if(typeof e=="string")return sf(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return sf(e,t)}}function YC(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function ZC(e){if(Array.isArray(e))return sf(e)}function sf(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function oa(e){return oa=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},oa(e)}var wt=(function(e){rI(r,e);var t=nI(r);function r(n,i){var a;JC(this,r),a=t.call(this,n,i);var o=a.props,u=o.isActive,s=o.attributeName,c=o.from,f=o.to,l=o.steps,h=o.children,p=o.duration;if(a.handleStyleChange=a.handleStyleChange.bind(ff(a)),a.changeStyle=a.changeStyle.bind(ff(a)),!u||p<=0)return a.state={style:{}},typeof h=="function"&&(a.state={style:f}),lf(a);if(l&&l.length)a.state={style:l[0].style};else if(c){if(typeof h=="function")return a.state={style:c},lf(a);a.state={style:s?vn({},s,c):c}}else a.state={style:{}};return a}return eI(r,[{key:"componentDidMount",value:function(){var i=this.props,a=i.isActive,o=i.canBegin;this.mounted=!0,!(!a||!o)&&this.runAnimation(this.props)}},{key:"componentDidUpdate",value:function(i){var a=this.props,o=a.isActive,u=a.canBegin,s=a.attributeName,c=a.shouldReAnimate,f=a.to,l=a.from,h=this.state.style;if(u){if(!o){var p={style:s?vn({},s,f):f};this.state&&h&&(s&&h[s]!==f||!s&&h!==f)&&this.setState(p);return}if(!(lC(i.to,f)&&i.canBegin&&i.isActive)){var y=!i.canBegin||!i.isActive;this.manager&&this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation();var v=y||c?l:i.to;if(this.state&&h){var d={style:s?vn({},s,v):v};(s&&h[s]!==v||!s&&h!==v)&&this.setState(d)}this.runAnimation(et(et({},this.props),{},{from:v,begin:0}))}}}},{key:"componentWillUnmount",value:function(){this.mounted=!1;var i=this.props.onAnimationEnd;this.unSubscribe&&this.unSubscribe(),this.manager&&(this.manager.stop(),this.manager=null),this.stopJSAnimation&&this.stopJSAnimation(),i&&i()}},{key:"handleStyleChange",value:function(i){this.changeStyle(i)}},{key:"changeStyle",value:function(i){this.mounted&&this.setState({style:i})}},{key:"runJSAnimation",value:function(i){var a=this,o=i.from,u=i.to,s=i.duration,c=i.easing,f=i.begin,l=i.onAnimationEnd,h=i.onAnimationStart,p=WC(o,u,IC(c),s,this.changeStyle),y=function(){a.stopJSAnimation=p()};this.manager.start([h,f,y,s,l])}},{key:"runStepAnimation",value:function(i){var a=this,o=i.steps,u=i.begin,s=i.onAnimationStart,c=o[0],f=c.style,l=c.duration,h=l===void 0?0:l,p=function(v,d,g){if(g===0)return v;var x=d.duration,w=d.easing,O=w===void 0?"ease":w,m=d.style,b=d.properties,_=d.onAnimationEnd,S=g>0?o[g-1]:d,P=b||Object.keys(m);if(typeof O=="function"||O==="spring")return[].concat(Uc(v),[a.runJSAnimation.bind(a,{from:S.style,to:m,duration:x,easing:O}),x]);var $=cg(P,x,O),j=et(et(et({},S.style),m),{},{transition:$});return[].concat(Uc(v),[j,x,_]).filter(wC)};return this.manager.start([s].concat(Uc(o.reduce(p,[f,Math.max(h,u)])),[i.onAnimationEnd]))}},{key:"runAnimation",value:function(i){this.manager||(this.manager=mC());var a=i.begin,o=i.duration,u=i.attributeName,s=i.to,c=i.easing,f=i.onAnimationStart,l=i.onAnimationEnd,h=i.steps,p=i.children,y=this.manager;if(this.unSubscribe=y.subscribe(this.handleStyleChange),typeof c=="function"||typeof p=="function"||c==="spring"){this.runJSAnimation(i);return}if(h.length>1){this.runStepAnimation(i);return}var v=u?vn({},u,s):s,d=cg(Object.keys(v),o,c);y.start([f,a,et(et({},v),{},{transition:d}),o,l])}},{key:"render",value:function(){var i=this.props,a=i.children;i.begin;var o=i.duration;i.attributeName,i.easing;var u=i.isActive;i.steps,i.from,i.to,i.canBegin,i.onAnimationEnd,i.shouldReAnimate,i.onAnimationReStart;var s=KC(i,HC),c=N.Children.count(a),f=this.state.style;if(typeof a=="function")return a(f);if(!u||c===0||o<=0)return a;var l=function(p){var y=p.props,v=y.style,d=v===void 0?{}:v,g=y.className,x=N.cloneElement(p,et(et({},s),{},{style:et(et({},d),f),className:g}));return x};return c===1?l(N.Children.only(a)):A.createElement("div",null,N.Children.map(a,function(h){return l(h)}))}}]),r})(N.PureComponent);wt.displayName="Animate";wt.defaultProps={begin:0,duration:1e3,from:"",to:"",attributeName:"",easing:"ease",isActive:!0,canBegin:!0,steps:[],onAnimationEnd:function(){},onAnimationStart:function(){}};wt.propTypes={from:ie.oneOfType([ie.object,ie.string]),to:ie.oneOfType([ie.object,ie.string]),attributeName:ie.string,duration:ie.number,begin:ie.number,easing:ie.oneOfType([ie.string,ie.func]),steps:ie.arrayOf(ie.shape({duration:ie.number.isRequired,style:ie.object.isRequired,easing:ie.oneOfType([ie.oneOf(["ease","ease-in","ease-out","ease-in-out","linear"]),ie.func]),properties:ie.arrayOf("string"),onAnimationEnd:ie.func})),children:ie.oneOfType([ie.node,ie.func]),isActive:ie.bool,canBegin:ie.bool,onAnimationEnd:ie.func,shouldReAnimate:ie.bool,onAnimationStart:ie.func,onAnimationReStart:ie.func};function Kn(e){"@babel/helpers - typeof";return Kn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Kn(e)}function ua(){return ua=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0?1:-1,s=n>=0?1:-1,c=i>=0&&n>=0||i<0&&n<0?1:0,f;if(o>0&&a instanceof Array){for(var l=[0,0,0,0],h=0,p=4;ho?o:a[h];f="M".concat(t,",").concat(r+u*l[0]),l[0]>0&&(f+="A ".concat(l[0],",").concat(l[0],",0,0,").concat(c,",").concat(t+s*l[0],",").concat(r)),f+="L ".concat(t+n-s*l[1],",").concat(r),l[1]>0&&(f+="A ".concat(l[1],",").concat(l[1],",0,0,").concat(c,`, + `).concat(t+n,",").concat(r+u*l[1])),f+="L ".concat(t+n,",").concat(r+i-u*l[2]),l[2]>0&&(f+="A ".concat(l[2],",").concat(l[2],",0,0,").concat(c,`, + `).concat(t+n-s*l[2],",").concat(r+i)),f+="L ".concat(t+s*l[3],",").concat(r+i),l[3]>0&&(f+="A ".concat(l[3],",").concat(l[3],",0,0,").concat(c,`, + `).concat(t,",").concat(r+i-u*l[3])),f+="Z"}else if(o>0&&a===+a&&a>0){var y=Math.min(o,a);f="M ".concat(t,",").concat(r+u*y,` + A `).concat(y,",").concat(y,",0,0,").concat(c,",").concat(t+s*y,",").concat(r,` + L `).concat(t+n-s*y,",").concat(r,` + A `).concat(y,",").concat(y,",0,0,").concat(c,",").concat(t+n,",").concat(r+u*y,` + L `).concat(t+n,",").concat(r+i-u*y,` + A `).concat(y,",").concat(y,",0,0,").concat(c,",").concat(t+n-s*y,",").concat(r+i,` + L `).concat(t+s*y,",").concat(r+i,` + A `).concat(y,",").concat(y,",0,0,").concat(c,",").concat(t,",").concat(r+i-u*y," Z")}else f="M ".concat(t,",").concat(r," h ").concat(n," v ").concat(i," h ").concat(-n," Z");return f},dI=function(t,r){if(!t||!r)return!1;var n=t.x,i=t.y,a=r.x,o=r.y,u=r.width,s=r.height;if(Math.abs(u)>0&&Math.abs(s)>0){var c=Math.min(a,a+u),f=Math.max(a,a+u),l=Math.min(o,o+s),h=Math.max(o,o+s);return n>=c&&n<=f&&i>=l&&i<=h}return!1},pI={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},$h=function(t){var r=mg(mg({},pI),t),n=N.useRef(),i=N.useState(-1),a=aI(i,2),o=a[0],u=a[1];N.useEffect(function(){if(n.current&&n.current.getTotalLength)try{var O=n.current.getTotalLength();O&&u(O)}catch{}},[]);var s=r.x,c=r.y,f=r.width,l=r.height,h=r.radius,p=r.className,y=r.animationEasing,v=r.animationDuration,d=r.animationBegin,g=r.isAnimationActive,x=r.isUpdateAnimationActive;if(s!==+s||c!==+c||f!==+f||l!==+l||f===0||l===0)return null;var w=Q("recharts-rectangle",p);return x?A.createElement(wt,{canBegin:o>0,from:{width:f,height:l,x:s,y:c},to:{width:f,height:l,x:s,y:c},duration:v,animationEasing:y,isActive:x},function(O){var m=O.width,b=O.height,_=O.x,S=O.y;return A.createElement(wt,{canBegin:o>0,from:"0px ".concat(o===-1?1:o,"px"),to:"".concat(o,"px 0px"),attributeName:"strokeDasharray",begin:d,duration:v,isActive:g,easing:y},A.createElement("path",ua({},X(r,!0),{className:w,d:gg(_,S,m,b,h),ref:n})))}):A.createElement("path",ua({},X(r,!0),{className:w,d:gg(s,c,f,l,h)}))},vI=["points","className","baseLinePoints","connectNulls"];function yr(){return yr=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function mI(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function bg(e){return wI(e)||xI(e)||bI(e)||gI()}function gI(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function bI(e,t){if(e){if(typeof e=="string")return hf(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return hf(e,t)}}function xI(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function wI(e){if(Array.isArray(e))return hf(e)}function hf(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&arguments[0]!==void 0?arguments[0]:[],r=[[]];return t.forEach(function(n){xg(n)?r[r.length-1].push(n):r[r.length-1].length>0&&r.push([])}),xg(t[0])&&r[r.length-1].push(t[0]),r[r.length-1].length<=0&&(r=r.slice(0,-1)),r},xn=function(t,r){var n=OI(t);r&&(n=[n.reduce(function(a,o){return[].concat(bg(a),bg(o))},[])]);var i=n.map(function(a){return a.reduce(function(o,u,s){return"".concat(o).concat(s===0?"M":"L").concat(u.x,",").concat(u.y)},"")}).join("");return n.length===1?"".concat(i,"Z"):i},_I=function(t,r,n){var i=xn(t,n);return"".concat(i.slice(-1)==="Z"?i.slice(0,-1):i,"L").concat(xn(r.reverse(),n).slice(1))},SI=function(t){var r=t.points,n=t.className,i=t.baseLinePoints,a=t.connectNulls,o=yI(t,vI);if(!r||!r.length)return null;var u=Q("recharts-polygon",n);if(i&&i.length){var s=o.stroke&&o.stroke!=="none",c=_I(r,i,a);return A.createElement("g",{className:u},A.createElement("path",yr({},X(o,!0),{fill:c.slice(-1)==="Z"?o.fill:"none",stroke:"none",d:c})),s?A.createElement("path",yr({},X(o,!0),{fill:"none",d:xn(r,a)})):null,s?A.createElement("path",yr({},X(o,!0),{fill:"none",d:xn(i,a)})):null)}var f=xn(r,a);return A.createElement("path",yr({},X(o,!0),{fill:f.slice(-1)==="Z"?o.fill:"none",className:u,d:f}))};function df(){return df=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function $I(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var CI=function(t,r,n,i,a,o){return"M".concat(t,",").concat(a,"v").concat(i,"M").concat(o,",").concat(r,"h").concat(n)},II=function(t){var r=t.x,n=r===void 0?0:r,i=t.y,a=i===void 0?0:i,o=t.top,u=o===void 0?0:o,s=t.left,c=s===void 0?0:s,f=t.width,l=f===void 0?0:f,h=t.height,p=h===void 0?0:h,y=t.className,v=MI(t,AI),d=PI({x:n,y:a,top:u,left:c,width:l,height:p},v);return!L(n)||!L(a)||!L(l)||!L(p)||!L(u)||!L(c)?null:A.createElement("path",pf({},X(d,!0),{className:Q("recharts-cross",y),d:CI(n,a,l,p,u,c)}))},Wc,Og;function kI(){if(Og)return Wc;Og=1;var e=Ga(),t=bx(),r=lt();function n(i,a){return i&&i.length?e(i,r(a,2),t):void 0}return Wc=n,Wc}var NI=kI();const RI=ue(NI);var Hc,_g;function DI(){if(_g)return Hc;_g=1;var e=Ga(),t=lt(),r=xx();function n(i,a){return i&&i.length?e(i,t(a,2),r):void 0}return Hc=n,Hc}var qI=DI();const LI=ue(qI);var BI=["cx","cy","angle","ticks","axisLine"],FI=["ticks","tick","angle","tickFormatter","stroke"];function Ir(e){"@babel/helpers - typeof";return Ir=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ir(e)}function wn(){return wn=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function zI(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function UI(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Pg(e,t){for(var r=0;rEg?o=i==="outer"?"start":"end":a<-Eg?o=i==="outer"?"end":"start":o="middle",o}},{key:"renderAxisLine",value:function(){var n=this.props,i=n.cx,a=n.cy,o=n.radius,u=n.axisLine,s=n.axisLineType,c=Ut(Ut({},X(this.props,!1)),{},{fill:"none"},X(u,!1));if(s==="circle")return A.createElement(Ch,Kt({className:"recharts-polar-angle-axis-line"},c,{cx:i,cy:a,r:o}));var f=this.props.ticks,l=f.map(function(h){return fe(i,a,o,h.coordinate)});return A.createElement(SI,Kt({className:"recharts-polar-angle-axis-line"},c,{points:l}))}},{key:"renderTicks",value:function(){var n=this,i=this.props,a=i.ticks,o=i.tick,u=i.tickLine,s=i.tickFormatter,c=i.stroke,f=X(this.props,!1),l=X(o,!1),h=Ut(Ut({},f),{},{fill:"none"},X(u,!1)),p=a.map(function(y,v){var d=n.getTickLineCoord(y),g=n.getTickTextAnchor(y),x=Ut(Ut(Ut({textAnchor:g},f),{},{stroke:"none",fill:c},l),{},{index:v,payload:y,x:d.x2,y:d.y2});return A.createElement(ae,Kt({className:Q("recharts-polar-angle-axis-tick",Vx(o)),key:"tick-".concat(y.coordinate)},tr(n.props,y,v)),u&&A.createElement("line",Kt({className:"recharts-polar-angle-axis-tick-line"},h,d)),o&&t.renderTickItem(o,x,s?s(y.value,v):y.value))});return A.createElement(ae,{className:"recharts-polar-angle-axis-ticks"},p)}},{key:"render",value:function(){var n=this.props,i=n.ticks,a=n.radius,o=n.axisLine;return a<=0||!i||!i.length?null:A.createElement(ae,{className:Q("recharts-polar-angle-axis",this.props.className)},o&&this.renderAxisLine(),this.renderTicks())}}],[{key:"renderTickItem",value:function(n,i,a){var o;return A.isValidElement(n)?o=A.cloneElement(n,i):Y(n)?o=n(i):o=A.createElement(rr,Kt({},i,{className:"recharts-polar-angle-axis-tick-value"}),a),o}}])})(N.PureComponent);ro(no,"displayName","PolarAngleAxis");ro(no,"axisType","angleAxis");ro(no,"defaultProps",{type:"category",angleAxisId:0,scale:"auto",cx:0,cy:0,orientation:"outer",axisLine:!0,tickLine:!0,tickSize:8,tick:!0,hide:!1,allowDuplicatedCategory:!0});var Kc,Mg;function ik(){if(Mg)return Kc;Mg=1;var e=b0(),t=e(Object.getPrototypeOf,Object);return Kc=t,Kc}var Gc,$g;function ak(){if($g)return Gc;$g=1;var e=_t(),t=ik(),r=St(),n="[object Object]",i=Function.prototype,a=Object.prototype,o=i.toString,u=a.hasOwnProperty,s=o.call(Object);function c(f){if(!r(f)||e(f)!=n)return!1;var l=t(f);if(l===null)return!0;var h=u.call(l,"constructor")&&l.constructor;return typeof h=="function"&&h instanceof h&&o.call(h)==s}return Gc=c,Gc}var ok=ak();const uk=ue(ok);var Vc,Cg;function sk(){if(Cg)return Vc;Cg=1;var e=_t(),t=St(),r="[object Boolean]";function n(i){return i===!0||i===!1||t(i)&&e(i)==r}return Vc=n,Vc}var ck=sk();const lk=ue(ck);function Vn(e){"@babel/helpers - typeof";return Vn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Vn(e)}function la(){return la=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r0,from:{upperWidth:0,lowerWidth:0,height:h,x:s,y:c},to:{upperWidth:f,lowerWidth:l,height:h,x:s,y:c},duration:v,animationEasing:y,isActive:g},function(w){var O=w.upperWidth,m=w.lowerWidth,b=w.height,_=w.x,S=w.y;return A.createElement(wt,{canBegin:o>0,from:"0px ".concat(o===-1?1:o,"px"),to:"".concat(o,"px 0px"),attributeName:"strokeDasharray",begin:d,duration:v,easing:y},A.createElement("path",la({},X(r,!0),{className:x,d:Rg(_,S,O,m,b),ref:n})))}):A.createElement("g",null,A.createElement("path",la({},X(r,!0),{className:x,d:Rg(s,c,f,l,h)})))},wk=["option","shapeType","propTransformer","activeClassName","isActive"];function Xn(e){"@babel/helpers - typeof";return Xn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xn(e)}function Ok(e,t){if(e==null)return{};var r=_k(e,t),n,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function _k(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function Dg(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function fa(e){for(var t=1;t0?He(w,"paddingAngle",0):0;if(m){var _=jt(m.endAngle-m.startAngle,w.endAngle-w.startAngle),S=ce(ce({},w),{},{startAngle:x+b,endAngle:x+_(v)+b});d.push(S),x=S.endAngle}else{var P=w.endAngle,$=w.startAngle,j=jt(0,P-$),T=j(v),M=ce(ce({},w),{},{startAngle:x+b,endAngle:x+T+b});d.push(M),x=M.endAngle}}),A.createElement(ae,null,n.renderSectorsStatically(d))})}},{key:"attachKeyboardHandlers",value:function(n){var i=this;n.onkeydown=function(a){if(!a.altKey)switch(a.key){case"ArrowLeft":{var o=++i.state.sectorToFocus%i.sectorRefs.length;i.sectorRefs[o].focus(),i.setState({sectorToFocus:o});break}case"ArrowRight":{var u=--i.state.sectorToFocus<0?i.sectorRefs.length-1:i.state.sectorToFocus%i.sectorRefs.length;i.sectorRefs[u].focus(),i.setState({sectorToFocus:u});break}case"Escape":{i.sectorRefs[i.state.sectorToFocus].blur(),i.setState({sectorToFocus:0});break}}}}},{key:"renderSectors",value:function(){var n=this.props,i=n.sectors,a=n.isAnimationActive,o=this.state.prevSectors;return a&&i&&i.length&&(!o||!Ya(o,i))?this.renderSectorsWithAnimation():this.renderSectorsStatically(i)}},{key:"componentDidMount",value:function(){this.pieRef&&this.attachKeyboardHandlers(this.pieRef)}},{key:"render",value:function(){var n=this,i=this.props,a=i.hide,o=i.sectors,u=i.className,s=i.label,c=i.cx,f=i.cy,l=i.innerRadius,h=i.outerRadius,p=i.isAnimationActive,y=this.state.isAnimationFinished;if(a||!o||!o.length||!L(c)||!L(f)||!L(l)||!L(h))return null;var v=Q("recharts-pie",u);return A.createElement(ae,{tabIndex:this.props.rootTabIndex,className:v,ref:function(g){n.pieRef=g}},this.renderSectors(),s&&this.renderLabels(o),Te.renderCallByParent(this.props,null,!1),(!p||y)&&It.renderCallByParent(this.props,o,!1))}}],[{key:"getDerivedStateFromProps",value:function(n,i){return i.prevIsAnimationActive!==n.isAnimationActive?{prevIsAnimationActive:n.isAnimationActive,prevAnimationId:n.animationId,curSectors:n.sectors,prevSectors:[],isAnimationFinished:!0}:n.isAnimationActive&&n.animationId!==i.prevAnimationId?{prevAnimationId:n.animationId,curSectors:n.sectors,prevSectors:i.curSectors,isAnimationFinished:!0}:n.sectors!==i.curSectors?{curSectors:n.sectors,isAnimationFinished:!0}:null}},{key:"getTextAnchor",value:function(n,i){return n>i?"start":n=360?x:x-1)*s,O=d-x*p-w,m=i.reduce(function(S,P){var $=Ce(P,g,0);return S+(L($)?$:0)},0),b;if(m>0){var _;b=i.map(function(S,P){var $=Ce(S,g,0),j=Ce(S,f,P),T=(L($)?$:0)/m,M;P?M=_.endAngle+Ie(v)*s*($!==0?1:0):M=o;var I=M+Ie(v)*(($!==0?p:0)+T*O),C=(M+I)/2,R=(y.innerRadius+y.outerRadius)/2,D=[{name:j,value:$,payload:S,dataKey:g,type:h}],B=fe(y.cx,y.cy,R,C);return _=ce(ce(ce({percent:T,cornerRadius:a,name:j,tooltipPayload:D,midAngle:C,middleRadius:R,tooltipPosition:B},S),y),{},{value:Ce(S,g),startAngle:M,endAngle:I,payload:S,paddingAngle:Ie(v)*s}),_})}return ce(ce({},y),{},{sectors:b,data:i})});var Xc,Fg;function Wk(){if(Fg)return Xc;Fg=1;var e=Math.ceil,t=Math.max;function r(n,i,a,o){for(var u=-1,s=t(e((i-n)/(a||1)),0),c=Array(s);s--;)c[o?s:++u]=n,n+=a;return c}return Xc=r,Xc}var Yc,zg;function hw(){if(zg)return Yc;zg=1;var e=N0(),t=1/0,r=17976931348623157e292;function n(i){if(!i)return i===0?i:0;if(i=e(i),i===t||i===-t){var a=i<0?-1:1;return a*r}return i===i?i:0}return Yc=n,Yc}var Zc,Ug;function Hk(){if(Ug)return Zc;Ug=1;var e=Wk(),t=La(),r=hw();function n(i){return function(a,o,u){return u&&typeof u!="number"&&t(a,o,u)&&(o=u=void 0),a=r(a),o===void 0?(o=a,a=0):o=r(o),u=u===void 0?a0&&n.handleDrag(i.changedTouches[0])}),Fe(n,"handleDragEnd",function(){n.setState({isTravellerMoving:!1,isSlideMoving:!1},function(){var i=n.props,a=i.endIndex,o=i.onDragEnd,u=i.startIndex;o==null||o({endIndex:a,startIndex:u})}),n.detachDragEndListener()}),Fe(n,"handleLeaveWrapper",function(){(n.state.isTravellerMoving||n.state.isSlideMoving)&&(n.leaveTimer=window.setTimeout(n.handleDragEnd,n.props.leaveTimeOut))}),Fe(n,"handleEnterSlideOrTraveller",function(){n.setState({isTextActive:!0})}),Fe(n,"handleLeaveSlideOrTraveller",function(){n.setState({isTextActive:!1})}),Fe(n,"handleSlideDragStart",function(i){var a=Xg(i)?i.changedTouches[0]:i;n.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:a.pageX}),n.attachDragEndListener()}),n.travellerDragStartHandlers={startX:n.handleTravellerDragStart.bind(n,"startX"),endX:n.handleTravellerDragStart.bind(n,"endX")},n.state={},n}return nN(t,e),Qk(t,[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(n){var i=n.startX,a=n.endX,o=this.state.scaleValues,u=this.props,s=u.gap,c=u.data,f=c.length-1,l=Math.min(i,a),h=Math.max(i,a),p=t.getIndexInRange(o,l),y=t.getIndexInRange(o,h);return{startIndex:p-p%s,endIndex:y===f?f:y-y%s}}},{key:"getTextOfTick",value:function(n){var i=this.props,a=i.data,o=i.tickFormatter,u=i.dataKey,s=Ce(a[n],u,n);return Y(o)?o(s,n):s}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(n){var i=this.state,a=i.slideMoveStartX,o=i.startX,u=i.endX,s=this.props,c=s.x,f=s.width,l=s.travellerWidth,h=s.startIndex,p=s.endIndex,y=s.onChange,v=n.pageX-a;v>0?v=Math.min(v,c+f-l-u,c+f-l-o):v<0&&(v=Math.max(v,c-o,c-u));var d=this.getIndex({startX:o+v,endX:u+v});(d.startIndex!==h||d.endIndex!==p)&&y&&y(d),this.setState({startX:o+v,endX:u+v,slideMoveStartX:n.pageX})}},{key:"handleTravellerDragStart",value:function(n,i){var a=Xg(i)?i.changedTouches[0]:i;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:n,brushMoveStartX:a.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(n){var i=this.state,a=i.brushMoveStartX,o=i.movingTravellerId,u=i.endX,s=i.startX,c=this.state[o],f=this.props,l=f.x,h=f.width,p=f.travellerWidth,y=f.onChange,v=f.gap,d=f.data,g={startX:this.state.startX,endX:this.state.endX},x=n.pageX-a;x>0?x=Math.min(x,l+h-p-c):x<0&&(x=Math.max(x,l-c)),g[o]=c+x;var w=this.getIndex(g),O=w.startIndex,m=w.endIndex,b=function(){var S=d.length-1;return o==="startX"&&(u>s?O%v===0:m%v===0)||us?m%v===0:O%v===0)||u>s&&m===S};this.setState(Fe(Fe({},o,c+x),"brushMoveStartX",n.pageX),function(){y&&b()&&y(w)})}},{key:"handleTravellerMoveKeyboard",value:function(n,i){var a=this,o=this.state,u=o.scaleValues,s=o.startX,c=o.endX,f=this.state[i],l=u.indexOf(f);if(l!==-1){var h=l+n;if(!(h===-1||h>=u.length)){var p=u[h];i==="startX"&&p>=c||i==="endX"&&p<=s||this.setState(Fe({},i,p),function(){a.props.onChange(a.getIndex({startX:a.state.startX,endX:a.state.endX}))})}}}},{key:"renderBackground",value:function(){var n=this.props,i=n.x,a=n.y,o=n.width,u=n.height,s=n.fill,c=n.stroke;return A.createElement("rect",{stroke:c,fill:s,x:i,y:a,width:o,height:u})}},{key:"renderPanorama",value:function(){var n=this.props,i=n.x,a=n.y,o=n.width,u=n.height,s=n.data,c=n.children,f=n.padding,l=N.Children.only(c);return l?A.cloneElement(l,{x:i,y:a,width:o,height:u,margin:f,compact:!0,data:s}):null}},{key:"renderTravellerLayer",value:function(n,i){var a,o,u=this,s=this.props,c=s.y,f=s.travellerWidth,l=s.height,h=s.traveller,p=s.ariaLabel,y=s.data,v=s.startIndex,d=s.endIndex,g=Math.max(n,this.props.x),x=Qc(Qc({},X(this.props,!1)),{},{x:g,y:c,width:f,height:l}),w=p||"Min value: ".concat((a=y[v])===null||a===void 0?void 0:a.name,", Max value: ").concat((o=y[d])===null||o===void 0?void 0:o.name);return A.createElement(ae,{tabIndex:0,role:"slider","aria-label":w,"aria-valuenow":n,className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[i],onTouchStart:this.travellerDragStartHandlers[i],onKeyDown:function(m){["ArrowLeft","ArrowRight"].includes(m.key)&&(m.preventDefault(),m.stopPropagation(),u.handleTravellerMoveKeyboard(m.key==="ArrowRight"?1:-1,i))},onFocus:function(){u.setState({isTravellerFocused:!0})},onBlur:function(){u.setState({isTravellerFocused:!1})},style:{cursor:"col-resize"}},t.renderTraveller(h,x))}},{key:"renderSlide",value:function(n,i){var a=this.props,o=a.y,u=a.height,s=a.stroke,c=a.travellerWidth,f=Math.min(n,i)+c,l=Math.max(Math.abs(i-n)-c,0);return A.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:s,fillOpacity:.2,x:f,y:o,width:l,height:u})}},{key:"renderText",value:function(){var n=this.props,i=n.startIndex,a=n.endIndex,o=n.y,u=n.height,s=n.travellerWidth,c=n.stroke,f=this.state,l=f.startX,h=f.endX,p=5,y={pointerEvents:"none",fill:c};return A.createElement(ae,{className:"recharts-brush-texts"},A.createElement(rr,pa({textAnchor:"end",verticalAnchor:"middle",x:Math.min(l,h)-p,y:o+u/2},y),this.getTextOfTick(i)),A.createElement(rr,pa({textAnchor:"start",verticalAnchor:"middle",x:Math.max(l,h)+s+p,y:o+u/2},y),this.getTextOfTick(a)))}},{key:"render",value:function(){var n=this.props,i=n.data,a=n.className,o=n.children,u=n.x,s=n.y,c=n.width,f=n.height,l=n.alwaysShowText,h=this.state,p=h.startX,y=h.endX,v=h.isTextActive,d=h.isSlideMoving,g=h.isTravellerMoving,x=h.isTravellerFocused;if(!i||!i.length||!L(u)||!L(s)||!L(c)||!L(f)||c<=0||f<=0)return null;var w=Q("recharts-brush",a),O=A.Children.count(o)===1,m=Zk("userSelect","none");return A.createElement(ae,{className:w,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:m},this.renderBackground(),O&&this.renderPanorama(),this.renderSlide(p,y),this.renderTravellerLayer(p,"startX"),this.renderTravellerLayer(y,"endX"),(v||d||g||x||l)&&this.renderText())}}],[{key:"renderDefaultTraveller",value:function(n){var i=n.x,a=n.y,o=n.width,u=n.height,s=n.stroke,c=Math.floor(a+u/2)-1;return A.createElement(A.Fragment,null,A.createElement("rect",{x:i,y:a,width:o,height:u,fill:s,stroke:"none"}),A.createElement("line",{x1:i+1,y1:c,x2:i+o-1,y2:c,fill:"none",stroke:"#fff"}),A.createElement("line",{x1:i+1,y1:c+2,x2:i+o-1,y2:c+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(n,i){var a;return A.isValidElement(n)?a=A.cloneElement(n,i):Y(n)?a=n(i):a=t.renderDefaultTraveller(i),a}},{key:"getDerivedStateFromProps",value:function(n,i){var a=n.data,o=n.width,u=n.x,s=n.travellerWidth,c=n.updateId,f=n.startIndex,l=n.endIndex;if(a!==i.prevData||c!==i.prevUpdateId)return Qc({prevData:a,prevTravellerWidth:s,prevUpdateId:c,prevX:u,prevWidth:o},a&&a.length?aN({data:a,width:o,x:u,travellerWidth:s,startIndex:f,endIndex:l}):{scale:null,scaleValues:null});if(i.scale&&(o!==i.prevWidth||u!==i.prevX||s!==i.prevTravellerWidth)){i.scale.range([u,u+o-s]);var h=i.scale.domain().map(function(p){return i.scale(p)});return{prevData:a,prevTravellerWidth:s,prevUpdateId:c,prevX:u,prevWidth:o,startX:i.scale(n.startIndex),endX:i.scale(n.endIndex),scaleValues:h}}return null}},{key:"getIndexInRange",value:function(n,i){for(var a=n.length,o=0,u=a-1;u-o>1;){var s=Math.floor((o+u)/2);n[s]>i?u=s:o=s}return i>=n[u]?u:o}}])})(N.PureComponent);Fe(Dr,"displayName","Brush");Fe(Dr,"defaultProps",{height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1});var el,Yg;function oN(){if(Yg)return el;Yg=1;var e=nh();function t(r,n){var i;return e(r,function(a,o,u){return i=n(a,o,u),!i}),!!i}return el=t,el}var tl,Zg;function uN(){if(Zg)return tl;Zg=1;var e=h0(),t=lt(),r=oN(),n=Le(),i=La();function a(o,u,s){var c=n(o)?e:r;return s&&i(o,u,s)&&(u=void 0),c(o,t(u,3))}return tl=a,tl}var sN=uN();const cN=ue(sN);var ut=function(t,r){var n=t.alwaysShow,i=t.ifOverflow;return n&&(i="extendDomain"),i===r},rl,Jg;function lN(){if(Jg)return rl;Jg=1;var e=M0();function t(r,n,i){n=="__proto__"&&e?e(r,n,{configurable:!0,enumerable:!0,value:i,writable:!0}):r[n]=i}return rl=t,rl}var nl,Qg;function fN(){if(Qg)return nl;Qg=1;var e=lN(),t=j0(),r=lt();function n(i,a){var o={};return a=r(a,3),t(i,function(u,s,c){e(o,s,a(u,s,c))}),o}return nl=n,nl}var hN=fN();const dN=ue(hN);var il,eb;function pN(){if(eb)return il;eb=1;function e(t,r){for(var n=-1,i=t==null?0:t.length;++n=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function _N(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function SN(e,t){var r=e.x,n=e.y,i=ON(e,gN),a="".concat(r),o=parseInt(a,10),u="".concat(n),s=parseInt(u,10),c="".concat(t.height||i.height),f=parseInt(c,10),l="".concat(t.width||i.width),h=parseInt(l,10);return hn(hn(hn(hn(hn({},t),i),o?{x:o}:{}),s?{y:s}:{}),{},{height:f,width:h,name:t.name,radius:t.radius})}function ib(e){return A.createElement(cw,bf({shapeType:"rectangle",propTransformer:SN,activeClassName:"recharts-active-bar"},e))}var AN=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return function(n,i){if(typeof t=="number")return t;var a=L(n)||KO(n);return a?t(n,i):(a||ir(),r)}},PN=["value","background"],mw;function qr(e){"@babel/helpers - typeof";return qr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qr(e)}function TN(e,t){if(e==null)return{};var r=jN(e,t),n,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function jN(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function ya(){return ya=Object.assign?Object.assign.bind():function(e){for(var t=1;t0&&Math.abs(C)0&&Math.abs(I)0&&(M=Math.min((he||0)-(I[me-1]||0),M))}),Number.isFinite(M)){var C=M/T,R=v.layout==="vertical"?n.height:n.width;if(v.padding==="gap"&&(_=C*R/2),v.padding==="no-gap"){var D=ke(t.barCategoryGap,C*R),B=C*R/2;_=B-D-(B-D)/R*D}}}i==="xAxis"?S=[n.left+(w.left||0)+(_||0),n.left+n.width-(w.right||0)-(_||0)]:i==="yAxis"?S=s==="horizontal"?[n.top+n.height-(w.bottom||0),n.top+(w.top||0)]:[n.top+(w.top||0)+(_||0),n.top+n.height-(w.bottom||0)-(_||0)]:S=v.range,m&&(S=[S[1],S[0]]);var F=Fx(v,a,h),H=F.scale,G=F.realScaleType;H.domain(g).range(S),zx(H);var U=Ux(H,tt(tt({},v),{},{realScaleType:G}));i==="xAxis"?(j=d==="top"&&!O||d==="bottom"&&O,P=n.left,$=l[b]-j*v.height):i==="yAxis"&&(j=d==="left"&&!O||d==="right"&&O,P=l[b]-j*v.width,$=n.top);var V=tt(tt(tt({},v),U),{},{realScaleType:G,x:P,y:$,scale:H,width:i==="xAxis"?n.width:v.width,height:i==="yAxis"?n.height:v.height});return V.bandSize=ea(V,U),!v.hide&&i==="xAxis"?l[b]+=(j?-1:1)*V.height:v.hide||(l[b]+=(j?-1:1)*V.width),tt(tt({},p),{},oo({},y,V))},{})},ww=function(t,r){var n=t.x,i=t.y,a=r.x,o=r.y;return{x:Math.min(n,a),y:Math.min(i,o),width:Math.abs(a-n),height:Math.abs(o-i)}},BN=function(t){var r=t.x1,n=t.y1,i=t.x2,a=t.y2;return ww({x:r,y:n},{x:i,y:a})},Ow=(function(){function e(t){RN(this,e),this.scale=t}return DN(e,[{key:"domain",get:function(){return this.scale.domain}},{key:"range",get:function(){return this.scale.range}},{key:"rangeMin",get:function(){return this.range()[0]}},{key:"rangeMax",get:function(){return this.range()[1]}},{key:"bandwidth",get:function(){return this.scale.bandwidth}},{key:"apply",value:function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.bandAware,a=n.position;if(r!==void 0){if(a)switch(a){case"start":return this.scale(r);case"middle":{var o=this.bandwidth?this.bandwidth()/2:0;return this.scale(r)+o}case"end":{var u=this.bandwidth?this.bandwidth():0;return this.scale(r)+u}default:return this.scale(r)}if(i){var s=this.bandwidth?this.bandwidth()/2:0;return this.scale(r)+s}return this.scale(r)}}},{key:"isInRange",value:function(r){var n=this.range(),i=n[0],a=n[n.length-1];return i<=a?r>=i&&r<=a:r>=a&&r<=i}}],[{key:"create",value:function(r){return new e(r)}}])})();oo(Ow,"EPS",1e-4);var Ih=function(t){var r=Object.keys(t).reduce(function(n,i){return tt(tt({},n),{},oo({},i,Ow.create(t[i])))},{});return tt(tt({},r),{},{apply:function(i){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=a.bandAware,u=a.position;return dN(i,function(s,c){return r[c].apply(s,{bandAware:o,position:u})})},isInRange:function(i){return yw(i,function(a,o){return r[o].isInRange(a)})}})};function FN(e){return(e%180+180)%180}var zN=function(t){var r=t.width,n=t.height,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=FN(i),o=a*Math.PI/180,u=Math.atan(n/r),s=o>u&&o-1?s[c?a[f]:f]:void 0}}return ul=n,ul}var sl,lb;function WN(){if(lb)return sl;lb=1;var e=hw();function t(r){var n=e(r),i=n%1;return n===n?i?n-i:n:0}return sl=t,sl}var cl,fb;function HN(){if(fb)return cl;fb=1;var e=_0(),t=lt(),r=WN(),n=Math.max;function i(a,o,u){var s=a==null?0:a.length;if(!s)return-1;var c=u==null?0:r(u);return c<0&&(c=n(s+c,0)),e(a,t(o,3),c)}return cl=i,cl}var ll,hb;function KN(){if(hb)return ll;hb=1;var e=UN(),t=HN(),r=e(t);return ll=r,ll}var GN=KN();const VN=ue(GN);var XN=Lb();const YN=ue(XN);var ZN=YN(function(e){return{x:e.left,y:e.top,width:e.width,height:e.height}},function(e){return["l",e.left,"t",e.top,"w",e.width,"h",e.height].join("")}),kh=N.createContext(void 0),Nh=N.createContext(void 0),_w=N.createContext(void 0),Sw=N.createContext({}),Aw=N.createContext(void 0),Pw=N.createContext(0),Tw=N.createContext(0),db=function(t){var r=t.state,n=r.xAxisMap,i=r.yAxisMap,a=r.offset,o=t.clipPathId,u=t.children,s=t.width,c=t.height,f=ZN(a);return A.createElement(kh.Provider,{value:n},A.createElement(Nh.Provider,{value:i},A.createElement(Sw.Provider,{value:a},A.createElement(_w.Provider,{value:f},A.createElement(Aw.Provider,{value:o},A.createElement(Pw.Provider,{value:c},A.createElement(Tw.Provider,{value:s},u)))))))},JN=function(){return N.useContext(Aw)},jw=function(t){var r=N.useContext(kh);r==null&&ir();var n=r[t];return n==null&&ir(),n},QN=function(){var t=N.useContext(kh);return Mt(t)},eR=function(){var t=N.useContext(Nh),r=VN(t,function(n){return yw(n.domain,Number.isFinite)});return r||Mt(t)},Ew=function(t){var r=N.useContext(Nh);r==null&&ir();var n=r[t];return n==null&&ir(),n},tR=function(){var t=N.useContext(_w);return t},rR=function(){return N.useContext(Sw)},Rh=function(){return N.useContext(Tw)},Dh=function(){return N.useContext(Pw)};function Lr(e){"@babel/helpers - typeof";return Lr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Lr(e)}function nR(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function iR(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);re*i)return!1;var a=r();return e*(t-e*a/2-n)>=0&&e*(t+e*a/2-i)<=0}function LR(e,t){return Rw(e,t+1)}function BR(e,t,r,n,i){for(var a=(n||[]).slice(),o=t.start,u=t.end,s=0,c=1,f=o,l=function(){var y=n==null?void 0:n[s];if(y===void 0)return{v:Rw(n,c)};var v=s,d,g=function(){return d===void 0&&(d=r(y,v)),d},x=y.coordinate,w=s===0||wa(e,x,g,f,u);w||(s=0,f=o,c+=1),w&&(f=x+e*(g()/2+i),s+=c)},h;c<=a.length;)if(h=l(),h)return h.v;return[]}function ei(e){"@babel/helpers - typeof";return ei=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ei(e)}function wb(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Me(e){for(var t=1;t0?p.coordinate-d*e:p.coordinate})}else a[h]=p=Me(Me({},p),{},{tickCoord:p.coordinate});var g=wa(e,p.tickCoord,v,u,s);g&&(s=p.tickCoord-e*(v()/2+i),a[h]=Me(Me({},p),{},{isShow:!0}))},f=o-1;f>=0;f--)c(f);return a}function HR(e,t,r,n,i,a){var o=(n||[]).slice(),u=o.length,s=t.start,c=t.end;if(a){var f=n[u-1],l=r(f,u-1),h=e*(f.coordinate+e*l/2-c);o[u-1]=f=Me(Me({},f),{},{tickCoord:h>0?f.coordinate-h*e:f.coordinate});var p=wa(e,f.tickCoord,function(){return l},s,c);p&&(c=f.tickCoord-e*(l/2+i),o[u-1]=Me(Me({},f),{},{isShow:!0}))}for(var y=a?u-1:u,v=function(x){var w=o[x],O,m=function(){return O===void 0&&(O=r(w,x)),O};if(x===0){var b=e*(w.coordinate-e*m()/2-s);o[x]=w=Me(Me({},w),{},{tickCoord:b<0?w.coordinate-b*e:w.coordinate})}else o[x]=w=Me(Me({},w),{},{tickCoord:w.coordinate});var _=wa(e,w.tickCoord,m,s,c);_&&(s=w.tickCoord+e*(m()/2+i),o[x]=Me(Me({},w),{},{isShow:!0}))},d=0;d=2?Ie(i[1].coordinate-i[0].coordinate):1,g=qR(a,d,p);return s==="equidistantPreserveStart"?BR(d,g,v,i,o):(s==="preserveStart"||s==="preserveStartEnd"?h=HR(d,g,v,i,o,s==="preserveStartEnd"):h=WR(d,g,v,i,o),h.filter(function(x){return x.isShow}))}var KR=["viewBox"],GR=["viewBox"],VR=["ticks"];function zr(e){"@babel/helpers - typeof";return zr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},zr(e)}function gr(){return gr=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function XR(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function YR(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _b(e,t){for(var r=0;r0?s(this.props):s(p)),o<=0||u<=0||!y||!y.length?null:A.createElement(ae,{className:Q("recharts-cartesian-axis",c),ref:function(d){n.layerReference=d}},a&&this.renderAxisLine(),this.renderTicks(y,this.state.fontSize,this.state.letterSpacing),Te.renderCallByParent(this.props))}}],[{key:"renderTickItem",value:function(n,i,a){var o,u=Q(i.className,"recharts-cartesian-axis-tick-value");return A.isValidElement(n)?o=A.cloneElement(n,Oe(Oe({},i),{},{className:u})):Y(n)?o=n(Oe(Oe({},i),{},{className:u})):o=A.createElement(rr,gr({},i,{className:"recharts-cartesian-axis-tick-value"}),a),o}}])})(N.Component);Fh(rn,"displayName","CartesianAxis");Fh(rn,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var nD=["x1","y1","x2","y2","key"],iD=["offset"];function ar(e){"@babel/helpers - typeof";return ar=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ar(e)}function Sb(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $e(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function sD(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var cD=function(t){var r=t.fill;if(!r||r==="none")return null;var n=t.fillOpacity,i=t.x,a=t.y,o=t.width,u=t.height,s=t.ry;return A.createElement("rect",{x:i,y:a,ry:s,width:o,height:u,stroke:"none",fill:r,fillOpacity:n,className:"recharts-cartesian-grid-bg"})};function Lw(e,t){var r;if(A.isValidElement(e))r=A.cloneElement(e,t);else if(Y(e))r=e(t);else{var n=t.x1,i=t.y1,a=t.x2,o=t.y2,u=t.key,s=Ab(t,nD),c=X(s,!1);c.offset;var f=Ab(c,iD);r=A.createElement("line",Yt({},f,{x1:n,y1:i,x2:a,y2:o,fill:"none",key:u}))}return r}function lD(e){var t=e.x,r=e.width,n=e.horizontal,i=n===void 0?!0:n,a=e.horizontalPoints;if(!i||!a||!a.length)return null;var o=a.map(function(u,s){var c=$e($e({},e),{},{x1:t,y1:u,x2:t+r,y2:u,key:"line-".concat(s),index:s});return Lw(i,c)});return A.createElement("g",{className:"recharts-cartesian-grid-horizontal"},o)}function fD(e){var t=e.y,r=e.height,n=e.vertical,i=n===void 0?!0:n,a=e.verticalPoints;if(!i||!a||!a.length)return null;var o=a.map(function(u,s){var c=$e($e({},e),{},{x1:u,y1:t,x2:u,y2:t+r,key:"line-".concat(s),index:s});return Lw(i,c)});return A.createElement("g",{className:"recharts-cartesian-grid-vertical"},o)}function hD(e){var t=e.horizontalFill,r=e.fillOpacity,n=e.x,i=e.y,a=e.width,o=e.height,u=e.horizontalPoints,s=e.horizontal,c=s===void 0?!0:s;if(!c||!t||!t.length)return null;var f=u.map(function(h){return Math.round(h+i-i)}).sort(function(h,p){return h-p});i!==f[0]&&f.unshift(0);var l=f.map(function(h,p){var y=!f[p+1],v=y?i+o-h:f[p+1]-h;if(v<=0)return null;var d=p%t.length;return A.createElement("rect",{key:"react-".concat(p),y:h,x:n,height:v,width:a,stroke:"none",fill:t[d],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return A.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},l)}function dD(e){var t=e.vertical,r=t===void 0?!0:t,n=e.verticalFill,i=e.fillOpacity,a=e.x,o=e.y,u=e.width,s=e.height,c=e.verticalPoints;if(!r||!n||!n.length)return null;var f=c.map(function(h){return Math.round(h+a-a)}).sort(function(h,p){return h-p});a!==f[0]&&f.unshift(0);var l=f.map(function(h,p){var y=!f[p+1],v=y?a+u-h:f[p+1]-h;if(v<=0)return null;var d=p%n.length;return A.createElement("rect",{key:"react-".concat(p),x:h,y:o,width:v,height:s,stroke:"none",fill:n[d],fillOpacity:i,className:"recharts-cartesian-grid-bg"})});return A.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},l)}var pD=function(t,r){var n=t.xAxis,i=t.width,a=t.height,o=t.offset;return Bx(Bh($e($e($e({},rn.defaultProps),n),{},{ticks:vt(n,!0),viewBox:{x:0,y:0,width:i,height:a}})),o.left,o.left+o.width,r)},vD=function(t,r){var n=t.yAxis,i=t.width,a=t.height,o=t.offset;return Bx(Bh($e($e($e({},rn.defaultProps),n),{},{ticks:vt(n,!0),viewBox:{x:0,y:0,width:i,height:a}})),o.top,o.top+o.height,r)},dr={horizontal:!0,vertical:!0,stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[]};function _a(e){var t,r,n,i,a,o,u=Rh(),s=Dh(),c=rR(),f=$e($e({},e),{},{stroke:(t=e.stroke)!==null&&t!==void 0?t:dr.stroke,fill:(r=e.fill)!==null&&r!==void 0?r:dr.fill,horizontal:(n=e.horizontal)!==null&&n!==void 0?n:dr.horizontal,horizontalFill:(i=e.horizontalFill)!==null&&i!==void 0?i:dr.horizontalFill,vertical:(a=e.vertical)!==null&&a!==void 0?a:dr.vertical,verticalFill:(o=e.verticalFill)!==null&&o!==void 0?o:dr.verticalFill,x:L(e.x)?e.x:c.left,y:L(e.y)?e.y:c.top,width:L(e.width)?e.width:c.width,height:L(e.height)?e.height:c.height}),l=f.x,h=f.y,p=f.width,y=f.height,v=f.syncWithTicks,d=f.horizontalValues,g=f.verticalValues,x=QN(),w=eR();if(!L(p)||p<=0||!L(y)||y<=0||!L(l)||l!==+l||!L(h)||h!==+h)return null;var O=f.verticalCoordinatesGenerator||pD,m=f.horizontalCoordinatesGenerator||vD,b=f.horizontalPoints,_=f.verticalPoints;if((!b||!b.length)&&Y(m)){var S=d&&d.length,P=m({yAxis:w?$e($e({},w),{},{ticks:S?d:w.ticks}):void 0,width:u,height:s,offset:c},S?!0:v);nt(Array.isArray(P),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(ar(P),"]")),Array.isArray(P)&&(b=P)}if((!_||!_.length)&&Y(O)){var $=g&&g.length,j=O({xAxis:x?$e($e({},x),{},{ticks:$?g:x.ticks}):void 0,width:u,height:s,offset:c},$?!0:v);nt(Array.isArray(j),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(ar(j),"]")),Array.isArray(j)&&(_=j)}return A.createElement("g",{className:"recharts-cartesian-grid"},A.createElement(cD,{fill:f.fill,fillOpacity:f.fillOpacity,x:f.x,y:f.y,width:f.width,height:f.height,ry:f.ry}),A.createElement(lD,Yt({},f,{offset:c,horizontalPoints:b,xAxis:x,yAxis:w})),A.createElement(fD,Yt({},f,{offset:c,verticalPoints:_,xAxis:x,yAxis:w})),A.createElement(hD,Yt({},f,{horizontalPoints:b})),A.createElement(dD,Yt({},f,{verticalPoints:_})))}_a.displayName="CartesianGrid";function Ur(e){"@babel/helpers - typeof";return Ur=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ur(e)}function yD(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function mD(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function i2(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function a2(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o2(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r0?o:t&&t.length&&L(i)&&L(a)?t.slice(i,a+1):[]};function Jw(e){return e==="number"?[0,"auto"]:void 0}var Rf=function(t,r,n,i){var a=t.graphicalItems,o=t.tooltipAxis,u=fo(r,t);return n<0||!a||!a.length||n>=u.length?null:a.reduce(function(s,c){var f,l=(f=c.props.data)!==null&&f!==void 0?f:r;l&&t.dataStartIndex+t.dataEndIndex!==0&&t.dataEndIndex-t.dataStartIndex>=n&&(l=l.slice(t.dataStartIndex,t.dataEndIndex+1));var h;if(o.dataKey&&!o.allowDuplicatedCategory){var p=l===void 0?u:l;h=yl(p,o.dataKey,i)}else h=l&&l[n]||u[n];return h?[].concat(Vr(s),[Hx(c,h)]):s},[])},Cb=function(t,r,n,i){var a=i||{x:t.chartX,y:t.chartY},o=g2(a,n),u=t.orderedTooltipTicks,s=t.tooltipAxis,c=t.tooltipTicks,f=eM(o,u,c,s);if(f>=0&&c){var l=c[f]&&c[f].value,h=Rf(t,r,f,l),p=b2(n,u,f,a);return{activeTooltipIndex:f,activeLabel:l,activePayload:h,activeCoordinate:p}}return null},x2=function(t,r){var n=r.axes,i=r.graphicalItems,a=r.axisType,o=r.axisIdKey,u=r.stackGroups,s=r.dataStartIndex,c=r.dataEndIndex,f=t.layout,l=t.children,h=t.stackOffset,p=Lx(f,a);return n.reduce(function(y,v){var d,g=v.type.defaultProps!==void 0?k(k({},v.type.defaultProps),v.props):v.props,x=g.type,w=g.dataKey,O=g.allowDataOverflow,m=g.allowDuplicatedCategory,b=g.scale,_=g.ticks,S=g.includeHidden,P=g[o];if(y[P])return y;var $=fo(t.data,{graphicalItems:i.filter(function(U){var V,he=o in U.props?U.props[o]:(V=U.type.defaultProps)===null||V===void 0?void 0:V[o];return he===P}),dataStartIndex:s,dataEndIndex:c}),j=$.length,T,M,I;KD(g.domain,O,x)&&(T=Yl(g.domain,null,O),p&&(x==="number"||b!=="auto")&&(I=gn($,w,"category")));var C=Jw(x);if(!T||T.length===0){var R,D=(R=g.domain)!==null&&R!==void 0?R:C;if(w){if(T=gn($,w,x),x==="category"&&p){var B=VO(T);m&&B?(M=T,T=da(0,j)):m||(T=Dm(D,T,v).reduce(function(U,V){return U.indexOf(V)>=0?U:[].concat(Vr(U),[V])},[]))}else if(x==="category")m?T=T.filter(function(U){return U!==""&&!ee(U)}):T=Dm(D,T,v).reduce(function(U,V){return U.indexOf(V)>=0||V===""||ee(V)?U:[].concat(Vr(U),[V])},[]);else if(x==="number"){var F=aM($,i.filter(function(U){var V,he,me=o in U.props?U.props[o]:(V=U.type.defaultProps)===null||V===void 0?void 0:V[o],Be="hide"in U.props?U.props.hide:(he=U.type.defaultProps)===null||he===void 0?void 0:he.hide;return me===P&&(S||!Be)}),w,a,f);F&&(T=F)}p&&(x==="number"||b!=="auto")&&(I=gn($,w,"category"))}else p?T=da(0,j):u&&u[P]&&u[P].hasStack&&x==="number"?T=h==="expand"?[0,1]:Wx(u[P].stackGroups,s,c):T=qx($,i.filter(function(U){var V=o in U.props?U.props[o]:U.type.defaultProps[o],he="hide"in U.props?U.props.hide:U.type.defaultProps.hide;return V===P&&(S||!he)}),x,f,!0);if(x==="number")T=If(l,T,P,a,_),D&&(T=Yl(D,T,O));else if(x==="category"&&D){var H=D,G=T.every(function(U){return H.indexOf(U)>=0});G&&(T=H)}}return k(k({},y),{},K({},P,k(k({},g),{},{axisType:a,domain:T,categoricalDomain:I,duplicateDomain:M,originalDomain:(d=g.domain)!==null&&d!==void 0?d:C,isCategorical:p,layout:f})))},{})},w2=function(t,r){var n=r.graphicalItems,i=r.Axis,a=r.axisType,o=r.axisIdKey,u=r.stackGroups,s=r.dataStartIndex,c=r.dataEndIndex,f=t.layout,l=t.children,h=fo(t.data,{graphicalItems:n,dataStartIndex:s,dataEndIndex:c}),p=h.length,y=Lx(f,a),v=-1;return n.reduce(function(d,g){var x=g.type.defaultProps!==void 0?k(k({},g.type.defaultProps),g.props):g.props,w=x[o],O=Jw("number");if(!d[w]){v++;var m;return y?m=da(0,p):u&&u[w]&&u[w].hasStack?(m=Wx(u[w].stackGroups,s,c),m=If(l,m,w,a)):(m=Yl(O,qx(h,n.filter(function(b){var _,S,P=o in b.props?b.props[o]:(_=b.type.defaultProps)===null||_===void 0?void 0:_[o],$="hide"in b.props?b.props.hide:(S=b.type.defaultProps)===null||S===void 0?void 0:S.hide;return P===w&&!$}),"number",f),i.defaultProps.allowDataOverflow),m=If(l,m,w,a)),k(k({},d),{},K({},w,k(k({axisType:a},i.defaultProps),{},{hide:!0,orientation:He(y2,"".concat(a,".").concat(v%2),null),domain:m,originalDomain:O,isCategorical:y,layout:f})))}return d},{})},O2=function(t,r){var n=r.axisType,i=n===void 0?"xAxis":n,a=r.AxisComp,o=r.graphicalItems,u=r.stackGroups,s=r.dataStartIndex,c=r.dataEndIndex,f=t.children,l="".concat(i,"Id"),h=Ze(f,a),p={};return h&&h.length?p=x2(t,{axes:h,graphicalItems:o,axisType:i,axisIdKey:l,stackGroups:u,dataStartIndex:s,dataEndIndex:c}):o&&o.length&&(p=w2(t,{Axis:a,graphicalItems:o,axisType:i,axisIdKey:l,stackGroups:u,dataStartIndex:s,dataEndIndex:c})),p},_2=function(t){var r=Mt(t),n=vt(r,!1,!0);return{tooltipTicks:n,orderedTooltipTicks:ih(n,function(i){return i.coordinate}),tooltipAxis:r,tooltipAxisBandSize:ea(r,n)}},Ib=function(t){var r=t.children,n=t.defaultShowTooltip,i=ze(r,Dr),a=0,o=0;return t.data&&t.data.length!==0&&(o=t.data.length-1),i&&i.props&&(i.props.startIndex>=0&&(a=i.props.startIndex),i.props.endIndex>=0&&(o=i.props.endIndex)),{chartX:0,chartY:0,dataStartIndex:a,dataEndIndex:o,activeTooltipIndex:-1,isTooltipActive:!!n}},S2=function(t){return!t||!t.length?!1:t.some(function(r){var n=yt(r&&r.type);return n&&n.indexOf("Bar")>=0})},kb=function(t){return t==="horizontal"?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:t==="vertical"?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:t==="centric"?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},A2=function(t,r){var n=t.props,i=t.graphicalItems,a=t.xAxisMap,o=a===void 0?{}:a,u=t.yAxisMap,s=u===void 0?{}:u,c=n.width,f=n.height,l=n.children,h=n.margin||{},p=ze(l,Dr),y=ze(l,Zt),v=Object.keys(s).reduce(function(m,b){var _=s[b],S=_.orientation;return!_.mirror&&!_.hide?k(k({},m),{},K({},S,m[S]+_.width)):m},{left:h.left||0,right:h.right||0}),d=Object.keys(o).reduce(function(m,b){var _=o[b],S=_.orientation;return!_.mirror&&!_.hide?k(k({},m),{},K({},S,He(m,"".concat(S))+_.height)):m},{top:h.top||0,bottom:h.bottom||0}),g=k(k({},d),v),x=g.bottom;p&&(g.bottom+=p.props.height||Dr.defaultProps.height),y&&r&&(g=nM(g,i,n,r));var w=c-g.left-g.right,O=f-g.top-g.bottom;return k(k({brushBottom:x},g),{},{width:Math.max(w,0),height:Math.max(O,0)})},P2=function(t,r){if(r==="xAxis")return t[r].width;if(r==="yAxis")return t[r].height},Qw=function(t){var r=t.chartName,n=t.GraphicalChild,i=t.defaultTooltipEventType,a=i===void 0?"axis":i,o=t.validateTooltipEventTypes,u=o===void 0?["axis"]:o,s=t.axisComponents,c=t.legendContent,f=t.formatAxisMap,l=t.defaultProps,h=function(g,x){var w=x.graphicalItems,O=x.stackGroups,m=x.offset,b=x.updateId,_=x.dataStartIndex,S=x.dataEndIndex,P=g.barSize,$=g.layout,j=g.barGap,T=g.barCategoryGap,M=g.maxBarSize,I=kb($),C=I.numericAxisName,R=I.cateAxisName,D=S2(w),B=[];return w.forEach(function(F,H){var G=fo(g.data,{graphicalItems:[F],dataStartIndex:_,dataEndIndex:S}),U=F.type.defaultProps!==void 0?k(k({},F.type.defaultProps),F.props):F.props,V=U.dataKey,he=U.maxBarSize,me=U["".concat(C,"Id")],Be=U["".concat(R,"Id")],qt={},Re=s.reduce(function(Lt,Bt){var ho=x["".concat(Bt.axisType,"Map")],zh=U["".concat(Bt.axisType,"Id")];ho&&ho[zh]||Bt.axisType==="zAxis"||ir();var Uh=ho[zh];return k(k({},Lt),{},K(K({},Bt.axisType,Uh),"".concat(Bt.axisType,"Ticks"),vt(Uh)))},qt),z=Re[R],Z=Re["".concat(R,"Ticks")],J=O&&O[me]&&O[me].hasStack&&pM(F,O[me].stackGroups),q=yt(F.type).indexOf("Bar")>=0,ve=ea(z,Z),te=[],xe=D&&tM({barSize:P,stackGroups:O,totalSize:P2(Re,R)});if(q){var we,De,Tt=ee(he)?M:he,lr=(we=(De=ea(z,Z,!0))!==null&&De!==void 0?De:Tt)!==null&&we!==void 0?we:0;te=rM({barGap:j,barCategoryGap:T,bandSize:lr!==ve?lr:ve,sizeList:xe[Be],maxBarSize:Tt}),lr!==ve&&(te=te.map(function(Lt){return k(k({},Lt),{},{position:k(k({},Lt.position),{},{offset:Lt.position.offset-lr/2})})}))}var fi=F&&F.type&&F.type.getComposedData;fi&&B.push({props:k(k({},fi(k(k({},Re),{},{displayedData:G,props:g,dataKey:V,item:F,bandSize:ve,barPosition:te,offset:m,stackedData:J,layout:$,dataStartIndex:_,dataEndIndex:S}))),{},K(K(K({key:F.key||"item-".concat(H)},C,Re[C]),R,Re[R]),"animationId",b)),childIndex:o_(F,g.children),item:F})}),B},p=function(g,x){var w=g.props,O=g.dataStartIndex,m=g.dataEndIndex,b=g.updateId;if(!Jd({props:w}))return null;var _=w.children,S=w.layout,P=w.stackOffset,$=w.data,j=w.reverseStackOrder,T=kb(S),M=T.numericAxisName,I=T.cateAxisName,C=Ze(_,n),R=hM($,C,"".concat(M,"Id"),"".concat(I,"Id"),P,j),D=s.reduce(function(U,V){var he="".concat(V.axisType,"Map");return k(k({},U),{},K({},he,O2(w,k(k({},V),{},{graphicalItems:C,stackGroups:V.axisType===M&&R,dataStartIndex:O,dataEndIndex:m}))))},{}),B=A2(k(k({},D),{},{props:w,graphicalItems:C}),x==null?void 0:x.legendBBox);Object.keys(D).forEach(function(U){D[U]=f(w,D[U],B,U.replace("Map",""),r)});var F=D["".concat(I,"Map")],H=_2(F),G=h(w,k(k({},D),{},{dataStartIndex:O,dataEndIndex:m,updateId:b,graphicalItems:C,stackGroups:R,offset:B}));return k(k({formattedGraphicalItems:G,graphicalItems:C,offset:B,stackGroups:R},H),D)},y=(function(d){function g(x){var w,O,m;return a2(this,g),m=s2(this,g,[x]),K(m,"eventEmitterSymbol",Symbol("rechartsEventEmitter")),K(m,"accessibilityManager",new HD),K(m,"handleLegendBBoxUpdate",function(b){if(b){var _=m.state,S=_.dataStartIndex,P=_.dataEndIndex,$=_.updateId;m.setState(k({legendBBox:b},p({props:m.props,dataStartIndex:S,dataEndIndex:P,updateId:$},k(k({},m.state),{},{legendBBox:b}))))}}),K(m,"handleReceiveSyncEvent",function(b,_,S){if(m.props.syncId===b){if(S===m.eventEmitterSymbol&&typeof m.props.syncMethod!="function")return;m.applySyncEvent(_)}}),K(m,"handleBrushChange",function(b){var _=b.startIndex,S=b.endIndex;if(_!==m.state.dataStartIndex||S!==m.state.dataEndIndex){var P=m.state.updateId;m.setState(function(){return k({dataStartIndex:_,dataEndIndex:S},p({props:m.props,dataStartIndex:_,dataEndIndex:S,updateId:P},m.state))}),m.triggerSyncEvent({dataStartIndex:_,dataEndIndex:S})}}),K(m,"handleMouseEnter",function(b){var _=m.getMouseInfo(b);if(_){var S=k(k({},_),{},{isTooltipActive:!0});m.setState(S),m.triggerSyncEvent(S);var P=m.props.onMouseEnter;Y(P)&&P(S,b)}}),K(m,"triggeredAfterMouseMove",function(b){var _=m.getMouseInfo(b),S=_?k(k({},_),{},{isTooltipActive:!0}):{isTooltipActive:!1};m.setState(S),m.triggerSyncEvent(S);var P=m.props.onMouseMove;Y(P)&&P(S,b)}),K(m,"handleItemMouseEnter",function(b){m.setState(function(){return{isTooltipActive:!0,activeItem:b,activePayload:b.tooltipPayload,activeCoordinate:b.tooltipPosition||{x:b.cx,y:b.cy}}})}),K(m,"handleItemMouseLeave",function(){m.setState(function(){return{isTooltipActive:!1}})}),K(m,"handleMouseMove",function(b){b.persist(),m.throttleTriggeredAfterMouseMove(b)}),K(m,"handleMouseLeave",function(b){m.throttleTriggeredAfterMouseMove.cancel();var _={isTooltipActive:!1};m.setState(_),m.triggerSyncEvent(_);var S=m.props.onMouseLeave;Y(S)&&S(_,b)}),K(m,"handleOuterEvent",function(b){var _=a_(b),S=He(m.props,"".concat(_));if(_&&Y(S)){var P,$;/.*touch.*/i.test(_)?$=m.getMouseInfo(b.changedTouches[0]):$=m.getMouseInfo(b),S((P=$)!==null&&P!==void 0?P:{},b)}}),K(m,"handleClick",function(b){var _=m.getMouseInfo(b);if(_){var S=k(k({},_),{},{isTooltipActive:!0});m.setState(S),m.triggerSyncEvent(S);var P=m.props.onClick;Y(P)&&P(S,b)}}),K(m,"handleMouseDown",function(b){var _=m.props.onMouseDown;if(Y(_)){var S=m.getMouseInfo(b);_(S,b)}}),K(m,"handleMouseUp",function(b){var _=m.props.onMouseUp;if(Y(_)){var S=m.getMouseInfo(b);_(S,b)}}),K(m,"handleTouchMove",function(b){b.changedTouches!=null&&b.changedTouches.length>0&&m.throttleTriggeredAfterMouseMove(b.changedTouches[0])}),K(m,"handleTouchStart",function(b){b.changedTouches!=null&&b.changedTouches.length>0&&m.handleMouseDown(b.changedTouches[0])}),K(m,"handleTouchEnd",function(b){b.changedTouches!=null&&b.changedTouches.length>0&&m.handleMouseUp(b.changedTouches[0])}),K(m,"handleDoubleClick",function(b){var _=m.props.onDoubleClick;if(Y(_)){var S=m.getMouseInfo(b);_(S,b)}}),K(m,"handleContextMenu",function(b){var _=m.props.onContextMenu;if(Y(_)){var S=m.getMouseInfo(b);_(S,b)}}),K(m,"triggerSyncEvent",function(b){m.props.syncId!==void 0&&dl.emit(pl,m.props.syncId,b,m.eventEmitterSymbol)}),K(m,"applySyncEvent",function(b){var _=m.props,S=_.layout,P=_.syncMethod,$=m.state.updateId,j=b.dataStartIndex,T=b.dataEndIndex;if(b.dataStartIndex!==void 0||b.dataEndIndex!==void 0)m.setState(k({dataStartIndex:j,dataEndIndex:T},p({props:m.props,dataStartIndex:j,dataEndIndex:T,updateId:$},m.state)));else if(b.activeTooltipIndex!==void 0){var M=b.chartX,I=b.chartY,C=b.activeTooltipIndex,R=m.state,D=R.offset,B=R.tooltipTicks;if(!D)return;if(typeof P=="function")C=P(B,b);else if(P==="value"){C=-1;for(var F=0;F=0){var J,q;if(M.dataKey&&!M.allowDuplicatedCategory){var ve=typeof M.dataKey=="function"?Z:"payload.".concat(M.dataKey.toString());J=yl(F,ve,C),q=H&&G&&yl(G,ve,C)}else J=F==null?void 0:F[I],q=H&&G&&G[I];if(Be||me){var te=b.props.activeIndex!==void 0?b.props.activeIndex:I;return[N.cloneElement(b,k(k(k({},P.props),Re),{},{activeIndex:te})),null,null]}if(!ee(J))return[z].concat(Vr(m.renderActivePoints({item:P,activePoint:J,basePoint:q,childIndex:I,isRange:H})))}else{var xe,we=(xe=m.getItemByXY(m.state.activeCoordinate))!==null&&xe!==void 0?xe:{graphicalItem:z},De=we.graphicalItem,Tt=De.item,lr=Tt===void 0?b:Tt,fi=De.childIndex,Lt=k(k(k({},P.props),Re),{},{activeIndex:fi});return[N.cloneElement(lr,Lt),null,null]}return H?[z,null,null]:[z,null]}),K(m,"renderCustomized",function(b,_,S){return N.cloneElement(b,k(k({key:"recharts-customized-".concat(S)},m.props),m.state))}),K(m,"renderMap",{CartesianGrid:{handler:Ai,once:!0},ReferenceArea:{handler:m.renderReferenceElement},ReferenceLine:{handler:Ai},ReferenceDot:{handler:m.renderReferenceElement},XAxis:{handler:Ai},YAxis:{handler:Ai},Brush:{handler:m.renderBrush,once:!0},Bar:{handler:m.renderGraphicChild},Line:{handler:m.renderGraphicChild},Area:{handler:m.renderGraphicChild},Radar:{handler:m.renderGraphicChild},RadialBar:{handler:m.renderGraphicChild},Scatter:{handler:m.renderGraphicChild},Pie:{handler:m.renderGraphicChild},Funnel:{handler:m.renderGraphicChild},Tooltip:{handler:m.renderCursor,once:!0},PolarGrid:{handler:m.renderPolarGrid,once:!0},PolarAngleAxis:{handler:m.renderPolarAxis},PolarRadiusAxis:{handler:m.renderPolarAxis},Customized:{handler:m.renderCustomized}}),m.clipPathId="".concat((w=x.id)!==null&&w!==void 0?w:ai("recharts"),"-clip"),m.throttleTriggeredAfterMouseMove=R0(m.triggeredAfterMouseMove,(O=x.throttleDelay)!==null&&O!==void 0?O:1e3/60),m.state={},m}return f2(g,d),u2(g,[{key:"componentDidMount",value:function(){var w,O;this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:(w=this.props.margin.left)!==null&&w!==void 0?w:0,top:(O=this.props.margin.top)!==null&&O!==void 0?O:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.triggeredAfterMouseMove,layout:this.props.layout}),this.displayDefaultTooltip()}},{key:"displayDefaultTooltip",value:function(){var w=this.props,O=w.children,m=w.data,b=w.height,_=w.layout,S=ze(O,Ue);if(S){var P=S.props.defaultIndex;if(!(typeof P!="number"||P<0||P>this.state.tooltipTicks.length-1)){var $=this.state.tooltipTicks[P]&&this.state.tooltipTicks[P].value,j=Rf(this.state,m,P,$),T=this.state.tooltipTicks[P].coordinate,M=(this.state.offset.top+b)/2,I=_==="horizontal",C=I?{x:T,y:M}:{y:T,x:M},R=this.state.formattedGraphicalItems.find(function(B){var F=B.item;return F.type.name==="Scatter"});R&&(C=k(k({},C),R.props.points[P].tooltipPosition),j=R.props.points[P].tooltipPayload);var D={activeTooltipIndex:P,isTooltipActive:!0,activeLabel:$,activePayload:j,activeCoordinate:C};this.setState(D),this.renderCursor(S),this.accessibilityManager.setIndex(P)}}}},{key:"getSnapshotBeforeUpdate",value:function(w,O){if(!this.props.accessibilityLayer)return null;if(this.state.tooltipTicks!==O.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==w.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==w.margin){var m,b;this.accessibilityManager.setDetails({offset:{left:(m=this.props.margin.left)!==null&&m!==void 0?m:0,top:(b=this.props.margin.top)!==null&&b!==void 0?b:0}})}return null}},{key:"componentDidUpdate",value:function(w){gl([ze(w.children,Ue)],[ze(this.props.children,Ue)])||this.displayDefaultTooltip()}},{key:"componentWillUnmount",value:function(){this.removeListener(),this.throttleTriggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var w=ze(this.props.children,Ue);if(w&&typeof w.props.shared=="boolean"){var O=w.props.shared?"axis":"item";return u.indexOf(O)>=0?O:a}return a}},{key:"getMouseInfo",value:function(w){if(!this.container)return null;var O=this.container,m=O.getBoundingClientRect(),b=KA(m),_={chartX:Math.round(w.pageX-b.left),chartY:Math.round(w.pageY-b.top)},S=m.width/O.offsetWidth||1,P=this.inRange(_.chartX,_.chartY,S);if(!P)return null;var $=this.state,j=$.xAxisMap,T=$.yAxisMap,M=this.getTooltipEventType(),I=Cb(this.state,this.props.data,this.props.layout,P);if(M!=="axis"&&j&&T){var C=Mt(j).scale,R=Mt(T).scale,D=C&&C.invert?C.invert(_.chartX):null,B=R&&R.invert?R.invert(_.chartY):null;return k(k({},_),{},{xValue:D,yValue:B},I)}return I?k(k({},_),I):null}},{key:"inRange",value:function(w,O){var m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,b=this.props.layout,_=w/m,S=O/m;if(b==="horizontal"||b==="vertical"){var P=this.state.offset,$=_>=P.left&&_<=P.left+P.width&&S>=P.top&&S<=P.top+P.height;return $?{x:_,y:S}:null}var j=this.state,T=j.angleAxisMap,M=j.radiusAxisMap;if(T&&M){var I=Mt(T);return Bm({x:_,y:S},I)}return null}},{key:"parseEventsOfWrapper",value:function(){var w=this.props.children,O=this.getTooltipEventType(),m=ze(w,Ue),b={};m&&O==="axis"&&(m.props.trigger==="click"?b={onClick:this.handleClick}:b={onMouseEnter:this.handleMouseEnter,onDoubleClick:this.handleDoubleClick,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onContextMenu:this.handleContextMenu});var _=Ei(this.props,this.handleOuterEvent);return k(k({},_),b)}},{key:"addListener",value:function(){dl.on(pl,this.handleReceiveSyncEvent)}},{key:"removeListener",value:function(){dl.removeListener(pl,this.handleReceiveSyncEvent)}},{key:"filterFormatItem",value:function(w,O,m){for(var b=this.state.formattedGraphicalItems,_=0,S=b.length;_{const t=N.useMemo(()=>Array.from(e.values()).filter(i=>i.telemetry).map(i=>({name:i.name.length>18?i.name.slice(0,16)+"..":i.name,fullName:i.name,killsPerHour:parseInt(i.telemetry.kills_per_hour)||0,totalKills:i.telemetry.kills||0})).sort((i,a)=>a.killsPerHour-i.killsPerHour).slice(0,30),[e]),r=N.useMemo(()=>Array.from(e.values()).filter(i=>{var a;return(a=i.combat)==null?void 0:a.session}).map(i=>({name:i.name.length>18?i.name.slice(0,16)+"..":i.name,fullName:i.name,damage:i.combat.session.total_damage_given})).sort((i,a)=>a.damage-i.damage).slice(0,30),[e]),n=N.useMemo(()=>{var a;const i={};for(const o of e.values()){const u=(a=o.combat)==null?void 0:a.session;if(u!=null&&u.monsters){for(const s of Object.values(u.monsters))if(s.offense)for(const c of Object.values(s.offense))for(const[f,l]of Object.entries(c))f==="None"||f==="Unknown"||(i[f]=(i[f]||0)+(l.damage||0))}}return Object.entries(i).map(([o,u])=>({name:o,value:u})).filter(o=>o.value>0).sort((o,u)=>u.value-o.value)},[e]);return E.jsxs("div",{className:"combat-tab",children:[E.jsxs("div",{className:"chart-section",children:[E.jsx("h3",{className:"chart-title",children:"Kills per Hour"}),E.jsx(Ti,{width:"100%",height:Math.max(200,t.length*28),children:E.jsxs(Df,{data:t,layout:"vertical",margin:{left:10,right:20,top:5,bottom:5},children:[E.jsx(_a,{strokeDasharray:"3 3",stroke:"#333"}),E.jsx(Wr,{type:"number",stroke:"#888",fontSize:11}),E.jsx(Kr,{type:"category",dataKey:"name",width:130,stroke:"#888",fontSize:11}),E.jsx(Ue,{contentStyle:{background:"#1a1a1a",border:"1px solid #444",fontSize:12},formatter:i=>[i.toLocaleString(),"Kills/hr"],labelFormatter:(i,a)=>{var o,u;return((u=(o=a==null?void 0:a[0])==null?void 0:o.payload)==null?void 0:u.fullName)||i}}),E.jsx(Ot,{dataKey:"killsPerHour",fill:"#44cc44",radius:[0,3,3,0]})]})})]}),r.length>0&&E.jsxs("div",{className:"chart-section",children:[E.jsx("h3",{className:"chart-title",children:"Total Damage (Session)"}),E.jsx(Ti,{width:"100%",height:Math.max(200,r.length*28),children:E.jsxs(Df,{data:r,layout:"vertical",margin:{left:10,right:20,top:5,bottom:5},children:[E.jsx(_a,{strokeDasharray:"3 3",stroke:"#333"}),E.jsx(Wr,{type:"number",stroke:"#888",fontSize:11}),E.jsx(Kr,{type:"category",dataKey:"name",width:130,stroke:"#888",fontSize:11}),E.jsx(Ue,{contentStyle:{background:"#1a1a1a",border:"1px solid #444",fontSize:12},formatter:i=>[i.toLocaleString(),"Damage"],labelFormatter:(i,a)=>{var o,u;return((u=(o=a==null?void 0:a[0])==null?void 0:o.payload)==null?void 0:u.fullName)||i}}),E.jsx(Ot,{dataKey:"damage",fill:"#ff6644",radius:[0,3,3,0]})]})})]}),n.length>0&&E.jsxs("div",{className:"chart-section",children:[E.jsx("h3",{className:"chart-title",children:"Damage by Element (All Characters)"}),E.jsx(Ti,{width:"100%",height:300,children:E.jsxs(T2,{children:[E.jsx(Pt,{data:n,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",outerRadius:100,label:({name:i,percent:a})=>`${i} ${(a*100).toFixed(0)}%`,labelLine:!0,fontSize:12,children:n.map(i=>E.jsx(Ba,{fill:j2[i.name]||"#888"},i.name))}),E.jsx(Ue,{contentStyle:{background:"#1a1a1a",border:"1px solid #444",fontSize:12},formatter:i=>i.toLocaleString()}),E.jsx(Zt,{wrapperStyle:{fontSize:12,color:"#aaa"}})]})})]})]})},M2=({characters:e,totalRares:t,totalKills:r,recentRares:n})=>{const i=N.useMemo(()=>Array.from(e.values()).filter(o=>o.telemetry&&(o.telemetry.total_rares??0)>0).map(o=>({name:o.name.length>18?o.name.slice(0,16)+"..":o.name,fullName:o.name,rares:o.telemetry.total_rares??0})).sort((o,u)=>u.rares-o.rares),[e]),a=t>0?Math.round(r/t):0;return E.jsxs("div",{className:"rares-tab",children:[E.jsxs("div",{className:"rares-summary",children:[E.jsxs("div",{className:"rare-stat-card",children:[E.jsx("span",{className:"rare-stat-value",children:t}),E.jsx("span",{className:"rare-stat-label",children:"Total Rares Found"})]}),E.jsxs("div",{className:"rare-stat-card",children:[E.jsx("span",{className:"rare-stat-value",children:r.toLocaleString()}),E.jsx("span",{className:"rare-stat-label",children:"Total Kills"})]}),E.jsxs("div",{className:"rare-stat-card",children:[E.jsx("span",{className:"rare-stat-value",children:a>0?`1 in ${a.toLocaleString()}`:"--"}),E.jsx("span",{className:"rare-stat-label",children:"Drop Rate"})]})]}),n.length>0&&E.jsxs("div",{className:"chart-section",children:[E.jsx("h3",{className:"chart-title",children:"Recent Rare Drops (This Session)"}),E.jsx("div",{className:"rare-timeline",children:n.map((o,u)=>E.jsxs("div",{className:"rare-event",children:[E.jsx("span",{className:"rare-time",children:new Date(o.timestamp).toLocaleTimeString()}),E.jsx("span",{className:"rare-char",children:o.character_name}),E.jsx("span",{className:"rare-name",children:o.name})]},u))})]}),i.length>0&&E.jsxs("div",{className:"chart-section",children:[E.jsx("h3",{className:"chart-title",children:"Rares per Character (Lifetime)"}),E.jsx(Ti,{width:"100%",height:Math.max(200,i.length*28),children:E.jsxs(Df,{data:i,layout:"vertical",margin:{left:10,right:20,top:5,bottom:5},children:[E.jsx(_a,{strokeDasharray:"3 3",stroke:"#333"}),E.jsx(Wr,{type:"number",stroke:"#888",fontSize:11}),E.jsx(Kr,{type:"category",dataKey:"name",width:130,stroke:"#888",fontSize:11}),E.jsx(Ue,{contentStyle:{background:"#1a1a1a",border:"1px solid #444",fontSize:12},formatter:o=>[o,"Rares"],labelFormatter:(o,u)=>{var s,c;return((c=(s=u==null?void 0:u[0])==null?void 0:s.payload)==null?void 0:c.fullName)||o}}),E.jsx(Ot,{dataKey:"rares",fill:"#ffcc00",radius:[0,3,3,0]})]})})]})]})},pr={west:-102.1,east:102.1,north:102.1,south:-102.1},Ta=800;function $2(e,t){const r=(e-pr.west)/(pr.east-pr.west)*Ta,n=(pr.north-t)/(pr.north-pr.south)*Ta;return{x:r,y:n}}const C2=({characters:e})=>{const t=N.useRef(null),[r,n]=N.useState(null),i=N.useMemo(()=>Array.from(e.values()).filter(o=>o.telemetry&&o.telemetry.ew!==void 0).map(o=>{const u=o.telemetry,{x:s,y:c}=$2(u.ew,u.ns),f=(u.vt_state||"").toLowerCase()==="combat"||(u.vt_state||"").toLowerCase()==="hunt";return{name:o.name,x:s,y:c,isHunting:f,ns:u.ns,ew:u.ew}}),[e]),a=N.useCallback(o=>n(o),[]);return E.jsxs("div",{className:"map-tab",children:[E.jsxs("div",{className:"map-container",ref:t,children:[E.jsx("img",{src:"/dereth_highres.png",alt:"Dereth Map",className:"map-image",draggable:!1}),E.jsx("svg",{className:"map-overlay",viewBox:`0 0 ${Ta} ${Ta}`,children:i.map(o=>{var u,s;return E.jsxs("g",{children:[E.jsx("circle",{cx:o.x,cy:o.y,r:r===o.name?6:4,fill:o.isHunting?"#44cc44":"#ffaa00",stroke:"#000",strokeWidth:1,opacity:.9,onMouseEnter:()=>a(o.name),onMouseLeave:()=>a(null),style:{cursor:"pointer"}}),r===o.name&&E.jsxs("text",{x:o.x+8,y:o.y+4,fill:"#fff",fontSize:11,stroke:"#000",strokeWidth:.3,paintOrder:"stroke",children:[o.name," (",(u=o.ns)==null?void 0:u.toFixed(1),"N, ",(s=o.ew)==null?void 0:s.toFixed(1),"E)"]})]},o.name)})})]}),E.jsxs("div",{className:"map-legend",children:[E.jsxs("span",{children:[E.jsx("span",{className:"legend-dot hunting"})," Hunting/Combat"]}),E.jsxs("span",{children:[E.jsx("span",{className:"legend-dot other"})," Other state"]}),E.jsxs("span",{className:"map-count",children:[i.length," characters on map"]})]})]})},I2=()=>{const[e,t]=N.useState(""),[r,n]=N.useState([]),[i,a]=N.useState(0),[o,u]=N.useState(!1),s=N.useRef(0),c=N.useCallback(async l=>{if(l.length<2){n([]),a(0);return}u(!0);try{const h=await eO(`/search/items?q=${encodeURIComponent(l)}&limit=100`);n(h.results??[]),a(h.total??0)}catch{n([])}u(!1)},[]),f=N.useCallback(l=>{const h=l.target.value;t(h),clearTimeout(s.current),s.current=window.setTimeout(()=>c(h),400)},[c]);return E.jsxs("div",{className:"inventory-tab",children:[E.jsxs("div",{className:"search-bar",children:[E.jsx("input",{type:"text",value:e,onChange:f,placeholder:"Search items across all characters...",className:"search-input"}),o&&E.jsx("span",{className:"search-spinner",children:"Searching..."})]}),i>0&&E.jsxs("div",{className:"search-count",children:[i.toLocaleString()," results"]}),E.jsxs("div",{className:"search-results",children:[r.length===0&&e.length>=2&&!o&&E.jsx("div",{className:"search-empty",children:"No items found"}),E.jsxs("table",{className:"results-table",children:[E.jsx("thead",{children:E.jsxs("tr",{children:[E.jsx("th",{children:"Character"}),E.jsx("th",{children:"Item"}),E.jsx("th",{children:"Type"}),E.jsx("th",{children:"Material"}),E.jsx("th",{children:"Set"}),E.jsx("th",{children:"Work"})]})}),E.jsx("tbody",{children:r.map((l,h)=>E.jsxs("tr",{children:[E.jsx("td",{children:l.character_name}),E.jsx("td",{className:"item-name",children:l.item_name}),E.jsx("td",{children:l.type||""}),E.jsx("td",{children:l.material||""}),E.jsx("td",{children:l.set_name||""}),E.jsx("td",{children:l.workmanship||""})]},h))})]})]})]})};function R2({data:e,onViewToggle:t}){const r=[{id:"combat",label:"Combat",content:E.jsx(E2,{characters:e.characters})},{id:"rares",label:"Rares",content:E.jsx(M2,{characters:e.characters,totalRares:e.totalRares,totalKills:e.totalKills,recentRares:e.recentRares})},{id:"map",label:"Map",content:E.jsx(C2,{characters:e.characters})},{id:"inventory",label:"Inventory",content:E.jsx(I2,{})}];return E.jsxs(tO,{children:[E.jsx("div",{style:{display:"flex",justifyContent:"flex-start",marginBottom:8},children:E.jsx("button",{onClick:t,className:"tab-btn",children:"Map View"})}),E.jsx(rO,{activeChars:e.characters.size,totalKills:e.totalKills,totalRares:e.totalRares,serverHealth:e.serverHealth}),E.jsx(iO,{characters:e.characters}),E.jsx(aO,{tabs:r})]})}export{R2 as default}; diff --git a/static/v2/assets/InventoryWindow-i56DdW3Q.js b/static/v2/assets/InventoryWindow-i56DdW3Q.js new file mode 100644 index 00000000..44602713 --- /dev/null +++ b/static/v2/assets/InventoryWindow-i56DdW3Q.js @@ -0,0 +1 @@ +import{r as g,a as F,j as n,D as P}from"./index-DzGubmvT.js";import"./react-DlyoauG8.js";function X(e){var l,d;if(!e)return e;const t=c=>c!=null&&c!==-1&&c!==-1?c:void 0,s=e.IntValues||{};return{item_id:e.item_id??e.Id??0,name:e.name??e.Name??((l=e.StringValues)==null?void 0:l["1"])??"Unknown",icon:e.icon??e.Icon??0,object_class:e.object_class??e.ObjectClass??0,current_wielded_location:e.current_wielded_location??t(e.CurrentWieldedLocation)??t(Number(s[10]))??0,container_id:e.container_id??e.ContainerId??0,items_capacity:e.items_capacity??t(e.ItemsCapacity)??t(Number(s[6]))??((d=e.enhanced_properties)==null?void 0:d.ItemSlots_Decal)??void 0,value:e.value??t(e.Value)??t(Number(s[19]))??0,burden:e.burden??t(e.Burden)??t(Number(s[5]))??0,armor_level:e.armor_level??t(e.ArmorLevel),max_damage:e.max_damage??t(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??t(e.Tinks),workmanship:e.workmanship??t(e.Workmanship),equip_skill:e.equip_skill??e.equip_skill_name??e.EquipSkill??void 0,wield_level:e.wield_level??t(e.WieldLevel),skill_level:e.skill_level??t(e.SkillLevel),lore_requirement:e.lore_requirement??t(e.LoreRequirement),attack_bonus:e.attack_bonus??t(e.AttackBonus),melee_defense_bonus:e.melee_defense_bonus??t(e.MeleeDefenseBonus),magic_defense_bonus:e.magic_defense_bonus??t(e.MagicDBonus),damage_bonus:e.damage_bonus??t(e.DamageBonus),damage_rating:e.damage_rating??t(e.DamRating),crit_rating:e.crit_rating??t(e.CritRating),heal_boost_rating:e.heal_boost_rating??t(e.HealBoostRating),current_mana:e.current_mana??t(Number(s[218103815]))??void 0,max_mana:e.max_mana??t(Number(s[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??t(Number(s[218103849]))??void 0,icon_underlay_id:e.icon_underlay_id??t(Number(s[218103850]))??void 0,_raw:e}}function E(e){return!e||e<=0?"06000133":(e+100663296).toString(16).toUpperCase().padStart(8,"0")}const I={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}},M={},G=[32768,67108864,65536,131072,262144,524288],J=[1,512,2048,1024,4096,8192,16384,32,256],Z=[2,4,134217728,268435456,536870912,1073741824],ee=[2097152,1048576,4194304,16777216,33554432,8388608];(()=>{const e=new Set;Object.entries(I).forEach(([t,s])=>{const l=`${s.row}-${s.col}`,d=parseInt(t);e.has(l)||(e.add(l),G.includes(d)?M[l]="#3a2555":J.includes(d)?M[l]="#1e2e55":Z.includes(d)?M[l]="#1e3e3e":ee.includes(d)?M[l]="#142040":M[l]="#2a2a2a")})})();const $="#af7a30";function z({item:e,size:t=36}){const s={position:"absolute",top:0,left:0,width:t,height:t,border:"none",background:"transparent",imageRendering:"pixelated"},l=e.icon_underlay_id&&e.icon_underlay_id>100?`/icons/${E(e.icon_underlay_id)}.png`:null,d=e.icon_overlay_id&&e.icon_overlay_id>100?`/icons/${E(e.icon_overlay_id)}.png`:null;return n.jsxs("div",{style:{width:t,height:t,position:"relative"},children:[l&&n.jsx("img",{src:l,alt:"",style:{...s,zIndex:1},onError:c=>{c.target.style.display="none"}}),n.jsx("img",{src:`/icons/${E(e.icon)}.png`,alt:e.name,style:{...s,zIndex:2},onError:c=>{c.target.src="/icons/06000133.png"}}),d&&n.jsx("img",{src:d,alt:"",style:{...s,zIndex:3},onError:c=>{c.target.style.display="none"}})]})}function ne({item:e,x:t,y:s}){var b,f;const l=p=>p!=null&&p!==-1&&p!==-1,d=p=>p.toLocaleString(),c=p=>`${((p-1)*100).toFixed(1)}%`;return n.jsxs("div",{style:{position:"fixed",left:t+14,top:s+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]}),l(e.armor_level)&&n.jsxs("div",{style:{color:"#88ff88"},children:["Armor Level: ",e.armor_level]}),l(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}`:""]}),l(e.attack_bonus)&&e.attack_bonus!==1&&n.jsxs("div",{style:{color:"#88ff88"},children:["Attack: +",c(e.attack_bonus)]}),l(e.melee_defense_bonus)&&e.melee_defense_bonus!==1&&n.jsxs("div",{style:{color:"#88ff88"},children:["Melee Def: +",c(e.melee_defense_bonus)]}),l(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]}),l(e.wield_level)&&n.jsxs("div",{style:{color:"#ffaa00"},children:["Wield Level: ",e.wield_level]}),l(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]}),l(e.tinks)&&n.jsxs("div",{style:{color:"#88ff88"},children:["Tinks: ",e.tinks]}),l(e.damage_rating)&&n.jsxs("div",{children:["Damage Rating: ",e.damage_rating]}),l(e.crit_rating)&&n.jsxs("div",{children:["Crit Rating: ",e.crit_rating]}),l(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]}),l(e.current_mana)&&l(e.max_mana)&&n.jsxs("div",{style:{color:"#98d7ff"},children:["Mana: ",e.current_mana," / ",e.max_mana]}),((f=(b=e.spells)==null?void 0:b.spells)==null?void 0:f.length)>0&&n.jsxs("div",{style:{color:"#4a90e2",marginTop:4,fontSize:12},children:["Spells: ",e.spells.spells.map(p=>p.name).join(", ")]})]})}function V({iconSrc:e,isActive:t,fillPct:s,label:l,onClick:d}){const c=s>90?"#b7432c":s>70?"#d8a431":"#00ff00";return n.jsxs("div",{onClick:d,title:l,style:{display:"flex",alignItems:"flex-start",gap:2,cursor:"pointer",flexShrink:0,marginTop:3,position:"relative"},children:[t&&n.jsx("span",{style:{position:"absolute",left:-11,top:8,color:$,fontSize:10},children:"▶"}),n.jsx("div",{style:{width:30,height:30,border:t?"1px solid #00ff00":"1px solid #333",boxShadow:t?"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:b=>{b.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(s)}% full`,children:n.jsx("div",{style:{position:"absolute",bottom:0,left:0,right:0,height:`${s}%`,background:c,minHeight:s>0?2:0}})})]})}const ae=({id:e,charName:t,zIndex:s})=>{var T,O,U;const[l,d]=g.useState([]),[c,b]=g.useState(!0),[f,p]=g.useState(null),[L,D]=g.useState(null),[m,Y]=g.useState(null),[te,ie]=g.useState(null);g.useEffect(()=>{b(!0),Promise.all([F(`/inventory/${encodeURIComponent(t)}?limit=1000`).catch(()=>({items:[]})),F(`/character-stats/${encodeURIComponent(t)}`).catch(()=>null)]).then(([o,i])=>{const a=o.items??[];d(a.map(X)),Y(i)}).finally(()=>b(!1))},[t]);const h=g.useCallback((o,i)=>{D(o&&i?{item:o,x:i.clientX,y:i.clientY}:null)},[]),K=g.useMemo(()=>{const o=new Set,i=[];return Object.entries(I).forEach(([a,u])=>{const _=`${u.row}-${u.col}`;o.has(_)||(o.add(_),i.push({key:_,...u,mask:parseInt(a)}))}),i},[]),{equippedMap:A,containers:w,packItems:B}=g.useMemo(()=>{const o=new Map,i=[],a=new Set,u=new Map;l.forEach(r=>{r.object_class===10&&(i.push(r),a.add(r.item_id))}),i.sort((r,v)=>(r.item_id>>>0)-(v.item_id>>>0));let _=null;return l.forEach(r=>{r.current_wielded_location>0&&r.container_id&&!a.has(r.container_id)&&(_=r.container_id)}),l.forEach(r=>{if(a.has(r.item_id))return;const v=r.current_wielded_location;if(v>0)if(r.object_class===2)Object.entries(I).forEach(([S,x])=>{if((v&parseInt(S))===parseInt(S)){const y=`${x.row}-${x.col}`;o.has(y)||o.set(y,r)}});else{let S=!1;if(I[v]){const x=I[v],y=`${x.row}-${x.col}`;o.has(y)||(o.set(y,r),S=!0)}if(!S){for(const[x,y]of Object.entries(I))if((v&parseInt(x))===parseInt(x)){const N=`${y.row}-${y.col}`;if(!o.has(N)){o.set(N,r),S=!0;break}}}}else{let k=r.container_id||0;_&&k===_&&(k=0),u.has(k)||u.set(k,[]),u.get(k).push(r)}}),{equippedMap:o,containers:i,packItems:u}},[l]);let j=B.get(0)??[],q=0;if(j.length===0){let o=0;for(const[i,a]of B.entries())!w.some(u=>u.item_id===i)&&a.length>o&&(o=a.length,q=i);j=B.get(q)??[]}const W=f!==null?B.get(f)??[]:j,H=(m==null?void 0:m.burden_units)??((T=m==null?void 0:m.stats_data)==null?void 0:T.burden_units)??0,C=(m==null?void 0:m.encumbrance_capacity)??((O=m==null?void 0:m.stats_data)==null?void 0:O.encumbrance_capacity)??0,R=C>0?Math.min(200,H/C*100):0,Q=R>150?"#b7432c":R>100?"#d8a431":"#2e8b57";return c?n.jsx(P,{id:e,title:`Inventory: ${t}`,zIndex:s,width:572,height:720,children:n.jsx("div",{style:{padding:20,color:"#666",fontStyle:"italic"},children:"Loading inventory..."})}):n.jsxs(P,{id:e,title:`Inventory: ${t}`,zIndex:s,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:K.map(o=>{const i=A.get(o.key),a=M[o.key]??"#2a2a2a";return n.jsx("div",{style:{position:"absolute",left:(o.col-1)*44+4,top:(o.row-1)*44+4,width:36,height:36,background:i?"#5a5a62":a,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:u=>i&&h(i,u),onMouseMove:u=>i&&h(i,u),onMouseLeave:()=>h(null),children:i?n.jsx(z,{item:i,size:32}):n.jsx("img",{src:"/icons/06000133.png",alt:"",style:{width:28,height:28,opacity:.15,filter:"grayscale(100%)",imageRendering:"pixelated"}})},o.key)})}),n.jsxs("div",{style:{padding:"3px 6px",fontSize:11,color:"#ccc",background:"#111",borderBottom:`1px solid ${$}`},children:["Contents of ",f!==null?((U=w.find(o=>o.item_id===f))==null?void 0:U.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:[W.map((o,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:a=>h(o,a),onMouseMove:a=>h(o,a),onMouseLeave:()=>h(null),children:n.jsx(z,{item:o,size:32})},o.item_id??i)),Array.from({length:Math.max(0,24-W.length)}).map((o,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:C>0?`${Math.floor(R)}%`:"Burden"}),n.jsx("div",{style:{width:14,height:40,background:"#111",border:"1px solid #555",position:"relative",overflow:"hidden",marginBottom:6,flexShrink:0},title:C>0?`${H.toLocaleString()} / ${C.toLocaleString()}`:`Burden: ${l.reduce((o,i)=>o+(i.burden??0),0).toLocaleString()}`,children:n.jsx("div",{style:{position:"absolute",bottom:0,left:0,right:0,height:`${R/2}%`,background:Q,transition:"height 0.3s"}})}),n.jsx(V,{iconSrc:"/icons/0600127E.png",isActive:f===null,fillPct:j.length>0?Math.min(100,j.length/102*100):0,label:`Backpack (${j.length}/102)`,onClick:()=>p(null)}),w.map(o=>{const i=o.item_id,a=l.filter(r=>r.container_id===i&&r.item_id!==i).length,u=o.items_capacity||24,_=u>0?Math.min(100,a/u*100):0;return n.jsx(V,{iconSrc:`/icons/${E(o.icon)}.png`,isActive:f===i,fillPct:_,label:`${o.name} (${a}/${u})`,onClick:()=>p(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:[Array.from(A.values()).filter(o=>o.current_mana>0||o.max_mana>0).sort((o,i)=>(o.current_mana??999999)-(i.current_mana??999999)).map((o,i)=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,padding:"2px 4px",borderBottom:"1px solid #1a1a1a",cursor:"pointer"},onMouseEnter:a=>h(o,a),onMouseMove:a=>h(o,a),onMouseLeave:()=>h(null),children:[n.jsx("div",{style:{width:20,height:20,flexShrink:0},children:n.jsx(z,{item:o,size:20})}),n.jsx("div",{style:{width:8,height:8,borderRadius:"50%",background:o.current_mana>0?"#4c4":"#c44",flexShrink:0}}),n.jsx("div",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontSize:"0.68rem",color:"#ccc"},children:o.name}),n.jsxs("div",{style:{fontSize:"0.65rem",color:"#88bbff",whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums"},children:[o.current_mana??0,"/",o.max_mana??0]}),n.jsx("div",{style:{fontSize:"0.63rem",color:"#9c9",whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums",minWidth:42,textAlign:"right"},children:o.max_mana>0?oe(o.current_mana??0,o.max_mana??0):""})]},i)),Array.from(A.values()).filter(o=>o.current_mana>0||o.max_mana>0).length===0&&n.jsx("div",{style:{padding:12,color:"#555",textAlign:"center",fontSize:"0.7rem"},children:"No mana items equipped"})]})]})]}),L&&n.jsx(ne,{item:L.item,x:L.x,y:L.y})]})};function oe(e,t){if(t<=0||e<=0)return"0h00m";const s=e*20,l=Math.floor(s/3600),d=Math.floor(s%3600/60);return`~${l}h${String(d).padStart(2,"0")}m`}export{ae as InventoryWindow}; diff --git a/static/v2/assets/IssuesWindow-C0mPCUzZ.js b/static/v2/assets/IssuesWindow-C0mPCUzZ.js new file mode 100644 index 00000000..ec752f72 --- /dev/null +++ b/static/v2/assets/IssuesWindow-C0mPCUzZ.js @@ -0,0 +1 @@ +import{r as n,a as W,j as e,D as L}from"./index-DzGubmvT.js";import"./react-DlyoauG8.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/v2/assets/RadarWindow-DdjDk5uC.js b/static/v2/assets/RadarWindow-DdjDk5uC.js new file mode 100644 index 00000000..ab89b9c8 --- /dev/null +++ b/static/v2/assets/RadarWindow-DdjDk5uC.js @@ -0,0 +1 @@ +import{r as x,j as c,D as ne}from"./index-DzGubmvT.js";import"./react-DlyoauG8.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/v2/assets/StatsWindow-DHrHJUlg.js b/static/v2/assets/StatsWindow-DHrHJUlg.js new file mode 100644 index 00000000..50789d15 --- /dev/null +++ b/static/v2/assets/StatsWindow-DHrHJUlg.js @@ -0,0 +1 @@ +import{r as o,j as t,D as d}from"./index-DzGubmvT.js";import"./react-DlyoauG8.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/v2/assets/VitalSharingWindow-By-4xWC-.js b/static/v2/assets/VitalSharingWindow-By-4xWC-.js new file mode 100644 index 00000000..d2e4eece --- /dev/null +++ b/static/v2/assets/VitalSharingWindow-By-4xWC-.js @@ -0,0 +1 @@ +import{r as n,j as t,D as x,a as m}from"./index-DzGubmvT.js";import"./react-DlyoauG8.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/v2/assets/index-DzGubmvT.js b/static/v2/assets/index-DzGubmvT.js new file mode 100644 index 00000000..e7bd4f22 --- /dev/null +++ b/static/v2/assets/index-DzGubmvT.js @@ -0,0 +1,34 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StatsWindow-DHrHJUlg.js","assets/react-DlyoauG8.js","assets/CharacterWindow-BNz9pNjP.js","assets/InventoryWindow-i56DdW3Q.js","assets/RadarWindow-DdjDk5uC.js","assets/CombatStatsWindow-DSQwtgMl.js","assets/CombatPickerWindow-BO4qfgdX.js","assets/IssuesWindow-C0mPCUzZ.js","assets/VitalSharingWindow-By-4xWC-.js","assets/DashboardView-CI4rL0mQ.js"])))=>i.map(i=>d[i]); +import{r as p0,g as tv,a as av}from"./react-DlyoauG8.js";(function(){const O=document.createElement("link").relList;if(O&&O.supports&&O.supports("modulepreload"))return;for(const p of document.querySelectorAll('link[rel="modulepreload"]'))o(p);new MutationObserver(p=>{for(const E of p)if(E.type==="childList")for(const D of E.addedNodes)D.tagName==="LINK"&&D.rel==="modulepreload"&&o(D)}).observe(document,{childList:!0,subtree:!0});function M(p){const E={};return p.integrity&&(E.integrity=p.integrity),p.referrerPolicy&&(E.referrerPolicy=p.referrerPolicy),p.crossOrigin==="use-credentials"?E.credentials="include":p.crossOrigin==="anonymous"?E.credentials="omit":E.credentials="same-origin",E}function o(p){if(p.ep)return;p.ep=!0;const E=M(p);fetch(p.href,E)}})();var sf={exports:{}},gu={};/** + * @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 r0;function ev(){if(r0)return gu;r0=1;var d=Symbol.for("react.transitional.element"),O=Symbol.for("react.fragment");function M(o,p,E){var D=null;if(E!==void 0&&(D=""+E),p.key!==void 0&&(D=""+p.key),"key"in p){E={};for(var N in p)N!=="key"&&(E[N]=p[N])}else E=p;return p=E.ref,{$$typeof:d,type:o,key:D,ref:p!==void 0?p:null,props:E}}return gu.Fragment=O,gu.jsx=M,gu.jsxs=M,gu}var g0;function uv(){return g0||(g0=1,sf.exports=ev()),sf.exports}var r=uv(),_=p0();const bu=tv(_);var of={exports:{}},Su={},mf={exports:{}},df={};/** + * @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 S0;function nv(){return S0||(S0=1,(function(d){function O(T,C){var V=T.length;T.push(C);l:for(;0>>1,yl=T[vl];if(0>>1;vlp(nl,V))Ulp(Tt,nl)?(T[vl]=Tt,T[Ul]=V,vl=Ul):(T[vl]=nl,T[bl]=V,vl=bl);else if(Ulp(Tt,V))T[vl]=Tt,T[Ul]=V,vl=Ul;else break l}}return C}function p(T,C){var V=T.sortIndex-C.sortIndex;return V!==0?V:T.id-C.id}if(d.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var E=performance;d.unstable_now=function(){return E.now()}}else{var D=Date,N=D.now();d.unstable_now=function(){return D.now()-N}}var b=[],U=[],B=1,x=null,H=3,W=!1,Z=!1,I=!1,Rl=!1,kl=typeof setTimeout=="function"?setTimeout:null,Fl=typeof clearTimeout=="function"?clearTimeout:null,Al=typeof setImmediate<"u"?setImmediate:null;function L(T){for(var C=M(U);C!==null;){if(C.callback===null)o(U);else if(C.startTime<=T)o(U),C.sortIndex=C.expirationTime,O(b,C);else break;C=M(U)}}function hl(T){if(I=!1,L(T),!Z)if(M(b)!==null)Z=!0,j||(j=!0,_l());else{var C=M(U);C!==null&&pt(hl,C.startTime-T)}}var j=!1,R=-1,Y=5,w=-1;function k(){return Rl?!0:!(d.unstable_now()-wT&&k());){var vl=x.callback;if(typeof vl=="function"){x.callback=null,H=x.priorityLevel;var yl=vl(x.expirationTime<=T);if(T=d.unstable_now(),typeof yl=="function"){x.callback=yl,L(T),C=!0;break t}x===M(b)&&o(b),L(T)}else o(b);x=M(b)}if(x!==null)C=!0;else{var Gl=M(U);Gl!==null&&pt(hl,Gl.startTime-T),C=!1}}break l}finally{x=null,H=V,W=!1}C=void 0}}finally{C?_l():j=!1}}}var _l;if(typeof Al=="function")_l=function(){Al(dl)};else if(typeof MessageChannel<"u"){var za=new MessageChannel,Jt=za.port2;za.port1.onmessage=dl,_l=function(){Jt.postMessage(null)}}else _l=function(){kl(dl,0)};function pt(T,C){R=kl(function(){T(d.unstable_now())},C)}d.unstable_IdlePriority=5,d.unstable_ImmediatePriority=1,d.unstable_LowPriority=4,d.unstable_NormalPriority=3,d.unstable_Profiling=null,d.unstable_UserBlockingPriority=2,d.unstable_cancelCallback=function(T){T.callback=null},d.unstable_forceFrameRate=function(T){0>T||125vl?(T.sortIndex=V,O(U,T),M(b)===null&&T===M(U)&&(I?(Fl(R),R=-1):I=!0,pt(hl,V-vl))):(T.sortIndex=yl,O(b,T),Z||W||(Z=!0,j||(j=!0,_l()))),T},d.unstable_shouldYield=k,d.unstable_wrapCallback=function(T){var C=H;return function(){var V=H;H=C;try{return T.apply(this,arguments)}finally{H=V}}}})(df)),df}var b0;function cv(){return b0||(b0=1,mf.exports=nv()),mf.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 z0;function iv(){if(z0)return Su;z0=1;var d=cv(),O=p0(),M=av();function o(l){var t="https://react.dev/errors/"+l;if(1yl||(l.current=vl[yl],vl[yl]=null,yl--)}function nl(l,t){yl++,vl[yl]=l.current,l.current=t}var Ul=Gl(null),Tt=Gl(null),wt=Gl(null),Tu=Gl(null);function Au(l,t){switch(nl(wt,t),nl(Tt,l),nl(Ul,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?Xm(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=Xm(t),l=Gm(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}bl(Ul),nl(Ul,l)}function Ga(){bl(Ul),bl(Tt),bl(wt)}function Vn(l){l.memoizedState!==null&&nl(Tu,l);var t=Ul.current,a=Gm(t,l.type);t!==a&&(nl(Tt,l),nl(Ul,a))}function Eu(l){Tt.current===l&&(bl(Ul),bl(Tt)),Tu.current===l&&(bl(Tu),hu._currentValue=V)}var Ln,vf;function Ta(l){if(Ln===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);Ln=t&&t[1]||"",vf=-1)":-1u||f[e]!==v[u]){var S=` +`+f[e].replace(" at new "," at ");return l.displayName&&S.includes("")&&(S=S.replace("",l.displayName)),S}while(1<=e&&0<=u);break}}}finally{Kn=!1,Error.prepareStackTrace=a}return(a=l?l.displayName||l.name:"")?Ta(a):""}function j0(l,t){switch(l.tag){case 26:case 27:case 5:return Ta(l.type);case 16:return Ta("Lazy");case 13:return l.child!==t&&t!==null?Ta("Suspense Fallback"):Ta("Suspense");case 19:return Ta("SuspenseList");case 0:case 15:return Jn(l.type,!1);case 11:return Jn(l.type.render,!1);case 1:return Jn(l.type,!0);case 31:return Ta("Activity");default:return""}}function yf(l){try{var t="",a=null;do t+=j0(l,a),a=l,l=l.return;while(l);return t}catch(e){return` +Error generating stack: `+e.message+` +`+e.stack}}var wn=Object.prototype.hasOwnProperty,Wn=d.unstable_scheduleCallback,kn=d.unstable_cancelCallback,C0=d.unstable_shouldYield,R0=d.unstable_requestPaint,$l=d.unstable_now,H0=d.unstable_getCurrentPriorityLevel,rf=d.unstable_ImmediatePriority,gf=d.unstable_UserBlockingPriority,Mu=d.unstable_NormalPriority,B0=d.unstable_LowPriority,Sf=d.unstable_IdlePriority,q0=d.log,Y0=d.unstable_setDisableYieldValue,_e=null,Il=null;function Wt(l){if(typeof q0=="function"&&Y0(l),Il&&typeof Il.setStrictMode=="function")try{Il.setStrictMode(_e,l)}catch{}}var Pl=Math.clz32?Math.clz32:Q0,X0=Math.log,G0=Math.LN2;function Q0(l){return l>>>=0,l===0?32:31-(X0(l)/G0|0)|0}var _u=256,pu=262144,Du=4194304;function Aa(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 Ou(l,t,a){var e=l.pendingLanes;if(e===0)return 0;var u=0,n=l.suspendedLanes,c=l.pingedLanes;l=l.warmLanes;var i=e&134217727;return i!==0?(e=i&~n,e!==0?u=Aa(e):(c&=i,c!==0?u=Aa(c):a||(a=i&~l,a!==0&&(u=Aa(a))))):(i=e&~n,i!==0?u=Aa(i):c!==0?u=Aa(c):a||(a=e&~l,a!==0&&(u=Aa(a)))),u===0?0:t!==0&&t!==u&&(t&n)===0&&(n=u&-u,a=t&-t,n>=a||n===32&&(a&4194048)!==0)?t:u}function pe(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function Z0(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 bf(){var l=Du;return Du<<=1,(Du&62914560)===0&&(Du=4194304),l}function Fn(l){for(var t=[],a=0;31>a;a++)t.push(l);return t}function De(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function V0(l,t,a,e,u,n){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,f=l.expirationTimes,v=l.hiddenUpdates;for(a=c&~a;0"u")return null;try{return l.activeElement||l.body}catch{return l.body}}var k0=/[\n"\\]/g;function ft(l){return l.replace(k0,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function ac(l,t,a,e,u,n,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?ec(l,c,it(t)):a!=null?ec(l,c,it(a)):e!=null&&l.removeAttribute("value"),u==null&&n!=null&&(l.defaultChecked=!!n),u!=null&&(l.checked=u&&typeof u!="function"&&typeof u!="symbol"),i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?l.name=""+it(i):l.removeAttribute("name")}function jf(l,t,a,e,u,n,c,i){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(l.type=n),t!=null||a!=null){if(!(n!=="submit"&&n!=="reset"||t!=null)){tc(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??u,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),tc(l)}function ec(l,t,a){t==="number"&&Uu(l.ownerDocument)===l||l.defaultValue===""+a||(l.defaultValue=""+a)}function Ja(l,t,a,e){if(l=l.options,t){t={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),fc=!1;if(Nt)try{var Ue={};Object.defineProperty(Ue,"passive",{get:function(){fc=!0}}),window.addEventListener("test",Ue,Ue),window.removeEventListener("test",Ue,Ue)}catch{fc=!1}var Ft=null,sc=null,Cu=null;function Xf(){if(Cu)return Cu;var l,t=sc,a=t.length,e,u="value"in Ft?Ft.value:Ft.textContent,n=u.length;for(l=0;l=Re),Kf=" ",Jf=!1;function wf(l,t){switch(l){case"keyup":return Ed.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Wf(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var Fa=!1;function _d(l,t){switch(l){case"compositionend":return Wf(t);case"keypress":return t.which!==32?null:(Jf=!0,Kf);case"textInput":return l=t.data,l===Kf&&Jf?null:l;default:return null}}function pd(l,t){if(Fa)return l==="compositionend"||!vc&&wf(l,t)?(l=Xf(),Cu=sc=Ft=null,Fa=!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=as(a)}}function us(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?us(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function ns(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=Uu(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=Uu(l.document)}return t}function gc(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 Rd=Nt&&"documentMode"in document&&11>=document.documentMode,$a=null,Sc=null,Ye=null,bc=!1;function cs(l,t,a){var e=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;bc||$a==null||$a!==Uu(e)||(e=$a,"selectionStart"in e&&gc(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=Dn(Sc,"onSelect"),0>=c,u-=c,At=1<<32-Pl(t)+u|a<J?(ll=X,X=null):ll=X.sibling;var el=y(m,X,h[J],z);if(el===null){X===null&&(X=ll);break}l&&X&&el.alternate===null&&t(m,X),s=n(el,s,J),al===null?G=el:al.sibling=el,al=el,X=ll}if(J===h.length)return a(m,X),tl&&Ut(m,J),G;if(X===null){for(;JJ?(ll=X,X=null):ll=X.sibling;var Sa=y(m,X,el.value,z);if(Sa===null){X===null&&(X=ll);break}l&&X&&Sa.alternate===null&&t(m,X),s=n(Sa,s,J),al===null?G=Sa:al.sibling=Sa,al=Sa,X=ll}if(el.done)return a(m,X),tl&&Ut(m,J),G;if(X===null){for(;!el.done;J++,el=h.next())el=A(m,el.value,z),el!==null&&(s=n(el,s,J),al===null?G=el:al.sibling=el,al=el);return tl&&Ut(m,J),G}for(X=e(X);!el.done;J++,el=h.next())el=g(X,m,J,el.value,z),el!==null&&(l&&el.alternate!==null&&X.delete(el.key===null?J:el.key),s=n(el,s,J),al===null?G=el:al.sibling=el,al=el);return l&&X.forEach(function(lv){return t(m,lv)}),tl&&Ut(m,J),G}function ol(m,s,h,z){if(typeof h=="object"&&h!==null&&h.type===I&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case W:l:{for(var G=h.key;s!==null;){if(s.key===G){if(G=h.type,G===I){if(s.tag===7){a(m,s.sibling),z=u(s,h.props.children),z.return=m,m=z;break l}}else if(s.elementType===G||typeof G=="object"&&G!==null&&G.$$typeof===Y&&Ca(G)===s.type){a(m,s.sibling),z=u(s,h.props),Le(z,h),z.return=m,m=z;break l}a(m,s);break}else t(m,s);s=s.sibling}h.type===I?(z=Oa(h.props.children,m.mode,z,h.key),z.return=m,m=z):(z=Vu(h.type,h.key,h.props,null,m.mode,z),Le(z,h),z.return=m,m=z)}return c(m);case Z:l:{for(G=h.key;s!==null;){if(s.key===G)if(s.tag===4&&s.stateNode.containerInfo===h.containerInfo&&s.stateNode.implementation===h.implementation){a(m,s.sibling),z=u(s,h.children||[]),z.return=m,m=z;break l}else{a(m,s);break}else t(m,s);s=s.sibling}z=pc(h,m.mode,z),z.return=m,m=z}return c(m);case Y:return h=Ca(h),ol(m,s,h,z)}if(pt(h))return q(m,s,h,z);if(_l(h)){if(G=_l(h),typeof G!="function")throw Error(o(150));return h=G.call(h),Q(m,s,h,z)}if(typeof h.then=="function")return ol(m,s,Fu(h),z);if(h.$$typeof===Al)return ol(m,s,Ju(m,h),z);$u(m,h)}return typeof h=="string"&&h!==""||typeof h=="number"||typeof h=="bigint"?(h=""+h,s!==null&&s.tag===6?(a(m,s.sibling),z=u(s,h),z.return=m,m=z):(a(m,s),z=_c(h,m.mode,z),z.return=m,m=z),c(m)):a(m,s)}return function(m,s,h,z){try{Ve=0;var G=ol(m,s,h,z);return fe=null,G}catch(X){if(X===ie||X===Wu)throw X;var al=tt(29,X,null,m.mode);return al.lanes=z,al.return=m,al}finally{}}}var Ha=Ns(!0),xs=Ns(!1),ta=!1;function Yc(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Xc(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 aa(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function ea(l,t,a){var e=l.updateQueue;if(e===null)return null;if(e=e.shared,(ul&2)!==0){var u=e.pending;return u===null?t.next=t:(t.next=u.next,u.next=t),e.pending=t,t=Zu(l),hs(l,null,a),t}return Qu(l,e,t,a),Zu(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,Tf(l,a)}}function Gc(l,t){var a=l.updateQueue,e=l.alternate;if(e!==null&&(e=e.updateQueue,a===e)){var u=null,n=null;if(a=a.firstBaseUpdate,a!==null){do{var c={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};n===null?u=n=c:n=n.next=c,a=a.next}while(a!==null);n===null?u=n=t:n=n.next=t}else u=n=t;a={baseState:e.baseState,firstBaseUpdate:u,lastBaseUpdate:n,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 Qc=!1;function Je(){if(Qc){var l=ce;if(l!==null)throw l}}function we(l,t,a,e){Qc=!1;var u=l.updateQueue;ta=!1;var n=u.firstBaseUpdate,c=u.lastBaseUpdate,i=u.shared.pending;if(i!==null){u.shared.pending=null;var f=i,v=f.next;f.next=null,c===null?n=v:c.next=v,c=f;var S=l.alternate;S!==null&&(S=S.updateQueue,i=S.lastBaseUpdate,i!==c&&(i===null?S.firstBaseUpdate=v:i.next=v,S.lastBaseUpdate=f))}if(n!==null){var A=u.baseState;c=0,S=v=f=null,i=n;do{var y=i.lane&-536870913,g=y!==i.lane;if(g?(P&y)===y:(e&y)===y){y!==0&&y===ne&&(Qc=!0),S!==null&&(S=S.next={lane:0,tag:i.tag,payload:i.payload,callback:null,next:null});l:{var q=l,Q=i;y=t;var ol=a;switch(Q.tag){case 1:if(q=Q.payload,typeof q=="function"){A=q.call(ol,A,y);break l}A=q;break l;case 3:q.flags=q.flags&-65537|128;case 0:if(q=Q.payload,y=typeof q=="function"?q.call(ol,A,y):q,y==null)break l;A=x({},A,y);break l;case 2:ta=!0}}y=i.callback,y!==null&&(l.flags|=64,g&&(l.flags|=8192),g=u.callbacks,g===null?u.callbacks=[y]:g.push(y))}else g={lane:y,tag:i.tag,payload:i.payload,callback:i.callback,next:null},S===null?(v=S=g,f=A):S=S.next=g,c|=y;if(i=i.next,i===null){if(i=u.shared.pending,i===null)break;g=i,i=g.next,g.next=null,u.lastBaseUpdate=g,u.shared.pending=null}}while(!0);S===null&&(f=A),u.baseState=f,u.firstBaseUpdate=v,u.lastBaseUpdate=S,n===null&&(u.shared.lanes=0),fa|=c,l.lanes=c,l.memoizedState=A}}function Us(l,t){if(typeof l!="function")throw Error(o(191,l));l.call(t)}function js(l,t){var a=l.callbacks;if(a!==null)for(l.callbacks=null,l=0;ln?n:8;var c=T.T,i={};T.T=i,ci(l,!1,t,a);try{var f=u(),v=T.S;if(v!==null&&v(i,f),f!==null&&typeof f=="object"&&typeof f.then=="function"){var S=Vd(f,e);Fe(l,t,S,ct(l))}else Fe(l,t,e,ct(l))}catch(A){Fe(l,t,{then:function(){},status:"rejected",reason:A},ct())}finally{C.p=n,c!==null&&i.types!==null&&(c.types=i.types),T.T=c}}function kd(){}function ui(l,t,a,e){if(l.tag!==5)throw Error(o(476));var u=oo(l).queue;so(l,u,t,V,a===null?kd:function(){return mo(l),a(e)})}function oo(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:V,baseState:V,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ht,lastRenderedState:V},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ht,lastRenderedState:a},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function mo(l){var t=oo(l);t.next===null&&(t=l.alternate.memoizedState),Fe(l,t.next.queue,{},ct())}function ni(){return ql(hu)}function ho(){return Ml().memoizedState}function vo(){return Ml().memoizedState}function Fd(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var a=ct();l=aa(a);var e=ea(t,l,a);e!==null&&(Wl(e,t,a),Ke(e,t,a)),t={cache:Rc()},l.payload=t;return}t=t.return}}function $d(l,t,a){var e=ct();a={lane:e,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},fn(l)?ro(t,a):(a=Ec(l,t,a,e),a!==null&&(Wl(a,l,e),go(a,t,e)))}function yo(l,t,a){var e=ct();Fe(l,t,a,e)}function Fe(l,t,a,e){var u={lane:e,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(fn(l))ro(t,u);else{var n=l.alternate;if(l.lanes===0&&(n===null||n.lanes===0)&&(n=t.lastRenderedReducer,n!==null))try{var c=t.lastRenderedState,i=n(c,a);if(u.hasEagerState=!0,u.eagerState=i,lt(i,c))return Qu(l,t,u,0),ml===null&&Gu(),!1}catch{}finally{}if(a=Ec(l,t,u,e),a!==null)return Wl(a,l,e),go(a,t,e),!0}return!1}function ci(l,t,a,e){if(e={lane:2,revertLane:Yi(),gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null},fn(l)){if(t)throw Error(o(479))}else t=Ec(l,a,e,2),t!==null&&Wl(t,l,2)}function fn(l){var t=l.alternate;return l===K||t!==null&&t===K}function ro(l,t){oe=ln=!0;var a=l.pending;a===null?t.next=t:(t.next=a.next,a.next=t),l.pending=t}function go(l,t,a){if((a&4194048)!==0){var e=t.lanes;e&=l.pendingLanes,a|=e,t.lanes=a,Tf(l,a)}}var $e={readContext:ql,use:en,useCallback:zl,useContext:zl,useEffect:zl,useImperativeHandle:zl,useLayoutEffect:zl,useInsertionEffect:zl,useMemo:zl,useReducer:zl,useRef:zl,useState:zl,useDebugValue:zl,useDeferredValue:zl,useTransition:zl,useSyncExternalStore:zl,useId:zl,useHostTransitionStatus:zl,useFormState:zl,useActionState:zl,useOptimistic:zl,useMemoCache:zl,useCacheRefresh:zl};$e.useEffectEvent=zl;var So={readContext:ql,use:en,useCallback:function(l,t){return Ql().memoizedState=[l,t===void 0?null:t],l},useContext:ql,useEffect:lo,useImperativeHandle:function(l,t,a){a=a!=null?a.concat([l]):null,nn(4194308,4,uo.bind(null,t,l),a)},useLayoutEffect:function(l,t){return nn(4194308,4,l,t)},useInsertionEffect:function(l,t){nn(4,2,l,t)},useMemo:function(l,t){var a=Ql();t=t===void 0?null:t;var e=l();if(Ba){Wt(!0);try{l()}finally{Wt(!1)}}return a.memoizedState=[e,t],e},useReducer:function(l,t,a){var e=Ql();if(a!==void 0){var u=a(t);if(Ba){Wt(!0);try{a(t)}finally{Wt(!1)}}}else u=t;return e.memoizedState=e.baseState=u,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:u},e.queue=l,l=l.dispatch=$d.bind(null,K,l),[e.memoizedState,l]},useRef:function(l){var t=Ql();return l={current:l},t.memoizedState=l},useState:function(l){l=Pc(l);var t=l.queue,a=yo.bind(null,K,t);return t.dispatch=a,[l.memoizedState,a]},useDebugValue:ai,useDeferredValue:function(l,t){var a=Ql();return ei(a,l,t)},useTransition:function(){var l=Pc(!1);return l=so.bind(null,K,l.queue,!0,!1),Ql().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,a){var e=K,u=Ql();if(tl){if(a===void 0)throw Error(o(407));a=a()}else{if(a=t(),ml===null)throw Error(o(349));(P&127)!==0||Ys(e,t,a)}u.memoizedState=a;var n={value:a,getSnapshot:t};return u.queue=n,lo(Gs.bind(null,e,n,l),[l]),e.flags|=2048,de(9,{destroy:void 0},Xs.bind(null,e,n,a,t),null),a},useId:function(){var l=Ql(),t=ml.identifierPrefix;if(tl){var a=Et,e=At;a=(e&~(1<<32-Pl(e)-1)).toString(32)+a,t="_"+t+"R_"+a,a=tn++,0<\/script>",n=n.removeChild(n.firstChild);break;case"select":n=typeof e.is=="string"?c.createElement("select",{is:e.is}):c.createElement("select"),e.multiple?n.multiple=!0:e.size&&(n.size=e.size);break;default:n=typeof e.is=="string"?c.createElement(u,{is:e.is}):c.createElement(u)}}n[Hl]=t,n[Zl]=e;l:for(c=t.child;c!==null;){if(c.tag===5||c.tag===6)n.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=n;l:switch(Xl(n,u,e),u){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 gl(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(o(166));if(l=wt.current,ee(t)){if(l=t.stateNode,a=t.memoizedProps,e=null,u=Bl,u!==null)switch(u.tag){case 27:case 5:e=u.memoizedProps}l[Hl]=t,l=!!(l.nodeValue===a||e!==null&&e.suppressHydrationWarning===!0||qm(l.nodeValue,a)),l||Pt(t,!0)}else l=On(l).createTextNode(e),l[Hl]=t,t.stateNode=l}return gl(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(o(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(o(557));l[Hl]=t}else Na(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;gl(t),l=!1}else a=xc(),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(o(558))}return gl(t),null;case 13:if(e=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(u=ee(t),e!==null&&e.dehydrated!==null){if(l===null){if(!u)throw Error(o(318));if(u=t.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(o(317));u[Hl]=t}else Na(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;gl(t),u=!1}else u=xc(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=u),u=!0;if(!u)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,u=null,e.alternate!==null&&e.alternate.memoizedState!==null&&e.alternate.memoizedState.cachePool!==null&&(u=e.alternate.memoizedState.cachePool.pool),n=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),n!==u&&(e.flags|=2048)),a!==l&&a&&(t.child.flags|=8192),hn(t,t.updateQueue),gl(t),null);case 4:return Ga(),l===null&&Zi(t.stateNode.containerInfo),gl(t),null;case 10:return Ct(t.type),gl(t),null;case 19:if(bl(El),e=t.memoizedState,e===null)return gl(t),null;if(u=(t.flags&128)!==0,n=e.rendering,n===null)if(u)Pe(e,!1);else{if(Tl!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(n=Pu(l),n!==null){for(t.flags|=128,Pe(e,!1),l=n.updateQueue,t.updateQueue=l,hn(t,l),t.subtreeFlags=0,l=a,a=t.child;a!==null;)vs(a,l),a=a.sibling;return nl(El,El.current&1|2),tl&&Ut(t,e.treeForkCount),t.child}l=l.sibling}e.tail!==null&&$l()>Sn&&(t.flags|=128,u=!0,Pe(e,!1),t.lanes=4194304)}else{if(!u)if(l=Pu(n),l!==null){if(t.flags|=128,u=!0,l=l.updateQueue,t.updateQueue=l,hn(t,l),Pe(e,!0),e.tail===null&&e.tailMode==="hidden"&&!n.alternate&&!tl)return gl(t),null}else 2*$l()-e.renderingStartTime>Sn&&a!==536870912&&(t.flags|=128,u=!0,Pe(e,!1),t.lanes=4194304);e.isBackwards?(n.sibling=t.child,t.child=n):(l=e.last,l!==null?l.sibling=n:t.child=n,e.last=n)}return e.tail!==null?(l=e.tail,e.rendering=l,e.tail=l.sibling,e.renderingStartTime=$l(),l.sibling=null,a=El.current,nl(El,u?a&1|2:a&1),tl&&Ut(t,e.treeForkCount),l):(gl(t),null);case 22:case 23:return et(t),Vc(),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&&(gl(t),t.subtreeFlags&6&&(t.flags|=8192)):gl(t),a=t.updateQueue,a!==null&&hn(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&&bl(ja),null;case 24:return a=null,l!==null&&(a=l.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),Ct(pl),gl(t),null;case 25:return null;case 30:return null}throw Error(o(156,t.tag))}function ah(l,t){switch(Oc(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return Ct(pl),Ga(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return Eu(t),null;case 31:if(t.memoizedState!==null){if(et(t),t.alternate===null)throw Error(o(340));Na()}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(o(340));Na()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return bl(El),null;case 4:return Ga(),null;case 10:return Ct(t.type),null;case 22:case 23:return et(t),Vc(),l!==null&&bl(ja),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return Ct(pl),null;case 25:return null;default:return null}}function Zo(l,t){switch(Oc(t),t.tag){case 3:Ct(pl),Ga();break;case 26:case 27:case 5:Eu(t);break;case 4:Ga();break;case 31:t.memoizedState!==null&&et(t);break;case 13:et(t);break;case 19:bl(El);break;case 10:Ct(t.type);break;case 22:case 23:et(t),Vc(),l!==null&&bl(ja);break;case 24:Ct(pl)}}function lu(l,t){try{var a=t.updateQueue,e=a!==null?a.lastEffect:null;if(e!==null){var u=e.next;a=u;do{if((a.tag&l)===l){e=void 0;var n=a.create,c=a.inst;e=n(),c.destroy=e}a=a.next}while(a!==u)}}catch(i){il(t,t.return,i)}}function ca(l,t,a){try{var e=t.updateQueue,u=e!==null?e.lastEffect:null;if(u!==null){var n=u.next;e=n;do{if((e.tag&l)===l){var c=e.inst,i=c.destroy;if(i!==void 0){c.destroy=void 0,u=t;var f=a,v=i;try{v()}catch(S){il(u,f,S)}}}e=e.next}while(e!==n)}}catch(S){il(t,t.return,S)}}function Vo(l){var t=l.updateQueue;if(t!==null){var a=l.stateNode;try{js(t,a)}catch(e){il(l,l.return,e)}}}function Lo(l,t,a){a.props=qa(l.type,l.memoizedProps),a.state=l.memoizedState;try{a.componentWillUnmount()}catch(e){il(l,t,e)}}function tu(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(u){il(l,t,u)}}function Mt(l,t){var a=l.ref,e=l.refCleanup;if(a!==null)if(typeof e=="function")try{e()}catch(u){il(l,t,u)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(u){il(l,t,u)}else a.current=null}function Ko(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(u){il(l,l.return,u)}}function Ti(l,t,a){try{var e=l.stateNode;Mh(e,l.type,a,t),e[Zl]=t}catch(u){il(l,l.return,u)}}function Jo(l){return l.tag===5||l.tag===3||l.tag===26||l.tag===27&&ha(l.type)||l.tag===4}function Ai(l){l:for(;;){for(;l.sibling===null;){if(l.return===null||Jo(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&&ha(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 Ei(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=Ot));else if(e!==4&&(e===27&&ha(l.type)&&(a=l.stateNode,t=null),l=l.child,l!==null))for(Ei(l,t,a),l=l.sibling;l!==null;)Ei(l,t,a),l=l.sibling}function vn(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&&ha(l.type)&&(a=l.stateNode),l=l.child,l!==null))for(vn(l,t,a),l=l.sibling;l!==null;)vn(l,t,a),l=l.sibling}function wo(l){var t=l.stateNode,a=l.memoizedProps;try{for(var e=l.type,u=t.attributes;u.length;)t.removeAttributeNode(u[0]);Xl(t,e,a),t[Hl]=l,t[Zl]=a}catch(n){il(l,l.return,n)}}var Yt=!1,Nl=!1,Mi=!1,Wo=typeof WeakSet=="function"?WeakSet:Set,Cl=null;function eh(l,t){if(l=l.containerInfo,Ki=Hn,l=ns(l),gc(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 u=e.anchorOffset,n=e.focusNode;e=e.focusOffset;try{a.nodeType,n.nodeType}catch{a=null;break l}var c=0,i=-1,f=-1,v=0,S=0,A=l,y=null;t:for(;;){for(var g;A!==a||u!==0&&A.nodeType!==3||(i=c+u),A!==n||e!==0&&A.nodeType!==3||(f=c+e),A.nodeType===3&&(c+=A.nodeValue.length),(g=A.firstChild)!==null;)y=A,A=g;for(;;){if(A===l)break t;if(y===a&&++v===u&&(i=c),y===n&&++S===e&&(f=c),(g=A.nextSibling)!==null)break;A=y,y=A.parentNode}A=g}a=i===-1||f===-1?null:{start:i,end:f}}else a=null}a=a||{start:0,end:0}}else a=null;for(Ji={focusedElem:l,selectionRange:a},Hn=!1,Cl=t;Cl!==null;)if(t=Cl,l=t.child,(t.subtreeFlags&1028)!==0&&l!==null)l.return=t,Cl=l;else for(;Cl!==null;){switch(t=Cl,n=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"))),Xl(n,e,a),n[Hl]=l,jl(n),e=n;break l;case"link":var c=l0("link","href",u).get(e+(a.href||""));if(c){for(var i=0;iol&&(c=ol,ol=Q,Q=c);var m=es(i,Q),s=es(i,ol);if(m&&s&&(g.rangeCount!==1||g.anchorNode!==m.node||g.anchorOffset!==m.offset||g.focusNode!==s.node||g.focusOffset!==s.offset)){var h=A.createRange();h.setStart(m.node,m.offset),g.removeAllRanges(),Q>ol?(g.addRange(h),g.extend(s.node,s.offset)):(h.setEnd(s.node,s.offset),g.addRange(h))}}}}for(A=[],g=i;g=g.parentNode;)g.nodeType===1&&A.push({element:g,left:g.scrollLeft,top:g.scrollTop});for(typeof i.focus=="function"&&i.focus(),i=0;ia?32:a,T.T=null,a=Ui,Ui=null;var n=oa,c=Vt;if(xl=0,ge=oa=null,Vt=0,(ul&6)!==0)throw Error(o(331));var i=ul;if(ul|=4,nm(n.current),am(n,n.current,c,a),ul=i,iu(0,!1),Il&&typeof Il.onPostCommitFiberRoot=="function")try{Il.onPostCommitFiberRoot(_e,n)}catch{}return!0}finally{C.p=u,T.T=e,Em(l,t)}}function _m(l,t,a){t=ot(a,t),t=oi(l.stateNode,t,2),l=ea(l,t,2),l!==null&&(De(l,2),_t(l))}function il(l,t,a){if(l.tag===3)_m(l,l,a);else for(;t!==null;){if(t.tag===3){_m(t,l,a);break}else if(t.tag===1){var e=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof e.componentDidCatch=="function"&&(sa===null||!sa.has(e))){l=ot(a,l),a=po(2),e=ea(t,a,2),e!==null&&(Do(a,e,t,l),De(e,2),_t(e));break}}t=t.return}}function Hi(l,t,a){var e=l.pingCache;if(e===null){e=l.pingCache=new ch;var u=new Set;e.set(t,u)}else u=e.get(t),u===void 0&&(u=new Set,e.set(t,u));u.has(a)||(Di=!0,u.add(a),l=mh.bind(null,l,t,a),t.then(l,l))}function mh(l,t,a){var e=l.pingCache;e!==null&&e.delete(t),l.pingedLanes|=l.suspendedLanes&a,l.warmLanes&=~a,ml===l&&(P&a)===a&&(Tl===4||Tl===3&&(P&62914560)===P&&300>$l()-gn?(ul&2)===0&&Se(l,0):Oi|=a,re===P&&(re=0)),_t(l)}function pm(l,t){t===0&&(t=bf()),l=Da(l,t),l!==null&&(De(l,t),_t(l))}function dh(l){var t=l.memoizedState,a=0;t!==null&&(a=t.retryLane),pm(l,a)}function hh(l,t){var a=0;switch(l.tag){case 31:case 13:var e=l.stateNode,u=l.memoizedState;u!==null&&(a=u.retryLane);break;case 19:e=l.stateNode;break;case 22:e=l.stateNode._retryCache;break;default:throw Error(o(314))}e!==null&&e.delete(t),pm(l,a)}function vh(l,t){return Wn(l,t)}var Mn=null,ze=null,Bi=!1,_n=!1,qi=!1,da=0;function _t(l){l!==ze&&l.next===null&&(ze===null?Mn=ze=l:ze=ze.next=l),_n=!0,Bi||(Bi=!0,rh())}function iu(l,t){if(!qi&&_n){qi=!0;do for(var a=!1,e=Mn;e!==null;){if(l!==0){var u=e.pendingLanes;if(u===0)var n=0;else{var c=e.suspendedLanes,i=e.pingedLanes;n=(1<<31-Pl(42|l)+1)-1,n&=u&~(c&~i),n=n&201326741?n&201326741|1:n?n|2:0}n!==0&&(a=!0,xm(e,n))}else n=P,n=Ou(e,e===ml?n:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),(n&3)===0||pe(e,n)||(a=!0,xm(e,n));e=e.next}while(a);qi=!1}}function yh(){Dm()}function Dm(){_n=Bi=!1;var l=0;da!==0&&ph()&&(l=da);for(var t=$l(),a=null,e=Mn;e!==null;){var u=e.next,n=Om(e,t);n===0?(e.next=null,a===null?Mn=u:a.next=u,u===null&&(ze=a)):(a=e,(l!==0||(n&3)!==0)&&(_n=!0)),e=u}xl!==0&&xl!==5||iu(l),da!==0&&(da=0)}function Om(l,t){for(var a=l.suspendedLanes,e=l.pingedLanes,u=l.expirationTimes,n=l.pendingLanes&-62914561;0i)break;var S=f.transferSize,A=f.initiatorType;S&&Ym(A)&&(f=f.responseEnd,c+=S*(f"u"?null:document;function Fm(l,t,a){var e=Te;if(e&&typeof t=="string"&&t){var u=ft(t);u='link[rel="'+l+'"][href="'+u+'"]',typeof a=="string"&&(u+='[crossorigin="'+a+'"]'),km.has(u)||(km.add(u),l={rel:l,crossOrigin:a,href:t},e.querySelector(u)===null&&(t=e.createElement("link"),Xl(t,"link",l),jl(t),e.head.appendChild(t)))}}function Hh(l){Lt.D(l),Fm("dns-prefetch",l,null)}function Bh(l,t){Lt.C(l,t),Fm("preconnect",l,t)}function qh(l,t,a){Lt.L(l,t,a);var e=Te;if(e&&l&&t){var u='link[rel="preload"][as="'+ft(t)+'"]';t==="image"&&a&&a.imageSrcSet?(u+='[imagesrcset="'+ft(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(u+='[imagesizes="'+ft(a.imageSizes)+'"]')):u+='[href="'+ft(l)+'"]';var n=u;switch(t){case"style":n=Ae(l);break;case"script":n=Ee(l)}rt.has(n)||(l=x({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:l,as:t},a),rt.set(n,l),e.querySelector(u)!==null||t==="style"&&e.querySelector(mu(n))||t==="script"&&e.querySelector(du(n))||(t=e.createElement("link"),Xl(t,"link",l),jl(t),e.head.appendChild(t)))}}function Yh(l,t){Lt.m(l,t);var a=Te;if(a&&l){var e=t&&typeof t.as=="string"?t.as:"script",u='link[rel="modulepreload"][as="'+ft(e)+'"][href="'+ft(l)+'"]',n=u;switch(e){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":n=Ee(l)}if(!rt.has(n)&&(l=x({rel:"modulepreload",href:l},t),rt.set(n,l),a.querySelector(u)===null)){switch(e){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(du(n)))return}e=a.createElement("link"),Xl(e,"link",l),jl(e),a.head.appendChild(e)}}}function Xh(l,t,a){Lt.S(l,t,a);var e=Te;if(e&&l){var u=La(e).hoistableStyles,n=Ae(l);t=t||"default";var c=u.get(n);if(!c){var i={loading:0,preload:null};if(c=e.querySelector(mu(n)))i.loading=5;else{l=x({rel:"stylesheet",href:l,"data-precedence":t},a),(a=rt.get(n))&&Pi(l,a);var f=c=e.createElement("link");jl(f),Xl(f,"link",l),f._p=new Promise(function(v,S){f.onload=v,f.onerror=S}),f.addEventListener("load",function(){i.loading|=1}),f.addEventListener("error",function(){i.loading|=2}),i.loading|=4,xn(c,t,e)}c={type:"stylesheet",instance:c,count:1,state:i},u.set(n,c)}}}function Gh(l,t){Lt.X(l,t);var a=Te;if(a&&l){var e=La(a).hoistableScripts,u=Ee(l),n=e.get(u);n||(n=a.querySelector(du(u)),n||(l=x({src:l,async:!0},t),(t=rt.get(u))&&lf(l,t),n=a.createElement("script"),jl(n),Xl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},e.set(u,n))}}function Qh(l,t){Lt.M(l,t);var a=Te;if(a&&l){var e=La(a).hoistableScripts,u=Ee(l),n=e.get(u);n||(n=a.querySelector(du(u)),n||(l=x({src:l,async:!0,type:"module"},t),(t=rt.get(u))&&lf(l,t),n=a.createElement("script"),jl(n),Xl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},e.set(u,n))}}function $m(l,t,a,e){var u=(u=wt.current)?Nn(u):null;if(!u)throw Error(o(446));switch(l){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=Ae(a.href),a=La(u).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=Ae(a.href);var n=La(u).hoistableStyles,c=n.get(l);if(c||(u=u.ownerDocument||u,c={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},n.set(l,c),(n=u.querySelector(mu(l)))&&!n._p&&(c.instance=n,c.state.loading=5),rt.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},rt.set(l,a),n||Zh(u,l,a,c.state))),t&&e===null)throw Error(o(528,""));return c}if(t&&e!==null)throw Error(o(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Ee(a),a=La(u).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(o(444,l))}}function Ae(l){return'href="'+ft(l)+'"'}function mu(l){return'link[rel="stylesheet"]['+l+"]"}function Im(l){return x({},l,{"data-precedence":l.precedence,precedence:null})}function Zh(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}),Xl(t,"link",a),jl(t),l.head.appendChild(t))}function Ee(l){return'[src="'+ft(l)+'"]'}function du(l){return"script[async]"+l}function Pm(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,jl(e),e;var u=x({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return e=(l.ownerDocument||l).createElement("style"),jl(e),Xl(e,"style",u),xn(e,a.precedence,l),t.instance=e;case"stylesheet":u=Ae(a.href);var n=l.querySelector(mu(u));if(n)return t.state.loading|=4,t.instance=n,jl(n),n;e=Im(a),(u=rt.get(u))&&Pi(e,u),n=(l.ownerDocument||l).createElement("link"),jl(n);var c=n;return c._p=new Promise(function(i,f){c.onload=i,c.onerror=f}),Xl(n,"link",e),t.state.loading|=4,xn(n,a.precedence,l),t.instance=n;case"script":return n=Ee(a.src),(u=l.querySelector(du(n)))?(t.instance=u,jl(u),u):(e=a,(u=rt.get(n))&&(e=x({},a),lf(e,u)),l=l.ownerDocument||l,u=l.createElement("script"),jl(u),Xl(u,"link",e),l.head.appendChild(u),t.instance=u);case"void":return null;default:throw Error(o(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(e=t.instance,t.state.loading|=4,xn(e,a.precedence,l));return t.instance}function xn(l,t,a){for(var e=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=e.length?e[e.length-1]:null,n=u,c=0;c title"):null)}function Vh(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 a0(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function Lh(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 u=Ae(e.href),n=t.querySelector(mu(u));if(n){t=n._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=jn.bind(l),t.then(l,l)),a.state.loading|=4,a.instance=n,jl(n);return}n=t.ownerDocument||t,e=Im(e),(u=rt.get(u))&&Pi(e,u),n=n.createElement("link"),jl(n);var c=n;c._p=new Promise(function(i,f){c.onload=i,c.onerror=f}),Xl(n,"link",e),a.instance=n}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(l.count++,a=jn.bind(l),t.addEventListener("load",a),t.addEventListener("error",a))}}var tf=0;function Kh(l,t){return l.stylesheets&&l.count===0&&Rn(l,l.stylesheets),0tf?50:800)+t);return l.unsuspend=a,function(){l.unsuspend=null,clearTimeout(e),clearTimeout(u)}}:null}function jn(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Rn(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var Cn=null;function Rn(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Cn=new Map,t.forEach(Jh,l),Cn=null,jn.call(l))}function Jh(l,t){if(!(t.state.loading&4)){var a=Cn.get(l);if(a)var e=a.get(null);else{a=new Map,Cn.set(l,a);for(var u=l.querySelectorAll("link[data-precedence],style[data-precedence]"),n=0;n"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(d)}catch(O){console.error(O)}}return d(),of.exports=iv(),of.exports}var sv=fv();const ov="modulepreload",mv=function(d){return"/"+d},A0={},Kt=function(O,M,o){let p=Promise.resolve();if(M&&M.length>0){let D=function(U){return Promise.all(U.map(B=>Promise.resolve(B).then(x=>({status:"fulfilled",value:x}),x=>({status:"rejected",reason:x}))))};document.getElementsByTagName("link");const N=document.querySelector("meta[property=csp-nonce]"),b=(N==null?void 0:N.nonce)||(N==null?void 0:N.getAttribute("nonce"));p=D(M.map(U=>{if(U=mv(U),U in A0)return;A0[U]=!0;const B=U.endsWith(".css"),x=B?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${U}"]${x}`))return;const H=document.createElement("link");if(H.rel=B?"stylesheet":ov,B||(H.as="script"),H.crossOrigin="",H.href=U,b&&H.setAttribute("nonce",b),document.head.appendChild(H),B)return new Promise((W,Z)=>{H.addEventListener("load",W),H.addEventListener("error",()=>Z(new Error(`Unable to preload CSS for ${U}`)))})}))}function E(D){const N=new Event("vite:preloadError",{cancelable:!0});if(N.payload=D,window.dispatchEvent(N),!N.defaultPrevented)throw D}return p.then(D=>{for(const N of D||[])N.status==="rejected"&&E(N.reason);return O().catch(E)})},D0=_.createContext({windows:[],openWindow:()=>{},closeWindow:()=>{},bringToFront:()=>{}}),dv=({children:d})=>{const[O,M]=_.useState([]),o=_.useRef(1e4),p=_.useCallback((N,b,U)=>{M(B=>B.find(H=>H.id===N)?B.map(H=>H.id===N?{...H,zIndex:++o.current}:H):[...B,{id:N,title:b,charName:U,zIndex:++o.current}])},[]),E=_.useCallback(N=>{M(b=>b.filter(U=>U.id!==N))},[]),D=_.useCallback(N=>{M(b=>b.map(U=>U.id===N?{...U,zIndex:++o.current}:U))},[]);return r.jsx(D0.Provider,{value:{windows:O,openWindow:p,closeWindow:E,bringToFront:D},children:d})},Zn=()=>_.useContext(D0),gt={west:-102.1,east:102.1,north:102.1,south:-102.1};function zu(d,O,M,o){const p=(d-gt.west)/(gt.east-gt.west)*M,E=(gt.north-O)/(gt.north-gt.south)*o;return{x:p,y:E}}function hv(d,O,M,o,p,E,D){const N=(d-o)/M,b=(O-p)/M,U=gt.west+N/E*(gt.east-gt.west),B=gt.north-b/D*(gt.north-gt.south);return{ew:U,ns:B}}function hf(d,O){const M=d>=0?"N":"S",o=O>=0?"E":"W";return`${Math.abs(d).toFixed(1)}${M}, ${Math.abs(O).toFixed(1)}${o}`}const O0=bu.memo(({players:d,imgW:O,imgH:M,getColor:o,onHover:p,onSelect:E,selectedPlayer:D})=>{const N=_.useMemo(()=>d.filter(b=>b.ew!==void 0&&b.ns!==void 0).map(b=>({...b,pos:zu(b.ew,b.ns,O,M),color:o(b.character_name)})),[d,O,M,o]);return r.jsx("div",{className:"ml-dots-layer",children:N.map(b=>r.jsx("div",{className:`ml-dot ${D===b.character_name?"ml-dot-selected":""}`,style:{left:b.pos.x,top:b.pos.y,backgroundColor:b.color},onMouseEnter:U=>{var x;const B=(x=U.currentTarget.closest(".ml-map-container"))==null?void 0:x.getBoundingClientRect();B&&p(b,U.clientX-B.left,U.clientY-B.top)},onMouseLeave:()=>p(null,0,0),onClick:()=>E(b.character_name)},b.character_name))})});O0.displayName="PlayerDots";const vv="/api";async function ba(d){const O=await fetch(`${vv}${d}`,{credentials:"include"});if(!O.ok)throw new Error(`API ${d}: ${O.status}`);return O.json()}function yv(){return`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/api/ws/live`}const N0=bu.memo(({imgW:d,imgH:O,getColor:M})=>{const[o,p]=_.useState([]);_.useEffect(()=>{const D=async()=>{try{const b=await ba("/trails/?seconds=600");p(b.trails??[])}catch{}};D();const N=setInterval(D,2e3);return()=>clearInterval(N)},[]);const E=_.useMemo(()=>{const D={};for(const N of o){const{x:b,y:U}=zu(N.ew,N.ns,d,O);D[N.character_name]||(D[N.character_name]=[]),D[N.character_name].push(`${b},${U}`)}return Object.entries(D).filter(([,N])=>N.length>=2).map(([N,b])=>({name:N,points:b.join(" ")}))},[o,d,O]);return r.jsx("svg",{className:"ml-trails-svg",viewBox:`0 0 ${d} ${O}`,preserveAspectRatio:"none",children:E.map(D=>r.jsx("polyline",{points:D.points,stroke:M(D.name),fill:"none",strokeWidth:2,strokeOpacity:.7,strokeLinecap:"round",strokeLinejoin:"round"},D.name))})});N0.displayName="TrailsSVG";const rv=({imgW:d,imgH:O,enabled:M})=>{const o=_.useRef(null),[p,E]=_.useState([]);return _.useEffect(()=>{if(!M)return;(async()=>{try{const N=await ba("/spawns/heatmap?hours=24&limit=50000");E(N.spawn_points??[])}catch{}})()},[M]),_.useEffect(()=>{const D=o.current;if(!D||!M||p.length===0||d===0)return;D.width=d,D.height=O;const N=D.getContext("2d");if(N){N.clearRect(0,0,d,O);for(const b of p){const{x:U,y:B}=zu(b.ew,b.ns,d,O),x=Math.max(5,Math.min(12,5+Math.sqrt(b.intensity*.5))),H=N.createRadialGradient(U,B,0,U,B,x);H.addColorStop(0,`rgba(255, 0, 0, ${Math.min(.9,b.intensity/40)})`),H.addColorStop(.6,`rgba(255, 100, 0, ${Math.min(.4,b.intensity/120)})`),H.addColorStop(1,"rgba(255, 150, 0, 0)"),N.fillStyle=H,N.fillRect(U-x,B-x,x*2,x*2)}}},[p,d,O,M]),M?r.jsx("canvas",{ref:o,className:"ml-heatmap-canvas"}):null},gv=({imgW:d,imgH:O,enabled:M})=>{const[o,p]=_.useState([]);_.useEffect(()=>{if(!M)return;const D=async()=>{try{const b=await ba("/portals");p(b.portals??[])}catch{}};D();const N=setInterval(D,6e4);return()=>clearInterval(N)},[M]);const E=_.useMemo(()=>o.map(D=>({...D,pos:zu(D.coordinates.ew,D.coordinates.ns,d,O)})),[o,d,O]);return!M||E.length===0?null:r.jsx("div",{className:"ml-portals-layer",children:E.map((D,N)=>r.jsx("div",{className:"ml-portal-icon",style:{left:D.pos.x,top:D.pos.y},title:`${D.portal_name} (by ${D.discovered_by})`},N))})},E0=20,M0=.3,Sv=({players:d,getColor:O,onSelectPlayer:M,showHeatmap:o,showPortals:p,selectedPlayer:E})=>{var hl;const D=_.useRef(null),N=_.useRef(null),[b,U]=_.useState({w:0,h:0}),[B,x]=_.useState(null),H=_.useRef(null),W=_.useRef({scale:1,offX:0,offY:0}),Z=_.useRef({dragging:!1,sx:0,sy:0,startOffX:0,startOffY:0}),I=_.useCallback(()=>{if(N.current){const{scale:j,offX:R,offY:Y}=W.current;N.current.style.transform=`translate(${R}px, ${Y}px) scale(${j})`}},[]),Rl=_.useCallback(j=>{const R=j.currentTarget;if(U({w:R.naturalWidth,h:R.naturalHeight}),D.current){const Y=D.current.clientWidth,w=D.current.clientHeight,k=Math.min(Y/R.naturalWidth,w/R.naturalHeight);W.current={scale:k,offX:(Y-R.naturalWidth*k)/2,offY:(w-R.naturalHeight*k)/2},I()}},[I]),kl=_.useCallback(j=>{var Jt;j.preventDefault();const R=(Jt=D.current)==null?void 0:Jt.getBoundingClientRect();if(!R)return;const Y=W.current,w=j.deltaY<0?1.1:.9,k=Math.min(E0,Math.max(M0,Y.scale*w)),dl=k/Y.scale,_l=j.clientX-R.left,za=j.clientY-R.top;W.current={scale:k,offX:_l-(_l-Y.offX)*dl,offY:za-(za-Y.offY)*dl},I()},[I]),Fl=_.useCallback(j=>{if(j.button!==0)return;const R=W.current;Z.current={dragging:!0,sx:j.clientX,sy:j.clientY,startOffX:R.offX,startOffY:R.offY}},[]);_.useEffect(()=>{const j=Y=>{const w=Z.current;if(w.dragging&&(W.current.offX=w.startOffX+(Y.clientX-w.sx),W.current.offY=w.startOffY+(Y.clientY-w.sy),I()),D.current&&b.w>0&&H.current){const k=D.current.getBoundingClientRect(),dl=W.current,_l=hv(Y.clientX-k.left,Y.clientY-k.top,dl.scale,dl.offX,dl.offY,b.w,b.h);H.current.textContent=hf(_l.ns,_l.ew)}},R=()=>{Z.current.dragging=!1};return window.addEventListener("mousemove",j),window.addEventListener("mouseup",R),()=>{window.removeEventListener("mousemove",j),window.removeEventListener("mouseup",R)}},[I,b.w,b.h]);const Al=_.useRef(null);_.useEffect(()=>{if(!E||b.w===0||!D.current||Al.current===E)return;const j=d.find(dl=>dl.character_name===E);if(!j)return;Al.current=E;const{x:R,y:Y}=zu(j.ew,j.ns,b.w,b.h),w=D.current.getBoundingClientRect(),k=3;W.current={scale:Math.min(E0,Math.max(M0,k)),offX:w.width/2-R*k,offY:w.height/2-Y*k},I()},[E,d,b.w,b.h,I]),_.useEffect(()=>{E||(Al.current=null)},[E]);const L=_.useCallback((j,R,Y)=>{x(j?{x:R,y:Y,player:j}:null)},[]);return r.jsxs("div",{className:"ml-map-container",ref:D,onWheel:kl,onMouseDown:Fl,children:[r.jsxs("div",{ref:N,className:"ml-map-group",children:[r.jsx("img",{src:"/dereth.png",alt:"Dereth",className:"ml-map-img",onLoad:Rl,draggable:!1}),b.w>0&&r.jsxs(r.Fragment,{children:[r.jsx(rv,{imgW:b.w,imgH:b.h,enabled:o}),r.jsx(N0,{imgW:b.w,imgH:b.h,getColor:O}),r.jsx(O0,{players:d,imgW:b.w,imgH:b.h,getColor:O,onHover:L,onSelect:M,selectedPlayer:E}),r.jsx(gv,{imgW:b.w,imgH:b.h,enabled:p})]})]}),B&&r.jsxs("div",{className:"ml-tooltip",style:{left:B.x+12,top:B.y-10},children:[r.jsx("strong",{children:B.player.character_name}),r.jsx("br",{}),hf(B.player.ns,B.player.ew),r.jsx("br",{}),B.player.kills_per_hour," kph · ",(hl=B.player.kills)==null?void 0:hl.toLocaleString()," kills"]}),r.jsx("div",{className:"ml-coords",ref:H})]})},x0=bu.memo(({player:d,vitals:O,color:M,onSelect:o})=>{var U,B;const{openWindow:p}=Zn(),E=(d.vt_state||"idle").toLowerCase(),D=E==="combat"||E==="hunt",N=(d.total_rares??0)>0?Math.round((d.total_kills??0)/(d.total_rares??1)).toLocaleString():null,b=d.character_name;return r.jsxs("li",{className:"ml-player-row",style:{borderLeftColor:M},children:[r.jsxs("div",{className:"ml-pr-header",onClick:o,children:[r.jsx("span",{className:"ml-pr-name",children:b}),r.jsx("span",{className:"ml-pr-coords",children:hf(d.ns,d.ew)})]}),r.jsxs("div",{className:"ml-pr-vitals",children:[r.jsx("div",{className:"ml-vital-bar hp",children:r.jsx("div",{className:"ml-vital-fill",style:{width:`${(O==null?void 0:O.health_percentage)??0}%`}})}),r.jsx("div",{className:"ml-vital-bar sta",children:r.jsx("div",{className:"ml-vital-fill",style:{width:`${(O==null?void 0:O.stamina_percentage)??0}%`}})}),r.jsx("div",{className:"ml-vital-bar mana",children:r.jsx("div",{className:"ml-vital-fill",style:{width:`${(O==null?void 0:O.mana_percentage)??0}%`}})})]}),r.jsxs("div",{className:"ml-pr-grid",children:[r.jsxs("span",{className:"ml-gs",title:"Session kills",children:["⚔️ ",((U=d.kills)==null?void 0:U.toLocaleString())??0]}),r.jsxs("span",{className:"ml-gs",title:"Total kills",children:["🏆 ",(d.total_kills??0).toLocaleString()]}),r.jsxs("span",{className:"ml-gs",title:"Kills per hour",children:[d.kills_per_hour??"0"," ",r.jsx("span",{className:"ml-suffix",children:"KPH"})]}),r.jsxs("span",{className:"ml-gs",title:"Rares (session / total)",children:["💎 ",d.session_rares??0," / ",d.total_rares??0]}),r.jsx("span",{className:"ml-gs",title:"Kills per rare",children:N?r.jsxs(r.Fragment,{children:["📊 ",N," ",r.jsx("span",{className:"ml-suffix",children:"KPR"})]}):""}),r.jsx("span",{className:`ml-meta-pill ${D?"active":""}`,children:d.vt_state||"idle"}),r.jsxs("span",{className:"ml-gs",title:"Online time",children:["🕐 ",((B=d.onlinetime)==null?void 0:B.replace(/^00\./,""))??"--"]}),r.jsxs("span",{className:"ml-gs",title:"Deaths",children:["☠️ ",d.deaths??"0"]}),r.jsxs("span",{className:"ml-gs",title:"Prismatic tapers",children:[r.jsx("img",{src:"/prismatic-taper-icon.png",className:"ml-taper-icon",alt:""}),d.prismatic_taper_count??"0"]})]}),r.jsxs("div",{className:"ml-pr-buttons",children:[r.jsx("button",{className:"ml-btn accent",onClick:()=>p(`chat-${b}`,`Chat: ${b}`,b),children:"Chat"}),r.jsx("button",{className:"ml-btn accent",onClick:()=>p(`stats-${b}`,`Stats: ${b}`,b),children:"Stats"}),r.jsx("button",{className:"ml-btn accent",onClick:()=>p(`inv-${b}`,`Inventory: ${b}`,b),children:"Inv"}),r.jsx("button",{className:"ml-btn",onClick:()=>p(`char-${b}`,`Character: ${b}`,b),children:"Char"}),r.jsx("button",{className:"ml-btn",onClick:()=>p(`combat-${b}`,`Combat: ${b}`,b),children:"Combat"}),r.jsx("button",{className:"ml-btn",onClick:()=>p(`radar-${b}`,`Radar: ${b}`,b),children:"Radar"})]})]})});x0.displayName="PlayerRow";const bv=({players:d,vitals:O,getColor:M,onSelect:o})=>r.jsx("ul",{className:"ml-player-list",children:d.map(p=>r.jsx(x0,{player:p,vitals:O.get(p.character_name)??null,color:M(p.character_name),onSelect:()=>o(p.character_name)},p.character_name))}),zv=[{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"}],Tv=({value:d,onChange:O})=>r.jsx("div",{className:"ml-sort-buttons",children:zv.map(M=>r.jsx("button",{className:`ml-sort-btn ${d===M.key?"active":""}`,onClick:()=>O(M.key),children:M.label},M.key))}),Av=()=>{const{openWindow:d}=Zn();return r.jsxs("div",{className:"ml-tool-links",children:[r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>d("issues","Issues Board"),children:"📋 Issues"}),r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>d("vitalsharing","Vital Sharing"),children:"🤝 Vitals"}),r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:()=>d("combatpicker","Combat Stats"),children:"⚔️ Combat"})]})},Ev=({players:d,vitals:O,serverHealth:M,totalRares:o,totalKills:p,getColor:E,onSelectPlayer:D,onViewToggle:N,showHeatmap:b,showPortals:U,onToggleHeatmap:B,onTogglePortals:x,version:H})=>{var j,R;const[W,Z]=_.useState("name"),[I,Rl]=_.useState(""),kl=_.useMemo(()=>d.reduce((Y,w)=>Y+(parseInt(w.kills_per_hour)||0),0),[d]),Fl=((j=M==null?void 0:M.status)==null?void 0:j.toLowerCase())==="online"||((R=M==null?void 0:M.status)==null?void 0:R.toLowerCase())==="up",Al=_.useDeferredValue(d),L=_.useDeferredValue(O),hl=_.useMemo(()=>{let Y=[...Al];switch(I&&(Y=Y.filter(w=>w.character_name.toLowerCase().startsWith(I.toLowerCase()))),W){case"kph":Y.sort((w,k)=>(parseInt(k.kills_per_hour)||0)-(parseInt(w.kills_per_hour)||0));break;case"skills":Y.sort((w,k)=>(k.kills||0)-(w.kills||0));break;case"srares":Y.sort((w,k)=>(k.session_rares??0)-(w.session_rares??0));break;case"tkills":Y.sort((w,k)=>(k.total_kills??0)-(w.total_kills??0));break;case"kpr":Y.sort((w,k)=>{const dl=(w.total_kills??0)/Math.max(1,w.total_rares??1),_l=(k.total_kills??0)/Math.max(1,k.total_rares??1);return dl-_l});break;default:Y.sort((w,k)=>w.character_name.localeCompare(k.character_name))}return Y},[Al,W,I]);return r.jsxs("div",{className:"ml-sidebar",children:[H&&r.jsxs("div",{className:"ml-version",children:["v",H]}),r.jsx("div",{className:"ml-sidebar-header",children:r.jsxs("span",{className:"ml-sidebar-title",children:["Active Mosswart Enjoyers (",d.length,")"]})}),r.jsxs("div",{className:"ml-server-status",children:[r.jsx("span",{className:`ml-status-dot ${Fl?"online":"offline"}`}),r.jsxs("span",{className:"ml-status-text",children:["Coldeve ",Fl?"Online":"Offline"]}),(M==null?void 0:M.player_count)!=null&&r.jsxs("span",{className:"ml-status-detail",children:["👥 ",M.player_count]}),(M==null?void 0:M.latency_ms)!=null&&r.jsxs("span",{className:"ml-status-detail",children:[Math.round(M.latency_ms),"ms"]}),(M==null?void 0:M.uptime_seconds)!=null&&r.jsxs("span",{className:"ml-status-detail",children:["Up: ",Math.floor(M.uptime_seconds/3600),"h"]})]}),r.jsxs("div",{className:"ml-counters",children:[r.jsxs("div",{className:"ml-counter rares",children:[r.jsx("span",{className:"ml-counter-val",children:o}),r.jsx("span",{className:"ml-counter-lbl",children:"Rares"})]}),r.jsxs("div",{className:`ml-counter kph ${kl>5e3?"ultra":""}`,children:[r.jsx("span",{className:"ml-counter-val",children:kl.toLocaleString()}),r.jsx("span",{className:"ml-counter-lbl",children:"Server KPH"})]}),r.jsxs("div",{className:"ml-counter kills",children:[r.jsx("span",{className:"ml-counter-val",children:p.toLocaleString()}),r.jsx("span",{className:"ml-counter-lbl",children:"Kills"})]})]}),r.jsxs("div",{className:"ml-tool-links",children:[r.jsx("span",{className:"ml-tool-link",style:{cursor:"pointer"},onClick:N,children:"📊 Dashboard"}),r.jsx("a",{href:"/inventory.html",target:"_blank",className:"ml-tool-link",children:"🔍 Inv Search"}),r.jsx("a",{href:"/suitbuilder.html",target:"_blank",className:"ml-tool-link",children:"🛡️ Suitbuilder"}),r.jsx("a",{href:"/debug.html",target:"_blank",className:"ml-tool-link",children:"🐛 Debug"}),r.jsx("a",{href:"/quest-status.html",target:"_blank",className:"ml-tool-link",children:"📜 Quests"})]}),r.jsx(Av,{}),r.jsxs("div",{className:"ml-toggles",children:[r.jsxs("label",{className:"ml-toggle-label",children:[r.jsx("input",{type:"checkbox",checked:b,onChange:Y=>B(Y.target.checked)}),r.jsx("span",{children:"Spawn Heatmap"})]}),r.jsxs("label",{className:"ml-toggle-label",children:[r.jsx("input",{type:"checkbox",checked:U,onChange:Y=>x(Y.target.checked)}),r.jsx("span",{children:"Portals"})]})]}),r.jsx(Tv,{value:W,onChange:Z}),r.jsx("input",{className:"ml-filter",type:"text",placeholder:"Filter players...",value:I,onChange:Y=>Rl(Y.target.value)}),r.jsx(bv,{players:hl,vitals:L,getColor:E,onSelect:D})]})},Mv=({id:d,title:O,zIndex:M,width:o=700,height:p=340,children:E})=>{const{closeWindow:D,bringToFront:N}=Zn(),b=_.useRef(null),U=_.useRef({dragging:!1,sx:0,sy:0,ox:0,oy:0}),B=_.useRef({x:420,y:10+Math.random()*40}),x=_.useCallback(H=>{var Z;H.preventDefault(),N(d);const W=(Z=b.current)==null?void 0:Z.getBoundingClientRect();W&&(U.current={dragging:!0,sx:H.clientX,sy:H.clientY,ox:W.left,oy:W.top})},[d,N]);return _.useEffect(()=>{const H=Z=>{const I=U.current;!I.dragging||!b.current||(B.current.x=I.ox+(Z.clientX-I.sx),B.current.y=I.oy+(Z.clientY-I.sy),b.current.style.left=`${B.current.x}px`,b.current.style.top=`${B.current.y}px`)},W=()=>{U.current.dragging=!1};return window.addEventListener("mousemove",H),window.addEventListener("mouseup",W),()=>{window.removeEventListener("mousemove",H),window.removeEventListener("mouseup",W)}},[]),r.jsxs("div",{ref:b,className:"ml-window",style:{zIndex:M,width:o,height:p,left:B.current.x,top:B.current.y},onMouseDown:()=>N(d),children:[r.jsxs("div",{className:"ml-window-header",onMouseDown:x,children:[r.jsx("span",{className:"ml-window-title",children:O}),r.jsx("button",{className:"ml-window-close",onClick:()=>D(d),children:"×"})]}),r.jsx("div",{className:"ml-window-content",children:E})]})},_v={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"},pv=({id:d,charName:O,zIndex:M,messages:o,socket:p})=>{const E=_.useRef(null),[D,N]=_.useState("");_.useEffect(()=>{E.current&&(E.current.scrollTop=E.current.scrollHeight)},[o.length]);const b=U=>{U.preventDefault();const B=D.trim();!B||!p||p.readyState!==WebSocket.OPEN||(p.send(JSON.stringify({player_name:O,command:B})),N(""))};return r.jsxs(Mv,{id:d,title:`Chat: ${O}`,zIndex:M,width:600,height:300,children:[r.jsx("div",{className:"ml-chat-messages",ref:E,children:o.map((U,B)=>r.jsx("div",{className:"ml-chat-line",style:{color:_v[U.color??2]??"#ddd"},children:U.text},B))}),r.jsx("form",{className:"ml-chat-form",onSubmit:b,children:r.jsx("input",{className:"ml-chat-input",value:D,onChange:U=>N(U.target.value),placeholder:"Enter chat..."})})]})},Dv=_.lazy(()=>Kt(()=>import("./StatsWindow-DHrHJUlg.js"),__vite__mapDeps([0,1])).then(d=>({default:d.StatsWindow}))),Ov=_.lazy(()=>Kt(()=>import("./CharacterWindow-BNz9pNjP.js"),__vite__mapDeps([2,1])).then(d=>({default:d.CharacterWindow}))),Nv=_.lazy(()=>Kt(()=>import("./InventoryWindow-i56DdW3Q.js"),__vite__mapDeps([3,1])).then(d=>({default:d.InventoryWindow}))),xv=_.lazy(()=>Kt(()=>import("./RadarWindow-DdjDk5uC.js"),__vite__mapDeps([4,1])).then(d=>({default:d.RadarWindow}))),Uv=_.lazy(()=>Kt(()=>import("./CombatStatsWindow-DSQwtgMl.js"),__vite__mapDeps([5,1])).then(d=>({default:d.CombatStatsWindow}))),jv=_.lazy(()=>Kt(()=>import("./CombatPickerWindow-BO4qfgdX.js"),__vite__mapDeps([6,1])).then(d=>({default:d.CombatPickerWindow}))),Cv=_.lazy(()=>Kt(()=>import("./IssuesWindow-C0mPCUzZ.js"),__vite__mapDeps([7,1])).then(d=>({default:d.IssuesWindow}))),Rv=_.lazy(()=>Kt(()=>import("./VitalSharingWindow-By-4xWC-.js"),__vite__mapDeps([8,1])).then(d=>({default:d.VitalSharingWindow}))),U0=bu.memo(({characters:d,chatMessages:O,nearbyObjects:M,socket:o})=>{const{windows:p}=Zn();return r.jsx(_.Suspense,{fallback:null,children:p.map(E=>{var b;const D=E.charName??"";switch(E.id.split("-")[0]){case"chat":return r.jsx(pv,{id:E.id,charName:D,zIndex:E.zIndex,messages:O.get(D)??[],socket:o},E.id);case"stats":return r.jsx(Dv,{id:E.id,charName:D,zIndex:E.zIndex},E.id);case"char":return r.jsx(Ov,{id:E.id,charName:D,zIndex:E.zIndex,vitals:((b=d.get(D))==null?void 0:b.vitals)??void 0},E.id);case"inv":return r.jsx(Nv,{id:E.id,charName:D,zIndex:E.zIndex},E.id);case"radar":return r.jsx(xv,{id:E.id,charName:D,zIndex:E.zIndex,socket:o,radarData:M.get(D)??null},E.id);case"combat":return r.jsx(Uv,{id:E.id,charName:D,zIndex:E.zIndex},E.id);case"combatpicker":return r.jsx(jv,{id:E.id,zIndex:E.zIndex,characters:d},E.id);case"issues":return r.jsx(Cv,{id:E.id,zIndex:E.zIndex},E.id);case"vitalsharing":return r.jsx(Rv,{id:E.id,zIndex:E.zIndex},E.id);default:return null}})})});U0.displayName="WindowRenderer";let Hv=0;const Bv=({recentRares:d})=>{const[O,M]=_.useState([]),[o,p]=_.useState(0),[E,D]=_.useState([]);_.useEffect(()=>{if(d.length>o&&o>0){const b=d.slice(0,d.length-o);for(const U of b){const B=++Hv;M(x=>[...x,{key:B,charName:U.character_name,rareName:U.name,exiting:!1}]),N(),setTimeout(()=>{M(x=>x.map(H=>H.key===B?{...H,exiting:!0}:H)),setTimeout(()=>{M(x=>x.filter(H=>H.key!==B))},500)},6e3)}}p(d.length)},[d.length]);const N=_.useCallback(()=>{const b=Date.now(),U=["#FFD700","#FF4444","#FF8800","#AA44FF","#4488FF"],B=Array.from({length:30},(x,H)=>{const W=Math.PI*2*H/30+(Math.random()-.5)*.5,Z=100+Math.random()*200;return{dx:Math.cos(W)*Z,dy:Math.sin(W)*Z-50,color:U[Math.floor(Math.random()*U.length)]}});D(x=>[...x,{id:b,particles:B}]),setTimeout(()=>D(x=>x.filter(H=>H.id!==b)),2200)},[]);return r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"ml-rare-notifications",children:O.map(b=>r.jsxs("div",{className:`ml-rare-notif ${b.exiting?"exiting":""}`,children:[r.jsx("div",{className:"ml-rare-notif-title",children:"🎆 LEGENDARY RARE! 🎆"}),r.jsx("div",{className:"ml-rare-notif-name",children:b.rareName}),r.jsx("div",{className:"ml-rare-notif-by",children:"found by"}),r.jsx("div",{className:"ml-rare-notif-char",children:b.charName})]},b.key))}),r.jsx("div",{className:"ml-fireworks",children:E.map(b=>r.jsx(bu.Fragment,{children:b.particles.map((U,B)=>r.jsx("div",{className:"ml-firework-particle",style:{left:"50%",top:"30%",backgroundColor:U.color,"--dx":`${U.dx}px`,"--dy":`${U.dy+200}px`}},B))},b.id))})]})},_0=["#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 qv(d){let O=0;for(let M=0;M{let p=d.current.get(o);return p||(p=O.current<_0.length?_0[O.current++]:qv(o),d.current.set(o,p)),p},[])}const Xv=({data:d,onViewToggle:O})=>{const M=Yv(),[o,p]=_.useState(!1),[E,D]=_.useState(!1),[N,b]=_.useState(null),U=_.useMemo(()=>Array.from(d.characters.values()).filter(Z=>Z.telemetry).map(Z=>Z.telemetry),[d.characters]),B=_.useMemo(()=>new Map(Array.from(d.characters.values()).filter(Z=>Z.vitals).map(Z=>[Z.name,Z.vitals])),[d.characters]),[x,H]=_.useState("");_.useEffect(()=>{fetch("/api/api-version",{credentials:"include"}).then(Z=>Z.json()).then(Z=>H(Z.version??"")).catch(()=>{})},[]);const W=_.useCallback(Z=>{b(I=>I===Z?null:Z)},[]);return r.jsx(dv,{children:r.jsxs("div",{className:"ml-layout",children:[r.jsx(Ev,{players:U,vitals:B,serverHealth:d.serverHealth,totalRares:d.totalRares,totalKills:d.totalKills,getColor:M,onSelectPlayer:W,onViewToggle:O,showHeatmap:o,showPortals:E,onToggleHeatmap:p,onTogglePortals:D,version:x}),r.jsx(Sv,{players:U,getColor:M,onSelectPlayer:W,showHeatmap:o,showPortals:E,selectedPlayer:N}),r.jsx(U0,{characters:d.characters,chatMessages:d.chatMessages,nearbyObjects:d.nearbyObjects,socket:d.socketRef.current}),r.jsx(Bv,{recentRares:d.recentRares})]})})};function Gv(d){const O=_.useRef(null),M=_.useRef(0),o=_.useRef(d);o.current=d;const p=_.useCallback(()=>{var D;if(((D=O.current)==null?void 0:D.readyState)===WebSocket.OPEN)return;const E=new WebSocket(yv());O.current=E,E.addEventListener("message",N=>{try{const b=JSON.parse(N.data);o.current(b)}catch{}}),E.addEventListener("close",()=>{O.current=null,M.current=window.setTimeout(p,2e3)}),E.addEventListener("error",()=>{E.close()})},[]);return _.useEffect(()=>(p(),()=>{var E;clearTimeout(M.current),(E=O.current)==null||E.close(),O.current=null}),[p]),O}const Qv=()=>ba("/live"),Zv=()=>ba("/combat-stats"),Vv=()=>ba("/server-health"),Lv=()=>ba("/total-rares"),Kv=()=>ba("/total-kills");function Jv(){const[d,O]=_.useState(new Map),[M,o]=_.useState(null),[p,E]=_.useState(0),[D,N]=_.useState(0),[b,U]=_.useState([]),B=_.useRef(new Map),[x,H]=_.useState(0),[W,Z]=_.useState(new Map),I=_.useRef(d);I.current=d;const Rl=_.useCallback((L,hl)=>{O(j=>{const R=new Map(j),Y=R.get(L)??{name:L,telemetry:null,vitals:null,combat:null,lastUpdate:0};return R.set(L,hl(Y)),R})},[]),kl=_.useCallback(L=>{var hl;if(L.type){if(L.type==="telemetry"){const j=L;Rl(j.character_name,R=>({...R,telemetry:j,lastUpdate:Date.now()}))}else if(L.type==="vitals"){const j=L;Rl(j.character_name,R=>({...R,vitals:j,lastUpdate:Date.now()}))}else if(L.type==="combat_stats"){const j=L;Rl(j.character_name,R=>({...R,combat:j,lastUpdate:Date.now()}))}else if(L.type==="rare"){const j=L;U(R=>[j,...R].slice(0,50))}else if(L.type==="dungeon_map"){const j=L;j.landblock&&(window.__dungeonMapCache||(window.__dungeonMapCache={}),window.__dungeonMapCache[j.landblock]=j)}else if(L.type==="nearby_objects"){const j=L;if(Z(R=>{const Y=new Map(R);return Y.set(j.character_name,j),Y}),j.is_dungeon&&j.landblock&&!((hl=window.__dungeonMapCache)!=null&&hl[j.landblock])){const R=Fl.current;(R==null?void 0:R.readyState)===WebSocket.OPEN&&R.send(JSON.stringify({type:"request_dungeon_map",landblock:j.landblock}))}}else if(L.type==="chat"){const j=L,R=B.current.get(j.character_name)??[];R.push({text:j.text,color:j.color,timestamp:j.timestamp}),R.length>1e3&&R.splice(0,R.length-1e3),B.current.set(j.character_name,R),H(Y=>Y+1)}}},[Rl]),Fl=Gv(kl);_.useEffect(()=>{const L=async()=>{try{const j=await Qv();O(R=>{var w;const Y=new Map(R);for(const k of j.players??[]){const dl=Y.get(k.character_name);Y.set(k.character_name,{name:k.character_name,telemetry:k,vitals:(dl==null?void 0:dl.vitals)??null,combat:(dl==null?void 0:dl.combat)??null,lastUpdate:Date.now()})}for(const k of Y.keys())(w=j.players)!=null&&w.some(dl=>dl.character_name===k)||Y.delete(k);return Y})}catch{}};L();const hl=setInterval(L,5e3);return()=>clearInterval(hl)},[]),_.useEffect(()=>{const L=async()=>{try{const j=await Zv();for(const R of j.stats??[])Rl(R.character_name,Y=>({...Y,combat:{...R,type:"combat_stats"}}))}catch{}};L();const hl=setInterval(L,3e4);return()=>clearInterval(hl)},[Rl]),_.useEffect(()=>{const L=async()=>{try{o(await Vv())}catch{}};L();const hl=setInterval(L,3e4);return()=>clearInterval(hl)},[]),_.useEffect(()=>{const L=async()=>{try{const[j,R]=await Promise.all([Lv(),Kv()]);E(j.all_time??0),N(R.total??0)}catch{}};L();const hl=setInterval(L,3e5);return()=>clearInterval(hl)},[]);const Al=_.useMemo(()=>B.current,[x]);return{characters:d,serverHealth:M,totalRares:p,totalKills:D,recentRares:b,chatMessages:Al,nearbyObjects:W,socketRef:Fl}}const wv=_.lazy(()=>Kt(()=>import("./DashboardView-CI4rL0mQ.js"),__vite__mapDeps([9,1])));function Wv(){const[d,O]=_.useState(()=>localStorage.getItem("v2-view")||"map"),M=Jv(),o=()=>{const p=d==="map"?"dashboard":"map";O(p),localStorage.setItem("v2-view",p)};return d==="map"?r.jsx(Xv,{data:M,onViewToggle:o}):r.jsx(_.Suspense,{fallback:r.jsx("div",{style:{background:"#0d0d0d",color:"#888",padding:40,textAlign:"center"},children:"Loading dashboard..."}),children:r.jsx(wv,{data:M,onViewToggle:o})})}sv.createRoot(document.getElementById("root")).render(r.jsx(_.StrictMode,{children:r.jsx(Wv,{})}));"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").catch(()=>{});export{Mv as D,bu as R,ba as a,r as j,_ as r,Zn as u}; diff --git a/static/v2/index.html b/static/v2/index.html index 1c2fd866..8c379889 100644 --- a/static/v2/index.html +++ b/static/v2/index.html @@ -8,9 +8,9 @@ - - - + + +