22 lines
125 KiB
JavaScript
22 lines
125 KiB
JavaScript
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} In‑article 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} In‑article 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} In‑article Image Prompts ready for image generation`:"Featured Image Prompt ready for image generation"}return"Featured Image and X In‑article 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 In‑article 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+In‑article/i)||B(/(\d+)\s+In-article/i);if(c)return`Writing ${c} In‑article 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]} In‑article Image Prompts`}return"Writing X In‑article 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};
|