PageSourceSearch

https://heartopia.town/_next/static/chunks/pages/tools/fish-planner-0181c1b74343f2af.js

js heartopia.town collected 2026-10-06 11:11:46 UTC 13,175 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[173],{1603:(e,t,a)=>{"use strict";a.r(t),a.d(t,{__N_SSG:()=>u,default:()=>h});var s=a(7876),n=a(4232),r=a(8230),i=a.n(r),l=a(2535);function c(e){let t=String(e||"").toLowerCase();return t.includes("shark")?"\uD83E\uDD88":t.includes("tuna")?"\uD83D\uDC1F":t.includes("salmon")?"\uD83D\uDC20":t.includes("eel")?"\uD83D\uDC0D":t.includes("ray")?"\uD83D\uDEF8":t.includes("octopus")?"\uD83D\uDC19":t.includes("squid")?"\uD83E\uDD91":t.includes("crab")?"\uD83E\uDD80":t.includes("lobster")||t.includes("crayfish")?"\uD83E\uDD9E":t.includes("shrimp")||t.includes("prawn")?"\uD83E\uDD90":"\uD83D\uDC1F"}function o(e,t){return!!e&&!!t&&String(e).includes(t)}function d(e,t){var a;let s=null==e||null==(a=e.prices)?void 0:a[t];return Number.isFinite(s)?s:Number.isFinite(null==e?void 0:e.sellPrice)?e.sellPrice:null}function m(e,t,a){var s,n;let r=null!=(s=d(e,"1star"))?s:0,i=null!=(n=d(e,"5star"))?n:r,l=Math.max(0,(Number.isFinite(null==e?void 0:e.level)?e.level:10)-Number(a||1));return"potential"===t?i:"leveling"===t?r-120*l:r}var u=!0;function h(e){let{fish:t}=e,[a,r]=(0,n.useState)("☀️"),[u,h]=(0,n.useState)("\uD83C\uDF1E"),[p,x]=(0,n.useState)(4),[f,b]=(0,n.useState)("stable"),g=(0,n.useMemo)(()=>[...t||[]].filter(e=>(!Number.isFinite(null==e?void 0:e.level)||e.level<=Number(p))&&o(e.time,a)&&o(e.weather,u)).sort((e,t)=>m(t,f,p)-m(e,f,p)).slice(0,8),[t,p,a,u,f]),j=(0,n.useMemo)(()=>{let e=Number(p)+1;return[...t||[]].filter(t=>t.level===e).sort((e,t)=>m(t,f,p)-m(e,f,p)).slice(0,8)},[t,p,f]),y=(0,n.useMemo)(()=>[...t||[]].filter(e=>o(e.weather,"\uD83C\uDF08")).sort((e,t)=>{var a,s,n,r;return"stable"===f?(null!=(a=d(t,"1star"))?a:-1/0)-(null!=(s=d(e,"1star"))?s:-1/0):"leveling"===f?m(t,"leveling",p)-m(e,"leveling",p):(null!=(n=d(t,"5star"))?n:-1/0)-(null!=(r=d(e,"5star"))?r:-1/0)}).slice(0,10),[t,f,p]),v=String("https://heartopia.town").replace(/\/+$/,""),N="".concat(v,"/tools/fish-planner"),w="".concat(v,"/tools");return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(l.A,{title:"Heartopia Fish Planner - Best Fishing Routes by Weather, Time, and Level",description:"Use the Heartopia Fish Planner to find the best fish by weather, time, level, and value potential. Optimize your farming route with data-driven recommendations.",canonical:N}),(0,s.jsx)("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:"".concat(v,"/")},{"@type":"ListItem",position:2,name:"Tools",item:w},{"@type":"ListItem",position:3,name:"Fish Planner",item:N}]})}}),(0,s.jsx)("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify({"@context":"https://schema.org","@type":"WebApplication",name:"Heartopia Fish Planner",applicationCategory:"GameApplication",operatingSystem:"Any",browserRequirements:"Requires JavaScript",url:N,description:"Use the Heartopia Fish Planner to find the best fish by weather, time of day, level, and value potential. Optimize your farming route with data-driven recommendations."})}}),(0,s.jsxs)("main",{className:"max-w-6xl mx-auto px-0 pb-24 mt-0 sm:-mt-24",children:[(0,s.jsx)("header",{className:"pt-2",children:(0,s.jsxs)("nav",{className:"flex items-center gap-2 text-sm font-medium text-outline","aria-label":"Breadcrumb",children:[(0,s.jsx)(i(),{href:"/",className:"hover:text-primary transition-colors",children:"Home"}),(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"chevron_right"}),(0,s.jsx)(i(),{href:"/tools",className:"text-on-surface-variant hover:text-primary transition-colors",children:"Tools"}),(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"chevron_right"}),(0,s.jsx)("span",{className:"text-primary font-bold",children:"Fish Planner"})]})}),(0,s.jsx)("section",{className:"mt-3",children:(0,s.jsxs)("div",{className:"rounded-[3rem] p-10 md:p-12 relative overflow-hidden border border-cyan-100/50 shadow-sm bg-gradient-to-br from-cyan-50 to-blue-50",children:[(0,s.jsx)("h1",{className:"text-4xl md:text-6xl font-black text-primary tracking-tighter",children:"Heartopia Fish Planner"}),(0,s.jsx)("p",{className:"text-on-secondary-container/80 text-base md:text-lg font-medium mt
1-3",children:"Plan high-efficiency fishing sessions using level gates, weather windows, and value-focused ranking modes."})]})}),(0,s.jsxs)("section",{className:"mt-8 grid grid-cols-1 lg:grid-cols-2 gap-6",children:[(0,s.jsxs)("div",{className:"bg-surface-container-lowest p-6 rounded-[2rem] shadow-sm border border-surface-container",children:[(0,s.jsx)("h2",{className:"text-2xl font-black text-primary",children:"What is Fish Planner?"}),(0,s.jsx)("p",{className:"mt-3 text-sm text-on-surface-variant leading-relaxed",children:"Fish Planner is a route decision tool that uses the same fish list as the wiki. It ranks fish targets by your current level, selected time-of-day, weather condition, and strategy preference so you can avoid random casting."}),(0,s.jsx)("p",{className:"mt-3 text-sm text-on-surface-variant leading-relaxed",children:"Instead of manually checking every fish condition, you get prioritized target lists for your current session objective: stable income, high-star upside, or efficient progression."})]}),(0,s.jsxs)("div",{className:"bg-surface-container-lowest p-6 rounded-[2rem] shadow-sm border border-surface-container",children:[(0,s.jsx)("h2",{className:"text-2xl font-black text-primary",children:"How it works"}),(0,s.jsxs)("ol",{className:"mt-3 space-y-2 text-sm text-on-surface-variant list-decimal list-inside",children:[(0,s.jsx)("li",{children:"Select your player level to enforce realistic target access."}),(0,s.jsx)("li",{children:"Pick time and weather to match active spawn windows."}),(0,s.jsx)("li",{children:"Choose a strategy mode based on your session goal."}),(0,s.jsx)("li",{children:"Follow ranked outputs: Current Window, Next Level Route, Rainbow Board."})]}),(0,s.jsx)("p",{className:"mt-3 text-xs font-bold text-primary",children:"Tip: lock one route per weather window and reduce location switching for better attempts-per-minute."})]})]}),(0,s.jsxs)("section",{className:"mt-8 bg-surface-container-lowest p-6 md:p-8 rounded-[2rem] shadow-sm border border-surface-container",children:[(0,s.jsxs)("div",{className:"flex flex-wrap gap-3",children:[(0,s.jsx)("select",{value:p,onChange:e=>x(Number(e.target.value)),className:"pl-4 pr-10 py-3 bg-surface-container-high rounded-full border-none text-sm font-bold appearance-none",children:Array.from({length:10}).map((e,t)=>(0,s.jsxs)("option",{value:t+1,children:["Player Level ",t+1]},"lv-".concat(t+1)))}),(0,s.jsxs)("select",{value:a,onChange:e=>r(e.target.value),className:"pl-4 pr-10 py-3 bg-surface-container-high rounded-full border-none text-sm font-bold appearance-none",children:[(0,s.jsx)("option",{value:"\uD83C\uDF19",children:"\uD83C\uDF19 Night"}),(0,s.jsx)("option",{value:"\uD83C\uDF05",children:"\uD83C\uDF05 Dawn"}),(0,s.jsx)("option",{value:"☀️",children:"☀️ Day"}),(0,s.jsx)("option",{value:"\uD83C\uDF07",children:"\uD83C\uDF07 Dusk"})]}),(0,s.jsxs)("select",{value:u,onChange:e=>h(e.target.value),className:"pl-4 pr-10 py-3 bg-surface-container-high rounded-full border-none text-sm font-bold appearance-none",children:[(0,s.jsx)("option",{value:"\uD83C\uDF1E",children:"\uD83C\uDF1E Sunny"}),(0,s.jsx)("option",{value:"\uD83C\uDF27️",children:"\uD83C\uDF27️ Rainy"}),(0,s.jsx)("option",{value:"\uD83C\uDF08",children:"\uD83C\uDF08 Rainbow"})]})]}),(0,s.jsxs)("div",{className:"mt-4 flex flex-wrap gap-2",children:[(0,s.jsx)("button",{type:"button",onClick:()=>b("stable"),className:"px-4 py-2 rounded-full text-sm font-black ".concat("stable"===f?"bg-primary text-white":"bg-surface-container-high text-on-surface-variant"),children:"Stable 1★ Value"}),(0,s.jsx)("button",{type:"button",onClick:()=>b("potential"),className:"px-4 py-2 rounded-full text-sm font-black ".concat("potential"===f?"bg-tertiary text-white":"bg-surface-container-high text-on-surface-variant"),children:"High 5★ Potential"}),(0,s.jsx)("button",{type:"button",onClick:()=>b("leveling"),className:"px-4 py-2 rounded-full text-sm font-black ".concat("leveling"===f?"bg-green-600 text-white":"bg-surface-container-high text-on-surface-variant"),children:"Leveling Efficiency"})]})]}),(0,s.jsxs)("section",{className:"mt-6 grid grid-cols-1 lg:grid-cols-3 gap-4",children:[(0,s.jsxs)("div",{className:"rounded-2xl border border-surface-container bg-white p-4",children:[(0,s.jsx)("p",{className:"text-[11px] font-black uppercase tracking-widest text-outline",children:"Current Window Picks"}),(0,s.jsx)("div",{className:"mt-3 space-y-2",children:g.map(e=>{var t,a;return(0,s.jsxs)(i(),{href:"/fish/".concat(e.id),className:"flex items-center justify-between gap-2 p-2 rounded-xl bg-surface-container hover:bg-primary-container/10",children:[(0,s.jsxs)("span",{className:"inline-flex items-center gap-2 text-sm font-bold text-on-surface min-w-0",children:[(0,s.jsx)("span",{children:c(e.name)}),(0,s.jsx)("span",{className:"truncate",children:e.name})]}),(0,s.jsx)("span",{className:"text-xs font-black text-primary",children:"potential"===f?null!=(t=d(e,"5star"))?t:"—":null!=(a=d(e,"1star"))?a:"—"})]},"".concat(e.id,"-window"))})})]}),(0,s.jsxs)("div",{className:"rounded-2xl border border-surface-container bg-white p-4",children:[(0,s.jsx)("p",{className:"text-[11px] font-black uppercase tracking-widest text-outline",children:"Next Level Route"}),(0,s.jsx)("div",{className:"mt-3 space-y-2",children:j.map(e=>(0,s.jsxs)(i(),{href:"/fish/".concat(e.id),className:"flex items-center justify-between gap-2 p-2 rounded-xl bg-surface-container hover:bg-secondary-container/20",children:[(0,s.jsxs)("span",{className:"inline-flex items-center gap-2 text-sm font-bold text-on-surface min-w-0",children:[(0,s.jsx)("span",{children:c(e.name)}),(0,s.jsx)("span",{className:"truncate",children:e.name})]}),(0,s.jsx)("span",{className:"text-[11px] font-black text-on-surface-variant",children:e.location||"—"})]},"".concat(e.id,"-next")))})]}),(0,s.jsxs)("div",{className:"rounded-2xl border border-surface-container bg-white p-4",children:[(0,s.jsx)("p",{className:"text-[11px] font-black uppercase tracking-widest text-outline",children:"Rainbow Profit Board"}),(0,s.jsx)("div",{className:"mt-3 space-y-2",children:y.map((e,t)=>{var a,n;return(0,s.jsxs)(i(),{href:"/fish/".concat(e.id),className:"flex items-center justify-between gap-2 p-2 rounded-xl bg-surface-container hover:bg-tertiary-container/20",children:[(0,s.jsxs)("span",{className:"inline-flex items-center gap-2 text-sm font-bold text-on-surface min-w-0",children:[(0,s.jsxs)("span",{className:"text-[11px] font-black text-outline w-5",children:["#",t+1]}),(0,s.jsx)("span",{children:c(e.name)}),(0,s.jsx)("span",{className:"truncate",children:e.name})]}),(0,s.jsx)("span",{className:"text-xs font-black text-tertiary",children:"stable"===f?null!=(a=d(e,"1star"))?a:"—":null!=(n=d(e,"5star"))?n:"—"})]},"".concat(e.id,"-rainbow"))})})]})]}),(0,s.jsxs)("section",{className:"mt-10 bg-surface-container-lowest p-6 md:p-8 rounded-[2rem] 
1shadow-sm border border-surface-container",children:[(0,s.jsx)("h2",{className:"text-2xl font-black text-primary tracking-tight",children:"Related Tools"}),(0,s.jsxs)("div",{className:"mt-4 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:[(0,s.jsxs)(i(),{href:"/tools/recipe-profit-calculator",className:"bg-white p-4 rounded-[2rem] shadow-sm border border-surface-container flex items-center gap-3 hover:bg-primary-container/10",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-primary","aria-hidden":!0,children:"skillet"}),(0,s.jsx)("span",{className:"font-black text-primary",children:"Recipe Profit Calculator"})]}),(0,s.jsxs)(i(),{href:"/tools/crop-profit-calculator",className:"bg-white p-4 rounded-[2rem] shadow-sm border border-surface-container flex items-center gap-3 hover:bg-secondary-container/20",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-primary","aria-hidden":!0,children:"agriculture"}),(0,s.jsx)("span",{className:"font-black text-primary",children:"Crop Profit Calculator"})]}),(0,s.jsxs)(i(),{href:"/tools/insect-catch-planner",className:"bg-white p-4 rounded-[2rem] shadow-sm border border-surface-container flex items-center gap-3 hover:bg-tertiary-container/20",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-primary","aria-hidden":!0,children:"bug_report"}),(0,s.jsx)("span",{className:"font-black text-primary",children:"Insect Catch Planner"})]})]}),(0,s.jsx)("p",{className:"mt-6 text-center",children:(0,s.jsxs)(i(),{href:"/tools",className:"inline-flex items-center gap-2 font-black text-primary hover:underline",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-lg","aria-hidden":!0,children:"arrow_back"}),"Back to Tools"]})})]})]})]})}},1812:(e,t,a)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/tools/fish-planner",function(){return a(1603)}])}},e=>{e.O(0,[636,593,792],()=>e(e.s=1812)),_N_E=e.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.