PageSourceSearch

https://www.xgrind.pro/assets/CreatorLabPage-Ba25bKJE.js

js xgrind.pro collected 2026-09-24 15:11:33 UTC 86,963 bytes, 35 lines download raw bytes

1import{r as u,j as n,d as vt,o as da,u as ma}from"./react-core-bWLI75Fw.js";import{d as Le,f as At,m as pa,u as fa,A as ut,bP as ba,ln as ha}from"./index-Cuw9rIcM.js";import{W as C,r as It,b as ga,d as ka,F as Tt,C as xa,R as Ie,S as ya,c as ja,M as Na}from"./phoenixWeights-D_S8SNa6.js";import{n as Sa,J as wa,m as Ct,Q as va,I as dt,S as Aa,r as Ia,l as Dt}from"./firebase-BwZ4hkwm.js";import{u as Ta}from"./aiProGate-DBJt85Hn.js";import{f as Bt}from"./amplifierTweetPreview-Dyim_BI8.js";import{isValidTweetUrl as mt,parseTweetDetailsFromUrl as Ca}from"./dramaCalendarDate-BRwCJ7y-.js";import"./lucide-U8ZTX028.js";import"./framer-motion-C0wpNkKn.js";function K(e){return Math.max(0,Math.min(1,Number(e)||0))}function Da({text:e,contentType:t,media:a}){const i=String(e||"").trim(),s=i.length,r=i.toLowerCase(),l=/\?/.test(i),o=/\b(gue|aku|saya|cerita|pernah|pengalaman)\b/i.test(i),c=/\b(salin|copy|kirim ke|bagi ke|screenshot|simpan ini|bookmark)\b/i.test(r),d=/\b(setuju|tambah|menurut gue|hot take|unpopular|sebenarnya)\b/i.test(r)||t==="quote",k=/\bfollow\b/i.test(r),b=/\b(bodoh|goblok|tolol|sampah|benci|najis)\b/i.test(r),h=a==="image"||a==="both",m=a==="video"||a==="both",p=s<12?.15:s<40?.45:s<80?.75:s<=280?1:.88,S=t==="reply"?.7:1;return{favorite:K((.035+(o?.012:0))*p),reply:K((l?.055:.018)*p*S),retweet:K(.014*p),quote:K((d?.038:.011)*p),share:K(.01*p),shareViaDm:K((c?.02:.007)*p),shareViaCopyLink:K((c?.028:.006)*p),followAuthor:K((k?.022:.007)*p),click:K(.028*p),photoExpand:h?.035*p:0,videoOpen:m?.028*p:0,vqv:m?.018*p:0,dwellSeconds:Math.min(12,s/36),notInterested:b?.045:.007,muteAuthor:b?.018:.0025,blockAuthor:b?.012:.0018,report:b?.008:8e-4}}function Ba(e,{sameDayIndex:t=0,scenario:a}={}){const i=a||e.scenario||"follower",s=e.contentType||"post",r=Da(e),l=It(i,s),o=[{id:"copy",label:"Disalin / dikirim ke luar X",weight:C.shareViaCopyLink,p:r.shareViaCopyLink,kind:"pos"},{id:"reply",label:"Balasan",weight:l,p:r.reply,kind:"pos"},{id:"quote",label:"Quote",weight:C.quote,p:r.quote,kind:"pos"},{id:"dm",label:"Dikirim lewat pesan",weight:C.shareViaDm,p:r.shareViaDm,kind:"pos"},{id:"follow",label:"Follow penulis",weight:C.followAuthor,p:r.followAuthor,kind:"pos"},{id:"share",label:"Share di X",weight:C.share,p:r.share,kind:"pos"},{id:"repost",label:"Repost",weight:C.retweet,p:r.retweet,kind:"pos"},{id:"like",label:"Like",weight:C.favorite,p:r.favorite,kind:"pos"},{id:"click",label:"Klik post",weight:C.click,p:r.click,kind:"pos"},{id:"photo",label:"Buka gambar",weight:C.photoExpand,p:r.photoExpand,kind:"pos"},{id:"video",label:"Buka video",weight:C.videoOpen,p:r.videoOpen,kind:"pos"},{id:"dwell",label:"Lama baca",weight:C.contDwellTime,p:r.dwellSeconds,kind:"pos",raw:!0},{id:"report",label:"Disembunyikan / dilaporkan",weight:C.report,p:r.report,kind:"neg"},{id:"mute",label:"Di-mute",weight:C.muteAuthor,p:r.muteAuthor,kind:"neg"},{id:"hide",label:"Tidak tertarik",weight:C.notInterested,p:r.notInterested,kind:"neg"},{id:"block",label:"Diblokir",weight:C.blockAuthor,p:r.blockAuthor,kind:"neg"}].map(p=>({...p,contrib:p.weight*p.p})),c=o.reduce((p,S)=>p+S.contrib,0),d=ka(t),k=ga(i),b=c*d*k,h=b/C.favorite;return{parts:[...o].filter(p=>Math.abs(p.contrib)>8e-4).sort((p,S)=>Math.abs(S.contrib)-Math.abs(p.contrib)),raw:c,finalScore:b,likeEq:h,diversity:d,audience:k,sameDayIndex:t,scenario:i,suggestion:La(e,r,i,s),empty:!String(e.text||"").trim()}}function La(e,t,a,i){return String(e.text||"").trim()?t.report>.004||t.muteAuthor>.01?{title:"Turunkan nada serang",detail:"Sinyal “disembunyikan / dilaporkan” jauh lebih berat daripada like. Soften kalimat yang menusuk."}:t.shareViaCopyLink<.012&&i!=="reply"?{title:"Bikin layak dikirim",detail:"Konten yang orang salin atau kirim ke chat punya bobot paling besar. Tambah satu poin yang orang mau simpan."}:t.reply<.03&&i!=="reply"?{title:"Pancing satu balasan",detail:a==="mutual"?"Untuk orang yang follow balik, percakapan di post original bernilai sangat besar. Tutup dengan pertanyaan yang gampang dijawab.":"Satu pertanyaan di akhir mengangkat sinyal balasan — jauh lebih berharga daripada kejar like."}:t.quote<.02&&i==="post"?{title:"Kasih sudut yang bisa di-quote",detail:"Quote setara balasan di rumus. Tambah opini atau kerangka yang orang mau lanjutkan, bukan cuma info datar."}:a==="rekomendasi"?{title:"Rekomendasi dipotong",detail:"Ke orang yang tidak follow, skor dikali 0,75. Kejar yang orang mau kirim atau quote — like hampir tidak menolong."}:{title:"Jaga ritme",detail:"Kalau ini post kedua atau ketiga hari ini, rumus melemahkan skor otomatis. Jarak beberapa jam lebih aman."}:{title:"Tulis dulu",detail:"Ketik draft, lalu rumus akan menunjukkan sinyal mana yang menanggung skor."}}function Ma(e){const t=Number(e)||0;return Math.abs(t)<.5?"kurang dari 1 like":`~${Math.round(t).toLocaleStr
1ing("id-ID")} like`}function Lt(e){const t=Number(e)||0;return`${t>=0?"+":""}${t.toFixed(3)}`}const Mt="xgrind:creator-lab:v1";function Et(){return`d_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,7)}`}function Ea(e){const t=String(e?.text||"").replace(/\s+/g," ").trim();return t?t.slice(0,48):e?.scheduledAt?"Terjadwal, belum diisi":"Draft kosong"}function me(e={}){return{id:Et(),text:"",contentType:"post",media:"none",scenario:"follower",scheduledAt:null,copiedAt:null,source:"tulis",briefSeed:null,createdAt:Date.now(),updatedAt:Date.now(),firestoreId:null,...e}}function Pa(){try{const e=localStorage.getItem(Mt);if(!e)return{drafts:[],activeDraftId:null};const t=JSON.parse(e),a=Array.isArray(t?.drafts)?t.drafts.map(Pt):[];return{drafts:a,activeDraftId:t.activeDraftId&&a.some(i=>i.id===t.activeDraftId)?t.activeDraftId:a[0]?.id||null}}catch{return{drafts:[],activeDraftId:null}}}function pt(e){try{localStorage.setItem(Mt,JSON.stringify({drafts:(e.drafts||[]).slice(0,80),activeDraftId:e.activeDraftId||null}))}catch{}}function Oa(e){if(!e||typeof e!="object")return null;const t=e.ideaId?String(e.ideaId):"",a=e.postId?String(e.postId):"";if(!t&&!a)return null;const i=Number(e.appliedAt);return{postId:a,handle:String(e.handle||"").replace(/^@/,""),format:String(e.format||"opini"),topicId:e.topicId?String(e.topicId):"",ideaId:t,appliedAt:Number.isFinite(i)&&i>0?i:0}}function Pt(e){if(!e||typeof e!="object")return me();const t=Number(e.createdAt),a=Number(e.updatedAt);return{id:String(e.id||Et()),text:String(e.text||"").slice(0,2e3),contentType:["post","thread","quote","reply"].includes(e.contentType)?e.contentType:"post",media:["none","image","video","both"].includes(e.media)?e.media:"none",scenario:["mutual","follower","rekomendasi"].includes(e.scenario)?e.scenario:"follower",scheduledAt:e.scheduledAt==null?null:Number(e.scheduledAt)||null,copiedAt:e.copiedAt==null?null:Number(e.copiedAt)||null,source:e.source==="bedah"?"bedah":e.source==="brief"?"brief":"tulis",briefSeed:Oa(e.briefSeed),createdAt:Number.isFinite(t)&&t>0?t:0,updatedAt:Number.isFinite(a)&&a>0?a:0,firestoreId:e.firestoreId||e.fsId||null}}function Ot(e){if(!e)return"";const t=e.briefSeed||{};return[e.id,e.text,e.contentType,e.media,e.scenario,e.scheduledAt??"",e.copiedAt??"",e.source,e.firestoreId||"",t.ideaId||"",t.postId||"",t.format||""].join("�")}function ft(e){return(e||[]).map(Ot).sort().join(`
2`)}function pe(e){const t=new Date(e),a=t.getFullYear(),i=String(t.getMonth()+1).padStart(2,"0"),s=String(t.getDate()).padStart(2,"0");return`${a}-${i}-${s}`}function Ra(e,t,a=Date.now()){const i=pe(a),s=(e||[]).filter(l=>{const o=l.scheduledAt||(l.id===t?a:null);return o?pe(o)===i:!1}).sort((l,o)=>(l.scheduledAt||l.createdAt)-(o.scheduledAt||o.createdAt)),r=s.findIndex(l=>l.id===t);return r>=0?r:s.length}function Te(e,t,a,i){return(e||[]).filter(s=>!s.scheduledAt||s.id===i?!1:Math.abs(s.scheduledAt-t)<a)}function _a(e=new Date){const t=new Date(e),a=t.getDay(),i=a===0?-6:1-a,s=new Date(t.getFullYear(),t.getMonth(),t.getDate()+i);return Array.from({length:7},(r,l)=>{const o=new Date(s);return o.setDate(s.getDate()+l),o})}function we(e,t){const a=pe(t.getTime());return(e||[]).filter(i=>i.scheduledAt&&pe(i.scheduledAt)===a).sort((i,s)=>i.scheduledAt-s.scheduledAt)}function Rt(e,t=Date.now()){return e?.scheduledAt?e.scheduledAt<=t&&!e.copiedAt:!1}function _t(e){return Ia(Le,"users",e,"creator_lab_drafts")}function $a(e,t,a){return e?Sa(_t(e),i=>{const s=i.docs.map(r=>{const l=r.data()||{};return Pt({...l,firestoreId:r.id,id:l.clientId||l.id||r.id,createdAt:l.createdAt?.toMillis?.()||l.createdAtMs||0,updatedAt:l.updatedAt?.toMillis?.()||l.updatedAtMs||0})});t(s.sort((r,l)=>(l.updatedAt||0)-(r.updatedAt||0)))},i=>a?.(i)):()=>{}}async function Fa(e,t){if(!e||!t)return t;const a={clientId:t.id,text:t.text,contentType:t.contentType,media:t.media,scenario:t.scenario,scheduledAt:t.scheduledAt,copiedAt:t.copiedAt,source:t.source,briefSeed:t.briefSeed||null,createdAtMs:t.createdAt,updatedAtMs:Date.now(),updatedAt:dt()};if(t.firestoreId)return await wa(Ct(Le,"users",e,"creator_lab_drafts",t.firestoreId),a),t;const i=await va(_t(e),{...a,createdAt:dt()});return{...t,firestoreId:i.id}}async function Ja(e,t){!e||!t?.firestoreId||await Aa(Ct(Le,"users",e,"creator_lab_drafts",t.firestoreId))}function Ka(e,t){const a=new Map;
2return[...e||[],...t||[]].forEach(i=>{const s=a.get(i.id);(!s||(i.updatedAt||0)>=(s.updatedAt||0))&&a.set(i.id,{...s,...i,firestoreId:i.firestoreId||s?.firestoreId||null})}),[...a.values()].sort((i,s)=>(s.updatedAt||0)-(i.updatedAt||0))}function bt(e,t){return e===t||ft(e)===ft(t||[])?e:t}function se(e){try{const t=BigInt(String(e||"").replace(/\D/g,"")),a=Number((t>>22n)+1288834974657n);return Number.isFinite(a)&&a>1e12?a:null}catch{return null}}function qa(e){if(!e)return null;const t=typeof e=="number"?e:Date.parse(e);return Number.isFinite(t)?(Date.now()-t)/36e5:null}function Ga(e,t={}){const a=String(e||"").trim();return t.isReply||t.inReplyTo||/^@\w+/.test(a)?"reply":t.isQuote||t.quoted?"quote":t.isThread||/🧵|\b1\s*\/\s*\d/.test(a)?"thread":"post"}function Ha({text:e,createdAt:t,contentType:a,metrics:i={},impressions:s,scenario:r="follower"}){const l=Math.max(0,Number(i.likes)||0),o=Math.max(0,Number(i.replies)||0),c=Math.max(0,Number(i.reposts)||0),d=Math.max(0,Number(i.quotes)||0),k=Math.max(0,Number(i.views)||0),b=s==null?null:Math.max(0,Number(s)||0),h=a||Ga(e),m=It(r,h),p=[{id:"like",label:"Like",count:l,weight:C.favorite},{id:"reply",label:"Balasan",count:o,weight:m},{id:"repost",label:"Repost",count:c,weight:C.retweet},{id:"quote",label:"Quote",count:d,weight:C.quote}].map(j=>({...j,contrib:j.count*j.weight})),S=p.reduce((j,T)=>j+T.contrib,0),N=S>0?l*C.favorite/S:0,f=qa(t),w=f!=null&&f>Tt,x=Ua({impr:b,views:k,likes:l,replies:o,quotes:d,likeShare:N,outsideWindow:w,ageH:f,mixTotal:S});return{parts:p.sort((j,T)=>T.contrib-j.contrib),mixTotal:S,likeShare:N,ageH:f,outsideWindow:w,views:k,impressions:b,contentType:h,door:x,likeHeavy:N>=.55&&l>=3}}function Ua({impr:e,views:t,likes:a,replies:i,quotes:s,likeShare:r,outsideWindow:l,ageH:o,mixTotal:c}){if(l)return{id:"umur",confidence:"tinggi",title:"Di luar jendela For You",detail:"Post lebih dari sekitar 2 hari. For You tidak menjemput yang sudah tua — ini normal, bukan vonis rumus."};if(e!=null&&e>0){const d=a+i+s;if(e<80&&d>0&&(a+i)/Math.max(e,1)>.08)return{id:"visibilitas",confidence:"sedang",title:"Sedikit yang melihat, yang melihat tetap bereaksi",detail:"Bisa jadi tidak masuk rekomendasi, atau skor kalah. Tanpa label resmi, dua hipotesis ini setara."};if(e>=400&&r>=.6)return{id:"skor",confidence:"sedang",title:"Jangkauan ada, mix-nya like-berat",detail:"Like bobotnya kecil. Versi berikutnya kejar balasan, quote, atau yang orang mau kirim."};if(e<40&&c<2)return{id:"skor",confidence:"sedang",title:"Hampir tidak terangkat",detail:"Impresi sangat rendah. Bisa kalah rumus, atau tidak tampil ke orang yang tidak follow."}}return e==null?t===0&&a===0&&i===0?{id:"tidak_tahu",confidence:"rendah",title:"Angka publik masih kosong",detail:"Isi impresi dari analitik kalau punya. Tanpa itu, rumus hanya bisa baca mix like/balasan/repost."}:r>=.6&&a>=5?{id:"skor",confidence:"rendah",title:"Yang terkumpul didominasi like",detail:"Ini bukan jangkauan. Ini komposisi reaksi. Like hampir tidak menahan skor dibanding balasan atau quote."}:{id:"tidak_tahu",confidence:"rendah",title:"Impresi belum ada",detail
2:"Tautan publik tidak membawa jangkauan For You. Isi angka analitik untuk hipotesis yang lebih kuat."}:o!=null&&o<24&&(e||t)>0?{id:"skor",confidence:"rendah",title:"Masih dalam 24 jam pertama",detail:"Akun kecil kadang dapat dorongan singkat di awal. Tunggu jendela 2 hari sebelum menilai mati."}:{id:"skor",confidence:"rendah",title:"Pintu visibilitas tidak bisa dikunci",detail:"Tanpa label resmi, yang bisa dibaca adalah mix reaksi dan umur post."}}function Va(e){const t=String(e||"").replace(/\D/g,"");if(!t)return null;try{const a=localStorage.getItem("xgrind_performance_state_v2");if(!a)return null;const i=JSON.parse(a),r=(Array.isArray(i?.result?.posts)?i.result.posts:[]).find(l=>String(l.id||l.tweet_id||l.status_id||"")===t);return r?{impressions:Number(r.impressions)||0,likes:Number(r.likes)||0,replies:Number(r.replies)||0,reposts:Number(r.retweets||r.reposts)||0,quotes:Number(r.quotes)||0,text:r.text||r.full_text||"",postedAt:r.posted_at||r.created_at||null}:null}catch{return null}}const Me=["polling","tanya","list","opini"],ht=2880*60*1e3,$t="Post di Brief umurnya lebih dari 2 hari (bukan tanggal nama file). Timeline sering nunjukin viral lama — scroll yang baru, scan lagi.",Ee={polling:"Polling",tanya:"Tanya",list:"Daftar",opini:"Opini",ada_media:"Gambar"},Ft=/https?:\/\/(?:www\.)?(?:x|twitter)\.com\/([^/\s?#]+)\/status\/(\d+)/i;function Ya(e){const a=String(e||"").trim().replace(/,/g,"").match(/^([\d.]+)\s*([KkMm])?$/);if(!a)return 0;const i=Number(a[1]);if(!Number.isFinite(i))return 0;const s=(a[2]||"").toLowerCase();return Math.round(s==="k"?i*1e3:s==="m"?i*1e6:i)}function Pe(e){const t=Array.isArray(e)?e:[];return Me.find(a=>t.includes(a))||"opini"}function he(e){return Ee[e]||e}function Wa(e){const t=Array.isArray(e)?e:[],a=[],i=Pe(t);return a.push(he(i)),t.includes("ada_media")&&i!=="ada_media"&&a.push(Ee.ada_media),a.join(" · ")}function Xa(e){const t=Me.filter(a=>Number(e?.[a])>0).map(a=>he(a));return Number(e?.ada_media)>0&&t.push(Ee.ada_media),t.join(" · ")}function za(e){const t=String(e||"").trim();if(!t)return"";if(/^\d{4}-\d{2}-\d{2}$/.test(t))try{return new Date(`${t}T12:00:00`).toLocaleDateString("id-ID",{day:"numeric",month:"short"})}catch{return t}return t}function H(e){const t=Number(e)||0;if(t>=1e6){const a=t/1e6;return`${a>=10?Math.round(a):String(a.toFixed(1)).replace(/\.0$/,"")}J`}if(t>=1e3){const a=t/1e3;return`${a>=10?Math.round(a):String(a.toFixed(1)).replace(/\.0$/,"")}K`}return String(t)}function Ce(e){const t=String(e||"").toLowerCase().replace(/verified/g," ").replace(/format:/g," "),a=[],i=s=>{a.includes(s)||a.push(s)};return/\bpolling\b/.test(t)&&i("polling"),/\btanya\b/.test(t)&&i("tanya"),/\blist\b/.test(t)&&i("list"),(/\bada_media\b/.test(t)||/\bgambar\b/.test(t))&&i("ada_media"),/\bopini\b/.test(t)&&i("opini"),a.length||i("opini"),a}function Qa(e){const t=String(e||""),a=o=>{const c=t.match(o);return c?Ya(c[1]):0},i=a(/([\d.,]+[KkMm]?)\s*views/i),s=a(/([\d.,]+[KkMm]?)\s*reply/i),r=a(/([\d.,]+[KkMm]?)\s*rt\b/i),l=a(/([\d.,]+[KkMm]?)\s*like/i);return{views:i,replies:s,retweets:r,likes:l}}function Oe(e){const t=String(e||"").match(Ft);return t?{handle:decodeURIComponent(t[1]).replace(/^@/,""),id:t[2],url:`https://x.com/${decodeURIComponent(t[1]).replace(/^@/,"")}/status/${t[2]}`}:null}function Za(e){return String(e||"").replace(/^["“]+|["”]+$/g,"").replace(/\s+/g," ").trim().slice(0,2e3)}function gt(e){const t=String(e||"").trim();return/^https:\/\//i.test(t)?t.slice(0,600):""}function Re(e){if(!e||typeof e!="object")return null;const t=String(e.id||"").replace(/\D/g,""),a=String(e.handle||"").replace(/^@/,"");if(!t||!a)return null;const i=Za(e.text);if(!i)return null;let s=Array.isArray(e.formats)?Ce(e.formats.join("+")):Ce(e.formats);e.poll&&!s.includes("polling")&&(s=["polling",...s.filter(o=>o!=="opini")]),(e.mediaType==="photo"||e.mediaType==="video"||e.thumb)&&!s.includes("ada_media")&&(s=[...s.filter(o=>o!=="opini"),"ada_media"],s.some(o=>Me.includes(o))||s.unshift("opini"));const r=Oe(e.url),l=Number(e.createdAt)||se(t)||0;
2return{id:t,handle:a,displayName:String(e.displayName||"").slice(0,80),avatar:gt(e.avatar),url:r?.url||`https://x.com/${a}/status/${t}`,text:i,views:Number(e.views)||0,replies:Number(e.replies)||0,retweets:Number(e.retweets)||0,likes:Number(e.likes)||0,formats:s,verified:!!e.verified,tags:Array.isArray(e.tags)?e.tags.map(String).slice(0,12):[],mediaType:String(e.mediaType||""),thumb:gt(e.thumb),quoted:!!e.quoted,poll:!!e.poll,createdAt:l}}function en(e){return Number(e?.createdAt)||se(e?.id)||0}function Jt(e,t=Date.now()){const a=[t],i=Number(e?.exportedAt),s=Number(e?.importedAt);return Number.isFinite(i)&&i>1e12&&a.push(i),Number.isFinite(s)&&s>1e12&&a.push(s),Math.max(...a)}function _e(e,t=Date.now()){const a=en(e);if(!a)return!1;const i=t-a;return i>=0?i<=ht:-i<=ht}function Kt({id:e,handle:t,url:a,text:i,engLine:s,formatsRaw:r,verified:l}){const o=Qa(s);return Re({id:e,handle:t,url:a,text:i,views:o.views,replies:o.replies,retweets:o.retweets,likes:o.likes,formats:Ce(r),verified:l})}function tn(e){const t=[],a=/\[(\d+)\] @([A-Za-z0-9_]+)\s*·\s*([^\n]+)\n([\s\S]*?)\n(https?:\/\/[^\s]+)/g;let i;for(;i=a.exec(e);){const s=Oe(i[5]);if(!s)continue;const r=i[3],l=Kt({id:s.id,handle:i[2]||s.handle,url:s.url,text:i[4],engLine:r,formatsRaw:r,verified:/\bverified\b/i.test(r)});l&&t.push(l)}return t}function an(e){const t=[],a=/^\d+\.\s+\*\*@([^*]+)\*\*\s+—\s+([^\n]+)\n\s*>\s*([^\n]+)\n\s*(https?:\/\/[^\s]+)/gm;let i;for(;i=a.exec(e);){const s=Oe(i[4]);if(!s)continue;const r=i[2],l=r.match(/`([^`]+)`/),o=Kt({id:s.id,handle:i[1].trim()||s.handle,url:s.url,text:i[3],engLine:r,formatsRaw:l?l[1]:r,verified:/\bverified\b/i.test(r)});o&&t.push(o)}return t}function nn(e,t){const a=new Map;return[...e,...t].forEach(i=>{!i?.id||a.has(i.id)||a.set(i.id,i)}),[...a.values()]}function qt(e){const t={};return e.forEach(a=>{(a.formats||[]).forEach(i=>{t[i]=(t[i]||0)+1})}),t}function sn(e){const t=String(e||"").match(/#\s*XGrind Brief\s+[—–-]\s*([^\n]+)/i);return t?t[1].trim():""}function rn(e){const t=String(e||"");return!!(/XGrind Brief/i.test(t)||/\[1\]\s+@\w+/.test(t)&&/\/status\/\d+/.test(t)||/\*\*@\w+\*\*/.test(t)&&/\/status\/\d+/.test(t))}function ln(e){const t=String(e||"").replace(/\r\n/g,`
3`).trim();if(!t)return{ok:!1,error:"Kosong. Salin Brief dari ekstensi, atau pilih berkas."};if(!rn(t)&&!Ft.test(t))return{ok:!1,error:"Ini bukan Brief dari ekstensi. Salin JSON, atau unduh berkas XGrind Brief."};const a=an(t),i=tn(t),s=nn(a,i),r=s.filter(c=>_e(c,Date.now())).slice(0,20);if(!r.length)return{ok:!1,error:s.length?$t:"Brief terbaca, tapi belum ada post. Scan timeline di ekstensi dulu, lalu tempel lagi."};const l=sn(t),o=qt(r);return{ok:!0,error:null,brief:{dayLabel:l,posts:r,formatCounts:o}}}function on(e){const t=e&&typeof e=="object"?e:null;if(!t)return{ok:!1,error:"JSON Brief rusak. Salin ulang dari ekstensi."};if(String(t.kind||"")==="xgrind-tone")return{ok:!1,error:"Ini JSON nada (post kamu), bukan Brief. Tempel lewat Nada kamu.",kind:"tone"};const i=(Array.isArray(t.posts)?t.posts:Array.isArray(t)?t:[]).map(Re).filter(Boolean),s=Jt(t),r=i.filter(l=>_e(l,s)).slice(0,20);return r.length?{ok:!0,error:null,brief:{dayLabel:String(t.day||""),day:String(t.day||""),exportedAt:Number(t.exportedAt)||
30,posts:r,formatCounts:qt(r)}}:{ok:!1,error:i.length?$t:"JSON Brief tidak berisi post. Scan timeline di ekstensi dulu."}}function cn(e){const t=String(e||"").trim();if(!t)return{ok:!1,error:"Kosong. Salin JSON dari ekstensi, atau pilih berkas."};if(t.startsWith("{")||t.startsWith("["))try{return on(JSON.parse(t))}catch{return{ok:!1,error:"JSON Brief rusak. Salin ulang dari ekstensi."}}return ln(t)}const un=[{id:"payout",label:"Payout cair",re:/\b(payout|cair|wallet|impression|impresi)\b|\$\s*\d/i},{id:"cenblue",label:"Cenblue",re:/\b(cenblue|cenblu|centang biru)\b/i},{id:"algo",label:"Reply mutual",re:/\b(algo|algoritma|bobot)\b|reply dari mutual|repost hampir|mutual.*reply|quote atau repost/i},{id:"shadowban",label:"Moderasi",re:/\b(shadowban|\bsb\b|paused|unpaused|moderasi|visibility|filtering|grok|sembuh)\b/i},{id:"fitnah",label:"Fitnah akun",re:/\b(fitnah|jaringan|identitas|asbun|rejim)\b|akun kamu/i},{id:"x_product",label:"Fitur X",re:/\b(nikita|under the hood|fitur baru|head of product|penasihat|poster)\b/i},{id:"bola",label:"Bola",re:/\b(fulltime|babak|persib|persija|skor|nonton bola)\b|\bvs\b.{0,24}\b(indonesia|singapore|singapura)\b/i},{id:"makan",label:"Makanan",re:/\b(bakso|ceker|makanan|makan|lapar|kenyang)\b|in this economy/i},{id:"iri",label:"Yang iri",re:/\b(yiiia|iri iri|haters|ngeblok|nyoba reset)\b/i},{id:"mood",label:"Mood senin",re:/\b(senin|capek|ngantuk)\b|besok udah/i}];function De(e){return(Number(e?.views)||0)+(Number(e?.replies)||0)*120}function ge(e){const t=String(e?.text||""),a=un.filter(i=>i.re.test(t));return a.length?a.map(i=>({id:i.id,label:i.label})):[{id:"lainnya",label:"Lainnya"}]}function dn(e,t,a,i){const s=e.get(t)||{id:t,label:a,heat:0,replies:0,count:0};s.heat+=De(i),s.replies+=Number(i.replies)||0,s.count+=1,e.set(t,s)}function mn(e){const t=new Map;return(e||[]).forEach(a=>{ge(a).forEach(i=>dn(t,i.id,i.label,a))}),[...t.values()].sort((a,i)=>i.replies-a.replies||i.heat-a.heat)}const Gt="xgrind-tone",pn=["gue","aku","gw"];function Ht(e){return String(e||"").replace(/\s+/g," ").trim().slice(0,280)}function Ut(e){return Array.isArray(e?.formats)?e.formats:[]}const fn=["yg","ga","gak","nggak","aja","sih","dong","nih","deh","kek","udah","udh","tp","kalo","klo","bgt","wkwk","anjir","cuy"],bn=[/\bdi era digital\b/gi,/\bpenting (untuk )?diingat,?\s*/gi,/\bpada akhirnya,?\s*/gi,/\bintinya (adalah|sih),?\s*/gi,/\byang jarang (orang |banyak orang )?(sadar|disadari),?\s*/gi,/\bmari kita\b/gi,/\blet that sink in\.?/gi,/\bhere'?s the thing:?\s*/gi,/\bunpopular opinion:?\s*/gi,/\bhot take:?\s*/gi,/\bthread\s*🧵/gi,/\b1\/\s*/g];function $e(e){const t=Array.isArray(e)?e:[],a=t.length||1;let i=0,s=0,r=0,l=0,o=0,c=0,d=0;const k={};t.forEach(h=>{const m=String(h?.text||h||"");/\?/.test(m)&&(i+=1);try{new RegExp("\\p{Extended_Pictographic}","u").test(m)&&(s+=1)}catch{/[\uD800-\uDBFF][\uDC00-\uDFFF]/.test(m)&&(s+=1)}const p=m.trim();p&&/^[a-z]/.test(p)&&(r+=1),/\.\s*$/.test(p)&&(l+=1),/\n/.test(m)&&(o+=1);const S=p.split(/[.!?]+\s+/).filter(f=>f.trim().length>1);d+=Math.max(1,S.length),c+=p.split(/\s+/).filter(Boolean).length;const N=` ${m.toLowerCase()} `;fn.forEach(f=>{new RegExp(`\\b${f}\\b`,"i").test(N)&&(k[f]=(k[f]||0)+1)})});const b=Object.entries(k).filter(([,h])=>h>=1).sort((h,m)=>m[1]-h[1]).slice(0,8).map(([h])=>h);return{questionRate:i/a,emojiRate:s/a,lowercaseStart:r/a>=.35,periodEnd:l/a>=.45,usesNewlines:o/a>=.3,avgWords:Math.round(c/Math.max(1,d)),slang:b}}function hn(e){let t=String(e||"");return bn.forEach(a=>{t=t.replace(a,"")}),t=t.replace(/[—–]/g,", "),t=t.replace(/\b[bB]ukan (hanya |cuma |sekadar )?[^.!?\n]{8,70}?(,|\.)?\s*(tapi|melainkan|namun)\b/gi,a=>a.replace(/^bukan (hanya |cuma |sekadar )?/i,"").replace(/^\s*(tapi|melainkan|namun)\s*/i,"").trim()),t=t.replace(/[ \t]{2,}/g," "),t=t.replace(/\n{3,}/g,`
4
5`),t.trim()}function gn(e,t,a){if(a==="thread")return e;const i=Number(t?.p50Chars)||Number(t?.avgChars)||0;if(!i||i<40)return e;const s=Math.round(i*1.55);if(e.length<=s)return e;const r=e.slice(0,s),l=Math.max(r.lastIndexOf(". "),r.lastIndexOf("! "),r.lastIndexOf(`
6`));return l>=Math.round(i*.55)?r.slice(0,l+1).trim():r.replace(/\s+\S*$/,"").trim()}function kn(e,t){if(!t?.lowercaseStart)return e;const a=String(e||"");return!/^[A-ZÀ-ÖØ-Þ]/.test(a)||/^(Gue|Gw|Aku|Unpopular)\b/.test(a)?a:a.charAt(0).toLowerCase()+a.slice(1)}function Fe(e,t){const a=String(e||"");return t==="aku"?a.replace(/\bGue\b/g,"Aku").replace(/\bgue\b/g,"aku").replace(/\bGw\b/g,"Aku").replace(/\bgw\b/g,"aku").replace(/\bGW\b/g,"Aku").replace(/\bSaya\b/g,"Aku").replace(/\bsaya\b/g,"aku"):t==="gw"?a.replace(/\bGue\b/g,"Gw").replace(/\bgue\b/g,"gw").replace(/\bAku\b/g,"Gw").replace(/\baku\b/g,"gw").replace(/\bGW\b/g,"Gw").replace(/\bSaya\b/g,"Gw").replace(/\bsaya\b/g,"gw"):a.replace(/\bAku\b/g,"Gue").replace(/\baku\b/g,"gue").replace(/\bGw\b/g,"Gue").replace(/\bgw\b/g,"gue").replace(/\bSaya\b/g,"Gue").replace(/\bsaya\b/g,"gue")}function xn(e){let t=0,a=0,i=0;return e.forEach(s=>{const r=s.text;/\bgue\b/i.test(r)&&(t+=1),/\baku\b/i.test(r)&&(a+=1),/\bgw\b/i.test(r)&&(i+=1)}),i>t&&i>a?"gw":a>t&&a>i?"aku":"gue"}function yn(e){const a=String(e||"").split(`
7`)[0].trim().split(/\s+/).slice(0,4).join(" ").replace(/["""']/g,"");return a.length>=8?a:""}function jn({handle:e="",posts:t=[]}={}){const a=(t||[]).map(m=>({id:String(m?.id||""),text:Ht(m?.text),formats:Ut(m)})).filter(m=>m.text.length>=12).slice(0,24),i=a.length||1,s=a.map(m=>m.text.length).sort((m,p)=>m-p),r={};
7let l=0,o=0,c=0,d=0;a.forEach(m=>{const p=m.text;/\?/.test(p)&&(l+=1),(m.formats.includes("list")||/(^|\n)\s*\d+\.\s/.test(p))&&(o+=1),m.formats.includes("polling")&&(c+=1);try{new RegExp("\\p{Extended_Pictographic}","u").test(p)&&(d+=1)}catch{/[\uD800-\uDBFF][\uDC00-\uDFFF]/.test(p)&&(d+=1)}const S=yn(p);if(S){const N=S.toLowerCase();r[N]=(r[N]||0)+1}});const k=Object.entries(r).filter(([,m])=>m>=2).sort((m,p)=>p[1]-m[1]).slice(0,4).map(([m])=>m),b=xn(a),h=s[Math.floor(s.length/2)]||0;return{v:1,kind:Gt,handle:String(e||"").replace(/^@/,""),scannedAt:Date.now(),sampleCount:a.length,voice:b,avgChars:Math.round(s.reduce((m,p)=>m+p,0)/i)||0,p50Chars:h,questionRate:l/i,listRate:o/i,pollRate:c/i,emojiRate:d/i,usesUnpopular:a.some(m=>/^unpopular\b/i.test(m.text)),openers:k,samples:a.slice(0,12),marks:$e(a)}}function Nn(e){const t=String(e||"").trim();if(!t)return"";const a=t.charAt(0).toUpperCase()+t.slice(1);return/[:…]$/.test(a)?a:`${a}`}function re(e,t){let a=String(e||"");if(!a)return a;const i=t?.voice||"gue";return a=Fe(a,i),t&&!t.usesUnpopular&&t.openers?.[0]&&/^Unpopular:\s*/i.test(a)&&(a=a.replace(/^Unpopular:\s*/i,`${Nn(t.openers[0])} `)),a}function Vt(e,t,a="single"){const i=t?.marks||$e(t?.samples||[]);let s=hn(String(e||""));return s=re(s,t),s=kn(s,i),s=gn(s,t,a),s.trim()}function Yt(e){if(!e?.sampleCount)return"";const t=[e.voice];return e.p50Chars&&t.push(`~${e.p50Chars} karakter`),e.questionRate>=.35?t.push("sering tanya"):e.listRate>=.3?t.push("sering list"):e.pollRate>=.2&&t.push("sering polling"),e.handle&&t.push(`@${e.handle}`),t.join(" · ")}function Sn(e){const t=e&&typeof e=="object"?e:null;if(!t)return{ok:!1,error:"JSON nada rusak. Salin ulang dari ekstensi."};if(String(t.kind||"")!==Gt)return String(t.kind||"")==="xgrind-brief"?{ok:!1,error:"Ini JSON Brief (cuaca timeline), bukan nada. Tempel lewat Brief.",kind:"brief"}:{ok:!1,error:"Ini bukan JSON nada dari ekstensi. Scan post kamu, lalu Salin JSON nada."};const i=(Array.isArray(t.posts)?t.posts:[]).map(r=>({id:String(r?.id||""),text:Ht(r?.text),formats:Ut(r)})).filter(r=>r.text.length>=12);if(i.length<3)return{ok:!1,error:"Nada butuh minimal 3 post sendiri. Scan profil di ekstensi, lalu salin JSON nada."};const s=jn({handle:t.handle||t.profile?.handle||"",posts:i});return Number(t.scannedAt)>0&&(s.scannedAt=Number(t.scannedAt)),{ok:!0,error:null,kind:"tone",tone:s}}function wn(e){const t=String(e||"").trim();if(!t)return{ok:!1,error:"Kosong. Salin JSON nada dari ekstensi."};if(!(t.startsWith("{")||t.startsWith("[")))return{ok:!1,error:"Nada harus JSON dari ekstensi, bukan teks Brief."};try{return Sn(JSON.parse(t))}catch{return{ok:!1,error:"JSON nada rusak. Salin ulang dari ekstensi."}}}const vn=[{id:"mutual",title:"Mutual",kicker:"Orang yang follow balik",rules:["Post original — bukan balasan atau repost — yang kena dorongan percakapan.","Satu pertanyaan yang gampang dijawab lebih berharga daripada deretan like.","Quote dari mutual juga mengangkat; emoji-only hampir tidak."]},{id:"rekomendasi",title:"Rekomendasi",kicker:"Orang yang tidak follow",rules:["Skor dipotong. Like hampir tidak menolong di sini.","Kejar yang orang mau salin, kirim, atau quote.","Konten yang terasa spam atau terlalu dewasa lebih gampang tidak tampil sama sekali ke non-follower."]},{id:"ritme",title:"Ritme",kicker:"Jarak & jendela waktu",rules:["Post kedua di hari yang sama melemah; yang ketiga hampir di lantai.","For You menjemput yang masih sekitar 2 hari. Jadwal = jam kirim, bukan arsip.","Satu laporan atau “sembunyikan” menelan ratusan like. Jangan gas posting kalau yang sebelumnya sepi merata."]}],An=[{id:"kirim",label:"Layak dikirim",hint:"Satu poin yang orang mau simpan",skeleton:e=>`${e}Satu hal yang gue simpan soal ini:
8
91. …
102. …`},{id:"quote",label:"Layak di-quote",hint:"Sudut yang orang mau lanjutkan",skeleton:e=>`${e}Unpopular: …
11
12Bukan karena X, tapi karena …`},{id:"balas",label:"Memancing balasan",hint:"Pertanyaan yang gampang dijawab",skeleton:e=>`${e}Gue baru sadar: …
13
14Kamu sendiri biasanya gimana? Satu kalimat cukup.`}],Je={polling:`Gue lagi muter-muter soal ini:
15
16A. …
17B. …
18
19Kamu milih yang mana?`,tanya:`Gue baru sadar: …
20
21Kamu sendiri gimana? Satu kalimat cukup.`,list:`Tiga hal yang gue simpen:
22
231. …
242. …
253. …`,opini:`Unpopular: …
26
27Bukan karena X, tapi karena …`};function Wt(e,t=null){const a=Array.isArray(e)?e:[],i=Pe(a);return{primary:i,text:re(Je[i],t),media:a.includes("ada_media")?"image":"none",contentType:"post"}}const kt=new Set(Object.values(Je).flatMap(e=>[e,...pn.map(t=>Fe(e,t))]));function xt(e){const t=String(e||"").trim();if(!t||kt.has(t))return!0;const a=Fe(t,"gue");if(kt.has(a))return!0;const i=Je.opini.replace(/^Unpopular:\s*/i,"");return i&&a.endsWith(i)&&a.includes("…")?!0:t.includes("…")&&t.replace(/[.…\s]/g,"").length<48}function In(e,t){const a=ge(e);return a.find(i=>i.id===t)||a[0]||{id:"lainnya",label:"Lainnya"}}function Xt(e,t,{topicId:a=null,tone:i=null}={}){const s=In(e,a),r=Wt(e?.formats,i);return{id:`sk_${e?.id||"x"}_${r.primary}`,tag:"kerangka",format:r.primary,topicId:s.id,topicLabel:s.label,text:r.text,media:r.media,fromPostId:e?.id||null,fromHandle:e?.handle||"",fromName:e?.displayName||"",fromAvatar:e?.avatar||""}}function Tn(e,{focusTopicId:t=null}={}){return[...e?.posts||[]].sort((i,s)=>De(s)-De(i)).map(i=>{const s=ge(i);return t&&!s.some(r=>r.id===t)?null:Xt(i,e,{topicId:t})}).filter(Boolean).slice(0,12)}const yt={none:{id:"none",label:"Teks cukup",short:"Tanpa gambar"},photo:{id:"photo",label:"Foto HP",short:"Foto"},text:{id:"text",label:"Kartu teks",short:"Kartu"}};function ke(e,t=""){const a=e&&typeof e=="object"?e:null,i=typeof e=="string"?e:t;let s=String(a?.need||"").toLowerCase();if((s==="phone"||s==="image"||s==="foto")&&(s="photo"),(s==="card"||s==="slide"||s==="caption")&&(s="text"),s!=="photo"&&s!=="text"&&s!=="none"){const c=`${a?.shot||""} ${i}`.toLowerCase();c.trim()?/(kartu|slide|tulis di gambar|text card)/i.test(c)?s="text":/(tidak perlu|teks cukup|jangan pakai gambar|no image)/i.test(c)?s="none":s="photo":s="none"}const r=String(a?.shot||i||"").replace(/\s+/g," ").trim().slice(0,280),l=String(a?.why||"").replace(/\s+/g," ").trim().slice(0,180),o=String(a?.avoid||"").replace(/\s+/g," ").trim().slice(0,180);return s==="none"&&!r&&!l?{need:"none",shot:"",why:"Kalimatnya sudah cukup. Jangan maksa gambar.",avoid:"Jangan copas foto orang dari timeline."}:{need:s,shot:r||(s==="photo"?"Satu foto HP, 10 detik, cahaya apa adanya.":""),why:l||(s==="none"?"Teks cukup.":""),avoid:o||"Jangan copas foto sumber. Jangan muka orang tanpa izin."}}function zt(e){return yt[e]?.label||yt.none.label}function Qt(e){const t=ke(e);return t.need==="none"?t.why||"Teks cukup.":[t.shot,t.why].filter(Boolean).join(" — ").slice(0,280)}function Cn(e){const t=ke(e),a=[`Yang perlu ada: ${zt(t.need)}`];return t.shot&&a.push(t.shot),t.why&&a.push(t.why),t.avoid&&a.push(`Jangan: ${t.avoid}`),a.join(`
28`)}const jt={single:{id:"single",label:"Post"},thread:{id:"thread",label:"Utas"}},Dn=/(like jika|rt jika|retweet jika|repost jika|follow dulu|follow ya|komen di bawah|comment below|tag temen|tag teman|share ke|drop emoji|minta rt|minta like|like dong|rt dong|follow dong|subscribe)/i,Bn=/^(like|rt|retweet|repost|follow|komen|comment|share|tag|drop)\b/i;function Ln(e){return String(e||"").split(`
29`).filter(t=>{const a=t.trim();return a?!(Dn.test(a)||Bn.test(a)&&a.length<52):!0}).join(`
30`).replace(/\n{3,}/g,`
31
32`).trim()}function Nt(e){return String(e||"").toLowerCase().replace(/[^\p{L}\p{N}\s]/gu," ").replace(/\s+/g," ").trim()}function Mn(e,t,a=8){const i=Nt(e);if(i.length<24)return!1;const s=Array.isArray(t)?t:[];for(let r=0;r<s.length;r+=1){const l=Nt(s[r]?.text);if(l.length<20)continue;const o=l.split(" ");if(!(o.length<a))for(let c=0;c<=o.length-a;c+=1){const d=o.slice(c,c+a).join(" ");if(d.length>=22&&i.includes(d))return!0}}return!1}function En(e){const t=String(e||""),a=t.match(/\b([A-Za-z][A-Za-z0-9]{2,24})\s+(?:tu|itu)\s+apa\b/i)||t.match(/tau\s+(?:ga|gak|nggak|tidak)\s+([A-Za-z][A-Za-z0-9]{2,24})\b/i);return a?a[1]:""}function Pn(e){const t=H(e.views),a=Number(e.replies)||0;return a>=20?`${t} views, ${H(a)} orang nyaut — uratnya masih hidup.`:Number(e.views)>=2e3?`${t} views. Orang berhenti, belum tentu setuju.`:"Lagi lewat di timeline. Jangan ulang yang sudah ramai."}function On(e){const t=Array.isArray(e?.formats)?e.formats:[],a=String(e?.text||"");return t.includes("list")||t.includes("polling")||a.length>220||/\bvs\b|bilang:/i.test(a)?"thread":"single"}function Rn(e){return(Array.isArray(e?.formats)?e.formats:[]).includes("ada_media")||!!e?.thumb}function xe(e){if(!e||typeof e!="object")return null;const t=String(e.id||"").trim().slice(0,64),a=String(e.label||"").replace(/\s+/g," ").trim().slice(0,72);if(!t||!a)return null;const i=e.form==="thread"?"thread":"single",s=Array.isArray(e.fromPostIds)?e.fromPostIds.map(r=>
32String(r||"").trim()).filter(Boolean).slice(0,6):[];return{id:t,label:a,tension:String(e.tension||"").replace(/\s+/g," ").trim().slice(0,220),whyNow:String(e.whyNow||"").replace(/\s+/g," ").trim().slice(0,180),fromPostIds:s,seenInImage:String(e.seenInImage||"").replace(/\s+/g," ").trim().slice(0,220),form:i,imageConcept:ke(e.imageConcept,e.imageIdea),imageIdea:Qt(e.imageConcept||e.imageIdea),source:e.source==="ai"?"ai":"local",imageRead:!!e.imageRead}}function _n(e){return(Array.isArray(e)?e.slice(0,12):[]).map(a=>{const i=String(a?.text||""),s=Rn(a),r=ge(a)[0],l=En(i);let o="Yang lagi ramai",c="Sudut yang belum dikatakan — bukan ulang yang sudah viral.",d=s?{need:"photo",shot:"Foto HP sendiri soal urat yang sama, bukan copas foto sumber.",why:"Orang berhenti karena gambar. Kamu harus punya milikmu.",avoid:"Jangan screenshot tweet orang."}:{need:"none",shot:"",why:"Teks cukup kalau sudutnya konkret.",avoid:"Jangan maksa stok atau foto viral."};return/\bvs\b|bilang:|anak \w+ vs/i.test(i)?(o="Dua kubu, satu momen",c="Yang rame biasanya bukan fakta, tapi siapa yang boleh ‘punya’ momen itu."):l?(o=l.charAt(0).toUpperCase()+l.slice(1),c=s?"Nama di teks kosong tanpa gambar. Yang orang kira ‘jelas’ sering salah kampung.":"Orang nanya nama. Jawaban yang rame belum tentu yang paling akurat."):r?.id&&r.id!=="lainnya"?(o=r.label,c="Uratnya panas. Jangan ikut chorus — potong di tempat orang belum ngomong."):/\?/.test(i)&&s?(o="Yang ada di foto",c="Teksnya nanya, yang bikin orang berhenti adalah gambarnya."):s&&(o="Gambar yang dikira jelas",c="Foto sudah ‘jelas’, orang tetap baca beda."),xe({id:`vein_${a.id}`,label:o,tension:c,whyNow:Pn(a),fromPostIds:[String(a.id)],seenInImage:s?"Gambar belum dibaca. Pakai Baca bahan supaya isinya ikut.":"",form:On(a),imageConcept:d,imageIdea:Qt(d),source:"local",imageRead:!1})}).filter(Boolean)}function Zt(e){if(!e)return null;const t=String(e.id||"").trim();return t?{id:t,handle:String(e.handle||"").replace(/^@/,"").slice(0,20),text:String(e.text||"").replace(/\s+/g," ").trim().slice(0,400),views:Number(e.views)||0,replies:Number(e.replies)||0,formats:Array.isArray(e.formats)?e.formats.slice(0,6):[],thumb:String(e.thumb||"").trim().slice(0,420),quoted:!!e.quoted,mediaType:String(e.mediaType||"").slice(0,16)}:null}function $n(e){if(!e?.sampleCount)return null;const t=(e.samples||[]).slice(0,12).map(i=>String(i.text||i||"").slice(0,320)),a=e.marks||$e(e.samples||[]);return{voice:e.voice||"gue",p50Chars:Number(e.p50Chars)||0,avgChars:Number(e.avgChars)||0,questionRate:Number(e.questionRate)||0,listRate:Number(e.listRate)||0,pollRate:Number(e.pollRate)||0,emojiRate:Number(e.emojiRate)||Number(a.emojiRate)||0,usesUnpopular:!!e.usesUnpopular,openers:Array.isArray(e.openers)?e.openers.slice(0,4):[],marks:{lowercaseStart:!!a.lowercaseStart,periodEnd:!!a.periodEnd,usesNewlines:!!a.usesNewlines,avgWords:Number(a.avgWords)||0,slang:Array.isArray(a.slang)?a.slang.slice(0,8):[]},samples:t}}function Fn(e){return(Array.isArray(e?.topics)?e.topics:[]).map((a,i)=>xe({...a,id:String(a?.id||`ai_${i+1}`).slice(0,64),source:"ai",imageRead:!!a?.seenInImage||!!e?.imagesRead})).filter(Boolean).slice(0,10)}const fe="xgrind:creator-lab:brief:v1";function ne(){return{brief:null,importedAt:null}}function Jn(e,t){const a=new Set((t||[]).map(s=>String(s.id)));return(Array.isArray(e?.veins)?e.veins:[]).map(xe).filter(s=>s&&(s.fromPostIds||[]).some(r=>a.has(String(r)))).slice(0,12)}function Ke(e,{seed:t,focusTopicId:a}={}){if(!e?.posts?.length)return e;const i=mn(e.posts),s=t??(Number(e.ideaSeed)||0),r=Tn({...e},{focusTopicId:a||null}),l=Jn(e,e.posts);return{...e,topics:i,ideas:r,ideaSeed:s,veins:l,veinsAt:l.length&&Number(e.veinsAt)||0,veinsVision:l.length?!!e.veinsVision:!1}}function Kn(e,t,{vision:a=!1}={}){return e?.posts?.length?{...e,veins:(t||[]).map(xe).filter(Boolean).slice(0,12),veinsAt:Date.now(),veinsVision:!!a}:e}function qn(){try{const e=localStorage.getItem(fe);if(!e)return ne();const t=JSON.parse(e),a=Jt({importedAt:t.importedAt,exportedAt:t.exportedAt||t?.brief?.exportedAt}
32),i=(t?.brief?.posts||[]).map(Re).filter(Boolean).filter(s=>_e(s,a));return i.length?{brief:Ke({...t.brief,posts:i}),importedAt:Number(t.importedAt)||Date.now()}:(Array.isArray(t?.brief?.posts)&&t.brief.posts.length&&localStorage.removeItem(fe),ne())}catch{return ne()}}function be(e){try{if(!e?.brief?.posts?.length){localStorage.removeItem(fe);return}localStorage.setItem(fe,JSON.stringify({brief:e.brief,importedAt:e.importedAt||Date.now()}))}catch{}}function ea(e){const t=cn(e);if(!t.ok)return t;const a={brief:Ke(t.brief,{seed:0}),importedAt:Date.now()};return be(a),{ok:!0,error:null,...a}}function Gn(e,{focusTopicId:t}={}){const a=(Number(e?.ideaSeed)||0)+1;return Ke(e,{seed:a,focusTopicId:t})}function Hn(){return be(ne()),ne()}const Be="xgrind:creator-lab:tone:v1";function ie(){return{tone:null,importedAt:null}}function Un(){try{const e=localStorage.getItem(Be);if(!e)return ie();const t=JSON.parse(e),a=t?.tone&&typeof t.tone=="object"?t.tone:null;return a?.sampleCount?{tone:a,importedAt:Number(t.importedAt)||Date.now()}:ie()}catch{return ie()}}function qe(e){try{if(!e?.tone?.sampleCount){localStorage.removeItem(Be);return}localStorage.setItem(Be,JSON.stringify({tone:e.tone,importedAt:e.importedAt||Date.now()}))}catch{}}function ta(e){const t=wn(e);if(!t.ok)return t;const a={tone:t.tone,importedAt:Date.now()};return qe(a),{ok:!0,error:null,kind:"tone",...a}}function Vn(){return qe(ie()),ie()}const Yn=12e4,Wn=9e4;function aa(e,t){const a=String(e?.code||"");return a==="functions/not-found"||a==="functions/unimplemented"||/not found|does not exist/i.test(String(e?.message||""))?"Baca bahan belum siap di akun ini. Coba lagi nanti, atau tulis dari sudut lokal dulu.":pa(e,t)}async function Xn(e,{day:t=""}={}){const a=(Array.isArray(e)?e:[]).map(Zt).filter(Boolean).slice(0,10);if(!a.length)return{ok:!1,error:"Tidak ada bahan. Tempel Brief dulu.",veins:[],imagesRead:0};try{const s=await Dt(At,"creatorLabMineTopics",{timeout:Yn})({posts:a,day:String(t||"").slice(0,16)}),r=s?.data&&typeof s.data=="object"?s.data:{},l=Fn(r);return l.length?{ok:!0,error:null,veins:l,imagesRead:Number(r.imagesRead)||0}:{ok:!1,error:"Lab tidak nemu sudut yang cukup tajam. Coba Baca ulang, atau pilih bahan lain.",veins:[],imagesRead:Number(r.imagesRead)||0}}catch(i){return{ok:!1,error:aa(i,"Gagal baca bahan. Coba sebentar lagi."),veins:[],imagesRead:0}}}async function zn({vein:e,posts:t,tone:a,form:i}){if(!e?.id)return{ok:!1,error:"Pilih sudut dulu."};const s=new Set((e.fromPostIds||[]).map(String)),r=(Array.isArray(t)?t:[]).filter(l=>!s.size||s.has(String(l.id))).map(Zt).filter(Boolean).slice(0,4);try{const o=await Dt(At,"creatorLabWriteTake",{timeout:Wn})({vein:{id:e.id,label:e.label,tension:e.tension,whyNow:e.whyNow,fromPostIds:e.fromPostIds||[],seenInImage:e.seenInImage||"",form:i==="thread"?"thread":"single",imageIdea:e.imageIdea||"",imageConcept:e.imageConcept||null},form:i==="thread"?"thread":"single",posts:r,tone:$n(a)}),c=o?.data&&typeof o.data=="object"?o.data:{},d=c.form==="thread"||i==="thread"?"thread":"single",k=Vt(Ln(c.text),a,d);return k?Mn(k,r)?{ok:!1,error:"Hasil terlalu dekat dengan bahan. Coba tulis ulang — jangan salin."}:{ok:!0,error:null,text:k,form:d,imageIdea:String(c.imageIdea||e.imageIdea||"").trim(),imageConcept:c.imageConcept||e.imageConcept||null,whyItHolds:String(c.whyItHolds||"").trim().slice(0,220)}:{ok:!1,error:"Lab kosong. Coba tulis ulang."}}catch(l){return{ok:!1,error:aa(l,"Gagal nulis sudut. Coba sebentar lagi.")}}}const Qn={id:"d_fallback",text:"",contentType:"post",media:"none",scenario:"follower",scheduledAt:null,copiedAt:null,source:"tulis",briefSeed:null,createdAt:0,updatedAt:0,firestoreId:null};function Zn(){const e=Pa();if(e.drafts.length)return e;const t=me();return{drafts:[t],activeDraftId:t.id}}function ei(e,t){return Object.keys(t).every(a=>a==="updatedAt"||a==="createdAt"?!0:a==="briefSeed"?JSON.stringify(e.briefSeed||null)===JSON.stringify(t.briefSeed||null):e[a]===t[a])}const na=u.createContext(null);function ti({user:e,xStats:t,children:a}){const i=e?.uid&&!e.isAnonymous?e.uid:null,{tier:s,isAdmin:r,loading:l}=fa(),o=Ta(s,r),c=u.useRef(Zn()),[d,k]=u.useState(c.current.drafts),[b,h]=u.useState(c.current.activeDraftId),[m,p]=u.useState(!1),S=u.useRef(!0),N=u.useRef(qn()),[f,w]=u.useState(N.current.brief),[x,j]=u.useState(N.current.importedAt),T=u.useRef(Un()),[v,L]=u.useState(T.current.tone),[B,J]=u.useState(T.current.importedAt),[$,Y]=u.useState(null),[W,X]=u.useState(0),[I,E]=u.useState(!1),[Ge,z]=u.useState(""),[He,Ue]=u.useState(!1),[Ve,U]=u.useState(""),[Ye,le]=u.useState(null),te=u.useRef(""),ye=u.useRef(!1),je=u.useRef(!1),We=u.useRef("");u.useEffect(()=>{if(S.current){S.current=!1,pt({drafts:d,activeDraftId:b});return}pt({drafts:d,activeDraftId:b})},[d,b]),u.useEffect(()=>{if(!i){p(!0);return}return $a(i,y=>{k(A=>{if(!y.length)return A;const D=A.filter(R=>String(R.text||"").trim()||R.scheduledAt),P=Ka(D,y);return bt(A,P.length?P:A)}),p(!0)},()=>p(!0))},[i]);const q=u.useCallback(async g=>{if(!i||!g)return g;try{const y=await Fa(i,g);return y.firestoreId&&y.firestoreId!==g.firestoreId&&k(A=>bt(A,A.map(D=>D.id===y.id?y:D))),y}catch{return g}},[i]),Q=u.useCallback((g,y)=>{k(A=>{let D=!1;const P=A.map(R=>R.id!==g||ei(R,y)?R:(D=!0,{...R,...y,updatedAt:Date.now()}));return D?P:A})},[]),Z=u.useCallback((g={})=>{const y=me(g);return k(A=>
32[y,...A]),h(y.id),q(y),y},[q]),Xe=u.useCallback(g=>{const y=typeof g=="string"?ea(g):g;return!y?.ok||!y.brief||(w(y.brief),j(y.importedAt||Date.now()),Y(null),X(0),z(""),U(""),le(null),te.current=""),y},[]),ze=u.useCallback(()=>{Hn(),w(null),j(null),Y(null),X(0),z(""),U(""),le(null),te.current=""},[]),Qe=u.useCallback(g=>{const y=typeof g=="string"?ta(g):g;if(!y?.ok||!y.tone)return y;const A=y.importedAt||Date.now();return qe({tone:y.tone,importedAt:A}),L(y.tone),J(A),{...y,importedAt:A}},[]),Ze=u.useCallback(()=>{Vn(),L(null),J(null)},[]),et=u.useCallback((g=null)=>{w(y=>{if(!y?.posts?.length)return y;const A=Gn(y,{focusTopicId:g});return be({brief:A,importedAt:x||Date.now()}),A})},[x]),ae=u.useCallback(g=>{if(!g?.text)return;const y={text:re(g.text,v),media:g.media||"none",contentType:"post",source:"brief",briefSeed:{postId:g.fromPostId||"",handle:g.fromHandle||"",format:g.format,topicId:g.topicId||"",ideaId:g.id,appliedAt:Date.now()}},A=d.find(G=>G.id===b)||d[0],P=(f?.ideas||[]).find(G=>G.id===A?.briefSeed?.ideaId),R=P?re(String(P.text||""),v).trim():"";if(A&&(xt(A.text)||R&&String(A.text||"").trim()===R)){Q(A.id,y);return}Z(y)},[Z,b,f,d,v,Q]),tt=u.useCallback((g,y=null)=>{if(!g)return;const A=Xt(g,f,{seed:Number(f?.ideaSeed)||0,topicId:y,tone:v});if(A?.text){ae({...A,fromPostId:g.id,fromHandle:g.handle});return}const D=Wt(g.formats,v);ae({id:`sk_${g.id}`,text:D.text,media:D.media,format:D.primary,topicId:y||"",fromPostId:g.id,fromHandle:g.handle})},[f,ae,v]),oe=u.useMemo(()=>f?.veins?.length?f.veins:_n(f?.posts||[]),[f]),ee=u.useMemo(()=>oe.find(g=>g.id===$)||null,[oe,$]),at=u.useCallback(g=>{const y=g||null;Y(y),X(y?Date.now():0),U("")},[]),ce=u.useCallback(async()=>{if(!(!f?.posts?.length||ye.current)){if(!i){z("Masuk dulu supaya Lab bisa baca gambar.");return}if(!o){z(ut);return}ye.current=!0,E(!0),z("");try{const g=await Xn(f.posts,{day:f.day||f.dayLabel||""});g.ok?(w(y=>{if(!y?.posts?.length)return y;const A=Kn(y,g.veins,{vision:g.imagesRead>0});return be({brief:A,importedAt:x||Date.now()}),A}),Y(null),X(0),le(null)):z(g.error||"Gagal baca bahan.")}finally{ye.current=!1,E(!1)}}},[f,x,o,i]);u.useEffect(()=>{if(!f?.posts?.length||Number(f.veinsAt)>0||!i||!o)return;const g=`${x||0}:${f.posts.length}`;We.current!==g&&(We.current=g,ce())},[f,x,o,i,ce]);const nt=u.useCallback((g,y)=>{if(!g?.text||!y)return;const A=g.form==="thread"?"thread":"single",D=Vt(g.text,v,A),P=g.imageConcept||y.imageConcept||null,R=P?.need&&P.need!=="none",Se={text:D,contentType:A==="thread"?"thread":"post",media:R||g.imageIdea?"image":"none",source:"brief",briefSeed:{postId:(y.fromPostIds||[])[0]||"",handle:"",format:A==="thread"?"list":"opini",topicId:y.id,ideaId:y.id,veinId:y.id,appliedAt:Date.now()}},G=d.find(ua=>ua.id===b)||d[0],ct=String(G?.text||"").trim(),ca=G&&(!ct||xt(G.text)||te.current&&ct===te.current);if(te.current=D.trim(),le({whyItHolds:g.whyItHolds||"",imageIdea:g.imageIdea||"",imageConcept:P}),ca){Q(G.id,Se);return}Z(Se)},[b,Z,d,v,Q]),it=u.useCallback(async g=>{if(!(!ee||je.current)){if(!i){U("Masuk dulu supaya Lab bisa nulis sudut.");return}if(!o){U(ut);return}je.current=!0,Ue(!0),U("");try{const y=await zn({vein:ee,posts:f?.posts||[],tone:v,form:g==="thread"?"thread":"single"});y.ok?nt(y,ee):U(y.error||"Gagal nulis sudut.")}finally{je.current=!1,Ue(!1)}}},[nt,f,o,ee,v,i]),st=u.useCallback(async g=>{const y=d.find(A=>A.id===g);if(k(A=>{const D=A.filter(P=>P.id!==g);if(D.length===0){const P=me();return h(P.id),[P]}return b===g&&h(D[0].id),D}),i&&y)try{await Ja(i,y)}catch{}},[b,d,i]),O=u.useMemo(()=>d.find(g=>g.id===b)||d[0]||Qn,[d,b]),ue=u.useMemo(()=>Ra(d,O.id,O.scheduledAt||O.createdAt||Date.now()),[d,O.id,O.scheduledAt,O.createdAt]),rt=u.useMemo(()=>Ba(O,{sameDayIndex:ue,scenario:O.scenario}),[O,ue]),de=Number(t?.followers??t?.followers_count??0)||0,lt=de>0&&de<xa,la=Ot(O),Ne=u.useRef(O);Ne.current=O;const ot=u.useCallback(()=>{q(Ne.current)},[q]);u.useEffect(()=>{if(!i||!m)return;const g=window.setTimeout(()=>{q(Ne.current)},1600);return()=>window.clearTimeout(g)},[la,i,m,q]);const oa=u.useMemo(()=>({uid:i,user:e,xStats:t,drafts:d,activeDraft:O,activeDraftId:b,setActiveDraftId:h,updateDraft:Q,addDraft:Z,removeDraft:st,persistOne:q,flushActive:ot,score:rt,dayIndex:ue,coldStart:lt,followers:de,hydratedRemote:m,brief:f,briefImportedAt:x,importBrief:Xe,clearBrief:ze,remixBrief:et,applyBriefIdea:ae,applyBriefFormat:tt,veins:oe,pickedVein:ee,pickedVeinId:$,pickedAt:W,pickVein:at,mineTopics:ce,writeTake:it,mineBusy:I,mineError:Ge,writeBusy:He,writeError:Ve,takeNote:Ye,canUseLabAi:o,tierL
32oading:l,tone:v,toneImportedAt:B,importTone:Qe,clearTone:Ze}),[i,e,t,d,O,b,Q,Z,st,q,ot,rt,ue,lt,de,m,f,x,Xe,ze,et,ae,tt,oe,ee,$,W,at,ce,it,I,Ge,He,Ve,Ye,o,l,v,B,Qe,Ze]);return n.jsx(na.Provider,{value:oa,children:a})}function F(){const e=u.useContext(na);if(!e)throw new Error("useCreatorLab harus di dalam CreatorLabProvider");return e}const ai="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700&family=Outfit:wght@400;500;600;700&display=swap",ni="#10131A",_="lab-btn",M="lab-btn-ghost",ia="lab-chip";function V({open:e,onClose:t,title:a,kicker:i,children:s,footer:r,wide:l=!1,sheet:o=!1}){const c=u.useRef(t);return c.current=t,u.useEffect(()=>{if(!e)return;const d=b=>{b.key==="Escape"&&c.current?.()};document.addEventListener("keydown",d);const k=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",d),document.body.style.overflow=k}},[e]),e?n.jsxs("div",{className:"fixed inset-0 z-[80] flex items-end justify-center sm:items-center sm:p-4",children:[n.jsx("button",{type:"button",className:"lab-modal-scrim","aria-label":"Tutup",onClick:t}),n.jsxs("div",{role:"dialog","aria-modal":"true","aria-labelledby":"lab-modal-title",className:`lab-modal ${l?"max-w-2xl":"max-w-md"} ${o?"max-w-lg":""}`,children:[n.jsxs("div",{className:"lab-modal-head",children:[n.jsxs("div",{className:"min-w-0",children:[i?n.jsx("p",{className:"lab-kicker",children:i}):null,n.jsx("h2",{id:"lab-modal-title",className:"lab-h2 mt-1 truncate",children:a})]}),n.jsx("button",{type:"button",onClick:t,className:"lab-modal-x","aria-label":"Tutup",children:"×"})]}),n.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto px-5 pb-5",children:s}),r?n.jsx("div",{className:"border-t border-[color:var(--lab-line)] px-5 py-3",children:r}):null]})]}):null}function ii({open:e,onClose:t}){return n.jsx(V,{open:e,onClose:t,title:"Tiga playbook",kicker:"Tips terikat rumus",wide:!0,children:n.jsx("div",{className:"grid gap-3 sm:grid-cols-3",children:vn.map(a=>n.jsxs("article",{className:"lab-surface p-4",children:[n.jsx("p",{className:"lab-kicker",children:a.kicker}),n.jsx("h3",{className:"lab-h2 mt-1 text-[1.15rem]",children:a.title}),n.jsx("ol",{className:"mt-3 list-decimal space-y-2 pl-4 text-[13px] leading-snug text-[color:var(--lab-muted)]",children:a.rules.map(i=>n.jsx("li",{children:i},i))})]},a.id))})})}const si=[{to:"/creator-lab/tulis",id:"tulis",label:"Tulis"},{to:"/creator-lab/jadwal",id:"jadwal",label:"Jadwal"},{to:"/creator-lab/bedah",id:"bedah",label:"Bedah"}];function ri({children:e,mode:t="tulis"}){const a=vt(),{uid:i,flushActive:s,drafts:r,activeDraftId:l,setActiveDraftId:o,addDraft:c}=F(),[d,k]=u.useState(!1),[b,h]=u.useState(!1);u.useEffect(()=>{const N="creator-lab-fonts";if(document.getElementById(N))return;const f=document.createElement("link");f.id=N,f.rel="stylesheet",f.href=ai,document.head.appendChild(f)},[]),u.useEffect(()=>{const N=document.querySelector('meta[name="theme-color"]'),f=N?.getAttribute("content");N?.setAttribute("content",ni);const w=document.documentElement,x=w.style.colorScheme;return w.style.colorScheme="dark",()=>{N&&f&&N.setAttribute("content",f),w.style.colorScheme=x}},[]);const m=()=>{s(),window.history.length>1?a(-1):a("/")},p=N=>{o(N),t!=="tulis"&&a("/creator-lab/tulis")},S=()=>{c(),t!=="tulis"&&a("/creator-lab/tulis")};return n.jsxs("div",{className:"lab-root relative min-h-[100dvh]",children:[n.jsxs("header",{className:"lab-float",children:[n.jsx("button",{type:"button",className:"lab-quiet !px-1",onClick:m,"aria-label":"Kembali ke XGrind",children:"←"}),n.jsx("span",{className:"lab-mark","aria-hidden":!0,children:"CL"}),n.jsx("p",{className:"lab-display hidden min-w-0 truncate text-[1.05rem] sm:block",children:"Creator Lab"}),n.jsx("nav",{className:"lab-modes","aria-label":"Mode Creator Lab",children:si.map(N=>n.jsx(da,{to:N.to,className:({isActive:f})=>`lab-mode ${f?"is-on":""}`,children:N.label},N.id))}),n.jsxs("div",{className:"ml-auto flex min-w-0 flex-wrap items-center gap-2",children:[r.length?n.jsx("select",{className:"lab-select",value:l,onCh
32ange:N=>p(N.target.value),"aria-label":"Draft tersimpan",children:r.slice(0,24).map(N=>n.jsx("option",{value:N.id,children:Ea(N)},N.id))}):null,n.jsx("button",{type:"button",className:"lab-btn-ghost",onClick:S,children:"Baru"}),n.jsx("button",{type:"button",className:"lab-quiet",onClick:()=>k(!0),children:"Playbook"}),i?null:n.jsx("button",{type:"button",className:"lab-btn",onClick:()=>h(!0),children:"Masuk"})]})]}),n.jsx("main",{className:"relative min-w-0",children:e}),n.jsx(ii,{open:d,onClose:()=>k(!1)}),n.jsx(ba,{isOpen:b,onClose:()=>h(!1),onLoginSuccess:()=>h(!1)})]})}function li(e){if(!e)return"";try{return new Date(e).toLocaleString("id-ID",{day:"numeric",month:"short",hour:"2-digit",minute:"2-digit"})}catch{return""}}function oi(e,t){return(String(e||t||"?").replace(/^@/,"").trim()[0]||"?").toUpperCase()}function ci(e,t){const a=e?.media?.[0];return(typeof a=="string"?a:a?.url||a?.media_url_https||"")||t?.thumb||""}function ui(e){return!(e?.avatar&&e?.displayName)}function di(e){return(Array.isArray(e?.formats)?e.formats:[]).includes("ada_media")&&!e?.thumb}function sa({post:e,enrich:t=!1}){const[a,i]=u.useState(null),[s,r]=u.useState(!1),[l,o]=u.useState(!1),c=t&&!!e?.id&&(ui(e)||di(e));if(u.useEffect(()=>{i(null),r(!1),o(!1)},[e?.id]),u.useEffect(()=>{if(!c)return;let x=!1;return Bt({statusId:e.id,authorHandle:e.handle,tweetUrl:e.url}).then(j=>{!x&&j&&i(j)}).catch(()=>{}),()=>{x=!0}},[c,e?.id,e?.handle,e?.url]),!e)return null;const d=a?.authorName||e.displayName||e.handle,k=a?.authorHandle||e.handle,b=!l&&(a?.authorAvatar||e.avatar)||"",h=a?.text||e.text||"",m=!s&&ci(a,e)||"",p=a?.metrics?.likes||e.likes||0,S=a?.metrics?.replies||e.replies||0,N=a?.metrics?.reposts||e.retweets||0,f=a?.metrics?.views||e.views||0,w=li(e.createdAt||se(e.id));return n.jsxs("article",{className:"lab-tweet",children:[n.jsx("div",{className:"lab-tweet-av","aria-hidden":!0,children:b?n.jsx("img",{src:b,alt:"",referrerPolicy:"no-referrer",onError:()=>o(!0)}):n.jsx("span",{children:oi(d,k)})}),n.jsxs("div",{className:"lab-tweet-body",children:[n.jsxs("header",{className:"lab-tweet-head",children:[n.jsxs("span",{className:"lab-tweet-name",children:[d,e.verified?n.jsx("span",{className:"lab-tweet-v",title:"Terverifikasi",children:"✓"}):null]}),n.jsxs("span",{className:"lab-tweet-meta",children:["@",k,w?` · ${w}`:""]})]}),n.jsx("p",{className:"lab-tweet-text",children:h}),m?n.jsx("div",{className:"lab-tweet-media",children:n.jsx("img",{src:m,alt:"",referrerPolicy:"no-referrer",onError:()=>r(!0)})}):null,e.quoted?n.jsx("p",{className:"lab-tweet-flag",children:"Quote"}):null,e.poll?n.jsx("p",{className:"lab-tweet-flag",children:"Polling"}):null,n.jsxs("ul",{className:"lab-tweet-stats",children:[n.jsxs("li",{children:["Balasan ",H(S)]}),n.jsxs("li",{children:["Repost ",H(N)]}),n.jsxs("li",{children:["Like ",H(p)]}),f?n.jsxs("li",{children:["Tayangan ",H(f)]}):null]})]})]})}function mi({post:e,open:t,onClose:a,onUseFormat:i}){if(!e)return null;const s=e.url||`https://x.com/${e.handle}/status/${e.id}`;return n.jsxs(V,{open:t,onClose:a,title:e.displayName||`@${e.handle}`,kicker:"Post sumber",wide:!0,footer:n.jsxs("div",{className:"flex flex-wrap justify-end gap-2",children:[n.jsx("a",{className:M,href:s,target:"_blank",rel:"noopener noreferrer",children:"Buka di X"}),n.jsx("button",{type:"button",className:_,onClick:()=>i?.(e),children:"Pakai kerangka"})]}),children:[n.jsx(sa,{post:e,enrich:!0}),n.jsx("p",{className:"mt-4 text-[12.5px] leading-snug text-[color:var(--lab-faint)]",children:"Ini post orang lain. Pakai formatnya, jangan salin teksnya."})]})}function pi(e){const t=[`${H(e.views)} views`];return e.replies&&t.push(`${H(e.replies)} balasan`),t.push(Wa(e.formats)),t.join(" · ")}function fi({onImport:e}){const{brief:t,clearBrief:a,applyBriefFormat:i,veins:s,pickedVeinId:r}=F(),[l,o]=u.useState(null),c=t?.posts||[],d=za(t?.dayLabel||t?.day),k=Xa(t?.formatCounts),b=new Set((s.find(h=>h.id===r)?.fromPostIds||[]).map(String));return c.length?n.jsxs("aside",{className:"lab-inspector lab-cuaca",children:[n.jsxs("div",{children:[n.jsx("p",{className:"lab-kicker",children:d?`1 · ${d}`:"1 · Bahan"}),n.jsx("p",{className:"lab-h2 mt-2",children:"Cuaca"}),n.jsxs("p",{className:"mt-2 text-[12.5px] leading-snug text-[color:var(--lab-faint)]",children:[c.length," post",k?` · ${k}`:"",". Jangan disalin."]})]}),n.jsx("ul",{className:"lab-bahan-list",children:c.map(h=>{const m=Pe(h.formats),p=h.displayName||`@${h.handle}`,S=b.has(String(h.id));return n.jsx("li",{children:n.jsxs("button",{type:"button",className:`lab-bahan-card ${S?"is-on":""}`,onClick:()=>o(h),children:[h.thumb?n.jsx("img",{className:"lab-bahan-thumb",src:h.thumb,alt:"",referrerPolicy:"no-referrer"}):n.jsx("span",{className:"lab-bahan-thumb is-empty"}),n.jsxs("span",{className:"lab-bahan-body",children:[n.jsxs("span",{className:"lab-bahan-who",children:[n.jsx("strong",{children:p}),n.jsx("span",{children:he(m)})]}),n.jsx("span",{className:"lab-bahan-snip",children:h.text}),n.jsx("span",{className:"lab-bahan-meta",children:pi(h)})]})]})},h.id)})}),n.jsxs("div",{className:"flex flex-wrap gap-2",children:[n.jsx("button",{type:"button",className:M,onClick:e,children:"Ganti Brief"}),n.jsx("button",{type:"button",className:"lab-quiet !min-h-0 !px-2",onClick:a,children:"Buang"})]}),n.jsx(mi,{post:l,open:!!l,onClose:()=>o(null),onUseFormat:h=>
32{i(h),o(null)}})]}):n.jsxs("aside",{className:"lab-inspector lab-cuaca",children:[n.jsx("p",{className:"lab-kicker",children:"1 · Bahan"}),n.jsx("p",{className:"lab-h2 mt-2",children:"Belum ada Brief"}),n.jsx("p",{className:"mt-2 text-[13px] leading-snug text-[color:var(--lab-muted)]",children:"Scan 2 hari terakhir di ekstensi, Salin JSON. Ini cuaca — bukan naskah."}),n.jsx("button",{type:"button",className:_,onClick:e,children:"Tempel Brief"})]})}function bi({onImport:e}){const{tone:t,clearTone:a}=F(),i=Yt(t);return n.jsx("section",{className:"lab-tone",children:t?.sampleCount?n.jsxs(n.Fragment,{children:[n.jsx("p",{className:"lab-kicker",children:"2 · Suara"}),n.jsx("p",{className:"lab-tone-line",children:i}),n.jsxs("div",{className:"flex flex-wrap gap-2",children:[n.jsx("button",{type:"button",className:M,onClick:e,children:"Ganti"}),n.jsx("button",{type:"button",className:"lab-quiet !min-h-0 !px-2",onClick:a,children:"Buang"})]})]}):n.jsxs(n.Fragment,{children:[n.jsx("p",{className:"lab-kicker",children:"2 · Suara"}),n.jsx("p",{className:"lab-h2 mt-2",children:"Belum nempel"}),n.jsx("p",{className:"mt-2 text-[13px] leading-snug text-[color:var(--lab-muted)]",children:"Scan post kamu di ekstensi, tempel di sini. Tanpa ini Lab nulis seperti akun AI."}),n.jsx("button",{type:"button",className:_,onClick:e,children:"Tempel suara"})]})})}function hi({vein:e,on:t,form:a,setForm:i,onPick:s}){const{writeTake:r,writeBusy:l,writeError:o,canUseLabAi:c,uid:d,tone:k}=F(),b=jt[e.form]?.label||"Post";return n.jsxs("article",{className:`lab-vein-card ${t?"is-on":""}`,children:[n.jsxs("button",{type:"button",className:"lab-vein-hit",onClick:s,children:[n.jsxs("span",{className:"lab-idea-tags",children:[n.jsx("span",{children:b}),e.imageRead||e.seenInImage?n.jsx("span",{children:"Ada gambar"}):null]}),n.jsx("strong",{className:"lab-vein-label",children:e.label}),t&&e.tension?n.jsx("span",{className:"lab-vein-tension",children:e.tension}):null]}),t?n.jsxs("div",{className:"lab-vein-tools",children:[n.jsx("div",{className:"lab-seg",role:"group","aria-label":"Bentuk",children:Object.values(jt).map(h=>n.jsx("button",{type:"button",className:`${ia} ${a===h.id?"is-on":""}`,onClick:()=>i(h.id),children:h.label},h.id))}),n.jsx("button",{type:"button",className:_,disabled:l,"data-state":l?"loading":void 0,onClick:()=>r(a),children:l?"Nulis…":"Tulis sudut ini"}),d?c?k?.sampleCount?n.jsx("p",{className:"lab-take-hint",children:"Pakai suaramu. Konsep gambar muncul di tengah. Tidak dikirim ke X."}):n.jsx("p",{className:"lab-take-hint",children:"Tempel suara dulu — langkah 2 di atas."}):n.jsx("p",{className:"lab-take-hint",children:"Nulis sudut untuk PRO. Kamu tetap bisa ketik."}):n.jsx("p",{className:"lab-take-hint",children:"Masuk dulu, atau ketik di tengah."}),o?n.jsx("p",{className:"lab-mine-err",children:o}):null]}):null]})}function gi({onImportTone:e}){const{brief:t,veins:a,pickedVein:i,pickedVeinId:s,pickVein:r,mineTopics:l,mineBusy:o,mineError:c,canUseLabAi:d,uid:k}=F(),[b,h]=u.useState(i?.form==="thread"?"thread":"single"),m=t?.posts||[],p=Number(t?.veinsAt)>0;return u.useEffect(()=>{h(i?.form==="thread"?"thread":"single")},[i?.id,i?.form]),n.jsxs("aside",{className:"lab-inspector lab-studio",children:[n.jsx(bi,{onImport:e}),m.length?n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"lab-mine",children:[n.jsx("p",{className:"lab-kicker",children:"3 · Sudut"}),n.jsx("button",{type:"button",className:_,disabled:o,"data-state":o?"loading":void 0,onClick:l,children:o?"Membaca bahan…":p?"Baca ulang":"Baca bahan"}),n.jsx("p",{className:"lab-mine-hint",children:k?d?p?"Pilih satu sudut. Lab nulis di tengah.":"Lab usulkan sudut dari bahan — termasuk isi foto.":"Baca foto untuk PRO.":"Masuk dulu supaya Lab bisa baca foto."}),c?n.jsx("p",{className:"lab-mine-err",children:c}):null]}),a.length?n.jsx("ul",{className:"lab-vein-list",children:a.map(S=>{const N=s===S.id;return n.jsx("li",{children:n.jsx(hi,{vein:S,on:N,form:b,setForm:h,onPick:()=>r(N?null:S.id)})},S.id)})}):n.jsx("p",{className:"text-[13px] leading-snug text-[color:var(--lab-muted)]",children:"Brief kebaca, sudut belum kebentuk."})]}):n.jsx("p",{className:"text-[13px] leading-snug text-[color:var(--lab-muted)]",children:"Tempel Brief di langkah 1. Sudut muncul di sini."})]})}function ki({onImportBrief:e,onImportTone:t}){const{brief:a,tone:i,veins:s,mineBusy:r,mineTopics:l,uid:o,canUseLabAi:c}
32=F(),d=!!a?.posts?.length,k=!!i?.sampleCount,b=Number(a?.veinsAt)>0&&s.length>0,h=[{n:"1",label:"Bahan",done:d,detail:d?`${a.posts.length} post · 2 hari`:"JSON dari ekstensi",onClick:e,cta:d?"Ganti":"Tempel"},{n:"2",label:"Suara",done:k,detail:k?Yt(i):"Tanpa ini, hasilnya AI",onClick:t,cta:k?"Ganti":"Tempel"},{n:"3",label:"Sudut",done:b,detail:r?"Membaca bahan…":b?"Pilih satu, lalu tulis":d?"Lab baca foto + teks":"Setelah bahan",onClick:d&&o&&c?l:null,cta:!d||!o||!c||r?"":b?"Baca ulang":"Baca bahan",busy:r}];return n.jsx("ol",{className:"lab-flow","aria-label":"Tiga langkah Tulis",children:h.map(m=>n.jsxs("li",{className:`lab-flow-step ${m.done?"is-done":""} ${m.busy?"is-busy":""}`,children:[n.jsx("span",{className:"lab-flow-n","aria-hidden":!0,children:m.done?"✓":m.n}),n.jsxs("div",{className:"lab-flow-body",children:[n.jsx("strong",{children:m.label}),n.jsx("span",{children:m.detail})]}),m.cta&&m.onClick?n.jsx("button",{type:"button",className:M,disabled:m.busy,"data-state":m.busy?"loading":void 0,onClick:m.onClick,children:m.cta}):null]},m.n))})}function xi({concept:e,compact:t=!1}){const[a,i]=u.useState(!1);if(!e)return null;const s=ke(e);if(s.need==="none"&&!s.shot&&!s.why)return null;const l=async()=>{try{await navigator.clipboard.writeText(Cn(s)),i(!0),window.setTimeout(()=>i(!1),1200)}catch{i(!1)}};return n.jsxs("section",{className:`lab-shot ${t?"is-compact":""}`,children:[n.jsxs("div",{className:"lab-shot-head",children:[n.jsx("p",{className:"lab-kicker",children:"Yang perlu ada"}),n.jsx("span",{className:`lab-shot-need ${s.need==="none"?"is-none":""}`,children:zt(s.need)})]}),s.shot?n.jsx("p",{className:"lab-shot-body",children:s.shot}):null,s.why?n.jsx("p",{className:"lab-shot-why",children:s.why}):null,s.avoid?n.jsxs("p",{className:"lab-shot-avoid",children:["Jangan: ",s.avoid]}):null,t?null:n.jsx("button",{type:"button",className:M,onClick:l,children:a?"Tersalin":"Salin konsep"})]})}function yi({compact:e=!1,bare:t=!1}){const{score:a,dayIndex:i,coldStart:s,activeDraft:r}=F(),l=a.parts.slice(0,e?4:8),o=Math.max(...l.map(c=>Math.abs(c.contrib)),.001);return n.jsxs("div",{className:t?"lab-score":"lab-inspector",children:[n.jsxs("div",{children:[n.jsx("p",{className:"lab-kicker",children:"Perkiraan rumus"}),n.jsx("p",{className:"lab-eq mt-2",children:a.empty?"—":Ma(a.likeEq)}),n.jsx("p",{className:"mt-2 text-[12.5px] leading-snug text-[color:var(--lab-faint)]",children:a.empty?"Ketik di kanvas. Angka bergerak saat draft terisi.":"Setara like pada bobot resmi — bukan prediksi impresi."})]}),n.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[a.scenario==="rekomendasi"?n.jsx("span",{className:"lab-pill",children:"×0,75 rekomendasi"}):null,i>0?n.jsxs("span",{className:"lab-pill is-warn",children:["Post ke-",i+1," hari ini ×",a.diversity]}):n.jsx("span",{className:"lab-pill is-good",children:"Post pertama hari ini"}),s?n.jsx("span",{className:"lab-pill",children:"Zona akun kecil"}):null]}),l.length?n.jsx("ul",{className:"space-y-2.5",children:l.map(c=>{const d=a.empty?0:Math.min(100,Math.abs(c.contrib)/o*100),k=c.kind!=="neg";return n.jsxs("li",{children:[n.jsxs("div",{className:"mb-1 flex items-baseline justify-between gap-2",children:[n.jsx("span",{className:"min-w-0 truncate text-[12.5px] font-medium text-[color:var(--lab-ink)]",children:c.label}),n.jsx("span",{className:`shrink-0 text-[11.5px] lab-delta ${k?"":"is-neg"}`,children:a.empty?"·":Lt(c.contrib)})]}),n.jsx("div",{className:`lab-meter ${k?"":"is-neg"}`,children:n.jsx("span",{style:{width:`${d}%`}})})]},c.id)})}):null,n.jsxs("div",{className:"lab-hint",children:[n.jsx("p",{className:"text-[13px] font-medium text-[color:var(--lab-ink)]",children:a.suggestion.title}),n.jsx("p",{className:"mt-1 text-[12.5px] leading-snug text-[color:var(--lab-muted)]",children:a.suggestion.detail})]}),r.contentType==="reply"||r.contentType==="quote"?n.jsx("p",{className:"text-[12px] leading-snug text-[color:var(--lab-faint)]",children:"Dorongan mutual hanya untuk post original, bukan balasan atau repost."}):null]})}const ji=280;function Ni({count:e,limit:t=ji}){const i=2*Math.PI*8,s=Math.min(e/t,1),r=i*(1-s),l=t-e,o=e>t,c=!o&&l<=20;if(e===0)return null;const d=o?"var(--lab-bad)":c?"var(--lab-warn)":"var(--lab-muted)";return n.jsxs("div",{className:`lab-char ${o?"is-over":c?"is-near":""}`,children:[c||o?n.jsx("span",{children:o?`+${e-t}`:l}):null,n.jsxs("svg",{width:18,height:18,viewBox:"0 0 22 22",className:"shrink-0","aria-hidden":!0,
32children:[n.jsx("circle",{cx:"11",cy:"11",r:8,fill:"none",stroke:"var(--lab-line)",strokeWidth:"2.2"}),n.jsx("circle",{cx:"11",cy:"11",r:8,fill:"none",stroke:d,strokeWidth:"2.2",strokeDasharray:i,strokeDashoffset:o?0:r,strokeLinecap:"round",transform:"rotate(-90 11 11)"})]})]})}function Si(e){const t=new Date(e),a=i=>String(i).padStart(2,"0");return`${t.getFullYear()}-${a(t.getMonth()+1)}-${a(t.getDate())}T${a(t.getHours())}:${a(t.getMinutes())}`}function St(e){const t=Date.parse(e);return Number.isFinite(t)?t:null}function ra({open:e,onClose:t,draftId:a,presetDay:i,onCopied:s}){const{drafts:r,activeDraft:l,updateDraft:o,persistOne:c,setActiveDraftId:d}=F(),k=r.find(v=>v.id===a),b=k||l,[h,m]=u.useState(""),[p,S]=u.useState(!1),[N,f]=u.useState(null);u.useEffect(()=>{if(!e)return;let v=b?.scheduledAt||Date.now()+3600*1e3;if(i instanceof Date){const L=new Date(i),B=new Date(v);L.setHours(B.getHours(),B.getMinutes(),0,0),L.getTime()<Date.now()&&L.setHours(18,0,0,0),v=L.getTime()}m(Si(v)),S(!1),f(null)},[e,b?.id,b?.scheduledAt,i]);const w=u.useMemo(()=>{const v=St(h);return v?Te(r,v,Ie,b?.id):[]},[r,h,b?.id]),x=v=>{if(!b?.id){t?.();return}o(b.id,{scheduledAt:v}),c({...b,scheduledAt:v,updatedAt:Date.now()}),d(b.id),t?.()},j=()=>{const v=St(h);if(v){if(Te(r,v,Ie,b?.id).length>0){f(v),S(!0);return}x(v)}},T=()=>{k&&(o(k.id,{scheduledAt:null}),c({...k,scheduledAt:null}),t?.())};return n.jsxs(n.Fragment,{children:[n.jsxs(V,{open:e&&!p,onClose:t,title:"Pin ke jadwal",kicker:"Tidak terkirim otomatis",footer:n.jsxs("div",{className:"flex flex-wrap justify-end gap-2",children:[k?.scheduledAt?n.jsx("button",{type:"button",className:M,onClick:T,children:"Lepas jam"}):null,k&&s?n.jsx("button",{type:"button",className:M,onClick:()=>s(k),children:"Salin teks"}):null,n.jsx("button",{type:"button",className:_,onClick:j,children:"Simpan jam"})]}),children:[n.jsx("p",{className:"text-[14px] leading-snug text-[color:var(--lab-muted)]",children:"Ini pengingat untuk kamu. Creator Lab tidak menekan kirim di X."}),n.jsxs("label",{className:"mt-4 block",children:[n.jsx("span",{className:"lab-label",children:"Tanggal dan jam"}),n.jsx("input",{type:"datetime-local",value:h,onChange:v=>m(v.target.value),className:"lab-field"})]}),w.length>0?n.jsxs("p",{className:"lab-callout mt-4",children:["Ada ",w.length," draft lain dalam 2 jam. Rumus melemahkan post beruntun."]}):null,n.jsx("p",{className:"mt-4 line-clamp-3 text-[13px] text-[color:var(--lab-faint)]",children:b?.text||"Draft masih kosong — tetap bisa dipin, isi nanti di Tulis."})]}),n.jsx(V,{open:p,onClose:()=>S(!1),title:"Ritme terlalu rapat",kicker:"Post saling makan",footer:n.jsxs("div",{className:"flex flex-wrap justify-end gap-2",children:[n.jsx("button",{type:"button",className:M,onClick:()=>S(!1),children:"Ganti jam"}),n.jsx("button",{type:"button",className:_,onClick:()=>{S(!1),N&&x(N)},children:"Pin tetap"})]}),children:n.jsx("p",{className:"text-[14px] leading-snug text-[color:var(--lab-muted)]",children:"Post kedua di jendela yang sama dikali 0,5, lalu turun sampai lantai 0,25. Jarak beberapa jam biasanya lebih aman."})})]})}function wi({open:e,onClose:t,onImported:a,kind:i="brief"}){const[s,r]=u.useState(""),[l,o]=u.useState(""),[c,d]=u.useState(!1),k=u.useRef(null),b=i==="tone";u.useEffect(()=>{e||(r(""),o(""),d(!1))},[e,i]);const h=()=>{r(""),o(""),d(!1)},m=()=>{h(),t?.()},p=f=>{const w=b?ta(f):ea(f);if(!w.ok){o(w.error);return}a?.(w),h(),t?.()},S=f=>{if(!f)return;d(!0);const w=new FileReader;w.onload=()=>{d(!1);const x=String(w.result||"");r(x),p(x)},w.onerror=()=>{d(!1),o("Berkas tidak terbaca. Coba tempel teksnya.")},w.readAsText(f)},N=async()=>{d(!0),o("");try{const f=await navigator.clipboard.readText();r(f),p(f)}catch{o("Tidak bisa baca papan klip. Tempel manual di kotak.")}finally{d(!1)}};return n.jsxs(V,{open:e,onClose:m,title:b?"Tempel nada":"Tempel Brief",kicker:"Dari ekstensi",wide:!0,footer:n.jsxs("div",{className:"flex flex-wrap justify-end gap-2",children:[n.jsx("button",{type:"button",className:M,onClick:m,children:"Batal"}),n.jsx("button",{type:"button",className:_,disabled:c||!String(s).trim(),"data-state":c?"loading":void 0,onClick:()=>p(s),children:b?"Pakai nada ini":"Pakai Brief ini"})]}),children:[n.jsx("p",{className:"text-[14px] leading-snug text-[color:var(--lab-muted)]",children:b?"Di ekstensi, tab Brief: Scan post kamu, lalu Salin JSON nada. Ini cara kamu nulis — bukan cuaca timeline.":"Langkah 1: tempel JSON Brief. Langkah 2: tempel JSON suara. Lab nulis seperti kamu, bukan akun AI. Konsep gambar muncul di kanvas."}),n.jsxs("div",{className:"mt-4 flex flex-wrap gap-2",children:[n.jsx("button",{type:"button",className:M,onClick:N,disabled:c,
32children:"Tempel dari papan"}),n.jsx("button",{type:"button",className:M,onClick:()=>k.current?.click(),disabled:c,children:"Pilih berkas"}),n.jsx("input",{ref:k,type:"file",accept:".json,.md,.txt,application/json,text/markdown,text/plain",className:"sr-only",onChange:f=>{S(f.target.files?.[0]),f.target.value=""}})]}),n.jsxs("label",{className:"mt-4 block",children:[n.jsx("span",{className:"lab-label",children:b?"JSON nada":"JSON atau teks Brief"}),n.jsx("textarea",{value:s,onChange:f=>{r(f.target.value),o("")},rows:8,className:`lab-field lab-mono min-h-[10rem] resize-y ${l?"is-error":""}`,placeholder:b?'{"kind":"xgrind-tone", …}':'{"kind":"xgrind-brief", …}',"aria-invalid":l?"true":void 0})]}),l?n.jsx("p",{className:"lab-error",role:"alert",children:l}):null]})}const vi=typeof navigator<"u"&&/Mac|iPhone|iPad/.test(navigator.platform||navigator.userAgent);function ve({label:e,items:t,value:a,onChange:i}){return n.jsx("div",{className:"lab-seg",role:"group","aria-label":e,children:t.map(s=>n.jsx("button",{type:"button",onClick:()=>i(s.id),className:`${ia} ${a===s.id?"is-on":""}`,children:s.label},s.id))})}function Ai(e){return String(e||"").split(`
33`)[0].replace(/\s+/g," ").trim()}function Ii(){const{activeDraft:e,updateDraft:t,persistOne:a,brief:i,importBrief:s,importTone:r,tone:l,pickedVein:o,pickedAt:c,takeNote:d}=F(),[k,b]=u.useState(!1),[h,m]=u.useState(!1),[p,S]=u.useState(null),[N,f]=u.useState(""),w=u.useRef(null),x=u.useRef(null),j=I=>t(e.id,I),T=!!i?.posts?.length,v=Ai(e.text),L=!!String(e.text||"").trim(),B=e.briefSeed,J=!!B?.veinId,$=d?.imageConcept||o?.imageConcept||null,Y=()=>{const I=w.current;I&&(I.style.height="auto",I.style.height=`${Math.max(220,I.scrollHeight)}px`)};u.useEffect(()=>{Y()},[e.id,e.text]),u.useEffect(()=>{const I=e.briefSeed?.appliedAt||c;if(!I||Date.now()-I>2500)return;e.briefSeed?.appliedAt&&w.current?.focus();const E=window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches;x.current?.scrollIntoView({behavior:E?"auto":"smooth",block:"center"})},[e.id,e.briefSeed?.appliedAt,c]);const W=u.useCallback(async()=>{const I=String(e.text||"").trim();if(I)try{await navigator.clipboard.writeText(I);const E=Date.now();t(e.id,{copiedAt:E}),a({...e,copiedAt:E,text:I}),f("success"),window.setTimeout(()=>f(""),1400)}catch{f("error"),window.setTimeout(()=>f(""),1800)}},[e,a,t]);u.useEffect(()=>{const I=E=>{!(E.metaKey||E.ctrlKey)||E.key!=="Enter"||E.target?.closest?.(".lab-modal")||(E.preventDefault(),W())};return window.addEventListener("keydown",I),()=>window.removeEventListener("keydown",I)},[W]);const X=I=>{const E=re(I.skeleton(""),l);if(!String(e.text||"").trim()){j({text:E});return}j({text:`${e.text.trim()}
34
35${E}`})};return n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"lab-stage is-tulis mx-auto w-full max-w-[104rem]",children:[n.jsx("h1",{className:"sr-only",children:"Tulis"}),n.jsx(ki,{onImportBrief:()=>S("brief"),onImportTone:()=>S("tone")}),n.jsxs("div",{className:"lab-split lab-split-tulis",children:[n.jsx("section",{className:"lab-bahan-col min-w-0",children:n.jsx(fi,{onImport:()=>S("brief")})}),n.jsxs("section",{className:"lab-desk-col min-w-0",children:[n.jsxs("div",{className:"lab-desk",ref:x,children:[n.jsx("textarea",{ref:w,value:e.text,onChange:I=>j({text:I.target.value.slice(0,2e3)}),placeholder:o?"Tulis sudut dari kanan, atau ketik sendiri. Jangan salin bahan.":T?l?.sampleC
35ount?"Pilih sudut di kanan. Lab nulis pakai suaramu.":"Tempel suara dulu (langkah 2), baru pilih sudut.":"Langkah 1: tempel Brief. Langkah 2: tempel suara. Atau ketik di sini.",rows:8,className:"lab-composer"}),n.jsxs("div",{className:"lab-desk-bar",children:[n.jsxs("div",{className:"lab-desk-actions",children:[n.jsx(Ni,{count:e.text.length}),n.jsx("button",{type:"button",className:_,disabled:!L,"data-state":N||void 0,onClick:W,children:N==="success"?"Tersalin":N==="error"?"Gagal salin":"Salin untuk X"}),n.jsx("button",{type:"button",className:M,onClick:()=>m(!0),children:"Pin jam"}),n.jsx("button",{type:"button",className:M,onClick:()=>b(!0),children:"Rumus"})]}),n.jsxs("details",{className:"lab-more",children:[n.jsx("summary",{children:"Opsi rumus"}),n.jsxs("div",{className:"lab-desk-toolbar",children:[n.jsx(ve,{label:"Siapa yang baca",items:ya,value:e.scenario,onChange:I=>j({scenario:I})}),n.jsx(ve,{label:"Jenis",items:ja,value:e.contentType,onChange:I=>j({contentType:I})}),n.jsx(ve,{label:"Media",items:Na,value:e.media,onChange:I=>j({media:I})})]})]})]})]}),$?n.jsx(xi,{concept:$}):null,J?n.jsxs("p",{className:"lab-honesty",children:["Take dari sudut",o?.label?` · ${o.label}`:"",l?.voice?` · suara ${l.voice}`:"",e.contentType==="thread"?" · utas":"","— edit sampai kedengaran kamu, baru salin."]}):B?n.jsxs("p",{className:"lab-honesty",children:["Kerangka ",he(B.format).toLowerCase(),B.handle?` · @${B.handle}`:"","— isi sudutmu, jangan salin teks sumber."]}):n.jsxs("p",{className:"lab-honesty",children:["Lab tidak mengirim. Kamu yang salin ke X.",n.jsxs("span",{className:"lab-kbd",children:[" ",vi?"⌘↩":"Ctrl+Enter"," salin"]})]}),v?n.jsxs("p",{className:"lab-card-preview",children:[n.jsx("span",{className:"lab-kicker",children:"Baris pertama"}),n.jsx("span",{children:v})]}):null,T?null:n.jsx("div",{className:"lab-frame-row",children:An.map(I=>n.jsx("button",{type:"button",onClick:()=>X(I),className:"lab-frame-link",title:I.hint,children:I.label},I.id))})]}),n.jsx("section",{className:"lab-studio-col min-w-0",children:n.jsx(gi,{onImportTone:()=>S("tone")})})]})]}),n.jsx(V,{open:k,onClose:()=>b(!1),title:"Perkiraan rumus",kicker:"Inspector",sheet:!0,children:n.jsx(yi,{compact:!0})}),n.jsx(ra,{open:h,onClose:()=>m(!1),draftId:e.id}),n.jsx(wi,{open:!!p,kind:p||"brief",onClose:()=>S(null),onImported:I=>{p==="tone"?r(I):s(I)}})]})}const Ae=["Sen","Sel","Rab","Kam","Jum","Sab","Min"];function Ti(e){return new Date(e).toLocaleTimeString("id-ID",{hour:"2-digit",minute:"2-digit"})}function Ci(e){if(!e?.length)return"";const t=e[0],a=e[e.length-1],i=a.toLocaleDateString("id-ID",{month:"long"});if(t.getMonth()===a.getMonth())return`${t.getDate()}–${a.getDate()} ${i}`;const s=t.toLocaleDateString("id-ID",{month:"short"}),r=a.toLocaleDateString("id-ID",{month:"short"});return`${t.getDate()} ${s} – ${a.getDate()} ${r}`}function wt({items:e,drafts:t,onOpen:a,quiet:i=!1}){return e.length?n.jsx("div",{className:"flex flex-col gap-1.5",children:e.map(s=>{const r=Rt(s),l=Te(t,s.scheduledAt,Ie,s.id).length>0;return n.jsxs("button",{type:"button",onClick:()=>a(s),className:`lab-slot ${r?"is-due":l?"is-crowded":""}`,children:[n.jsx("p",{className:"text-[11px] font-medium tabular-nums",children:Ti(s.scheduledAt)}),n.jsx("p",{className:"truncate text-[12px] text-[color:var(--lab-muted)]",children:s.text||"(kosong)"}),r?n.jsx("p",{className:"mt-0.5 text-[11px] font-medium",children:"Saatnya salin"}):null]},s.id)})}):i?null:n.jsx("p",{className:"text-[13px] text-[color:var(--lab-faint)]",children:"Belum ada pin di hari ini."})}function Di(){const{drafts:e,updateDraft:t,persistOne:a,setActiveDraftId:i,addDraft:s}=F(),[r,l]=u.useState(()=>new Date),[o,c]=u.useState(()=>new Date().toDateString()),[d,k]=u.useState(null),[b,h]=u.useState(""),m=u.useMemo(()=>_a(r),[r]),p=u.useMemo(()=>m.find(x=>x.toDateString()===o)||m[0],[m,o]),S=x=>{const j=new Date(r);j.setDate(j.getDate()+x*7),l(j)},N=async x=>{try{await navigator.clipboard.writeText(x.text||"");const j={...x,copiedAt:Date.now(),updatedAt:Date.now()};t(x.id,{copiedAt:j.copiedAt}),a(j),h("Teks disalin. Kirim dari X sendiri."),setTimeout(()=>h(""),2500)}catch{h("Gagal menyalin. Salin manual dari draft.")}},f=x=>{const j=s({text:""});k({draftId:j.id,day:x})},w=(x,j)=>k({draftId:x.id,day:j});return n.jsxs("div",{className:"lab-stage mx-auto w-full max-w-[72rem]",children:[n.jsxs("div",{className:"flex flex-wrap items-end justify-between gap-4",children:[n.jsxs("div",{className:"min-w-0",children:[n.jsx("h1",{className:"lab-h1",children:"Jadwal, bukan robot"}),n.jsx("p",{className:"lab-lede",children:"Pin jam kirim. Saat waktunya tiba, salin teks — tidak terkirim otomatis."})]}),n.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[n.jsx("button",{type:"button",className:M,onClick:()=>S(-1),"aria-label":"Minggu lalu",children:"‹"}),n.jsx("p",{className:"min-w-0 text-[13.5px] font-medium",children:Ci(m)}),n.jsx("button",{type:"button",className:M,onClick:()=>S(1),"aria-label":"Minggu depan",children:"›"}),n.jsx("button",{type:"button",className:M,onClick:()=>{const x=new Date;l(x),c(x.toDateString())},children:"Hari ini"})]})]}),b?n.jsx("p",{className:"lab-callout is-ok mt-4",children:b}):null,n.jsx("div",{className:"lab-week-strip mt-6 lg:hidden",children:m.map((x,j)=>
35{const T=we(e,x),v=x.toDateString()===new Date().toDateString(),L=x.toDateString()===p.toDateString();return n.jsxs("button",{type:"button",onClick:()=>c(x.toDateString()),className:`lab-day-cell ${L?"is-on":""} ${v&&!L?"is-today":""}`,children:[n.jsx("span",{className:"lab-day-name",children:Ae[j]}),n.jsx("span",{className:"lab-display text-[1.05rem] leading-none",children:x.getDate()}),T.length?n.jsx("span",{className:"lab-day-count",children:T.length}):n.jsx("span",{className:"lab-day-count is-empty"})]},x.toISOString())})}),n.jsxs("div",{className:"lab-surface mt-3 p-4 lg:hidden",children:[n.jsxs("div",{className:"mb-3 flex items-baseline justify-between gap-2",children:[n.jsxs("p",{className:"text-[14px] font-medium",children:[Ae[m.findIndex(x=>x.toDateString()===p.toDateString())]||""," ",p.getDate()]}),n.jsx("button",{type:"button",className:"lab-add-slot !mt-0 !pt-0",onClick:()=>f(p),children:"Tambah slot"})]}),n.jsx(wt,{items:we(e,p),drafts:e,onOpen:x=>w(x,p)})]}),n.jsx("div",{className:"mt-6 hidden grid-cols-7 gap-2 lg:grid",children:m.map((x,j)=>{const T=we(e,x),v=x.toDateString()===new Date().toDateString();return n.jsxs("div",{className:`lab-day ${v?"is-today":""}`,children:[n.jsxs("div",{className:"mb-2 flex items-baseline justify-between",children:[n.jsx("span",{className:"text-[11px] font-medium text-[color:var(--lab-faint)]",children:Ae[j]}),n.jsx("span",{className:"lab-display text-[1.15rem] leading-none",children:x.getDate()})]}),n.jsx(wt,{items:T,drafts:e,onOpen:L=>w(L,x),quiet:!0}),n.jsx("button",{type:"button",onClick:()=>f(x),className:"lab-add-slot",children:"Tambah slot"})]},x.toISOString())})}),n.jsx(Bi,{drafts:e,onCopy:N,onOpen:x=>{i(x),k({draftId:x,day:null})}}),n.jsx(ra,{open:!!d,onClose:()=>k(null),draftId:d?.draftId,presetDay:d?.day,onCopied:N})]})}function Bi({drafts:e,onCopy:t,onOpen:a}){const i=e.filter(s=>Rt(s));return i.length?n.jsxs("div",{className:"lab-surface mt-6 p-4",children:[n.jsx("p",{className:"lab-kicker",children:"Saatnya salin"}),n.jsx("ul",{className:"mt-2 space-y-2",children:i.map(s=>n.jsxs("li",{className:"flex flex-wrap items-center justify-between gap-2",children:[n.jsx("button",{type:"button",className:"min-w-0 flex-1 truncate text-left text-[14px] font-medium",onClick:()=>a(s.id),children:s.text||"(draft kosong)"}),n.jsx("button",{type:"button",className:_,onClick:()=>t(s),children:"Salin"})]},s.id))})]}):null}function Li(){const{addDraft:e}=F(),t=vt(),[a,i]=u.useState(""),[s,r]=u.useState(!1),[l,o]=u.useState(""),[c,d]=u.useState(null),[k,b]=u.useState(null),[h,m]=u.useState(""),[p,S]=u.useState(!1),N=async(j,T)=>{j?.preventDefault?.(),o("");const v=String(T??a).trim();if(!mt(v)){o("Tempel tautan post X yang valid.");return}const{username:L,statusId:B}=Ca(v);if(!B){o("Tautan itu tidak berisi nomor post.");return}r(!0);try{const J=await Bt({statusId:B,authorHandle:L,tweetUrl:v});if(!J?.text&&!J?.metrics){o("Post tidak bisa dibaca. Coba tautan publik, atau cek lagi nanti."),d(null);return}const $=Va(B);d({...J,statusId:B,username:L,url:v.split("?")[0],createdAt:J.createdAt||J.created_at||$?.postedAt||se(B)}),$?.impressions?m(String($.impressions)):m(""),b({statusId:B,cached:$})}catch{o("Gagal mengambil post. Coba lagi."),d(null)}finally{r(!1)}},f=h===""?k?.cached?.impressions??null:Number(h),w=c?Ha({text:c.text,createdAt:c.createdAt,metrics:{likes:c.metrics?.likes,replies:c.metrics?.replies,reposts:c.metrics?.reposts,quotes:c.metrics?.quotes||k?.cached?.quotes||0,views:c.metrics?.views},impressions:Number.isFinite(f)?f:null}):null,x=()=>{e({text:c?.text||"",source:"bedah",contentType:w?.contentType||"post",media:Array.isArray(c?.media)&&c.media.length?"image":"none",scenario:"rekomendasi"}),t("/creator-lab/tulis")};return n.jsxs("div",{className:"lab-stage mx-auto w-full max-w-[40rem]",children:[n.jsx("h1",{className:"lab-h1",children:"Satu tautan, satu bedah"}),n.jsx("p",{className:"lab-lede",children:"Mix like / balasan / repost dibaca pakai bobot resmi. Jangkauan For You tidak ada di tautan publik."}),n.jsxs("form",{onSubmit:j=>N(j),className:"lab-desk mt-6",children:[n.jsx("input",{value:a,onChange:j=>i(j.target.value),onPaste:j=>{const T=j.clipboardData?.getData("text")?.trim();T&&mt(T)&&(j.preventDefault(),i(T),N(null,T))},placeholder:"Tempel tautan post…",className:"lab-field lab-desk-input","aria-invalid":l?"true":void 0,autoFocus:!0}),n.jsxs("div",{className:"lab-desk-bar",children:[n.jsx("p",{className:"min-w-0 flex-1 text-[12.5px] text-[color:var(--lab-faint)]",children:"Tempel langsung — bedah jalan sendiri."}),n.jsx("button",{type:"submit",className:_,disabled:s,"data-state":s?"loading":void 0,children:s?"Membaca…":"Bedah"})]})]}),l?n.jsx("p",{className:"lab-error",children:l}):null,c&&w?n.jsxs("div",{className:"mt-7 space-y-4",children:[n.jsx(sa,{post:{id:c.statusId,handle:c.authorHandle||c.username,displayName:c.authorName||"",avatar:c.authorAvatar||"",text:c.text,url:c.url,likes:c.metrics?.likes||0,replies:c.metrics?.replies||0,retweets:c.metrics?.reposts||0,views:c.metrics?.views||0,thumb:typeof c.media?.[0]=="string"?c.media[0]:c.media?.[0]?.url||"",createdAt:Number(c.createdAt)||se(c.statusId)||0}}),n.jsxs("div",{className:"lab-hint",children:[n.jsx("p",{className:"lab-kicker",children:w.door.confidence==="tinggi"?"Yakin":w.door.confidence==="sedang"?"Cukup yakin":"Hipotesis lemah"}),n.jsx("h2",{className:"lab-h2 mt-1",children:w.door.title}),n.jsx("p",{className:"mt-2 text-[13.5px] leading-snug text-[color:var(--lab-muted)]",children:w.door.detail}
35),w.outsideWindow?n.jsxs("p",{className:"mt-2 text-[12.5px] text-[color:var(--lab-faint)]",children:["Umur ±",Math.round(w.ageH)," jam — jendela For You sekitar ",Tt," jam."]}):null]}),n.jsx("ul",{className:"lab-surface px-5",children:w.parts.map(j=>n.jsxs("li",{className:"lab-row",children:[n.jsxs("span",{className:"text-[13.5px] font-medium",children:[j.label," · ",j.count.toLocaleString("id-ID")]}),n.jsx("span",{className:"text-[12.5px] tabular-nums text-[color:var(--lab-muted)]",children:Lt(j.contrib)})]},j.id))}),n.jsxs("div",{className:"flex flex-wrap gap-2",children:[n.jsx("button",{type:"button",className:_,onClick:x,children:"Tulis versi baru"}),n.jsx("button",{type:"button",className:M,onClick:()=>S(!0),children:"Isi impresi analitik"})]})]}):null,n.jsxs(V,{open:p,onClose:()=>S(!1),title:"Impresi dari analitik",kicker:"Opsional",footer:n.jsx("div",{className:"flex justify-end",children:n.jsx("button",{type:"button",className:_,onClick:()=>S(!1),children:"Pakai angka ini"})}),children:[n.jsx("p",{className:"text-[14px] leading-snug text-[color:var(--lab-muted)]",children:"Tautan publik tidak membawa jangkauan. Kalau kamu punya angkanya di analitik X, isi di sini."}),n.jsx("input",{type:"number",min:"0",value:h,onChange:j=>m(j.target.value),placeholder:"0",className:"lab-field mt-3"})]})]})}function Ki({user:e=null,xStats:t=null}){const{pathname:a}=ma();u.useEffect(()=>{ha("creator_lab")},[]);const i=a.includes("/jadwal")?"jadwal":a.includes("/bedah")?"bedah":"tulis";return n.jsx(ti,{user:e,xStats:t,children:n.jsx(ri,{mode:i,children:i==="jadwal"?n.jsx(Di,{}):i==="bedah"?n.jsx(Li,{}):n.jsx(Ii,{})})})}export{Ki 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.