/* ============================================================ Динамика веса — overview + detail ============================================================ */ /* Reusable weight line chart. data: [{x:'Янв', kg:29}] markers:[{i, L, c}] vertical event lines W/H in svg units; y-domain fixed 23..33 */ function WeightChart({ data, markers, yMax=31, openIdx, lastHollow }){ const W=320, H=190, padL=26, padR=14, padT=24, padB=26; const yMin=23; const x=i=> padL + (W-padL-padR)*(i/(data.length-1)); const y=kg=> padT + (H-padT-padB)*(1-(kg-yMin)/(yMax-yMin)); const pts=data.map((d,i)=>[x(i),y(d.kg)]); const gridVals=[]; for(let v=yMin;v<=yMax;v+=2) gridVals.push(v); const mColor={A:"#F06455",S:"#2A6FDB",V:"#20A83A"}; return ( кг {gridVals.map(v=>( {v} ))} {/* event vertical dashed lines + letter badges */} {markers.map((m,k)=>( {m.L} ))} p.join(",")).join(" ")} fill="none" stroke="#20A83A" strokeWidth="2.6" strokeLinecap="round" strokeLinejoin="round"/> {pts.map((p,i)=>{ const hollow = lastHollow && i===pts.length-1; const open = openIdx===i; return {open && } ; })} {data.map((d,i)=> {d.x})} ); } const data6=[{x:"Янв",kg:28.8},{x:"Фев",kg:28.4},{x:"Мар",kg:27.6},{x:"Апр",kg:26.2},{x:"Май",kg:26.9},{x:"Июн",kg:26.8}]; const markers6=[{i:3,L:"A"},{i:4,L:"S"},{i:5,L:"V"}]; const data12=[{x:"Июл",kg:31},{x:"Авг",kg:30.6},{x:"Сен",kg:30.2},{x:"Окт",kg:30.3},{x:"Ноя",kg:30},{x:"Дек",kg:29.8},{x:"Янв",kg:29.6},{x:"Фев",kg:29},{x:"Мар",kg:28.2},{x:"Апр",kg:27.4},{x:"Май",kg:28},{x:"Июн",kg:27.6}]; const markers12=[{i:9,L:"A"},{i:10,L:"S"},{i:11,L:"V"}]; function WHeader({ go }){ return ( go("home")} right={} title={null} /> ); } function WTitle(){ return (
Динамика веса
Лилу · Корги · 3 года
); } function Segmented({ value, onChange }){ const opts=["1м","3м","6м","1г"]; return (
{opts.map(o=>( ))}
); } function LegendPill({ L, c, children }){ return {L}{children} ; } /* ---------- Overview ---------- */ function WeightScreen({ go }){ const [range,setRange]=useState("6м"); return (
AI-комментарий
Вес менялся незначительно. После эпизода аллергии в апреле динамика стабилизировалась.
Текущий вес
28 кг
в пределах нормы
Изменение
−1,2 кг
за 6 месяцев
аллергия смена корма приём у врача
Ключевые события
{[["A","#F06455","12 апр","аллергия"],["S","#2A6FDB","20 апр","смена корма"],["V","#20A83A","05 мая","контроль у врача"]].map((e,i)=>( ))}
); } window.WeightScreen = WeightScreen; /* ---------- Detail ---------- */ function WeightDetailScreen({ go }){ const [range,setRange]=useState("1г"); return (
12 апр 27,4 кг
A 12 апреля · аллергия
Вес в этот день
27,4 кг
Примечание
снижение аппетита, зуд
Связанные события
приём у дерматолога
элиминационная диета
улучшение через 2 недели
AI-комментарий
Небольшое снижение веса совпало с эпизодом аллергии. После лечения вес постепенно стабилизировался.
); } window.WeightDetailScreen = WeightDetailScreen;