PageSourceSearch

https://www.xgrind.pro/assets/KeywordSentimentPage-CFPXOxkP.js

js xgrind.pro collected 2026-10-02 02:07:24 UTC 52,050 bytes, 1 lines download raw bytes

1import{r as f,j as e}from"./react-core-bWLI75Fw.js";import{E as b,eh as x,F as O,dV as j,j as we,u as Re,ct as R,H as K,dW as G,ch as ie,G as ke,cv as Ke}from"./index-Cuw9rIcM.js";import{a as He,P as Xe}from"./ProPreviewGate-BOimFr9E.js";import{r as Be,aw as Je,X as Fe,i as ye,bi as Ue,L as me,S as ve,aC as Ge,aA as We,a7 as je,s as Ye,t as Ne,av as $e,aT as qe,aq as ze,bP as Ve,aG as Ze,aH as Qe,bz as et,E as tt}from"./lucide-U8ZTX028.js";import"./firebase-BwZ4hkwm.js";import"./framer-motion-C0wpNkKn.js";const Se={keyword:"monetisasi X",keywords:["monetisasi X"],platform:"X",rangeLabel:"29 Jul 2026 – 1 Agu 2026",scannedAt:"2026-08-01T18:40:00+07:00",source:"demo",tweet_count:8,kpis:{mentions:{value:22480,prev:29200,deltaPct:-23},users:{value:14210,prev:18100,deltaPct:-21.5},engagements:{value:612e5,prev:3868e4,deltaPct:58.1},reach:{value:51e8,prev:322e7,deltaPct:58.4}},sentiment:{positive:38.2,neutral:41.5,negative:20.3,label:"Netral–Positif",score:58},mentionTrend:[{date:"2026-07-01",label:"1 Jul",mentions:420,positive:160,neutral:180,negative:80},{date:"2026-07-04",label:"4 Jul",mentions:510,positive:190,neutral:210,negative:110},{date:"2026-07-07",label:"7 Jul",mentions:380,positive:140,neutral:160,negative:80},{date:"2026-07-10",label:"10 Jul",mentions:640,positive:250,neutral:260,negative:130},{date:"2026-07-13",label:"13 Jul",mentions:720,positive:280,neutral:290,negative:150},{date:"2026-07-16",label:"16 Jul",mentions:590,positive:220,neutral:250,negative:120},{date:"2026-07-19",label:"19 Jul",mentions:880,positive:340,neutral:360,negative:180},{date:"2026-07-22",label:"22 Jul",mentions:1100,positive:420,neutral:450,negative:230},{date:"2026-07-24",label:"24 Jul",mentions:1680,positive:620,neutral:700,negative:360},{date:"2026-07-25",label:"25 Jul",mentions:2374,positive:910,neutral:980,negative:484},{date:"2026-07-26",label:"26 Jul",mentions:1420,positive:540,neutral:580,negative:300},{date:"2026-07-28",label:"28 Jul",mentions:960,positive:380,neutral:400,negative:180}],influencers:[{handle:"tempodotco",name:"tempo.co",followers:28e5,mentions:6,engagement:1771694,sentiment:"neutral",avatar:null,tweets:2,keywords:["monetisasi X"]},{handle:"txtdrimedia",name:"txtdrimedia",followers:12e5,mentions:4,engagement:1510200,sentiment:"negative",avatar:null,tweets:2,keywords:["monetisasi X"]},{handle:"lambesaham",name:"Lambe Saham",followers:89e4,mentions:18,engagement:980400,sentiment:"positive",avatar:null,tweets:2,keywords:["monetisasi X"]},{handle:"detikcom",name:"detikcom",followers:195e5,mentions:3,engagement:720150,sentiment:"neutral",avatar:null,tweets:2,keywords:["monetisasi X"]},{handle:"kompascom",name:"Kompas.com",followers:102e5,mentions:5,engagement:612800,sentiment:"neutral",avatar:null,tweets:2,keywords:["monetisasi X"]},{handle:"bbcindonesia",name:"BBC News Indonesia",followers:21e5,mentions:2,engagement:410220,sentiment:"neutral",avatar:null,tweets:2,keywords:["monetisasi X"]},{handle:"ajiindonesia",name:"AJI Indonesia",followers:186e3,mentions:1,engagement:298400,sentiment:"negative",avatar:null,tweets:2,keywords:["monetisasi X"]},{handle:"narasinewsroom",name:"Narasi Newsroom",followers:98e4,mentions:7,engagement:265100,sentiment:"positive",avatar:null,tweets:2,keywords:["monetisasi X"]},{handle:"creatorekonomi",name:"Creator Ekonomi ID",followers:42e3,mentions:22,engagement:188600,sentiment:"positive",avatar:null,tweets:2,keywords:["monetisasi X"]},{handle:"xgrindonline",name:"XGrind",followers:18500,mentions:31,engagement:142300,sentiment:"positive",avatar:null,tweets:2,keywords:["monetisasi X"]}],tweets:[{id:"1",handle:"tempodotco",name:"tempo.co",text:"Pembaruan skema monetisasi X memicu diskusi luas di kalangan kreator Indonesia. Berikut ringkasannya.",likes:12400,reposts:3200,replies:890,views:21e5,sentiment:"neutral",postedAt:"2026-07-25T09:12:00+07:00",url:"https://x.com/tempodotco/status/1"},{id:"2",handle:"lambesaham",name:"Lambe Saham",text:"Kalau monetisasi X makin ketat, kreator kecil tetap bisa survive — asalkan niche & engagement quality bagus.",likes:8900,reposts:2100,replies:640,views:98e4,sentiment:"positive",postedAt:"2026-07-25T14:40:00+07:00",url:"https://x.com/lambesaham/status/2"},{id:"3",handle:"txtdrimedia",name:"txtdrimedia",text:"Banyak akun mengeluh payout turun. Apakah ini sinyal monetisasi X makin selektif?",likes:15200,reposts:4100,replies:1800,views:32e5,sentiment:"negative",postedAt:"2026-07-24T21:05:00+07:00",url:"https://x.com/txtdrimedia/status/3"},{id:"4",handle:"creatorekonomi",name:"Creator Ekonomi ID",text:"Thread: cara baca syarat monetisasi X 2026 tanpa panik. Fokus ke verified followers & reply quality.",likes:5600,reposts:1800,replies:420,views:54e4,sentiment:"positive",postedAt:"2026-07-26T11:20:00+07:00",url:"https://x.com/creatorekonomi/status/4"},{id:"5",handle:"ajiindonesia",name:"AJI Indonesia",text:"Satu post soal protes jurnalis soal akses platform — interaksi tinggi dari komunitas media.",likes:4100,reposts:2200,replies:510,views:38e4,sentiment:"negative",postedAt:"2026-07-23T16:55:00+07:00",url:"https://x.com/ajiindonesia/status/5"},{id:"6",handle:"xgrindonline",name:"XGrind",text:"Tips: pantau sentimen keyword niche-mu sebelum ikut gelombang. Engagement tinggi ≠ selalu bagus buat brand.",likes:3200,reposts:980,replies:210,views:29e4,sentiment:"positive",postedAt:"2026-07-27T08:30:00+07:00",url:"https://x.com/xgrindonline/status/6"},{id:"7",handle:"narasinewsroom",name:"Narasi Newsroom",text:"Wawancara singkat dengan kreator soal perubahan aturan monetisasi di X.",likes:2800,reposts:740,replies:190,views:41e4,sentiment:"neutral",postedAt:"2026-07-22T19:10:00+07:00",url:"https://x.com/narasinewsroom/status/7"},{id:"8",handle:"detikcom",name:"detikcom",text:"Apa yang berubah di monetisasi X? Ringkasan berita untuk kreator.",likes:1900,reposts:52
10,replies:140,views:76e4,sentiment:"neutral",postedAt:"2026-07-21T10:00:00+07:00",url:"https://x.com/detikcom/status/8"}],insights:["Puncak percakapan terjadi 24–25 Jul dengan lonjakan ~400% dibanding awal bulan — perhatian publik naik tajam.","Akun media besar mendominasi jangkauan, sementara kreator niche (Creator Ekonomi ID, XGrind) unggul di frekuensi mention.","Sentimen mayoritas netral–positif; nada negatif terkonsentrasi di keluhan payout dan akses platform."]},st=["shadowban","payout","gajian","monetisasi","verified","algo X","impressions"],M=5,H=3;function D(t){const s=Array.isArray(t)?t.map(a=>String(a||"")):String(t||"").split(/[,;\n|]+/),r=[],o=new Set;for(const a of s){const l=String(a||"").replace(/\s+/g," ").trim().slice(0,40);if(l.length<2)continue;const i=l.toLowerCase();if(!o.has(i)&&(o.add(i),r.push(l),r.length>=M))break}return r}function S(t){const s=Number(t)||0;return Math.abs(s)>=1e9?`${(s/1e9).toFixed(1).replace(/\.0$/,"")}B`:Math.abs(s)>=1e6?`${(s/1e6).toFixed(1).replace(/\.0$/,"")}M`:Math.abs(s)>=1e3?`${(s/1e3).toFixed(s>=1e4?0:1).replace(/\.0$/,"")}K`:s.toLocaleString("id-ID")}function Z(t){return Number(t||0).toLocaleString("id-ID")}function at(t){const s=Number(t);return Number.isFinite(s)?`${s>0?"+":""}${s.toFixed(s%1===0?0:1)}%`:"—"}function W(t){const s={positive:{label:"Positif",color:"#10b981",bg:"bg-emerald-100 dark:bg-emerald-950/60",text:"text-emerald-800 dark:text-emerald-200"},neutral:{label:"Netral",color:"#94a3b8",bg:"bg-slate-100 dark:bg-slate-800",text:"text-slate-700 dark:text-slate-200"},negative:{label:"Negatif",color:"#f43f5e",bg:"bg-rose-100 dark:bg-rose-950/60",text:"text-rose-800 dark:text-rose-200"}};return s[t]||s.neutral}function Ee(t,s){const r=String(t||s||"?").trim(),o=r.split(/\s+/).filter(Boolean);return o.length>=2?(o[0][0]+o[1][0]).toUpperCase():r.slice(0,2).toUpperCase()}function nt(t){if(!t.length)return"";if(t.length===1)return`M ${t[0].x} ${t[0].y}`;let s=`M ${t[0].x} ${t[0].y}`;for(let r=0;r<t.length-1;r+=1){const o=t[r-1]||t[r],a=t[r],l=t[r+1],i=t[r+2]||l,d=a.x+(l.x-o.x)/6,p=a.y+(l.y-o.y)/6,h=l.x-(i.x-a.x)/6,c=l.y-(i.y-a.y)/6;s+=` C ${d} ${p}, ${h} ${c}, ${l.x} ${l.y}`}return s}function Ae({height:t,label:s="Belum ada data grafik."}){return e.jsx("div",{className:`flex items-center justify-center rounded-2xl ${b} bg-white text-xs font-bold dark:bg-slate-950 ${x}`,style:{height:t},children:s})}function oe({label:t,value:s,sub:r}){return e.jsxs("div",{className:`rounded-2xl ${b} bg-white px-3 py-2.5 dark:bg-slate-950 ${O}`,children:[e.jsx("p",{className:`text-[9px] font-black uppercase tracking-[0.14em] ${x}`,children:t}),e.jsx("p",{className:`mt-1 text-xl font-black tabular-nums tracking-tight ${j}`,children:s}),r?e.jsx("p",{className:`mt-0.5 truncate text-[10px] font-semibold ${x}`,children:r}):null]})}function rt({data:t=[],height:s=260}){const r=f.useId().replace(/:/g,""),[o,a]=f.useState(null),{points:l,max:i,peak:d,avg:p,total:h}=f.useMemo(()=>{const u=Array.isArray(t)?t:[];if(!u.length)return{points:[],max:1,peak:null,avg:0,total:0};const N=u.map(C=>Number(C.mentions)||0),P=Math.max(1,...N),y=u.length,E=u.map((C,X)=>{const B=Number(C.mentions)||0,re=y===1?50:X/(y-1)*100,J=88-B/P*72;return{...C,x:re,y:J,v:B}}),L=N.indexOf(Math.max(...N)),_=N.reduce((C,X)=>C+X,0);return{points:E,max:P,peak:E[L],avg:Math.round(_/y),total:_}},[t]);if(!l.length)return e.jsx(Ae,{height:s,label:"Belum ada tren mention."});const c=nt(l),k=`${c} L ${l[l.length-1].x} 100 L ${l[0].x} 100 Z`,m=o!=null?l[o]:d,$=[0,.5,1].map(u=>({y:88-u*72,label:S(Math.round(i*u))}));return e.jsxs("div",{className:"w-full",children:[e.jsxs("div",{className:"mb-4 grid grid-cols-3 gap-2.5",children:[e.jsx(oe,{label:"Puncak",value:S(d?.v),sub:d?.label}),e.jsx(oe,{label:"Rata-rata",value:S(p),sub:"per titik"}),e.jsx(oe,{label:"Total tren",value:S(h),sub:"sample"})]}),e.jsxs("div",{className:`relative overflow-hidden rounded-2xl ${b} bg-white dark:bg-slate-950`,style:{height:s},children:[e.jsx("div",{className:"absolute inset-y-3 left-0 z-[1] flex w-9 flex-col justify-between py-1 pr-1 text-right",children:$.slice().reverse().map(u=>e.jsx("span",{className:`text-[9px] font-bold tabular-nums ${x}`,children:u.label},u.y))}),e.jsx("div",{className:"absolute inset-3 left-9 right-3 bottom-8 top-3",children:e.jsxs("svg",{viewBox:"0 0 100 100",preserveAspectRatio:"none",className:"h-full w-full overflow-visible",children:[e.jsx("defs",{children:e.jsxs("linearGradient",{id:`ksFill-${r}`,x1:"0",y1:"0",x2:"0",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:"#f97316",stopOpacity:"0.28"}),e.jsx("stop",{offset:"100%",stopColor:"#f97316",stopOpacity:"0.02"})]})}),$.map(u=>e.jsx("line",{x1:"0",y1:u.y,x2:"100",y2:u.y,stroke:"currentColor",strokeOpacity:"0.1",strokeWidth:"0.35",strokeDasharray:"1.2 1.8"},u.y)),e.jsx("path",{d:k,fill:`url(#ksFill-${r})`}),e.jsx("path",{d:c,fill:"none",stroke:"#ea580c",strokeWidth:"2.4",strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke"}),d?e.jsxs("g",{children:[e.jsx("line",{x1:d.x,y1:d.y,x2:d.x,y2:"100",stroke:"#ea580c",strokeOpacity:"0.3",strokeWidth:"0.5",strokeDasharray:"1.2 1.2"}),e.jsx("circle",{cx:d.x,cy:d.y,r:"2.8",fill:"#fff7ed",stroke:"#ea580c",strokeWidth:"0.8"})]}):null,l.map((u,N)=>e.jsxs("g",{children:[e.jsx("circle",{cx:u.x,cy:u.y,r:o===N?2.4:1.15,fill:o===N?"#c2410c":"#ea580c",stroke:"#fff",strokeWidth:"0.4"}
1),e.jsx("rect",{x:u.x-4,y:"0",width:"8",height:"100",fill:"transparent",className:"cursor-crosshair",onMouseEnter:()=>a(N),onMouseLeave:()=>a(null)})]},`${u.date||u.label}-${N}`))]})}),m?e.jsxs("div",{className:`pointer-events-none absolute top-3 z-10 min-w-[110px] rounded-xl ${b} bg-white px-3 py-1.5 text-xs font-bold dark:bg-slate-900 ${O}`,style:{left:`clamp(40px, calc(${9+m.x*.85}% ), calc(100% - 130px))`},children:[e.jsx("p",{className:x,children:m.label}),e.jsxs("p",{className:"text-orange-600 dark:text-orange-400",children:[Z(m.v)," mention"]})]}):null,e.jsxs("div",{className:"absolute bottom-2 left-9 right-3 flex justify-between",children:[e.jsx("span",{className:`text-[10px] font-bold ${x}`,children:l[0]?.label}),l.length>2?e.jsx("span",{className:`text-[10px] font-bold ${x}`,children:l[Math.floor(l.length/2)]?.label}):null,e.jsx("span",{className:`text-[10px] font-bold ${x}`,children:l[l.length-1]?.label})]})]})]})}function lt({data:t=[],height:s=320}){const[r,o]=f.useState(null),{rows:a,max:l,totals:i}=f.useMemo(()=>{const k=(Array.isArray(t)?t:[]).map(y=>{let E=Number(y.positive)||0,L=Number(y.neutral)||0,_=Number(y.negative)||0;const C=Number(y.mentions)||0;return E+L+_===0&&C>0&&(L=C),{...y,positive:E,neutral:L,negative:_,total:E+L+_}}),m=Math.max(1,...k.map(y=>y.total));let $=0,u=0,N=0;k.forEach(y=>{$+=y.positive,u+=y.neutral,N+=y.negative});const P=$+u+N||1;return{rows:k,max:m,totals:{positive:Math.round($/P*100),neutral:Math.round(u/P*100),negative:Math.round(N/P*100)}}},[t]);if(!a.length)return e.jsx(Ae,{height:s,label:"Belum ada data tren sentimen."});const d=Math.max(200,s-100),p=r!=null?a[r]:null,h=[l,Math.round(l/2),0];return e.jsxs("div",{className:"w-full",children:[e.jsxs("div",{className:"mb-4 flex flex-wrap items-center justify-between gap-3",children:[e.jsx("div",{className:"flex flex-wrap gap-2",children:[{label:"Positif",pct:i.positive,cls:"bg-emerald-500"},{label:"Netral",pct:i.neutral,cls:"bg-slate-400"},{label:"Negatif",pct:i.negative,cls:"bg-rose-500"}].map(c=>e.jsxs("span",{className:`inline-flex items-center gap-2 rounded-full px-2.5 py-1 text-[10px] font-black uppercase tracking-wide ${b} bg-white dark:bg-slate-950`,children:[e.jsx("span",{className:`h-2 w-2 rounded-sm ${c.cls}`}),c.label,e.jsxs("span",{className:`tabular-nums ${x}`,children:[c.pct,"%"]})]},c.label))}),e.jsxs("div",{className:`flex h-2.5 w-full max-w-[200px] overflow-hidden rounded-full ${b} bg-slate-100 dark:bg-slate-800`,children:[e.jsx("div",{className:"bg-emerald-500",style:{width:`${i.positive}%`}}),e.jsx("div",{className:"bg-slate-400",style:{width:`${i.neutral}%`}}),e.jsx("div",{className:"bg-rose-500",style:{width:`${i.negative}%`}})]})]}),e.jsxs("div",{className:`relative rounded-2xl ${b} bg-white p-3 dark:bg-slate-950 sm:p-4`,children:[e.jsxs("div",{className:"flex gap-2 sm:gap-3",children:[e.jsx("div",{className:"flex w-8 shrink-0 flex-col justify-between py-1 text-right",style:{height:d},children:h.map(c=>e.jsx("span",{className:`text-[9px] font-bold tabular-nums ${x}`,children:S(c)},c))}),e.jsxs("div",{className:"relative min-w-0 flex-1",children:[e.jsx("div",{className:"pointer-events-none absolute inset-0 flex flex-col justify-between",style:{height:d},"aria-hidden":!0,children:[0,1,2].map(c=>e.jsx("div",{className:"border-t border-dashed border-slate-200 dark:border-slate-700"},c))}),e.jsx("div",{className:"relative flex items-end justify-between gap-1.5 sm:gap-2.5",style:{height:d},children:a.map((c,k)=>{const m=c.total||0,$=m>0?Math.max(10,Math.round(m/l*d)):0,u=m?Math.round(c.positive/m*$):0,N=m?Math.round(c.neutral/m*$):0,P=Math.max(0,$-u-N),y=r===k;return e.jsx("div",{className:"flex h-full min-w-0 flex-1 flex-col items-center justify-end",onMouseEnter:()=>o(k),onMouseLeave:()=>o(null),children:m>0?e.jsxs("div",{className:`flex w-full max-w-[42px] flex-col-reverse overflow-hidden rounded-t-lg ${b} border-b-0 transition ${y?"brightness-95 ring-2 ring-slate-900 dark:ring-indigo-400":""}`,style:{height:$},title:`${c.label}: ${m}`,children:[e.jsx("div",{className:"w-full bg-rose-500",style:{height:P}}),e.jsx("div",{className:"w-full bg-slate-400",style:{height:N}}),e.jsx("div",{className:"w-full bg-emerald-500",style:{height:u}})]}):e.jsx("div",{className:`w-full max-w-[42px] rounded-t-md ${b}
1 bg-slate-100 dark:bg-slate-800`,style:{height:6}})},c.date||c.label||k)})}),e.jsx("div",{className:"mt-2 flex justify-between gap-1",children:a.map((c,k)=>e.jsx("span",{className:`min-w-0 flex-1 truncate text-center text-[9px] font-bold ${r===k?j:x}`,children:c.label},`lbl-${c.date||k}`))})]})]}),p?e.jsxs("div",{className:`mt-3 rounded-xl ${b} bg-slate-50 px-3 py-2 text-xs font-bold dark:bg-slate-900 ${O}`,children:[e.jsxs("p",{className:`mb-1 ${x}`,children:[p.label," · total ",Z(p.total)]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs("span",{className:"text-emerald-600",children:["Positif ",Z(p.positive)]}),e.jsxs("span",{className:"text-slate-500",children:["Netral ",Z(p.neutral)]}),e.jsxs("span",{className:"text-rose-600",children:["Negatif ",Z(p.negative)]})]})]}):e.jsx("p",{className:`mt-3 text-[10px] font-semibold ${x}`,children:"Arahkan ke batang untuk detail harian."})]})]})}function it({slices:t=[],score:s,label:r}){const o=(t||[]).filter(m=>m.value>0),a=o.reduce((m,$)=>m+$.value,0)||1,l=34,i=2*Math.PI*l;let d=0;const p=3.5,h=o.map(m=>{const $=Math.max(0,m.value/a*i-p),u={...m,dash:`${$} ${i-$}`,offset:d};return d+=m.value/a*i,u}),c=Number(s),k=Number.isFinite(c)?Math.max(0,Math.min(100,c)):50;return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-col items-center gap-5 sm:flex-row sm:items-center",children:[e.jsxs("div",{className:"relative h-[150px] w-[150px] shrink-0",children:[e.jsxs("svg",{viewBox:"0 0 100 100",className:"h-full w-full -rotate-90",children:[e.jsx("circle",{cx:"50",cy:"50",r:l,fill:"none",stroke:"currentColor",strokeOpacity:"0.08",strokeWidth:"12"}),h.map(m=>e.jsx("circle",{cx:"50",cy:"50",r:l,fill:"none",stroke:m.color,strokeWidth:"12",strokeDasharray:m.dash,strokeDashoffset:-m.offset,strokeLinecap:"round"},m.key))]}),e.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center",children:[e.jsx("p",{className:`text-[10px] font-black uppercase tracking-[0.14em] ${x}`,children:"Skor"}),e.jsx("p",{className:`text-3xl font-black tabular-nums leading-none ${j}`,children:s??"—"}),e.jsx("p",{className:`mt-1 max-w-[5.5rem] text-center text-[9px] font-bold leading-tight ${x}`,children:r||"—"})]})]}),e.jsx("div",{className:"w-full min-w-0 flex-1 space-y-3",children:o.map(m=>e.jsxs("div",{children:[e.jsxs("div",{className:"mb-1 flex items-center justify-between gap-2",children:[e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-xs font-bold",children:[e.jsx("span",{className:"h-2.5 w-2.5 rounded-full",style:{background:m.color}}),e.jsx("span",{className:j,children:m.name})]}),e.jsxs("span",{className:`text-xs font-black tabular-nums ${j}`,children:[m.value,"%"]})]}),e.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-slate-100 dark:bg-slate-800",children:e.jsx("div",{className:"h-full rounded-full",style:{width:`${m.value}%`,background:m.color}})})]},m.key))})]}),e.jsxs("div",{className:`rounded-2xl px-3.5 py-3 ${b} bg-slate-50 dark:bg-slate-900`,children:[e.jsxs("div",{className:"mb-2 flex items-center justify-between",children:[e.jsx("p",{className:`text-[10px] font-black uppercase tracking-[0.14em] ${x}`,children:"Indikator skor"}),e.jsxs("p",{className:`text-xs font-black tabular-nums ${j}`,children:[k,"/100"]})]}),e.jsx("div",{className:"relative h-2.5 overflow-hidden rounded-full bg-white dark:bg-slate-950",children:e.jsx("div",{className:"absolute inset-y-0 left-0 rounded-full bg-orange-500",style:{width:`${k}%`}})})]})]})}function ot({name:t,handle:s,avatar:r,size:o=44}){const[a,l]=f.useState(!1),i=r&&!a?r:"";return e.jsx("div",{className:`flex shrink-0 items-center justify-center overflow-hidden rounded-2xl font-black ${b} bg-sky-100 text-slate-900 dark:bg-sky-950 dark:text-slate-100`,style:{width:o,height:o,fontSize:Math.max(11,o*.3)},children:i?e.jsx("img",{src:i,alt:"",className:"h-full w-full object-cover",onError:()=>l(!0)}):Ee(t,s)})}function ct({influencers:t=[],limit:s=12}){const r=(t||[]).slice(0,s);if(!r.length)return e.jsx("p",{className:`py-10 text-center text-sm font-semibold ${x}`,children:"Belum ada data pengaruh."});const o=Math.max(1,...r.map(a=>a.engagement||0));return e.jsx("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",children:r.map((a,l)=>
1{const i=W(a.sentiment),d=Number(a.tweets??a.mentions)||0,p=Math.round((a.engagement||0)/o*100),h=Array.isArray(a.keywords)?a.keywords.slice(0,2):[];return e.jsxs("a",{href:`https://x.com/${a.handle}`,target:"_blank",rel:"noreferrer",className:`group relative flex flex-col overflow-hidden rounded-2xl ${b} bg-white p-3.5 transition hover:-translate-y-0.5 dark:bg-slate-950 ${O}`,children:[e.jsx("div",{className:"absolute inset-x-0 top-0 h-1",style:{background:i.color},"aria-hidden":!0}),e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsxs("div",{className:"relative",children:[e.jsx(ot,{name:a.name,handle:a.handle,avatar:a.avatar,size:46}),e.jsx("span",{className:`absolute -left-1.5 -top-1.5 flex h-6 w-6 items-center justify-center rounded-full text-[10px] font-black ${b} bg-slate-900 text-white dark:bg-indigo-600`,children:l+1})]}),e.jsxs("div",{className:"min-w-0 flex-1 pt-0.5",children:[e.jsx("p",{className:`truncate text-[13px] font-black leading-tight ${j}`,children:a.name}),e.jsxs("p",{className:`truncate text-[11px] font-semibold ${x}`,children:["@",a.handle]}),e.jsx("span",{className:`mt-1.5 inline-flex rounded-full px-2 py-0.5 text-[9px] font-black uppercase tracking-wide ${i.bg} ${i.text}`,children:i.label})]})]}),h.length?e.jsx("div",{className:"mt-2 flex flex-wrap gap-1",children:h.map(c=>e.jsx("span",{className:`rounded-md px-1.5 py-0.5 text-[9px] font-bold ${b} bg-orange-50 text-slate-800 dark:bg-orange-950/40 dark:text-orange-100`,children:c},c))}):null,e.jsx("div",{className:"mt-3 grid grid-cols-3 gap-1.5",children:[{k:"Followers",v:S(a.followers)},{k:"Engage",v:S(a.engagement)},{k:"Tweet",v:S(d),hint:"Jumlah post yang memuat keyword"}].map(c=>e.jsxs("div",{className:`rounded-xl px-1.5 py-1.5 text-center ${b} bg-slate-50 dark:bg-slate-900`,title:c.hint,children:[e.jsx("p",{className:`text-[8px] font-black uppercase tracking-wide ${x}`,children:c.k}),e.jsx("p",{className:`mt-0.5 text-[12px] font-black tabular-nums ${j}`,children:c.v})]},c.k))}),e.jsxs("div",{className:"mt-3",children:[e.jsxs("div",{className:"mb-1 flex justify-between text-[10px] font-bold",children:[e.jsx("span",{className:x,children:"Share engage"}),e.jsxs("span",{className:`tabular-nums ${j}`,children:[p,"%"]})]}),e.jsx("div",{className:"h-1.5 overflow-hidden rounded-full bg-slate-100 dark:bg-slate-800",children:e.jsx("div",{className:"h-full rounded-full bg-sky-500",style:{width:`${p}%`}})})]})]},a.handle||l)})})}const dt=!1,xe="xgrind:keyword-sentiment:pending",mt=2500,xt=80;async function Te(t,s={},r=2e4){const o=new AbortController,a=setTimeout(()=>o.abort(),r);try{const l=await fetch(t,{cache:"no-store",...s,signal:s.signal||o.signal,headers:{Accept:"application/json",...s.headers||{}}}),i=await l.text();let d={};try{d=i?JSON.parse(i):{}}catch{d={}}return{res:l,json:d}}finally{clearTimeout(a)}}function ce(t,s){const r=String(s?.message||s?.detail||s?.error||"").trim();return r||(t?.status===404?"Analisis kedaluwarsa — mulai lagi.":t?.status===503?"Banyak yang memindai — tunggu sebentar.":t?.status===504||t?.status===408?"Server sibuk — coba lagi sebentar.":"Gagal menganalisis keyword.")}function de(t){try{localStorage.setItem(xe,JSON.stringify(t))}catch{}}function Pe(){try{const t=localStorage.getItem(xe);if(!t)return null;const s=JSON.parse(t);return s?.jobId?s:null}catch{return null}}function Y(){try{localStorage.removeItem(xe)}catch{}}async function ut(t,{days:s=3,lang:r="all",fresh:o=!1,signal:a}={}){const l=D(t);if(!l.length)throw new Error("Masukkan keyword dulu.");if(l.length>M)throw new Error(`Maksimal ${M} keyword.`);if(dt){if(await new Promise(m=>setTimeout(m,400)),a?.aborted){const m=new Error("Dibatalkan");throw m.name="AbortError",m}return{status:"done",jobId:"ks-demo",result:{...Se,keyword:l.join(" · "),keywords:l,scannedAt:new Date().toISOString(),source:"demo"},isCached:!0}}const i=we(),d=new URLSearchParams({q:l.join(","),days:String(Math.max(1,Math.min(30,Number(s)||3))),lang:String(r||"all")});o&&d.set("fresh","true");const p=`${i}/keyword-sentiment/start?${d}`;let h,c;try{({res:h,json:c}=await Te(p,{method:"POST",signal:a},25e3))}catch(m){throw m?.name==="AbortError"?m:new Error("Koneksi terputus — cek jaringan lalu coba lagi.")}if(!h.ok)throw new Error(ce(h,c));const k=String(c?.status||"");if(k==="done"&&(c?.result||c?.data))return{status:"done",jobId:c?.job_id?String(c.job_id):null,result:c.result||c.data,isCached:!!c?.is_cached};if((k==="queued"||k==="running")&&c?.job_id)return{status:k,jobId:String(c.job_id),progress:Number(c.progress)||0,progressText:c.progress_text||"Sedang menganalisis…",deduped:!!c.deduped};throw new Error("Respons analisis tidak dikenali — coba lagi.")}async function pt(t,{signal:s}={}){const r=String(t||"").trim();if(!r)throw new Error("Job tidak valid.");const a=`${we()}/keyword-sentiment/status/${encodeURIComponent(r)}`;let l,i;try{({res:l,json:i}=await Te(a,{method:"GET",signal:s},2e4))}catch(d){throw d?.name==="AbortError"?d:new Error("Gagal cek status analisis.")}
1if(l.status===404){const d=new Error(ce(l,i));throw d.name="JobExpiredError",d.status=404,d}if(!l.ok)throw new Error(ce(l,i));return i}async function Me(t,{signal:s,onProgress:r,pollMs:o=mt}={}){let a=8;for(let l=0;l<xt;l+=1){if(s?.aborted){const h=new Error("Dibatalkan");throw h.name="AbortError",h}const i=await pt(t,{signal:s}),d=Number(i?.progress)||0;d>a?a=d:(String(i?.status)==="running"||String(i?.status)==="queued")&&(a=Math.min(92,a+2)),r?.({...i,progress:String(i?.status)==="done"?100:a,progress_text:i?.progress_text||"Sedang menganalisis…"});const p=String(i?.status||"");if(p==="done"){const h=i.result||i.data;if(!h)throw new Error("Hasil kosong — coba analisis ulang.");return h}if(p==="error")throw new Error(i.error||i.progress_text||"Analisis gagal.");await new Promise(h=>setTimeout(h,o))}throw new Error("Analisis terlalu lama — buka lagi halaman ini atau mulai ulang.")}async function gt(t,s={}){const r=D(t),o=s.days??3,a=s.lang??"all",l=!!s.fresh,i=s.signal,d=s.onProgress,p=await ut(r,{days:o,lang:a,fresh:l,signal:i});if(p.status==="done"&&p.result)return Y(),p.result;const h=p.jobId;if(!h)throw new Error("Job tidak dibuat — coba lagi.");de({jobId:h,keywords:r,days:o,lang:a,startedAt:new Date().toISOString(),progress:p.progress||2,progressText:p.progressText||"Antrian analisis…"}),d?.({status:p.status,progress:p.progress||2,progress_text:p.progressText,job_id:h});try{const c=await Me(h,{signal:i,onProgress:k=>{de({jobId:h,keywords:r,days:o,lang:a,startedAt:Pe()?.startedAt||new Date().toISOString(),progress:Number(k?.progress)||0,progressText:k?.progress_text||""}),d?.(k)}});return Y(),c}catch(c){throw c?.name==="JobExpiredError"&&Y(),c}}const ue="xgrind:keyword-sentiment:history",Q=5;function ht(t){if(!t||typeof t!="object")return null;const s=Array.isArray(t.tweets)?t.tweets.slice(0,40):[],r=Array.isArray(t.influencers)?t.influencers.slice(0,12):[],o=Array.isArray(t.mentionTrend)?t.mentionTrend.slice(0,31):[],a=Array.isArray(t.insights)?t.insights.slice(0,8):[];return{...t,tweets:s,influencers:r,mentionTrend:o,insights:a}}function bt(t,s,r){return`${D(t).map(a=>a.toLowerCase()).sort().join("|")}::${Number(s)||3}::${String(r||"all")}`}function q(){try{const t=localStorage.getItem(ue);if(!t)return[];const s=JSON.parse(t);return Array.isArray(s)?s.filter(r=>r&&Array.isArray(r.keywords)&&r.keywords.length&&r.data).slice(0,Q):[]}catch{return[]}}function Ce(t){try{localStorage.setItem(ue,JSON.stringify(t.slice(0,Q)))}catch{}}function ft({keywords:t,days:s,lang:r,data:o}){const a=D(t?.length?t:o?.keywords);if(!a.length||!o)return q();const l=ht(o);if(!l)return q();const i=Number(s)||3,d=String(r||"all"),p=bt(a,i,d),h={id:`${Date.now()}-${p.slice(0,24)}`,fingerprint:p,keywords:a,days:i,lang:d,label:a.join(" · "),scannedAt:o.scannedAt||new Date().toISOString(),tweetCount:Number(o.tweet_count??l.tweets?.length)||0,data:l},c=q().filter(m=>m.fingerprint!==p),k=[h,...c].slice(0,Q);return Ce(k),k}function kt(t){const s=q().filter(r=>r.id!==t);return Ce(s),s}function wt(){try{localStorage.removeItem(ue)}catch{}return[]}function yt(t){if(!t)return"";try{const s=new Date(t);return Number.isNaN(s.getTime())?"":s.toLocaleString("id-ID",{day:"numeric",month:"short",hour:"2-digit",minute:"2-digit"})}catch{return""}}const vt="bg-white dark:bg-gradient-to-b dark:from-slate-950 dark:via-slate-950 dark:to-indigo-950/25",jt=(t,s)=>t==="PRO"||t==="MASTERY"||s,Nt="/keyword-sentiment",$t=[{key:"overview",label:"Ringkasan",active:"bg-orange-300 dark:bg-orange-900/85 text-slate-900 dark:text-orange-50"},{key:"trend",label:"Tren",active:"bg-sky-300 dark:bg-sky-900/85 text-slate-900 dark:text-sky-50"},{key:"influencers",label:"Pengaruh",active:"bg-violet-300 dark:bg-violet-900/85 text-slate-900 dark:text-violet-50"},{key:"tweets",label:"Daftar Tweet",active:"bg-emerald-300 dark:bg-emerald-900/85 text-slate-900 dark:text-emerald-50"}];function St({name:t,handle:s,avatar:r,size:o=36,className:a=""}){const[l,i]=f.useState(!1),d=`${o}px`,p=r&&!l?r:"";return e.jsx("div",{className:`flex shrink-0 items-center justify-center overflow-hidden rounded-full font-black ${b} bg-sky-100 text-slate-900 dark:bg-sky-950 dark:text-slate-100 ${a}`,style:{width:d,height:d,fontSize:Math.max(10,o*.32)},title:`@${s}`,children:p?e.jsx("img",{src:p,alt:"",className:"h-full w-full object-cover",onError:()=>i(!0)}):Ee(t,s)})}function ne({label:t,value:s,deltaPct:r,icon:o,accent:a}){const l=Number(r)>0,i=Number(r)<0;return e.jsxs("div",{className:`group rounded-2xl ${R} ${K} p-4 relative overflow-hidden transition hover:-translate-y-0.5`,children:[e.jsx("div",{className:`absolute -right-3 -top-3 h-16 w-16 rounded-full opacity-40 transition group-hover:opacity-60 ${a}`,"aria-hidden":!0}),e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("p",{className:`text-[10px] font-black uppercase tracking-wider ${x}`,children:t}),o?e.jsx("span",{className:`rounded-lg p-1.5 ${b} ${a}`,children:e.jsx(o,{className:"h-3.5 w-3.5 text-slate-900 dark:text-slate-100"})}):null]}),e.jsx("p",{className:`mt-2 text-2xl font-black tabular-nums tracking-tight ${j}`,children:s}),e.jsxs("div",{className:"mt-1.5 flex items-center gap-1",children:[l?e.jsx(Ze,{className:"h-3.5 w-3.5 text-emerald-600"}):null,i?e.jsx(Qe,{className:"h-3.5 w-3.5 text-rose-600"}):null,e.jsx("span",{className:`text-xs font-black tabular-nums ${l?"text-emerald-600":i?"text-rose-600":x}`,children:at(r)}),e.jsx("span",{className:`text-[10px] font-semibold ${x}`,children:"vs sebelumnya"})]})]})}function Et({sentiment:t}){const s=W(t);return e.jsx("span",{className:`inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-black uppercase tracking-wide ${b} ${s.bg} ${s.text}`,children:s.label})}function At(){return e.jsxs("div",{className:`mt-4 rounded-2xl ${R} ${K} px-5 py-12 text-center`,children:[e.jsx("div",{className:`mx-auto mb-3 flex h-12 w-12 items-center justify-center rounded-2xl ${b} bg-orange-200 dark:bg-orange-950/70`,children:e.jsx(ye,{className:"h-5 w-5 text-slate-900 dark:text-orange-100"})}),e.jsx("p",{className:`text-base font-black ${j}`,children:"Belum ada hasil"}),e.jsxs("p",{className:`mx-auto mt-1.5 max-w-md text-sm font-semibold ${G}`,children:["Tambahkan 1–3 keyword dulu (mis. payout), lalu ketuk Analisis. Hasil tersimpan di Riwayat (maks ",Q,")."]})]})}function Tt({message:t,onRetry:s,busy:r}){return e.jsxs("div",{className:`mt-4 rounded-2xl ${b} bg-rose-50 p-5 dark:border-rose-500/40 dark:bg-rose-950/40 ${K}`,children:[e.jsx("p",{className:"text-sm font-black text-rose-800 dark:text-rose-200",children:"Analisis belum berhasil"}),e.jsx("p",{className:"mt-1.5 text-xs font-semibold leading-relaxed text-rose-700/90 dark:text-rose-200/90",children:t}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-2",children:[e.jsxs("button",{type:"button",disabled:r,onClick:s,className:`inline-flex items-center gap-1.5 rounded-xl px-4 py-2 text-xs font-black ${b} bg-slate-900 text-white ${O} disabled:opacity-60 dark:bg-indigo-600`,children:[r?e.jsx(me,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(ve,{className:"h-3.5 w-3.5"}),"Coba lagi"]}),e.jsx("p",{className:`self-center text-[11px] font-semibold ${x}`,children:"Tips: mulai 1–2 keyword, bahasa Semua."})]})]})}function Pt({progressPct:t=0,progressText:s=""}){const r=Math.max(0,Math.min(100,Number(t)||0));return e.jsxs("div",{className:`mt-4 rounded-2xl ${R} ${K} px-5 py-12 text-center`,children:[e.jsx(me,{className:"mx-auto mb-3 h-8 w-8 animate-spin text-orange-500"}),e.jsx("p",{className:`text-base font-black ${j}`,children:"Sedang menganalisis…"}),e.jsx("p",{className:`mx-auto mt-1.5 max-w-md text-sm font-semibold ${G}`,children:s||"Mengumpulkan percakapan. Boleh tinggalkan halaman — hasil tersimpan."}),e.jsx("div",{className:`mx-auto mt-4 h-2.5 w-full max-w-sm overflow-hidden rounded-full ${b}
1 bg-slate-100 dark:bg-slate-800`,children:e.jsx("div",{className:"h-full rounded-full bg-orange-500 transition-all duration-500",style:{width:`${r||8}%`}})}),e.jsxs("p",{className:`mt-2 text-[11px] font-bold tabular-nums ${x}`,children:[r||8,"%"]})]})}function Mt(t,s=[]){const r=String(t||""),o=(s||[]).map(d=>String(d||"").trim()).filter(d=>d.length>=2);if(!o.length)return r;const a=o.slice().sort((d,p)=>p.length-d.length).map(d=>d.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),l=new RegExp(`(${a.join("|")})`,"gi");return r.split(l).map((d,p)=>o.some(c=>c.toLowerCase()===d.toLowerCase())?e.jsx("mark",{className:"rounded px-0.5 bg-orange-200/90 font-bold text-slate-900 dark:bg-orange-500/35 dark:text-orange-50",children:d},`t-${p}`):e.jsx("span",{children:d},`t-${p}`))}function Ct({tweet:t}){const s=W(t.sentiment),r=t.matchedKeywords||[];return e.jsxs("article",{className:`relative overflow-hidden rounded-2xl ${b} bg-white dark:bg-slate-950 ${O}`,children:[e.jsx("div",{className:"absolute inset-y-0 left-0 w-1.5",style:{background:s.color},"aria-hidden":!0}),e.jsxs("div",{className:"flex items-start gap-3 p-3.5 pl-4 sm:p-4 sm:pl-5",children:[e.jsx(St,{name:t.name,handle:t.handle,avatar:t.avatar,size:40}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-1",children:[e.jsx("p",{className:`truncate text-sm font-black ${j}`,children:t.name}),e.jsxs("span",{className:`truncate text-xs font-semibold ${x}`,children:["@",t.handle]}),e.jsx(Et,{sentiment:t.sentiment}),r.slice(0,2).map(o=>e.jsx("span",{className:`rounded-md px-1.5 py-0.5 text-[10px] font-black uppercase tracking-wide ${b} bg-orange-100 text-orange-900 dark:bg-orange-950/70 dark:text-orange-100`,children:o},o))]}),e.jsx("p",{className:`mt-2 text-[13px] leading-relaxed sm:text-sm ${G}`,children:Mt(t.text,r)}),e.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-2 border-t border-slate-200/80 pt-2.5 dark:border-slate-800",children:[e.jsxs("span",{className:`inline-flex items-center gap-1 rounded-lg px-2 py-1 text-[11px] font-bold ${x} bg-slate-50 dark:bg-slate-900`,children:[e.jsx(Ne,{className:"h-3.5 w-3.5 text-rose-500"}),S(t.likes)]}),e.jsxs("span",{className:`inline-flex items-center gap-1 rounded-lg px-2 py-1 text-[11px] font-bold ${x} bg-slate-50 dark:bg-slate-900`,children:[e.jsx(et,{className:"h-3.5 w-3.5 text-emerald-600"}),S(t.reposts)]}),e.jsxs("span",{className:`inline-flex items-center gap-1 rounded-lg px-2 py-1 text-[11px] font-bold ${x} bg-slate-50 dark:bg-slate-900`,children:[e.jsx(je,{className:"h-3.5 w-3.5 text-sky-600"}),S(t.replies)]}),e.jsxs("span",{className:`inline-flex items-center gap-1 rounded-lg px-2 py-1 text-[11px] font-bold ${x} bg-slate-50 dark:bg-slate-900`,children:[e.jsx($e,{className:"h-3.5 w-3.5"}),S(t.views)]}),e.jsxs("a",{href:t.url,target:"_blank",rel:"noreferrer",className:`ml-auto inline-flex items-center gap-1 rounded-lg px-2.5 py-1 text-[11px] font-black ${b} bg-sky-100 text-sky-900 hover:bg-sky-200 dark:bg-sky-950/60 dark:text-sky-100`,children:["Buka di X ",e.jsx(tt,{className:"h-3 w-3"})]})]})]})]})]})}function Kt(){const{tier:t,isAdmin:s,loading:r}=Re(),o=jt(t,s),[a,l]=f.useState([]),[i,d]=f.useState(""),[p,h]=f.useState(H),[c,k]=f.useState("id"),[m,$]=f.useState(null),[u,N]=f.useState(!1),[P,y]=f.useState(""),[E,L]=f.useState("overview"),[_,C]=f.useState("all"),[X,B]=f.useState(()=>q()),[re,J]=f.useState(null),[_e,F]=f.useState(""),[Ie,U]=f.useState(0),z=f.useRef(null),pe=f.useRef(!1),ee=f.useCallback(n=>{const g=D([...a,n]);if(g.length===a.length){const v=String(n||"").trim();return v&&a.some(T=>T.toLowerCase()===v.toLowerCase())?y("Keyword sudah ditambahkan."):a.length>=M?y(`Maksimal ${M} keyword.`):v.length<2&&y("Keyword terlalu pendek."),!1}return l(g),d(""),y(""),!0},[a]),ge=f.useCallback(n=>{l(g=>g.filter(v=>v.toLowerCase()!==String(n).toLowerCase()))},[]),te=f.useCallback((n,g,v,T)=>{$(n);const I=Array.isArray(n?.keywords)&&n.keywords.length?D(n.keywords):D(T);I.length&&l(I),h(g),k(v),L("overview");const V=ft({keywords:I,days:g,lang:v,data:n});B(V),J(V[0]?.id||null)},[]),he=f.useCallback(async(n,g={})=>{const v=D(n?.length?n:a);if(!v.length){y("Tambahkan minimal 1 keyword.");return}const T=s?g.days??p:H,I=g.lang??c;z.current?.abort();const V=new AbortController;z.current=V,N(!0),y(""),J(null),U(4),F("Memulai analisis…");try{const ae=await gt(v,{days:T,lang:I,fresh:!!g.fresh,signal:V.signal,onProgress:fe=>{U(Number(fe?.progress)||8),F(fe?.progress_text||"Sedang menganalisis…")}});te(ae,T,I,v),U(100),F("Selesai")}catch(ae){if(ae?.name==="AbortError")return;y(ae?.message||"Gagal menganalisis keyword.")}finally{N(!1)}},[a,p,c,s,te]),se=f.useCallback(n=>{n?.data&&(z.current?.abort(),Y(),N(!1),y(""),F(""),U(0),l(D(n.keywords)),h(Number(n.days)||H),k(String(n.lang||"all")),$(n.data),J(n.id),L("overview"),C("all"))},[]),De=f.useCallback((n,g)=>{g?.stopPropagation?.();const v=kt(n);B(v),J(T=>T===n?null:T)},[]),Oe=f.useCallback(()=>{B(wt()),J(null)},[]);f.useEffect(()=>()=>z.current?.abort(),[]),f.useEffect(()=>{if(pe.current||r||!o)return;pe.current=!0;const n=q();B(n);const g=Pe();
1if(g?.jobId){l(D(g.keywords)),h(Number(g.days)||H),k(String(g.lang||"all")),N(!0),U(Number(g.progress)||8),F(g.progressText||"Melanjutkan analisis…");const v=new AbortController;z.current=v,(async()=>{try{const T=await Me(g.jobId,{signal:v.signal,onProgress:I=>{U(Number(I?.progress)||8),F(I?.progress_text||"Sedang menganalisis…"),de({...g,progress:Number(I?.progress)||0,progressText:I?.progress_text||""})}});te(T,Number(g.days)||H,String(g.lang||"all"),g.keywords),Y()}catch(T){if(T?.name==="AbortError")return;Y(),y(T?.message||"Analisis sebelumnya gagal — mulai ulang."),n[0]&&se(n[0])}finally{N(!1)}})();return}n.length&&se(n[0])},[r,o,se,te]);const A=!r&&!o,w=A?Se:m,le=w?.keyword||(Array.isArray(w?.keywords)&&w.keywords.length?w.keywords.join(" · "):null)||(a.length?a.join(" · "):"—"),Le=f.useMemo(()=>{const n=w?.sentiment||{};return[{name:"Positif",key:"positive",value:n.positive||0,color:W("positive").color},{name:"Netral",key:"neutral",value:n.neutral||0,color:W("neutral").color},{name:"Negatif",key:"negative",value:n.negative||0,color:W("negative").color}].filter(g=>g.value>0)},[w]),be=f.useMemo(()=>{const n=w?.tweets||[];return _==="all"?n:n.filter(g=>g.sentiment===_)},[w,_]);return e.jsx("div",{className:`min-h-screen ${vt} pb-24`,children:e.jsxs("div",{className:"mx-auto max-w-6xl px-3 pt-4 sm:px-5 sm:pt-6",children:[e.jsx("header",{className:`relative overflow-hidden rounded-[1.75rem] ${R} ${K} p-5 sm:p-7`,children:e.jsxs("div",{className:"relative",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("span",{className:`inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-[10px] font-black uppercase tracking-[0.16em] ${b} bg-orange-200 text-slate-900 dark:bg-orange-950/80 dark:text-orange-100`,children:[e.jsx(Be,{className:"h-3 w-3"})," Tren X"]}),e.jsxs("span",{className:`inline-flex items-center gap-1 rounded-full px-2.5 py-1 text-[10px] font-black uppercase tracking-wider ${b} bg-yellow-300 text-slate-900`,children:[e.jsx(Je,{className:"h-3 w-3"})," PRO"]})]}),e.jsx("h1",{className:`mt-3 text-2xl font-black tracking-tight sm:text-3xl ${j}`,children:"Sentimen Keyword"}),e.jsxs("p",{className:`mt-1.5 max-w-xl text-sm font-semibold leading-snug ${G}`,children:["Pantau volume & nada percakapan di X untuk keyword pilihanmu.",s?"":` Rentang ${H} hari · maks ${M} keyword.`]}),e.jsxs("form",{className:`mt-5 space-y-3 rounded-[1.35rem] ${b} bg-white/75 p-3 shadow-inner dark:bg-slate-950/55 sm:p-4`,onSubmit:n=>{if(n.preventDefault(),!o)return;let g=a;if(i.trim()){const v=D([...a,i]);if(v.length===a.length&&i.trim()){ee(i);return}g=v,l(g),d("")}he(g,{fresh:!0})},children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 px-0.5",children:[e.jsxs("p",{className:`text-[10px] font-black uppercase tracking-[0.14em] ${x}`,children:["Keyword · ",a.length,"/",M]}),a.length>0&&!A?e.jsx("button",{type:"button",disabled:u,onClick:()=>l([]),className:`text-[10px] font-bold underline-offset-2 hover:underline ${x}`,children:"Hapus semua"}):null]}),e.jsxs("div",{className:`${ie} flex min-h-[3.25rem] flex-wrap items-center gap-1.5 rounded-2xl bg-[#FFFDF8] px-3 py-2 dark:bg-slate-900 ${A?"opacity-70":""}`,children:[a.map(n=>e.jsxs("span",{className:`inline-flex items-center gap-1 rounded-xl px-2.5 py-1 text-[11px] font-black ${b} bg-orange-200/90 text-slate-900 dark:bg-orange-950/80 dark:text-orange-100`,children:[n,e.jsx("button",{type:"button","aria-label":`Hapus ${n}`,disabled:u||A,onClick:()=>ge(n),className:"rounded-md p-0.5 hover:bg-black/10 dark:hover:bg-white/10",children:e.jsx(Fe,{className:"h-3 w-3"})})]},n)),e.jsxs("div",{className:"relative min-w-[9rem] flex-1",children:[e.jsx(ye,{className:`pointer-events-none absolute left-1 top-1/2 h-3.5 w-3.5 -translate-y-1/2 ${x}`}),e.jsx("input",{value:i,onChange:n=>d(n.target.value),onKeyDown:n=>{A||(n.key==="Enter"&&i.trim()?(n.preventDefault(),ee(i)):n.key==="Backspace"&&!i&&a.length&&ge(a[a.length-1]))},placeholder:A?"Upgrade PRO untuk analisis live…":a.length>=M?`Maks ${M} keyword`:a.length?"Tambah keyword…":"Contoh: payout, gajian…",className:"w-full bg-transparent py-1.5 pl-6 pr-2 text-sm font-semibold outline-none placeholder:opacity-55",disabled:u||A||a.length>=M})]}),!A&&i.trim()&&a.length<M?e.jsxs("button",{type:"button",disabled:u,onClick:()=>ee(i),className:`inline-flex items-center gap-1 rounded-xl px-2.5 py-1 text-[11px] font-black ${b} bg-white dark:bg-slate-800`,children:[e.jsx(Ue,{className:"h-3 w-3"})," Tambah"]}):null]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-[7.5rem_9rem_minmax(0,1fr)]",children:[e.jsxs("select",{value:p,onChange:n=>h(Number(n.target.value)),disabled:u||A||!s,className:`${ie} rounded-xl px-3 py-2.5 text-sm font-bold`,"aria-label":"Rentang hari",title:s?void 0:`PRO: maksimal ${H} hari`,children:[e.jsx("option",{value:3,children:"3 hari"}),s?e.jsxs(e.Fragment,{children:[e.jsx("option",{value:7,children:"7 hari"}),e.jsx("option",{value:14,children:"14 hari"}),e.jsx("option",{value:30,children:"30 hari"})]}):null]}),e.jsxs("select",{value:c,onChange:n=>k(n.target.value),disabled:u||A,className:`${ie} rounded-xl px-3 py-2.5 text-sm font-bold`,"aria-label":"Bahasa",children:[e.jsx("option",{value:"id",children:"Bahasa ID"}),e.jsx("option",{value:"en",children:"English"}),e.jsx("option",{value:"all",children:"Semua bahasa"})]}),A?e.jsx(He,{label:"Analisis",className:"col-span-2 sm:col-span-1"}):e.jsxs("button",{type:"submit",disabled:u||!a.length&&!i.trim(),className:`col-span-2 inline-flex items-center justify-center gap-2 rounded-xl px-5 py-2.5 text-sm font-black ${b} bg-slate-900 text-white ${O} transition hover:-translate-y-0.5 disabled:opacity-60 dark:bg-indigo-600 sm:col-span-1`,children:[u?e.jsx(me,{className:"h-4 w-4 animate-spin"}):e.jsx(ve,{className:"h-4 w-4"}),u?"Menganalisis…":"Analisis"]})]}),A?null:e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5 border-t border-dashed border-slate-300/80 pt-3 dark:border-slate-700",children:[e.jsx("span",{className:`mr-1 text-[10px] font-black uppercase tracking-wider ${x}`,children:"Saran"}),st.map(n=>{const g=a.some(v=>v.toLowerCase()===n.toLowerCase());return e.jsx("button",{type:"button",disabled:u||g||a.length>=M,onClick:()=>ee(n),className:`rounded-lg px-2.5 py-1 text-[11px] font-bold transition ${b} ${g?"bg-slate-100 text-slate-400 dark:bg-slate-800 dark:text-slate-500":`bg-white hover:bg-orange-100 dar
1k:bg-slate-800 dark:hover:bg-slate-700 ${j}`} disabled:opacity-40`,children:g?`✓ ${n}`:`+ ${n}`},n)})]}),!A&&X.length>0?e.jsxs("div",{className:"space-y-2 border-t border-dashed border-slate-300/80 pt-3 dark:border-slate-700",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2 px-0.5",children:[e.jsxs("p",{className:`inline-flex items-center gap-1.5 text-[10px] font-black uppercase tracking-[0.14em] ${x}`,children:[e.jsx(Ge,{className:"h-3 w-3"}),"Riwayat · ",X.length,"/",Q]}),e.jsx("button",{type:"button",disabled:u,onClick:Oe,className:`text-[10px] font-bold underline-offset-2 hover:underline ${x}`,children:"Hapus semua"})]}),e.jsx("ul",{className:"space-y-1.5",children:X.map(n=>{const g=re===n.id;return e.jsx("li",{children:e.jsxs("div",{className:`flex items-stretch gap-1 rounded-xl ${b} ${O} ${g?"bg-orange-100/90 dark:bg-orange-950/55":"bg-white/90 dark:bg-slate-900/80"}`,children:[e.jsxs("button",{type:"button",disabled:u,onClick:()=>se(n),className:"min-w-0 flex-1 px-3 py-2 text-left transition hover:opacity-90 disabled:opacity-50",children:[e.jsx("p",{className:`truncate text-[12px] font-black ${j}`,children:n.label}),e.jsxs("p",{className:`mt-0.5 text-[10px] font-semibold ${x}`,children:[n.days,"h",n.lang&&n.lang!=="all"?` · ${String(n.lang).toUpperCase()}`:"",n.tweetCount?` · ${n.tweetCount} tweet`:"",n.scannedAt?` · ${yt(n.scannedAt)}`:"",g?" · dibuka":""]})]}),e.jsx("button",{type:"button","aria-label":"Hapus dari riwayat",disabled:u,onClick:v=>De(n.id,v),className:`shrink-0 rounded-r-[0.7rem] px-2.5 ${x} hover:bg-rose-100 hover:text-rose-700 dark:hover:bg-rose-950/50 dark:hover:text-rose-300`,children:e.jsx(We,{className:"h-3.5 w-3.5"})})]})},n.id)})})]}):null]}),P?e.jsx(Tt,{message:P,busy:u,onRetry:()=>he(a,{fresh:!0})}):null,m?.source==="live"&&o&&m?.tweet_count!=null&&!P?e.jsxs("p",{className:`mt-3 text-[11px] font-semibold ${x}`,children:[m.cached?"Hasil cache · ":"",m.tweet_count," tweet relevan",m.lang&&m.lang!=="all"?` · filter ${String(m.lang).toUpperCase()}`:""]}):null]})}),u&&o?e.jsx(Pt,{progressPct:Ie,progressText:_e}):null,!u&&o&&!m&&!P?e.jsx(At,{}):null,!u&&w?e.jsxs(Xe,{locked:A,redirectPath:Nt,title:"Sentimen Keyword Penuh",description:"Analisis live multi-keyword, tren mention, top pengaruh, dan daftar tweet yang menggerakkan percakapan.",hint:`Pratinjau dengan data demo. Upgrade PRO untuk analisis keyword live (hingga ${M} keyword, ${H} hari).`,className:"mt-4",minHeightClass:"min-h-[20rem]",children:[e.jsxs("div",{className:`mt-4 flex flex-wrap items-center justify-between gap-2 rounded-2xl ${R} ${O} px-4 py-3`,children:[e.jsxs("div",{children:[e.jsx("p",{className:`text-[10px] font-black uppercase tracking-wider ${x}`,children:A?"Contoh keyword":"Keyword"}),e.jsxs("p",{className:`text-sm font-black ${j}`,children:["“",le,"”"]})]}),e.jsxs("div",{className:"text-right",children:[e.jsx("p",{className:`text-[10px] font-black uppercase tracking-wider ${x}`,children:"Rentang"}),e.jsx("p",{className:`text-sm font-bold ${G}`,children:w?.rangeLabel||"—"})]})]}),e.jsx("div",{className:"mt-4 flex flex-wrap gap-2",children:$t.map(n=>e.jsx("button",{type:"button",onClick:()=>L(n.key),className:`rounded-full px-3.5 py-1.5 text-xs font-black ${b} ${O} ${E===n.key?n.active:ke}`,children:n.label},n.key))}),(E==="overview"||E==="trend")&&e.jsxs("div",{className:"grid grid-cols-2 gap-3 lg:grid-cols-4",children:[e.jsx(ne,{label:"Total Mentions",value:S(w?.kpis?.mentions?.value),deltaPct:w?.kpis?.mentions?.deltaPct,icon:je,accent:"bg-orange-200 dark:bg-orange-950/70"}),e.jsx(ne,{label:"Total Users",value:S(w?.kpis?.users?.value),deltaPct:w?.kpis?.users?.deltaPct,icon:Ye,accent:"bg-sky-200 dark:bg-sky-950/70"}),e.jsx(ne,{label:"Total Engagements",value:S(w?.kpis?.engagements?.value),deltaPct:w?.kpis?.engagements?.deltaPct,icon:Ne,accent:"bg-rose-200 dark:bg-rose-950/70"}),e.jsx(ne,{label:"Total Reach",value:S(w?.kpis?.reach?.value),deltaPct:w?.kpis?.reach?.deltaPct,icon:$e,accent:"bg-violet-200 dark:bg-violet-950/70"})]}),E==="overview"&&e.jsxs("div",{className:"mt-4 grid gap-4 lg:grid-cols-[1.4fr_1fr]",children:[e.jsxs("section",{className:`rounded-2xl ${R} ${K} p-4 sm:p-5`,children:[e.jsxs("div",{className:"mb-1 flex items-center justify-between gap-2",children:[e.jsxs("div",{children:[e.jsx("h2",{className:`text-sm font-black uppercase tracking-wide ${j}`,children:"Tren Mention"}),e.jsxs("p",{className:`text-[11px] font-semibold ${x}`,children:[le," · ",w?.rangeLabel]})]}),e.jsx(qe,{className:`h-4 w-4 ${x}`})]}),e.jsx(rt,{data:w?.mentionTrend||[],height:220})]}),e.jsxs("section",{className:`rounded-2xl ${R} ${K} p-4 sm:p-5`,children:[e.jsx("h2",{className:`text-sm font-black uppercase tracking-wide ${j}`,children:"Komposisi Sentimen"}),e.jsxs("p",{className:`mb-3 text-[11px] font-semibold ${x}`,children:["Skor ",w?.sentiment?.score??"—"," · ",w?.sentiment?.label||"—"]}),e.jsx(it,{slices:Le,score:w?.sentiment?.score,label:w?.sentiment?.label})]})]}),E==="overview"&&w?.insights?.length>0&&e.jsxs("section",{className:`mt-4 rounded-2xl ${R} ${K} p-4`,children:[e.jsxs("div",{className:"mb-3 flex items-center gap-2",children:[e.jsx(ze,{className:"h-4 w-4 text-amber-500"}),e.jsx("h2",{className:`text-sm font-black uppercase tracking-wide ${j}`,children:"Insight"})]}),e.jsx("ul",{className:"space-y-2.5",children:w.insights.map(n=>e.jsxs("li",{className:`flex gap-2 text-sm font-semibold leading-relaxed ${G}`,children:[e.jsx(Ve,{className:"mt-0.5 h-4 w-4 shrink-0 text-orange-500"}),e.jsx("span",{children:n})]},n))})]}),E==="trend"&&e.jsxs("section",{className:`mt-4 rounded-2xl ${R} ${K} p-4 sm:p-5`,children:[e.jsx("div",{className:"mb-1 flex flex-wrap items-end justify-between gap-2",children:e.jsxs("div",{children:[e.jsx("h2",{className:`text-sm font-black uppercase tracking-wide ${j}`,children:"Tren per Sentimen"}),e.jsxs("p",{className:`text-[11px] font-semibold ${x}`,children:["Volume harian dipecah positif / netral / negatif · ",w?.rangeLabel]})]})}),e.jsx(lt,{data:w?.mentionTrend||[],height:320})]}),E==="influencers"&&e.jsxs("section",{className:`mt-4 rounded-2xl ${R} ${K} p-4 sm:p-5`,children:[e.jsxs("div",{className:"mb-3 flex flex-wrap items-end justify-between gap-2",children:[e.jsxs("div",{children:[e.jsx("h2",{className:`text-sm font-black uppercase tracking-wide ${j}`,children:"Top Pengaruh"}),e.jsxs("p",{className:`text-[11px] font-semibold ${x}`,children:[le," · akun dengan tweet keyword terbanyak · ",w?.rangeLabel]})]}),e.jsxs("p",{className:`text-[11px] font-bold ${x}`,children:[(w?.influencers||[]).length," akun"]}
1)]}),e.jsx(ct,{influencers:w?.influencers,limit:12})]}),E==="tweets"&&e.jsxs("section",{className:"mt-4 space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("div",{children:[e.jsx("h2",{className:`text-sm font-black uppercase tracking-wide ${j}`,children:"Daftar Tweet"}),e.jsx("p",{className:`mt-0.5 text-[10px] font-semibold ${x}`,children:"Hanya postingan asli — balasan/mention tidak ditampilkan"})]}),e.jsx("div",{className:"ml-auto flex flex-wrap gap-1.5",children:[{id:"all",label:"Semua"},{id:"positive",label:"Positif"},{id:"neutral",label:"Netral"},{id:"negative",label:"Negatif"}].map(n=>e.jsx("button",{type:"button",onClick:()=>C(n.id),className:`rounded-full px-3 py-1 text-[11px] font-black ${b} ${O} ${_===n.id?"bg-emerald-300 text-slate-900 dark:bg-emerald-900/85 dark:text-emerald-50":ke}`,children:n.label},n.id))})]}),be.length===0?e.jsx("div",{className:`rounded-2xl ${Ke} p-8 text-center text-sm font-semibold ${x}`,children:"Tidak ada tweet untuk filter ini."}):be.map(n=>e.jsx(Ct,{tweet:n},n.id))]})]}):null]})})}export{Kt as default};

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.