(()=>{(function(s){let{registerPlugin:cr}=s.plugins,{PluginSidebarMoreMenuItem:lr}=s.editPost,{PluginSidebar:dr}=s.editPost,{Panel:ur,TextareaControl:es,TextControl:yn,CheckboxControl:zt,Button:me}=s.components,{dispatch:ie,select:V}=s.data,{RawHTML:gr}=s.element,kn=typeof wpAgenticWriter!="undefined"&&wpAgenticWriter.debug,K={log:(...C)=>{kn&&console.log("[WPAW]",...C)},error:(...C)=>console.error("[WPAW]",...C),info:(...C)=>{kn&&console.info("[WPAW]",...C)},warn:(...C)=>{kn&&console.warn("[WPAW]",...C)}},ts=s.element.createElement("img",{src:wpAgenticWriter.pluginUrl+"/assets/img/icon.svg",alt:"WP Agentic Writer",style:{width:"20px",height:"20px"}}),fr=({postId:C})=>{let ae=typeof wpAgenticWriter!="undefined"?wpAgenticWriter.settings:{},fe=(e,t="The AI request failed.")=>{let n=typeof e=="string"?e:(e==null?void 0:e.message)||t,r=String(n||t).replace(/^API error:\s*/i,"").trim(),o=r.toLowerCase(),a=(i,c,l,d)=>({title:i,detail:c,actionUrl:l||"",actionLabel:d||""});if(o.includes("no allowed providers are available")||o.includes("allowed providers")&&o.includes("selected model")){let i=ae!=null&&ae.openrouter_provider_slug&&ae.openrouter_provider_slug!=="auto"?` Pinned: ${ae.openrouter_provider_slug}.`:"";return a("Model unavailable from current provider",`The pinned provider routing doesn't support this model.${i} Change provider routing or select a compatible model.`,(ae==null?void 0:ae.settings_url)||"","Open Settings")}return r.includes("429")||o.includes("rate limit")?a("Rate limit exceeded","The AI provider is throttling requests. Wait a moment and try again."):r.includes("cURL error 28")||o.includes("operation timed out")||o.includes("timed out after")?a("Request timed out","The model took too long to respond. Try a faster model, reduce content length, or check your provider routing.",(ae==null?void 0:ae.settings_url)||"","Open Settings"):r.startsWith("HTTP 401")||o.includes("unauthorized")?a("API key rejected","The provider rejected your API key. Check your key in settings.",(ae==null?void 0:ae.settings_url)||"","Open Settings"):r.startsWith("HTTP 402")||o.includes("insufficient credits")?a("Insufficient credits","Your provider account has no remaining credits or quota."):o.includes("api key is not configured")||o.includes("no_api_key")?a("API key not configured","Add your OpenRouter API key in plugin settings to start using AI features.",(ae==null?void 0:ae.settings_url)||"","Configure API Key"):a(r||t,"")},[Le,et]=React.useState("chat"),[J,u]=React.useState([]),[tt,pe]=React.useState(""),[U,M]=React.useState(!1),[z,nt]=React.useState(""),[ft,ns]=React.useState([]),[mt,Ge]=React.useState(!1),[Ce,xe]=React.useState("chat"),qt=React.useRef(Math.random().toString(36).substring(2,10)+Date.now().toString(36)),[Kt,bn]=React.useState({locked:!1,lockedByOther:!1,holderTabId:""}),pt=React.useRef(null),wn=React.useMemo(()=>({article_length:"medium",language:"auto",tone:"",audience:"",experience_level:"general",include_images:!0,web_search:!!ae.web_search_enabled,default_mode:"chat",seo_focus_keyword:"",focus_keyword:"",seo_secondary_keywords:"",seo_meta_description:"",seo_enabled:!0}),[ae.web_search_enabled]),[I,Jt]=React.useState(wn),[Xt,ss]=React.useState(!1),[vn,rs]=React.useState(!1),[Sn,os]=React.useState(""),Gt=React.useRef(!1),_n=React.useRef(""),We=React.useRef(null),[te,he]=React.useState({session:0,today:0,monthlyUsed:0}),[Vt,as]=React.useState(ae.monthly_budget||600),[be,is]=React.useState(null),we=e=>{if(!e)return;e.session_id&&nt(e.session_id);let t=e.provider_metadata||e,n=t.provider||t.selected_provider||t.provider;n&&is({provider:n,model:t.model,fallbackUsed:t.fallback_used||t.fallbackUsed,warnings:t.warnings||[]})},[xt,cs]=React.useState(!1),[Oe,ls]=React.useState(!1),[At,Cn]=React.useState([]),Qt=React.useRef([]),ht=React.useRef([]),st=React.useRef([]),hr=25,[Yt,xn]=React.useState({isOpen:!1,blockCount:0,dontAskAgain:!1}),An=React.useRef(null),ds=React.useRef(!1),[Be,yr]=React.useState(null),[Ve,us]=React.useState(!1),[rt,gs]=React.useState(!1),[fs,Nn]=React.useState(""),[Zt,Nt]=React.useState(!1),[Te,In]=React.useState([]),[Ae,yt]=React.useState(0),[de,Ne]=React.useState([]),[en,ms]=React.useState("auto"),[kr,br]=React.useState("generation"),[Rn,ps]=React.useState(null),[It,Rt]=React.useState(null),[tn,Bn]=React.useState([]),Tn=React.useRef(null),Q=React.useRef(null),$n=React.useRef(null),nn=React.useRef({}),Qe=React.useRef(null),He=React.useRef({}),kt=React.useRef({}),En=React.useRef(null),Bt=React.useRef(null),Mn=React.useRef(null),ue=React.useRef(!1),Tt=React.useRef(null),$t=React.useRef(null),sn=React.useRef({type:"idle",status:"idle",label:""}),[Uo,ot]=React.useState(!1),[$e,wr]=React.useState({type:"idle",status:"idle",label:""}),[Ue,hs]=React.useState({status:"idle",current_section_index:0,sections_written:[],last_updated:null,plan_id:"",resume_token:""}),[vr,ys]=React.useState(!1),[Et,Sr]=React.useState({title:"",blockCount:0,selectedBlockLabel:"None selected",selectedBlockPreview:""}),[rn,_r]=React.useState(()=>{try{return window.localStorage.getItem("wpaw_agent_workspace_collapsed")==="1"}catch{return!1}}),Cr=()=>{_r(e=>{let t=!e;try{window.localStorage.setItem("wpaw_agent_workspace_collapsed",t?"1":"0")}catch{}return t})},[Mt,at]=React.useState(!1),[zo,ks]=React.useState(""),[it,bt]=React.useState([]),[Pn,on]=React.useState(0),[Pt,Lt]=React.useState(!1),[qo,xr]=React.useState(""),[ct,an]=React.useState([]),[Ln,Wn]=React.useState(0),[bs,On]=React.useState(!1),ye=React.useRef(null),ve=React.useRef(null),[ws,vs]=React.useState([]),[Ee,lt]=React.useState(""),[Ko,Ss]=React.useState(!1),[Jo,Ar]=React.useState(""),Ie=React.useRef(null),wt=React.useRef(""),De=React.useRef(!1),[dt,Ye]=React.useState(!0),[Dn,Nr]=React.useState(""),[Fn,_s]=React.useState("chat"),[qe,Cs]=React.useState([]),xs=10,[vt,As]=React.useState({restored:!1,summary:"",memories:[],preferences:[],systemMessage:""}),Ns=React.useRef(!1);React.useEffect(()=>{Ce==="writing"&&!U&&xe("chat")},[Ce,U]),React.useEffect(()=>{C&&(ss(!0),fetch(`${wpAgenticWriter.apiUrl}/post-config/${C}`,{headers:{"X-WP-Nonce":wpAgenticWriter.nonce}}).then(e=>e.ok?e.json():Promise.reject(e)).then(e=>{let t={...wn,...e};t.default_mode="chat",Jt(t),_n.current=JSON.stringify(t),Gt.current=!0}).catch(()=>{Gt.current=!0}).finally(()=>{ss(!1)}))},[C,wn]);let Is=React.useCallback(async e=>{if(C){rs(!0),os("");try{let t=await fetch(`${wpAgenticWriter.apiUrl}/post-config/${C}`,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({postConfig:e})});if(!t.ok){let r=await t.json();throw new Error(r.message||"Failed to save post configuration")}let n=await t.json();_n.current=JSON.stringify(n),Jt(r=>{let o={...r,...n};return JSON.stringify(r)===JSON.stringify(o)?r:o})}catch(t){os(t.message||"Failed to save post configuration")}finally{rs(!1)}}},[C]);React.useEffect(()=>{if(!(!Gt.current||Xt||JSON.stringify(I)===_n.current))return We.current&&clearTimeout(We.current),We.current=setTimeout(()=>{Is(I)},600),()=>{We.current&&clearTimeout(We.current)}},[I,Xt,Is]),React.useEffect(()=>{!ae.cost_tracking_enabled||!C||fetch(`${wpAgenticWriter.apiUrl}/cost-tracking/${C}`,{headers:{"X-WP-Nonce":wpAgenticWriter.nonce}}).then(e=>e.json()).then(e=>{var t,n,r,o;e&&typeof e.session=="number"&&he({session:e.session,today:((n=(t=e.today)==null?void 0:t.total)==null?void 0:n.cost)||0,monthlyUsed:((r=e.monthly)==null?void 0:r.used)||0}),(o=e==null?void 0:e.monthly)!=null&&o.budget&&as(e.monthly.budget)}).catch(()=>{})},[C]);let jn=(e={})=>({status:e.status||"idle",current_section_index:Number(e.current_section_index||0),sections_written:Array.isArray(e.sections_written)?e.sections_written:[],last_updated:e.last_updated||null,plan_id:e.plan_id||"",resume_token:e.resume_token||""}),Rs=React.useCallback(async e=>{if(!C)return;let t=jn(e);try{if(!(await fetch(`${wpAgenticWriter.apiUrl}/writing-state/${C}`,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify(t)})).ok)throw new Error("Failed to save writing state")}catch(n){K.warn("Writing state save failed:",n)}},[C]),Fe=React.useCallback(e=>{hs(t=>{let n=jn({...t,...e});return Rs(n),n})},[Rs]);React.useEffect(()=>{if(!C)return;let e=!1;return ys(!0),fetch(`${wpAgenticWriter.apiUrl}/writing-state/${C}`,{headers:{"X-WP-Nonce":wpAgenticWriter.nonce}}).then(t=>t.ok?t.json():Promise.reject(t)).then(t=>{e||hs(jn(t))}).catch(t=>{K.warn("Writing state load failed:",t)}).finally(()=>{e||ys(!1)}),()=>{e=!0}},[C]);let Hn=React.useRef(null),Un=React.useRef(null);React.useEffect(()=>{Hn.current&&Hn.current.scrollIntoView({behavior:"smooth"})},[J]);let Ir=/^(I'll|Writing|Now|Creating|Adding|Let me|I'll write|Saya|Saya akan|Sedang menulis|Sedang membuat|Menulis tentang|Membuat tentang|Thinking|Analyzing|Reviewing|Refining|Checking|Updating|Planning|Searching|Querying|Generated|Drafting|Reading|Context|Processing)/i,Bs=new Set(["active","starting","refining","checking","waiting","planning","plan_complete","writing","writing_section"]),Rr=new Set(["writing","writing_section"]),Y=e=>{for(let t=e.length-1;t>=0;t--)if(e[t].type==="timeline"&&Bs.has(e[t].status))return t;return-1},oe=e=>e.map(t=>t.type==="timeline"&&Bs.has(t.status)?{...t,status:"inactive"}:t),cn=e=>{u(t=>{let n=[...t],r=Y(n);return r===-1?n.push({role:"system",type:"timeline",status:"active",message:e,timestamp:new Date}):n[r]={...n[r],message:e},n})},zn=(e,t,n={})=>{let{deactivate:r=!0,extra:o={}}=n;u(a=>[...r?oe(a):a,{role:"system",type:"timeline",status:e,message:t,timestamp:new Date,...o}])},qn=e=>{let t={type:(e==null?void 0:e.type)||"idle",status:(e==null?void 0:e.status)||"idle",label:(e==null?void 0:e.label)||""};sn.current=t,wr(t)},Me=(e,t)=>{ue.current=!1;let n=new AbortController;return Tt.current=n,$t.current=null,ot(!1),qn({type:e,status:"running",label:t}),n},ke=(e="")=>{let t=sn.current||{};e&&t.type&&t.type!==e||(Tt.current=null,$t.current=null,qn({type:"idle",status:"idle",label:""}))},Br=()=>{let e=sn.current||{};qn({type:e.type||"unknown",status:"stopping",label:e.label||"operation"}),u(t=>{let n=[...t],r=Y(n);return r!==-1&&(n[r]={...n[r],status:"stopping",message:`Stopping ${e.label||"operation"}...`,timestamp:new Date}),n})},Se=e=>(e==null?void 0:e.name)==="AbortError"||/aborted|abort/i.test(String((e==null?void 0:e.message)||"")),Ke=e=>($t.current=e,e),Tr=React.useCallback(e=>ds.current?Promise.resolve(!0):new Promise(t=>{An.current=t,xn({isOpen:!0,blockCount:Number(e)||0,dontAskAgain:!1})}),[]),Ts=React.useCallback(e=>{let t=An.current;An.current=null,xn(n=>({...n,isOpen:!1})),t&&t(!!e)},[]),$r=(e="AI Operation")=>{let n=V("core/block-editor").getBlocks().map(r=>s.blocks.serialize(r)).join(` `);return{label:e,timestamp:new Date,blocks:n}},Kn=(e="AI Operation")=>{let t=$r(e);Cs(n=>{let r=[...n,t];return r.length>xs?r.slice(-xs):r})},$s=()=>{if(qe.length===0)return;let e=qe[qe.length-1],{resetBlocks:t}=ie("core/block-editor");try{let n=s.blocks.parse(e.blocks);t(n),Cs(r=>r.slice(0,-1)),u(r=>[...r,{role:"system",type:"timeline",status:"complete",message:`Undid: ${e.label}`,timestamp:new Date}])}catch(n){K.error("Failed to undo AI operation:",n),u(r=>[...r,{role:"system",type:"error",content:"Failed to undo operation: "+n.message}])}};React.useEffect(()=>{let e=Y(J),t=e!==-1?J[e]:null,n=!!(U&&t&&Rr.has(t.status));n&&!xt?(ie("core/editor").lockPostSaving("wpaw-writing"),document.body.classList.add("wpaw-editor-locked"),cs(!0)):!n&&xt&&(ie("core/editor").unlockPostSaving("wpaw-writing"),document.body.classList.remove("wpaw-editor-locked"),cs(!1))},[J,U,xt]),React.useEffect(()=>{Oe?(ie("core/editor").lockPostSaving("wpaw-refining"),document.body.classList.add("wpaw-refining-locked")):(ie("core/editor").unlockPostSaving("wpaw-refining"),document.body.classList.remove("wpaw-refining-locked"))},[Oe]),React.useEffect(()=>{let e=ie("core/block-editor");if(!(!e||typeof e.setBlockEditingMode!="function")){if(Oe){let t=V("core/block-editor").getBlocks(),n=[],r=o=>{o.forEach(a=>{a!=null&&a.clientId&&(n.push(a.clientId),Array.isArray(a.innerBlocks)&&a.innerBlocks.length>0&&r(a.innerBlocks))})};r(t),st.current=n,n.forEach(o=>e.setBlockEditingMode(o,"disabled"))}else st.current.length>0&&(st.current.forEach(t=>e.setBlockEditingMode(t,"default")),st.current=[]);return()=>{st.current.length>0&&(st.current.forEach(t=>e.setBlockEditingMode(t,"default")),st.current=[])}}},[Oe,J]),React.useEffect(()=>((Qt.current||[]).forEach(t=>{let n=document.querySelector(`[data-block="${t}"]`);n&&n.classList.remove("wpaw-block-refining")}),Oe&&Array.isArray(At)?(At.forEach(t=>{let n=document.querySelector(`[data-block="${t}"]`);n&&n.classList.add("wpaw-block-refining")}),Qt.current=[...At]):Qt.current=[],()=>{(Qt.current||[]).forEach(n=>{let r=document.querySelector(`[data-block="${n}"]`);r&&r.classList.remove("wpaw-block-refining")})}),[Oe,At,J]),React.useEffect(()=>{if(!Oe)return;let e=r=>!r||!(r instanceof Element)||r.closest(".wpaw-sidebar, .wpaw-command-area, .wpaw-messages")?!1:!!r.closest(".interface-interface-skeleton__content, .editor-styles-wrapper, .block-editor-writing-flow"),t=r=>{if(!e(r.target)||r.metaKey||r.ctrlKey||r.altKey)return;let o=new Set(["Enter","Backspace","Delete","Tab"]);(typeof r.key=="string"&&r.key.length===1||o.has(r.key))&&(r.preventDefault(),r.stopPropagation())},n=r=>{e(r.target)&&(r.preventDefault(),r.stopPropagation())};return document.addEventListener("keydown",t,!0),document.addEventListener("paste",n,!0),document.addEventListener("drop",n,!0),document.addEventListener("cut",n,!0),()=>{document.removeEventListener("keydown",t,!0),document.removeEventListener("paste",n,!0),document.removeEventListener("drop",n,!0),document.removeEventListener("cut",n,!0)}},[Oe]),React.useEffect(()=>{if(Oe){let e=Array.from(document.querySelectorAll('.editor-styles-wrapper [contenteditable="true"]'));ht.current=e.map(t=>({node:t,prev:t.getAttribute("contenteditable")})),ht.current.forEach(({node:t})=>{t.setAttribute("contenteditable","false")})}else(ht.current||[]).forEach(({node:e,prev:t})=>{e&&(t===null?e.removeAttribute("contenteditable"):e.setAttribute("contenteditable",t))}),ht.current=[];return()=>{(ht.current||[]).forEach(({node:e,prev:t})=>{e&&(t===null?e.removeAttribute("contenteditable"):e.setAttribute("contenteditable",t))}),ht.current=[]}},[Oe,J]);let Es=e=>e==null?"":typeof e=="string"||typeof e=="number"?String(e):"",ge=(e,t)=>{Jt(n=>({...n,[e]:t}))},Er=(e={})=>{let t={...I};if(e.config_language){let n=e.config_language;n==="__custom__"&&e.config_language_custom&&(n=e.config_language_custom.toLowerCase().trim()),n&&n!=="__skipped__"&&(t.language=n)}if(e.config_all)try{let n=JSON.parse(e.config_all);n.web_search!==void 0&&(t.web_search=n.web_search),n.seo!==void 0&&(t.seo_enabled=n.seo),n.focus_keyword&&(t.focus_keyword=n.focus_keyword,t.seo_focus_keyword=n.focus_keyword),n.secondary_keywords&&(t.seo_secondary_keywords=n.secondary_keywords)}catch(n){K.error("Failed to merge config answers:",n)}return t},Je=e=>{lt(e),ge("focus_keyword",e),ge("seo_focus_keyword",e),Ss(!1),Ar("")},Xo=e=>{let t=e.target.value;t==="__custom__"?Ss(!0):Je(t)},Jn=e=>{if(!e||typeof e!="string")return[];let t=[],n=e.match(/(?:fokus|focus)\s+keyword\s+suggestion[s]?\s*:\s*([\s\S]*?)(?=\n\n|Pilih|$)/i);if(n){let o=n[1].match(/[-*]\s*["']?([^"'\n]+)["']?/g);o&&o.forEach(a=>{let i=a.replace(/^[-*]\s*["']?/,"").replace(/["']?$/,"").trim();i.length>2&&i.length<60&&t.push(i)})}if(t.length===0){let r=e.match(/(?:fokus|focus)\s+keyword\s+suggestion[s]?\s*:\s*["']?([^"'\n]+)["']?/i);if(r&&!r[1].includes("-")&&!r[1].includes("*")){let o=r[1].trim();o.length>2&&o.length<60&&t.push(o)}}return t},Go=e=>{let t=Jn(e);return t.length>0?t[0]:null},Mr=e=>{e&&vs(t=>t.includes(e)?t:[...t,e].slice(-5))},Ms=e=>{!e||!Array.isArray(e)||e.forEach(t=>Mr(t))};React.useEffect(()=>{I.focus_keyword&&!Ee?lt(I.focus_keyword):I.seo_focus_keyword&&!Ee&<(I.seo_focus_keyword)},[I.focus_keyword,I.seo_focus_keyword]),React.useEffect(()=>{(J.length>0||Q.current)&&Ye(!1)},[J.length]);let Ps=()=>{if(Dn.trim()){let e=Dn.trim();Je(e)}xe(Fn),Ye(!1),setTimeout(()=>{ye.current&&ye.current.focus()},100)},Ls=async()=>{if(Ve||!C)return;let e=Me("seo_audit","SEO audit");us(!0);try{let t=await fetch(`${wpAgenticWriter.apiUrl}/seo-audit/${C}`,{headers:{"X-WP-Nonce":wpAgenticWriter.nonce},signal:e.signal}),n=await t.json();if(!t.ok)throw new Error(n.message||"Failed to run SEO audit");yr(n),u(r=>{let o=[...r],a=Y(o);return a!==-1&&(o[a]={...o[a],status:"complete",message:"SEO audit complete.",completedAt:new Date}),o})}catch(t){if(Se(t)){u(n=>{let r=[...n],o=Y(r);return o!==-1&&(r[o]={...r[o],status:"stopped",message:"SEO audit stopped."}),r});return}K.error("SEO Audit error:",t),u(n=>[...n,{role:"assistant",content:`SEO Audit error: ${t.message}`,type:"error"}]),u(n=>{let r=[...n],o=Y(r);return o!==-1&&(r[o]={...r[o],status:"error",message:"SEO audit failed."}),r})}finally{us(!1),ke("seo_audit")}},Pr=e=>{let t=Ee||I.focus_keyword||I.seo_focus_keyword||"",n=I.language&&I.language!=="auto"?`Use ${I.language}.`:"Use the same language as the article.",r=(e==null?void 0:e.name)||"SEO audit issue",o=(e==null?void 0:e.message)||"",a=t?`Focus keyword: "${t}".`:"If a focus keyword is missing, ask the user to set one first.",i=String(r).toLowerCase();return i.includes("keyword in intro")?`Fix this SEO audit issue in the article introduction: ${o}. ${a} Add the focus keyword naturally in the first paragraph without sounding forced. ${n}`:i.includes("keyword density")?`Fix this SEO audit issue across the article: ${o}. ${a} Improve keyword usage naturally, avoid stuffing, and keep the writing human and useful. ${n}`:i.includes("ai-ish")?`Fix this audit issue across the article: ${o}. Make the writing more natural, specific, and human. Reduce generic AI-style phrasing while preserving meaning, structure, and facts. ${n}`:i.includes("content length")?`Fix this SEO audit issue: ${o}. Expand the article with useful, non-fluffy details, examples, and reader guidance. ${a} ${n}`:i.includes("subheadings")?`Fix this readability issue: ${o}. Improve the article structure with useful H2/H3 subheadings while preserving the article's intent. ${a} ${n}`:`Fix this SEO audit issue: ${r}: ${o}. ${a} Keep the result natural, useful, and aligned with the article intent. ${n}`},Ws=e=>`${(e==null?void 0:e.name)||""}:${(e==null?void 0:e.message)||""}`,Os=e=>{let t=Number((Be==null?void 0:Be.ai_ish_pattern_count)||0);if(t>0)return t;let n=String((e==null?void 0:e.message)||"").match(/(\d+)\s+pattern/i);return n?Number(n[1]):0},ze=(e,t,n=`${t}s`)=>{let r=Number(e||0);return`${r} ${r===1?t:n}`},ln=e=>{let t=Number((e==null?void 0:e.patternCount)||0);return t>0?ze(t,"pattern occurrence"):"audit pattern occurrences"},Lr=(e,t,n)=>({source:"seo_audit",issueName:(e==null?void 0:e.name)||"SEO audit issue",auditMessage:(e==null?void 0:e.message)||"",patternCount:Os(e),candidateBlockCount:Array.isArray(t)?t.length:0,refineableBlockCount:Array.isArray(n)?n.length:0}),Wr=async e=>{if(U||Ve||!e)return;let t=String(e.name||"").toLowerCase(),n=Ee||I.focus_keyword||I.seo_focus_keyword||"",r=Ws(e);if(Nn(r),t.includes("focus keyword")&&!n){u(o=>[...o,{role:"system",type:"error",content:"Set a focus keyword first, then run the audit again."}]),et("config"),Nn("");return}et("chat"),Ye(!1);try{if(t.includes("meta description")){u(c=>[...c,{role:"user",content:`Fix SEO audit: ${e.message}`}]),u(c=>[...oe(c),{role:"system",type:"timeline",status:"refining",message:"Generating SEO meta description...",timestamp:new Date}]),await Xn();return}if(t.includes("keyword in title")){let c=n?`include the focus keyword "${n}" naturally in the title, keep it compelling, and match the article language`:"make the title more SEO-friendly and aligned with the article";await Js(`@title ${c}`,["@title"]);return}let o=jt();if(!o.length){u(c=>[...c,{role:"system",type:"error",content:"No article blocks found to fix yet. Generate or insert content first, then run the audit again."}]);return}let a=Pr(e),i=t.includes("ai-ish")?Yn(a,o):o;if(t.includes("ai-ish")&&i.length===0){let c=Os(e);u(l=>[...l,{role:"assistant",content:c>0?`Audit found ${ze(c,"pattern occurrence")}, but I could not safely map those occurrences to editor blocks. I did not send the whole article to refinement.`:"I rechecked the editor blocks and did not find AI-ish pattern matches, so I did not send the whole article to refinement."}]);return}await gt(a,i.map(c=>c.clientId),{useDiffPlan:!1,auditContext:t.includes("ai-ish")?Lr(e,i,o):null})}finally{Nn("")}},Xn=async()=>{if(rt)return;let e=Me("meta","meta description");gs(!0);try{let t=await fetch(`${wpAgenticWriter.apiUrl}/generate-meta`,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({postId:C,sessionId:z,focusKeyword:I.seo_focus_keyword,chatHistory:J.filter(r=>r.role!=="system")}),signal:e.signal});if(!t.ok){let r=await t.json();throw new Error(r.message||"Failed to generate meta description")}let n=await t.json();if(we(n),n.meta_description)ge("seo_meta_description",n.meta_description),u(r=>[...r,{role:"assistant",content:"\u2705 Meta description generated successfully",type:"success"}]),u(r=>{let o=[...r],a=Y(o);return a!==-1&&(o[a]={...o[a],status:"complete",message:"Meta description generated.",completedAt:new Date}),o});else throw new Error("No meta description returned from API")}catch(t){if(Se(t)){u(n=>{let r=[...n],o=Y(r);return o!==-1&&(r[o]={...r[o],status:"stopped",message:"Meta description generation stopped."}),r});return}K.error("Error generating meta description:",t),u(n=>[...n,{role:"system",content:`\u274C Failed to generate meta description: ${t.message}`,type:"error"}]),u(n=>{let r=[...n],o=Y(r);return o!==-1&&(r[o]={...r[o],status:"error",message:"Meta description failed."}),r})}finally{gs(!1),ke("meta")}},Pe=e=>{var n,r,o,a;let t=Es(((n=e.attributes)==null?void 0:n.content)||((r=e.attributes)==null?void 0:r.value)||((o=e.attributes)==null?void 0:o.caption)||((a=e.attributes)==null?void 0:a.title)||"");if(t)return t;if(s.blocks&&typeof s.blocks.getBlockContent=="function"){let i=s.blocks.getBlockContent(e);if(i){let c=document.createElement("div");return c.innerHTML=i,Es(c.textContent)}}return""},Or=e=>{if(!e)return"";let n=V("core/block-editor").getBlocks().find(r=>r.clientId===e);return n?Pe(n):""},Ds=React.useCallback(()=>{let e=V("core/editor"),t=V("core/block-editor"),n=t!=null&&t.getBlocks?t.getBlocks():[],r=t!=null&&t.getSelectedBlockClientId?t.getSelectedBlockClientId():"",o=r&&(t!=null&&t.getBlock)?t.getBlock(r):null,a=e!=null&&e.getEditedPostAttribute&&e.getEditedPostAttribute("title")||"",i=o!=null&&o.name?o.name.replace("core/",""):"",c=o?Pe(o):"";return{title:a||"Untitled draft",blockCount:n.filter(l=>Pe(l)||Array.isArray(l.innerBlocks)&&l.innerBlocks.length>0).length,selectedBlockLabel:o?`${i||"block"} ${r.slice(0,6)}`:"None selected",selectedBlockPreview:c?c.slice(0,90):""}},[]);React.useEffect(()=>{var n;let e=()=>{let r=Ds();Sr(o=>JSON.stringify(o)===JSON.stringify(r)?o:r)};e();let t=(n=s.data)!=null&&n.subscribe?s.data.subscribe(e):null;return()=>{typeof t=="function"&&t()}},[Ds]),React.useEffect(()=>{if(Un.current){let e=Un.current;e.scrollTop=e.scrollHeight}},[J,U]),React.useEffect(()=>{let e=t=>{if(U)return t.preventDefault(),t.returnValue="",""};return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[U]),React.useEffect(()=>{Yr()},[C]),React.useEffect(()=>{if(C)try{let e=window.localStorage.getItem(`wpawSessionId_${C}`);e&&nt(e)}catch{}},[C]),React.useEffect(()=>{if(!(!C||!z))try{window.localStorage.setItem(`wpawSessionId_${C}`,z)}catch{}},[C,z]);let St=React.useCallback(e=>Array.isArray(e)?e.slice(-300).map(r=>{let o={};return o.role=typeof(r==null?void 0:r.role)=="string"?r.role:"assistant",typeof(r==null?void 0:r.content)=="string"&&(o.content=r.content),typeof(r==null?void 0:r.type)=="string"&&(o.type=r.type),typeof(r==null?void 0:r.status)=="string"&&(o.status=r.status),r!=null&&r.timestamp&&(o.timestamp=r.timestamp),Array.isArray(r==null?void 0:r.sections)&&(o.sections=r.sections),r!=null&&r.meta&&typeof r.meta=="object"&&(o.meta=r.meta),r!=null&&r.plan&&typeof r.plan=="object"&&(o.plan=r.plan),o}):[],[]),Fs=React.useCallback(e=>{var n,r;if(!Array.isArray(e)||e.length===0){Q.current=null,xe("chat");return}let t=null;for(let o=e.length-1;o>=0;o-=1)if(((n=e[o])==null?void 0:n.type)==="plan"&&((r=e[o])!=null&&r.plan)){t=Gn(e[o].plan);break}Q.current=t,xe(t?"planning":"chat"),Ye(!1)},[]),js=React.useCallback(async(e=null,t=!1,n=null)=>{var c,l;let r=e||z;if(!r)return;let o=n||(Re&&Re.current?Re.current:J);if(!Array.isArray(o)||o.length===0)return;let a=t?o:St(o),i=JSON.stringify(a);if(i!==wt.current)try{if(!(await fetch(`${wpAgenticWriter.apiUrl}/conversations/${r}/messages`,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({messages:a})})).ok)throw new Error("Failed to persist session messages");wt.current=i}catch(d){(l=(c=window.console)==null?void 0:c.warn)==null||l.call(c,"WP Agentic Writer: failed to persist session messages.",d)}},[St,z]),Re=React.useRef(J);React.useEffect(()=>{Re.current=J},[J]),React.useEffect(()=>{let e=()=>{if(Ie.current&&clearTimeout(Ie.current),!z||De.current)return;let t=Re&&Re.current?Re.current:J;if(!Array.isArray(t)||t.length===0)return;let n=St(t);if(JSON.stringify(n)!==wt.current)try{let o=new XMLHttpRequest;o.open("POST",`${wpAgenticWriter.apiUrl}/conversations/${z}/messages`,!1),o.setRequestHeader("Content-Type","application/json"),o.setRequestHeader("X-WP-Nonce",wpAgenticWriter.nonce),o.send(JSON.stringify({messages:n}))}catch{}};return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[z,St]);let Wt=React.useCallback(async e=>{var t;if(!e)return!1;try{let n=await fetch(`${wpAgenticWriter.apiUrl}/conversations/${e}/lock`,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({tab_id:qt.current})});if(!n.ok)return!1;let r=await n.json();return r.locked?(bn({locked:!0,lockedByOther:!1,holderTabId:""}),!0):(bn({locked:!1,lockedByOther:!0,holderTabId:((t=r.holder)==null?void 0:t.tab_id)||""}),!1)}catch{return!0}},[]),Hs=React.useCallback(async e=>{if(e)try{await fetch(`${wpAgenticWriter.apiUrl}/conversations/${e}/lock`,{method:"DELETE",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({tab_id:qt.current}),keepalive:!0})}catch{}},[]),Ot=React.useCallback(e=>{pt.current&&clearInterval(pt.current),pt.current=setInterval(()=>{Wt(e)},3e4)},[Wt]),dn=React.useCallback(()=>{pt.current&&(clearInterval(pt.current),pt.current=null)},[]);React.useEffect(()=>{let e=()=>{if(z){dn();try{let t=new XMLHttpRequest;t.open("DELETE",`${wpAgenticWriter.apiUrl}/conversations/${z}/lock`,!1),t.setRequestHeader("Content-Type","application/json"),t.setRequestHeader("X-WP-Nonce",wpAgenticWriter.nonce),t.send(JSON.stringify({tab_id:qt.current}))}catch{}}};return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[z,dn]);let Dr=React.useCallback(async()=>{if(z)try{let e=await fetch(`${wpAgenticWriter.apiUrl}/conversations/${z}/lock`,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({tab_id:qt.current,force:!0})});e.ok&&(await e.json()).locked&&(bn({locked:!0,lockedByOther:!1,holderTabId:""}),Ot(z))}catch{}},[z,Ot]);React.useEffect(()=>{if(!z||De.current||Kt.lockedByOther)return;let e=Re&&Re.current?Re.current:J;if(!(!Array.isArray(e)||e.length===0))return Ie.current&&clearTimeout(Ie.current),Ie.current=setTimeout(()=>{if(De.current)return;let t=Re&&Re.current?Re.current:[];t.length!==0&&js(z,!1,t)},3e3),()=>{Ie.current&&clearTimeout(Ie.current)}},[z,J,js]),React.useEffect(()=>{(async()=>{if(!(J.length>0||De.current))try{let t={"X-WP-Nonce":wpAgenticWriter.nonce},n=[],r="",o=await un();if(!C)return;if(o.length>0&&o.length>0){let a=o[0],i=(()=>{try{return window.localStorage.getItem(`wpawSessionId_${C}`)||""}catch{return""}})();if(i){let c=o.find(l=>(l==null?void 0:l.session_id)===i);c&&(a=c)}r=(a==null?void 0:a.session_id)||"",Array.isArray(a==null?void 0:a.messages)&&a.messages.length>0&&(n=a.messages)}if(r&&n.length===0)try{let a=await fetch(`${wpAgenticWriter.apiUrl}/conversations/${r}`,{method:"GET",headers:t});if(a.ok){let i=await a.json();i&&Array.isArray(i.messages)&&i.messages.length>0&&(n=i.messages)}}catch{}if(C&&!r){let a=await fetch(`${wpAgenticWriter.apiUrl}/conversation/${C}`,{method:"GET",headers:t});if(a.ok){let i=await a.json();i!=null&&i.session_id&&(r=i.session_id),i&&Array.isArray(i.messages)&&i.messages.length>0&&(n=i.messages)}}if(C&&n.length===0&&!r){let a=await fetch(`${wpAgenticWriter.apiUrl}/chat-history/${C}`,{method:"GET",headers:t});if(a.ok){let i=await a.json();i&&Array.isArray(i.messages)&&i.messages.length>0&&(n=i.messages)}}n.length>0&&(De.current=!0,wt.current=JSON.stringify(St(n)),Fs(n),u(n),setTimeout(()=>{De.current=!1},0)),r&&(nt(r),Wt(r).then(a=>{a&&Ot(r)}))}catch{}})()},[C]),React.useEffect(()=>{!C||Ns.current||(Ns.current=!0,fetch(`${wpAgenticWriter.apiUrl}/memanto/restore?post_id=${C}`,{headers:{"X-WP-Nonce":wpAgenticWriter.nonce}}).then(e=>e.ok?e.json():Promise.reject(e)).then(e=>{e!=null&&e.restored&&(K.info("MEMANTO: Session restored",e),As({restored:!0,summary:e.summary||"",memories:e.memories||[],preferences:e.preferences||[],systemMessage:e.system_message||""}))}).catch(()=>{}))},[C]),React.useEffect(()=>{var e;!C||!vt.restored||!((e=vt.preferences)!=null&&e.length)||!Gt.current||Jt(t=>{let n=!1,r={...t};for(let o of vt.preferences){let a=o.content||"",i=a.match(/tone\s*=\s*([^,\n]+)/i),c=a.match(/audience\s*=\s*([^,\n]+)/i),l=a.match(/(?:article_)?length\s*=\s*([^,\n]+)/i),d=a.match(/language\s*=\s*([^,\n]+)/i);i&&!t.tone&&i[1].trim().toLowerCase()!=="default"&&(r.tone=i[1].trim(),n=!0),c&&!t.audience&&c[1].trim().toLowerCase()!=="general"&&(r.audience=c[1].trim(),n=!0),l&&t.article_length==="medium"&&l[1].trim().toLowerCase()!=="medium"&&(r.article_length=l[1].trim(),n=!0),d&&t.language==="auto"&&d[1].trim().toLowerCase()!=="auto"&&(r.language=d[1].trim(),n=!0)}return n?r:t})},[C,vt.restored,Xt]);let un=async()=>{let e={"X-WP-Nonce":wpAgenticWriter.nonce},t=[],n=[],r=async l=>{let d=await fetch(`${wpAgenticWriter.apiUrl}/conversations?status=${l}&limit=50`,{method:"GET",headers:e});if(!d.ok)return[];let g=await d.json();return Array.isArray(g==null?void 0:g.sessions)?g.sessions:[]},o=l=>l.filter(d=>Number((d==null?void 0:d.post_id)||0)===0);if(C){let l=await fetch(`${wpAgenticWriter.apiUrl}/conversations/post/${C}`,{method:"GET",headers:e});if(l.ok){let d=await l.json();t=Array.isArray(d==null?void 0:d.sessions)?d.sessions:[]}if(t.length===0){let[d,g]=await Promise.all([r("active"),r("completed")]);n=o([...d,...g])}}else{let[l,d]=await Promise.all([r("active"),r("completed")]);n=[...l,...d]}let a=[...t,...n],i=[],c=new Set;return a.forEach(l=>{var h;let d=(l==null?void 0:l.session_id)||"";!d||c.has(d)||Number((h=l==null?void 0:l.message_count)!=null?h:Array.isArray(l==null?void 0:l.messages)?l.messages.length:0)<=0||(c.add(d),i.push(l))}),ns(i),i},Us=async e=>{if(!e)return;let t={"X-WP-Nonce":wpAgenticWriter.nonce};Ge(!0);try{z&&z!==e&&(dn(),Hs(z));let n=await fetch(`${wpAgenticWriter.apiUrl}/conversations/${e}`,{method:"GET",headers:t});if(!n.ok)throw new Error("Failed to load session");let r=await n.json();Ie.current&&(clearTimeout(Ie.current),Ie.current=null),De.current=!0,nt(e);let o=Array.isArray(r==null?void 0:r.messages)?r.messages:[];if(o.length===0&&(r!=null&&r.post_id)&&Number(r.post_id)>0){K.warn("Session has 0 messages, attempting post-based recovery:",e);try{let c=await fetch(`${wpAgenticWriter.apiUrl}/conversation/${r.post_id}`,{method:"GET",headers:t});if(c.ok){let l=await c.json();Array.isArray(l==null?void 0:l.messages)&&l.messages.length>0&&o.push(...l.messages)}}catch{}}wt.current=JSON.stringify(St(o)),Fs(o),u(o),Ye(!1);let a=Number((r==null?void 0:r.post_id)||0);C&&C>0&&a===0&&fetch(`${wpAgenticWriter.apiUrl}/conversations/${e}/link-post`,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({postId:C})}).catch(()=>{}),await Wt(e)&&Ot(e),setTimeout(()=>{De.current=!1},0)}catch{De.current=!1,u(r=>[...r,{role:"system",type:"error",content:"Error: Failed to load selected session."}])}finally{Ge(!1)}},Dt=e=>Ir.test(e)?"timeline":e.length>=6||/[\s.!?]/.test(e)?"assistant":null,gn=e=>e?e.replace(/[\u2010-\u2015\u2212]/g,"-").replace(/[.,;:!?)]*$/g,"").toLowerCase():"",zs=e=>{let t=[],n=/@([^\s]+)/g,r;for(;r=n.exec(e);){let o=gn(r[1]);o&&t.push("@"+o)}return t},qs=e=>e?e.replace(/@[\w-]+/g,"").replace(/\s{2,}/g," ").trim():"",Ks=e=>Array.isArray(e)&&e.some(t=>gn(String(t).replace("@",""))==="title"),Js=async(e,t,n={})=>{let{skipUserMessage:r=!1}=n,o=qs(e||"");if(!o)return u(i=>[...i,{role:"system",type:"error",content:"Please add title instruction after @title. Example: @title tulis ulang, gunakan focus keyword di awal."}]),!1;r||u(i=>[...i,{role:"user",content:e}]);let a=Me("title","title refinement");M(!0),u(i=>[...oe(i),{role:"system",type:"timeline",status:"refining",message:"Refining title...",timestamp:new Date}]);try{let i=await fetch(`${wpAgenticWriter.apiUrl}/refine-title`,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({postId:C,sessionId:z,instruction:o}),signal:a.signal}),c=await i.json();if(!i.ok)throw new Error((c==null?void 0:c.message)||"Failed to refine title");return c!=null&&c.title&&ie("core/editor").editPost({title:c.title}),c!=null&&c.cost&&he({...te,session:te.session+Number(c.cost||0)}),we(c),u(l=>{let d=[...l],g=Y(d);return g!==-1&&(d[g]={...d[g],status:"complete",message:"Title refined successfully.",completedAt:new Date}),d.push({role:"assistant",content:`Updated title: ${c.title||""}`}),d}),!0}catch(i){return timeout&&clearTimeout(timeout),Se(i)?(u(c=>{let l=[...c],d=Y(l);return d!==-1&&(l[d]={...l[d],status:"stopped",message:"Title refinement stopped."}),l}),!1):(u(c=>[...c,{role:"system",type:"error",content:"Error: "+(i.message||"Failed to refine title")}]),!1)}finally{M(!1),ke("title")}},Fr=e=>{let t=[{mode:"add_below",regex:/^\s*(?:\/)?add below\b[:\-]?\s*/i},{mode:"add_above",regex:/^\s*(?:\/)?add above\b[:\-]?\s*/i},{mode:"append_code",regex:/^\s*(?:\/)?append code block\b[:\-]?\s*/i},{mode:"append_code",regex:/^\s*(?:\/)?append code\b[:\-]?\s*/i},{mode:"append_code",regex:/^\s*(?:\/)?add code block\b[:\-]?\s*/i}];for(let n of t)if(n.regex.test(e))return{mode:n.mode,message:e.replace(n.regex,"").trim()};return null},jr=e=>{let t=[{id:"add-below",label:"add below",sublabel:"Insert a new paragraph below the target block",insertText:"add below @"},{id:"add-above",label:"add above",sublabel:"Insert a new paragraph above the target block",insertText:"add above @"},{id:"append-code-block",label:"append code block",sublabel:"Insert a code block below the target block",insertText:"append code block @"},{id:"reformat",label:"reformat",sublabel:"Convert markdown-like text into blocks",insertText:"reformat @"}];if(!e)return t;let n=e.toLowerCase();return t.filter(r=>r.label.includes(n))},Hr=e=>{let t=V("core/block-editor").getBlockIndex?V("core/block-editor").getBlockIndex(e):-1;return t!==-1?t:V("core/block-editor").getBlocks().findIndex(r=>r.clientId===e)},Ur=e=>{if(e.length>0){let r=Ut(e);if(r.length>0)return r[0]}let t=V("core/block-editor").getSelectedBlockClientId();if(t)return t;let n=V("core/block-editor").getBlocks();return n.length>0?n[n.length-1].clientId:null},zr=async(e,t,n,r)=>{let o=Ur(n),a=o?V("core/block-editor").getBlock(o):null,c=((a==null?void 0:a.name)==="core/list-item"?yo(o):null)||o;if(!c){u(b=>[...b,{role:"system",type:"error",content:"No target block found. Select a block or mention one with @paragraph-1."}]),M(!1);return}let l=Hr(c),d=l===-1?void 0:l+(e==="add_above"?0:1),{insertBlocks:g}=ie("core/block-editor"),h=e==="append_code"?"core/code":"core/paragraph",v=s.blocks.createBlock(h,e==="append_code"?{content:"",language:"text"}:{content:""});g(v,d);let y=qs(t);if((a==null?void 0:a.name)==="core/list-item"){let b=Pe(a);b&&(y=y?`${y} Add a short description for: "${b}".`:`Add a short description for: "${b}".`)}let _=vo(n,o);if(!_.length){let b=bo(c);b&&_.push(`Heading: ${b}`),wo(c,2).forEach((S,x)=>{_.push(`Paragraph ${x+1}: ${S}`)})}_.length&&(y=`${y} Context snippets: ${_.map(b=>`- ${b}`).join(` `)}`),y=`${y} Return only JSON: {"content":"...","blockType":"${h}"} with no extra text.`,e==="append_code"&&(y+=' Put the code in "content" only, no backticks.'),pe(""),u(b=>[...b,{role:"user",content:r}]),await gt(y,[v.clientId],{skipUserMessage:!0,useDiffPlan:!1})},qr=async(e,t={})=>{var l,d,g,h,v,y,_,B;let{resume:n=!1,suggestKeywords:r=Ce==="planning"}=t,o={...e,postConfig:I,chatHistory:ut()};Tn.current=o;let a=Ce==="planning"?"planning":"generation",i=Me(a,a==="planning"?"outline generation":"article generation");M(!0),n||Kn("Article Generation");let c=null;try{let b=await fetch(wpAgenticWriter.apiUrl+"/generate-plan",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({...o,resume:n}),signal:i.signal});if(!b.ok){let $=await b.json();u(q=>[...q,{role:"system",type:"error",content:fe($,"Failed to generate article"),canRetry:!0,retryType:"generation"}]);return}let S=Ke(b.body.getReader()),x=new TextDecoder;for(c=setTimeout(()=>{U&&(K.error("Generation timeout - no response received"),u($=>[...$,{role:"system",type:"error",content:fe("cURL error 28: Operation timed out after 120000 milliseconds","Failed to generate article"),canRetry:!0,retryType:"generation"}]),M(!1),S.cancel())},12e4);;){if(ue.current||i.signal.aborted)throw await S.cancel().catch(()=>{}),new DOMException("Operation stopped by user","AbortError");let{done:$,value:q}=await S.read();if($)break;let L=x.decode(q,{stream:!0}).split(` `);for(let w of L)if(w.startsWith("data: "))try{let f=JSON.parse(w.slice(6));if(f.type==="plan")he({...te,session:te.session+f.cost}),Ce==="planning"&&f.plan&&Ct(f.plan,{suggestKeywords:r});else if(f.type==="title_update")ie("core/editor").editPost({title:f.title});else if(f.type==="status"){if(f.status==="complete")continue;u(p=>{let m=[...p],k=Y(m);return k!==-1&&(m[k]={...m[k],status:f.status,message:f.message,icon:f.icon}),m})}else if(f.type==="conversational"||f.type==="conversational_stream"){let p=(f.content||"").replace(/~~~ARTICLE~+/g,"").replace(/~~~ARTICLE~~~[\r\n]*/g,"").trim();if(!p||pn(p))continue;let m=ve.current||Dt(p);if(!m)continue;ve.current=m,m==="timeline"?cn(p):f.type==="conversational"?u(k=>[...k,{role:"assistant",content:p}]):u(k=>{let N=[...k],Z=N.length-1;return N[Z]&&N[Z].role==="assistant"?N[Z]={...N[Z],content:p}:N.push({role:"assistant",content:p}),N})}else if(f.type==="block"){let{insertBlocks:p}=ie("core/block-editor"),m;if(f.block.blockName==="core/paragraph"){let k=((d=(l=f.block.innerHTML)==null?void 0:l.match(/
(.*?)<\/p>/))==null?void 0:d[1])||"";m=s.blocks.createBlock("core/paragraph",{content:k})}else if(f.block.blockName==="core/heading"){let k=((g=f.block.attrs)==null?void 0:g.level)||2,N=((v=(h=f.block.innerHTML)==null?void 0:h.match(/ (.*?)<\/p>/))==null?void 0:B[1])||"";m=s.blocks.createBlock("core/quote",{value:k})}else f.block.blockName==="core/image"?m=s.blocks.createBlock("core/image",f.block.attrs||{}):f.block.blockName==="core/code"&&(m=s.blocks.createBlock("core/code",f.block.attrs||{}));m&&p(m)}else f.type==="complete"?(we(f),clearTimeout(c),he({...te,session:te.session+f.totalCost}),u(p=>{let m=[...p],k=Y(m);return k!==-1&&(m[k]={...m[k],status:"complete",message:Ce==="planning"?"Outline ready.":"Article generated successfully!",completedAt:new Date}),m})):f.type==="error"&&(clearTimeout(c),u(p=>[...p,{role:"system",type:"error",content:fe(f.message||"An error occurred during article generation","Failed to generate article"),canRetry:!0,retryType:"generation"}]))}catch(f){K.error("Failed to parse streaming data:",w,f)}}c&&clearTimeout(c)}catch(b){if(Se(b)){u(S=>{let x=[...S],$=Y(x);return $!==-1&&(x[$]={...x[$],status:"stopped",message:"Generation stopped."}),x});return}K.error("Article generation error:",b),u(S=>[...S,{role:"system",type:"error",content:fe(b,"Failed to generate article"),canRetry:!0,retryType:"generation"}])}finally{M(!1),ke(a)}},Kr=()=>{if(!Tn.current){u(e=>[...e,{role:"system",type:"error",content:"Cannot retry because the original generation request is no longer available. Please send the request again."}]);return}u(e=>[...oe(e),{role:"system",type:"timeline",status:"starting",message:"Resuming generation...",timestamp:new Date}]),qr(Tn.current,{resume:!0})},Jr=()=>{if(!$n.current){u(e=>[...e,{role:"system",type:"error",content:"Cannot retry because the original writing request is no longer available. Please start writing again."}]);return}Ft({retry:!0})},Xr=()=>{if(!Bt.current){u(e=>[...e,{role:"system",type:"error",content:"Cannot retry because the original refinement request is no longer available. Please send the refinement again."}]);return}u(e=>[...oe(e),{role:"system",type:"timeline",status:"starting",message:"Retrying refinement...",timestamp:new Date}]),gt(Bt.current.message,Bt.current.blocksOverride,Bt.current.options)},Gr=async()=>{if(!Mn.current){u(n=>[...n,{role:"system",type:"error",content:"Cannot retry because the original chat request is no longer available. Please send the message again."}]);return}let e=Mn.current.message;u(n=>n.filter(r=>!(r.type==="error"&&r.retryType==="chat"))),M(!0);let t=Me("chat","chat retry");try{let n=J.filter(v=>v.role==="user"||v.role==="assistant").map(v=>({role:v.role,content:v.content})),r=await fetch(wpAgenticWriter.apiUrl+"/chat",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({messages:[...n,{role:"user",content:e}],postId:C,sessionId:z,type:"chat",stream:!0,postConfig:I}),signal:t.signal});if(!r.ok){let v=await r.json();throw new Error(v.message||"Failed to chat")}let o=Ke(r.body.getReader()),a=new TextDecoder,i="",c="",l=null,d=Date.now(),g=!1,h=setInterval(()=>{Date.now()-d>3e4&&!g&&(g=!0,u(v=>[...v,{role:"system",type:"timeline",status:"active",message:"\u23F3 Still waiting for response \u2014 the model is processing...",timestamp:new Date}]))},1e4);try{for(;;){if(ue.current||t.signal.aborted)throw new DOMException("Chat retry stopped","AbortError");let{done:v,value:y}=await o.read();if(v)break;d=Date.now(),g=!1,i+=a.decode(y,{stream:!0});let _=i.split(`
`);i=_.pop()||"";for(let B of _)if(B.startsWith("data: "))try{let b=JSON.parse(B.slice(6));if(b.type==="error"){l=new Error(b.message||"Chat error");break}if(b.type==="conversational_stream"||b.type==="conversational")c=b.content,u(S=>{let x=S[S.length-1];return x&&x.role==="assistant"&&x.isStreaming?[...S.slice(0,-1),{...x,content:c}]:[...S,{role:"assistant",content:c,isStreaming:!0}]});else if(b.type==="complete"){if(we(b),u(S=>{let x=S[S.length-1];return x&&x.role==="assistant"?[...S.slice(0,-1),{...x,isStreaming:!1}]:S}),c){let S=Jn(c);S.length>0&&Ms(S)}}else b.type==="provider"&&b.fallback_used&&u(S=>[...S,{role:"system",type:"timeline",status:"active",message:`\u26A0\uFE0F ${b.selectedProvider||"Selected provider"} unavailable \u2014 using ${b.provider||"fallback"}`,timestamp:new Date}])}catch(b){K.error("Failed to parse retry streaming data:",B,b)}if(l)throw l}if(ue.current||t.signal.aborted)throw new DOMException("Chat retry stopped","AbortError")}finally{clearInterval(h)}}catch(n){if(Se(n)||ue.current||t.signal.aborted)u(r=>[...oe(r),{role:"system",type:"timeline",status:"stopped",message:"Chat retry stopped by user.",timestamp:new Date}]);else{let r=fe(n,"Failed to chat");u(o=>[...o,{role:"system",type:"error",content:r,canRetry:!0,retryType:"chat"}])}}finally{M(!1),ke("chat")}},_t=e=>{let t=e.blockType||"core/paragraph",n=e.content||"";if(t==="core/image"){let r=n.match(/^!\[(.*?)\]\(([^)\s]+)(?:\s+"[^"]*")?\)\s*$/),o=r?r[1]:"",a=r?r[2]:"";return s.blocks.createBlock("core/image",{id:0,url:a,alt:o,caption:"",sizeSlug:"large",linkDestination:"none"})}if(t==="core/heading")return s.blocks.createBlock("core/heading",{level:e.level||2,content:n});if(t==="core/list"){let o=n.split(`
`).map(a=>a.trim()).filter(Boolean).map(a=>s.blocks.createBlock("core/list-item",{content:a}));return s.blocks.createBlock("core/list",{ordered:e.ordered||!1,...e.start?{start:parseInt(e.start,10)}:{}},o)}return t==="core/code"?s.blocks.createBlock("core/code",{content:n,language:e.language||"text"}):t==="core/paragraph"&&n.includes("<")&&n.includes(">")?s.blocks.rawHandler({HTML:n}):s.blocks.createBlock(t,{content:n})},fn=e=>!e||!e.actions?[]:Array.isArray(e.actions)?e.actions:Object.values(e.actions),Vr=(e,t)=>{if(!e||!e.action)return{title:"Unknown action"};let n=e.blockType?` (${e.blockType.replace("core/","")})`:"",r=(e.content||"").replace(/\s+/g," ").trim(),o=r||"",a=Or(e.blockId),i=a||"",c=a?` "${a.substring(0,40)}${a.length>40?"...":""}"`:"",l=i||'"Target block not found"',d=e.blockId||null;switch(e.action){case"keep":return{title:"Keep"};case"delete":return{title:`Delete${c}`,blockId:d,viewInEditor:!0};case"replace":return{title:`Replace${c}${n}`,blockId:d,viewInEditor:!0};case"change_type":return{title:`Change type${c}${n}`,blockId:d,viewInEditor:!0};case"insert":return{title:`Insert new block${n}`,blockId:d,viewInEditor:!0};case"insert_before":return{title:`Insert before${c}${n}`,blockId:d,viewInEditor:!0};case"insert_after":return{title:`Insert after${c}${n}`,blockId:d,viewInEditor:!0};default:return{title:`Unknown action: ${e.action}`}}},Xs=e=>((e==null?void 0:e.heading)||(e==null?void 0:e.title)||"").toString().replace(/<[^>]+>/g,"").trim().toLowerCase(),Gs=(e,t)=>{if(!e||!t)return;let n=He.current[e]||[];n.includes(t)||(He.current[e]=[...n,t]),kt.current[t]=e},Qr=(e,t)=>{if(!e||!t)return;let n=He.current[e]||[];He.current[e]=n.filter(r=>r!==t),delete kt.current[t]},Yr=async()=>{if(C)try{let e=await fetch(`${wpAgenticWriter.apiUrl}/section-blocks/${C}`,{method:"GET",headers:{"X-WP-Nonce":wpAgenticWriter.nonce}});if(!e.ok)return;let t=await e.json();t&&t.sectionBlocks&&typeof t.sectionBlocks=="object"&&(He.current=t.sectionBlocks,kt.current={},Object.entries(t.sectionBlocks).forEach(([n,r])=>{Array.isArray(r)&&r.forEach(o=>{kt.current[o]=n})}))}catch{}},Vs=async e=>{if(!e||!C)return;let t=He.current[e]||[];try{await fetch(`${wpAgenticWriter.apiUrl}/section-blocks`,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({postId:C,sessionId:z,sectionId:e,blockIds:t})})}catch{}},Gn=e=>{if(!e||!Array.isArray(e.sections))return e;let t=e.sections.map((n,r)=>{let o=(n==null?void 0:n.id)||`section-${r+1}`,a=(n==null?void 0:n.status)||"pending";return{...n,id:o,status:a}});return{...e,sections:t}},Zr=e=>{if(!e||!/(kode|coding|code|script|snippet|skrip)/i.test(e))return null;let r=V("core/block-editor").getBlocks().filter(i=>i.name==="core/code");if(r.length===0)return null;let o=new Set;if(r.forEach(i=>{let c=kt.current[i.clientId];c&&o.add(c)}),o.size===0)return null;let a=[];return o.forEach(i=>{(He.current[i]||[]).forEach(l=>{a.push(l)})}),[...new Set(a)]},eo=e=>{let t=Q.current;if(!t||!Array.isArray(t.sections)||!e)return null;let n=new Set(["dalam","poin","bagian","yang","dan","atau","untuk","dengan","ada","tidak","lebih","ini","itu","seperti","agar","akan","jadi","fokus","tulis","ulang","hapus","tambahkan","pembahasan","pada","berikan","gunakan","jelaskan","buat"]),r=e.toLowerCase().replace(/[^a-z0-9\s]/g," ").split(/\s+/).filter(i=>i.length>3&&!n.has(i));if(r.length===0)return null;let o=null,a=0;return t.sections.forEach(i=>{var d;let c=[i==null?void 0:i.heading,i==null?void 0:i.title,i==null?void 0:i.description,Array.isArray(i==null?void 0:i.content)&&i.content.length>0?(d=i.content[0])==null?void 0:d.content:""].filter(Boolean).join(" ").toLowerCase();if(!c)return;let l=0;r.forEach(g=>{c.includes(g)&&(l+=1)}),l>a&&(a=l,o=i)}),!o||a<2?null:o},Qs=(e,t)=>{e&&u(n=>{var o;let r=[...n];for(let a=r.length-1;a>=0;a--)if(r[a].type==="plan"&&((o=r[a].plan)!=null&&o.sections)){let i=r[a].plan.sections.map(l=>l.id===e?{...l,status:t}:l),c={...r[a].plan,sections:i};r[a]={...r[a],plan:c},Q.current=c;break}return r})},to=(e,t)=>{let n=V("core/block-editor").getBlocks();if(!e||!Array.isArray(e.sections)||!t)return n.length;let r=e.sections,o=r.findIndex(a=>a.id===t);if(o===-1)return n.length;for(let a=o+1;a (.*?)<\/p>/))==null?void 0:b[1])||"";T=s.blocks.createBlock("core/paragraph",{content:j})}else if(R.block.blockName==="core/heading"){let j=((S=R.block.attrs)==null?void 0:S.level)||2,X=(($=(x=R.block.innerHTML)==null?void 0:x.match(/ (.*?)<\/p>/))==null?void 0:L[1])||"";T=s.blocks.createBlock("core/quote",{value:j})}else R.block.blockName==="core/image"&&(T=s.blocks.createBlock("core/image",R.block.attrs||{}));T&&ee(T)}else R.type==="complete"?(we(R),clearTimeout(re),he({...te,session:te.session+R.totalCost}),u(ee=>{let T=[...ee],j=Y(T);return j!==-1&&(T[j]={...T[j],status:"complete",message:n==="planning"?"Outline ready.":"Article generated successfully!"}),T}),M(!1)):R.type==="error"&&(clearTimeout(re),u(ee=>[...ee,{role:"system",type:"error",content:fe(R.message||"An error occurred during article generation","Failed to generate article"),canRetry:!0,retryType:"generation"}]),M(!1))}catch(R){K.error("Failed to parse streaming data:",W,R)}if(streamError)throw streamError}}clearTimeout(re)}catch(H){re&&clearTimeout(re),Se(H)?u(le=>[...oe(le),{role:"system",type:"timeline",status:"stopped",message:"Generation stopped.",timestamp:new Date}]):(K.error("Article generation error:",H),u(le=>[...le,{role:"system",type:"error",content:fe(H,"Failed to generate article"),canRetry:!0,retryType:"generation"}])),M(!1)}finally{ke(E)}return}let v=[];if(i&&(v=Ut(a)),i&&v.length===0){u(E=>[...E,{role:"system",type:"error",content:"No valid blocks found to refine. Select a block and use @this, or target an existing block like @paragraph-1."}]),M(!1);return}if(v.length>0){pe(""),await gt(e);return}if(l.length>0){if(e.includes("@")){u(E=>[...E,{role:"system",type:"error",content:"No valid blocks found to refine. Try @this, @previous, @next, @all, or @paragraph-1."}]),M(!1);return}pe(""),await gt(e,l.map(E=>E.clientId));return}pe(""),u(E=>[...E,{role:"user",content:e}]);let y=n==="planning"?"planning":"generation",_=Me(y,n==="planning"?"outline generation":"article generation");M(!0),u(E=>[...oe(E),{role:"system",type:"timeline",status:"starting",message:"Initializing...",timestamp:new Date}]);try{let E=await fetch(wpAgenticWriter.apiUrl+"/generate-plan",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({topic:e,context:"",postId:C,sessionId:z,answers:[],autoExecute:n!=="planning",stream:!0,articleLength:I.article_length,postConfig:I,chatHistory:ut()}),signal:_.signal});if(!E.ok){let re=await E.json();u(H=>[...H,{role:"system",type:"error",content:fe(re,"Failed to generate article"),canRetry:!0,retryType:"generation"}]),M(!1);return}let se=Ke(E.body.getReader()),ne=new TextDecoder;for(;;){if(ue.current||_.signal.aborted)throw await se.cancel().catch(()=>{}),new DOMException("Operation stopped by user","AbortError");let{done:re,value:H}=await se.read();if(re)break;let D=ne.decode(H,{stream:!0}).split(`
`);for(let P of D)if(P.startsWith("data: "))try{let A=JSON.parse(P.slice(6));if(A.type==="plan")he({...te,session:te.session+A.cost}),n==="planning"&&A.plan&&Ct(A.plan);else if(A.type==="title_update")ie("core/editor").editPost({title:A.title});else if(A.type==="status"){if(A.status==="complete")continue;u(O=>{let F=[...O],W=Y(F);return W!==-1&&(F[W]={...F[W],status:A.status,message:A.message,icon:A.icon}),F})}else if(A.type==="conversational"||A.type==="conversational_stream"){let O=(A.content||"").replace(/~~~ARTICLE~+/g,"").replace(/~~~ARTICLE~~~[\r\n]*/g,"").trim();if(!O||pn(O))continue;let F=ve.current||Dt(O);if(!F)continue;ve.current=F,F==="timeline"?cn(O):A.type==="conversational"?u(W=>[...W,{role:"assistant",content:O}]):u(W=>{let R=[...W],ee=R.length-1;return R[ee]&&R[ee].role==="assistant"?R[ee]={...R[ee],content:O}:R.push({role:"assistant",content:O}),R})}else if(A.type==="block"){let{insertBlocks:O}=ie("core/block-editor"),F;if(A.block.blockName==="core/paragraph"){let W=((f=(w=A.block.innerHTML)==null?void 0:w.match(/ (.*?)<\/p>/))==null?void 0:f[1])||"";F=s.blocks.createBlock("core/paragraph",{content:W})}else if(A.block.blockName==="core/heading"){let W=((p=A.block.attrs)==null?void 0:p.level)||2,R=((k=(m=A.block.innerHTML)==null?void 0:m.match(/ (.*?)<\/p>/))==null?void 0:_e[1])||"";F=s.blocks.createBlock("core/quote",{value:W})}else if(A.block.blockName==="core/image")F=s.blocks.createBlock("core/image",A.block.attrs||{});else{let W=s.blocks.parse(A.block.innerHTML);F=W&&W.length>0?W[0]:null}F&&O(F)}else if(A.type==="complete")we(A),he({...te,session:te.session+A.totalCost}),u(O=>{let F=[...O],W=Y(F);return W!==-1&&(F[W]={...F[W],status:"complete",message:n==="planning"?"Outline ready.":"Article generation complete!"}),F}),n!=="planning"&&setTimeout(()=>{let F=V("core/block-editor").getBlocks().filter(W=>W.name==="core/image"&&W.attributes["data-agent-image-id"]);F.length>0&&window.dispatchEvent(new CustomEvent("wpaw:open-image-review-modal",{detail:{postId:C,sessionId:z,imageCount:F.length}}))},500);else if(A.type==="error")throw new Error(A.message)}catch(A){K.error("Failed to parse streaming data:",P,A)}}setTimeout(()=>{M(!1)},1500)}catch(E){Se(E)?u(se=>[...oe(se),{role:"system",type:"timeline",status:"stopped",message:"Generation stopped.",timestamp:new Date}]):u(se=>[...se,{role:"system",type:"error",content:"Error: "+E.message}]),M(!1)}finally{ke(y)}},rr=async()=>{var a,i,c,l,d,g,h,v;if(U)return;let e=Er(de);if(de.config_language){let y=de.config_language;y==="__custom__"&&de.config_language_custom&&(y=de.config_language_custom.toLowerCase().trim()),y&&y!=="__skipped__"&&ge("language",y)}if(de.config_all)try{let y=JSON.parse(de.config_all);y.web_search!==void 0&&ge("web_search",y.web_search),y.seo!==void 0&&ge("seo_enabled",y.seo),y.focus_keyword&&(ge("focus_keyword",y.focus_keyword),ge("seo_focus_keyword",y.focus_keyword)),y.secondary_keywords&&ge("seo_secondary_keywords",y.secondary_keywords)}catch(y){K.error("Failed to parse config answers:",y)}if(kr==="refinement"&&Rn){Nt(!1);let y=po(Te,de),_=`${Rn.message}${y}`,B=Rn.blocks||[];ps(null),br("generation"),await gt(_,B,{skipUserMessage:!0});return}let t=Ce||"chat",n=t==="planning"?"planning":"generation",r=Me(n,t==="planning"?"outline generation":"article generation");M(!0),Nt(!1),u(y=>[...oe(y),{role:"system",type:"timeline",status:"starting",message:t==="planning"?"Creating outline...":"Generating article...",timestamp:new Date}]);let o=null;try{let y=ao()||J.map(S=>typeof S.content=="string"?S.content:"").filter(Boolean).join(`
`),_=await fetch(wpAgenticWriter.apiUrl+"/generate-plan",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({topic:y,context:"",postId:C,sessionId:z,clarificationAnswers:de,autoExecute:t!=="planning",stream:!0,articleLength:e.article_length,detectedLanguage:en,postConfig:e,chatHistory:ut()}),signal:r.signal});if(!_.ok){let S=await _.json();u(x=>[...x,{role:"system",type:"error",content:fe(S,"Failed to generate plan"),canRetry:!0,retryType:"generation"}]),M(!1);return}ve.current=null;let B=Ke(_.body.getReader()),b=new TextDecoder;for(o=setTimeout(()=>{U&&(K.error("Generation timeout - no response received"),u(S=>[...S,{role:"system",type:"error",content:fe("cURL error 28: Operation timed out after 120000 milliseconds","Failed to generate plan"),canRetry:!0,retryType:"generation"}]),M(!1),B.cancel())},12e4);;){if(ue.current||r.signal.aborted)throw await B.cancel().catch(()=>{}),new DOMException("Operation stopped by user","AbortError");let{done:S,value:x}=await B.read();if(S)break;let q=b.decode(x,{stream:!0}).split(`
`);for(let G of q)if(G.startsWith("data: "))try{let L=JSON.parse(G.slice(6));if(L.type==="plan")he({...te,session:te.session+L.cost}),t==="planning"&&L.plan&&Ct(L.plan);else if(L.type==="title_update")ie("core/editor").editPost({title:L.title});else if(L.type==="status"){if(L.status==="complete")continue;u(w=>{let f=[...w],p=Y(f);return p!==-1&&(f[p]={...f[p],status:L.status,message:L.message,icon:L.icon}),f})}else if(L.type==="conversational"||L.type==="conversational_stream"){let w=(L.content||"").replace(/~~~ARTICLE~+/g,"").replace(/~~~ARTICLE~~~[\r\n]*/g,"").trim();if(!w||pn(w))continue;let f=ve.current||Dt(w);if(!f)continue;ve.current=f,f==="timeline"?cn(w):L.type==="conversational"?u(p=>[...p,{role:"assistant",content:w}]):u(p=>{let m=[...p],k=m.length-1;return m[k]&&m[k].role==="assistant"?m[k]={...m[k],content:w}:m.push({role:"assistant",content:w}),m})}else if(L.type==="block"){let{insertBlocks:w}=ie("core/block-editor"),f;if(L.block.blockName==="core/paragraph"){let p=((i=(a=L.block.innerHTML)==null?void 0:a.match(/ (.*?)<\/p>/))==null?void 0:i[1])||"";f=s.blocks.createBlock("core/paragraph",{content:p})}else if(L.block.blockName==="core/heading"){let p=((c=L.block.attrs)==null?void 0:c.level)||2,m=((d=(l=L.block.innerHTML)==null?void 0:l.match(/ (.*?)<\/p>/))==null?void 0:v[1])||"";f=s.blocks.createBlock("core/quote",{value:p})}else L.block.blockName==="core/image"&&(f=s.blocks.createBlock("core/image",L.block.attrs||{}));f&&w(f)}else L.type==="complete"?(we(L),clearTimeout(o),he({...te,session:te.session+L.totalCost}),u(w=>{let f=[...w],p=Y(f);return p!==-1&&(f[p]={...f[p],status:"complete",message:t==="planning"?"Outline ready.":"Article generated successfully!"}),f}),M(!1)):L.type==="error"&&(clearTimeout(o),u(w=>[...w,{role:"system",type:"error",content:fe(L.message||"An error occurred during article generation","Failed to generate plan"),canRetry:!0,retryType:"generation"}]),M(!1))}catch(L){K.error("Failed to parse streaming data:",G,L)}clearTimeout(o)}}catch(y){o&&clearTimeout(o),Se(y)?u(_=>[...oe(_),{role:"system",type:"timeline",status:"stopped",message:"Generation stopped.",timestamp:new Date}]):(K.error("Article generation error:",y),u(_=>[..._,{role:"system",type:"error",content:fe(y,"Failed to generate article"),canRetry:!0,retryType:"generation"}])),M(!1)}finally{ke(n)}},Ro=()=>{if(!Zt||Te.length===0)return null;let e=Te[Ae],t=de[e.id]||"",n=()=>{let c=`${e.id}_custom`,l=de[c]||"",d=t==="__custom__";return s.element.createElement("div",{className:"wpaw-answer-options"},e.options.map((g,h)=>{let v=t===g.value;return s.element.createElement("label",{key:h},s.element.createElement("input",{type:"radio",name:e.id,checked:v,onChange:()=>{let y={...de};y[e.id]=g.value,Ne(y)}}),s.element.createElement("span",null,g.value))}),s.element.createElement("div",{className:"wpaw-custom-answer-wrapper",key:"custom"},s.element.createElement("label",null,s.element.createElement("input",{type:"radio",name:e.id,checked:d,onChange:()=>{let g={...de};g[e.id]="__custom__",Ne(g)}}),s.element.createElement("span",null,"Other (specify):")),d&&s.element.createElement("textarea",{className:"wpaw-custom-text-input",placeholder:"Type your answer here...",value:l,rows:3,onChange:g=>{let h={...de};h[c]=g.target.value,Ne(h)},autoFocus:!0,style:{resize:"vertical"}})))},r=()=>{let c=t?t.split(", "):[];return s.element.createElement("div",{className:"wpaw-answer-options"},e.options.map((l,d)=>{let g=c.includes(l.value);return s.element.createElement("label",{key:d},s.element.createElement("input",{type:"checkbox",checked:g,onChange:()=>{let h={...de},v=g?c.filter(y=>y!==l.value):[...c,l.value];h[e.id]=v.join(", "),Ne(h)}}),s.element.createElement("span",null,l.value))}))},o=()=>s.element.createElement("div",{className:"wpaw-answer-options"},s.element.createElement(es,{placeholder:e.placeholder||"Type your answer here...",value:t,onChange:c=>{let l={...de};l[e.id]=c,Ne(l)},rows:4,maxLength:e.max_length||500})),a=()=>{let c={};if(t)try{c=JSON.parse(t)}catch{c={}}let l=e.fields||[];if(l.forEach(d=>{c[d.id]===void 0&&d.default!==void 0&&(c[d.id]=d.default)}),!t&&Object.keys(c).length>0){let d={...de};d[e.id]=JSON.stringify(c),Ne(d)}return s.element.createElement("div",{className:"wpaw-config-form"},l.map((d,g)=>{let h=c[d.id]!==void 0?c[d.id]:d.default;return d.conditional&&!c[d.conditional]?null:s.element.createElement("div",{key:g,className:"wpaw-config-field"},d.type==="toggle"?s.element.createElement(React.Fragment,null,s.element.createElement("label",{className:"wpaw-config-label"},s.element.createElement("span",{className:"wpaw-config-label-text"},d.label),d.description&&s.element.createElement("span",{className:"wpaw-config-description"},d.description)),s.element.createElement("label",{className:"wpaw-config-toggle"},s.element.createElement("input",{type:"checkbox",checked:h||!1,onChange:y=>{let _={...c};_[d.id]=y.target.checked;let B={...de};B[e.id]=JSON.stringify(_),Ne(B)}}),s.element.createElement("span",{className:"wpaw-toggle-slider"}))):s.element.createElement(React.Fragment,null,s.element.createElement("label",{className:"wpaw-config-label"},s.element.createElement("span",{className:"wpaw-config-label-text"},d.label),d.description&&s.element.createElement("span",{className:"wpaw-config-description"},d.description)),s.element.createElement("input",{type:"text",className:"wpaw-config-text-input",placeholder:d.placeholder||"",value:h||"",maxLength:d.max_length||200,onChange:y=>{let _={...c};_[d.id]=y.target.value;let B={...de};B[e.id]=JSON.stringify(_),Ne(B)}})))}))},i;switch(e.type){case"single_choice":i=n();break;case"multiple_choice":i=r();break;case"open_text":i=o();break;case"config_form":i=a();break;default:i=n()}return s.element.createElement("div",{className:"wpaw-clarification-quiz dark-theme"},s.element.createElement("div",{className:"wpaw-quiz-header"},s.element.createElement("h3",null," Clarification Questions"),s.element.createElement("div",{className:"wpaw-progress-bar"},s.element.createElement("div",{className:"wpaw-progress-fill",style:{width:(Ae+1)/Te.length*100+"%"}})),s.element.createElement("span",null,`${Ae+1} of ${Te.length}`)),s.element.createElement("div",{className:"wpaw-question-card"},s.element.createElement("h4",null,e.question),i,s.element.createElement("div",{className:"wpaw-quiz-actions"},Ae>0&&s.element.createElement(me,{isSecondary:!0,onClick:()=>yt(Ae-1),disabled:U},"Previous"),s.element.createElement(me,{isSecondary:!0,onClick:()=>{let c={...de};c[e.id]="__skipped__",Ne(c),Ae===Te.length-1?rr():yt(Ae+1)},disabled:U},"Skip"),s.element.createElement(me,{isPrimary:!0,onClick:()=>{Ae===Te.length-1?rr():yt(Ae+1)},disabled:U||!t.trim()&&t!=="__custom__"},Ae===Te.length-1?"Finish":"Next"))))},Zo=async()=>{if(!(U||mt))try{Ge(!0);let e=await fetch(wpAgenticWriter.apiUrl+"/conversations",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({post_id:C||0})});if(!e.ok)throw new Error("Failed to create a new conversation");let t=await e.json();z&&(dn(),Hs(z)),Ie.current&&(clearTimeout(Ie.current),Ie.current=null),De.current=!0,t!=null&&t.session_id&&nt(t.session_id),wt.current=JSON.stringify([]),u([]),Q.current=null,xe("chat"),Ye(!1),vs([]),lt(""),is(null),As({restored:!1,summary:"",memories:[],preferences:[],systemMessage:""});let n=await un();t!=null&&t.session_id&&(ns(r=>r.some(o=>(o==null?void 0:o.session_id)===t.session_id)?r:[t,...r]),Wt(t.session_id).then(r=>{r&&Ot(t.session_id)})),setTimeout(()=>{De.current=!1,ye.current&&ye.current.focus()},50)}catch{u(t=>[...t,{role:"system",type:"error",content:"Error: Failed to start a new conversation."}])}finally{Ge(!1)}},Bo=async e=>{var t,n;if(!(!e||mt)&&window.confirm("Delete this session permanently?"))try{if(Ge(!0),!(await fetch(`${wpAgenticWriter.apiUrl}/conversations/${e}`,{method:"DELETE",headers:{"X-WP-Nonce":wpAgenticWriter.nonce}})).ok)throw new Error("Failed to delete session");let o=await un();if(z===e){let a=((t=o[0])==null?void 0:t.session_id)||"";nt(a),u(Array.isArray((n=o[0])==null?void 0:n.messages)?o[0].messages:[])}}catch{u(o=>[...o,{role:"system",type:"error",content:"Error: Failed to delete session."}])}finally{Ge(!1)}},or=(e,t)=>{if(e!=null&&e.title&&e.title.trim())return e.title.trim();let n=Array.isArray(e==null?void 0:e.messages)?e.messages.find(o=>(o==null?void 0:o.role)==="user"&&typeof(o==null?void 0:o.content)=="string"&&o.content.trim()):null;if(n!=null&&n.content)return n.content.trim().slice(0,56);let r=(e==null?void 0:e.updated_at)||(e==null?void 0:e.last_activity)||"";if(r){let o=new Date(r);if(!Number.isNaN(o.getTime()))return`Session ${t+1} - ${o.toLocaleDateString()}`}return`Session ${t+1}`},To=e=>{let t=String((e==null?void 0:e.status)||"active").toLowerCase();return t==="completed"?"Continuable":t==="archived"?"Archived":"Active"},ea=e=>{let t=Number((e==null?void 0:e.id)||0),n=String((e==null?void 0:e.session_id)||"-"),r=Number((e==null?void 0:e.post_id)||0),o=String((e==null?void 0:e.status)||"active"),a=String((e==null?void 0:e.post_status)||"").toLowerCase();return`id: ${t||"-"} | sid: ${n} | post_id: ${r} | post: ${r===0?"unassigned":a||"unknown"} | session: ${o}`},$o=()=>{let e=ft.length>0?ft[0]:null;return s.element.createElement("div",{className:"wpaw-welcome-screen"},s.element.createElement("div",{className:"wpaw-welcome-content"},s.element.createElement("span",{className:"wpaw-welcome-icon",dangerouslySetInnerHTML:{__html:''}}),s.element.createElement("h2",{className:"wpaw-welcome-title"},"Agentic Writer"),s.element.createElement("p",{className:"wpaw-welcome-subtitle"},"What are we writing today?"),e&&s.element.createElement("button",{className:"wpaw-welcome-pill",style:{width:"100%",marginBottom:"12px"},disabled:mt,onClick:()=>Us(e.session_id||"")},`\u21A9 Continue: ${or(e,0)}`),ft.length>1&&s.element.createElement("details",{style:{marginBottom:"12px",width:"100%"}},s.element.createElement("summary",{style:{fontSize:"12px",color:"#8b95a5",cursor:"pointer",marginBottom:"8px"}},`${ft.length-1} more session${ft.length>2?"s":""}`),s.element.createElement("div",{className:"wpaw-session-list"},ft.slice(1).map((t,n)=>{var r;return s.element.createElement("div",{key:t.session_id||n,className:"wpaw-welcome-pill",style:{width:"100%",marginBottom:"6px",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"8px"}},s.element.createElement("button",{type:"button",disabled:mt,className:"wpaw-session-open-btn",style:{flex:1,background:"transparent",border:"none",color:"inherit",textAlign:"left",cursor:mt?"wait":"pointer"},onClick:()=>Us(t.session_id||"")},s.element.createElement("div",null,or(t,n+1)),s.element.createElement("div",{style:{opacity:.7,fontSize:"11px"}},`${Number((r=t==null?void 0:t.message_count)!=null?r:Array.isArray(t==null?void 0:t.messages)?t.messages.length:0)} msgs \xB7 ${To(t)}`)),s.element.createElement("button",{type:"button",title:"Delete session",disabled:mt,style:{background:"transparent",border:"1px solid rgba(255,255,255,0.25)",color:"inherit",borderRadius:"6px",padding:"2px 6px",cursor:"pointer"},onClick:()=>Bo(t.session_id)},"\xD7"))}))),s.element.createElement("input",{type:"text",className:"wpaw-welcome-input",placeholder:"Focus keyword (optional)",value:Dn,onChange:t=>Nr(t.target.value),onKeyDown:t=>{t.key==="Enter"&&Ps()}}),s.element.createElement("div",{className:"wpaw-welcome-pills"},s.element.createElement("button",{className:"wpaw-welcome-pill"+(Fn==="chat"?" active":""),onClick:()=>_s("chat")},"Explore First"),s.element.createElement("button",{className:"wpaw-welcome-pill"+(Fn==="planning"?" active":""),onClick:()=>_s("planning")},"Start Outline")),s.element.createElement(me,{isPrimary:!0,onClick:Ps,className:"wpaw-welcome-start-btn"},"Start Writing")))},Eo=()=>s.element.createElement("div",{className:"wpaw-writing-empty-state"},s.element.createElement("div",{className:"wpaw-empty-state-content"},s.element.createElement("span",{className:"wpaw-empty-state-icon",dangerouslySetInnerHTML:{__html:''}}),s.element.createElement("h3",null,"Create an Outline First"),s.element.createElement("p",null,"Before writing, the agent needs an outline to structure the article and keep costs predictable. Ask for the article topic and the agent will create one first."),s.element.createElement(me,{isPrimary:!0,onClick:()=>xe("planning"),className:"wpaw-empty-state-button"},s.element.createElement("div",{style:{display:"inline-flex",alignItems:"center",gap:"8px"}},s.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24"},s.element.createElement("path",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1",d:"M16 5H3m13 7H3m8 7H3m12-1l2 2l4-4"})),"Create Outline")),s.element.createElement("p",{className:"wpaw-empty-state-hint",style:{marginTop:"16px",fontSize:"13px",color:"#a7aaad"}},"Tip: tell the agent what you want to publish, then approve or adjust the outline before writing."))),ta=()=>{let e=Ee&&Ee.length>0;return bs?s.element.createElement("div",{className:"wpaw-focus-keyword-bar wpaw-expanded"},s.element.createElement("div",{className:"wpaw-fk-header"},s.element.createElement("span",null,"\u{1F3AF} FOCUS KEYWORD"),s.element.createElement("button",{className:"wpaw-fk-collapse",onClick:()=>On(!1),title:"Collapse"},"\u2193")),s.element.createElement("div",{className:"wpaw-fk-main-input"},s.element.createElement("input",{type:"text",className:"wpaw-fk-custom-input",placeholder:e?"Edit focus keyword...":"Enter focus keyword...",value:Ee||"",onChange:t=>{let n=t.target.value;lt(n)},onBlur:t=>{t.target.value!==I.focus_keyword&&Je(t.target.value)},onKeyDown:t=>{t.key==="Enter"&&t.target.value.trim()&&(Je(t.target.value.trim()),t.target.blur())}})),ws.length>0&&s.element.createElement("div",{className:"wpaw-fk-suggestions"},s.element.createElement("div",{className:"wpaw-fk-suggestions-label"},"\u{1F4DD} AI Suggestions:"),ws.map((t,n)=>s.element.createElement("div",{key:n,className:"wpaw-fk-suggestion-item"+(t===Ee?" selected":""),onClick:()=>Je(t)},s.element.createElement("span",{className:"wpaw-fk-radio"},t===Ee?"\u25CF":"\u25CB"),s.element.createElement("span",{className:"wpaw-fk-suggestion-text"},t),s.element.createElement("span",{className:"wpaw-fk-suggestion-source"},`(#${n+1})`)))),s.element.createElement("div",{className:"wpaw-fk-stats"},s.element.createElement("span",null,`\u{1F4B0} $${(te.session||0).toFixed(4)}`),be&&s.element.createElement("span",{className:"wpaw-provider-info",title:be.warnings.length>0?be.warnings.join("; "):"AI provider used"},be.fallbackUsed?" \u26A0\uFE0F "+(be.provider||"fallback"):" \u{1F4E1} "+(be.provider||"AI")),s.element.createElement("span",{className:"wpaw-fk-divider"},"\u2502"),s.element.createElement("span",null,`\u{1F4CA} ~${J.filter(t=>t.role!=="system").length*500} tokens`))):s.element.createElement("div",{className:"wpaw-focus-keyword-bar wpaw-compact"},s.element.createElement("div",{className:"wpaw-fk-left"},s.element.createElement("span",{className:"wpaw-fk-icon"},"\u{1F3AF}"),s.element.createElement("input",{type:"text",className:"wpaw-fk-input",placeholder:"Enter focus keyword...",value:Ee||"",onChange:t=>{let n=t.target.value;lt(n),We.current&&clearTimeout(We.current),We.current=setTimeout(()=>{Je(n)},500)},onBlur:t=>{t.target.value!==I.focus_keyword&&Je(t.target.value)},disabled:U})),s.element.createElement("span",{className:"wpaw-fk-cost"},`$${(te.session||0).toFixed(4)}`,be&&s.element.createElement("span",{className:"wpaw-provider-badge",title:be.warnings.length>0?be.warnings.join("; "):"AI provider"},be.fallbackUsed?"\u26A0":"\u{1F4E1}")),s.element.createElement("button",{className:"wpaw-fk-expand",onClick:()=>On(!0),title:"Expand"},s.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24"},s.element.createElement("path",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.5",d:"m7 15l5 5l5-5M7 9l5-5l5 5"}))))},Mo=()=>{let e=Ys(),t=J.filter(c=>c.role==="user"||c.role==="assistant").length,n=be!=null&&be.provider?`${be.provider}${be.model?` / ${be.model}`:""}`:"Provider not used yet",r=$e.status&&$e.status!=="idle"?$e.status:Ue.status||"idle",o=$e.status&&$e.status!=="idle"?`${$e.status==="stopping"?"Stopping":"Running"} ${$e.label||$e.type}`:vr?"Loading...":String(Ue.status||"idle").replace(/_/g," "),a=!U&&Q.current&&["in_progress","paused","failed"].includes(Ue.status),i=Et.selectedBlockPreview?`: ${Et.selectedBlockPreview}`:"";return s.element.createElement("div",{className:`wpaw-agent-workspace-card${rn?" is-collapsed":""}`},s.element.createElement("div",{className:"wpaw-agent-workspace-header"},s.element.createElement("div",{className:"wpaw-agent-workspace-heading"},s.element.createElement("div",{className:"wpaw-agent-workspace-kicker"},"Agent Workspace"),s.element.createElement("div",{className:"wpaw-agent-workspace-title"},Et.title||"Untitled draft")),s.element.createElement("div",{className:"wpaw-agent-workspace-actions"},s.element.createElement("span",{className:`wpaw-agent-workspace-status status-${r}`},o))),!rn&&s.element.createElement("div",{className:"wpaw-agent-context-grid"},s.element.createElement("div",{className:"wpaw-agent-context-item"},s.element.createElement("span",null,"Post blocks"),s.element.createElement("strong",null,String(Et.blockCount||0))),s.element.createElement("div",{className:"wpaw-agent-context-item"},s.element.createElement("span",null,"Outline"),s.element.createElement("strong",null,e.label)),s.element.createElement("div",{className:"wpaw-agent-context-item"},s.element.createElement("span",null,"Selected"),s.element.createElement("strong",null,`${Et.selectedBlockLabel}${i}`)),s.element.createElement("div",{className:"wpaw-agent-context-item"},s.element.createElement("span",null,"Focus keyword"),s.element.createElement("input",{type:"text",className:"wpaw-agent-keyword-input",placeholder:"Optional",value:Ee||"",onChange:c=>{let l=c.target.value;lt(l),We.current&&clearTimeout(We.current),We.current=setTimeout(()=>{Je(l)},500)},onBlur:c=>{c.target.value!==I.focus_keyword&&Je(c.target.value)},disabled:U})),s.element.createElement("div",{className:"wpaw-agent-context-item"},s.element.createElement("span",null,"Conversation"),s.element.createElement("strong",null,`${t} message${t===1?"":"s"}`)),s.element.createElement("div",{className:"wpaw-agent-context-item"},s.element.createElement("span",null,"Provider"),s.element.createElement("strong",null,n))),!rn&&a&&s.element.createElement("div",{className:"wpaw-agent-resume-card"},s.element.createElement("div",null,s.element.createElement("strong",null,Ue.status==="failed"?"Writing can be retried":"Writing can resume"),s.element.createElement("span",null,`Last saved section: ${Ue.current_section_index||0}`)),s.element.createElement(me,{isPrimary:!0,isSmall:!0,onClick:()=>Ft({retry:!0,skipConfirm:!0})},Ue.status==="failed"?"Retry":"Resume")))},Po=e=>{if(!e||e==="continue_chat")return null;let n={create_outline:{icon:"\u{1F4DD}",title:"Ready to create an outline?",description:"I'll generate a structured outline based on our conversation.",button:"Create Outline Now",onClick:async()=>{xe("planning");let r=Ee||I.focus_keyword||I.seo_focus_keyword,o=J.find(l=>l.role==="user"),a=r||(o?o.content.substring(0,100):"");pe(""),M(!0),u(l=>[...oe(l),{role:"system",type:"timeline",status:"checking",message:"Analyzing request...",timestamp:new Date}]);let i=en,c=Me("planning","outline generation");try{K.log("[WPAW] Calling clarity check with topic:",a);let l=await fetch(wpAgenticWriter.apiUrl+"/check-clarity",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({topic:a||"article outline",answers:[],postId:C,sessionId:z,mode:"generation",postConfig:I,chatHistory:ut()}),signal:c.signal});if(K.log("[WPAW] Clarity response status:",l.status),!l.ok){let h=await l.text();throw K.error("[WPAW] Clarity check failed:",h),new Error("Clarity check failed: "+h)}let d=await l.json();we(d);let g=d.result;if(K.log("[WPAW] Clarity result:",g),g.detected_language&&(i=g.detected_language,ms(g.detected_language)),g.questions&&g.questions.length>0){K.log("[WPAW] Showing quiz with",g.questions.length,"questions"),In(g.questions),Nt(!0),yt(0),Ne([]),M(!1),u(h=>{let v=[...h],y=Y(v);return y!==-1&&(v[y]={...v[y],status:"waiting",message:"Waiting for clarification..."}),v}),ke("planning");return}else K.warn("[WPAW] No questions returned from clarity check!")}catch(l){K.error("[WPAW] Clarity check error:",l),Se(l)||ue.current||c.signal.aborted?u(d=>[...oe(d),{role:"system",type:"timeline",status:"stopped",message:"Outline generation stopped by user.",timestamp:new Date}]):u(d=>[...d,{role:"system",type:"error",content:"Clarity check failed. Please try again.",canRetry:!0}]),M(!1),ke("planning");return}u(l=>{let d=[...l],g=Y(d);return g!==-1&&(d[g]={...d[g],status:"starting",message:"Creating outline..."}),d});try{let l=await fetch(wpAgenticWriter.apiUrl+"/generate-plan",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({topic:a||"article outline",context:"",postId:C,sessionId:z,answers:[],autoExecute:!1,stream:!0,articleLength:I.article_length,detectedLanguage:i,postConfig:I,chatHistory:ut()}),signal:c.signal});if(!l.ok){let h=await l.json();u(v=>[...v,{role:"system",type:"error",content:fe(h,"Failed to generate outline"),canRetry:!0,retryType:"generation"}]),M(!1),ke("planning");return}ve.current=null;let d=Ke(l.body.getReader()),g=new TextDecoder;for(;;){if(ue.current||c.signal.aborted)throw new DOMException("Outline generation stopped","AbortError");let{done:h,value:v}=await d.read();if(h)break;let _=g.decode(v,{stream:!0}).split(`
`);for(let B of _)if(B.startsWith("data: "))try{let b=JSON.parse(B.slice(6));if(b.type==="plan")he(S=>({...S,session:S.session+(b.cost||0)})),b.plan&&Ct(b.plan,{suggestKeywords:!0});else if(b.type==="status"){if(b.status==="complete")continue;u(S=>{let x=[...S],$=Y(x);return $!==-1&&(x[$]={...x[$],status:b.status,message:b.message,icon:b.icon}),x})}}catch(b){K.error("Failed to parse streaming data:",b)}}if(ue.current||c.signal.aborted)throw new DOMException("Outline generation stopped","AbortError");M(!1),ke("planning")}catch(l){Se(l)||ue.current||c.signal.aborted?u(d=>[...oe(d),{role:"system",type:"timeline",status:"stopped",message:"Outline generation stopped by user.",timestamp:new Date}]):u(d=>[...d,{role:"system",type:"error",content:fe(l,"Failed to generate outline"),canRetry:!0,retryType:"generation"}]),M(!1),ke("planning")}}}}[e];return n?s.element.createElement("div",{className:"wpaw-contextual-action"},s.element.createElement("div",{className:"wpaw-action-icon"},n.icon),s.element.createElement("div",{className:"wpaw-action-content"},s.element.createElement("h4",null,n.title),s.element.createElement("p",null,n.description),s.element.createElement(me,{isPrimary:!0,onClick:n.onClick},n.button))):null},Lo=()=>{let e=l=>l==null?"":typeof l=="string"||typeof l=="number"?String(l):JSON.stringify(l),t=l=>String(l).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),n=l=>{let d=t(l);return d=d.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(g,h,v)=>`${h}`),d=d.replace(/`([^`]+)`/g,(g,h)=>` ${n(_.join(" "))} ${n(k)}([\s\S]*?)<\/code>/i);n&&n[1]&&(t.content=n[1].replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").replace(/"/g,'"'))}if(e.blockName==="core/table"&&e.innerHTML){let n=e.innerHTML.match(/([\s\S]*?)<\/thead>/i),r=e.innerHTML.match(/([\s\S]*?)<\/tbody>/i);(n||r)&&(t.head=[],t.body=[],n&&(n[1].match(/([\s\S]*?)<\/tr>/gi)||[]).forEach(a=>{let i=[];(a.match(/ ([\s\S]*?)<\/tr>/gi)||[]).forEach(a=>{let i=[];(a.match(/ ([\s\S]*?)<\/td>/gi)||[]).forEach(l=>{let d=l.replace(/<\/?td>/gi,"");i.push({content:d,tag:"td"})}),i.length>0&&t.body.push({cells:i})}))}if((e.blockName==="core/buttons"||e.blockName==="core/button")&&e.blockName==="core/button")return s.blocks.createBlock("core/buttons",{},[s.blocks.createBlock("core/button",t)]);if(e.innerBlocks&&e.innerBlocks.length>0){let n=e.innerBlocks.map(r=>Vn(r)).filter(Boolean);return s.blocks.createBlock(e.blockName,t,n)}return s.blocks.createBlock(e.blockName,t)},uo=async(e,t)=>{if(!U){if(!e||e.length===0){u(n=>[...n,{role:"system",type:"error",content:"No blocks found to reformat."}]);return}M(!0),u(n=>[...oe(n),{role:"system",type:"timeline",status:"refining",message:`Reformatting ${e.length} block(s)...`,timestamp:new Date}]);try{let n=await fetch(wpAgenticWriter.apiUrl+"/reformat-blocks",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({blocks:e,postId:C,sessionId:z})});if(!n.ok){let c=await n.json();throw new Error(c.message||"Failed to reformat blocks")}let r=await n.json();we(r);let o=r.results||[],{replaceBlocks:a}=ie("core/block-editor"),i=V("core/editor").getEditedPostAttribute("title")||"";o.forEach(c=>{let l=(c.blocks||[]).map(Vn).filter(Boolean);l.length>0&&a(c.clientId,l)}),u(c=>[...c,{role:"system",type:"timeline",status:"complete",message:`Reformatted ${o.length} block(s).`,timestamp:new Date,completedAt:new Date}]),r.recommended_title&&(u(c=>[...c,{role:"assistant",content:`Suggested title: ${r.recommended_title}`}]),(r.title_updated||!i)&&ie("core/editor").editPost({title:r.recommended_title}))}catch(n){u(r=>[...r,{role:"system",type:"error",content:"Error: "+(n.message||"Failed to reformat blocks")}])}finally{M(!1)}}},go=async e=>{if(U)return;let t=Q.current;if(!t){u(n=>[...n,{role:"system",type:"error",content:"No outline found to revise. Generate an outline first."}]);return}M(!0),u(n=>[...oe(n),{role:"system",type:"timeline",status:"planning",message:"Updating outline...",timestamp:new Date}]);try{let n=await fetch(wpAgenticWriter.apiUrl+"/revise-plan",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpAgenticWriter.nonce},body:JSON.stringify({instruction:e,plan:t,postId:C,sessionId:z,postConfig:I})});if(!n.ok){let o=await n.json();throw new Error(o.message||"Failed to revise outline")}let r=await n.json();r.plan&&Ct(r.plan,{append:!0}),r.cost&&he({...te,session:te.session+r.cost}),we(r),u(o=>{let a=[...o],i=Y(a);return i!==-1&&(a[i]={...a[i],status:"complete",message:"Outline updated.",completedAt:new Date}),a})}catch(n){u(r=>[...r,{role:"system",type:"error",content:"Error: "+(n.message||"Failed to revise outline")}])}finally{M(!1)}},fo=e=>{let t=fn(e);if(t.length===0){Rt(null);return}let{replaceBlocks:n,insertBlocks:r,removeBlocks:o,updateBlockAttributes:a}=ie("core/block-editor");tn.length>0&&(o(tn),Bn([])),Kn("Apply Edit Plan");let i=V("core/block-editor").getBlocks(),c=new Map(i.map((g,h)=>[g.clientId,h])),l={},d=new Set(i.map(g=>g.clientId));t.forEach(g=>{if(g.action!=="keep"&&!(g.blockId&&!d.has(g.blockId))){if(g.action==="delete"&&g.blockId){o(g.blockId);return}if(g.action==="change_type"&&g.blockId){let h=[].concat(_t(g));n(g.blockId,h);return}if(g.action==="replace"&&g.blockId){let h=[].concat(_t(g));n(g.blockId,h);return}if(g.action==="insert"||g.action==="insert_after"||g.action==="insert_before")if(g.blockId&&d.has(g.blockId)){let h=c.get(g.blockId),v=l[g.blockId]||{before:0,after:0},y;typeof h=="number"&&(g.action==="insert_before"?(y=h+v.before,v.before+=1):(y=h+v.before+1+v.after,v.after+=1)),l[g.blockId]=v;let _=[].concat(_t(g));r(_,y)}else{let h=[].concat(_t(g));r(h,i.length)}}}),Rt(null),u(g=>[...g,{role:"system",type:"timeline",status:"complete",message:"Changes applied."}])},mo=()=>{let{removeBlocks:e,updateBlockAttributes:t}=ie("core/block-editor"),n=V("core/block-editor").getBlocks();tn.length>0&&(e(tn),Bn([])),(It?fn(It):[]).forEach(o=>{if((o.action==="replace"||o.action==="delete")&&o.blockId){let a=n.find(i=>i.clientId===o.blockId);if(a&&a.attributes.className){let i=a.attributes.className.replace("wpaw-diff-removed","").trim();t(o.blockId,{className:i})}}}),Rt(null),u(o=>[...o,{role:"system",type:"timeline",status:"inactive",message:"Changes cancelled."}])},po=(e,t)=>{if(!e||e.length===0)return"";let n=[];return e.forEach(r=>{let o=t[r.id];o&&n.push(`- ${r.question||r.prompt||"Question"}: ${o}`)}),n.length===0?"":`
Clarification Answers:
${n.join(`
`)}`};React.useEffect(()=>{if(Zt&&Te.length>0&&Te[Ae]){let e=Te[Ae];if(e.type==="single_choice"&&e.options&&e.options.length>0&&!de[e.id]){let t={...de};t[e.id]=e.options[0].value,Ne(t)}}},[Ae,Te,Zt]);let Yo=e=>{var r;if(!e||e.length===0)return e;let t=[],n=null;for(let o of e){if(o.name==="core/heading"){let a=(((r=o.attributes)==null?void 0:r.content)||"").trim().toLowerCase();if(a===n){K.log("WP Agentic Writer: Removed duplicate heading:",o.attributes.content);continue}n=a}else n=null;t.push(o)}return t},jt=(e={})=>{let{textOnly:t=!1}=e,n=V("core/block-editor").getBlocks(),r=new Set(["core/paragraph","core/heading","core/list","core/quote","core/pullquote","core/code","core/preformatted","core/table"]);return n.filter(o=>{var c;if(!o.name||!o.name.startsWith("core/")||t&&!r.has(o.name))return!1;let a=((c=o.attributes)==null?void 0:c.content)||"",i=o.innerBlocks&&o.innerBlocks.length>0;return a.trim().length>0||i})},Zs=()=>{let e=V("core/block-editor").getBlocks(),t=[],n=0;return e.forEach(r=>{if(r.name!=="core/list")return;n+=1,(Array.isArray(r.innerBlocks)?r.innerBlocks:[]).forEach((a,i)=>{a.name==="core/list-item"&&t.push({block:a,parentId:r.clientId,listIndex:n,itemIndex:i})})}),t},ho=(e,t)=>Zs().find(r=>r.listIndex===e&&r.itemIndex===t),yo=e=>{let t=V("core/block-editor").getBlockParents;if(!t)return null;let n=t(e);for(let r of n){let o=V("core/block-editor").getBlock(r);if((o==null?void 0:o.name)==="core/list")return r}return null},ko=e=>{let t=e?V("core/block-editor").getBlock(e):null;if(!t)return"";let n=Pe(t);return n?n.trim():""},bo=e=>{let t=V("core/block-editor").getBlocks(),n=t.findIndex(r=>r.clientId===e);if(n===-1)return"";for(let r=n-1;r>=0;r-=1)if(t[r].name==="core/heading")return Pe(t[r])||"";return""},wo=(e,t=2)=>{let n=V("core/block-editor").getBlocks(),r=n.findIndex(a=>a.clientId===e);if(r===-1)return[];let o=[];for(let a=r-1;a>=0&&o.length ${t(h)}`),d=d.replace(/\*\*([^*]+)\*\*/g,"$1"),d=d.replace(/__([^_]+)__/g,"$1"),d=d.replace(/\*([^*]+)\*/g,"$1"),d=d.replace(/_([^_]+)_/g,"$1"),d},r=l=>{let d=e(l);if(!d)return"";if(window.markdownit&&window.DOMPurify){if(!En.current){let f=window.markdownit({html:!1,linkify:!0,breaks:!1});window.markdownitTaskLists&&f.use(window.markdownitTaskLists,{enabled:!0,label:!0,labelAfter:!0});let p=f.renderer.rules.link_open||function(m,k,N,Z,_e){return _e.renderToken(m,k,N)};f.renderer.rules.link_open=function(m,k,N,Z,_e){let E=m[k],se=E.attrIndex("target");se<0?E.attrPush(["target","_blank"]):E.attrs[se][1]="_blank";let ne=E.attrIndex("rel");return ne<0?E.attrPush(["rel","noopener noreferrer"]):E.attrs[ne][1]="noopener noreferrer",p(m,k,N,Z,_e)},En.current=f}let w=En.current.render(d);return window.DOMPurify.sanitize(w,{USE_PROFILES:{html:!0},ADD_TAGS:["input","label"],ADD_ATTR:["type","checked","disabled","class"]})}let g=[],v=d.replace(/```(\w+)?\n([\s\S]*?)```/g,(w,f,p)=>{let m=f?` class="language-${t(f)}"`:"",k=g.length;return g.push(`
`),`@@CODEBLOCK${k}@@`}).split(/\r?\n/),y="",_=[],B=null,b=!1,S=!1,x=()=>{_.length&&(y+=`${t(p)}${f.children.map(k=>`
`:"";return`