Files
igny8/frontend/dist/assets/js/pages-planner-Biqt-k6C.js
2025-11-10 06:41:37 +00:00

4 lines
105 KiB
JavaScript

const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/js/page-dashboard-DxYTR5eF.js","assets/js/vendor-react-core-DjsjKnCi.js","assets/js/vendor-other-CdRIx1s3.js","assets/css/vendor-other-BsM4JrO0.css","assets/js/page-analytics.tsx-1KCk8AGD.js","assets/js/vendor-helmet-MZDArkdS.js","assets/js/vendor-state-CYwAWrAU.js"])))=>i.map(i=>d[i]);
import{r,j as e,R as Ce}from"./vendor-react-core-DjsjKnCi.js";import{u as Ut,L as Fe,a as Ht}from"./vendor-react-router-BJY_70Cr.js";import{P as qt,C as We}from"./page-analytics.tsx-1KCk8AGD.js";import{f as Dt,g as zt,b as bt,h as Wt,S as Gt,i as Jt,c as Qt,j as wt,k as Bt,B as je,L as st,l as Yt,m as Xt,n as Zt,I as es,C as Lt,o as Ge,p as ts,q as ss,a as kt}from"./page-authpages-CY7hjDHU.js";import{g as Ot,_ as Pe,h as rs,i as as,A as vt,j as ns,k as os,l as ls,m as is,n as cs,a as xt,o as rt,u as ds,p as us,q as gs,r as Pt,s as ms,t as fs,v as ps,w as hs,x as xs,y as ys,z as Rt,B as bs,C as ws,D as ks,E as vs,F as Ss}from"./page-dashboard-DxYTR5eF.js";import{e as St,h as jt,j as js,B as ft,g as Ns}from"./page-clusters.config.tsx-9GAd-_h-.js";import{u as Je}from"./page-reference-aC0iABvU.js";import{M as Qe,D as yt,a as at,A as Cs}from"./page-components.tsx-DYfg5dka.js";import{c as _s}from"./page-keywords.config.tsx-CxJn1kF1.js";import{c as Is}from"./page-ideas.config.tsx-Cr6kWRFa.js";import{g as Es}from"./page-delete-modal.config.ts-B7nUJ-QI.js";import{g as Ms}from"./page-bulk-action-modal.config.ts-D-0XtKwF.js";import{g as $s}from"./page-table-actions.config.tsx-BSR5Zo7l.js";import{c as Nt,p as Ct}from"./vendor-state-CYwAWrAU.js";const Kt=r.createContext(void 0),As=()=>{const t=r.useContext(Kt);if(!t)throw new Error("useHeaderMetrics must be used within a HeaderMetricsProvider");return t},yr=({children:t})=>{const[s,a]=r.useState([]),o=()=>{a([])};return e.jsx(Kt.Provider,{value:{metrics:s,setMetrics:a,clearMetrics:o},children:t})},_t=Nt()(Ct((t,s)=>({activeSite:null,loading:!1,error:null,setActiveSite:a=>{if(t({activeSite:a,error:null}),typeof window<"u")try{const o=s();localStorage.setItem("site-storage",JSON.stringify({state:{activeSite:a},version:0}))}catch(o){console.warn("Failed to persist site to localStorage:",o)}window.dispatchEvent(new CustomEvent("siteChanged",{detail:{siteId:a==null?void 0:a.id}})),a&&typeof window<"u"&&Pe(async()=>{const{useSectorStore:o}=await Promise.resolve().then(()=>Ts);return{useSectorStore:o}},void 0).then(({useSectorStore:o})=>{o.getState().loadSectorsForSite(a.id)}).catch(()=>{})},loadActiveSite:async()=>{t({loading:!0,error:null});try{const o=(await Ot()).results||[],c=o.filter(m=>m.is_active),g=s().activeSite;let u=null;if(g){const m=o.find(p=>p.id===g.id);m&&m.is_active?u=m:(m&&m.is_active,u=c.length>0?c[0]:null)}else c.length>0&&(u=c[0]);if(t({activeSite:u,loading:!1}),u&&typeof window<"u")try{localStorage.setItem("site-storage",JSON.stringify({state:{activeSite:u},version:0}))}catch(m){console.warn("Failed to persist site to localStorage:",m)}}catch(a){t({error:a.message||"Failed to load active site",loading:!1})}},refreshActiveSite:async()=>{const a=s().activeSite;if(!a){await s().loadActiveSite();return}t({loading:!0,error:null});try{const c=((await Ot()).results||[]).find(g=>g.id===a.id);c&&c.is_active?t({activeSite:c,loading:!1}):await s().loadActiveSite()}catch(o){t({error:o.message||"Failed to refresh active site",loading:!1})}}}),{name:"site-storage",partialize:t=>({activeSite:t.activeSite})})),Be=Nt()(Ct((t,s)=>({activeSector:null,sectors:[],loading:!1,error:null,setActiveSector:a=>{if(t({activeSector:a,error:null}),typeof window<"u")try{const o=s();localStorage.setItem("sector-storage",JSON.stringify({state:{activeSector:a},version:0}))}catch(o){console.warn("Failed to persist sector to localStorage:",o)}window.dispatchEvent(new CustomEvent("sectorChanged",{detail:{sectorId:a==null?void 0:a.id,siteId:a==null?void 0:a.site_id}}))},loadSectorsForSite:async a=>{t({loading:!0,error:null});try{if(!a)return t({sectors:[],loading:!1}),[];const c=(await rs(a)).map(u=>({id:u.id,name:u.name,slug:u.slug,site_id:a,is_active:u.is_active!==!1,industry_sector:u.industry_sector||null}));t({sectors:c,loading:!1});const g=s().activeSector;if(g&&g.site_id!==a){if(t({activeSector:null}),typeof window<"u")try{localStorage.setItem("sector-storage",JSON.stringify({state:{activeSector:null},version:0}))}catch(u){console.warn("Failed to persist sector to localStorage:",u)}window.dispatchEvent(new CustomEvent("sectorChanged",{detail:{sectorId:null,siteId:a}}))}else if(g&&g.site_id===a&&!c.find(m=>m.id===g.id)){if(t({activeSector:null}),typeof window<"u")try{localStorage.setItem("sector-storage",JSON.stringify({state:{activeSector:null},version:0}))}catch(m){console.warn("Failed to persist sector to localStorage:",m)}window.dispatchEvent(new CustomEvent("sectorChanged",{detail:{sectorId:null,siteId:a}}))}return c}catch(o){return o.status===403||o.status===404?(console.warn(`Cannot load sectors for site ${a}: site may be inactive or inaccessible`),t({sectors:[],activeSector:null,loading:!1,error:null}),[]):(t({error:o.message||"Failed to load sectors",loading:!1}),[])}},clearActiveSector:()=>{if(t({activeSector:null,sectors:[],error:null}),typeof window<"u")try{localStorage.setItem("sector-storage",JSON.stringify({state:{activeSector:null},version:0}))}catch(a){console.warn("Failed to persist sector to localStorage:",a)}}}),{name:"sector-storage",partialize:t=>({activeSector:t.activeSector})})),Ts=Object.freeze(Object.defineProperty({__proto__:null,useSectorStore:Be},Symbol.toStringTag,{value:"Module"})),ze=({value:t,color:s="primary",size:a="md",showLabel:o=!1,label:c,className:g=""})=>{const u={sm:"h-1",md:"h-2",lg:"h-3"},m={primary:"bg-brand-500",success:"bg-success-500",error:"bg-error-500",warning:"bg-warning-500",info:"bg-blue-light-500"},p=Math.min(100,Math.max(0,t));return e.jsxs("div",{className:g,children:[o&&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:c||`${p}%`}),e.jsxs("span",{className:"text-sm text-gray-500 dark:text-gray-400",children:[p,"%"]})]}),e.jsx("div",{className:`w-full rounded-full bg-gray-200 dark:bg-gray-700 ${u[a]}`,children:e.jsx("div",{className:`rounded-full transition-all duration-300 ${u[a]} ${m[s]}`,style:{width:`${p}%`}})})]})};function Ls(){const t=Ut(),s={keywords:245,clusters:18,ideas:52,mappedKeywords:180,clustersWithIdeas:12,queuedIdeas:35},a=Math.round(s.mappedKeywords/s.keywords*100),o=Math.round(s.clustersWithIdeas/s.clusters*100),c=Math.round(s.queuedIdeas/s.ideas*100),g=[{number:1,title:"Add Keywords",status:"completed",count:s.keywords,path:"/planner/keywords"},{number:2,title:"Select Sector",status:"completed",count:null,path:"/planner"},{number:3,title:"Auto Cluster",status:"pending",count:s.clusters,path:"/planner/clusters"},{number:4,title:"Generate Ideas",status:"pending",count:s.ideas,path:"/planner/ideas"}],u=[{name:"SEO Optimization",volume:45800,keywords:24},{name:"Content Marketing",volume:32100,keywords:18},{name:"Link Building",volume:28700,keywords:15},{name:"Keyword Research",volume:24100,keywords:12},{name:"Analytics",volume:18900,keywords:9}],m=[{status:"New",count:20,color:"blue"},{status:"Scheduled",count:15,color:"amber"},{status:"Published",count:17,color:"green"}],p=[{text:"65 keywords unmapped",action:"Map Keywords",path:"/planner/keywords"},{text:"6 clusters without ideas",action:"Generate Ideas",path:"/planner/ideas"},{text:"17 ideas not queued to writer",action:"Queue to Writer",path:"/writer/tasks"}];return e.jsxs(e.Fragment,{children:[e.jsx(qt,{title:"Planner Dashboard - IGNY8",description:"Content planning overview"}),e.jsxs("div",{className:"space-y-5 sm:space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4 md:gap-6",children:[e.jsxs(Fe,{to:"/planner/keywords",className:"rounded-2xl border border-gray-200 bg-white p-5 dark:border-gray-800 dark:bg-white/[0.03] md:p-6 hover:shadow-md transition-shadow cursor-pointer group relative overflow-hidden",children:[e.jsx("div",{className:"absolute left-0 top-0 bottom-0 w-1 bg-brand-500"}),e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400",children:"Keywords Ready"}),e.jsx("h4",{className:"mt-2 font-bold text-gray-800 text-title-sm dark:text-white/90",children:s.keywords.toLocaleString()}),e.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400 mt-1",children:"Research, analyze, and manage keywords strategy"})]}),e.jsx("div",{className:"flex items-center justify-center w-12 h-12 bg-blue-50 rounded-xl dark:bg-blue-500/10 group-hover:bg-blue-100 dark:group-hover:bg-blue-500/20 transition-colors",children:e.jsx(Dt,{className:"text-brand-500 size-6"})})]})]}),e.jsxs(Fe,{to:"/planner/clusters",className:"rounded-2xl border border-gray-200 bg-white p-5 dark:border-gray-800 dark:bg-white/[0.03] md:p-6 hover:shadow-md transition-shadow cursor-pointer group relative overflow-hidden",children:[e.jsx("div",{className:"absolute left-0 top-0 bottom-0 w-1 bg-success-500"}),e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400",children:"Clusters Built"}),e.jsx("h4",{className:"mt-2 font-bold text-gray-800 text-title-sm dark:text-white/90",children:s.clusters.toLocaleString()}),e.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400 mt-1",children:"Organize keywords into strategic topical clusters"})]}),e.jsx("div",{className:"flex items-center justify-center w-12 h-12 bg-green-50 rounded-xl dark:bg-green-500/10 group-hover:bg-green-100 dark:group-hover:bg-green-500/20 transition-colors",children:e.jsx(zt,{className:"text-success-500 size-6"})})]})]}),e.jsxs(Fe,{to:"/planner/ideas",className:"rounded-2xl border border-gray-200 bg-white p-5 dark:border-gray-800 dark:bg-white/[0.03] md:p-6 hover:shadow-md transition-shadow cursor-pointer group relative overflow-hidden",children:[e.jsx("div",{className:"absolute left-0 top-0 bottom-0 w-1 bg-warning-500"}),e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400",children:"Ideas Generated"}),e.jsx("h4",{className:"mt-2 font-bold text-gray-800 text-title-sm dark:text-white/90",children:s.ideas.toLocaleString()}),e.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400 mt-1",children:"Generate creative content ideas based on semantic strategy"})]}),e.jsx("div",{className:"flex items-center justify-center w-12 h-12 bg-amber-50 rounded-xl dark:bg-amber-500/10 group-hover:bg-amber-100 dark:group-hover:bg-amber-500/20 transition-colors",children:e.jsx(bt,{className:"text-warning-500 size-6"})})]})]}),e.jsxs(Fe,{to:"/planner/keywords",className:"rounded-2xl border border-gray-200 bg-white p-5 dark:border-gray-800 dark:bg-white/[0.03] md:p-6 hover:shadow-md transition-shadow cursor-pointer group relative overflow-hidden",children:[e.jsx("div",{className:"absolute left-0 top-0 bottom-0 w-1 bg-purple-500"}),e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400",children:"Mapped Keywords"}),e.jsx("h4",{className:"mt-2 font-bold text-gray-800 text-title-sm dark:text-white/90",children:s.mappedKeywords.toLocaleString()}),e.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400 mt-1",children:"Keywords successfully mapped to content pages"})]}),e.jsx("div",{className:"flex items-center justify-center w-12 h-12 bg-purple-50 rounded-xl dark:bg-purple-500/10 group-hover:bg-purple-100 dark:group-hover:bg-purple-500/20 transition-colors",children:e.jsx(Wt,{className:"text-purple-500 size-6"})})]})]})]}),e.jsx(We,{title:"Planner Workflow Steps",desc:"Track your planning progress",children:e.jsx("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",children:g.map(d=>e.jsxs(Fe,{to:d.path,className:"rounded-xl border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900/50 hover:border-brand-300 hover:bg-brand-50 dark:hover:bg-brand-500/10 transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-3",children:[e.jsx("div",{className:"flex items-center justify-center w-8 h-8 bg-white border-2 border-gray-300 rounded-full text-sm font-semibold text-gray-600 dark:bg-gray-800 dark:border-gray-700 dark:text-gray-400",children:d.number}),e.jsx("h4",{className:"font-medium text-gray-800 dark:text-white/90",children:d.title})]}),e.jsx("div",{className:"flex items-center justify-between text-sm",children:e.jsx("div",{className:"flex items-center gap-1.5",children:d.status==="completed"?e.jsxs(e.Fragment,{children:[e.jsx(Gt,{className:"size-4 text-success-500"}),e.jsx("span",{className:"text-gray-600 dark:text-gray-300 font-medium",children:"Completed"})]}):e.jsxs(e.Fragment,{children:[e.jsx(Jt,{className:"size-4 text-amber-500"}),e.jsx("span",{className:"text-gray-600 dark:text-gray-300 font-medium",children:"Pending"})]})})}),d.count!==null&&e.jsxs("p",{className:"mt-2 text-xs text-gray-600 dark:text-gray-400",children:[d.count," ",d.title.includes("Keywords")?"keywords":d.title.includes("Clusters")?"clusters":"ideas"," ",d.status==="completed"?"added":""]}),d.status==="pending"&&e.jsx("button",{type:"button",onClick:f=>{f.preventDefault(),f.stopPropagation(),t(d.path)},className:"mt-3 inline-block text-xs font-medium text-brand-500 hover:text-brand-600 cursor-pointer",children:"Start Now →"})]},d.number))})}),e.jsxs("div",{className:"grid grid-cols-1 gap-6 lg:grid-cols-3",children:[e.jsx(We,{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:[a,"%"]})]}),e.jsx(ze,{value:a,color:"primary",size:"md"}),e.jsxs("p",{className:"mt-1 text-xs text-gray-500 dark:text-gray-400",children:[s.mappedKeywords," of ",s.keywords," 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:[o,"%"]})]}),e.jsx(ze,{value:o,color:"success",size:"md"}),e.jsxs("p",{className:"mt-1 text-xs text-gray-500 dark:text-gray-400",children:[s.clustersWithIdeas," of ",s.clusters," 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:[c,"%"]})]}),e.jsx(ze,{value:c,color:"warning",size:"md"}),e.jsxs("p",{className:"mt-1 text-xs text-gray-500 dark:text-gray-400",children:[s.queuedIdeas," of ",s.ideas," ideas queued"]})]})]})}),e.jsx(We,{title:"Top 5 Clusters by Volume",desc:"Highest volume keyword clusters",className:"lg:col-span-1",children:e.jsx("div",{className:"space-y-4",children:u.map((d,f)=>{const n=u[0].volume,x=Math.round(d.volume/n*100);return e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsx("span",{className:"text-sm font-medium text-gray-800 dark:text-white/90",children:d.name}),e.jsx("span",{className:"text-sm font-semibold text-gray-600 dark:text-gray-400",children:d.volume.toLocaleString()})]}),e.jsx(ze,{value:x,color:f%2===0?"primary":"success",size:"sm"})]},f)})})}),e.jsx(We,{title:"Ideas by Status",desc:"Content ideas workflow status",className:"lg:col-span-1",children:e.jsx("div",{className:"space-y-4",children:m.map((d,f)=>{const n=m.reduce((L,z)=>L+z.count,0),x=Math.round(d.count/n*100);return e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsx("span",{className:"text-sm font-medium text-gray-800 dark:text-white/90",children:d.status}),e.jsx("span",{className:"text-sm font-semibold text-gray-600 dark:text-gray-400",children:d.count})]}),e.jsx(ze,{value:x,color:d.color==="blue"?"primary":d.color==="amber"?"warning":"success",size:"sm"})]},f)})})})]}),e.jsx(We,{title:"Next Actions",desc:"Actionable items requiring attention",children:e.jsx("div",{className:"space-y-3",children:p.map((d,f)=>e.jsxs("div",{className:"flex items-center justify-between p-3 rounded-lg bg-gray-50 dark:bg-gray-900/50 border border-gray-200 dark:border-gray-800",children:[e.jsx("span",{className:"text-sm text-gray-700 dark:text-gray-300",children:d.text}),e.jsxs(Fe,{to:d.path,className:"inline-flex items-center gap-1 text-sm font-medium text-brand-500 hover:text-brand-600",children:[d.action,e.jsx(Qt,{className:"size-4"})]})]},f))})})]})]})}const br=Object.freeze(Object.defineProperty({__proto__:null,default:Ls},Symbol.toStringTag,{value:"Module"})),Os=({children:t,className:s})=>e.jsx("table",{className:`min-w-full w-full ${s}`,children:t}),Ps=({children:t,className:s})=>e.jsx("thead",{className:s,children:t}),Rs=({children:t,className:s})=>e.jsx("tbody",{className:s,children:t}),pt=({children:t,className:s})=>e.jsx("tr",{className:s,children:t}),De=({children:t,isHeader:s=!1,className:a})=>{const o=s?"th":"td";return e.jsx(o,{className:` ${a}`,children:t})},nt=({options:t,placeholder:s="Select an option",onChange:a,className:o="",defaultValue:c="",value:g,disabled:u=!1})=>{const m=g!==void 0,[p,d]=r.useState(!1),[f,n]=r.useState(c),x=m?g||"":f,L=r.useRef(null),z=r.useRef(null);r.useEffect(()=>{m||n(c)},[c,m]);const F=String(x||""),le=t.find($=>String($.value||"")===F),q=le?le.label:s,ie=!le;r.useEffect(()=>{const $=A=>{L.current&&!L.current.contains(A.target)&&z.current&&!z.current.contains(A.target)&&d(!1)};if(p)return document.addEventListener("mousedown",$),()=>{document.removeEventListener("mousedown",$)}},[p]);const C=$=>{const A=$==null?"":String($);m||n(A),a(A),d(!1)},M=$=>{$.key==="Escape"?d(!1):($.key==="Enter"||$.key===" ")&&($.preventDefault(),d(!p))};return e.jsxs("div",{className:`relative ${o}`,children:[e.jsxs("button",{ref:z,type:"button",onClick:()=>!u&&d(!p),disabled:u,onKeyDown:M,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 ${ie?"text-gray-400 dark:text-gray-400":"text-gray-800 dark:text-white/90"} ${p?"border-brand-300 ring-3 ring-brand-500/10 dark:border-brand-800":""} ${u?"opacity-50 cursor-not-allowed":""}`,children:[e.jsx("span",{className:"block text-left truncate",children:q}),e.jsx("span",{className:"absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none",children:e.jsx(wt,{className:`h-4 w-4 text-gray-400 transition-transform ${p?"transform rotate-180":""}`})})]}),p&&e.jsx("div",{ref:L,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($=>{const A=String($.value||""),P=String(x||"")===A;return e.jsxs("button",{type:"button",onClick:h=>{h.preventDefault(),h.stopPropagation(),C(A)},className:`w-full text-left px-3 py-2 text-sm transition-colors flex items-center gap-2 ${P?"bg-brand-500 text-white":"text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-800"}`,children:[$.icon&&e.jsx("span",{className:"flex-shrink-0",children:$.icon}),e.jsx("span",{children:$.label})]},`option-${$.value||"empty"}-${$.label}`)})})})]})};function Fs({isOpen:t,onClose:s,onConfirm:a,title:o,message:c,confirmText:g="Export",isLoading:u=!1}){return e.jsx(Qe,{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(Bt,{className:"w-5 h-5 text-blue-500"})}),e.jsx("h2",{className:"text-xl font-bold text-gray-800 dark:text-white",children:o})]}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400 mb-6",children:c}),e.jsxs("div",{className:"flex justify-end gap-4",children:[e.jsx(je,{variant:"outline",onClick:s,disabled:u,children:"Cancel"}),e.jsx(je,{variant:"primary",onClick:a,disabled:u,children:u?"Exporting...":g})]})]})})}function Ds({isOpen:t,onClose:s,onConfirm:a,title:o,message:c,confirmText:g="Update Status",statusOptions:u,isLoading:m=!1}){const[p,d]=r.useState(""),f=async()=>{p&&(await a(p),d(""))},n=()=>{d(""),s()};return e.jsx(Qe,{isOpen:t,onClose:n,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(Bt,{className:"w-5 h-5 text-blue-500"})}),e.jsx("h2",{className:"text-xl font-bold text-gray-800 dark:text-white",children:o})]}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400 mb-4",children:c}),e.jsxs("div",{className:"mb-6",children:[e.jsx(st,{className:"mb-2",children:"New Status"}),e.jsx(nt,{options:u,placeholder:"Select status",value:p,onChange:x=>d(x||""),className:"w-full"})]}),e.jsxs("div",{className:"flex justify-end gap-4",children:[e.jsx(je,{variant:"outline",onClick:n,disabled:m,children:"Cancel"}),e.jsx(je,{variant:"primary",onClick:f,disabled:m||!p,children:m?"Updating...":g})]})]})})}const zs=({currentPage:t,totalPages:s,pageSize:a,onPageChange:o,onPageSizeChange:c,className:g=""})=>{const m=(()=>{const f=[];if(s<=7)for(let n=1;n<=s;n++)f.push(n);else if(t<=3){for(let n=1;n<=5;n++)f.push(n);f.push("..."),f.push(s)}else if(t>=s-2){f.push(1),f.push("...");for(let n=s-4;n<=s;n++)f.push(n)}else{f.push(1),f.push("...");for(let n=t-1;n<=t+1;n++)f.push(n);f.push("..."),f.push(s)}return f})(),p=t===1,d=t===s;return e.jsxs("div",{className:`flex items-center gap-3 ${g}`,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:a,onChange:f=>c(Number(f.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:()=>!p&&o(t-1),disabled:p,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(Yt,{className:"w-4 h-4"})}),e.jsx("div",{className:"flex items-center gap-0.5",children:m.map((f,n)=>{if(f==="...")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-${n}`);const x=f,L=x===t;return e.jsx("button",{className:`flex items-center justify-center w-7 h-7 text-xs font-medium rounded-lg transition-colors ${L?"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:()=>o(x),type:"button","aria-label":`Go to page ${x}`,"aria-current":L?"page":void 0,children:x},x)})}),e.jsx("button",{onClick:()=>!d&&o(t+1),disabled:d,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(Xt,{className:"w-4 h-4"})})]})]})};function Bs(){const{activeSite:t}=_t(),{activeSector:s,sectors:a,setActiveSector:o,loading:c}=Be(),[g,u]=r.useState(!1),m=r.useRef(null);if(!t)return null;if(!c&&a.length===0)return e.jsx("div",{className:"flex items-center gap-2 px-3 py-2 text-sm text-gray-500 dark:text-gray-400",children:e.jsx("span",{children:"No sectors available"})});const p=d=>{if(d===null)o(null),u(!1);else{const f=a.find(n=>n.id===d);f&&(o(f),u(!1))}};return e.jsxs("div",{className:"relative inline-block",children:[e.jsxs("button",{ref:m,onClick:()=>u(!g),className:"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 dropdown-toggle","aria-label":"Select sector",disabled:c||a.length===0,children:[e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),e.jsx("span",{className:"max-w-[150px] truncate",children:c?"Loading...":(s==null?void 0:s.name)||"All Sectors"})]}),e.jsx("svg",{className:`w-4 h-4 transition-transform ${g?"rotate-180":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]}),e.jsxs(yt,{isOpen:g,onClose:()=>u(!1),anchorRef:m,placement:"bottom-right",className:"w-64 p-2 overflow-y-auto max-h-[300px]",children:[e.jsxs(at,{onItemClick:()=>p(null),className:`flex items-center gap-3 px-3 py-2 font-medium rounded-lg text-sm text-left ${s?"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":"bg-blue-50 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300"}`,children:[e.jsx("span",{className:"flex-1",children:"All Sectors"}),!s&&e.jsx("svg",{className:"w-4 h-4 text-blue-600 dark:text-blue-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"})})]}),a.map(d=>e.jsxs(at,{onItemClick:()=>p(d.id),className:`flex items-center gap-3 px-3 py-2 font-medium rounded-lg text-sm text-left ${(s==null?void 0:s.id)===d.id?"bg-blue-50 text-blue-700 dark:bg-blue-500/20 dark:text-blue-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-1",children:d.name}),(s==null?void 0:s.id)===d.id&&e.jsx("svg",{className:"w-4 h-4 text-blue-600 dark:text-blue-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"})})]},d.id))]})]})}const Ye=Nt()(Ct(t=>({pageSize:10,setPageSize:s=>t({pageSize:s})}),{name:"igny8-page-size"}));function Ks(t){if(!t)return"";const s=document.createElement("div");return s.innerHTML=t,s.querySelectorAll("script").forEach(c=>c.remove()),s.querySelectorAll("*").forEach(c=>{const g=c.attributes;for(let u=g.length-1;u>=0;u--){const m=g[u];m.name.startsWith("on")&&c.removeAttribute(m.name),(m.name==="href"||m.name==="src")&&m.value.startsWith("javascript:")&&c.removeAttribute(m.name)}}),s.innerHTML}function Vs(t){return t?/<[a-z][\s\S]*>/i.test(t):!1}function ht(t){if(!t)return"";let s='<div class="content-outline">';return t.introduction&&(s+='<div class="outline-intro">',typeof t.introduction=="string"?s+=`<div class="outline-paragraph">${he(t.introduction)}</div>`:typeof t.introduction=="object"&&(t.introduction.hook&&(s+=`<div class="outline-hook"><strong>Hook:</strong> ${he(t.introduction.hook)}</div>`),t.introduction.paragraphs&&Array.isArray(t.introduction.paragraphs)&&t.introduction.paragraphs.forEach((a,o)=>{a.details&&(s+=`<div class="outline-paragraph"><strong>Intro Paragraph ${o+1}:</strong> ${he(a.details)}</div>`)})),s+="</div>"),t.sections&&Array.isArray(t.sections)&&t.sections.forEach(a=>{if(a){if(s+='<div class="outline-section">',a.title){const o=a.title.replace(/^H2:\s*/i,"").trim();o.toLowerCase()==="conclusion"?s+=`<h3 class="section-heading">${he(o)}</h3>`:s+=`<h3 class="section-heading">${he(o)}</h3>`}a.content&&(Array.isArray(a.content)?a.content.forEach(o=>{if(o.title){const c=o.title.replace(/^H3:\s*/i,"").trim();s+=`<h4 class="subsection-heading">${he(c)}</h4>`}o.content&&(s+=`<div class="section-details">${he(String(o.content))}</div>`)}):typeof a.content=="string"&&(s+=`<div class="section-details">${he(a.content)}</div>`)),s+="</div>"}}),t.H2&&(Array.isArray(t.H2)?t.H2.forEach(a=>{if(a.heading||typeof a=="string"){s+='<div class="outline-section">';const o=a.heading||a;s+=`<h3 class="section-heading">${he(o)}</h3>`,a.content_type&&(s+=`<div class="content-type-badge">${he(a.content_type.replace("_"," ").toUpperCase())}</div>`),a.subsections&&Array.isArray(a.subsections)&&a.subsections.forEach(c=>{const g=c.subheading||c.heading||c;s+=`<h4 class="subsection-heading">${he(g)}</h4>`,c.details&&(s+=`<div class="section-details">${he(c.details)}</div>`)}),a.details&&(s+=`<div class="section-details">${he(a.details)}</div>`),s+="</div>"}}):typeof t.H2=="string"?(s+='<div class="outline-section">',s+=`<h3 class="section-heading">${he(t.H2)}</h3>`,s+="</div>"):typeof t.H2=="object"&&Object.entries(t.H2).forEach(([a,o])=>{s+='<div class="outline-section">',s+=`<h3 class="section-heading">${he(o)}</h3>`,s+="</div>"})),t.H3&&!t.H2&&(s+='<div class="outline-section">',typeof t.H3=="string"?s+=`<h4 class="subsection-heading">${he(t.H3)}</h4>`:typeof t.H3=="object"&&Object.entries(t.H3).forEach(([a,o])=>{s+=`<h4 class="subsection-heading">${he(o)}</h4>`}),s+="</div>"),s+="</div>",s}function he(t){const s=document.createElement("div");return s.textContent=t,s.innerHTML}const Us=({content:t,className:s="",maxHeight:a})=>{const o=r.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 ht(t);try{return Object.keys(t).length>0?ht(t):he(JSON.stringify(t,null,2))}catch{return he(JSON.stringify(t,null,2))}}if(typeof t=="string"){try{const m=JSON.parse(t);if(typeof m=="object"&&(m.H2||m.H3||m.introduction||m.sections))return ht(m)}catch{}if(Vs(t)){const m=Ks(t);return m.trim().startsWith("<article")||m.trim().startsWith("<div")?`<div class="normalized-html-content">${m}</div>`:`<div class="normalized-html-content"><article>${m}</article></div>`}const c=t.split(`
`);let g='<div class="content-outline">',u=!1;for(const m of c){const p=m.trim();if(!p){u&&(g+="</ul>",u=!1),g+="<br>";continue}if(p.match(/^[-*]\s+/)){u||(g+='<ul class="outline-list">',u=!0);const d=p.replace(/^[-*]\s+/,"");p.startsWith(" ")||p.startsWith(" ")?g+=`<li class="outline-item nested">${he(d)}</li>`:g+=`<li class="outline-item">${he(d)}</li>`}else if(p.match(/^[-*]\s*H2[:]/i)){u&&(g+="</ul>",u=!1);const d=p.replace(/^[-*]\s*H2[:]\s*/i,"");g+=`<h3 class="section-heading">${he(d)}</h3>`}else if(p.match(/^[-*]\s*H3[:]/i)){u&&(g+="</ul>",u=!1);const d=p.replace(/^[-*]\s*H3[:]\s*/i,"");g+=`<h4 class="subsection-heading">${he(d)}</h4>`}else u&&(g+="</ul>",u=!1),g+=`<p class="outline-paragraph">${he(p)}</p>`}return u&&(g+="</ul>"),g+="</div>",g}return he(String(t))},[t]);return e.jsx("div",{className:`html-content-renderer ${s}`,style:a?{maxHeight:a,overflow:"auto"}:void 0,dangerouslySetInnerHTML:{__html:o}})},Hs=({row:t,contentKey:s,contentLabel:a="Content",colSpan:o,isExpanded:c,defaultExpanded:g=!1,onToggle:u,className:m=""})=>{const[p,d]=r.useState(g),f=c!==void 0?c:p,[n,x]=r.useState("auto"),L=r.useRef(null);let z=t[s];(!z||typeof z=="string"&&z.trim().length===0)&&(z=t.description||t.content_outline||null);const F=z&&(typeof z=="string"?z.trim().length>0:typeof z=="object"&&z!==null&&Object.keys(z).length>0);return r.useEffect(()=>{if(f&&L.current){const le=L.current.scrollHeight;x(le)}else x(0)},[f,z]),!F||!f?null:e.jsx("tr",{className:`toggle-content-row expanded ${m}`,"aria-hidden":!1,children:e.jsx("td",{colSpan:o,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:L,className:"overflow-hidden",children:e.jsxs("div",{className:"py-4 px-2",children:[e.jsx("div",{className:"mb-2 text-xs font-semibold uppercase text-gray-500 dark:text-gray-400 tracking-wide",children:a}),e.jsx("div",{className:"html-content-wrapper",children:e.jsx(Us,{content:z,className:"text-sm text-gray-700 dark:text-gray-300 leading-relaxed"})})]})})})})},qs=({isExpanded:t,onClick:s,hasContent:a,className:o=""})=>a?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"} ${o}`,"aria-label":t?"Collapse content":"Expand content","aria-expanded":t,children:e.jsx(wt,{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 ${o}`,children:e.jsx(Zt,{className:"w-4 h-4"})});function ot({title:t,titleIcon:s,subtitle:a,columns:o,data:c,loading:g=!1,showContent:u=!0,filters:m=[],filterValues:p={},onFilterChange:d,onFilterReset:f,renderFilters:n,onEdit:x,onCreate:L,createLabel:z="+ Add",onCreateIcon:F,onExportCSV:le,onExportIcon:q,onImport:ie,onImportIcon:C,headerMetrics:M=[],selectionLabel:$="items",pagination:A,selection:N,sorting:P,onDelete:h,onBulkDelete:T,onBulkExport:H,onBulkUpdateStatus:V,onBulkAction:J,onRowAction:W,onExport:R,getItemDisplayName:U=K=>K.name||K.keyword||K.title||String(K.id),className:ee=""}){const K=Ht(),[S,O]=r.useState(!1),[ne,xe]=r.useState(new Map),de=Ce.useRef(new Map),j=Ce.useRef(null),v=Es(K.pathname),w=Ms(K.pathname),G=$s(K.pathname),X=(G==null?void 0:G.rowActions)||[],Q=(G==null?void 0:G.bulkActions)||[],[se,re]=r.useState((N==null?void 0:N.selectedIds)||[]),[fe,te]=r.useState(new Set),[ue,Z]=r.useState({isOpen:!1,items:[],isBulk:!1,isLoading:!1}),[y,I]=r.useState({isOpen:!1,itemCount:0,isLoading:!1}),[B,ce]=r.useState({isOpen:!1,itemCount:0,isLoading:!1}),{setMetrics:ve}=As(),ye=Je(),{pageSize:Le,setPageSize:k}=Ye(),Y=N!=null&&N.selectedIds?JSON.stringify(N.selectedIds):"";r.useEffect(()=>{N!=null&&N.selectedIds&&re(N.selectedIds)},[Y]);const oe=i=>{!h||!v||Z({isOpen:!0,items:[i],isBulk:!1,isLoading:!1})},ae=i=>{if(!T||!v)return;const E=c.filter(l=>i.includes(String(l.id)));Z({isOpen:!0,items:E,isBulk:!0,isLoading:!1})},we=async()=>{if(!(ue.items.length===0||!v)){Z(i=>({...i,isLoading:!0}));try{if(ue.isBulk){if(T){const i=ue.items.map(b=>b.id),E=await T(i),l=(E==null?void 0:E.deleted_count)||ue.items.length;ye.success(`${l} ${v.itemNamePlural} deleted successfully`)}}else h&&(await h(ue.items[0].id),ye.success(`${v.itemNameSingular.charAt(0).toUpperCase()+v.itemNameSingular.slice(1)} deleted successfully`));Z({isOpen:!1,items:[],isBulk:!1,isLoading:!1}),N&&N.onSelectionChange([])}catch(i){ye.error(`Failed to delete: ${i.message}`),Z(E=>({...E,isLoading:!1}))}}},Ee=async(i,E)=>{var l;xe(b=>{const _=new Map(b);return _.set(E.id||E,!1),_}),i==="edit"&&x?x(E):i==="delete"&&h&&v?oe(E):i==="export"&&R?await R(E):W?W(i,E).catch(b=>{ye.error(`Action failed: ${b.message}`)}):J?J(i,[((l=E.id)==null?void 0:l.toString())||String(E)]):ye.info(`Action "${i}" not yet implemented`)},be=(i,E)=>{if(!N)return;const l=N.selectedIds.length>0?N.selectedIds:E;if(i==="delete"&&T&&v)ae(l);else if(i==="export"&&H&&w){const b=l.length;I({isOpen:!0,itemCount:b,isLoading:!1})}else i==="update_status"&&V&&w?ce({isOpen:!0,itemCount:l.length,isLoading:!1}):J?J(i,l).catch(b=>{ye.error(`Bulk action failed: ${b.message}`)}):ye.info(`Bulk action "${i}" not yet implemented`);O(!1)},lt=async()=>{if(!H||!N)return;const i=N.selectedIds.length>0?N.selectedIds:se;I(E=>({...E,isLoading:!0}));try{await H(i),ye.success("Export successful"),I({isOpen:!1,itemCount:0,isLoading:!1}),N.onSelectionChange([])}catch(E){ye.error(`Export failed: ${E.message}`),I(l=>({...l,isLoading:!1}))}},it=async i=>{if(!(!V||!N)){ce(E=>({...E,isLoading:!0}));try{await V(N.selectedIds,i),ye.success("Status updated successfully"),ce({isOpen:!1,itemCount:0,isLoading:!1}),N.onSelectionChange([])}catch(E){ye.error(`Failed to update status: ${E.message}`),ce(l=>({...l,isLoading:!1}))}}},Ke=r.useRef(""),Oe=r.useRef(!1),Re=r.useMemo(()=>{if(!M||M.length===0)return"";try{return M.map(i=>`${i.label}:${String(i.value)}`).join("|")}catch{return""}},[M]);r.useEffect(()=>{if(Re!==Ke.current)return Re?(ve(M),Oe.current=!0,Ke.current=Re):Oe.current&&(ve([]),Oe.current=!1,Ke.current=""),()=>{Oe.current&&(ve([]),Oe.current=!1)}},[Re]);const Ve=(n||m.length>0)&&Object.values(p).some(i=>i===""||i===null||i===void 0?!1:typeof i=="object"&&("min"in i||"max"in i)?i.min!==""&&i.min!==null&&i.min!==void 0||i.max!==""&&i.max!==null&&i.max!==void 0:!0),ct=i=>{if(!i.sortable||!P)return;const E=i.sortField||i.key,l=P.sortBy===E?P.sortDirection:null;let b="asc";if(l==="asc")b="desc";else if(l==="desc"){P.onSort("created_at","desc");return}P.onSort(E,b)},Xe=i=>{if(!i.sortable||!P)return null;const E=i.sortField||i.key;return P.sortBy!==E?e.jsx("span",{className:"ml-1 cursor-pointer text-gray-400 hover:text-gray-600 dark:hover:text-gray-300",children:"⇅"}):P.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:"↓"})},_e=i=>{if(i){const E=c.filter(l=>!l.isAdded).map(l=>{var b;return((b=l.id)==null?void 0:b.toString())||""}).filter(l=>l!=="");re(E),N==null||N.onSelectionChange(E)}else re([]),N==null||N.onSelectionChange([])},dt=(i,E)=>{const l=c.find(_=>String(_.id)===i);if(l&&l.isAdded)return;const b=E?[...se,i]:se.filter(_=>_!==i);re(b),N==null||N.onSelectionChange(b)};return e.jsxs("div",{className:ee,children:[e.jsxs("div",{className:"flex justify-between items-center mb-6 overflow-visible",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("h2",{className:"text-xl font-semibold text-gray-800 dark:text-white/90 flex items-center gap-2",children:[s&&e.jsx("div",{className:"flex items-center justify-center w-10 h-10 bg-blue-50 rounded-xl dark:bg-blue-500/10",children:s}),t]}),a&&e.jsx("p",{className:"mt-1 text-sm text-gray-500 dark:text-gray-400",children:a})]}),e.jsx("div",{className:"flex-shrink-0 overflow-visible",children:e.jsx(Bs,{})})]}),(n||m.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:n?e.jsx("div",{className:"flex flex-nowrap gap-3 items-center flex-1 min-w-0 w-full",children:n}):e.jsx(e.Fragment,{children:m.map(i=>{if(i.type==="custom"&&i.customRender)return e.jsx(Ce.Fragment,{children:i.customRender()},i.key);if(i.type==="text")return e.jsx(es,{type:"text",placeholder:i.placeholder||`Search ${i.label.toLowerCase()}...`,value:p[i.key]||"",onChange:E=>{d==null||d(i.key,E.target.value)},className:"flex-1 min-w-[200px] h-9"},i.key);if(i.type==="select"){const E=p[i.key]||"";return e.jsx(nt,{options:i.options||[],placeholder:i.label,value:E,onChange:l=>{const b=l==null?"":String(l);d==null||d(i.key,b)},className:i.className||"flex-1 min-w-[140px]"},i.key)}return null})})}),Ve&&f&&e.jsx(je,{variant:"secondary",size:"sm",onClick:f,className:"flex-shrink-0",children:"Clear Filters"})]})})}),e.jsxs("div",{className:"flex justify-between items-center mb-4",children:[Q.length>0&&e.jsx("div",{className:"inline-block",children:Q.length===1?e.jsxs(je,{size:"md",onClick:()=>{se.length>0&&be(Q[0].key,se)},disabled:se.length===0,variant:Q[0].variant==="success"?"success":(Q[0].variant==="danger","primary"),startIcon:Q[0].icon,className:se.length===0?"opacity-50 cursor-not-allowed":"",children:[Q[0].label,se.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:se.length})]}):e.jsxs(e.Fragment,{children:[e.jsxs(je,{ref:j,size:"md",onClick:()=>se.length>0&&O(!S),disabled:se.length===0,className:`dropdown-toggle ${se.length===0?"opacity-50 cursor-not-allowed":""}`,endIcon:e.jsx(wt,{className:"w-4 h-4"}),children:["Bulk Actions",se.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:se.length})]}),e.jsx(yt,{isOpen:S&&se.length>0,onClose:()=>O(!1),anchorRef:j,placement:"bottom-left",className:"w-48 p-2",children:Q.map((i,E)=>{const l=i.key==="delete",b=l&&E>0;return e.jsxs(Ce.Fragment,{children:[b&&e.jsx("div",{className:"my-2 border-t border-gray-200 dark:border-gray-800"}),e.jsxs(at,{onItemClick:()=>{be(i.key,se)},className:`flex items-center gap-3 px-3 py-2 font-medium rounded-lg text-sm text-left ${l?"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:[i.icon&&e.jsx("span",{className:"flex-shrink-0 w-5 h-5",children:i.icon}),e.jsx("span",{className:"text-left",children:i.label})]})]},i.key)})})]})}),e.jsxs("div",{className:"flex gap-2",children:[le&&e.jsx(je,{variant:"secondary",size:"md",endIcon:q,onClick:le,children:"Export CSV"}),ie&&e.jsx(je,{variant:"secondary",size:"md",endIcon:C,onClick:ie,children:"Import"}),L&&e.jsx(je,{variant:"primary",size:"md",endIcon:F,onClick:L,children:z})]})]}),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 ${u?"loaded":"loading"}`,style:{overflowX:"auto",overflowY:"visible"},children:e.jsx("div",{className:"igny8-table-wrapper",style:{overflow:"visible"},children:e.jsxs(Os,{className:"igny8-table-compact igny8-table-smooth",children:[e.jsx(Ps,{className:"border-b border-gray-100 dark:border-white/[0.05]",children:e.jsxs(pt,{children:[N&&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:u&&e.jsx(Lt,{checked:(()=>{const i=c.filter(E=>!E.isAdded);return i.length>0&&se.length===i.length})(),onChange:_e,id:"select-all"})}),o.map((i,E)=>{const l=E===o.length-1;return e.jsx(De,{isHeader:!0,className:`px-5 py-3 font-medium text-gray-500 text-${i.align||"start"} text-theme-xs dark:text-gray-400 ${i.sortable?"cursor-pointer hover:text-gray-700 dark:hover:text-gray-300":""} ${l&&X.length>0?"pr-16":""}`,children:i.sortable?e.jsxs("div",{onClick:()=>ct(i),className:"flex items-center",children:[i.label,Xe(i)]}):e.jsxs(e.Fragment,{children:[i.label,Xe(i)]})},i.key)})]})}),e.jsx(Rs,{className:"divide-y divide-gray-100 dark:divide-white/[0.05] igny8-table-body",children:u?c.length===0?null:c.map((i,E)=>{var At;const l=i.id||E,b=fe.has(l),_=o.find(Ne=>Ne.toggleable),pe=(_==null?void 0:_.toggleContentKey)||(_==null?void 0:_.key),ge=(_==null?void 0:_.toggleContentLabel)||"Content",ke=pe?i[pe]:null,D=ke&&(typeof ke=="string"?ke.trim().length>0:typeof ke=="object"&&ke!==null&&Object.keys(ke).length>0),me=(N?1:0)+o.length,$e=(Ne,Ae)=>{te(Ue=>{const Ie=new Set(Ue),He=Ae??l;return Ne?Ie.add(He):Ie.delete(He),Ie})},$t=!!i.isAdded;return e.jsxs(Ce.Fragment,{children:[e.jsxs(pt,{className:`igny8-data-row ${$t?"bg-blue-50 dark:bg-blue-500/10":""}`,children:[N&&e.jsx(De,{className:"px-5 py-4 text-start",children:e.jsx(Lt,{checked:se.includes(((At=i.id)==null?void 0:At.toString())||""),onChange:Ne=>{var Ae;return dt(((Ae=i.id)==null?void 0:Ae.toString())||"",Ne)},id:`checkbox-${i.id}`,disabled:$t})}),o.map((Ne,Ae)=>{var He;const Ue=Ae===o.length-1,Ie=i.id||E;if(Ue&&X.length>0&&!de.current.has(Ie)){const qe=Ce.createRef();de.current.set(Ie,qe)}return e.jsxs(De,{className:`px-5 py-4 text-${Ne.align||"start"} text-gray-800 dark:text-white/90 ${Ue&&X.length>0?"relative pr-16":""}`,children:[e.jsxs("div",{className:`flex items-center ${Ne.toggleable&&D?"justify-between w-full":""} gap-2`,children:[e.jsx("div",{className:"flex-1",children:Ne.render?Ne.render(i[Ne.key],i):e.jsx("span",{children:((He=i[Ne.key])==null?void 0:He.toString())||"-"})}),Ne.toggleable&&D&&e.jsx("div",{onClick:qe=>qe.stopPropagation(),children:e.jsx(qs,{isExpanded:b,onClick:()=>{$e(!b,l)},hasContent:D})})]}),Ue&&X.length>0&&(()=>{const qe=!!i.isAdded;if(X.length===1){const Se=X[0];return qe?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:Me=>{Me.stopPropagation(),Ee(Se.key,i)},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:[Se.label,e.jsx("span",{className:"inline-flex items-center",children:e.jsx(Ge,{className:"w-4 h-4 fill-current"})})]})})}const ut=de.current.get(Ie);if(!ut)return null;const Vt=ne.get(Ie)||!1;return e.jsxs(e.Fragment,{children:[e.jsx("button",{ref:ut,type:"button",onClick:Se=>{Se.stopPropagation(),xe(Me=>{const Te=new Map(Me);return Te.forEach((gt,Ze)=>{Ze!==Ie&&Te.set(Ze,!1)}),Te.set(Ie,!Te.get(Ie)),Te})},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(ts,{className:"w-5 h-5"})}),e.jsx(yt,{isOpen:Vt,onClose:()=>{xe(Se=>{const Me=new Map(Se);return Me.set(Ie,!1),Me})},anchorRef:ut,placement:"right",className:"w-48 p-2",children:X.map(Se=>{const Me=Se.key==="edit",Te=Se.key==="delete",gt=Se.key==="export",Ze=()=>{var Tt;if(!Se.icon)return null;const et=Se.icon,tt=((Tt=et.props)==null?void 0:Tt.className)||"",mt=tt.includes("w-")?"":"w-5 h-5 ";return Me?Ce.cloneElement(et,{className:`${mt}text-blue-light-500 ${tt}`.trim()}):Te?Ce.cloneElement(et,{className:`${mt}text-error-500 ${tt}`.trim()}):gt?Ce.cloneElement(et,{className:`${mt}text-gray-600 dark:text-gray-400 ${tt}`.trim()}):Se.icon};return e.jsxs(Ce.Fragment,{children:[e.jsxs(at,{onItemClick:()=>Ee(Se.key,i),className:`flex items-center gap-3 px-3 py-2 font-medium rounded-lg text-sm text-left ${Me?"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":Te?"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:Ze()}),e.jsx("span",{className:"text-left",children:Se.label})]}),gt&&e.jsx("div",{className:"my-2 border-t border-gray-200 dark:border-gray-800"})]},Se.key)})})]})})()]},Ne.key)})]}),_&&D&&e.jsx(Hs,{row:i,contentKey:pe||"",contentLabel:ge,colSpan:me,isExpanded:b,onToggle:$e})]},i.id||E)}):Array.from({length:10}).map((i,E)=>e.jsxs(pt,{className:"igny8-skeleton-row",children:[N&&e.jsx(De,{children:e.jsx("div",{className:"h-4 bg-gray-200 dark:bg-gray-700 rounded animate-pulse"})}),o.map((l,b)=>e.jsx(De,{children:e.jsx("div",{className:"h-4 bg-gray-200 dark:bg-gray-700 rounded animate-pulse"})},b))]},`skeleton-${E}`))})]})})}),v&&e.jsx(Cs,{isOpen:ue.isOpen,onClose:()=>Z({isOpen:!1,items:[],isBulk:!1,isLoading:!1}),onConfirm:we,title:v.title,message:ue.isBulk?v.multipleItemsMessage(ue.items.length):v.singleItemMessage,variant:"danger",isConfirmation:!0,confirmText:"Delete",cancelText:"Cancel",isLoading:ue.isLoading,itemsList:ue.items.map(i=>U(i))}),w&&e.jsx(Fs,{isOpen:y.isOpen,onClose:()=>I({isOpen:!1,itemCount:0,isLoading:!1}),onConfirm:lt,title:w.export.title,message:w.export.message(y.itemCount),confirmText:w.export.confirmText,isLoading:y.isLoading}),w&&e.jsx(Ds,{isOpen:B.isOpen,onClose:()=>ce({isOpen:!1,itemCount:0,isLoading:!1}),onConfirm:it,title:w.updateStatus.title,message:w.updateStatus.message(B.itemCount),confirmText:w.updateStatus.confirmText,statusOptions:w.updateStatus.statusOptions,isLoading:B.isLoading}),A&&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 ",c.length," of ",A.totalCount," ",$||"items"]}),e.jsx(zs,{currentPage:A.currentPage,totalPages:A.totalPages,pageSize:Le,onPageChange:i=>{A.onPageChange(i)},onPageSizeChange:i=>{k(i),A.onPageChange(1)}})]})})]})}function It({isOpen:t,onClose:s,onSubmit:a,title:o,fields:c=[],submitLabel:g="Create",cancelLabel:u="Cancel",isLoading:m=!1,className:p="max-w-2xl",customFooter:d,customBody:f}){return e.jsx(Qe,{isOpen:t,onClose:s,className:p,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:o}),e.jsxs("form",{onSubmit:n=>{n.preventDefault(),a()},className:"space-y-4",children:[f||e.jsxs(e.Fragment,{children:[c.find(n=>n.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:[c.find(n=>n.key==="keyword").label,c.find(n=>n.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:c.find(n=>n.key==="keyword").value||"",onChange:n=>c.find(x=>x.key==="keyword").onChange(n.target.value),placeholder:c.find(n=>n.key==="keyword").placeholder,required:c.find(n=>n.key==="keyword").required})]}),(c.find(n=>n.key==="volume")||c.find(n=>n.key==="difficulty"))&&e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[c.find(n=>n.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:[c.find(n=>n.key==="volume").label,c.find(n=>n.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:c.find(n=>n.key==="volume").value||"",onChange:n=>{const x=n.target.value===""?"":parseInt(n.target.value)||0;c.find(L=>L.key==="volume").onChange(x)},placeholder:c.find(n=>n.key==="volume").placeholder,required:c.find(n=>n.key==="volume").required})]}),c.find(n=>n.key==="difficulty")&&(()=>{const n=c.find(x=>x.key==="difficulty");return e.jsxs("div",{children:[e.jsxs(st,{className:"mb-2",children:[n.label,n.required&&e.jsx("span",{className:"text-error-500 ml-1",children:"*"})]}),n.type==="select"?e.jsx(nt,{options:n.options||[],placeholder:n.placeholder||n.label,value:n.value||"",onChange:x=>n.onChange(x),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:n.value||"",onChange:x=>{const L=x.target.value===""?"":parseInt(x.target.value)||0;n.onChange(L)},placeholder:n.placeholder,required:n.required,min:n.min,max:n.max})]})})()]}),c.filter(n=>n.key!=="keyword"&&n.key!=="volume"&&n.key!=="difficulty").map(n=>n.type==="select"?e.jsxs("div",{children:[e.jsxs(st,{className:"mb-2",children:[n.label,n.required&&e.jsx("span",{className:"text-error-500 ml-1",children:"*"})]}),e.jsx(nt,{options:n.options||[],placeholder:n.placeholder||n.label,value:n.value||"",onChange:x=>n.onChange(x),className:"w-full"})]},n.key):n.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:[n.label,n.required&&e.jsx("span",{className:"text-error-500 ml-1",children:"*"})]}),e.jsx("textarea",{rows:n.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:n.value||"",onChange:x=>n.onChange(x.target.value),placeholder:n.placeholder,required:n.required})]},n.key):e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:[n.label,n.required&&e.jsx("span",{className:"text-error-500 ml-1",children:"*"})]}),e.jsx("input",{type:n.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:n.value||"",onChange:x=>n.onChange(x.target.value),placeholder:n.placeholder,required:n.required,min:n.min,max:n.max})]},n.key))]}),d||e.jsxs("div",{className:"flex justify-end gap-3 pt-4",children:[e.jsx(je,{type:"button",variant:"outline",onClick:s,disabled:m,children:u}),e.jsx(je,{type:"submit",variant:"primary",disabled:m,children:m?"Processing...":g})]})]})]})})}let Ft=0;const Ws=()=>(Ft++,`modal-${String(Ft).padStart(2,"0")}`);function Et({isOpen:t,title:s,percentage:a,status:o,message:c,details:g,onClose:u,onCancel:m,taskId:p,functionId:d}){const f=Ce.useRef(null);Ce.useEffect(()=>{f.current||(f.current=Ws())},[]);const n=f.current||"modal-01",x=d?`${d}-${n}`:null,L=Ce.useRef(!1);r.useEffect(()=>{if(o==="completed"&&u&&!L.current){L.current=!0;const le=setTimeout(()=>{u()},2e3);return()=>clearTimeout(le)}o!=="completed"&&(L.current=!1)},[o,u]);const z=()=>o==="error"?"error":o==="completed"?"success":"primary",F=()=>o==="completed"?e.jsx("svg",{className:"w-6 h-6 text-success-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}):o==="error"?e.jsx("svg",{className:"w-6 h-6 text-error-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}):e.jsxs("svg",{className:"w-6 h-6 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"})]});return e.jsx(Qe,{isOpen:t,onClose:u||(()=>{}),className:"max-w-lg",showCloseButton:o==="completed"||o==="error",children:e.jsxs("div",{className:"p-6",children:[e.jsxs("div",{className:"flex items-start gap-4 mb-6",children:[e.jsx("div",{className:"flex-shrink-0 mt-1",children:F()}),e.jsxs("div",{className:"flex-1",children:[e.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white mb-1",children:s}),e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400",children:c})]})]}),e.jsx("div",{className:"mb-6",children:e.jsx(ze,{value:a,color:z(),size:"lg",showLabel:!0,label:`${Math.round(a)}%`})}),g&&e.jsxs("div",{className:"mb-6 space-y-2",children:[g.currentItem&&e.jsxs("div",{className:"text-sm text-gray-700 dark:text-gray-300",children:[e.jsx("span",{className:"font-medium",children:"Current:"})," ",e.jsx("span",{className:"text-gray-600 dark:text-gray-400",children:g.currentItem})]}),g.total>0&&e.jsxs("div",{className:"text-sm text-gray-700 dark:text-gray-300",children:[e.jsx("span",{className:"font-medium",children:"Progress:"})," ",e.jsxs("span",{className:"text-gray-600 dark:text-gray-400",children:[g.current," of ",g.total," completed"]})]}),g.phase&&e.jsxs("div",{className:"text-xs text-gray-500 dark:text-gray-500",children:["Phase: ",g.phase]})]}),(x||p)&&!1,e.jsxs("div",{className:"flex justify-end gap-3",children:[m&&o!=="completed"&&o!=="error"&&e.jsx(je,{variant:"secondary",size:"sm",onClick:m,disabled:o==="processing",children:"Cancel"}),(o==="completed"||o==="error")&&u&&e.jsx(je,{variant:"primary",size:"sm",onClick:u,children:o==="completed"?"Close":"Dismiss"})]})]})})}function Mt(){const[t,s]=r.useState(!1),[a,o]=r.useState(null),[c,g]=r.useState(""),[u,m]=r.useState(void 0),[p,d]=r.useState({percentage:0,message:"Initializing...",status:"pending"}),f=r.useRef(0),n=r.useRef(null),x=r.useRef(null),L=(C,M="",$=[])=>{const A=(C==null?void 0:C.toUpperCase())||"",N=M.toLowerCase(),P=(S,O)=>{const ne=O.match(S);return ne&&ne[1]?ne[1]:""};let h=P(/(\d+)\s+keyword/i,M),T=P(/(\d+)\s+cluster/i,M),H=P(/(\d+)\s+task/i,M),V=P(/(\d+)\s+item/i,M);if(!h&&!H&&!V){const S=P(/loaded\s+(\d+)\s+items?/i,M);S&&(V=S)}if(!T){const S=P(/created\s+(\d+)\s+clusters?/i,M);S&&(T=S)}if(!h&&!H&&!V)for(const S of $){const O=S.message||"";if(h||(h=P(/(\d+)\s+keyword/i,O)),H||(H=P(/(\d+)\s+task/i,O)),V||(V=P(/loaded\s+(\d+)\s+items?/i,O)),T||(T=P(/(\d+)\s+cluster/i,O)||P(/created\s+(\d+)\s+clusters?/i,O)),(h||H||V)&&T)break}const J=h,W=T,R=H||V,U=N.includes("content")||N.includes("generating content")||N.includes("article"),ee=N.includes("cluster")&&!N.includes("content"),K=N.includes("idea");return A.includes("INIT")||A.includes("INITIALIZ")?{percentage:0,friendlyMessage:"Getting started..."}:A.includes("PREP")||A.includes("PREPAR")?U?{percentage:10,friendlyMessage:R?`Preparing ${R} task${R!=="1"?"s":""}...`:"Preparing content generation..."}:ee?{percentage:16,friendlyMessage:J?`Preparing ${J} keyword${J!=="1"?"s":""}...`:"Preparing your keywords..."}:K?{percentage:10,friendlyMessage:W?`Preparing ${W} cluster${W!=="1"?"s":""}...`:"Preparing clusters..."}:{percentage:10,friendlyMessage:"Preparing..."}:A.includes("AI_CALL")||A.includes("CALLING")?U?{percentage:50,friendlyMessage:"Generating content with AI..."}:ee?{percentage:50,friendlyMessage:"Finding related keywords..."}:K?{percentage:50,friendlyMessage:"Generating ideas..."}:{percentage:50,friendlyMessage:"Processing with AI..."}:A.includes("PARSE")||A.includes("PARSING")?U?{percentage:70,friendlyMessage:"Processing content..."}:ee?{percentage:70,friendlyMessage:"Organizing results..."}:K?{percentage:70,friendlyMessage:"Processing ideas..."}:{percentage:70,friendlyMessage:"Processing results..."}:A.includes("SAVE")||A.includes("SAVING")||A.includes("CREAT")&&!A.includes("CONTENT")?U?{percentage:85,friendlyMessage:R?`Saving content for ${R} task${R!=="1"?"s":""}...`:"Saving content..."}:ee?{percentage:85,friendlyMessage:W?`Saving ${W} cluster${W!=="1"?"s":""}...`:"Saving clusters..."}:K?{percentage:85,friendlyMessage:R?`Saving ${R} idea${R!=="1"?"s":""}...`:"Saving ideas..."}:{percentage:85,friendlyMessage:"Saving results..."}:A.includes("DONE")||A.includes("COMPLETE")?U?{percentage:100,friendlyMessage:R?`Done! Generated content for ${R} task${R!=="1"?"s":""}`:"Done! Content generation complete"}:ee?{percentage:100,friendlyMessage:J&&W?`Done! Created ${W} cluster${W!=="1"?"s":""} from ${J} keyword${J!=="1"?"s":""}`:J?`Done! Processed ${J} keyword${J!=="1"?"s":""}`:W?`Done! Created ${W} cluster${W!=="1"?"s":""}`:"Done! Clustering complete"}:K?{percentage:100,friendlyMessage:R?`Done! Generated ${R} idea${R!=="1"?"s":""}`:"Done! Ideas generation complete"}:{percentage:100,friendlyMessage:"Done! Task complete"}:{percentage:f.current,friendlyMessage:M||"Processing..."}};r.useEffect(()=>{if(!a||!t||a.startsWith("temp-"))return;let C=null,M=0,$=!1;const A=300,N=async()=>{if(!$)try{if(M++,M>A){d({percentage:0,message:"Task is taking longer than expected. Please check manually.",status:"error"}),$=!0,C&&(clearInterval(C),C=null);return}const P=await as(`/v1/system/settings/task_progress/${a}/`);if(P.state==="PROGRESS"){const h=P.meta||{};let T=null;const H=[...h.request_steps||[],...h.response_steps||[]];if(H.length>0){const O=[...H].sort((ne,xe)=>(xe.stepNumber||0)-(ne.stepNumber||0))[0];if(O&&O.stepName){const ne=O.stepName.toUpperCase();ne.includes("INIT")?T="INIT":ne.includes("PREP")?T="PREP":ne.includes("AI_CALL")||ne.includes("CALL")?T="AI_CALL":ne.includes("PARSE")?T="PARSE":ne.includes("SAVE")||ne.includes("CREAT")?T="SAVE":ne.includes("DONE")||ne.includes("COMPLETE")?T="DONE":T=ne}}if(!T){const S=(h.phase||"").toLowerCase(),O=(h.message||"").toLowerCase();S.includes("initializ")||O.includes("initializ")||O.includes("getting started")?T="INIT":S.includes("prepar")||S.includes("prep")||O.includes("prepar")||O.includes("loading")?T="PREP":S.includes("analyzing")||S.includes("ai_call")||O.includes("analyzing")||O.includes("finding related")?T="AI_CALL":S.includes("pars")||O.includes("pars")||O.includes("organizing")?T="PARSE":S.includes("sav")||S.includes("creat")||O.includes("sav")||O.includes("creat")||O.includes("cluster")&&!O.includes("content")?T="SAVE":(S.includes("done")||S.includes("complet")||O.includes("done")||O.includes("complet"))&&(T="DONE")}const V=h.message||"",J=`${c} ${V}`,W=L(T||"",J,H),R=W.percentage,U=W.friendlyMessage,ee=n.current!==T,K=f.current;if(x.current&&(clearTimeout(x.current),x.current=null),R>K){let S=K;const O=()=>{S<R&&(S=Math.min(S+1,R),f.current=S,d({percentage:S,message:U,status:"processing",details:{current:h.current||0,total:h.total||0,completed:h.completed||0,currentItem:h.current_item,phase:h.phase}}),S<R?x.current=setTimeout(O,300):x.current=null)};ee&&n.current!==null?x.current=setTimeout(()=>{n.current=T,O()},500):(n.current=T,O())}else n.current=T,f.current=R,d({percentage:R,message:U,status:"processing",details:{current:h.current||0,total:h.total||0,completed:h.completed||0,currentItem:h.current_item,phase:h.phase}});if(h.request_steps||h.response_steps){const{useAIRequestLogsStore:S}=await Pe(async()=>{const{useAIRequestLogsStore:xe}=await import("./page-dashboard-DxYTR5eF.js").then(de=>de.a6);return{useAIRequestLogsStore:xe}},__vite__mapDeps([0,1,2,3,4,5,6])).catch(()=>({useAIRequestLogsStore:null})),ne=((S==null?void 0:S.getState().logs)||[]).find(xe=>{var de,j;return((j=(de=xe.response)==null?void 0:de.data)==null?void 0:j.task_id)===a});if(ne){const xe=S==null?void 0:S.getState().addRequestStep,de=S==null?void 0:S.getState().addResponseStep;h.request_steps&&Array.isArray(h.request_steps)&&h.request_steps.forEach(j=>{ne.requestSteps.find(v=>v.stepNumber===j.stepNumber)||xe==null||xe(ne.id,j)}),h.response_steps&&Array.isArray(h.response_steps)&&h.response_steps.forEach(j=>{ne.responseSteps.find(v=>v.stepNumber===j.stepNumber)||de==null||de(ne.id,j)})}}}else if(P.state==="SUCCESS"){const h=P.meta||{};x.current&&(clearTimeout(x.current),x.current=null);const T=h.message||"",H=[...h.request_steps||[],...h.response_steps||[]],V=L("DONE",T,H);if(n.current="DONE",f.current=100,d({percentage:100,message:V.friendlyMessage,status:"completed",details:h.details}),h.request_steps||h.response_steps){const{useAIRequestLogsStore:J}=await Pe(async()=>{const{useAIRequestLogsStore:U}=await import("./page-dashboard-DxYTR5eF.js").then(ee=>ee.a6);return{useAIRequestLogsStore:U}},__vite__mapDeps([0,1,2,3,4,5,6])).catch(()=>({useAIRequestLogsStore:null})),W=(J==null?void 0:J.getState().logs)||[],R=W.find(U=>{var ee,K;return((K=(ee=U.response)==null?void 0:ee.data)==null?void 0:K.task_id)===a})||W[0];if(R){const U=J==null?void 0:J.getState().addRequestStep,ee=J==null?void 0:J.getState().addResponseStep;h.request_steps&&Array.isArray(h.request_steps)&&h.request_steps.forEach(K=>{R.requestSteps.find(S=>S.stepNumber===K.stepNumber)||U==null||U(R.id,K)}),h.response_steps&&Array.isArray(h.response_steps)&&h.response_steps.forEach(K=>{R.responseSteps.find(S=>S.stepNumber===K.stepNumber)||ee==null||ee(R.id,K)})}}$=!0,C&&(clearInterval(C),C=null)}else if(P.state==="FAILURE"){const h=P.meta||{},T=h.error||h.message||P.error||"Task failed - exception details unavailable",H=h.error_type||"Error";if(d({percentage:0,message:T.includes("exception details unavailable")?T:`Error: ${T}`,status:"error",details:h.error_type?`${H}: ${T}`:T}),h.request_steps||h.response_steps){const{useAIRequestLogsStore:V}=await Pe(async()=>{const{useAIRequestLogsStore:R}=await import("./page-dashboard-DxYTR5eF.js").then(U=>U.a6);return{useAIRequestLogsStore:R}},__vite__mapDeps([0,1,2,3,4,5,6])).catch(()=>({useAIRequestLogsStore:null})),W=((V==null?void 0:V.getState().logs)||[]).find(R=>{var U,ee;return((ee=(U=R.response)==null?void 0:U.data)==null?void 0:ee.task_id)===a});if(W){const R=V==null?void 0:V.getState().addRequestStep,U=V==null?void 0:V.getState().addResponseStep;h.request_steps&&Array.isArray(h.request_steps)&&h.request_steps.forEach(ee=>{W.requestSteps.find(K=>K.stepNumber===ee.stepNumber)||R==null||R(W.id,ee)}),h.response_steps&&Array.isArray(h.response_steps)&&h.response_steps.forEach(ee=>{W.responseSteps.find(K=>K.stepNumber===ee.stepNumber)||U==null||U(W.id,ee)})}}$=!0,C&&(clearInterval(C),C=null)}else d({percentage:0,message:"Task is starting...",status:"pending"})}catch(P){if(console.error("Error polling task status:",P),M>5){let h=P.message||"Unknown error";h.includes("HTTP_ERROR")&&(h=h.replace(/^API Error \(\d+\): HTTP_ERROR - /,"").trim()||"Server error"),d({percentage:0,message:`Error checking task status: ${h}`,status:"error"}),$=!0,C&&(clearInterval(C),C=null)}}};return N(),C=setInterval(()=>{$||N()},2e3),()=>{$=!0,C&&(clearInterval(C),C=null),x.current&&(clearTimeout(x.current),x.current=null),f.current=0,n.current=null}},[a,t]);const z=r.useCallback((C,M,$)=>{x.current&&(clearTimeout(x.current),x.current=null),f.current=0,n.current=null,o(C),g(M),m($),s(!0),d({percentage:0,message:"Getting started...",status:"pending"})},[]),F=r.useCallback(C=>{o(C),d({percentage:0,message:"Initializing...",status:"pending"})},[]),le=r.useCallback(()=>{x.current&&(clearTimeout(x.current),x.current=null),f.current=0,n.current=null,s(!1),o(null),g("")},[]),q=r.useCallback(C=>{d({percentage:0,message:C,status:"error"})},[]),ie=r.useCallback(()=>{x.current&&(clearTimeout(x.current),x.current=null),f.current=0,n.current=null,d({percentage:0,message:"Getting started...",status:"pending"}),o(null),g(""),s(!1)},[]);return{progress:p,isOpen:t,openModal:z,updateTaskId:F,closeModal:le,setError:q,reset:ie,title:c,taskId:a,functionId:u}}const Gs=t=>{const s=new URLSearchParams;t.filters&&Object.entries(t.filters).forEach(([g,u])=>{u!==""&&u!==null&&u!==void 0&&s.append(g,String(u))});const a=s.toString(),o=t.endpoint.endsWith("/")?t.endpoint:`${t.endpoint}/`;return`${vt}${o}${a?`?${a}`:""}`},Js=async(t,s,a)=>{const o=t.format||"csv",c=Gs(t);s==null||s(`Exporting ${o.toUpperCase()}...`);try{const g=await fetch(c,{method:"GET",credentials:"include"});if(!g.ok){const d=await g.text();throw new Error(`Export failed: ${g.statusText} - ${d}`)}const u=await g.blob(),m=window.URL.createObjectURL(u),p=document.createElement("a");p.href=m,p.download=`${t.filename}.${o}`,document.body.appendChild(p),p.click(),document.body.removeChild(p),window.URL.revokeObjectURL(m),s==null||s(`Export successful: ${t.filename}.${o}`)}catch(g){const u=g instanceof Error?g:new Error("Export failed");throw a==null||a(u),u}},Qs=async(t,s,a,o)=>{var p,d;const c=s.acceptedFormats||[".csv"],g="."+((p=t.name.split(".").pop())==null?void 0:p.toLowerCase());if(!c.includes(g)){const f=new Error(`Invalid file format. Accepted formats: ${c.join(", ")}`);throw o==null||o(f),f}const u=s.maxFileSize||5*1024*1024;if(t.size>u){const f=new Error(`File size exceeds ${u/1024/1024}MB limit`);throw o==null||o(f),f}a==null||a(`Importing ${t.name}...`);const m=new FormData;m.append("file",t);try{const f=s.endpoint.endsWith("/")?s.endpoint:`${s.endpoint}/`,n=new URLSearchParams;s.queryParams&&Object.entries(s.queryParams).forEach(([le,q])=>{q!==""&&q!==null&&q!==void 0&&n.append(le,String(q))});const x=n.toString(),L=`${vt}${f}${x?`?${x}`:""}`,z=await fetch(L,{method:"POST",body:m,credentials:"include"});if(!z.ok){const le=await z.text();throw new Error(`Import failed: ${z.statusText} - ${le}`)}const F=await z.json();return a==null||a(`Import successful: ${F.imported||0} rows imported`),(d=s.onSuccess)==null||d.call(s,F),F}catch(f){const n=f instanceof Error?f:new Error("Import failed");throw o==null||o(n),n}},Ys=({className:t,onChange:s,accept:a,disabled:o=!1})=>e.jsx("input",{type:"file",accept:a,disabled:o,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 Xs(t){const{exportEndpoint:s,importEndpoint:a,filename:o,acceptedFormats:c=[".csv"],maxFileSize:g=5*1024*1024,onImportSuccess:u,onExportSuccess:m,onError:p}=t,[d,f]=r.useState(!1),[n,x]=r.useState(!1),L=r.useCallback(async(q="csv",ie={})=>{x(!0);try{await Js({endpoint:s,filename:o,format:q,filters:ie},M=>console.log(M),M=>{throw p==null||p(M),M}),m==null||m()}catch(C){const M=C instanceof Error?C:new Error("Export failed");throw p==null||p(M),M}finally{x(!1)}},[s,o,p,m]),z=r.useCallback(async q=>{x(!0);try{const ie={endpoint:a,acceptedFormats:c,maxFileSize:g,queryParams:t.importQueryParams,onSuccess:M=>{u==null||u(M)}},C=await Qs(q,ie,M=>console.log(M),M=>{throw p==null||p(M),M});return f(!1),C}catch(ie){const C=ie instanceof Error?ie:new Error("Import failed");throw p==null||p(C),C}finally{x(!1)}},[a,c,g,u,p]),F=r.useCallback(async q=>{var C;const ie=(C=q.target.files)==null?void 0:C[0];ie&&(await z(ie),q.target.value="")},[z]);return{handleExport:L,handleImportClick:()=>f(!0),ImportModal:()=>e.jsx(Qe,{isOpen:d,onClose:()=>f(!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 ",o.charAt(0).toUpperCase()+o.slice(1)]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(st,{children:"CSV File"}),e.jsx(Ys,{onChange:F,accept:c.join(","),disabled:n}),e.jsxs("p",{className:"text-sm text-gray-500 dark:text-gray-400 mt-2",children:["Upload a CSV file (max ",g/1024/1024,"MB)"]})]}),e.jsx("div",{className:"flex justify-end gap-4 pt-4",children:e.jsx(je,{variant:"outline",onClick:()=>f(!1),disabled:n,children:"Close"})})]})]})})}}const Zs=(t,s,a)=>Xs({exportEndpoint:"/v1/planner/keywords/export/",importEndpoint:"/v1/planner/keywords/import_keywords/",filename:"keywords",acceptedFormats:[".csv"],maxFileSize:5*1024*1024,importQueryParams:a,onImportSuccess:t,onError:s});function er(){const t=Je(),{activeSite:s}=_t(),{activeSector:a,loadSectorsForSite:o}=Be(),{pageSize:c}=Ye(),[g,u]=r.useState([]),[m,p]=r.useState([]),[d,f]=r.useState([]),[n,x]=r.useState(!0),[L,z]=r.useState(!1),[F,le]=r.useState(""),[q,ie]=r.useState(""),[C,M]=r.useState(""),[$,A]=r.useState(""),[N,P]=r.useState(""),[h,T]=r.useState(""),[H,V]=r.useState(""),[J,W]=r.useState(!1),[R,U]=r.useState(""),[ee,K]=r.useState(""),S=r.useRef(null),O=r.useRef(null),[ne,xe]=r.useState([]),[de,j]=r.useState(1),[v,w]=r.useState(1),[G,X]=r.useState(0),[Q,se]=r.useState("created_at"),[re,fe]=r.useState("desc"),[te,ue]=r.useState(!1),[Z,y]=r.useState(!1),[I,B]=r.useState(!1),[ce,ve]=r.useState(null),[ye,Le]=r.useState({seed_keyword_id:0,volume_override:null,difficulty_override:null,cluster_id:null,status:"pending"}),k=Mt(),Y=r.useRef(!1),[oe,ae]=r.useState([]),we=r.useRef(null),Ee=r.useRef(-1);r.useEffect(()=>{s&&o(s.id)},[s,o]),r.useEffect(()=>{(async()=>{if(!s||!a||!s.industry){f([]);return}try{z(!0);const b=await xt({industry:s.industry,sector:a.industry_sector||void 0}),_=new Set(g.map(ge=>ge.seed_keyword_id)),pe=(b.results||[]).filter(ge=>!_.has(ge.id));f(pe)}catch(b){console.error("Failed to load available seed keywords:",b),f([])}finally{z(!1)}})()},[s,a,g]),r.useEffect(()=>{(async()=>{try{const b=await rt({ordering:"name"});p(b.results||[])}catch(b){console.error("Error fetching clusters:",b)}})()},[]);const be=r.useCallback(async()=>{x(!0),ue(!1);try{const l=Q?`${re==="desc"?"-":""}${Q}`:"-created_at",b={...F&&{search:F},...q&&{status:q},...C&&{cluster_id:C},...$&&{intent:$},...(a==null?void 0:a.id)&&{sector_id:a.id},page:de,page_size:c||10,ordering:l};if(N){const pe=parseInt(N),ge=St(pe);if(ge!==null){const ke=jt(ge);ke&&(b.difficulty_min=ke.min,b.difficulty_max=ke.max)}}h!==""&&h!==null&&h!==void 0&&(b.volume_min=Number(h)),H!==""&&H!==null&&H!==void 0&&(b.volume_max=Number(H));const _=await ns(b);u(_.results||[]),X(_.count||0),w(Math.ceil((_.count||0)/c)),setTimeout(()=>{ue(!0),x(!1)},100)}catch(l){console.error("Error loading keywords:",l),t.error(`Failed to load keywords: ${l.message}`),ue(!0),x(!1)}},[de,q,C,$,N,h,H,Q,re,F,s,a,c]);r.useEffect(()=>{const l=()=>{be(),(async()=>{try{const pe=await rt({ordering:"name"});p(pe.results||[])}catch(pe){console.error("Error fetching clusters:",pe)}})()},b=()=>{be()};return window.addEventListener("siteChanged",l),window.addEventListener("sectorChanged",b),()=>{window.removeEventListener("siteChanged",l),window.removeEventListener("sectorChanged",b)}},[be]),r.useEffect(()=>{const l=b=>{S.current&&!S.current.contains(b.target)&&O.current&&!O.current.contains(b.target)&&(W(!1),U(h),K(H))};if(J)return document.addEventListener("mousedown",l),()=>{document.removeEventListener("mousedown",l)}},[J,h,H]),r.useEffect(()=>{be()},[be]),r.useEffect(()=>{const l=setTimeout(()=>{j(1)},500);return()=>clearTimeout(l)},[F]),r.useEffect(()=>{const l=de===1;j(1),l&&setTimeout(()=>{be()},0)},[c]);const lt=(l,b)=>{se(l||"created_at"),fe(b),j(1)},{handleExport:it,handleImportClick:Ke,ImportModal:Oe}=Zs(()=>{t.success("Import successful","Keywords imported successfully."),be()},l=>{t.error("Import failed",l.message)},s&&a?{site_id:s.id,sector_id:a.id}:void 0),Re=r.useCallback(async(l,b)=>{if(l==="auto_cluster"){if(b.length===0){t.error("Please select at least one keyword to cluster");return}if(b.length>20){t.error("Maximum 20 keywords allowed for clustering");return}const _=b.map(D=>parseInt(D)),pe=a==null?void 0:a.id,ge=g.filter(D=>_.includes(D.id)),ke={ids:_,keyword_count:_.length,keyword_names:ge.map(D=>D.keyword),sector_id:pe};ae(D=>[...D,{timestamp:new Date().toISOString(),type:"request",action:"auto_cluster (Bulk Action)",data:ke}]);try{const D=await os(_,pe);if(D&&D.success===!1){const me=D.error||"Failed to cluster keywords";ae($e=>[...$e,{timestamp:new Date().toISOString(),type:"error",action:"auto_cluster (Bulk Action)",data:{error:me,keyword_count:_.length}}]),t.error(me);return}if(D&&D.success)D.task_id?(ae(me=>[...me,{timestamp:new Date().toISOString(),type:"success",action:"auto_cluster (Bulk Action)",data:{task_id:D.task_id,message:D.message,keyword_count:_.length}}]),Y.current=!1,k.openModal(D.task_id,"Auto-Clustering Keywords","ai-auto-cluster-01")):(ae(me=>[...me,{timestamp:new Date().toISOString(),type:"success",action:"auto_cluster (Bulk Action)",data:{clusters_created:D.clusters_created||0,keywords_updated:D.keywords_updated||0,keyword_count:_.length,message:D.message}}]),t.success(`Clustering complete: ${D.clusters_created||0} clusters created, ${D.keywords_updated||0} keywords updated`),Y.current||(Y.current=!0,be()));else{const me=(D==null?void 0:D.error)||"Unexpected response format";ae($e=>[...$e,{timestamp:new Date().toISOString(),type:"error",action:"auto_cluster (Bulk Action)",data:{error:me,keyword_count:_.length}}]),t.error(me)}}catch(D){let me="Failed to cluster keywords";D.message&&(me=D.message.replace(/^API Error \(\d+\): [^-]+ - /,"").trim(),(!me||me===D.message)&&(me=D.message)),ae($e=>[...$e,{timestamp:new Date().toISOString(),type:"error",action:"auto_cluster (Bulk Action)",data:{error:me,keyword_count:_.length}}]),t.error(me)}}else t.info(`Bulk action "${l}" for ${b.length} items`)},[t,a,be,k,g]);r.useEffect(()=>{var ke;if(!k.taskId||!k.isOpen)return;const l=k.progress,b=((ke=l.details)==null?void 0:ke.phase)||"",_=l.percentage,pe=l.message,ge=l.status;if(b&&b!==we.current){const D=ge==="error"?"error":ge==="completed"?"success":"step";ae(me=>[...me,{timestamp:new Date().toISOString(),type:D,action:k.title||"AI Function",stepName:b,percentage:_,data:{step:b,message:pe,percentage:_,status:ge,details:l.details}}]),we.current=b,Ee.current=_}else if(b&&Math.abs(_-Ee.current)>=10){const D=ge==="error"?"error":ge==="completed"?"success":"step";ae(me=>[...me,{timestamp:new Date().toISOString(),type:D,action:k.title||"AI Function",stepName:b,percentage:_,data:{step:b,message:pe,percentage:_,status:ge,details:l.details}}]),Ee.current=_}else if((ge==="error"||ge==="completed")&&(b!==we.current||ge==="error"&&we.current!=="error"||ge==="completed"&&we.current!=="completed")){const D=ge==="error"?"error":"success";ae(me=>[...me,{timestamp:new Date().toISOString(),type:D,action:k.title||"AI Function",stepName:b||"Final",percentage:_,data:{step:b||"Final",message:pe,percentage:_,status:ge,details:l.details}}]),we.current=b||ge}},[k.progress,k.taskId,k.isOpen,k.title]),r.useEffect(()=>{k.isOpen||(we.current=null,Ee.current=-1),Y.current=!1},[k.isOpen,k.taskId]);const Ve=r.useCallback(()=>{Le({seed_keyword_id:0,volume_override:null,difficulty_override:null,cluster_id:null,status:"pending"}),B(!1),ve(null)},[]),ct=r.useCallback(async l=>{try{if(!l||l.length===0)throw new Error("No records selected for export");const b=l.join(","),_=`${vt}/v1/planner/keywords/export/?ids=${encodeURIComponent(b)}`,pe=await fetch(_,{method:"GET",credentials:"include"});if(!pe.ok){const me=await pe.text();throw new Error(`Export failed: ${pe.statusText} - ${me}`)}const ge=await pe.blob(),ke=window.URL.createObjectURL(ge),D=document.createElement("a");D.href=ke,D.download="keywords.csv",document.body.appendChild(D),D.click(),document.body.removeChild(D),window.URL.revokeObjectURL(ke)}catch(b){throw b}},[]),Xe=r.useCallback(async(l,b)=>{try{const _=l.map(pe=>parseInt(pe));await ls(_,b),await be()}catch(_){throw _}},[be]),_e=r.useMemo(()=>_s({clusters:m,activeSector:a,availableSeedKeywords:d,formData:ye,setFormData:Le,searchTerm:F,setSearchTerm:le,statusFilter:q,setStatusFilter:ie,intentFilter:$,setIntentFilter:A,difficultyFilter:N,setDifficultyFilter:P,clusterFilter:C,setClusterFilter:M,volumeMin:h,volumeMax:H,setVolumeMin:T,setVolumeMax:V,isVolumeDropdownOpen:J,setIsVolumeDropdownOpen:W,tempVolumeMin:R,tempVolumeMax:ee,setTempVolumeMin:U,setTempVolumeMax:K,volumeButtonRef:O,volumeDropdownRef:S,setCurrentPage:j,loadKeywords:be}),[m,a,d,ye,F,q,$,N,C,h,H,J,R,ee,be,s]),dt=r.useMemo(()=>_e!=null&&_e.headerMetrics?_e.headerMetrics.map(l=>({label:l.label,value:l.calculate({keywords:g,totalCount:G,clusters:m}),accentColor:l.accentColor})):[],[_e==null?void 0:_e.headerMetrics,g,G,m]),i=async()=>{try{if(!s){t.error("Please select an active site first");return}if(I&&ce)await ds(ce.id,ye),t.success("Keyword updated successfully");else{if(!a){t.error("Please select a sector for this site first");return}if(!ye.seed_keyword_id){t.error("Please select a seed keyword");return}const l=a.id,b={...ye,site_id:s.id,sector_id:l};await us(b),t.success("Keyword attached successfully")}y(!1),Ve(),be()}catch(l){t.error(`Failed to save: ${l.message}`)}},E=r.useCallback(l=>{ve(l),B(!0),Le({seed_keyword_id:l.seed_keyword_id,volume_override:l.volume_override||null,difficulty_override:l.difficulty_override||null,cluster_id:l.cluster_id,status:l.status}),y(!0)},[]);return e.jsxs(e.Fragment,{children:[e.jsx(ot,{title:"Keywords",titleIcon:e.jsx(Dt,{className:"text-brand-500 size-5"}),subtitle:"Manage and organize SEO keywords for content planning",columns:_e.columns,data:g,loading:n,showContent:te,filters:_e.filters,filterValues:{search:F,status:q,intent:$,difficulty:N,cluster_id:C,volumeMin:h,volumeMax:H},onFilterChange:(l,b)=>{const _=b==null?"":String(b);l==="search"?le(_):l==="status"?(ie(_),j(1)):l==="intent"?(A(_),j(1)):l==="difficulty"?(P(_),j(1)):l==="cluster_id"&&(M(_),j(1))},onEdit:E,onCreate:()=>{Ve(),y(!0)},createLabel:"Add Keyword",onCreateIcon:e.jsx(Ge,{}),onDelete:async l=>{await cs(l),be()},onBulkDelete:async l=>{const b=await is(l);return be(),b},onBulkExport:ct,onBulkUpdateStatus:Xe,onBulkAction:Re,getItemDisplayName:l=>l.keyword,onExport:async()=>{try{await it("csv",{search:F,status:q,cluster_id:C,intent:$,difficulty:N}),t.success("Export successful","Keywords exported successfully.")}catch(l){t.error("Export failed",l.message)}},onExportIcon:e.jsx(kt,{}),onImport:Ke,onImportIcon:e.jsx(ss,{}),selectionLabel:"keyword",pagination:{currentPage:de,totalPages:v,totalCount:G,onPageChange:l=>{j(l)}},selection:{selectedIds:ne,onSelectionChange:xe},sorting:{sortBy:Q,sortDirection:re,onSort:lt},headerMetrics:dt,onFilterReset:()=>{le(""),ie(""),M(""),A(""),P(""),T(""),V(""),U(""),K(""),W(!1),j(1)}}),e.jsx(It,{isOpen:Z,onClose:()=>{y(!1),Ve()},onSubmit:i,title:I?"Edit Keyword":"Add Keyword",submitLabel:I?"Update":"Create",fields:_e.formFields(m)}),e.jsx(Oe,{}),e.jsx(Et,{isOpen:k.isOpen,title:k.title,percentage:k.progress.percentage,status:k.progress.status,message:k.progress.message,details:k.progress.details,taskId:k.taskId||void 0,functionId:k.functionId,onClose:()=>{k.closeModal(),k.progress.status==="completed"&&!Y.current&&(Y.current=!0,be())}}),oe.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:()=>ae([]),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:oe.slice().reverse().map((l,b)=>e.jsxs("div",{className:`p-3 rounded border text-xs font-mono ${l.type==="request"?"bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800":l.type==="success"?"bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800":l.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 ${l.type==="request"?"text-blue-700 dark:text-blue-300":l.type==="success"?"text-green-700 dark:text-green-300":l.type==="error"?"text-red-700 dark:text-red-300":"text-purple-700 dark:text-purple-300"}`,children:["[",l.type.toUpperCase(),"]"]}),e.jsx("span",{className:"text-gray-700 dark:text-gray-300",children:l.action}),l.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:l.stepName}),l.percentage!==void 0&&e.jsxs("span",{className:"text-xs text-gray-500 dark:text-gray-400",children:[l.percentage,"%"]})]}),e.jsx("span",{className:"text-gray-500 dark:text-gray-400",children:new Date(l.timestamp).toLocaleTimeString()})]}),e.jsx("pre",{className:"text-xs text-gray-700 dark:text-gray-300 whitespace-pre-wrap break-words",children:JSON.stringify(l.data,null,2)})]},b))})]})]})}const wr=Object.freeze(Object.defineProperty({__proto__:null,default:er},Symbol.toStringTag,{value:"Module"}));function tr(){const t=Je(),{activeSector:s}=Be(),{pageSize:a}=Ye(),[o,c]=r.useState([]),[g,u]=r.useState(!0),[m,p]=r.useState(""),[d,f]=r.useState(""),[n,x]=r.useState(""),[L,z]=r.useState(""),[F,le]=r.useState(""),[q,ie]=r.useState(!1),[C,M]=r.useState(""),[$,A]=r.useState(""),N=r.useRef(null),P=r.useRef(null),[h,T]=r.useState([]),[H,V]=r.useState(1),[J,W]=r.useState(1),[R,U]=r.useState(0),[ee,K]=r.useState("name"),[S,O]=r.useState("asc"),[ne,xe]=r.useState(!1),[de,j]=r.useState(!1),[v,w]=r.useState(!1),[G,X]=r.useState(null),[Q,se]=r.useState({name:"",description:"",status:"active"}),re=Mt(),fe=r.useRef(!1),te=r.useCallback(async()=>{u(!0),xe(!1);try{const k=ee?`${S==="desc"?"-":""}${ee}`:"name",Y={...m&&{search:m},...d&&{status:d},...(s==null?void 0:s.id)&&{sector_id:s.id},page:H,page_size:a,ordering:k};if(n){const ae=parseInt(n),we=St(ae);if(we!==null){const Ee=jt(we);Ee&&(Y.difficulty_min=Ee.min,Y.difficulty_max=Ee.max)}}L!==""&&L!==null&&L!==void 0&&(Y.volume_min=Number(L)),F!==""&&F!==null&&F!==void 0&&(Y.volume_max=Number(F));const oe=await rt(Y);c(oe.results||[]),U(oe.count||0),W(Math.ceil((oe.count||0)/a)),setTimeout(()=>{xe(!0),u(!1)},100)}catch(k){console.error("Error loading clusters:",k),t.error(`Failed to load clusters: ${k.message}`),xe(!0),u(!1)}},[H,d,ee,S,m,n,L,F,s,a]);r.useEffect(()=>{te()},[te]),r.useEffect(()=>{const k=()=>{te()},Y=()=>{te()};return window.addEventListener("siteChanged",k),window.addEventListener("sectorChanged",Y),()=>{window.removeEventListener("siteChanged",k),window.removeEventListener("sectorChanged",Y)}},[te]),r.useEffect(()=>{const k=setTimeout(()=>{H===1?te():V(1)},500);return()=>clearTimeout(k)},[m,H,te]),r.useEffect(()=>{V(1)},[a]);const ue=(k,Y)=>{K(k||"name"),O(Y),V(1)},Z=r.useCallback(async(k,Y)=>{try{const oe=k.map(ae=>parseInt(ae));await gs(oe,Y),await te()}catch(oe){throw oe}},[te]),y=r.useCallback(async k=>{try{if(!k||k.length===0)throw new Error("No records selected for export");t.info("Export functionality coming soon")}catch(Y){throw Y}},[]),I=r.useCallback(async(k,Y)=>{if(k==="generate_ideas")try{const oe=await Pt([Y.id]);oe.success&&oe.task_id?re.openModal(oe.task_id,"Generating Ideas","ai-generate-ideas-01"):oe.success&&oe.ideas_created?(t.success(oe.message||"Ideas generated successfully"),await te()):t.error(oe.error||"Failed to generate ideas")}catch(oe){t.error(`Failed to generate ideas: ${oe.message}`)}},[t,re,te]),B=r.useCallback(async(k,Y)=>{if(k==="auto_generate_ideas"){if(Y.length===0){t.error("Please select at least one cluster to generate ideas");return}if(Y.length>5){t.error("Maximum 5 clusters allowed for idea generation");return}try{const oe=Y.map(we=>parseInt(we)),ae=await Pt(oe);if(ae&&ae.success===!1){const we=ae.error||"Failed to generate ideas";t.error(we);return}if(ae&&ae.success)ae.task_id?(fe.current=!1,re.openModal(ae.task_id,"Generating Content Ideas","ai-generate-ideas-01")):(t.success(`Ideas generation complete: ${ae.ideas_created||0} ideas created`),fe.current||(fe.current=!0,te()));else{const we=(ae==null?void 0:ae.error)||"Unexpected response format";t.error(we)}}catch(oe){let ae="Failed to generate ideas";oe.message&&(ae=oe.message.replace(/^API Error \(\d+\): [^-]+ - /,"").trim(),(!ae||ae===oe.message)&&(ae=oe.message)),t.error(ae)}}else t.info(`Bulk action "${k}" for ${Y.length} items`)},[t,te,re]);r.useEffect(()=>{const k=Y=>{N.current&&!N.current.contains(Y.target)&&P.current&&!P.current.contains(Y.target)&&ie(!1)};return q&&document.addEventListener("mousedown",k),()=>{document.removeEventListener("mousedown",k)}},[q]);const ce=r.useMemo(()=>js({activeSector:s,formData:Q,setFormData:se,searchTerm:m,setSearchTerm:p,statusFilter:d,setStatusFilter:f,difficultyFilter:n,setDifficultyFilter:x,volumeMin:L,volumeMax:F,setVolumeMin:z,setVolumeMax:le,isVolumeDropdownOpen:q,setIsVolumeDropdownOpen:ie,tempVolumeMin:C,tempVolumeMax:$,setTempVolumeMin:M,setTempVolumeMax:A,volumeButtonRef:P,volumeDropdownRef:N,setCurrentPage:V,loadClusters:te}),[s,Q,m,d,n,L,F,q,C,$,te]),ve=r.useMemo(()=>ce!=null&&ce.headerMetrics?ce.headerMetrics.map(k=>({label:k.label,value:k.calculate({clusters:o,totalCount:R}),accentColor:k.accentColor})):[],[ce==null?void 0:ce.headerMetrics,o,R]),ye=r.useCallback(()=>{se({name:"",description:"",status:"active"}),w(!1),X(null)},[]),Le=async()=>{try{v&&G?(await ps(G.id,Q),t.success("Cluster updated successfully")):(await hs(Q),t.success("Cluster created successfully")),j(!1),ye(),te()}catch(k){t.error(`Failed to save: ${k.message}`)}};return e.jsxs(e.Fragment,{children:[e.jsx(ot,{title:"Keyword Clusters",titleIcon:e.jsx(zt,{className:"text-success-500 size-5"}),subtitle:"Organize keywords into content clusters for better SEO strategy",columns:ce.columns,data:o,loading:g,showContent:ne,filters:ce.filters,filterValues:{search:m,status:d,difficulty:n,volumeMin:L,volumeMax:F},onFilterChange:(k,Y)=>{const oe=Y==null?"":String(Y);k==="search"?p(oe):k==="status"?f(oe):k==="difficulty"&&x(oe),V(1)},onEdit:k=>{X(k),se({name:k.name||"",description:k.description||"",status:k.status||"active"}),w(!0),j(!0)},onCreate:()=>{ye(),j(!0)},createLabel:"Create Cluster",onCreateIcon:e.jsx(Ge,{}),onDelete:async k=>{await fs(k),te()},onBulkDelete:async k=>{const Y=await ms(k);return te(),Y},onBulkExport:y,onBulkUpdateStatus:Z,onBulkAction:B,onRowAction:I,getItemDisplayName:k=>k.name,onExport:async()=>{t.info("Export functionality coming soon")},onExportIcon:e.jsx(kt,{}),selectionLabel:"cluster",pagination:{currentPage:H,totalPages:J,totalCount:R,onPageChange:V},selection:{selectedIds:h,onSelectionChange:T},sorting:{sortBy:ee,sortDirection:S,onSort:ue},headerMetrics:ve,onFilterReset:()=>{p(""),f(""),x(""),z(""),le(""),V(1)}}),e.jsx(Et,{isOpen:re.isOpen,title:re.title,percentage:re.progress.percentage,status:re.progress.status,message:re.progress.message,details:re.progress.details,taskId:re.taskId||void 0,functionId:re.functionId,onClose:()=>{re.closeModal(),re.progress.status==="completed"&&!fe.current&&(fe.current=!0,te())}}),e.jsx(It,{isOpen:de,onClose:()=>{j(!1),ye()},onSubmit:Le,title:v?"Edit Cluster":"Add Cluster",submitLabel:v?"Update":"Create",fields:ce.formFields()})]})}const kr=Object.freeze(Object.defineProperty({__proto__:null,default:tr},Symbol.toStringTag,{value:"Module"}));function sr(){const t=Je(),{activeSector:s}=Be(),{pageSize:a}=Ye(),[o,c]=r.useState([]),[g,u]=r.useState([]),[m,p]=r.useState(!0),[d,f]=r.useState(""),[n,x]=r.useState(""),[L,z]=r.useState(""),[F,le]=r.useState(""),[q,ie]=r.useState(""),[C,M]=r.useState([]),[$,A]=r.useState(1),[N,P]=r.useState(1),[h,T]=r.useState(0),[H,V]=r.useState("created_at"),[J,W]=r.useState("desc"),[R,U]=r.useState(!1),[ee,K]=r.useState(!1),[S,O]=r.useState(!1),[ne,xe]=r.useState(null),[de,j]=r.useState({idea_title:"",description:"",content_structure:"blog_post",content_type:"blog_post",target_keywords:"",keyword_cluster_id:null,status:"new",estimated_word_count:1e3}),v=Mt();r.useEffect(()=>{(async()=>{try{const I=await rt({ordering:"name"});u(I.results||[])}catch(I){console.error("Error fetching clusters:",I)}})()},[]);const w=r.useCallback(async()=>{p(!0),U(!1);try{const y=H?`${J==="desc"?"-":""}${H}`:"-created_at",I={...d&&{search:d},...n&&{status:n},...L&&{keyword_cluster_id:L},...F&&{content_structure:F},...q&&{content_type:q},page:$,page_size:a,ordering:y},B=await xs(I);c(B.results||[]),T(B.count||0),P(Math.ceil((B.count||0)/a)),setTimeout(()=>{U(!0),p(!1)},100)}catch(y){console.error("Error loading ideas:",y),t.error(`Failed to load ideas: ${y.message}`),U(!0),p(!1)}},[$,n,L,F,q,H,J,d,s,a]);r.useEffect(()=>{w()},[w]),r.useEffect(()=>{const y=()=>{w()},I=()=>{w()};return window.addEventListener("siteChanged",y),window.addEventListener("sectorChanged",I),()=>{window.removeEventListener("siteChanged",y),window.removeEventListener("sectorChanged",I)}},[w]),r.useEffect(()=>{A(1)},[a]),r.useEffect(()=>{const y=setTimeout(()=>{$===1?w():A(1)},500);return()=>clearTimeout(y)},[d,$,w]);const G=(y,I)=>{V(y||"created_at"),W(I),A(1)},X=r.useCallback(async(y,I)=>{try{const B=y.map(ce=>parseInt(ce));await ys(B,I),await w()}catch(B){throw B}},[w]),Q=r.useCallback(async y=>{try{if(!y||y.length===0)throw new Error("No records selected for export");t.info("Export functionality coming soon")}catch(I){throw I}},[]),se=r.useCallback(async(y,I)=>{if(y==="queue_to_writer"){if(I.status!=="new"){t.error(`Only ideas with status "new" can be queued. Current status: ${I.status}`);return}try{const B=await Rt([I.id]);t.success(`Queue complete: ${B.created_count||0} task created`),await w()}catch(B){t.error(`Failed to queue idea: ${B.message}`)}}},[t,w]),re=r.useCallback(async(y,I)=>{if(y==="queue_to_writer"){if(I.length===0){t.error("Please select at least one idea to queue");return}try{const B=I.map(ve=>parseInt(ve)),ce=await Rt(B);t.success(`Queue complete: ${ce.created_count||0} tasks created from ${I.length} ideas`),await w()}catch(B){t.error(`Failed to queue ideas: ${B.message}`)}}else t.info(`Bulk action "${y}" for ${I.length} items`)},[t,w]),fe=r.useMemo(()=>Is({clusters:g,activeSector:s,formData:de,setFormData:j,searchTerm:d,setSearchTerm:f,statusFilter:n,setStatusFilter:x,clusterFilter:L,setClusterFilter:z,structureFilter:F,setStructureFilter:le,typeFilter:q,setTypeFilter:ie,setCurrentPage:A}),[g,s,de,d,n,L,F,q]),te=r.useMemo(()=>fe!=null&&fe.headerMetrics?fe.headerMetrics.map(y=>({label:y.label,value:y.calculate({ideas:o,totalCount:h}),accentColor:y.accentColor})):[],[fe==null?void 0:fe.headerMetrics,o,h]),ue=r.useCallback(()=>{j({idea_title:"",description:"",content_structure:"blog_post",content_type:"blog_post",target_keywords:"",keyword_cluster_id:null,status:"new",estimated_word_count:1e3}),O(!1),xe(null)},[]),Z=async()=>{try{S&&ne?(await ks(ne.id,de),t.success("Idea updated successfully")):(await vs(de),t.success("Idea created successfully")),K(!1),ue(),w()}catch(y){t.error(`Failed to save: ${y.message}`)}};return e.jsxs(e.Fragment,{children:[e.jsx(ot,{title:"Content Ideas",titleIcon:e.jsx(bt,{className:"text-warning-500 size-5"}),subtitle:"Generate and organize content ideas based on keyword research",columns:fe.columns,data:o,loading:m,showContent:R,filters:fe.filters,filterValues:{search:d,status:n,keyword_cluster_id:L,content_structure:F,content_type:q},onFilterChange:(y,I)=>{const B=I==null?"":String(I);y==="search"?f(B):y==="status"?x(B):y==="keyword_cluster_id"?z(B):y==="content_structure"?le(B):y==="content_type"&&ie(B),A(1)},onEdit:y=>{xe(y),j({idea_title:y.idea_title||"",description:y.description||"",content_structure:y.content_structure||"blog_post",content_type:y.content_type||"blog_post",target_keywords:y.target_keywords||"",keyword_cluster_id:y.keyword_cluster_id||null,status:y.status||"new",estimated_word_count:y.estimated_word_count||1e3}),O(!0),K(!0)},onCreate:()=>{ue(),K(!0)},createLabel:"Add Idea",onCreateIcon:e.jsx(Ge,{}),onDelete:async y=>{await ws(y),w()},onBulkDelete:async y=>{const I=await bs(y);return w(),I},onBulkExport:Q,onBulkUpdateStatus:X,onBulkAction:re,onRowAction:se,getItemDisplayName:y=>y.idea_title,onExport:async()=>{t.info("Export functionality coming soon")},onExportIcon:e.jsx(kt,{}),selectionLabel:"idea",pagination:{currentPage:$,totalPages:N,totalCount:h,onPageChange:A},selection:{selectedIds:C,onSelectionChange:M},sorting:{sortBy:H,sortDirection:J,onSort:G},headerMetrics:te,onFilterReset:()=>{f(""),x(""),z(""),le(""),ie(""),A(1)}}),e.jsx(Et,{isOpen:v.isOpen,title:v.title,percentage:v.progress.percentage,status:v.progress.status,message:v.progress.message,details:v.progress.details,taskId:v.taskId||void 0,functionId:v.functionId,onClose:()=>{const y=v.progress.status==="completed";v.closeModal(),y&&w()}}),e.jsx(It,{isOpen:ee,onClose:()=>{K(!1),ue()},onSubmit:Z,title:S?"Edit Idea":"Add Idea",submitLabel:S?"Update":"Create",fields:fe.formFields(g)})]})}const vr=Object.freeze(Object.defineProperty({__proto__:null,default:sr},Symbol.toStringTag,{value:"Module"}));function rr(){const t=Je(),{activeSite:s}=_t(),{activeSector:a,loadSectorsForSite:o}=Be(),{pageSize:c}=Ye(),[g,u]=r.useState([]),[m,p]=r.useState(!0),[d,f]=r.useState(!1),[n,x]=r.useState([]),L=r.useRef(new Set),[z,F]=r.useState(1),[le,q]=r.useState(1),[ie,C]=r.useState(0),[M,$]=r.useState("keyword"),[A,N]=r.useState("asc"),[P,h]=r.useState(""),[T,H]=r.useState(""),[V,J]=r.useState(""),[W,R]=r.useState(""),[U,ee]=r.useState("");r.useEffect(()=>{s!=null&&s.id&&o(s.id)},[s==null?void 0:s.id]);const K=r.useCallback(async()=>{if(!s||!s.industry){u([]),C(0),q(1),p(!1);return}p(!0),f(!1);try{let j=new Set;try{const{fetchKeywords:Z,fetchSiteSectors:y}=await Pe(async()=>{const{fetchKeywords:B,fetchSiteSectors:ce}=await import("./page-dashboard-DxYTR5eF.js").then(ve=>ve.a7);return{fetchKeywords:B,fetchSiteSectors:ce}},__vite__mapDeps([0,1,2,3,4,5,6])),I=await y(s.id);for(const B of I)try{((await Z({site_id:s.id,sector_id:B.id,page_size:1e3})).results||[]).forEach(ve=>{const ye=ve.seed_keyword_id||ve.seed_keyword&&ve.seed_keyword.id;ye&&j.add(Number(ye))})}catch(ce){console.warn(`Could not fetch attached keywords for sector ${B.id}:`,ce)}}catch(Z){console.warn("Could not fetch sectors or attached keywords:",Z)}const v={industry:s.industry,page_size:1e3};a&&a.industry_sector&&(v.sector=a.industry_sector),P&&(v.search=P),T&&(v.intent=T);let w=[],G=1,X=!0;for(;X;){const Z={...v,page:G},y=await xt(Z);if(y.results&&y.results.length>0&&(w=[...w,...y.results]),X=y.next!==null&&y.next!==void 0,G++,G>100){console.warn("Reached maximum page limit (100) while fetching seed keywords");break}}let Q=w.map(Z=>{const y=j.has(Number(Z.id))||L.current.has(Number(Z.id));return{...Z,isAdded:!!y}});if(V){const Z=parseInt(V),y=St(Z);if(y!==null){const I=jt(y);I&&(Q=Q.filter(B=>B.difficulty>=I.min&&B.difficulty<=I.max))}}W!==""&&W!==null&&W!==void 0&&(Q=Q.filter(Z=>Z.volume>=Number(W))),U!==""&&U!==null&&U!==void 0&&(Q=Q.filter(Z=>Z.volume<=Number(U))),M&&Q.sort((Z,y)=>{let I,B;if(M==="keyword")I=Z.keyword.toLowerCase(),B=y.keyword.toLowerCase();else if(M==="volume")I=Z.volume,B=y.volume;else if(M==="difficulty")I=Z.difficulty,B=y.difficulty;else if(M==="intent")I=Z.intent.toLowerCase(),B=y.intent.toLowerCase();else return 0;return I<B?A==="asc"?-1:1:I>B?A==="asc"?1:-1:0});const se=Q.length,re=c||10,fe=(z-1)*re,te=fe+re,ue=Q.slice(fe,te);u(ue),C(se),q(Math.ceil(se/re)),f(!0)}catch(j){console.error("Error loading seed keywords:",j),t.error(`Failed to load keyword opportunities: ${j.message}`),u([]),C(0),q(1)}finally{p(!1)}},[s,a,z,c,P,T,V,W,U,M,A]);r.useEffect(()=>{K()},[K]),r.useEffect(()=>{const j=setTimeout(()=>{F(1)},500);return()=>clearTimeout(j)},[P]),r.useEffect(()=>{F(1)},[c]);const S=(j,v)=>{$(j||"keyword"),N(v),F(1)},O=r.useCallback(async j=>{var w;if(!s){t.error("Please select an active site first");return}let v=a;if(!v)try{const{fetchSiteSectors:G}=await Pe(async()=>{const{fetchSiteSectors:Q}=await import("./page-dashboard-DxYTR5eF.js").then(se=>se.a7);return{fetchSiteSectors:Q}},__vite__mapDeps([0,1,2,3,4,5,6])),X=await G(s.id);if(X.length===0){t.error("No sectors available for this site. Please create a sector first.");return}v={id:X[0].id,name:X[0].name,slug:X[0].slug,site_id:s.id,is_active:X[0].is_active!==!1,industry_sector:X[0].industry_sector||null}}catch(G){t.error(`Failed to get sectors: ${G.message}`);return}try{const G=await Ss(j,s.id,v.id);G.success?(t.success(`Successfully added ${G.created} keyword(s) to workflow`),j.forEach(X=>{L.current.add(X)}),x([]),u(X=>X.map(Q=>j.includes(Q.id)?{...Q,isAdded:!0}:Q))):t.error(`Failed to add keywords: ${((w=G.errors)==null?void 0:w.join(", "))||"Unknown error"}`)}catch(G){t.error(`Failed to add keywords: ${G.message}`)}},[s,a,t]),ne=r.useCallback(async j=>{if(j.length===0){t.error("Please select at least one keyword");return}const v=j.filter(G=>{const X=g.find(Q=>String(Q.id)===G);return X&&!X.isAdded});if(v.length===0){t.error("All selected keywords are already added to workflow");return}v.length<j.length&&t.info(`${j.length-v.length} keyword(s) were already added and were skipped`);const w=v.map(G=>parseInt(G));await O(w)},[O,t,g]),xe=r.useCallback(async()=>{if(!s||!s.industry){t.error("Please select an active site first");return}try{const j={industry:s.industry,page_size:1e3};a!=null&&a.industry_sector&&(j.sector=a.industry_sector);const w=(await xt(j)).results||[];if(w.length===0){t.error("No keywords available to add");return}const{fetchKeywords:G,fetchSiteSectors:X}=await Pe(async()=>{const{fetchKeywords:te,fetchSiteSectors:ue}=await import("./page-dashboard-DxYTR5eF.js").then(Z=>Z.a7);return{fetchKeywords:te,fetchSiteSectors:ue}},__vite__mapDeps([0,1,2,3,4,5,6])),Q=await X(s.id);let se=new Set;for(const te of Q)try{((await G({site_id:s.id,sector_id:te.id,page_size:1e3})).results||[]).forEach(Z=>{const y=Z.seed_keyword_id||Z.seed_keyword&&Z.seed_keyword.id;y&&se.add(Number(y))})}catch(ue){console.warn(`Could not fetch attached keywords for sector ${te.id}:`,ue)}const re=w.filter(te=>!se.has(te.id));if(re.length===0){t.error("All keywords are already added to workflow");return}re.length<w.length&&t.info(`${w.length-re.length} keyword(s) were already added and were skipped`);const fe=re.map(te=>te.id);await O(fe)}catch(j){t.error(`Failed to load all keywords: ${j.message}`)}},[s,a,O,t]),de=r.useMemo(()=>({columns:[{key:"keyword",label:"Keyword",sortable:!0,sortField:"keyword"},...!a?[{key:"sector_name",label:"Sector",sortable:!1,render:(v,w)=>e.jsx(ft,{color:"info",size:"sm",variant:"light",children:w.sector_name||"-"})}]:[],{key:"volume",label:"Volume",sortable:!0,sortField:"volume",render:v=>v.toLocaleString()},{key:"difficulty",label:"Difficulty",sortable:!0,sortField:"difficulty",align:"center",render:v=>{const w=Ns(v),G=typeof w=="number"&&w===5?"solid":typeof w=="number"&&(w===2||w===3||w===4)?"light":typeof w=="number"&&w===1?"solid":"light",X=typeof w=="number"&&w===1||typeof w=="number"&&w===2?"success":typeof w=="number"&&w===3?"warning":typeof w=="number"&&w===4||typeof w=="number"&&w===5?"error":"light";return typeof w=="number"?e.jsx(ft,{color:X,variant:G,size:"sm",children:w}):w}},{key:"intent",label:"Intent",sortable:!0,sortField:"intent",render:v=>{const w=G=>{const X=(G==null?void 0:G.toLowerCase())||"";return X==="transactional"||X==="commercial"?"success":X==="navigational"?"warning":"info"};return e.jsx(ft,{color:w(v),size:"sm",variant:(v==null?void 0:v.toLowerCase())==="informational"?"light":void 0,children:v})}}],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"}]}]}),[a]);return e.jsx(e.Fragment,{children:e.jsx(ot,{title:"Keyword Opportunities",titleIcon:e.jsx(bt,{className:"text-brand-500 size-5"}),subtitle:"Discover and add keywords to your workflow",columns:de.columns,data:g,loading:m,showContent:d,filters:de.filters,filterValues:{search:P,intent:T,difficulty:V},onFilterChange:(j,v)=>{const w=v==null?"":String(v);j==="search"?h(w):j==="intent"?(H(w),F(1)):j==="difficulty"&&(J(w),F(1))},onRowAction:async(j,v)=>{if(j==="add_to_workflow"){if(v.isAdded){t.info("This keyword is already added to workflow");return}await O([v.id])}},onBulkAction:async(j,v)=>{j==="add_selected_to_workflow"&&await ne(v)},onCreate:xe,createLabel:"Add All to Workflow",onCreateIcon:e.jsx(Ge,{}),pagination:{currentPage:z,totalPages:le,totalCount:ie,onPageChange:F},sorting:{sortBy:M,sortDirection:A,onSort:S},selection:{selectedIds:n,onSelectionChange:x}})})}const Sr=Object.freeze(Object.defineProperty({__proto__:null,default:rr},Symbol.toStringTag,{value:"Module"}));export{kr as C,br as D,It as F,yr as H,vr as I,wr as K,ze as P,nt as S,ot as T,Ye as a,Mt as b,Et as c,As as d,_t as e,Sr as f,Be as u};