Files
igny8/frontend/dist/assets/js/pages-planner-dv4ygB5K.js
IGNY8 VPS (Salman) ca5bf13c74 buid node modules
2025-11-13 14:02:26 +00:00

22 lines
125 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/js/vendor-charts-BCGhWx_0.js","assets/js/vendor-react-core-DRQGgXXF.js","assets/js/vendor-other-DTCyBslD.js","assets/css/vendor-other-BsM4JrO0.css","assets/js/page-dashboard-CuOyqq-s.js","assets/js/vendor-react-router-P1WQ4rUN.js","assets/js/page-authpages-BaiNliVr.js","assets/js/vendor-helmet-Cxll262M.js","assets/js/vendor-state-C9hO8g1p.js","assets/js/page-components.tsx-4vErPdxY.js","assets/js/marketing-marketingapp.tsx-D0Y0OkFz.js","assets/js/marketing-layout-DVDsYZpl.js","assets/js/marketing-data-DtLIUpMC.js","assets/js/marketing-components-CJXw20ab.js"])))=>i.map(i=>d[i]);
import{r as a,j as e,a as _e}from"./vendor-react-core-DRQGgXXF.js";import{_ as lt}from"./marketing-marketingapp.tsx-D0Y0OkFz.js";import{L as Ct,b as rs,u as as}from"./vendor-react-router-P1WQ4rUN.js";import{b as Ht,n as ns,f as ls,P as bt,j as zt,d as Wt,h as Gt,g as It,i as ct,o as Qt,B as we,L as it,p as is,q as os,r as cs,C as St,I as ds,s as He,t as us,S as ms,k as _t}from"./page-authpages-BaiNliVr.js";import{a as Et,b as We,E as nt,C as Le,j as Jt,k as qe,l as Xt,m as gs,u as Ge,n as fs,A as $t,o as ps,p as hs,q as ys,r as xs,d as jt,t as bs,v as ws,w as ks,x as Vt,y as vs,z as Cs,B as Ss,D as js,F as Ns,G as Bt,H as Is,I as _s,J as Es,K as $s,L as As}from"./page-dashboard-CuOyqq-s.js";import{T as Ps,P as Qe}from"./page-reference-wEKoPZ-s.js";import{B as Ue,e as At,h as Pt,j as Ms,g as Rs}from"./page-clusters.config.tsx-FJ8SgY77.js";import{M as Je,D as Kt,a as Ut,A as Ts}from"./page-components.tsx-4vErPdxY.js";import{c as Os}from"./page-keywords.config.tsx-DZ6n4Vdz.js";import{c as Fs}from"./page-ideas.config.tsx-BDMNIgpF.js";import{g as Ls}from"./page-delete-modal.config.ts-BIbgpgnr.js";import{g as Ds}from"./page-bulk-action-modal.config.ts-DEzkmedw.js";import{g as zs}from"./page-table-actions.config.tsx-CnI7P__0.js";import{c as Yt,p as Zt}from"./vendor-state-C9hO8g1p.js";const es=a.createContext(void 0),Vs=()=>{const t=a.useContext(es);if(!t)throw new Error("useHeaderMetrics must be used within a HeaderMetricsProvider");return t},Ar=({children:t})=>{const[s,n]=a.useState([]),r=()=>{n([])};return e.jsx(es.Provider,{value:{metrics:s,setMetrics:n,clearMetrics:r},children:t})},wt=({value:t,color:s="primary",size:n="md",showLabel:r=!1,label:p,className:m=""})=>{const g={sm:"h-1",md:"h-2",lg:"h-3"},d={primary:"bg-brand-500",success:"bg-success-500",error:"bg-error-500",warning:"bg-warning-500",info:"bg-blue-light-500"},u=Math.min(100,Math.max(0,t));return e.jsxs("div",{className:m,children:[r&&e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("span",{className:"text-sm font-medium text-gray-700 dark:text-gray-300",children:p||`${u}%`}),e.jsxs("span",{className:"text-sm text-gray-500 dark:text-gray-400",children:[u,"%"]})]}),e.jsx("div",{className:`w-full rounded-full bg-gray-200 dark:bg-gray-700 ${g[n]}`,children:e.jsx("div",{className:`rounded-full transition-all duration-300 ${g[n]} ${d[s]}`,style:{width:`${u}%`}})})]})};function Bs({steps:t,onStepClick:s,showConnections:n=!0,className:r=""}){const p=d=>{switch(d){case"completed":return"bg-success-500 border-success-500 text-white";case"in_progress":return"bg-warning-500 border-warning-500 text-white";case"pending":return"bg-gray-200 border-gray-300 text-gray-600 dark:bg-gray-700 dark:border-gray-600 dark:text-gray-400"}},m=(d,u)=>{switch(d){case"completed":return e.jsx(ls,{className:"size-5"});case"in_progress":return e.jsx(ns,{className:"size-5"});case"pending":return e.jsx("span",{className:"text-sm font-bold",children:u})}},g=(d,u)=>d==="completed"&&u==="completed"||d==="completed"?"bg-success-500":"bg-gray-300 dark:bg-gray-600";return e.jsx("div",{className:`relative overflow-visible ${r}`,children:e.jsxs("div",{className:"flex items-center justify-between gap-2 overflow-x-auto pb-4 scrollbar-hide",children:[e.jsx("style",{children:`
.scrollbar-hide::-webkit-scrollbar {
display: none;
}
.scrollbar-hide {
-ms-overflow-style: none;
scrollbar-width: none;
}
`}),t.map((d,u)=>{const h=u===t.length-1,w=h?null:t[u+1];return e.jsxs(_e.Fragment,{children:[e.jsxs("div",{className:"flex flex-col items-center flex-shrink-0",children:[e.jsx(Ps,{text:d.details||`${d.title}: ${d.count} ${d.title.toLowerCase().includes("keyword")?"keywords":d.title.toLowerCase().includes("cluster")?"clusters":d.title.toLowerCase().includes("idea")?"ideas":d.title.toLowerCase().includes("task")?"tasks":"items"}`,placement:"top",children:e.jsxs(Ct,{to:d.path,onClick:i=>{s&&(i.preventDefault(),s(d))},className:`
relative flex flex-col items-center justify-center
w-20 h-20 rounded-full border-2 transition-all duration-300
${p(d.status)}
hover:scale-110 hover:shadow-lg
cursor-pointer group
`,children:[e.jsx("div",{className:"flex items-center justify-center",children:m(d.status,d.number)}),d.status==="in_progress"&&e.jsx("div",{className:"absolute inset-0 rounded-full border-2 border-warning-400 animate-ping opacity-75"})]})}),e.jsxs("div",{className:"mt-3 text-center max-w-[120px]",children:[e.jsx("p",{className:"text-xs font-semibold text-gray-700 dark:text-gray-300",children:d.title}),e.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400 mt-1",children:d.count>0?e.jsxs(e.Fragment,{children:[d.count," ",d.title.toLowerCase().includes("keyword")?"keywords":d.title.toLowerCase().includes("cluster")?"clusters":d.title.toLowerCase().includes("idea")?"ideas":d.title.toLowerCase().includes("task")?"tasks":"items"]}):e.jsx("span",{className:"text-gray-400 dark:text-gray-500",children:"No items"})}),d.status==="pending"&&d.count===0&&e.jsxs(Ct,{to:d.path,className:"inline-flex items-center gap-1 mt-2 text-xs font-medium text-brand-500 hover:text-brand-600 group-hover:translate-x-1 transition-transform",onClick:i=>{s&&(i.preventDefault(),s(d))},children:["Start Now ",e.jsx(Ht,{className:"size-3"})]})]})]}),!h&&n&&e.jsxs("div",{className:"flex items-center flex-1 min-w-[60px] max-w-[120px] mx-1",children:[e.jsx("div",{className:`h-0.5 flex-1 ${g(d.status,w==null?void 0:w.status)} transition-colors duration-300`}),e.jsx("div",{className:`flex-shrink-0 mx-1 w-0 h-0 border-t-[6px] border-t-transparent border-b-[6px] border-b-transparent border-l-[8px] transition-colors duration-300 ${d.status==="completed"?"border-l-success-500":"border-l-gray-400"}`}),e.jsx("div",{className:`h-0.5 flex-1 ${g(d.status,w==null?void 0:w.status)} transition-colors duration-300`})]})]},d.number)})]})})}const kt=a.lazy(()=>lt(()=>import("./vendor-charts-BCGhWx_0.js").then(t=>t.r),__vite__mapDeps([0,1,2,3])).then(t=>({default:t.default})));function Ks(){const t=rs(),{activeSite:s}=Et(),{activeSector:n}=We(),[r,p]=a.useState(null),[m,g]=a.useState(!0),[d,u]=a.useState(new Date),[h,w]=a.useState({keywords:0,clusters:0,ideas:0}),i=async()=>{try{g(!0);const[y,O,V,oe]=await Promise.all([Jt({page_size:1e3,sector_id:n==null?void 0:n.id}),qe({page_size:1e3,sector_id:n==null?void 0:n.id}),Xt({page_size:1e3,sector_id:n==null?void 0:n.id}),gs({page_size:1e3,sector_id:n==null?void 0:n.id})]),T=y.results||[],X=T.filter(o=>o.cluster&&o.cluster.length>0),C=T.filter(o=>!o.cluster||o.cluster.length===0),v={},H={};T.forEach(o=>{v[o.status||"unknown"]=(v[o.status||"unknown"]||0)+1,o.intent&&(H[o.intent]=(H[o.intent]||0)+1)});const M=O.results||[],Y=M.filter(o=>o.keywords_count>0),x=M.reduce((o,k)=>o+(k.volume||0),0),E=M.reduce((o,k)=>o+(k.keywords_count||0),0),U=M.length>0?Math.round(E/M.length):0,B=[...M].sort((o,k)=>(k.volume||0)-(o.volume||0)).slice(0,5).map(o=>({id:o.id,name:o.name||"Unnamed Cluster",volume:o.volume||0,keywords_count:o.keywords_count||0})),F=V.results||[],D=new Set(F.map(o=>o.id)),se=(oe.results||[]).filter(o=>o.idea&&D.has(o.idea)).length,ee=F.length-se,c={},f={};F.forEach(o=>{c[o.status||"new"]=(c[o.status||"new"]||0)+1,o.content_type&&(f[o.content_type]=(f[o.content_type]||0)+1)}),r&&w({keywords:T.length-r.keywords.total,clusters:M.length-r.clusters.total,ideas:F.length-r.ideas.total}),p({keywords:{total:T.length,mapped:X.length,unmapped:C.length,byStatus:v,byIntent:H},clusters:{total:M.length,withIdeas:Y.length,withoutIdeas:M.length-Y.length,totalVolume:x,avgKeywords:U,topClusters:B},ideas:{total:F.length,queued:se,notQueued:ee,byStatus:c,byContentType:f},workflow:{keywordsReady:T.length>0,clustersBuilt:M.length>0,ideasGenerated:F.length>0,readyForWriter:se>0}}),u(new Date)}catch(y){console.error("Error fetching dashboard data:",y)}finally{g(!1)}};a.useEffect(()=>{i();const y=setInterval(i,3e4);return()=>clearInterval(y)},[n==null?void 0:n.id,s==null?void 0:s.id]);const P=a.useMemo(()=>!r||r.keywords.total===0?0:Math.round(r.keywords.mapped/r.keywords.total*100),[r]),K=a.useMemo(()=>!r||r.clusters.total===0?0:Math.round(r.clusters.withIdeas/r.clusters.total*100),[r]),N=a.useMemo(()=>!r||r.ideas.total===0?0:Math.round(r.ideas.queued/r.ideas.total*100),[r]),R=a.useMemo(()=>{if(!r)return null;const y={chart:{type:"donut",fontFamily:"Outfit, sans-serif",toolbar:{show:!1}},labels:Object.keys(r.keywords.byStatus).filter(V=>r.keywords.byStatus[V]>0),colors:["#465FFF","#10B981","#F59E0B","#EF4444","#8B5CF6"],legend:{position:"bottom",fontFamily:"Outfit",show:!0},dataLabels:{enabled:!1},tooltip:{enabled:!0,y:{formatter:(V,{seriesIndex:oe,w:T})=>`${T.globals.labels[oe]||""}: ${V}`}},plotOptions:{pie:{donut:{size:"70%",labels:{show:!0,name:{show:!1},value:{show:!0,fontSize:"24px",fontWeight:700,color:"#465FFF",fontFamily:"Outfit",formatter:()=>{const V=Object.values(r.keywords.byStatus).reduce((oe,T)=>oe+T,0);return V>0?V.toString():"0"}},total:{show:!1}}}}}},O=Object.keys(r.keywords.byStatus).filter(V=>r.keywords.byStatus[V]>0).map(V=>r.keywords.byStatus[V]);return{options:y,series:O}},[r]),z=a.useMemo(()=>{if(!r)return null;const y={chart:{type:"bar",fontFamily:"Outfit, sans-serif",toolbar:{show:!1},height:250},colors:["#465FFF"],plotOptions:{bar:{horizontal:!1,columnWidth:"55%",borderRadius:5}},dataLabels:{enabled:!0},xaxis:{categories:Object.keys(r.ideas.byStatus),labels:{style:{fontFamily:"Outfit"}}},yaxis:{labels:{style:{fontFamily:"Outfit"}}},grid:{strokeDashArray:4}},O=[{name:"Ideas",data:Object.values(r.ideas.byStatus)}];return{options:y,series:O}},[r]),I=a.useMemo(()=>{if(!r||r.clusters.topClusters.length===0)return null;const y={chart:{type:"bar",fontFamily:"Outfit, sans-serif",toolbar:{show:!1},height:300},colors:["#10B981"],plotOptions:{bar:{horizontal:!0,borderRadius:5,dataLabels:{position:"top"}}},dataLabels:{enabled:!0,formatter:V=>V.toLocaleString(),offsetX:10},xaxis:{categories:r.clusters.topClusters.map(V=>V.name),labels:{style:{fontFamily:"Outfit",fontSize:"12px"}}},yaxis:{labels:{style:{fontFamily:"Outfit"}}},tooltip:{y:{formatter:V=>`${V.toLocaleString()} volume`}}},O=[{name:"Search Volume",data:r.clusters.topClusters.map(V=>V.volume)}];return{options:y,series:O}},[r]);if(m&&!r)return e.jsxs(e.Fragment,{children:[e.jsx(bt,{title:"Planner Dashboard - IGNY8",description:"Content planning overview"}),e.jsx("div",{className:"flex items-center justify-center h-96",children:e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"inline-block animate-spin rounded-full h-12 w-12 border-4 border-brand-500 border-t-transparent"}),e.jsx("p",{className:"mt-4 text-gray-600 dark:text-gray-400",children:"Loading dashboard data..."})]})})]});if(!r&&!m)return e.jsxs(e.Fragment,{children:[e.jsx(bt,{title:"Planner Dashboard - IGNY8",description:"Content planning overview"}),e.jsx("div",{className:"text-center py-12",children:e.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:n?"No data available for the selected sector.":"No data available. Select a sector or wait for data to load."})})]});if(!r)return null;const Z=[{number:1,title:"Add Keywords",status:r.workflow.keywordsReady?"completed":"pending",count:r.keywords.total,path:"/planner/keywords"},{number:2,title:"Auto Cluster",status:r.workflow.clustersBuilt?"completed":"pending",count:r.clusters.total,path:"/planner/clusters"},{number:3,title:"Generate Ideas",status:r.workflow.ideasGenerated?"completed":"pending",count:r.ideas.total,path:"/planner/ideas"},{number:4,title:"Queue to Writer",status:r.workflow.readyForWriter?"completed":"pending",count:r.ideas.queued,path:"/writer/tasks"}],G=[...r.keywords.unmapped>0?[{text:`${r.keywords.unmapped} keywords unmapped`,action:"Map Keywords",path:"/planner/keywords"}]:[],...r.clusters.withoutIdeas>0?[{text:`${r.clusters.withoutIdeas} clusters without ideas`,action:"Generate Ideas",path:"/planner/clusters"}]:[],...r.ideas.notQueued>0?[{text:`${r.ideas.notQueued} ideas not queued to writer`,action:"Queue to Writer",path:"/planner/ideas"}]:[]];return e.jsxs(e.Fragment,{children:[e.jsx(bt,{title:"Planner Dashboard - IGNY8",description:"Content planning overview"}),e.jsxs("div",{className:"space-y-5 sm:space-y-6",children:[e.jsx(Qe,{title:"Planner Dashboard",lastUpdated:d,showRefresh:!0,onRefresh:i,badge:{icon:e.jsx(zt,{}),color:"blue"}}),e.jsx("div",{className:"rounded-2xl border border-gray-200 bg-gradient-to-br from-brand-50 to-white dark:from-brand-500/10 dark:to-gray-800/50 dark:border-gray-800 p-6 md:p-8",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-gray-600 dark:text-gray-400",children:"Planning Progress"}),e.jsx("h3",{className:"mt-2 text-3xl font-bold text-gray-800 dark:text-white/90",children:r.ideas.queued>0?e.jsxs(e.Fragment,{children:[r.ideas.queued," Ideas Ready for Content Generation"]}):r.ideas.total>0?e.jsxs(e.Fragment,{children:[r.ideas.total," Ideas Generated"]}):r.clusters.total>0?e.jsxs(e.Fragment,{children:[r.clusters.total," Clusters Built"]}):e.jsxs(e.Fragment,{children:[r.keywords.total," Keywords Ready"]})}),e.jsxs("p",{className:"mt-2 text-sm text-gray-500 dark:text-gray-400",children:[r.keywords.total," keywords • ",r.clusters.total," clusters • ",r.ideas.total," ideas"]})]}),e.jsxs("div",{className:"hidden md:flex items-center gap-4",children:[e.jsxs("div",{className:"text-center",children:[e.jsxs("div",{className:"text-2xl font-bold text-brand-500",children:[P,"%"]}),e.jsx("div",{className:"text-xs text-gray-500 dark:text-gray-400",children:"Mapped"})]}),e.jsxs("div",{className:"text-center",children:[e.jsxs("div",{className:"text-2xl font-bold text-success-500",children:[K,"%"]}),e.jsx("div",{className:"text-xs text-gray-500 dark:text-gray-400",children:"With Ideas"})]}),e.jsxs("div",{className:"text-center",children:[e.jsxs("div",{className:"text-2xl font-bold text-warning-500",children:[N,"%"]}),e.jsx("div",{className:"text-xs text-gray-500 dark:text-gray-400",children:"Queued"})]})]})]})}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4 md:gap-6",children:[e.jsx(nt,{title:"Keywords Ready",value:r.keywords.total,subtitle:`${r.keywords.mapped} mapped • ${r.keywords.unmapped} unmapped`,trend:h.keywords,icon:e.jsx(Wt,{className:"size-6"}),accentColor:"blue",href:"/planner/keywords",details:[{label:"Total Keywords",value:r.keywords.total},{label:"Mapped",value:r.keywords.mapped},{label:"Unmapped",value:r.keywords.unmapped},{label:"Active",value:r.keywords.byStatus.active||0},{label:"Pending",value:r.keywords.byStatus.pending||0}]}),e.jsx(nt,{title:"Clusters Built",value:r.clusters.total,subtitle:`${r.clusters.totalVolume.toLocaleString()} total volume • ${r.clusters.avgKeywords} avg keywords`,trend:h.clusters,icon:e.jsx(Gt,{className:"size-6"}),accentColor:"green",href:"/planner/clusters",details:[{label:"Total Clusters",value:r.clusters.total},{label:"With Ideas",value:r.clusters.withIdeas},{label:"Without Ideas",value:r.clusters.withoutIdeas},{label:"Total Volume",value:r.clusters.totalVolume.toLocaleString()},{label:"Avg Keywords",value:r.clusters.avgKeywords}]}),e.jsx(nt,{title:"Ideas Generated",value:r.ideas.total,subtitle:`${r.ideas.queued} queued • ${r.ideas.notQueued} pending`,trend:h.ideas,icon:e.jsx(It,{className:"size-6"}),accentColor:"orange",href:"/planner/ideas",details:[{label:"Total Ideas",value:r.ideas.total},{label:"Queued",value:r.ideas.queued},{label:"Not Queued",value:r.ideas.notQueued},{label:"New",value:r.ideas.byStatus.new||0},{label:"Scheduled",value:r.ideas.byStatus.scheduled||0}]}),e.jsx(nt,{title:"Mapping Progress",value:`${P}%`,subtitle:`${r.keywords.mapped} of ${r.keywords.total} keywords mapped`,icon:e.jsx(zt,{className:"size-6"}),accentColor:"purple",href:"/planner/keywords",details:[{label:"Mapping Progress",value:`${P}%`},{label:"Mapped Keywords",value:r.keywords.mapped},{label:"Total Keywords",value:r.keywords.total},{label:"Unmapped",value:r.keywords.unmapped}]})]}),e.jsx(Le,{title:"Planner Workflow Pipeline",desc:"Track your planning progress through each stage",children:e.jsx(Bs,{steps:Z.map(y=>({number:y.number,title:y.title,status:y.status==="completed"?"completed":y.status==="in_progress"?"in_progress":"pending",count:y.count||0,path:y.path,description:y.title,details:y.status==="completed"?`${y.title} completed with ${y.count} items`:y.status==="pending"?`${y.title} pending - ${y.count} items ready`:`${y.title} in progress`})),onStepClick:y=>{t(y.path)},showConnections:!0})}),e.jsxs("div",{className:"grid grid-cols-1 gap-6 lg:grid-cols-3",children:[e.jsx(Le,{title:"Progress & Readiness Summary",desc:"Planning workflow progress tracking",className:"lg:col-span-1",children:e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("span",{className:"text-sm font-medium text-gray-700 dark:text-gray-300",children:"Keyword Mapping"}),e.jsxs("span",{className:"text-sm font-semibold text-gray-800 dark:text-white/90",children:[P,"%"]})]}),e.jsx(wt,{value:P,color:"primary",size:"md"}),e.jsxs("p",{className:"mt-1 text-xs text-gray-500 dark:text-gray-400",children:[r.keywords.mapped," of ",r.keywords.total," keywords mapped"]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("span",{className:"text-sm font-medium text-gray-700 dark:text-gray-300",children:"Clusters With Ideas"}),e.jsxs("span",{className:"text-sm font-semibold text-gray-800 dark:text-white/90",children:[K,"%"]})]}),e.jsx(wt,{value:K,color:"success",size:"md"}),e.jsxs("p",{className:"mt-1 text-xs text-gray-500 dark:text-gray-400",children:[r.clusters.withIdeas," of ",r.clusters.total," clusters have ideas"]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("span",{className:"text-sm font-medium text-gray-700 dark:text-gray-300",children:"Ideas Queued to Writer"}),e.jsxs("span",{className:"text-sm font-semibold text-gray-800 dark:text-white/90",children:[N,"%"]})]}),e.jsx(wt,{value:N,color:"warning",size:"md"}),e.jsxs("p",{className:"mt-1 text-xs text-gray-500 dark:text-gray-400",children:[r.ideas.queued," of ",r.ideas.total," ideas queued"]})]})]})}),e.jsx(Le,{title:"Top 5 Clusters by Volume",desc:"Highest volume keyword clusters",className:"lg:col-span-2",children:I?e.jsx(a.Suspense,{fallback:e.jsx("div",{className:"flex items-center justify-center h-[300px]",children:e.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-4 border-brand-500 border-t-transparent"})}),children:e.jsx(kt,{options:I.options,series:I.series,type:"bar",height:300})}):e.jsx("div",{className:"text-center py-8 text-gray-500 dark:text-gray-400",children:"No clusters data available"})})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-6 lg:grid-cols-2",children:[R&&e.jsx(Le,{title:"Keywords by Status",desc:"Distribution of keywords across statuses",children:e.jsx(a.Suspense,{fallback:e.jsx("div",{className:"flex items-center justify-center h-[300px]",children:e.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-4 border-brand-500 border-t-transparent"})}),children:e.jsx(kt,{options:R.options,series:R.series,type:"donut",height:300})})}),z&&e.jsx(Le,{title:"Ideas by Status",desc:"Content ideas workflow status",children:e.jsx(a.Suspense,{fallback:e.jsx("div",{className:"flex items-center justify-center h-[300px]",children:e.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-4 border-brand-500 border-t-transparent"})}),children:e.jsx(kt,{options:z.options,series:z.series,type:"bar",height:300})})})]}),G.length>0&&e.jsx(Le,{title:"Next Actions",desc:"Actionable items requiring attention",children:e.jsx("div",{className:"space-y-3",children:G.map((y,O)=>e.jsxs("div",{className:"flex items-center justify-between p-4 rounded-lg bg-gradient-to-r from-gray-50 to-white dark:from-gray-900/50 dark:to-gray-800/50 border border-gray-200 dark:border-gray-800 hover:border-brand-300 dark:hover:border-brand-500/30 transition-all group",children:[e.jsx("span",{className:"text-sm font-medium text-gray-700 dark:text-gray-300",children:y.text}),e.jsxs(Ct,{to:y.path,className:"inline-flex items-center gap-2 text-sm font-medium text-brand-500 hover:text-brand-600 group-hover:translate-x-1 transition-transform",children:[y.action,e.jsx(Ht,{className:"size-4"})]})]},O))})})]})]})}const Pr=Object.freeze(Object.defineProperty({__proto__:null,default:Ks},Symbol.toStringTag,{value:"Module"})),Us=({children:t,className:s})=>e.jsx("table",{className:`min-w-full w-full ${s}`,children:t}),qs=({children:t,className:s})=>e.jsx("thead",{className:s,children:t}),Hs=({children:t,className:s})=>e.jsx("tbody",{className:s,children:t}),vt=({children:t,className:s})=>e.jsx("tr",{className:s,children:t}),De=({children:t,isHeader:s=!1,className:n})=>{const r=s?"th":"td";return e.jsx(r,{className:` ${n}`,children:t})},ot=({options:t,placeholder:s="Select an option",onChange:n,className:r="",defaultValue:p="",value:m,disabled:g=!1})=>{const d=m!==void 0,[u,h]=a.useState(!1),[w,i]=a.useState(p),P=d?m||"":w,K=a.useRef(null),N=a.useRef(null);a.useEffect(()=>{d||i(p)},[p,d]);const R=String(P||""),z=t.find(O=>String(O.value||"")===R),I=z?z.label:s,Z=!z;a.useEffect(()=>{const O=V=>{K.current&&!K.current.contains(V.target)&&N.current&&!N.current.contains(V.target)&&h(!1)};if(u)return document.addEventListener("mousedown",O),()=>{document.removeEventListener("mousedown",O)}},[u]);const G=O=>{const V=O==null?"":String(O);d||i(V),n(V),h(!1)},y=O=>{O.key==="Escape"?h(!1):(O.key==="Enter"||O.key===" ")&&(O.preventDefault(),h(!u))};return e.jsxs("div",{className:`relative ${r}`,children:[e.jsxs("button",{ref:N,type:"button",onClick:()=>!g&&h(!u),disabled:g,onKeyDown:y,className:`igny8-select-styled h-9 w-full appearance-none rounded-lg border border-gray-300 bg-transparent px-3 py-2 pr-10 text-sm shadow-theme-xs focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:focus:border-brand-800 ${Z?"text-gray-400 dark:text-gray-400":"text-gray-800 dark:text-white/90"} ${u?"border-brand-300 ring-3 ring-brand-500/10 dark:border-brand-800":""} ${g?"opacity-50 cursor-not-allowed":""}`,children:[e.jsx("span",{className:"block text-left truncate",children:I}),e.jsx("span",{className:"absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none",children:e.jsx(ct,{className:`h-4 w-4 text-gray-400 transition-transform ${u?"transform rotate-180":""}`})})]}),u&&e.jsx("div",{ref:K,className:"absolute z-50 left-0 right-0 mt-1 rounded-lg border border-gray-200 bg-white shadow-theme-lg dark:border-gray-800 dark:bg-gray-dark overflow-hidden max-h-60 overflow-y-auto",children:e.jsx("div",{className:"py-1",children:t.map(O=>{const V=String(O.value||""),T=String(P||"")===V;return e.jsxs("button",{type:"button",onClick:X=>{X.preventDefault(),X.stopPropagation(),G(V)},className:`w-full text-left px-3 py-2 text-sm transition-colors flex items-center gap-2 ${T?"bg-brand-500 text-white":"text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-800"}`,children:[O.icon&&e.jsx("span",{className:"flex-shrink-0",children:O.icon}),e.jsx("span",{children:O.label})]},`option-${O.value||"empty"}-${O.label}`)})})})]})};function Ws({isOpen:t,onClose:s,onConfirm:n,title:r,message:p,confirmText:m="Export",isLoading:g=!1}){return e.jsx(Je,{isOpen:t,onClose:s,className:"max-w-md",children:e.jsxs("div",{className:"p-6",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[e.jsx("div",{className:"flex items-center justify-center w-10 h-10 bg-blue-50 rounded-xl dark:bg-blue-500/10",children:e.jsx(Qt,{className:"w-5 h-5 text-blue-500"})}),e.jsx("h2",{className:"text-xl font-bold text-gray-800 dark:text-white",children:r})]}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400 mb-6",children:p}),e.jsxs("div",{className:"flex justify-end gap-4",children:[e.jsx(we,{variant:"outline",onClick:s,disabled:g,children:"Cancel"}),e.jsx(we,{variant:"primary",onClick:n,disabled:g,children:g?"Exporting...":m})]})]})})}function Gs({isOpen:t,onClose:s,onConfirm:n,title:r,message:p,confirmText:m="Update Status",statusOptions:g,isLoading:d=!1}){const[u,h]=a.useState(""),w=async()=>{u&&(await n(u),h(""))},i=()=>{h(""),s()};return e.jsx(Je,{isOpen:t,onClose:i,className:"max-w-md",children:e.jsxs("div",{className:"p-6",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[e.jsx("div",{className:"flex items-center justify-center w-10 h-10 bg-blue-50 rounded-xl dark:bg-blue-500/10",children:e.jsx(Qt,{className:"w-5 h-5 text-blue-500"})}),e.jsx("h2",{className:"text-xl font-bold text-gray-800 dark:text-white",children:r})]}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400 mb-4",children:p}),e.jsxs("div",{className:"mb-6",children:[e.jsx(it,{className:"mb-2",children:"New Status"}),e.jsx(ot,{options:g,placeholder:"Select status",value:u,onChange:P=>h(P||""),className:"w-full"})]}),e.jsxs("div",{className:"flex justify-end gap-4",children:[e.jsx(we,{variant:"outline",onClick:i,disabled:d,children:"Cancel"}),e.jsx(we,{variant:"primary",onClick:w,disabled:d||!u,children:d?"Updating...":m})]})]})})}const Qs=({currentPage:t,totalPages:s,pageSize:n,onPageChange:r,onPageSizeChange:p,className:m=""})=>{const d=(()=>{const w=[];if(s<=7)for(let i=1;i<=s;i++)w.push(i);else if(t<=3){for(let i=1;i<=5;i++)w.push(i);w.push("..."),w.push(s)}else if(t>=s-2){w.push(1),w.push("...");for(let i=s-4;i<=s;i++)w.push(i)}else{w.push(1),w.push("...");for(let i=t-1;i<=t+1;i++)w.push(i);w.push("..."),w.push(s)}return w})(),u=t===1,h=t===s;return e.jsxs("div",{className:`flex items-center gap-3 ${m}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{htmlFor:"page-size",className:"text-sm text-gray-500 dark:text-gray-400 whitespace-nowrap",children:"Show:"}),e.jsxs("select",{id:"page-size",value:n,onChange:w=>p(Number(w.target.value)),className:"h-8 px-2 text-sm rounded-lg border border-gray-300 bg-white text-gray-700 shadow-sm hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-brand-500 focus:border-brand-500 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700",children:[e.jsx("option",{value:10,children:"10"}),e.jsx("option",{value:20,children:"20"}),e.jsx("option",{value:50,children:"50"})]}),e.jsx("span",{className:"text-sm text-gray-500 dark:text-gray-400 whitespace-nowrap",children:"per page"})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("button",{onClick:()=>!u&&r(t-1),disabled:u,type:"button",className:"flex items-center justify-center w-7 h-7 rounded-lg border border-gray-300 bg-white text-gray-700 shadow-sm hover:bg-gray-50 hover:text-gray-900 disabled:opacity-50 disabled:cursor-not-allowed dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200 transition-colors","aria-label":"Previous page",children:e.jsx(is,{className:"w-4 h-4"})}),e.jsx("div",{className:"flex items-center gap-0.5",children:d.map((w,i)=>{if(w==="...")return e.jsx("span",{className:"flex items-center justify-center w-7 h-7 text-xs font-medium text-gray-700 dark:text-gray-400",children:"..."},`ellipsis-${i}`);const P=w,K=P===t;return e.jsx("button",{className:`flex items-center justify-center w-7 h-7 text-xs font-medium rounded-lg transition-colors ${K?"text-white bg-brand-500 hover:bg-brand-600 shadow-sm":"text-gray-700 hover:bg-brand-500 hover:text-white dark:text-gray-400 dark:hover:text-white dark:hover:bg-brand-500"}`,onClick:()=>r(P),type:"button","aria-label":`Go to page ${P}`,"aria-current":K?"page":void 0,children:P},P)})}),e.jsx("button",{onClick:()=>!h&&r(t+1),disabled:h,type:"button",className:"flex items-center justify-center w-7 h-7 rounded-lg border border-gray-300 bg-white text-gray-700 shadow-sm hover:bg-gray-50 hover:text-gray-900 disabled:opacity-50 disabled:cursor-not-allowed dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200 transition-colors","aria-label":"Next page",children:e.jsx(os,{className:"w-4 h-4"})})]})]})},Xe=Yt()(Zt(t=>({pageSize:10,setPageSize:s=>t({pageSize:s})}),{name:"igny8-page-size"})),Js=Yt()(Zt((t,s)=>({pageColumns:{},setPageColumns:(n,r)=>{t(p=>({pageColumns:{...p.pageColumns,[n]:r}}))},getPageColumns:n=>s().pageColumns[n]||[],toggleColumn:(n,r)=>{t(p=>{const m=p.pageColumns[n]||[],g=m.includes(r)?m.filter(d=>d!==r):[...m,r];return{pageColumns:{...p.pageColumns,[n]:g}}})},resetPageColumns:n=>{t(r=>{const p={...r.pageColumns};return delete p[n],{pageColumns:p}})}}),{name:"igny8-column-visibility",partialize:t=>({pageColumns:t.pageColumns})}));function Nt(t){if(!t)return"";const s=document.createElement("div");return s.innerHTML=t,s.querySelectorAll("script").forEach(p=>p.remove()),s.querySelectorAll("*").forEach(p=>{const m=p.attributes;for(let g=m.length-1;g>=0;g--){const d=m[g];d.name.startsWith("on")&&p.removeAttribute(d.name),(d.name==="href"||d.name==="src")&&d.value.startsWith("javascript:")&&p.removeAttribute(d.name)}}),s.innerHTML}function qt(t){return t?/<[a-z][\s\S]*>/i.test(t):!1}function Ke(t){if(!t)return"";if(typeof t=="object"&&t!==null&&"content"in t){const n=t.content;if(typeof n=="string"&&n.trim().length>0)return Nt(n)}let s='<div class="content-outline">';return t.introduction&&(s+='<div class="outline-intro">',typeof t.introduction=="string"?s+=`<div class="outline-paragraph">${me(t.introduction)}</div>`:typeof t.introduction=="object"&&(t.introduction.hook&&(s+=`<div class="outline-hook"><strong>Hook:</strong> ${me(t.introduction.hook)}</div>`),t.introduction.paragraphs&&Array.isArray(t.introduction.paragraphs)&&t.introduction.paragraphs.forEach((n,r)=>{n.details&&(s+=`<div class="outline-paragraph"><strong>Intro Paragraph ${r+1}:</strong> ${me(n.details)}</div>`)})),s+="</div>"),t.sections&&Array.isArray(t.sections)&&t.sections.forEach(n=>{if(n){if(s+='<div class="outline-section">',n.title){const r=n.title.replace(/^H2:\s*/i,"").trim();r.toLowerCase()==="conclusion"?s+=`<h3 class="section-heading">${me(r)}</h3>`:s+=`<h3 class="section-heading">${me(r)}</h3>`}n.content&&(Array.isArray(n.content)?n.content.forEach(r=>{if(r.title){const p=r.title.replace(/^H3:\s*/i,"").trim();s+=`<h4 class="subsection-heading">${me(p)}</h4>`}r.content&&(s+=`<div class="section-details">${me(String(r.content))}</div>`)}):typeof n.content=="string"&&(s+=`<div class="section-details">${me(n.content)}</div>`)),s+="</div>"}}),t.H2&&(Array.isArray(t.H2)?t.H2.forEach(n=>{if(n.heading||typeof n=="string"){s+='<div class="outline-section">';const r=n.heading||n;s+=`<h3 class="section-heading">${me(r)}</h3>`,n.content_type&&(s+=`<div class="content-type-badge">${me(n.content_type.replace("_"," ").toUpperCase())}</div>`),n.subsections&&Array.isArray(n.subsections)&&n.subsections.forEach(p=>{const m=p.subheading||p.heading||p;s+=`<h4 class="subsection-heading">${me(m)}</h4>`,p.details&&(s+=`<div class="section-details">${me(p.details)}</div>`)}),n.details&&(s+=`<div class="section-details">${me(n.details)}</div>`),s+="</div>"}}):typeof t.H2=="string"?(s+='<div class="outline-section">',s+=`<h3 class="section-heading">${me(t.H2)}</h3>`,s+="</div>"):typeof t.H2=="object"&&Object.entries(t.H2).forEach(([n,r])=>{s+='<div class="outline-section">',s+=`<h3 class="section-heading">${me(r)}</h3>`,s+="</div>"})),t.H3&&!t.H2&&(s+='<div class="outline-section">',typeof t.H3=="string"?s+=`<h4 class="subsection-heading">${me(t.H3)}</h4>`:typeof t.H3=="object"&&Object.entries(t.H3).forEach(([n,r])=>{s+=`<h4 class="subsection-heading">${me(r)}</h4>`}),s+="</div>"),s+="</div>",s}function me(t){const s=document.createElement("div");return s.textContent=t,s.innerHTML}const Xs=({content:t,className:s="",maxHeight:n})=>{const r=a.useMemo(()=>{if(!t)return'<div class="text-gray-400 italic">No content available</div>';if(typeof t=="object"&&t!==null){if(t.H2||t.H3||t.introduction||t.sections)return Ke(t);try{return Object.keys(t).length>0?Ke(t):me(JSON.stringify(t,null,2))}catch{return me(JSON.stringify(t,null,2))}}if(typeof t=="string"){if(t.trim().startsWith("{")||t.trim().startsWith("["))try{const d=JSON.parse(t);if(typeof d=="object"&&d!==null){if(d.content&&typeof d.content=="string"){const u=d.content;if(qt(u)){const h=Nt(u);return h.trim().startsWith("<article")||h.trim().startsWith("<div")?`<div class="normalized-html-content">${h}</div>`:`<div class="normalized-html-content"><article>${h}</article></div>`}if(u.trim().startsWith("{"))try{const h=JSON.parse(u);if(h.H2||h.H3||h.introduction||h.sections)return Ke(h)}catch{}t=u}else if(d.H2||d.H3||d.introduction||d.sections)return Ke(d)}}catch{}try{const d=JSON.parse(t);if(typeof d=="object"&&(d.H2||d.H3||d.introduction||d.sections))return Ke(d)}catch{}if(qt(t)){const d=Nt(t);return d.trim().startsWith("<article")||d.trim().startsWith("<div")?`<div class="normalized-html-content">${d}</div>`:`<div class="normalized-html-content"><article>${d}</article></div>`}const p=t.split(`
`);let m='<div class="content-outline">',g=!1;for(const d of p){const u=d.trim();if(!u){g&&(m+="</ul>",g=!1),m+="<br>";continue}if(u.match(/^[-*]\s+/)){g||(m+='<ul class="outline-list">',g=!0);const h=u.replace(/^[-*]\s+/,"");u.startsWith(" ")||u.startsWith(" ")?m+=`<li class="outline-item nested">${me(h)}</li>`:m+=`<li class="outline-item">${me(h)}</li>`}else if(u.match(/^[-*]\s*H2[:]/i)){g&&(m+="</ul>",g=!1);const h=u.replace(/^[-*]\s*H2[:]\s*/i,"");m+=`<h3 class="section-heading">${me(h)}</h3>`}else if(u.match(/^[-*]\s*H3[:]/i)){g&&(m+="</ul>",g=!1);const h=u.replace(/^[-*]\s*H3[:]\s*/i,"");m+=`<h4 class="subsection-heading">${me(h)}</h4>`}else g&&(m+="</ul>",g=!1),m+=`<p class="outline-paragraph">${me(u)}</p>`}return g&&(m+="</ul>"),m+="</div>",m}return me(String(t))},[t]);return e.jsx("div",{className:`html-content-renderer ${s}`,style:n?{maxHeight:n,overflow:"auto"}:void 0,dangerouslySetInnerHTML:{__html:r}})},Ys=({row:t,contentKey:s,contentLabel:n="Content",colSpan:r,isExpanded:p,defaultExpanded:m=!1,onToggle:g,className:d=""})=>{const[u,h]=a.useState(m),w=p!==void 0?p:u,[i,P]=a.useState("auto"),K=a.useRef(null);let N=t[s],R=null;N&&typeof N=="object"&&N!==null&&"content"in N&&(R={...N},N=N.content),(!N||typeof N=="string"&&N.trim().length===0)&&(N=t.description||t.content_outline||null);const z=N&&(typeof N=="string"?N.trim().length>0:typeof N=="object"&&N!==null&&Object.keys(N).length>0);return a.useEffect(()=>{if(w&&K.current){const I=K.current.scrollHeight;P(I)}else P(0)},[w,N]),!z||!w?null:e.jsx("tr",{className:`toggle-content-row expanded ${d}`,"aria-hidden":!1,children:e.jsx("td",{colSpan:r,className:"px-5 py-0 bg-gray-50 dark:bg-gray-800/50 border-b border-gray-200 dark:border-white/[0.05]",children:e.jsx("div",{ref:K,className:"overflow-hidden bg-white dark:bg-gray-900",style:{maxWidth:"1200px",margin:"auto",padding:"25px",marginTop:"50px"},children:e.jsx("div",{className:"py-4 px-2",children:e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx("div",{className:"text-xs font-semibold uppercase text-gray-500 dark:text-gray-400 tracking-wide",children:n}),t.idea_title&&e.jsxs("div",{className:"mb-2",children:[e.jsx("div",{className:"text-xs font-semibold text-gray-600 dark:text-gray-400 mb-1",children:"Idea:"}),e.jsx("div",{className:"text-sm font-medium text-gray-900 dark:text-white",children:t.idea_title})]}),e.jsx(Zs,{row:t,contentMetadata:R}),e.jsx("div",{className:"html-content-wrapper",children:e.jsx(Xs,{content:N,className:"text-sm text-gray-700 dark:text-gray-300 leading-relaxed"})})]})})})})})},Zs=({row:t,contentMetadata:s})=>{var h,w,i,P,K;const n=t.content_primary_keyword||t.primary_keyword||(s==null?void 0:s.primary_keyword)||((h=s==null?void 0:s.metadata)==null?void 0:h.primary_keyword)||null,r=t.content_secondary_keywords||t.secondary_keywords||(s==null?void 0:s.secondary_keywords)||((w=s==null?void 0:s.metadata)==null?void 0:w.secondary_keywords)||[],p=t.content_tags||t.tags||(s==null?void 0:s.tags)||((i=s==null?void 0:s.metadata)==null?void 0:i.tags)||[],m=t.content_categories||t.categories||(s==null?void 0:s.categories)||((P=s==null?void 0:s.metadata)==null?void 0:P.categories)||[];let g=null;if(t.meta_description&&typeof t.meta_description=="string"?g=t.meta_description:t.content_meta_description&&typeof t.content_meta_description=="string"?g=t.content_meta_description:s!=null&&s.meta_description&&typeof s.meta_description=="string"?g=s.meta_description:(K=s==null?void 0:s.metadata)!=null&&K.meta_description&&typeof s.metadata.meta_description=="string"&&(g=s.metadata.meta_description),g&&g.trim().startsWith("{"))try{const N=JSON.parse(g);N.meta_description&&typeof N.meta_description=="string"?g=N.meta_description:g=N.meta_description||null}catch{}if(!(n||r&&r.length>0||p&&p.length>0||m&&m.length>0||g))return null;const u=(N,R="light")=>{if(!N)return null;const z=Array.isArray(N)?N:[N];return z.length===0?null:e.jsx("div",{className:"flex flex-wrap gap-1",children:z.map((I,Z)=>e.jsx(Ue,{color:R,size:"sm",variant:"light",children:I},`${I}-${Z}`))})};return e.jsxs("div",{className:"space-y-2",children:[n&&e.jsxs("div",{className:"flex items-start gap-2 text-sm text-gray-700 dark:text-gray-300",children:[e.jsx("span",{className:"font-medium text-gray-600 dark:text-gray-400",children:"Primary Keyword:"}),e.jsx(Ue,{color:"info",size:"sm",variant:"light",children:n})]}),(()=>{const N=u(r);return N?e.jsxs("div",{className:"flex items-start gap-2 text-sm text-gray-700 dark:text-gray-300",children:[e.jsx("span",{className:"font-medium text-gray-600 dark:text-gray-400",children:"Secondary Keywords:"}),N]}):null})(),(()=>{const N=u(p);return N?e.jsxs("div",{className:"flex items-start gap-2 text-sm text-gray-700 dark:text-gray-300",children:[e.jsx("span",{className:"font-medium text-gray-600 dark:text-gray-400",children:"Tags:"}),N]}):null})(),(()=>{const N=u(m);return N?e.jsxs("div",{className:"flex items-start gap-2 text-sm text-gray-700 dark:text-gray-300",children:[e.jsx("span",{className:"font-medium text-gray-600 dark:text-gray-400",children:"Categories:"}),N]}):null})(),g&&e.jsxs("div",{className:"rounded-lg bg-gray-50 dark:bg-gray-800/50 p-3 text-xs text-gray-600 dark:text-gray-400",children:[e.jsx("span",{className:"font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400 block mb-1",children:"Meta Description"}),g]})]})},er=({isExpanded:t,onClick:s,hasContent:n,className:r=""})=>n?e.jsx("button",{type:"button",onClick:s,className:`inline-flex items-center justify-center w-8 h-8 rounded-lg transition-all duration-200 ${t?"text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/20":"text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800"} ${r}`,"aria-label":t?"Collapse content":"Expand content","aria-expanded":t,children:e.jsx(ct,{className:`w-4 h-4 transition-transform duration-200 ${t?"rotate-180":""}`})}):e.jsx("span",{className:`inline-flex items-center justify-center w-8 h-8 text-gray-300 dark:text-gray-600 ${r}`,children:e.jsx(cs,{className:"w-4 h-4"})});function tr({columns:t,visibleColumns:s,onToggleColumn:n,className:r=""}){const[p,m]=a.useState(!1),g=a.useRef(null),d=a.useRef(null);a.useEffect(()=>{const w=i=>{g.current&&!g.current.contains(i.target)&&d.current&&!d.current.contains(i.target)&&m(!1)};if(p)return document.addEventListener("mousedown",w),()=>{document.removeEventListener("mousedown",w)}},[p]);const u=s.size,h=t.length;return e.jsxs("div",{className:`relative ${r}`,children:[e.jsxs("button",{ref:d,type:"button",onClick:()=>m(!p),className:"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 dark:bg-gray-800 dark:text-gray-300 dark:border-gray-700 dark:hover:bg-gray-700 transition-colors",children:[e.jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})}),e.jsx("span",{children:"Columns"}),e.jsxs("span",{className:"text-xs text-gray-500 dark:text-gray-400",children:["(",u,"/",h,")"]}),e.jsx(ct,{className:`w-4 h-4 transition-transform ${p?"rotate-180":""}`})]}),p&&e.jsx("div",{ref:g,className:"absolute right-0 mt-2 w-56 rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-700 dark:bg-gray-800 z-50 max-h-96 overflow-y-auto",children:e.jsxs("div",{className:"p-2",children:[e.jsx("div",{className:"px-3 py-2 text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wide border-b border-gray-200 dark:border-gray-700 mb-1",children:"Show Columns"}),e.jsx("div",{className:"space-y-1",children:t.map(w=>{const i=s.has(w.key);return e.jsxs("label",{className:"flex items-center gap-2 px-3 py-2 rounded-md hover:bg-gray-50 dark:hover:bg-gray-700 cursor-pointer",children:[e.jsx(St,{checked:i,onChange:()=>{n(w.key)}}),e.jsx("span",{className:"text-sm text-gray-700 dark:text-gray-300 flex-1",children:w.label})]},w.key)})}),e.jsx("div",{className:"mt-2 pt-2 border-t border-gray-200 dark:border-gray-700",children:e.jsx("button",{type:"button",onClick:()=>{t.forEach(w=>{s.has(w.key)||n(w.key)})},className:"w-full px-3 py-1.5 text-xs font-medium text-brand-600 hover:text-brand-700 hover:bg-brand-50 dark:text-brand-400 dark:hover:bg-brand-500/10 rounded-md transition-colors",children:"Show All"})})]})})]})}function dt({columns:t,data:s,loading:n=!1,showContent:r=!0,filters:p=[],filterValues:m={},onFilterChange:g,onFilterReset:d,renderFilters:u,onEdit:h,onCreate:w,createLabel:i="+ Add",onCreateIcon:P,onExportCSV:K,onExportIcon:N,onImport:R,onImportIcon:z,headerMetrics:I=[],selectionLabel:Z="items",pagination:G,selection:y,sorting:O,onDelete:V,onBulkDelete:oe,onBulkExport:T,onBulkUpdateStatus:X,onBulkAction:C,onRowAction:v,onExport:H,getItemDisplayName:M=x=>x.name||x.keyword||x.title||String(x.id),className:Y=""}){const x=as(),[E,U]=a.useState(!1),[B,F]=a.useState(new Map),D=_e.useRef(new Map),ce=_e.useRef(null),se=Ls(x.pathname),ee=Ds(x.pathname),c=zs(x.pathname),f=(c==null?void 0:c.rowActions)||[],o=(c==null?void 0:c.bulkActions)||[],[k,A]=a.useState((y==null?void 0:y.selectedIds)||[]),[Q,he]=a.useState(new Set),[te,de]=a.useState({isOpen:!1,items:[],isBulk:!1,isLoading:!1}),[ne,pe]=a.useState({isOpen:!1,itemCount:0,isLoading:!1}),[ie,j]=a.useState({isOpen:!1,itemCount:0,isLoading:!1}),{setMetrics:W}=Vs(),q=Ge(),{pageSize:ge,setPageSize:ke}=Xe(),{pageColumns:Ce,setPageColumns:Ee,getPageColumns:$}=Js(),re=a.useMemo(()=>{const l=$(x.pathname);if(l.length>0){const b=new Set(l),_=t.filter(L=>b.has(L.key));if(_.length>0){const L=t.filter(ae=>!b.has(ae.key)&&ae.defaultVisible!==!1).map(ae=>ae.key);return new Set([...Array.from(_.map(ae=>ae.key)),...L])}}return new Set(t.filter(b=>b.defaultVisible!==!1).map(b=>b.key))},[t,x.pathname,$]),[le,ue]=a.useState(re);a.useEffect(()=>{const l=$(x.pathname);if(l.length>0){const _=new Set(l),L=t.filter(ae=>_.has(ae.key));if(L.length>0){const ae=t.filter(fe=>!_.has(fe.key)&&fe.defaultVisible!==!1).map(fe=>fe.key),J=new Set([...Array.from(L.map(fe=>fe.key)),...ae]);ue(J),Ee(x.pathname,Array.from(J));return}}const b=new Set(t.filter(_=>_.defaultVisible!==!1).map(_=>_.key));ue(b),Ee(x.pathname,Array.from(b))},[t,x.pathname,$,Ee]),a.useEffect(()=>{Ee(x.pathname,Array.from(le))},[le,x.pathname,Ee]);const xe=a.useMemo(()=>t.filter(l=>le.has(l.key)),[t,le]),Se=l=>{ue(b=>{const _=new Set(b);return _.has(l)?_.delete(l):_.add(l),_})},Te=y!=null&&y.selectedIds?JSON.stringify(y.selectedIds):"";a.useEffect(()=>{y!=null&&y.selectedIds&&A(y.selectedIds)},[Te]);const je=l=>{!V||!se||de({isOpen:!0,items:[l],isBulk:!1,isLoading:!1})},ye=l=>{if(!oe||!se)return;const b=s.filter(_=>l.includes(String(_.id)));de({isOpen:!0,items:b,isBulk:!0,isLoading:!1})},ut=async()=>{if(!(te.items.length===0||!se)){de(l=>({...l,isLoading:!0}));try{if(te.isBulk){if(oe){const l=te.items.map(L=>L.id),b=await oe(l),_=(b==null?void 0:b.deleted_count)||te.items.length;q.success(`${_} ${se.itemNamePlural} deleted successfully`)}}else V&&(await V(te.items[0].id),q.success(`${se.itemNameSingular.charAt(0).toUpperCase()+se.itemNameSingular.slice(1)} deleted successfully`));de({isOpen:!1,items:[],isBulk:!1,isLoading:!1}),y&&y.onSelectionChange([])}catch(l){q.error(`Failed to delete: ${l.message}`),de(b=>({...b,isLoading:!1}))}}},Ye=async(l,b)=>{var _;F(L=>{const ae=new Map(L);return ae.set(b.id||b,!1),ae}),l==="edit"&&h?h(b):l==="delete"&&V&&se?je(b):l==="export"&&H?await H(b):v?v(l,b).catch(L=>{q.error(`Action failed: ${L.message}`)}):C?C(l,[((_=b.id)==null?void 0:_.toString())||String(b)]):q.info(`Action "${l}" not yet implemented`)},Ze=(l,b)=>{if(!y)return;const _=y.selectedIds.length>0?y.selectedIds:b;if(l==="delete"&&oe&&se)ye(_);else if(l==="export"&&T&&ee){const L=_.length;pe({isOpen:!0,itemCount:L,isLoading:!1})}else l==="update_status"&&X&&ee?j({isOpen:!0,itemCount:_.length,isLoading:!1}):C?C(l,_).catch(L=>{q.error(`Bulk action failed: ${L.message}`)}):q.info(`Bulk action "${l}" not yet implemented`);U(!1)},mt=async()=>{if(!T||!y)return;const l=y.selectedIds.length>0?y.selectedIds:k;pe(b=>({...b,isLoading:!0}));try{await T(l),q.success("Export successful"),pe({isOpen:!1,itemCount:0,isLoading:!1}),y.onSelectionChange([])}catch(b){q.error(`Export failed: ${b.message}`),pe(_=>({..._,isLoading:!1}))}},gt=async l=>{if(!(!X||!y)){j(b=>({...b,isLoading:!0}));try{await X(y.selectedIds,l),q.success("Status updated successfully"),j({isOpen:!1,itemCount:0,isLoading:!1}),y.onSelectionChange([])}catch(b){q.error(`Failed to update status: ${b.message}`),j(_=>({..._,isLoading:!1}))}}},Me=a.useRef(""),Re=a.useRef(!1),Oe=a.useMemo(()=>{if(!I||I.length===0)return"";try{return I.map(l=>`${l.label}:${String(l.value)}`).join("|")}catch{return""}},[I]);a.useEffect(()=>{if(Oe!==Me.current)return Oe?(W(I),Re.current=!0,Me.current=Oe):Re.current&&(W([]),Re.current=!1,Me.current=""),()=>{Re.current&&(W([]),Re.current=!1)}},[Oe]);const Ne=(u||p.length>0)&&Object.values(m).some(l=>l===""||l===null||l===void 0?!1:typeof l=="object"&&("min"in l||"max"in l)?l.min!==""&&l.min!==null&&l.min!==void 0||l.max!==""&&l.max!==null&&l.max!==void 0:!0),ft=l=>{if(!l.sortable||!O)return;const b=l.sortField||l.key,_=O.sortBy===b?O.sortDirection:null;let L="asc";if(_==="asc")L="desc";else if(_==="desc"){O.onSort("created_at","desc");return}O.onSort(b,L)},et=l=>{if(!l.sortable||!O)return null;const b=l.sortField||l.key;return O.sortBy!==b?e.jsx("span",{className:"ml-1 cursor-pointer text-gray-400 hover:text-gray-600 dark:hover:text-gray-300",children:"⇅"}):O.sortDirection==="asc"?e.jsx("span",{className:"ml-1 cursor-pointer text-brand-500",children:"↑"}):e.jsx("span",{className:"ml-1 cursor-pointer text-brand-500",children:"↓"})},pt=l=>{if(l){const b=s.filter(_=>!_.isAdded).map(_=>{var L;return((L=_.id)==null?void 0:L.toString())||""}).filter(_=>_!=="");A(b),y==null||y.onSelectionChange(b)}else A([]),y==null||y.onSelectionChange([])},S=(l,b)=>{const _=s.find(ae=>String(ae.id)===l);if(_&&_.isAdded)return;const L=b?[...k,l]:k.filter(ae=>ae!==l);A(L),y==null||y.onSelectionChange(L)};return e.jsxs("div",{className:Y,children:[(u||p.length>0)&&e.jsx("div",{className:"flex justify-center mb-4",children:e.jsx("div",{className:"w-[75%] igny8-filter-bar p-3 rounded-lg bg-transparent",style:{boxShadow:"0 2px 6px 3px rgba(0, 0, 0, 0.08)"},children:e.jsxs("div",{className:"flex flex-nowrap gap-3 items-center justify-between w-full",children:[e.jsx("div",{className:"flex flex-nowrap gap-3 items-center flex-1 min-w-0 w-full",children:u?e.jsx("div",{className:"flex flex-nowrap gap-3 items-center flex-1 min-w-0 w-full",children:u}):e.jsx(e.Fragment,{children:p.map(l=>{if(l.type==="custom"&&l.customRender)return e.jsx(_e.Fragment,{children:l.customRender()},l.key);if(l.type==="text")return e.jsx(ds,{type:"text",placeholder:l.placeholder||`Search ${l.label.toLowerCase()}...`,value:m[l.key]||"",onChange:b=>{g==null||g(l.key,b.target.value)},className:"flex-1 min-w-[200px] h-9"},l.key);if(l.type==="select"){const b=m[l.key]||"";return e.jsx(ot,{options:l.options||[],placeholder:l.label,value:b,onChange:_=>{const L=_==null?"":String(_);g==null||g(l.key,L)},className:l.className||"flex-1 min-w-[140px]"},l.key)}return null})})}),Ne&&d&&e.jsx(we,{variant:"secondary",size:"sm",onClick:d,className:"flex-shrink-0",children:"Clear Filters"})]})})}),e.jsxs("div",{className:"flex justify-between items-center mb-4",children:[o.length>0&&e.jsx("div",{className:"inline-block",children:o.length===1?e.jsxs(we,{size:"md",onClick:()=>{k.length>0&&Ze(o[0].key,k)},disabled:k.length===0,variant:o[0].variant==="success"?"success":(o[0].variant==="danger","primary"),startIcon:o[0].icon,className:k.length===0?"opacity-50 cursor-not-allowed":"",children:[o[0].label,k.length>0&&e.jsx("span",{className:"ml-2 inline-flex items-center justify-center px-2 py-0.5 text-xs font-medium rounded-full bg-white/20 text-white",children:k.length})]}):e.jsxs(e.Fragment,{children:[e.jsxs(we,{ref:ce,size:"md",onClick:()=>k.length>0&&U(!E),disabled:k.length===0,className:`dropdown-toggle ${k.length===0?"opacity-50 cursor-not-allowed":""}`,endIcon:e.jsx(ct,{className:"w-4 h-4"}),children:["Bulk Actions",k.length>0&&e.jsx("span",{className:"ml-2 inline-flex items-center justify-center px-2 py-0.5 text-xs font-medium rounded-full bg-blue-100 text-blue-800 dark:bg-blue-500/20 dark:text-blue-300",children:k.length})]}),e.jsx(Kt,{isOpen:E&&k.length>0,onClose:()=>U(!1),anchorRef:ce,placement:"bottom-left",className:"w-48 p-2",children:o.map((l,b)=>{const _=l.key==="delete",L=_&&b>0;return e.jsxs(_e.Fragment,{children:[L&&e.jsx("div",{className:"my-2 border-t border-gray-200 dark:border-gray-800"}),e.jsxs(Ut,{onItemClick:()=>{Ze(l.key,k)},className:`flex items-center gap-3 px-3 py-2 font-medium rounded-lg text-sm text-left ${_?"text-error-500 hover:bg-error-50 hover:text-error-600 dark:text-error-400 dark:hover:bg-error-500/15 dark:hover:text-error-300":"text-gray-700 hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-white/5 dark:hover:text-gray-300"}`,children:[l.icon&&e.jsx("span",{className:"flex-shrink-0 w-5 h-5",children:l.icon}),e.jsx("span",{className:"text-left",children:l.label})]})]},l.key)})})]})}),e.jsxs("div",{className:"flex gap-2 items-center",children:[e.jsx(tr,{columns:t.map(l=>({key:l.key,label:l.label,defaultVisible:l.defaultVisible!==!1})),visibleColumns:le,onToggleColumn:Se}),K&&e.jsx(we,{variant:"secondary",size:"md",endIcon:N,onClick:K,children:"Export CSV"}),R&&e.jsx(we,{variant:"secondary",size:"md",endIcon:z,onClick:R,children:"Import"}),w&&e.jsx(we,{variant:"primary",size:"md",endIcon:P,onClick:w,children:i})]})]}),e.jsx("div",{className:`rounded-xl border border-gray-200 bg-white dark:border-white/[0.05] dark:bg-white/[0.03] igny8-table-container ${r?"loaded":"loading"}`,style:{overflowX:"auto",overflowY:"visible"},children:e.jsx("div",{className:"igny8-table-wrapper",style:{overflow:"visible"},children:e.jsxs(Us,{className:"igny8-table-compact igny8-table-smooth",children:[e.jsx(qs,{className:"border-b border-gray-100 dark:border-white/[0.05]",children:e.jsxs(vt,{children:[y&&e.jsx(De,{isHeader:!0,className:"px-5 py-3 font-medium text-gray-500 text-start text-theme-xs dark:text-gray-400 w-12",children:r&&e.jsx(St,{checked:(()=>{const l=s.filter(b=>!b.isAdded);return l.length>0&&k.length===l.length})(),onChange:pt,id:"select-all"})}),xe.map((l,b)=>{const _=b===xe.length-1;return e.jsx(De,{isHeader:!0,className:`px-5 py-3 font-medium text-gray-500 text-${l.align||"start"} text-theme-xs dark:text-gray-400 ${l.sortable?"cursor-pointer hover:text-gray-700 dark:hover:text-gray-300":""} ${_&&f.length>0?"pr-16":""}`,children:l.sortable?e.jsxs("div",{onClick:()=>ft(l),className:"flex items-center",children:[l.label,et(l)]}):e.jsxs(e.Fragment,{children:[l.label,et(l)]})},l.key)})]})}),e.jsx(Hs,{className:"divide-y divide-gray-100 dark:divide-white/[0.05] igny8-table-body",children:r?s.length===0?null:s.map((l,b)=>{var Lt;const _=l.id||b,L=Q.has(_),ae=t.find(ve=>ve.toggleable),J=(ae==null?void 0:ae.toggleContentKey)||(ae==null?void 0:ae.key),fe=(ae==null?void 0:ae.toggleContentLabel)||"Content",Fe=J?l[J]:null,tt=Fe&&(typeof Fe=="string"?Fe.trim().length>0:typeof Fe=="object"&&Fe!==null&&Object.keys(Fe).length>0),ts=(y?1:0)+xe.length,Ot=(ve,Ae)=>{he(ze=>{const Ie=new Set(ze),Ve=Ae??_;return ve?Ie.add(Ve):Ie.delete(Ve),Ie})},Ft=!!l.isAdded;return e.jsxs(_e.Fragment,{children:[e.jsxs(vt,{className:`igny8-data-row ${Ft?"bg-blue-50 dark:bg-blue-500/10":""}`,children:[y&&e.jsx(De,{className:"px-5 py-4 text-start",children:e.jsx(St,{checked:k.includes(((Lt=l.id)==null?void 0:Lt.toString())||""),onChange:ve=>{var Ae;return S(((Ae=l.id)==null?void 0:Ae.toString())||"",ve)},id:`checkbox-${l.id}`,disabled:Ft})}),xe.map((ve,Ae)=>{var Ve;const ze=Ae===xe.length-1,Ie=l.id||b;if(ze&&f.length>0&&!D.current.has(Ie)){const Be=_e.createRef();D.current.set(Ie,Be)}return e.jsxs(De,{className:`px-5 py-4 text-${ve.align||"start"} text-gray-800 dark:text-white/90 ${ze&&f.length>0?"relative pr-16":""}`,children:[e.jsxs("div",{className:`flex items-center ${ve.toggleable&&tt?"justify-between w-full":""} gap-2`,children:[e.jsx("div",{className:"flex-1",children:ve.render?ve.render(l[ve.key],l):e.jsx("span",{children:((Ve=l[ve.key])==null?void 0:Ve.toString())||"-"})}),ve.toggleable&&tt&&e.jsx("div",{onClick:Be=>Be.stopPropagation(),children:e.jsx(er,{isExpanded:L,onClick:()=>{Ot(!L,_)},hasContent:tt})})]}),ze&&f.length>0&&(()=>{const Be=!!l.isAdded;if(f.length===1){const be=f[0];return Be?e.jsx("div",{className:"absolute right-2 top-1/2 -translate-y-1/2 z-10",children:e.jsx("span",{className:"text-sm font-medium text-blue-light-500 dark:text-blue-light-400",children:"Added"})}):e.jsx("div",{className:"absolute right-2 top-1/2 -translate-y-1/2 z-10",children:e.jsxs("button",{type:"button",onClick:$e=>{$e.stopPropagation(),Ye(be.key,l)},className:"flex items-center gap-1 text-sm font-medium text-success-500 hover:text-success-600 dark:text-success-400 dark:hover:text-success-300 transition-colors cursor-pointer",children:[be.label,e.jsx("span",{className:"inline-flex items-center",children:e.jsx(He,{className:"w-4 h-4 fill-current"})})]})})}const ht=D.current.get(Ie);if(!ht)return null;const ss=B.get(Ie)||!1;return e.jsxs(e.Fragment,{children:[e.jsx("button",{ref:ht,type:"button",onClick:be=>{be.stopPropagation(),F($e=>{const Pe=new Map($e);return Pe.forEach((yt,st)=>{st!==Ie&&Pe.set(st,!1)}),Pe.set(Ie,!Pe.get(Ie)),Pe})},className:"absolute right-2 top-1/2 -translate-y-1/2 inline-flex items-center justify-center w-8 h-8 rounded-lg transition-colors text-gray-500 hover:text-gray-700 hover:bg-gray-100 dark:text-gray-400 dark:hover:text-gray-300 dark:hover:bg-gray-800 dropdown-toggle z-10",title:"Actions",children:e.jsx(us,{className:"w-5 h-5"})}),e.jsx(Kt,{isOpen:ss,onClose:()=>{F(be=>{const $e=new Map(be);return $e.set(Ie,!1),$e})},anchorRef:ht,placement:"right",className:"w-48 p-2",children:f.map(be=>{const $e=be.key==="edit",Pe=be.key==="delete",yt=be.key==="export",st=()=>{var Dt;if(!be.icon)return null;const rt=be.icon,at=((Dt=rt.props)==null?void 0:Dt.className)||"",xt=at.includes("w-")?"":"w-5 h-5 ";return $e?_e.cloneElement(rt,{className:`${xt}text-blue-light-500 ${at}`.trim()}):Pe?_e.cloneElement(rt,{className:`${xt}text-error-500 ${at}`.trim()}):yt?_e.cloneElement(rt,{className:`${xt}text-gray-600 dark:text-gray-400 ${at}`.trim()}):be.icon};return e.jsxs(_e.Fragment,{children:[e.jsxs(Ut,{onItemClick:()=>Ye(be.key,l),className:`flex items-center gap-3 px-3 py-2 font-medium rounded-lg text-sm text-left ${$e?"text-blue-light-500 hover:bg-blue-light-50 hover:text-blue-light-600 dark:text-blue-light-400 dark:hover:bg-blue-light-500/15 dark:hover:text-blue-light-300":Pe?"text-error-500 hover:bg-error-50 hover:text-error-600 dark:text-error-400 dark:hover:bg-error-500/15 dark:hover:text-error-300":"text-gray-700 hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-white/5 dark:hover:text-gray-300"}`,children:[e.jsx("span",{className:"flex-shrink-0 w-5 h-5",children:st()}),e.jsx("span",{className:"text-left",children:be.label})]}),yt&&e.jsx("div",{className:"my-2 border-t border-gray-200 dark:border-gray-800"})]},be.key)})})]})})()]},ve.key)})]}),ae&&tt&&e.jsx(Ys,{row:l,contentKey:J||"",contentLabel:fe,colSpan:ts,isExpanded:L,onToggle:Ot})]},l.id||b)}):Array.from({length:10}).map((l,b)=>e.jsxs(vt,{className:"igny8-skeleton-row",children:[y&&e.jsx(De,{children:e.jsx("div",{className:"h-4 bg-gray-200 dark:bg-gray-700 rounded animate-pulse"})}),xe.map((_,L)=>e.jsx(De,{children:e.jsx("div",{className:"h-4 bg-gray-200 dark:bg-gray-700 rounded animate-pulse"})},L))]},`skeleton-${b}`))})]})})}),se&&e.jsx(Ts,{isOpen:te.isOpen,onClose:()=>de({isOpen:!1,items:[],isBulk:!1,isLoading:!1}),onConfirm:ut,title:se.title,message:te.isBulk?se.multipleItemsMessage(te.items.length):se.singleItemMessage,variant:"danger",isConfirmation:!0,confirmText:"Delete",cancelText:"Cancel",isLoading:te.isLoading,itemsList:te.items.map(l=>M(l))}),ee&&e.jsx(Ws,{isOpen:ne.isOpen,onClose:()=>pe({isOpen:!1,itemCount:0,isLoading:!1}),onConfirm:mt,title:ee.export.title,message:ee.export.message(ne.itemCount),confirmText:ee.export.confirmText,isLoading:ne.isLoading}),ee&&e.jsx(Gs,{isOpen:ie.isOpen,onClose:()=>j({isOpen:!1,itemCount:0,isLoading:!1}),onConfirm:gt,title:ee.updateStatus.title,message:ee.updateStatus.message(ie.itemCount),confirmText:ee.updateStatus.confirmText,statusOptions:ee.updateStatus.statusOptions,isLoading:ie.isLoading}),G&&e.jsx("div",{className:"mt-6 border-t border-gray-200 dark:border-gray-800 pt-6",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"text-sm text-gray-500 dark:text-gray-400",children:["Showing ",s.length," of ",G.totalCount," ",Z||"items"]}),e.jsx(Qs,{currentPage:G.currentPage,totalPages:G.totalPages,pageSize:ge,onPageChange:l=>{G.onPageChange(l)},onPageSizeChange:l=>{ke(l),G.onPageChange(1)}})]})})]})}function Mt({isOpen:t,onClose:s,onSubmit:n,title:r,fields:p=[],submitLabel:m="Create",cancelLabel:g="Cancel",isLoading:d=!1,className:u="max-w-2xl",customFooter:h,customBody:w}){return e.jsx(Je,{isOpen:t,onClose:s,className:u,children:e.jsxs("div",{className:"p-6",children:[e.jsx("h3",{className:"text-lg font-semibold mb-6 text-gray-800 dark:text-white",children:r}),e.jsxs("form",{onSubmit:i=>{i.preventDefault(),n()},className:"space-y-4",children:[w||e.jsxs(e.Fragment,{children:[p.find(i=>i.key==="keyword")&&e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:[p.find(i=>i.key==="keyword").label,p.find(i=>i.key==="keyword").required&&e.jsx("span",{className:"text-error-500 ml-1",children:"*"})]}),e.jsx("input",{type:"text",className:"h-9 w-full rounded-lg border border-gray-300 bg-transparent px-3 py-2 text-sm shadow-theme-xs text-gray-800 placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800",value:p.find(i=>i.key==="keyword").value||"",onChange:i=>p.find(P=>P.key==="keyword").onChange(i.target.value),placeholder:p.find(i=>i.key==="keyword").placeholder,required:p.find(i=>i.key==="keyword").required})]}),(p.find(i=>i.key==="volume")||p.find(i=>i.key==="difficulty"))&&e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[p.find(i=>i.key==="volume")&&e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:[p.find(i=>i.key==="volume").label,p.find(i=>i.key==="volume").required&&e.jsx("span",{className:"text-error-500 ml-1",children:"*"})]}),e.jsx("input",{type:"number",className:"h-9 w-full rounded-lg border border-gray-300 bg-transparent px-3 py-2 text-sm shadow-theme-xs text-gray-800 placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800",value:p.find(i=>i.key==="volume").value||"",onChange:i=>{const P=i.target.value===""?"":parseInt(i.target.value)||0;p.find(K=>K.key==="volume").onChange(P)},placeholder:p.find(i=>i.key==="volume").placeholder,required:p.find(i=>i.key==="volume").required})]}),p.find(i=>i.key==="difficulty")&&(()=>{const i=p.find(P=>P.key==="difficulty");return e.jsxs("div",{children:[e.jsxs(it,{className:"mb-2",children:[i.label,i.required&&e.jsx("span",{className:"text-error-500 ml-1",children:"*"})]}),i.type==="select"?e.jsx(ot,{options:i.options||[],placeholder:i.placeholder||i.label,value:i.value||"",onChange:P=>i.onChange(P),className:"w-full"}):e.jsx("input",{type:"number",className:"h-9 w-full rounded-lg border border-gray-300 bg-transparent px-3 py-2 text-sm shadow-theme-xs text-gray-800 placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800",value:i.value||"",onChange:P=>{const K=P.target.value===""?"":parseInt(P.target.value)||0;i.onChange(K)},placeholder:i.placeholder,required:i.required,min:i.min,max:i.max})]})})()]}),p.filter(i=>i.key!=="keyword"&&i.key!=="volume"&&i.key!=="difficulty").map(i=>i.type==="select"?e.jsxs("div",{children:[e.jsxs(it,{className:"mb-2",children:[i.label,i.required&&e.jsx("span",{className:"text-error-500 ml-1",children:"*"})]}),e.jsx(ot,{options:i.options||[],placeholder:i.placeholder||i.label,value:i.value||"",onChange:P=>i.onChange(P),className:"w-full"})]},i.key):i.type==="textarea"?e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:[i.label,i.required&&e.jsx("span",{className:"text-error-500 ml-1",children:"*"})]}),e.jsx("textarea",{rows:i.rows||4,className:"w-full rounded-lg border border-gray-300 bg-transparent px-3 py-2 text-sm shadow-theme-xs text-gray-800 placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800",value:i.value||"",onChange:P=>i.onChange(P.target.value),placeholder:i.placeholder,required:i.required})]},i.key):e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:[i.label,i.required&&e.jsx("span",{className:"text-error-500 ml-1",children:"*"})]}),e.jsx("input",{type:i.type,className:"h-9 w-full rounded-lg border border-gray-300 bg-transparent px-3 py-2 text-sm shadow-theme-xs text-gray-800 placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800",value:i.value||"",onChange:P=>i.onChange(P.target.value),placeholder:i.placeholder,required:i.required,min:i.min,max:i.max})]},i.key))]}),h||e.jsxs("div",{className:"flex justify-end gap-3 pt-4",children:[e.jsx(we,{type:"button",variant:"outline",onClick:s,disabled:d,children:g}),e.jsx(we,{type:"submit",variant:"primary",disabled:d,children:d?"Processing...":m})]})]})]})})}const sr=(t,s,n)=>{const r=(t==null?void 0:t.toLowerCase())||(s==null?void 0:s.toLowerCase())||"",p=(m,g)=>{var d;for(const u of g){const h=(d=u.message)==null?void 0:d.match(m);if(h&&h[1])return h[1]}return""};if(r.includes("cluster")){const m=p(/(\d+)\s+keyword/i,n||[]),g=p(/(\d+)\s+cluster/i,n||[]);return m&&g?`Clustering complete
${m} keyword${m!=="1"?"s":""} mapped and grouped into ${g} cluster${g!=="1"?"s":""}`:g?`Clustering complete
${g} cluster${g!=="1"?"s":""} created`:m?`Clustering complete
${m} keyword${m!=="1"?"s":""} mapped and grouped into clusters`:`Clustering complete
Keywords mapped and grouped into clusters`}if(r.includes("idea"))return p(/(\d+)\s+idea/i,n||[]),"Content ideas & outlines created successfully";if(r.includes("content")){const m=p(/(\d+)\s+task/i,n||[]),g=p(/(\d+)\s+article/i,n||[]);return g?`Article${g!=="1"?"s":""} drafted successfully — ${g} article${g!=="1"?"s":""} generated.`:m?`Article${m!=="1"?"s":""} drafted successfully — ${m} task${m!=="1"?"s":""} completed.`:"Article drafted successfully."}if(r.includes("image")&&r.includes("from")){const m=p(/(\d+)\s+image/i,n||[]);return m?`${m} image${m!=="1"?"s":""} generated successfully`:"Images generated successfully"}else if(r.includes("image")&&(r.includes("prompt")||r.includes("extract"))){const m=n==null?void 0:n.find(u=>u.stepName==="SAVE");if(m!=null&&m.message){const u=m.message.match(/Assigning (\d+)\s+Prompts/i);if(u){const h=parseInt(u[1],10),w=h>1?h-1:0;return w>0?`Featured Image and ${w} Inarticle Image Prompts ready for image generation`:"Featured Image Prompt ready for image generation"}}const g=n==null?void 0:n.find(u=>u.stepName==="PREP");if(g!=null&&g.message){const u=g.message.match(/Mapping Content for (\d+)\s+Image Prompts/i);if(u&&u[1]){const h=parseInt(u[1],10),w=h>1?h-1:0;return w>0?`Featured Image and ${w} Inarticle Image Prompts ready for image generation`:"Featured Image Prompt ready for image generation"}}const d=p(/(\d+)\s+prompt/i,n||[]);if(d){const u=parseInt(d,10),h=u>1?u-1:0;return h>0?`Featured Image and ${h} Inarticle Image Prompts ready for image generation`:"Featured Image Prompt ready for image generation"}return"Featured Image and X Inarticle Image Prompts ready for image generation"}return"Task completed successfully."},rr=(t,s)=>{const n=(t==null?void 0:t.toLowerCase())||(s==null?void 0:s.toLowerCase())||"";return n.includes("cluster")?[{phase:"INIT",label:"Validating keywords"},{phase:"PREP",label:"Loading keyword data"},{phase:"AI_CALL",label:"Generating clusters with Igny8 Semantic SEO Model"},{phase:"PARSE",label:"Organizing clusters"},{phase:"SAVE",label:"Saving clusters"}]:n.includes("idea")?[{phase:"INIT",label:"Verifying cluster integrity"},{phase:"PREP",label:"Loading cluster keywords"},{phase:"AI_CALL",label:"Generating ideas with Igny8 Semantic AI"},{phase:"PARSE",label:"High-opportunity ideas generated"},{phase:"SAVE",label:"Content Outline for Ideas generated"}]:n.includes("content")?[{phase:"INIT",label:"Validating task"},{phase:"PREP",label:"Preparing content idea"},{phase:"AI_CALL",label:"Writing article with Igny8 Semantic AI"},{phase:"PARSE",label:"Formatting content"},{phase:"SAVE",label:"Saving article"}]:n.includes("image")&&n.includes("from")?[{phase:"INIT",label:"Validating image prompts"},{phase:"PREP",label:"Preparing image generation queue"},{phase:"AI_CALL",label:"Generating images with AI"},{phase:"PARSE",label:"Processing image URLs"},{phase:"SAVE",label:"Saving image URLs"}]:n.includes("image")&&(n.includes("prompt")||n.includes("extract"))?[{phase:"INIT",label:"Checking content and image slots"},{phase:"PREP",label:"Mapping Content for X Image Prompts"},{phase:"AI_CALL",label:"Writing Featured Image Prompts"},{phase:"PARSE",label:"Writing X Inarticle Image Prompts"},{phase:"SAVE",label:"Assigning Prompts to Dedicated Slots"}]:[{phase:"INIT",label:"Initializing..."},{phase:"PREP",label:"Preparing..."},{phase:"AI_CALL",label:"Processing with Igny8 Semantic AI..."},{phase:"PARSE",label:"Processing results..."},{phase:"SAVE",label:"Saving results..."}]},ar=(t,s)=>t.length>0?t[t.length-1].stepName||"":s<10?"INIT":s<25?"PREP":s<70?"AI_CALL":s<85?"PARSE":s<100?"SAVE":"DONE",nr=(t,s,n)=>{const r=["INIT","PREP","AI_CALL","PARSE","SAVE","DONE"],p=r.indexOf(t);return r.indexOf(s)>p?!0:n.some(g=>g.stepName===t&&g.status==="success")};function Rt({isOpen:t,title:s,percentage:n,status:r,message:p,onClose:m,onCancel:g,taskId:d,functionId:u,stepLogs:h=[]}){const[w,i]=_e.useState(new Set),P=a.useRef(new Map),K=a.useRef(new Set),N=a.useRef(""),R=a.useRef(""),z=a.useRef(0);a.useEffect(()=>{K.current=w},[w]);const I=w.size,Z=a.useMemo(()=>rr(u,s),[u,s]),G=a.useMemo(()=>ar(h,n),[h,n]),y=a.useMemo(()=>JSON.stringify(h.map(C=>({stepName:C.stepName,status:C.status}))),[h]),O=(C,v,H,M,Y,x)=>{var F,D,ce,se,ee;const E=(Y||x||"").toLowerCase(),U=(v==null?void 0:v.message)||H,B=c=>{const f=U.match(c);return f&&f[1]?f[1]:""};if(E.includes("cluster"))if(C==="INIT"){if(U&&U!==H&&U.includes("Validating")){const c=U.match(/(\d+)\s+more keyword/i);if(c){const k=3+parseInt(c[1],10);return`Validating ${k} keyword${k!==1?"s":""}`}for(const f of M){const o=(F=f.message)==null?void 0:F.match(/(\d+)\s+keyword/i);if(o){const k=parseInt(o[1],10);return`Validating ${k} keyword${k!==1?"s":""}`}}return U}for(const c of M){const f=(D=c.message)==null?void 0:D.match(/(\d+)\s+keyword/i);if(f){const o=parseInt(f[1],10);return`Validating ${o} keyword${o!==1?"s":""}`}}return H}else if(C==="PREP"){const c=B(/(\d+)\s+keyword/i);return c?`Loading ${c} keyword${c!=="1"?"s":""} for clustering`:U}else{if(C==="AI_CALL")return"Generating clusters with Igny8 Semantic SEO Model";if(C==="PARSE"){const c=B(/(\d+)\s+cluster/i);if(c)return`${c} cluster${c!=="1"?"s":""} created`;for(const f of M){const o=(ce=f.message)==null?void 0:ce.match(/(\d+)\s+cluster/i);if(o&&o[1])return`${o[1]} cluster${o[1]!=="1"?"s":""} created`}return U}else if(C==="SAVE"){const c=B(/(\d+)\s+cluster/i);return c?`Saving ${c} cluster${c!=="1"?"s":""}`:U}}else if(E.includes("idea")){if(C==="INIT")return"Verifying cluster integrity";if(C==="PREP")return"Loading cluster keywords";if(C==="AI_CALL")return"Generating ideas with Igny8 Semantic AI";if(C==="PARSE"){const c=B(/(\d+)\s+idea/i);if(c)return`${c} high-opportunity idea${c!=="1"?"s":""} generated`;for(const f of M){const o=(se=f.message)==null?void 0:se.match(/(\d+)\s+idea/i);if(o&&o[1])return`${o[1]} high-opportunity idea${o[1]!=="1"?"s":""} generated`}return U}else if(C==="SAVE")return"Content Outline for Ideas generated"}else if(E.includes("content")){if(C==="AI_CALL")return"Writing article with Igny8 Semantic AI";if(C==="PARSE"){const c=B(/(\d+)\s+article/i);if(c)return`${c} article${c!=="1"?"s":""} created`}}else if(E.includes("image")&&E.includes("from")){if(C==="PREP"){const c=B(/(\d+)\s+image/i);if(c)return`Preparing to generate ${c} image${c!=="1"?"s":""}`;if(v!=null&&v.message){const f=v.message.match(/Preparing to generate (\d+)\s+image/i);if(f&&f[1])return`Preparing to generate ${f[1]} image${f[1]!=="1"?"s":""}`}return"Preparing image generation queue"}else if(C==="AI_CALL"){const c=(ee=v==null?void 0:v.message)==null?void 0:ee.match(/Generating.*image (\d+)/i);return c&&c[1]?`Generating image ${c[1]} with AI`:"Generating images with AI"}else if(C==="PARSE"){const c=B(/(\d+)\s+image/i);if(c)return`${c} image${c!=="1"?"s":""} generated successfully`;if(v!=null&&v.message){const f=v.message.match(/(\d+)\s+image.*generated/i);if(f&&f[1])return`${f[1]} image${f[1]!=="1"?"s":""} generated successfully`}return"Processing image URLs"}else if(C==="SAVE"){const c=B(/(\d+)\s+image/i);if(c)return`Saving ${c} image${c!=="1"?"s":""}`;if(v!=null&&v.message){const f=v.message.match(/Saved image (\d+)/i);if(f&&f[1])return`Saving image ${f[1]}`}return"Saving image URLs"}}else if(E.includes("image")&&(E.includes("prompt")||E.includes("extract")))if(C==="PREP"){const c=B(/(\d+)\s+Image Prompts/i)||B(/(\d+)\s+image/i);if(c)return`Mapping Content for ${c} Image Prompts`;if(v!=null&&v.message){const f=v.message.match(/Mapping Content for (\d+)\s+Image Prompts/i);if(f&&f[1])return`Mapping Content for ${f[1]} Image Prompts`}return"Mapping Content for X Image Prompts"}else{if(C==="AI_CALL")return"Writing Featured Image Prompts";if(C==="PARSE"){const c=B(/(\d+)\s+Inarticle/i)||B(/(\d+)\s+In-article/i);if(c)return`Writing ${c} Inarticle Image Prompts`;if(v!=null&&v.message){const f=v.message.match(/Writing (\d+)\s+In[-]article Image Prompts/i);if(f&&f[1])return`Writing ${f[1]} Inarticle Image Prompts`}return"Writing X Inarticle Image Prompts"}else if(C==="SAVE"){const c=B(/(\d+)\s+Prompts/i)||B(/(\d+)\s+prompt/i);if(c)return`Assigning ${c} Prompts to Dedicated Slots`;if(v!=null&&v.message){const f=v.message.match(/Assigning (\d+)\s+Prompts/i);if(f&&f[1])return`Assigning ${f[1]} Prompts to Dedicated Slots`}return"Assigning Prompts to Dedicated Slots"}}return U},V=a.useMemo(()=>Z.map(C=>{nr(C.phase,G,h);const v=w.has(C.phase),H=!1,M=h.find(x=>x.stepName===C.phase);return{label:O(C.phase,M,C.label,h,u,s),phase:C.phase,completed:v,inProgress:H}}),[Z,G,h,w,u,s]),oe=Z.length>0&&Z.every(C=>w.has(C.phase));a.useEffect(()=>{if(!t){i(new Set),K.current=new Set,N.current="",R.current="",z.current=0,P.current.forEach(x=>clearTimeout(x)),P.current.clear();return}const C=y!==N.current,v=G!==R.current,H=I>z.current;if(!C&&!v&&!H)return;N.current=y,R.current=G,z.current=I;const M=["INIT","PREP","AI_CALL","PARSE","SAVE","DONE"],Y=r==="completed";for(let x=0;x<Z.length;x++){const U=Z[x].phase,B=M.indexOf(U),F=M.indexOf(G);if((Y||F>B||h.some(ce=>ce.stepName===U&&ce.status==="success"))&&!K.current.has(U)&&!P.current.has(U)){const ce=x>0?Z[x-1]:null;if(!ce||K.current.has(ce.phase)){const c=setTimeout(()=>{i(f=>{const o=new Set([...f,U]);return P.current.delete(U),o})},ce?2e3:0);P.current.set(U,c);break}else break}}return()=>{P.current.forEach(x=>clearTimeout(x)),P.current.clear()}},[t,G,y,Z,r,I]);const T=r==="completed"&&oe,X=sr(u,s,h);return e.jsx(Je,{isOpen:t,onClose:m||(()=>{}),className:"max-w-lg",showCloseButton:!1,children:e.jsxs("div",{className:"p-6 min-h-[200px]",children:[e.jsxs("div",{className:"mb-6",children:[e.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white mb-1 text-center",children:(()=>{var v;const C=(u||s||"").toLowerCase();if(C.includes("cluster")){const H=h.find(M=>M.stepName==="INIT");if(H!=null&&H.message){const M=H.message,Y=M.match(/(\d+)\s+more keyword/i);if(Y)return`Mapping ${3+parseInt(Y[1],10)} Keywords into Keyword Clusters`;const x=M.match(/(\d+)\s+keyword/i);if(x)return`Mapping ${x[1]} Keywords into Keyword Clusters`}for(const M of h){const Y=(v=M.message)==null?void 0:v.match(/(\d+)\s+keyword/i);if(Y)return`Mapping ${Y[1]} Keywords into Keyword Clusters`}}else{if(C.includes("idea"))return"Generating Content Ideas & Outline";if(C.includes("image")&&C.includes("from"))return"Generate Images";if(C.includes("image")&&(C.includes("prompt")||C.includes("extract")))return"Smart Image Prompts";if(C.includes("image"))return"Generate Images"}return s})()}),(()=>{const C=(u||s||"").toLowerCase();return C.includes("image")&&C.includes("from")?e.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400 text-center mt-1",children:"Generating images from prompts using AI"}):C.includes("image")&&(C.includes("prompt")||C.includes("extract"))?e.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400 text-center mt-1",children:"Powered by Igny8 Visual Intelligence"}):null})(),!T&&r!=="completed"&&e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400 text-center",children:(()=>{const C=(u||s||"").toLowerCase();if(C.includes("image")&&C.includes("from")){const v=h.find(M=>M.stepName===G);if(v!=null&&v.message)return v.message;const H=Z.find(M=>M.phase===G);return(H==null?void 0:H.label)||"Generating images..."}return p})()}),r==="completed"&&!oe&&e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400 text-center",children:"Processing..."}),(r==="processing"||r==="completed"&&!oe)&&e.jsx("div",{className:"flex justify-center mt-4",children:e.jsxs("svg",{className:"w-8 h-8 text-brand-500 animate-spin",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})})]}),T&&e.jsxs("div",{className:"mb-6",children:[e.jsx("div",{className:"flex justify-center mb-4",children:e.jsx("div",{className:"w-16 h-16 rounded-full bg-green-600 dark:bg-green-700 flex items-center justify-center",children:e.jsx("svg",{className:"w-10 h-10 text-white",fill:"currentColor",viewBox:"0 0 20 20",children:e.jsx("path",{fillRule:"evenodd",d:"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",clipRule:"evenodd"})})})}),e.jsx("div",{className:"p-5 rounded-lg bg-green-600 dark:bg-green-700 border border-green-700 dark:border-green-600",children:e.jsx("div",{className:"text-base font-semibold text-white text-center whitespace-pre-line",children:X})})]}),e.jsx("div",{className:"mb-6 space-y-3",children:V.map((C,v)=>e.jsxs("div",{className:`flex items-center gap-3 p-3 rounded-lg border transition-all ${C.completed?"bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800":"bg-gray-50 dark:bg-gray-800 border-gray-200 dark:border-gray-700 opacity-60"}`,children:[e.jsx("div",{className:"flex-shrink-0",children:C.completed?e.jsx("svg",{className:"w-5 h-5 text-green-600 dark:text-green-400",fill:"currentColor",viewBox:"0 0 20 20",children:e.jsx("path",{fillRule:"evenodd",d:"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",clipRule:"evenodd"})}):e.jsx("div",{className:"w-5 h-5 rounded-full border-2 border-gray-300 dark:border-gray-600"})}),e.jsx("span",{className:`flex-1 text-sm font-medium ${C.completed?"text-green-800 dark:text-green-300":"text-gray-500 dark:text-gray-400"}`,children:C.label})]},v))}),T&&m&&e.jsx("div",{className:"flex justify-center mt-6",children:e.jsx(we,{variant:"primary",size:"lg",onClick:m,className:"bg-green-600 hover:bg-green-700 dark:bg-green-700 dark:hover:bg-green-800 text-white px-8 py-3 text-base font-semibold",children:"Close"})}),g&&!T&&r!=="error"&&e.jsx("div",{className:"flex justify-end gap-3 mt-6",children:e.jsx(we,{variant:"secondary",size:"sm",onClick:g,disabled:r==="processing",children:"Cancel"})}),r==="error"&&m&&e.jsx("div",{className:"flex justify-end gap-3 mt-6",children:e.jsx(we,{variant:"primary",size:"sm",onClick:m,children:"Dismiss"})})]})})}function Tt(){const[t,s]=a.useState(!1),[n,r]=a.useState(null),[p,m]=a.useState(""),[g,d]=a.useState(void 0),[u,h]=a.useState({percentage:0,message:"Initializing...",status:"pending"}),[w,i]=a.useState([]),[P,K]=a.useState(void 0),N=a.useRef(0),R=a.useRef(null),z=a.useRef(null),I=a.useRef(null),Z=(T,X="",C=[])=>{const v=(T==null?void 0:T.toUpperCase())||"",H=X.toLowerCase(),M=(c,f)=>{const o=f.match(c);return o&&o[1]?o[1]:""};let Y=M(/(\d+)\s+keyword/i,X),x=M(/(\d+)\s+cluster/i,X),E=M(/(\d+)\s+task/i,X),U=M(/(\d+)\s+item/i,X);if(!Y&&!E&&!U){const c=M(/loaded\s+(\d+)\s+items?/i,X);c&&(U=c)}if(!x){const c=M(/created\s+(\d+)\s+clusters?/i,X);c&&(x=c)}if(!Y&&!E&&!U)for(const c of C){const f=c.message||"";if(Y||(Y=M(/(\d+)\s+keyword/i,f)),E||(E=M(/(\d+)\s+task/i,f)),U||(U=M(/loaded\s+(\d+)\s+items?/i,f)),x||(x=M(/(\d+)\s+cluster/i,f)||M(/created\s+(\d+)\s+clusters?/i,f)),(Y||E||U)&&x)break}const B=Y,F=x,D=E||U,ce=H.includes("content")||H.includes("generating content")||H.includes("article"),se=H.includes("cluster")&&!H.includes("content"),ee=H.includes("idea");return v.includes("INIT")||v.includes("INITIALIZ")?{percentage:0,friendlyMessage:"Getting started..."}:v.includes("PREP")||v.includes("PREPAR")?ce?{percentage:10,friendlyMessage:D?`Preparing ${D} task${D!=="1"?"s":""}...`:"Preparing content generation..."}:se?{percentage:16,friendlyMessage:B?`Preparing ${B} keyword${B!=="1"?"s":""}...`:"Preparing your keywords..."}:ee?{percentage:10,friendlyMessage:F?`Preparing ${F} cluster${F!=="1"?"s":""}...`:"Preparing clusters..."}:{percentage:10,friendlyMessage:"Preparing..."}:v.includes("AI_CALL")||v.includes("CALLING")?ce?{percentage:50,friendlyMessage:"Writing article with Igny8 Semantic AI..."}:se?{percentage:50,friendlyMessage:"Generating clusters with Igny8 Semantic SEO Model..."}:ee?{percentage:50,friendlyMessage:"Generating ideas with Igny8 Semantic AI..."}:{percentage:50,friendlyMessage:"Processing with Igny8 Semantic AI..."}:v.includes("PARSE")||v.includes("PARSING")?ce?{percentage:70,friendlyMessage:"Processing content..."}:se?{percentage:70,friendlyMessage:"Organizing results..."}:ee?{percentage:70,friendlyMessage:"Processing ideas..."}:{percentage:70,friendlyMessage:"Processing results..."}:v.includes("SAVE")||v.includes("SAVING")||v.includes("CREAT")&&!v.includes("CONTENT")?ce?{percentage:85,friendlyMessage:D?`Saving content for ${D} task${D!=="1"?"s":""}...`:"Saving content..."}:se?{percentage:85,friendlyMessage:F?`Saving ${F} cluster${F!=="1"?"s":""}...`:"Saving clusters..."}:ee?{percentage:85,friendlyMessage:D?`Saving ${D} idea${D!=="1"?"s":""}...`:"Saving ideas..."}:{percentage:85,friendlyMessage:"Saving results..."}:v.includes("DONE")||v.includes("COMPLETE")?ce?{percentage:100,friendlyMessage:D?`Done! Generated content for ${D} task${D!=="1"?"s":""}`:"Done! Content generation complete"}:se?{percentage:100,friendlyMessage:B&&F?`Done! Created ${F} cluster${F!=="1"?"s":""} from ${B} keyword${B!=="1"?"s":""}`:B?`Done! Processed ${B} keyword${B!=="1"?"s":""}`:F?`Done! Created ${F} cluster${F!=="1"?"s":""}`:"Done! Clustering complete"}:ee?{percentage:100,friendlyMessage:D?`Done! Generated ${D} idea${D!=="1"?"s":""}`:"Done! Ideas generation complete"}:{percentage:100,friendlyMessage:"Done! Task complete"}:{percentage:N.current,friendlyMessage:X||"Processing..."}};a.useEffect(()=>{if(!n||!t||n.startsWith("temp-"))return;let T=null,X=0,C=!1;const v=300,H=async()=>{if(!C)try{if(X++,X>v){h({percentage:0,message:"Task is taking longer than expected. Please check manually.",status:"error"}),C=!0,T&&(clearInterval(T),T=null);return}const M=await fs(`/v1/system/settings/task_progress/${n}/`),Y=()=>{I.current&&(clearInterval(I.current),I.current=null),N.current<80&&(I.current=setInterval(()=>{h(E=>{if(E.status!=="processing")return I.current&&(clearInterval(I.current),I.current=null),E;const U=N.current;if(U<80){const B=Math.min(U+1,80);return N.current=B,B>=80&&I.current&&(clearInterval(I.current),I.current=null),{...E,percentage:B}}else return I.current&&(clearInterval(I.current),I.current=null),E})},350))};if(M.state==="PROGRESS"){const x=M.meta||{};let E=null;const U=[...x.request_steps||[],...x.response_steps||[]];if(U.length>0){const A=[...U].sort((Q,he)=>(he.stepNumber||0)-(Q.stepNumber||0))[0];if(A&&A.stepName){const Q=A.stepName.toUpperCase();Q.includes("INIT")?E="INIT":Q.includes("PREP")?E="PREP":Q.includes("AI_CALL")||Q.includes("CALL")?E="AI_CALL":Q.includes("PARSE")?E="PARSE":Q.includes("SAVE")||Q.includes("CREAT")?E="SAVE":Q.includes("DONE")||Q.includes("COMPLETE")?E="DONE":E=Q}}if(!E){const k=(x.phase||"").toUpperCase(),A=(x.message||"").toLowerCase();k==="INIT"||k.includes("INIT")?E="INIT":k==="PREP"||k.includes("PREP")?E="PREP":k==="AI_CALL"||k.includes("AI_CALL")||k.includes("CALL")?E="AI_CALL":k==="PARSE"||k.includes("PARSE")?E="PARSE":k==="SAVE"||k.includes("SAVE")||k.includes("CREAT")?E="SAVE":k==="DONE"||k.includes("DONE")||k.includes("COMPLETE")?E="DONE":A.includes("initializ")||A.includes("getting started")?E="INIT":A.includes("prepar")||A.includes("loading")?E="PREP":A.includes("generating")||A.includes("analyzing")||A.includes("finding related")?E="AI_CALL":A.includes("pars")||A.includes("organizing")||A.includes("processing content")?E="PARSE":A.includes("sav")||A.includes("creat")||A.includes("cluster")&&!A.includes("content")?E="SAVE":(A.includes("done")||A.includes("complet"))&&(E="DONE")}const B=x.message||"",F=`${p} ${B}`,D=Z(E||"",F,U),ce=x.percentage!==void 0?x.percentage:null,se=ce!==null?ce:D.percentage,ee=D.friendlyMessage,c=R.current!==E,f=N.current;I.current&&(clearInterval(I.current),I.current=null),z.current&&(clearTimeout(z.current),z.current=null);const o=Math.max(se,f);if(o>f){let k=f;const A=()=>{if(k<o){const Q=o-k,he=Q<=5?1:Math.min(2,Math.ceil(Q/10));k=Math.min(k+he,o),N.current=k,h({percentage:k,message:ee,status:"processing",details:{current:x.current||0,total:x.total||0,completed:x.completed||0,currentItem:x.current_item,phase:x.phase}}),k<o?z.current=setTimeout(A,150):(z.current=null,o<80&&Y())}};c&&R.current!==null?z.current=setTimeout(()=>{R.current=E,A()},200):(R.current=E,A())}else R.current=E,h(k=>({...k,message:ee,details:{current:x.current||0,total:x.total||0,completed:x.completed||0,currentItem:x.current_item,phase:x.phase}})),f<80&&o===f&&Y();if(x.image_queue&&Array.isArray(x.image_queue)&&K(x.image_queue),x.request_steps||x.response_steps){const k=[];x.request_steps&&Array.isArray(x.request_steps)&&x.request_steps.forEach(A=>{k.push({stepNumber:A.stepNumber||0,stepName:A.stepName||"Unknown",status:A.status||"success",message:A.message||"",timestamp:A.timestamp})}),x.response_steps&&Array.isArray(x.response_steps)&&x.response_steps.forEach(A=>{k.push({stepNumber:A.stepNumber||0,stepName:A.stepName||"Unknown",status:A.status||"success",message:A.message||"",timestamp:A.timestamp})}),k.sort((A,Q)=>A.stepNumber-Q.stepNumber),i(k)}}else if(M.state==="SUCCESS"){const x=M.meta||{};z.current&&(clearTimeout(z.current),z.current=null);const E=x.message||"",U=[...x.request_steps||[],...x.response_steps||[]],B=Z("DONE",E,U);if(R.current="DONE",N.current=100,h({percentage:100,message:B.friendlyMessage,status:"completed",details:x.details}),x.request_steps||x.response_steps){const F=[];x.request_steps&&Array.isArray(x.request_steps)&&x.request_steps.forEach(D=>{F.push({stepNumber:D.stepNumber||0,stepName:D.stepName||"Unknown",status:D.status||"success",message:D.message||"",timestamp:D.timestamp})}),x.response_steps&&Array.isArray(x.response_steps)&&x.response_steps.forEach(D=>{F.push({stepNumber:D.stepNumber||0,stepName:D.stepName||"Unknown",status:D.status||"success",message:D.message||"",timestamp:D.timestamp})}),F.sort((D,ce)=>D.stepNumber-ce.stepNumber),i(F)}C=!0,T&&(clearInterval(T),T=null)}else if(M.state==="FAILURE"){const x=M.meta||{},E=x.error||x.message||M.error||"Task failed - exception details unavailable",U=x.error_type||"Error";if(h({percentage:0,message:E.includes("exception details unavailable")?E:`Error: ${E}`,status:"error",details:x.error_type?`${U}: ${E}`:E}),x.request_steps||x.response_steps){const B=[];x.request_steps&&Array.isArray(x.request_steps)&&x.request_steps.forEach(F=>{B.push({stepNumber:F.stepNumber||0,stepName:F.stepName||"Unknown",status:F.status||"error",message:F.message||"",timestamp:F.timestamp})}),x.response_steps&&Array.isArray(x.response_steps)&&x.response_steps.forEach(F=>{B.push({stepNumber:F.stepNumber||0,stepName:F.stepName||"Unknown",status:F.status||"error",message:F.message||"",timestamp:F.timestamp})}),B.sort((F,D)=>F.stepNumber-D.stepNumber),i(B)}C=!0,T&&(clearInterval(T),T=null)}else h({percentage:0,message:"Task is starting...",status:"pending"})}catch(M){if(console.error("Error polling task status:",M),X>5){let Y=M.message||"Unknown error";Y.includes("HTTP_ERROR")&&(Y=Y.replace(/^API Error \(\d+\): HTTP_ERROR - /,"").trim()||"Server error"),h({percentage:0,message:`Error checking task status: ${Y}`,status:"error"}),C=!0,T&&(clearInterval(T),T=null)}}};return H(),T=setInterval(()=>{C||H()},2e3),()=>{C=!0,T&&(clearInterval(T),T=null),z.current&&(clearTimeout(z.current),z.current=null),I.current&&(clearInterval(I.current),I.current=null),N.current=0,R.current=null}},[n,t]);const G=a.useCallback((T,X,C)=>{z.current&&(clearTimeout(z.current),z.current=null),I.current&&(clearInterval(I.current),I.current=null),N.current=0,R.current=null,i([]),r(T),m(X),d(C),s(!0),h({percentage:0,message:"Getting started...",status:"pending"})},[]),y=a.useCallback(T=>{r(T),h({percentage:0,message:"Initializing...",status:"pending"})},[]),O=a.useCallback(()=>{z.current&&(clearTimeout(z.current),z.current=null),I.current&&(clearInterval(I.current),I.current=null),N.current=0,R.current=null,i([]),K(void 0),s(!1),r(null),m("")},[]),V=a.useCallback(T=>{h({percentage:0,message:T,status:"error"})},[]),oe=a.useCallback(()=>{z.current&&(clearTimeout(z.current),z.current=null),I.current&&(clearInterval(I.current),I.current=null),N.current=0,R.current=null,h({percentage:0,message:"Getting started...",status:"pending"}),i([]),K(void 0),r(null),m(""),s(!1)},[]);return{progress:u,isOpen:t,openModal:G,updateTaskId:y,closeModal:O,setError:V,reset:oe,title:p,taskId:n,functionId:g,stepLogs:w,imageQueue:P}}function lr(){const[t,s]=a.useState(!1);return a.useEffect(()=>{const n=localStorage.getItem("debug_resource_tracking_enabled");s(n==="true");const r=p=>{s(p.detail)};return window.addEventListener("debug-resource-tracking-toggle",r),()=>{window.removeEventListener("debug-resource-tracking-toggle",r)}},[]),t}const ir=t=>{const s=new URLSearchParams;t.filters&&Object.entries(t.filters).forEach(([m,g])=>{g!==""&&g!==null&&g!==void 0&&s.append(m,String(g))});const n=s.toString(),r=t.endpoint.endsWith("/")?t.endpoint:`${t.endpoint}/`;return`${$t}${r}${n?`?${n}`:""}`},or=async(t,s,n)=>{const r=t.format||"csv",p=ir(t);s==null||s(`Exporting ${r.toUpperCase()}...`);try{const m=await fetch(p,{method:"GET",credentials:"include"});if(!m.ok){const h=await m.text();throw new Error(`Export failed: ${m.statusText} - ${h}`)}const g=await m.blob(),d=window.URL.createObjectURL(g),u=document.createElement("a");u.href=d,u.download=`${t.filename}.${r}`,document.body.appendChild(u),u.click(),document.body.removeChild(u),window.URL.revokeObjectURL(d),s==null||s(`Export successful: ${t.filename}.${r}`)}catch(m){const g=m instanceof Error?m:new Error("Export failed");throw n==null||n(g),g}},cr=async(t,s,n,r)=>{var u,h;const p=s.acceptedFormats||[".csv"],m="."+((u=t.name.split(".").pop())==null?void 0:u.toLowerCase());if(!p.includes(m)){const w=new Error(`Invalid file format. Accepted formats: ${p.join(", ")}`);throw r==null||r(w),w}const g=s.maxFileSize||5*1024*1024;if(t.size>g){const w=new Error(`File size exceeds ${g/1024/1024}MB limit`);throw r==null||r(w),w}n==null||n(`Importing ${t.name}...`);const d=new FormData;d.append("file",t);try{const w=s.endpoint.endsWith("/")?s.endpoint:`${s.endpoint}/`,i=new URLSearchParams;s.queryParams&&Object.entries(s.queryParams).forEach(([z,I])=>{I!==""&&I!==null&&I!==void 0&&i.append(z,String(I))});const P=i.toString(),K=`${$t}${w}${P?`?${P}`:""}`,N=await fetch(K,{method:"POST",body:d,credentials:"include"});if(!N.ok){const z=await N.text();throw new Error(`Import failed: ${N.statusText} - ${z}`)}const R=await N.json();return n==null||n(`Import successful: ${R.imported||0} rows imported`),(h=s.onSuccess)==null||h.call(s,R),R}catch(w){const i=w instanceof Error?w:new Error("Import failed");throw r==null||r(i),i}},dr=({className:t,onChange:s,accept:n,disabled:r=!1})=>e.jsx("input",{type:"file",accept:n,disabled:r,className:`focus:border-ring-brand-300 h-11 w-full overflow-hidden rounded-lg border border-gray-300 bg-transparent text-sm text-gray-500 shadow-theme-xs transition-colors file:mr-5 file:border-collapse file:cursor-pointer file:rounded-l-lg file:border-0 file:border-r file:border-solid file:border-gray-200 file:bg-gray-50 file:py-3 file:pl-3.5 file:pr-3 file:text-sm file:text-gray-700 placeholder:text-gray-400 hover:file:bg-gray-100 focus:outline-hidden focus:file:ring-brand-300 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-400 dark:text-white/90 dark:file:border-gray-800 dark:file:bg-white/[0.03] dark:file:text-gray-400 dark:placeholder:text-gray-400 disabled:opacity-50 disabled:cursor-not-allowed ${t}`,onChange:s});function ur(t){const{exportEndpoint:s,importEndpoint:n,filename:r,acceptedFormats:p=[".csv"],maxFileSize:m=5*1024*1024,onImportSuccess:g,onExportSuccess:d,onError:u}=t,[h,w]=a.useState(!1),[i,P]=a.useState(!1),K=a.useCallback(async(I="csv",Z={})=>{P(!0);try{await or({endpoint:s,filename:r,format:I,filters:Z},y=>console.log(y),y=>{throw u==null||u(y),y}),d==null||d()}catch(G){const y=G instanceof Error?G:new Error("Export failed");throw u==null||u(y),y}finally{P(!1)}},[s,r,u,d]),N=a.useCallback(async I=>{P(!0);try{const Z={endpoint:n,acceptedFormats:p,maxFileSize:m,queryParams:t.importQueryParams,onSuccess:y=>{g==null||g(y)}},G=await cr(I,Z,y=>console.log(y),y=>{throw u==null||u(y),y});return w(!1),G}catch(Z){const G=Z instanceof Error?Z:new Error("Import failed");throw u==null||u(G),G}finally{P(!1)}},[n,p,m,g,u]),R=a.useCallback(async I=>{var G;const Z=(G=I.target.files)==null?void 0:G[0];Z&&(await N(Z),I.target.value="")},[N]);return{handleExport:K,handleImportClick:()=>w(!0),ImportModal:()=>e.jsx(Je,{isOpen:h,onClose:()=>w(!1),className:"max-w-md",children:e.jsxs("div",{className:"p-6",children:[e.jsxs("h2",{className:"text-xl font-bold mb-6 text-gray-800 dark:text-white",children:["Import ",r.charAt(0).toUpperCase()+r.slice(1)]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(it,{children:"CSV File"}),e.jsx(dr,{onChange:R,accept:p.join(","),disabled:i}),e.jsxs("p",{className:"text-sm text-gray-500 dark:text-gray-400 mt-2",children:["Upload a CSV file (max ",m/1024/1024,"MB)"]})]}),e.jsx("div",{className:"flex justify-end gap-4 pt-4",children:e.jsx(we,{variant:"outline",onClick:()=>w(!1),disabled:i,children:"Close"})})]})]})})}}const mr=(t,s,n)=>ur({exportEndpoint:"/v1/planner/keywords/export/",importEndpoint:"/v1/planner/keywords/import_keywords/",filename:"keywords",acceptedFormats:[".csv"],maxFileSize:5*1024*1024,importQueryParams:n,onImportSuccess:t,onError:s});function gr(){const t=Ge(),{activeSite:s}=Et(),{activeSector:n,loadSectorsForSite:r}=We(),{pageSize:p}=Xe(),[m,g]=a.useState([]),[d,u]=a.useState([]),[h,w]=a.useState([]),[i,P]=a.useState(!0),[K,N]=a.useState(!1),[R,z]=a.useState(""),[I,Z]=a.useState(""),[G,y]=a.useState(""),[O,V]=a.useState(""),[oe,T]=a.useState(""),[X,C]=a.useState(""),[v,H]=a.useState(""),[M,Y]=a.useState(!1),[x,E]=a.useState(""),[U,B]=a.useState(""),F=a.useRef(null),D=a.useRef(null),[ce,se]=a.useState([]),[ee,c]=a.useState(1),[f,o]=a.useState(1),[k,A]=a.useState(0),[Q,he]=a.useState("created_at"),[te,de]=a.useState("desc"),[ne,pe]=a.useState(!1),[ie,j]=a.useState(!1),[W,q]=a.useState(!1),[ge,ke]=a.useState(null),[Ce,Ee]=a.useState({seed_keyword_id:0,volume_override:null,difficulty_override:null,cluster_id:null,status:"pending"}),$=Tt(),re=a.useRef(!1),le=lr(),[ue,xe]=a.useState([]),Se=a.useRef(null),Te=a.useRef(-1),je=a.useCallback(S=>{le&&xe(l=>[...l,S])},[le]);a.useEffect(()=>{s&&r(s.id)},[s,r]),a.useEffect(()=>{(async()=>{if(!s||!n||!s.industry){w([]);return}try{N(!0);const l=await jt({industry:s.industry,sector:n.industry_sector||void 0}),b=new Set(m.map(L=>L.seed_keyword_id)),_=(l.results||[]).filter(L=>!b.has(L.id));w(_)}catch(l){console.error("Failed to load available seed keywords:",l),w([])}finally{N(!1)}})()},[s,n,m]),a.useEffect(()=>{(async()=>{try{const l=await qe({ordering:"name"});u(l.results||[])}catch(l){console.error("Error fetching clusters:",l)}})()},[]);const ye=a.useCallback(async()=>{P(!0),pe(!1);try{const S=Q?`${te==="desc"?"-":""}${Q}`:"-created_at",l={...R&&{search:R},...I&&{status:I},...G&&{cluster_id:G},...O&&{intent:O},...(n==null?void 0:n.id)&&{sector_id:n.id},page:ee,page_size:p||10,ordering:S};if(oe){const _=parseInt(oe),L=At(_);if(L!==null){const ae=Pt(L);ae&&(l.difficulty_min=ae.min,l.difficulty_max=ae.max)}}X!==""&&X!==null&&X!==void 0&&(l.volume_min=Number(X)),v!==""&&v!==null&&v!==void 0&&(l.volume_max=Number(v));const b=await Jt(l);g(b.results||[]),A(b.count||0),o(Math.ceil((b.count||0)/p)),setTimeout(()=>{pe(!0),P(!1)},100)}catch(S){console.error("Error loading keywords:",S),t.error(`Failed to load keywords: ${S.message}`),pe(!0),P(!1)}},[ee,I,G,O,oe,X,v,Q,te,R,s,n,p]);a.useEffect(()=>{const S=()=>{ye(),(async()=>{try{const _=await qe({ordering:"name"});u(_.results||[])}catch(_){console.error("Error fetching clusters:",_)}})()},l=()=>{ye()};return window.addEventListener("siteChanged",S),window.addEventListener("sectorChanged",l),()=>{window.removeEventListener("siteChanged",S),window.removeEventListener("sectorChanged",l)}},[ye]),a.useEffect(()=>{const S=l=>{F.current&&!F.current.contains(l.target)&&D.current&&!D.current.contains(l.target)&&(Y(!1),E(X),B(v))};if(M)return document.addEventListener("mousedown",S),()=>{document.removeEventListener("mousedown",S)}},[M,X,v]),a.useEffect(()=>{ye()},[ye]),a.useEffect(()=>{const S=setTimeout(()=>{c(1)},500);return()=>clearTimeout(S)},[R]),a.useEffect(()=>{const S=ee===1;c(1),S&&setTimeout(()=>{ye()},0)},[p]);const ut=(S,l)=>{he(S||"created_at"),de(l),c(1)},{handleExport:Ye,handleImportClick:Ze,ImportModal:mt}=mr(()=>{t.success("Import successful","Keywords imported successfully."),ye()},S=>{t.error("Import failed",S.message)},s&&n?{site_id:s.id,sector_id:n.id}:void 0),gt=a.useCallback(async(S,l)=>{if(S==="auto_cluster"){if(l.length===0){t.error("Please select at least one keyword to cluster");return}if(l.length>20){t.error("Maximum 20 keywords allowed for clustering");return}const b=l.map(J=>parseInt(J)),_=n==null?void 0:n.id,L=m.filter(J=>b.includes(J.id)),ae={ids:b,keyword_count:b.length,keyword_names:L.map(J=>J.keyword),sector_id:_};je({timestamp:new Date().toISOString(),type:"request",action:"auto_cluster (Bulk Action)",data:ae});try{const J=await ps(b,_);if(J&&J.success===!1){const fe=J.error||"Failed to cluster keywords";je({timestamp:new Date().toISOString(),type:"error",action:"auto_cluster (Bulk Action)",data:{error:fe,keyword_count:b.length}}),t.error(fe);return}if(J&&J.success)J.task_id?(je({timestamp:new Date().toISOString(),type:"success",action:"auto_cluster (Bulk Action)",data:{task_id:J.task_id,message:J.message,keyword_count:b.length}}),re.current=!1,$.openModal(J.task_id,"Auto-Clustering Keywords","ai-auto-cluster-01")):(je({timestamp:new Date().toISOString(),type:"success",action:"auto_cluster (Bulk Action)",data:{clusters_created:J.clusters_created||0,keywords_updated:J.keywords_updated||0,keyword_count:b.length,message:J.message}}),t.success(`Clustering complete: ${J.clusters_created||0} clusters created, ${J.keywords_updated||0} keywords updated`),re.current||(re.current=!0,ye()));else{const fe=(J==null?void 0:J.error)||"Unexpected response format";je({timestamp:new Date().toISOString(),type:"error",action:"auto_cluster (Bulk Action)",data:{error:fe,keyword_count:b.length}}),t.error(fe)}}catch(J){let fe="Failed to cluster keywords";J.message&&(fe=J.message.replace(/^API Error \(\d+\): [^-]+ - /,"").trim(),(!fe||fe===J.message)&&(fe=J.message)),je({timestamp:new Date().toISOString(),type:"error",action:"auto_cluster (Bulk Action)",data:{error:fe,keyword_count:b.length}}),t.error(fe)}}else t.info(`Bulk action "${S}" for ${l.length} items`)},[t,n,ye,$,m]);a.useEffect(()=>{var ae;if(!$.taskId||!$.isOpen)return;const S=$.progress,l=((ae=S.details)==null?void 0:ae.phase)||"",b=S.percentage,_=S.message,L=S.status;if(l&&l!==Se.current){const J=L==="error"?"error":L==="completed"?"success":"step";je({timestamp:new Date().toISOString(),type:J,action:$.title||"AI Function",stepName:l,percentage:b,data:{step:l,message:_,percentage:b,status:L,details:S.details}}),Se.current=l,Te.current=b}else if(l&&Math.abs(b-Te.current)>=10){const J=L==="error"?"error":L==="completed"?"success":"step";je({timestamp:new Date().toISOString(),type:J,action:$.title||"AI Function",stepName:l,percentage:b,data:{step:l,message:_,percentage:b,status:L,details:S.details}}),Te.current=b}else if((L==="error"||L==="completed")&&(l!==Se.current||L==="error"&&Se.current!=="error"||L==="completed"&&Se.current!=="completed")){const J=L==="error"?"error":"success";je({timestamp:new Date().toISOString(),type:J,action:$.title||"AI Function",stepName:l||"Final",percentage:b,data:{step:l||"Final",message:_,percentage:b,status:L,details:S.details}}),Se.current=l||L}},[$.progress,$.taskId,$.isOpen,$.title,je]),a.useEffect(()=>{$.isOpen||(Se.current=null,Te.current=-1),re.current=!1},[$.isOpen,$.taskId]);const Me=a.useCallback(()=>{Ee({seed_keyword_id:0,volume_override:null,difficulty_override:null,cluster_id:null,status:"pending"}),q(!1),ke(null)},[]),Re=a.useCallback(async S=>{try{if(!S||S.length===0)throw new Error("No records selected for export");const l=S.join(","),b=`${$t}/v1/planner/keywords/export/?ids=${encodeURIComponent(l)}`,_=await fetch(b,{method:"GET",credentials:"include"});if(!_.ok){const fe=await _.text();throw new Error(`Export failed: ${_.statusText} - ${fe}`)}const L=await _.blob(),ae=window.URL.createObjectURL(L),J=document.createElement("a");J.href=ae,J.download="keywords.csv",document.body.appendChild(J),J.click(),document.body.removeChild(J),window.URL.revokeObjectURL(ae)}catch(l){throw l}},[]),Oe=a.useCallback(async(S,l)=>{try{const b=S.map(_=>parseInt(_));await hs(b,l),await ye()}catch(b){throw b}},[ye]),Ne=a.useMemo(()=>Os({clusters:d,activeSector:n,availableSeedKeywords:h,formData:Ce,setFormData:Ee,searchTerm:R,setSearchTerm:z,statusFilter:I,setStatusFilter:Z,intentFilter:O,setIntentFilter:V,difficultyFilter:oe,setDifficultyFilter:T,clusterFilter:G,setClusterFilter:y,volumeMin:X,volumeMax:v,setVolumeMin:C,setVolumeMax:H,isVolumeDropdownOpen:M,setIsVolumeDropdownOpen:Y,tempVolumeMin:x,tempVolumeMax:U,setTempVolumeMin:E,setTempVolumeMax:B,volumeButtonRef:D,volumeDropdownRef:F,setCurrentPage:c,loadKeywords:ye}),[d,n,h,Ce,R,I,O,oe,G,X,v,M,x,U,ye,s]),ft=a.useMemo(()=>Ne!=null&&Ne.headerMetrics?Ne.headerMetrics.map(S=>({label:S.label,value:S.calculate({keywords:m,totalCount:k,clusters:d}),accentColor:S.accentColor})):[],[Ne==null?void 0:Ne.headerMetrics,m,k,d]),et=async()=>{try{if(!s){t.error("Please select an active site first");return}if(W&&ge)await bs(ge.id,Ce),t.success("Keyword updated successfully");else{if(!n){t.error("Please select a sector for this site first");return}if(!Ce.seed_keyword_id){t.error("Please select a seed keyword");return}const S=n.id,l={...Ce,site_id:s.id,sector_id:S};await ws(l),t.success("Keyword attached successfully")}j(!1),Me(),ye()}catch(S){t.error(`Failed to save: ${S.message}`)}},pt=a.useCallback(S=>{ke(S),q(!0),Ee({seed_keyword_id:S.seed_keyword_id,volume_override:S.volume_override||null,difficulty_override:S.difficulty_override||null,cluster_id:S.cluster_id,status:S.status}),j(!0)},[]);return e.jsxs(e.Fragment,{children:[e.jsx(Qe,{title:"Keywords",badge:{icon:e.jsx(Wt,{}),color:"green"}}),e.jsx(dt,{columns:Ne.columns,data:m,loading:i,showContent:ne,filters:Ne.filters,filterValues:{search:R,status:I,intent:O,difficulty:oe,cluster_id:G,volumeMin:X,volumeMax:v},onFilterChange:(S,l)=>{const b=l==null?"":String(l);S==="search"?z(b):S==="status"?(Z(b),c(1)):S==="intent"?(V(b),c(1)):S==="difficulty"?(T(b),c(1)):S==="cluster_id"&&(y(b),c(1))},onEdit:pt,onCreate:()=>{Me(),j(!0)},createLabel:"Add Keyword",onCreateIcon:e.jsx(He,{}),onDelete:async S=>{await xs(S),ye()},onBulkDelete:async S=>{const l=await ys(S);return se([]),ee>1&&m.length<=S.length&&c(1),await ye(),l},onBulkExport:Re,onBulkUpdateStatus:Oe,onBulkAction:gt,getItemDisplayName:S=>S.keyword,onExport:async()=>{try{await Ye("csv",{search:R,status:I,cluster_id:G,intent:O,difficulty:oe}),t.success("Export successful","Keywords exported successfully.")}catch(S){t.error("Export failed",S.message)}},onExportIcon:e.jsx(_t,{}),onImport:Ze,onImportIcon:e.jsx(ms,{}),selectionLabel:"keyword",pagination:{currentPage:ee,totalPages:f,totalCount:k,onPageChange:S=>{c(S)}},selection:{selectedIds:ce,onSelectionChange:se},sorting:{sortBy:Q,sortDirection:te,onSort:ut},headerMetrics:ft,onFilterReset:()=>{z(""),Z(""),y(""),V(""),T(""),C(""),H(""),E(""),B(""),Y(!1),c(1)}}),e.jsx(Mt,{isOpen:ie,onClose:()=>{j(!1),Me()},onSubmit:et,title:W?"Edit Keyword":"Add Keyword",submitLabel:W?"Update":"Create",fields:Ne.formFields(d)}),e.jsx(mt,{}),e.jsx(Rt,{isOpen:$.isOpen,title:$.title,percentage:$.progress.percentage,status:$.progress.status,message:$.progress.message,details:$.progress.details,taskId:$.taskId||void 0,functionId:$.functionId,onClose:()=>{$.closeModal(),$.progress.status==="completed"&&!re.current&&(re.current=!0,ye())}}),le&&ue.length>0&&e.jsxs("div",{className:"mt-6 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 p-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("h3",{className:"text-sm font-semibold text-gray-900 dark:text-gray-100",children:"AI Function Logs"}),e.jsx("button",{onClick:()=>xe([]),className:"text-xs text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200",children:"Clear Logs"})]}),e.jsx("div",{className:"space-y-2 max-h-96 overflow-y-auto",children:ue.slice().reverse().map((S,l)=>e.jsxs("div",{className:`p-3 rounded border text-xs font-mono ${S.type==="request"?"bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800":S.type==="success"?"bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800":S.type==="error"?"bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800":"bg-purple-50 dark:bg-purple-900/20 border-purple-200 dark:border-purple-800"}`,children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsxs("span",{className:`font-semibold ${S.type==="request"?"text-blue-700 dark:text-blue-300":S.type==="success"?"text-green-700 dark:text-green-300":S.type==="error"?"text-red-700 dark:text-red-300":"text-purple-700 dark:text-purple-300"}`,children:["[",S.type.toUpperCase(),"]"]}),e.jsx("span",{className:"text-gray-700 dark:text-gray-300",children:S.action}),S.stepName&&e.jsx("span",{className:"text-xs px-2 py-0.5 rounded bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-400",children:S.stepName}),S.percentage!==void 0&&e.jsxs("span",{className:"text-xs text-gray-500 dark:text-gray-400",children:[S.percentage,"%"]})]}),e.jsx("span",{className:"text-gray-500 dark:text-gray-400",children:new Date(S.timestamp).toLocaleTimeString()})]}),e.jsx("pre",{className:"text-xs text-gray-700 dark:text-gray-300 whitespace-pre-wrap break-words",children:JSON.stringify(S.data,null,2)})]},l))})]})]})}const Mr=Object.freeze(Object.defineProperty({__proto__:null,default:gr},Symbol.toStringTag,{value:"Module"}));function fr(){const t=Ge(),{activeSector:s}=We(),{pageSize:n}=Xe(),[r,p]=a.useState([]),[m,g]=a.useState(!0),[d,u]=a.useState(""),[h,w]=a.useState(""),[i,P]=a.useState(""),[K,N]=a.useState(""),[R,z]=a.useState(""),[I,Z]=a.useState(!1),[G,y]=a.useState(""),[O,V]=a.useState(""),oe=a.useRef(null),T=a.useRef(null),[X,C]=a.useState([]),[v,H]=a.useState(1),[M,Y]=a.useState(1),[x,E]=a.useState(0),[U,B]=a.useState("name"),[F,D]=a.useState("asc"),[ce,se]=a.useState(!1),[ee,c]=a.useState(!1),[f,o]=a.useState(!1),[k,A]=a.useState(null),[Q,he]=a.useState({name:"",description:"",status:"active"}),te=Tt(),de=a.useRef(!1),ne=a.useCallback(async()=>{g(!0),se(!1);try{const $=U?`${F==="desc"?"-":""}${U}`:"name",re={...d&&{search:d},...h&&{status:h},...(s==null?void 0:s.id)&&{sector_id:s.id},page:v,page_size:n,ordering:$};if(i){const ue=parseInt(i),xe=At(ue);if(xe!==null){const Se=Pt(xe);Se&&(re.difficulty_min=Se.min,re.difficulty_max=Se.max)}}K!==""&&K!==null&&K!==void 0&&(re.volume_min=Number(K)),R!==""&&R!==null&&R!==void 0&&(re.volume_max=Number(R));const le=await qe(re);p(le.results||[]),E(le.count||0),Y(Math.ceil((le.count||0)/n)),setTimeout(()=>{se(!0),g(!1)},100)}catch($){console.error("Error loading clusters:",$),t.error(`Failed to load clusters: ${$.message}`),se(!0),g(!1)}},[v,h,U,F,d,i,K,R,s,n]);a.useEffect(()=>{ne()},[ne]),a.useEffect(()=>{const $=()=>{ne()},re=()=>{ne()};return window.addEventListener("siteChanged",$),window.addEventListener("sectorChanged",re),()=>{window.removeEventListener("siteChanged",$),window.removeEventListener("sectorChanged",re)}},[ne]),a.useEffect(()=>{const $=setTimeout(()=>{v===1?ne():H(1)},500);return()=>clearTimeout($)},[d,v,ne]),a.useEffect(()=>{H(1)},[n]);const pe=($,re)=>{B($||"name"),D(re),H(1)},ie=a.useCallback(async($,re)=>{try{const le=$.map(ue=>parseInt(ue));await ks(le,re),await ne()}catch(le){throw le}},[ne]),j=a.useCallback(async $=>{try{if(!$||$.length===0)throw new Error("No records selected for export");t.info("Export functionality coming soon")}catch(re){throw re}},[]),W=a.useCallback(async($,re)=>{if($==="generate_ideas")try{const le=await Vt([re.id]);le.success&&le.task_id?te.openModal(le.task_id,"Generating Ideas","ai-generate-ideas-01-desktop"):le.success&&le.ideas_created?(t.success(le.message||"Ideas generated successfully"),await ne()):t.error(le.error||"Failed to generate ideas")}catch(le){t.error(`Failed to generate ideas: ${le.message}`)}},[t,te,ne]),q=a.useCallback(async($,re)=>{if($==="auto_generate_ideas"){if(re.length===0){t.error("Please select at least one cluster to generate ideas");return}if(re.length>5){t.error("Maximum 5 clusters allowed for idea generation");return}try{const le=re.map(xe=>parseInt(xe)),ue=await Vt(le);if(ue&&ue.success===!1){const xe=ue.error||"Failed to generate ideas";t.error(xe);return}if(ue&&ue.success)ue.task_id?(de.current=!1,te.openModal(ue.task_id,"Generating Content Ideas","ai-generate-ideas-01-desktop")):(t.success(`Ideas generation complete: ${ue.ideas_created||0} ideas created`),de.current||(de.current=!0,ne()));else{const xe=(ue==null?void 0:ue.error)||"Unexpected response format";t.error(xe)}}catch(le){let ue="Failed to generate ideas";le.message&&(ue=le.message.replace(/^API Error \(\d+\): [^-]+ - /,"").trim(),(!ue||ue===le.message)&&(ue=le.message)),t.error(ue)}}else t.info(`Bulk action "${$}" for ${re.length} items`)},[t,ne,te]);a.useEffect(()=>{const $=re=>{oe.current&&!oe.current.contains(re.target)&&T.current&&!T.current.contains(re.target)&&Z(!1)};return I&&document.addEventListener("mousedown",$),()=>{document.removeEventListener("mousedown",$)}},[I]);const ge=a.useMemo(()=>Ms({activeSector:s,formData:Q,setFormData:he,searchTerm:d,setSearchTerm:u,statusFilter:h,setStatusFilter:w,difficultyFilter:i,setDifficultyFilter:P,volumeMin:K,volumeMax:R,setVolumeMin:N,setVolumeMax:z,isVolumeDropdownOpen:I,setIsVolumeDropdownOpen:Z,tempVolumeMin:G,tempVolumeMax:O,setTempVolumeMin:y,setTempVolumeMax:V,volumeButtonRef:T,volumeDropdownRef:oe,setCurrentPage:H,loadClusters:ne}),[s,Q,d,h,i,K,R,I,G,O,ne]),ke=a.useMemo(()=>ge!=null&&ge.headerMetrics?ge.headerMetrics.map($=>({label:$.label,value:$.calculate({clusters:r,totalCount:x}),accentColor:$.accentColor})):[],[ge==null?void 0:ge.headerMetrics,r,x]),Ce=a.useCallback(()=>{he({name:"",description:"",status:"active"}),o(!1),A(null)},[]),Ee=async()=>{try{f&&k?(await Ss(k.id,Q),t.success("Cluster updated successfully")):(await js(Q),t.success("Cluster created successfully")),c(!1),Ce(),ne()}catch($){t.error(`Failed to save: ${$.message}`)}};return e.jsxs(e.Fragment,{children:[e.jsx(Qe,{title:"Keyword Clusters",badge:{icon:e.jsx(Gt,{}),color:"purple"}}),e.jsx(dt,{columns:ge.columns,data:r,loading:m,showContent:ce,filters:ge.filters,filterValues:{search:d,status:h,difficulty:i,volumeMin:K,volumeMax:R},onFilterChange:($,re)=>{const le=re==null?"":String(re);$==="search"?u(le):$==="status"?w(le):$==="difficulty"&&P(le),H(1)},onEdit:$=>{A($),he({name:$.name||"",description:$.description||"",status:$.status||"active"}),o(!0),c(!0)},onCreate:()=>{Ce(),c(!0)},createLabel:"Create Cluster",onCreateIcon:e.jsx(He,{}),onDelete:async $=>{await Cs($),ne()},onBulkDelete:async $=>{const re=await vs($);return C([]),v>1&&r.length<=$.length&&H(1),await ne(),re},onBulkExport:j,onBulkUpdateStatus:ie,onBulkAction:q,onRowAction:W,getItemDisplayName:$=>$.name,onExport:async()=>{t.info("Export functionality coming soon")},onExportIcon:e.jsx(_t,{}),selectionLabel:"cluster",pagination:{currentPage:v,totalPages:M,totalCount:x,onPageChange:H},selection:{selectedIds:X,onSelectionChange:C},sorting:{sortBy:U,sortDirection:F,onSort:pe},headerMetrics:ke,onFilterReset:()=>{u(""),w(""),P(""),N(""),z(""),H(1)}}),e.jsx(Rt,{isOpen:te.isOpen,title:te.title,percentage:te.progress.percentage,status:te.progress.status,message:te.progress.message,details:te.progress.details,taskId:te.taskId||void 0,functionId:te.functionId,stepLogs:te.stepLogs,onClose:()=>{te.closeModal(),te.progress.status==="completed"&&!de.current&&(de.current=!0,ne())}}),e.jsx(Mt,{isOpen:ee,onClose:()=>{c(!1),Ce()},onSubmit:Ee,title:f?"Edit Cluster":"Add Cluster",submitLabel:f?"Update":"Create",fields:ge.formFields()})]})}const Rr=Object.freeze(Object.defineProperty({__proto__:null,default:fr},Symbol.toStringTag,{value:"Module"}));function pr(){const t=Ge(),{activeSector:s}=We(),{pageSize:n}=Xe(),[r,p]=a.useState([]),[m,g]=a.useState([]),[d,u]=a.useState(!0),[h,w]=a.useState(""),[i,P]=a.useState(""),[K,N]=a.useState(""),[R,z]=a.useState(""),[I,Z]=a.useState(""),[G,y]=a.useState([]),[O,V]=a.useState(1),[oe,T]=a.useState(1),[X,C]=a.useState(0),[v,H]=a.useState("created_at"),[M,Y]=a.useState("desc"),[x,E]=a.useState(!1),[U,B]=a.useState(!1),[F,D]=a.useState(!1),[ce,se]=a.useState(null),[ee,c]=a.useState({idea_title:"",description:"",content_structure:"blog_post",content_type:"blog_post",target_keywords:"",keyword_cluster_id:null,status:"new",estimated_word_count:1e3}),f=Tt();a.useEffect(()=>{(async()=>{try{const W=await qe({ordering:"name"});g(W.results||[])}catch(W){console.error("Error fetching clusters:",W)}})()},[]);const o=a.useCallback(async()=>{u(!0),E(!1);try{const j=v?`${M==="desc"?"-":""}${v}`:"-created_at",W={...h&&{search:h},...i&&{status:i},...K&&{keyword_cluster_id:K},...R&&{content_structure:R},...I&&{content_type:I},page:O,page_size:n,ordering:j},q=await Xt(W);p(q.results||[]),C(q.count||0),T(Math.ceil((q.count||0)/n)),setTimeout(()=>{E(!0),u(!1)},100)}catch(j){console.error("Error loading ideas:",j),t.error(`Failed to load ideas: ${j.message}`),E(!0),u(!1)}},[O,i,K,R,I,v,M,h,s,n]);a.useEffect(()=>{o()},[o]),a.useEffect(()=>{const j=()=>{o()},W=()=>{o()};return window.addEventListener("siteChanged",j),window.addEventListener("sectorChanged",W),()=>{window.removeEventListener("siteChanged",j),window.removeEventListener("sectorChanged",W)}},[o]),a.useEffect(()=>{V(1)},[n]),a.useEffect(()=>{const j=setTimeout(()=>{O===1?o():V(1)},500);return()=>clearTimeout(j)},[h,O,o]);const k=(j,W)=>{H(j||"created_at"),Y(W),V(1)},A=a.useCallback(async(j,W)=>{try{const q=j.map(ge=>parseInt(ge));await Ns(q,W),await o()}catch(q){throw q}},[o]),Q=a.useCallback(async j=>{try{if(!j||j.length===0)throw new Error("No records selected for export");t.info("Export functionality coming soon")}catch(W){throw W}},[]),he=a.useCallback(async(j,W)=>{if(j==="queue_to_writer"){if(W.status!=="new"){t.error(`Only ideas with status "new" can be queued. Current status: ${W.status}`);return}try{const q=await Bt([W.id]);t.success(`Queue complete: ${q.created_count||0} task created`),await o()}catch(q){t.error(`Failed to queue idea: ${q.message}`)}}},[t,o]),te=a.useCallback(async(j,W)=>{if(j==="queue_to_writer"){if(W.length===0){t.error("Please select at least one idea to queue");return}try{const q=W.map(ke=>parseInt(ke)),ge=await Bt(q);t.success(`Queue complete: ${ge.created_count||0} tasks created from ${W.length} ideas`),await o()}catch(q){t.error(`Failed to queue ideas: ${q.message}`)}}else t.info(`Bulk action "${j}" for ${W.length} items`)},[t,o]),de=a.useMemo(()=>Fs({clusters:m,activeSector:s,formData:ee,setFormData:c,searchTerm:h,setSearchTerm:w,statusFilter:i,setStatusFilter:P,clusterFilter:K,setClusterFilter:N,structureFilter:R,setStructureFilter:z,typeFilter:I,setTypeFilter:Z,setCurrentPage:V}),[m,s,ee,h,i,K,R,I]),ne=a.useMemo(()=>de!=null&&de.headerMetrics?de.headerMetrics.map(j=>({label:j.label,value:j.calculate({ideas:r,totalCount:X}),accentColor:j.accentColor})):[],[de==null?void 0:de.headerMetrics,r,X]),pe=a.useCallback(()=>{c({idea_title:"",description:"",content_structure:"blog_post",content_type:"blog_post",target_keywords:"",keyword_cluster_id:null,status:"new",estimated_word_count:1e3}),D(!1),se(null)},[]),ie=async()=>{try{F&&ce?(await Es(ce.id,ee),t.success("Idea updated successfully")):(await $s(ee),t.success("Idea created successfully")),B(!1),pe(),o()}catch(j){t.error(`Failed to save: ${j.message}`)}};return e.jsxs(e.Fragment,{children:[e.jsx(Qe,{title:"Content Ideas",badge:{icon:e.jsx(It,{}),color:"orange"}}),e.jsx(dt,{columns:de.columns,data:r,loading:d,showContent:x,filters:de.filters,filterValues:{search:h,status:i,keyword_cluster_id:K,content_structure:R,content_type:I},onFilterChange:(j,W)=>{const q=W==null?"":String(W);j==="search"?w(q):j==="status"?P(q):j==="keyword_cluster_id"?N(q):j==="content_structure"?z(q):j==="content_type"&&Z(q),V(1)},onEdit:j=>{se(j),c({idea_title:j.idea_title||"",description:j.description||"",content_structure:j.content_structure||"blog_post",content_type:j.content_type||"blog_post",target_keywords:j.target_keywords||"",keyword_cluster_id:j.keyword_cluster_id||null,status:j.status||"new",estimated_word_count:j.estimated_word_count||1e3}),D(!0),B(!0)},onCreate:()=>{pe(),B(!0)},createLabel:"Add Idea",onCreateIcon:e.jsx(He,{}),onDelete:async j=>{await _s(j),o()},onBulkDelete:async j=>{const W=await Is(j);return y([]),O>1&&r.length<=j.length&&V(1),await o(),W},onBulkExport:Q,onBulkUpdateStatus:A,onBulkAction:te,onRowAction:he,getItemDisplayName:j=>j.idea_title,onExport:async()=>{t.info("Export functionality coming soon")},onExportIcon:e.jsx(_t,{}),selectionLabel:"idea",pagination:{currentPage:O,totalPages:oe,totalCount:X,onPageChange:V},selection:{selectedIds:G,onSelectionChange:y},sorting:{sortBy:v,sortDirection:M,onSort:k},headerMetrics:ne,onFilterReset:()=>{w(""),P(""),N(""),z(""),Z(""),V(1)}}),e.jsx(Rt,{isOpen:f.isOpen,title:f.title,percentage:f.progress.percentage,status:f.progress.status,message:f.progress.message,details:f.progress.details,taskId:f.taskId||void 0,functionId:f.functionId,stepLogs:f.stepLogs,onClose:()=>{const j=f.progress.status==="completed";f.closeModal(),j&&o()}}),e.jsx(Mt,{isOpen:U,onClose:()=>{B(!1),pe()},onSubmit:ie,title:F?"Edit Idea":"Add Idea",submitLabel:F?"Update":"Create",fields:de.formFields(m)})]})}const Tr=Object.freeze(Object.defineProperty({__proto__:null,default:pr},Symbol.toStringTag,{value:"Module"}));function hr(){const t=Ge(),{activeSite:s}=Et(),{activeSector:n,loadSectorsForSite:r}=We(),{pageSize:p}=Xe(),[m,g]=a.useState([]),[d,u]=a.useState(!0),[h,w]=a.useState(!1),[i,P]=a.useState([]),K=a.useRef(new Set),[N,R]=a.useState(1),[z,I]=a.useState(1),[Z,G]=a.useState(0),[y,O]=a.useState("keyword"),[V,oe]=a.useState("asc"),[T,X]=a.useState(""),[C,v]=a.useState(""),[H,M]=a.useState(""),[Y,x]=a.useState(""),[E,U]=a.useState("");a.useEffect(()=>{s!=null&&s.id&&r(s.id)},[s==null?void 0:s.id]);const B=a.useCallback(async()=>{if(!s||!s.industry){g([]),G(0),I(1),u(!1);return}u(!0),w(!1);try{let c=new Set;try{const{fetchKeywords:ie,fetchSiteSectors:j}=await lt(async()=>{const{fetchKeywords:q,fetchSiteSectors:ge}=await import("./page-dashboard-CuOyqq-s.js").then(ke=>ke.ag);return{fetchKeywords:q,fetchSiteSectors:ge}},__vite__mapDeps([4,1,0,2,3,5,6,7,8,9,10,11,12,13])),W=await j(s.id);for(const q of W)try{((await ie({site_id:s.id,sector_id:q.id,page_size:1e3})).results||[]).forEach(ke=>{const Ce=ke.seed_keyword_id||ke.seed_keyword&&ke.seed_keyword.id;Ce&&c.add(Number(Ce))})}catch(ge){console.warn(`Could not fetch attached keywords for sector ${q.id}:`,ge)}}catch(ie){console.warn("Could not fetch sectors or attached keywords:",ie)}const f={industry:s.industry,page_size:1e3};n&&n.industry_sector&&(f.sector=n.industry_sector),T&&(f.search=T),C&&(f.intent=C);let o=[],k=1,A=!0;for(;A;){const ie={...f,page:k},j=await jt(ie);if(j.results&&j.results.length>0&&(o=[...o,...j.results]),A=j.next!==null&&j.next!==void 0,k++,k>100){console.warn("Reached maximum page limit (100) while fetching seed keywords");break}}let Q=o.map(ie=>{const j=c.has(Number(ie.id))||K.current.has(Number(ie.id));return{...ie,isAdded:!!j}});if(H){const ie=parseInt(H),j=At(ie);if(j!==null){const W=Pt(j);W&&(Q=Q.filter(q=>q.difficulty>=W.min&&q.difficulty<=W.max))}}Y!==""&&Y!==null&&Y!==void 0&&(Q=Q.filter(ie=>ie.volume>=Number(Y))),E!==""&&E!==null&&E!==void 0&&(Q=Q.filter(ie=>ie.volume<=Number(E))),y&&Q.sort((ie,j)=>{let W,q;if(y==="keyword")W=ie.keyword.toLowerCase(),q=j.keyword.toLowerCase();else if(y==="volume")W=ie.volume,q=j.volume;else if(y==="difficulty")W=ie.difficulty,q=j.difficulty;else if(y==="intent")W=ie.intent.toLowerCase(),q=j.intent.toLowerCase();else return 0;return W<q?V==="asc"?-1:1:W>q?V==="asc"?1:-1:0});const he=Q.length,te=p||10,de=(N-1)*te,ne=de+te,pe=Q.slice(de,ne);g(pe),G(he),I(Math.ceil(he/te)),w(!0)}catch(c){console.error("Error loading seed keywords:",c),t.error(`Failed to load keyword opportunities: ${c.message}`),g([]),G(0),I(1)}finally{u(!1)}},[s,n,N,p,T,C,H,Y,E,y,V]);a.useEffect(()=>{B()},[B]),a.useEffect(()=>{const c=setTimeout(()=>{R(1)},500);return()=>clearTimeout(c)},[T]),a.useEffect(()=>{R(1)},[p]);const F=(c,f)=>{O(c||"keyword"),oe(f),R(1)},D=a.useCallback(async c=>{var o;if(!s){t.error("Please select an active site first");return}let f=n;if(!f)try{const{fetchSiteSectors:k}=await lt(async()=>{const{fetchSiteSectors:Q}=await import("./page-dashboard-CuOyqq-s.js").then(he=>he.ag);return{fetchSiteSectors:Q}},__vite__mapDeps([4,1,0,2,3,5,6,7,8,9,10,11,12,13])),A=await k(s.id);if(A.length===0){t.error("No sectors available for this site. Please create a sector first.");return}f={id:A[0].id,name:A[0].name,slug:A[0].slug,site_id:s.id,is_active:A[0].is_active!==!1,industry_sector:A[0].industry_sector||null}}catch(k){t.error(`Failed to get sectors: ${k.message}`);return}try{const k=await As(c,s.id,f.id);k.success?(t.success(`Successfully added ${k.created} keyword(s) to workflow`),c.forEach(A=>{K.current.add(A)}),P([]),g(A=>A.map(Q=>c.includes(Q.id)?{...Q,isAdded:!0}:Q))):t.error(`Failed to add keywords: ${((o=k.errors)==null?void 0:o.join(", "))||"Unknown error"}`)}catch(k){t.error(`Failed to add keywords: ${k.message}`)}},[s,n,t]),ce=a.useCallback(async c=>{if(c.length===0){t.error("Please select at least one keyword");return}const f=c.filter(k=>{const A=m.find(Q=>String(Q.id)===k);return A&&!A.isAdded});if(f.length===0){t.error("All selected keywords are already added to workflow");return}f.length<c.length&&t.info(`${c.length-f.length} keyword(s) were already added and were skipped`);const o=f.map(k=>parseInt(k));await D(o)},[D,t,m]),se=a.useCallback(async()=>{if(!s||!s.industry){t.error("Please select an active site first");return}try{const c={industry:s.industry,page_size:1e3};n!=null&&n.industry_sector&&(c.sector=n.industry_sector);const o=(await jt(c)).results||[];if(o.length===0){t.error("No keywords available to add");return}const{fetchKeywords:k,fetchSiteSectors:A}=await lt(async()=>{const{fetchKeywords:ne,fetchSiteSectors:pe}=await import("./page-dashboard-CuOyqq-s.js").then(ie=>ie.ag);return{fetchKeywords:ne,fetchSiteSectors:pe}},__vite__mapDeps([4,1,0,2,3,5,6,7,8,9,10,11,12,13])),Q=await A(s.id);let he=new Set;for(const ne of Q)try{((await k({site_id:s.id,sector_id:ne.id,page_size:1e3})).results||[]).forEach(ie=>{const j=ie.seed_keyword_id||ie.seed_keyword&&ie.seed_keyword.id;j&&he.add(Number(j))})}catch(pe){console.warn(`Could not fetch attached keywords for sector ${ne.id}:`,pe)}const te=o.filter(ne=>!he.has(ne.id));if(te.length===0){t.error("All keywords are already added to workflow");return}te.length<o.length&&t.info(`${o.length-te.length} keyword(s) were already added and were skipped`);const de=te.map(ne=>ne.id);await D(de)}catch(c){t.error(`Failed to load all keywords: ${c.message}`)}},[s,n,D,t]),ee=a.useMemo(()=>({columns:[{key:"keyword",label:"Keyword",sortable:!0,sortField:"keyword"},...!n?[{key:"sector_name",label:"Sector",sortable:!1,render:(f,o)=>e.jsx(Ue,{color:"info",size:"sm",variant:"light",children:o.sector_name||"-"})}]:[],{key:"volume",label:"Volume",sortable:!0,sortField:"volume",render:f=>f.toLocaleString()},{key:"difficulty",label:"Difficulty",sortable:!0,sortField:"difficulty",align:"center",render:f=>{const o=Rs(f),k=typeof o=="number"&&o===5?"solid":typeof o=="number"&&(o===2||o===3||o===4)?"light":typeof o=="number"&&o===1?"solid":"light",A=typeof o=="number"&&o===1||typeof o=="number"&&o===2?"success":typeof o=="number"&&o===3?"warning":typeof o=="number"&&o===4||typeof o=="number"&&o===5?"error":"light";return typeof o=="number"?e.jsx(Ue,{color:A,variant:k,size:"sm",children:o}):o}},{key:"intent",label:"Intent",sortable:!0,sortField:"intent",render:f=>{const o=k=>{const A=(k==null?void 0:k.toLowerCase())||"";return A==="transactional"||A==="commercial"?"success":A==="navigational"?"warning":"info"};return e.jsx(Ue,{color:o(f),size:"sm",variant:(f==null?void 0:f.toLowerCase())==="informational"?"light":void 0,children:f})}}],filters:[{key:"search",label:"Search",type:"text",placeholder:"Search keywords..."},{key:"intent",label:"Intent",type:"select",options:[{value:"",label:"All Intent"},{value:"informational",label:"Informational"},{value:"navigational",label:"Navigational"},{value:"transactional",label:"Transactional"},{value:"commercial",label:"Commercial"}]},{key:"difficulty",label:"Difficulty",type:"select",options:[{value:"",label:"All Difficulty"},{value:"1",label:"1 - Very Easy"},{value:"2",label:"2 - Easy"},{value:"3",label:"3 - Medium"},{value:"4",label:"4 - Hard"},{value:"5",label:"5 - Very Hard"}]}]}),[n]);return e.jsxs(e.Fragment,{children:[e.jsx(Qe,{title:"Keyword Opportunities",badge:{icon:e.jsx(It,{}),color:"orange"}}),e.jsx(dt,{columns:ee.columns,data:m,loading:d,showContent:h,filters:ee.filters,filterValues:{search:T,intent:C,difficulty:H},onFilterChange:(c,f)=>{const o=f==null?"":String(f);c==="search"?X(o):c==="intent"?(v(o),R(1)):c==="difficulty"&&(M(o),R(1))},onRowAction:async(c,f)=>{if(c==="add_to_workflow"){if(f.isAdded){t.info("This keyword is already added to workflow");return}await D([f.id])}},onBulkAction:async(c,f)=>{c==="add_selected_to_workflow"&&await ce(f)},onCreate:se,createLabel:"Add All to Workflow",onCreateIcon:e.jsx(He,{}),pagination:{currentPage:N,totalPages:z,totalCount:Z,onPageChange:R},sorting:{sortBy:y,sortDirection:V,onSort:F},selection:{selectedIds:i,onSelectionChange:P}})]})}const Or=Object.freeze(Object.defineProperty({__proto__:null,default:hr},Symbol.toStringTag,{value:"Module"}));export{Rr as C,Pr as D,Mt as F,Ar as H,Tr as I,Mr as K,wt as P,ot as S,dt as T,Bs as W,Tt as a,lr as b,Rt as c,Vs as d,Or as e,Xe as u};