Add SEO fields to Tasks model, improve content generation response handling, and enhance progress bar animation

- Added primary_keyword, secondary_keywords, tags, and categories fields to Tasks model
- Updated generate_content function to handle full JSON response with all SEO fields
- Improved progress bar animation: smooth 1% increments every 300ms
- Enhanced step detection for content generation vs clustering vs ideas
- Fixed progress modal to show correct messages for each function type
- Added comprehensive logging to Keywords and Tasks pages for AI functions
- Fixed error handling to show meaningful error messages instead of generic failures
This commit is contained in:
Gitea Deploy
2025-11-09 21:22:34 +00:00
parent 09d22ab0e2
commit 961362e088
17340 changed files with 10636 additions and 2248776 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{j as e}from"./vendor-react-core-DjsjKnCi.js";import{H as n,a as i}from"./vendor-helmet-MZDArkdS.js";const c=({title:r,description:t})=>e.jsxs(n,{children:[e.jsx("title",{children:r}),e.jsx("meta",{name:"description",content:t})]}),x=({children:r})=>e.jsx(i,{children:r}),d=({title:r,children:t,className:s="",desc:a=""})=>e.jsxs("div",{className:`rounded-2xl border border-gray-200 bg-white dark:border-gray-800 dark:bg-white/[0.03] ${s}`,children:[e.jsxs("div",{className:"px-6 py-5",children:[e.jsx("h3",{className:"text-base font-medium text-gray-800 dark:text-white/90",children:r}),a&&e.jsx("p",{className:"mt-1 text-sm text-gray-500 dark:text-gray-400",children:a})]}),e.jsx("div",{className:"p-4 border-t border-gray-100 dark:border-gray-800 sm:p-6",children:e.jsx("div",{className:"space-y-6",children:t})})]});function o(){return e.jsxs(e.Fragment,{children:[e.jsx(c,{title:"Analytics - IGNY8",description:"Performance analytics"}),e.jsx(d,{title:"Coming Soon",desc:"Performance analytics",children:e.jsxs("div",{className:"text-center py-8",children:[e.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Analytics - Coming Soon"}),e.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400 mt-2",children:"Performance analytics and reporting for data-driven decisions"})]})})]})}const p=Object.freeze(Object.defineProperty({__proto__:null,default:o},Symbol.toStringTag,{value:"Module"}));export{x as A,d as C,c as P,p as a};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
const t={"/planner/keywords":{export:{title:"Export Selected Keywords",message:e=>`You are about to export ${e} selected keyword${e!==1?"s":""}. The export will be downloaded as a CSV file.`,confirmText:"Export",itemNamePlural:"keywords"},updateStatus:{title:"Update Status",message:e=>`You are about to update the status of ${e} selected keyword${e!==1?"s":""}. Select the new status below.`,confirmText:"Update Status",itemNamePlural:"keywords",statusOptions:[{value:"active",label:"Active"},{value:"pending",label:"Pending"},{value:"archived",label:"Archived"}]}},"/planner/clusters":{export:{title:"Export Selected Clusters",message:e=>`You are about to export ${e} selected cluster${e!==1?"s":""}. The export will be downloaded as a CSV file.`,confirmText:"Export",itemNamePlural:"clusters"},updateStatus:{title:"Update Status",message:e=>`You are about to update the status of ${e} selected cluster${e!==1?"s":""}. Select the new status below.`,confirmText:"Update Status",itemNamePlural:"clusters",statusOptions:[{value:"active",label:"Active"},{value:"inactive",label:"Inactive"}]}},"/planner/ideas":{export:{title:"Export Selected Ideas",message:e=>`You are about to export ${e} selected idea${e!==1?"s":""}. The export will be downloaded as a CSV file.`,confirmText:"Export",itemNamePlural:"ideas"},updateStatus:{title:"Update Status",message:e=>`You are about to update the status of ${e} selected idea${e!==1?"s":""}. Select the new status below.`,confirmText:"Update Status",itemNamePlural:"ideas",statusOptions:[{value:"new",label:"New"},{value:"scheduled",label:"Scheduled"},{value:"published",label:"Published"}]}},"/writer/tasks":{export:{title:"Export Selected Tasks",message:e=>`You are about to export ${e} selected task${e!==1?"s":""}. The export will be downloaded as a CSV file.`,confirmText:"Export",itemNamePlural:"tasks"},updateStatus:{title:"Update Status",message:e=>`You are about to update the status of ${e} selected task${e!==1?"s":""}. Select the new status below.`,confirmText:"Update Status",itemNamePlural:"tasks",statusOptions:[{value:"queued",label:"Queued"},{value:"draft",label:"Draft"},{value:"in_progress",label:"In Progress"},{value:"completed",label:"Completed"}]}},"/writer/drafts":{export:{title:"Export Selected Drafts",message:e=>`You are about to export ${e} selected draft${e!==1?"s":""}. The export will be downloaded as a CSV file.`,confirmText:"Export",itemNamePlural:"drafts"},updateStatus:{title:"Update Status",message:e=>`You are about to update the status of ${e} selected draft${e!==1?"s":""}. Select the new status below.`,confirmText:"Update Status",itemNamePlural:"drafts",statusOptions:[{value:"draft",label:"Draft"},{value:"review",label:"Review"},{value:"published",label:"Published"}]}},"/writer/published":{export:{title:"Export Selected Published Content",message:e=>`You are about to export ${e} selected published content item${e!==1?"s":""}. The export will be downloaded as a CSV file.`,confirmText:"Export",itemNamePlural:"published content items"},updateStatus:{title:"Update Status",message:e=>`You are about to update the status of ${e} selected published content item${e!==1?"s":""}. Select the new status below.`,confirmText:"Update Status",itemNamePlural:"published content items",statusOptions:[{value:"published",label:"Published"},{value:"archived",label:"Archived"}]}}};function a(e){return t[e]||null}export{a as g};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
const t={"/planner/keywords":{title:"Delete Keywords",singleItemMessage:"You are about to delete this keyword. This action cannot be undone.",multipleItemsMessage:e=>`You are deleting ${e} keywords. This action cannot be undone.`,itemNameSingular:"keyword",itemNamePlural:"keywords"},"/planner/clusters":{title:"Delete Clusters",singleItemMessage:"You are about to delete this cluster. All associated keywords will remain but will no longer be grouped under this cluster.",multipleItemsMessage:e=>`You are deleting ${e} clusters. All associated keywords will remain but will no longer be grouped under these clusters.`,itemNameSingular:"cluster",itemNamePlural:"clusters"},"/planner/ideas":{title:"Delete Ideas",singleItemMessage:"You are about to delete this idea. This action cannot be undone.",multipleItemsMessage:e=>`You are deleting ${e} ideas. This action cannot be undone.`,itemNameSingular:"idea",itemNamePlural:"ideas"},"/writer/tasks":{title:"Delete Tasks",singleItemMessage:"You are about to delete this task. This action cannot be undone.",multipleItemsMessage:e=>`You are deleting ${e} tasks. This action cannot be undone.`,itemNameSingular:"task",itemNamePlural:"tasks"},"/writer/drafts":{title:"Delete Drafts",singleItemMessage:"You are about to delete this draft. This action cannot be undone.",multipleItemsMessage:e=>`You are deleting ${e} drafts. This action cannot be undone.`,itemNameSingular:"draft",itemNamePlural:"drafts"},"/writer/published":{title:"Delete Published Content",singleItemMessage:"You are about to delete this published content. This action cannot be undone.",multipleItemsMessage:e=>`You are deleting ${e} published content items. This action cannot be undone.`,itemNameSingular:"published content",itemNamePlural:"published content items"}};function s(e){return t[e]||null}export{s as g};

View File

@@ -0,0 +1 @@
import{j as t}from"./vendor-react-core-DjsjKnCi.js";import{P as e,C as n}from"./page-analytics.tsx-1KCk8AGD.js";function s(){return t.jsxs(t.Fragment,{children:[t.jsx(e,{title:"Help & Support - IGNY8",description:"Documentation and support"}),t.jsx(n,{title:"Coming Soon",desc:"Documentation and support",children:t.jsxs("div",{className:"text-center py-8",children:[t.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Help & Support - Coming Soon"}),t.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400 mt-2",children:"Documentation and support resources for getting started"})]})})]})}const l=Object.freeze(Object.defineProperty({__proto__:null,default:s},Symbol.toStringTag,{value:"Module"}));function o(){return t.jsxs(t.Fragment,{children:[t.jsx(e,{title:"Documentation - IGNY8",description:"Complete documentation"}),t.jsx(n,{title:"Coming Soon",desc:"Complete documentation",children:t.jsxs("div",{className:"text-center py-8",children:[t.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Documentation - Coming Soon"}),t.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400 mt-2",children:"Comprehensive documentation and guides"})]})})]})}const d=Object.freeze(Object.defineProperty({__proto__:null,default:o},Symbol.toStringTag,{value:"Module"}));function i(){return t.jsxs(t.Fragment,{children:[t.jsx(e,{title:"System Testing - IGNY8",description:"System diagnostics"}),t.jsx(n,{title:"Coming Soon",desc:"System diagnostics",children:t.jsxs("div",{className:"text-center py-8",children:[t.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"System Testing - Coming Soon"}),t.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400 mt-2",children:"Test system functionality and diagnose issues"})]})})]})}const m=Object.freeze(Object.defineProperty({__proto__:null,default:i},Symbol.toStringTag,{value:"Module"}));function r(){return t.jsxs(t.Fragment,{children:[t.jsx(e,{title:"Function Testing - IGNY8",description:"Function testing"}),t.jsx(n,{title:"Coming Soon",desc:"Function testing",children:t.jsxs("div",{className:"text-center py-8",children:[t.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Function Testing - Coming Soon"}),t.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400 mt-2",children:"Test individual functions and components"})]})})]})}const g=Object.freeze(Object.defineProperty({__proto__:null,default:r},Symbol.toStringTag,{value:"Module"}));export{d as D,g as F,l as H,m as S};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{j as l}from"./vendor-react-core-DjsjKnCi.js";import{a as r,f as s,c as n,B as t}from"./page-clusters.config.tsx-9GAd-_h-.js";const d=i=>({columns:[{key:"task_title",label:"Task",sortable:!1,width:"250px",render:(e,a)=>l.jsx("span",{className:"font-medium text-gray-800 dark:text-white/90",children:a.task_title||"-"})},{key:"image_type",label:"Image Type",sortable:!1,width:"150px",render:e=>l.jsx(t,{color:"info",size:"sm",variant:"light",children:(e==null?void 0:e.replace("_"," "))||"-"})},{key:"image_url",label:"Image",sortable:!1,width:"200px",render:e=>e?l.jsx("a",{href:e,target:"_blank",rel:"noopener noreferrer",className:"text-brand-500 hover:text-brand-600 text-sm truncate block max-w-[200px]",children:"View Image"}):l.jsx("span",{className:"text-gray-400",children:"-"})},{...r,sortable:!0,sortField:"status",render:e=>{const a={pending:"warning",generated:"success",failed:"error"};return l.jsx(t,{color:a[e]||"warning",size:"sm",children:e})}},{key:"position",label:"Position",sortable:!1,width:"100px",render:e=>e||0},{...n,sortable:!0,sortField:"created_at",render:e=>s(e)}],filters:[{key:"search",label:"Search",type:"text",placeholder:"Search by task title..."},{key:"image_type",label:"Image Type",type:"select",options:[{value:"",label:"All Types"},{value:"featured",label:"Featured Image"},{value:"desktop",label:"Desktop Image"},{value:"mobile",label:"Mobile Image"},{value:"in_article",label:"In-Article Image"}]},{key:"status",label:"Status",type:"select",options:[{value:"",label:"All Status"},{value:"pending",label:"Pending"},{value:"generated",label:"Generated"},{value:"failed",label:"Failed"}]}],headerMetrics:[{label:"Total Images",value:0,accentColor:"blue",calculate:e=>e.totalCount||0},{label:"Generated",value:0,accentColor:"green",calculate:e=>e.images.filter(a=>a.status==="generated").length},{label:"Pending",value:0,accentColor:"amber",calculate:e=>e.images.filter(a=>a.status==="pending").length},{label:"Failed",value:0,accentColor:"error",calculate:e=>e.images.filter(a=>a.status==="failed").length}]});export{d as c};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{j as e}from"./vendor-react-core-DjsjKnCi.js";import{G as t}from"./page-authpages-CY7hjDHU.js";import{L as a}from"./vendor-react-router-BJY_70Cr.js";import{P as r}from"./page-analytics.tsx-1KCk8AGD.js";function o(){return e.jsxs(e.Fragment,{children:[e.jsx(r,{title:"React.js 404 Dashboard | TailAdmin - React.js Admin Dashboard Template",description:"This is React.js 404 Dashboard page for TailAdmin - React.js Tailwind CSS Admin Dashboard Template"}),e.jsxs("div",{className:"relative flex flex-col items-center justify-center min-h-screen p-6 overflow-hidden z-1",children:[e.jsx(t,{}),e.jsxs("div",{className:"mx-auto w-full max-w-[242px] text-center sm:max-w-[472px]",children:[e.jsx("h1",{className:"mb-8 font-bold text-gray-800 text-title-md dark:text-white/90 xl:text-title-2xl",children:"ERROR"}),e.jsx("img",{src:"/images/error/404.svg",alt:"404",className:"dark:hidden"}),e.jsx("img",{src:"/images/error/404-dark.svg",alt:"404",className:"hidden dark:block"}),e.jsx("p",{className:"mt-10 mb-6 text-base text-gray-700 dark:text-gray-400 sm:text-lg",children:"We cant seem to find the page you are looking for!"}),e.jsx(a,{to:"/",className:"inline-flex items-center justify-center rounded-lg border border-gray-300 bg-white px-5 py-3.5 text-sm font-medium text-gray-700 shadow-theme-xs hover:bg-gray-50 hover:text-gray-800 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-white/[0.03] dark:hover:text-gray-200",children:"Back to Home Page"})]}),e.jsxs("p",{className:"absolute text-sm text-center text-gray-500 -translate-x-1/2 bottom-6 left-1/2 dark:text-gray-400",children:["© ",new Date().getFullYear()," - TailAdmin"]})]})]})}export{o as N};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{j as t}from"./vendor-react-core-DjsjKnCi.js";import{P as e,C as s}from"./page-analytics.tsx-1KCk8AGD.js";import"./vendor-other-CdRIx1s3.js";import"./vendor-helmet-MZDArkdS.js";function i(){return t.jsxs(t.Fragment,{children:[t.jsx(e,{title:"Schedules - IGNY8",description:"Automation schedules"}),t.jsx(s,{title:"Coming Soon",desc:"Automation schedules",children:t.jsxs("div",{className:"text-center py-8",children:[t.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Schedules - Coming Soon"}),t.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400 mt-2",children:"Content scheduling and automation for consistent publishing"})]})})]})}export{i as default};

View File

@@ -0,0 +1 @@
import{j as e}from"./vendor-react-core-DjsjKnCi.js";import{S as s,a as o,b as n,c as l,d as b,e as w}from"./page-authpages-CY7hjDHU.js";const i=e.jsx(b,{className:"w-5 h-5"}),m=e.jsx(w,{className:"w-5 h-5"}),h=e.jsx(o,{className:"w-5 h-5"});function g(r){const a=d[r]||d.default;if(r==="/planner/keyword-opportunities")return{rowActions:a.rowActions||[],bulkActions:a.bulkActions||[]};const u=a.rowActions.filter(t=>t.key!=="edit"&&t.key!=="delete"&&t.key!=="export"),y=a.rowActions.find(t=>t.key==="edit"||t.key==="update")||{key:"edit",label:"Update",icon:i,variant:"primary"},x=a.rowActions.find(t=>t.key==="export")||{key:"export",label:"Export",icon:h,variant:"secondary"},c={key:"delete",label:"Delete",icon:m,variant:"danger"},k=a.bulkActions.filter(t=>t.key!=="delete"),p=a.bulkActions.find(t=>t.key==="delete")||c;return{rowActions:[y,...u,x,c],bulkActions:[...k,p]}}const d={"/planner/keyword-opportunities":{rowActions:[{key:"add_to_workflow",label:"Add",icon:e.jsx(n,{className:"w-5 h-5"}),variant:"success"}],bulkActions:[{key:"add_selected_to_workflow",label:"Add Selected to Workflow",icon:e.jsx(n,{className:"w-5 h-5"}),variant:"success"}]},"/planner/keywords":{rowActions:[{key:"edit",label:"Edit",icon:i,variant:"primary"}],bulkActions:[{key:"update_status",label:"Update Status",icon:e.jsx(s,{className:"w-4 h-4 text-success-500"}),variant:"secondary"},{key:"export",label:"Export Selected",icon:e.jsx(o,{className:"w-4 h-4 text-blue-light-500"}),variant:"secondary"},{key:"auto_cluster",label:"Auto-Cluster",icon:e.jsx(n,{className:"w-4 h-4 text-warning-500"}),variant:"secondary"}]},"/planner/clusters":{rowActions:[{key:"edit",label:"Edit",icon:i,variant:"primary"},{key:"generate_ideas",label:"Generate Ideas",icon:e.jsx(n,{className:"w-5 h-5"}),variant:"primary"}],bulkActions:[{key:"update_status",label:"Update Status",icon:e.jsx(s,{className:"w-4 h-4 text-success-500"}),variant:"secondary"},{key:"export",label:"Export Selected",icon:e.jsx(o,{className:"w-4 h-4 text-blue-light-500"}),variant:"secondary"},{key:"auto_generate_ideas",label:"Generate Ideas",icon:e.jsx(n,{className:"w-4 h-4 text-warning-500"}),variant:"secondary"}]},"/planner/ideas":{rowActions:[{key:"edit",label:"Edit",icon:i,variant:"primary"},{key:"queue_to_writer",label:"Queue to Writer",icon:e.jsx(l,{className:"w-5 h-5"}),variant:"primary"}],bulkActions:[{key:"update_status",label:"Update Status",icon:e.jsx(s,{className:"w-4 h-4 text-success-500"}),variant:"secondary"},{key:"export",label:"Export Selected",icon:e.jsx(o,{className:"w-4 h-4 text-blue-light-500"}),variant:"secondary"},{key:"queue_to_writer",label:"Queue to Writer",icon:e.jsx(l,{className:"w-4 h-4 text-brand-500"}),variant:"secondary"}]},"/writer/tasks":{rowActions:[{key:"edit",label:"Edit",icon:i,variant:"primary"},{key:"generate_content",label:"Generate Content",icon:e.jsx(n,{className:"w-5 h-5"}),variant:"primary"}],bulkActions:[{key:"update_status",label:"Update Status",icon:e.jsx(s,{className:"w-4 h-4 text-success-500"}),variant:"secondary"},{key:"export",label:"Export Selected",icon:e.jsx(o,{className:"w-4 h-4 text-blue-light-500"}),variant:"secondary"}]},"/writer/drafts":{rowActions:[{key:"edit",label:"Edit",icon:i,variant:"primary"}],bulkActions:[{key:"update_status",label:"Update Status",icon:e.jsx(s,{className:"w-4 h-4 text-success-500"}),variant:"secondary"},{key:"export",label:"Export Selected",icon:e.jsx(o,{className:"w-4 h-4 text-blue-light-500"}),variant:"secondary"},{key:"generate_images",label:"Generate Images",icon:e.jsx(n,{className:"w-4 h-4 text-purple-500"}),variant:"secondary"},{key:"publish",label:"Publish Selected",icon:e.jsx(s,{className:"w-4 h-4 text-success-500"}),variant:"secondary"}]},"/writer/published":{rowActions:[{key:"edit",label:"Edit",icon:i,variant:"primary"}],bulkActions:[{key:"update_status",label:"Update Status",icon:e.jsx(s,{className:"w-4 h-4 text-success-500"}),variant:"secondary"},{key:"export",label:"Export Selected",icon:e.jsx(o,{className:"w-4 h-4 text-blue-light-500"}),variant:"secondary"}]},default:{rowActions:[],bulkActions:[]}};export{g};

View File

@@ -0,0 +1 @@
import{j as r}from"./vendor-react-core-DjsjKnCi.js";import{t as u,s as n,a as i,w as c,f as p,c as b,B as o}from"./page-clusters.config.tsx-9GAd-_h-.js";const m=t=>{const s=!t.activeSector;return{columns:[{...u,sortable:!0,sortField:"title",toggleable:!0,toggleContentKey:"content",toggleContentLabel:"Generated Content"},...s?[{...n,render:(e,a)=>r.jsx(o,{color:"info",size:"sm",variant:"light",children:a.sector_name||"-"})}]:[],{key:"cluster_name",label:"Cluster",sortable:!1,width:"200px",render:(e,a)=>a.cluster_name||"-"},{key:"content_structure",label:"Structure",sortable:!0,sortField:"content_structure",width:"150px",render:e=>r.jsx(o,{color:"info",size:"sm",variant:"light",children:(e==null?void 0:e.replace("_"," "))||"-"})},{key:"content_type",label:"Type",sortable:!0,sortField:"content_type",width:"120px",render:e=>r.jsx(o,{color:"info",size:"sm",variant:"light",children:(e==null?void 0:e.replace("_"," "))||"-"})},{...i,sortable:!0,sortField:"status",render:e=>{const a={queued:"warning",in_progress:"info",draft:"warning",review:"info",published:"success",completed:"success"};return r.jsx(o,{color:a[e]||"warning",size:"sm",children:(e==null?void 0:e.replace("_"," "))||e})}},{...c,sortable:!0,sortField:"word_count",render:e=>e.toLocaleString()},{...b,sortable:!0,sortField:"created_at",render:e=>p(e)}],filters:[{key:"search",label:"Search",type:"text",placeholder:"Search tasks..."},{key:"status",label:"Status",type:"select",options:[{value:"",label:"All Status"},{value:"queued",label:"Queued"},{value:"in_progress",label:"In Progress"},{value:"draft",label:"Draft"},{value:"review",label:"Review"},{value:"published",label:"Published"},{value:"completed",label:"Completed"}]},{key:"content_structure",label:"Structure",type:"select",options:[{value:"",label:"All Structures"},{value:"cluster_hub",label:"Cluster Hub"},{value:"landing_page",label:"Landing Page"},{value:"pillar_page",label:"Pillar Page"},{value:"supporting_page",label:"Supporting Page"}]},{key:"content_type",label:"Type",type:"select",options:[{value:"",label:"All Types"},{value:"blog_post",label:"Blog Post"},{value:"article",label:"Article"},{value:"guide",label:"Guide"},{value:"tutorial",label:"Tutorial"}]},{key:"cluster_id",label:"Cluster",type:"select",options:[{value:"",label:"All Clusters"},...t.clusters.map(e=>({value:e.id.toString(),label:e.name}))],dynamicOptions:"clusters"}],formFields:e=>{var a;return[{key:"title",label:"Title",type:"text",placeholder:"Enter task title",required:!0,value:t.formData.title||"",onChange:l=>t.setFormData({...t.formData,title:l})},{key:"description",label:"Description",type:"textarea",placeholder:"Enter description",value:t.formData.description||"",onChange:l=>t.setFormData({...t.formData,description:l})},{key:"keywords",label:"Keywords",type:"text",placeholder:"Enter keywords (comma-separated)",value:t.formData.keywords||"",onChange:l=>t.setFormData({...t.formData,keywords:l})},{key:"cluster_id",label:"Cluster",type:"select",value:((a=t.formData.cluster_id)==null?void 0:a.toString())||"",onChange:l=>t.setFormData({...t.formData,cluster_id:l?parseInt(l):null}),options:[{value:"",label:"No Cluster"},...e.map(l=>({value:l.id.toString(),label:l.name}))]},{key:"content_structure",label:"Content Structure",type:"select",value:t.formData.content_structure||"blog_post",onChange:l=>t.setFormData({...t.formData,content_structure:l}),options:[{value:"cluster_hub",label:"Cluster Hub"},{value:"landing_page",label:"Landing Page"},{value:"pillar_page",label:"Pillar Page"},{value:"supporting_page",label:"Supporting Page"}]},{key:"content_type",label:"Content Type",type:"select",value:t.formData.content_type||"blog_post",onChange:l=>t.setFormData({...t.formData,content_type:l}),options:[{value:"blog_post",label:"Blog Post"},{value:"article",label:"Article"},{value:"guide",label:"Guide"},{value:"tutorial",label:"Tutorial"}]},{key:"status",label:"Status",type:"select",value:t.formData.status||"queued",onChange:l=>t.setFormData({...t.formData,status:l}),options:[{value:"queued",label:"Queued"},{value:"in_progress",label:"In Progress"},{value:"draft",label:"Draft"},{value:"review",label:"Review"},{value:"published",label:"Published"},{value:"completed",label:"Completed"}]}]},headerMetrics:[{label:"Total Tasks",value:0,accentColor:"blue",calculate:e=>e.totalCount||0},{label:"Queued",value:0,accentColor:"amber",calculate:e=>e.tasks.filter(a=>a.status==="queued").length},{label:"In Progress",value:0,accentColor:"blue",calculate:e=>e.tasks.filter(a=>a.status==="in_progress").length},{label:"Published",value:0,accentColor:"green",calculate:e=>e.tasks.filter(a=>a.status==="published").length}]}};export{m as c};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{R as b}from"./vendor-react-core-DjsjKnCi.js";const H=t=>{let s;const e=new Set,o=(i,h)=>{const v=typeof i=="function"?i(s):i;if(!Object.is(v,s)){const g=s;s=h??(typeof v!="object"||v===null)?v:Object.assign({},s,v),e.forEach(m=>m(s,g))}},a=()=>s,u={setState:o,getState:a,getInitialState:()=>d,subscribe:i=>(e.add(i),()=>e.delete(i))},d=s=t(o,a,u);return u},j=t=>t?H(t):H,k=t=>t;function w(t,s=k){const e=b.useSyncExternalStore(t.subscribe,b.useCallback(()=>s(t.getState()),[t,s]),b.useCallback(()=>s(t.getInitialState()),[t,s]));return b.useDebugValue(e),e}const O=t=>{const s=j(t),e=o=>w(s,o);return Object.assign(e,s),e},F=t=>t?O(t):O;function E(t,s){let e;try{e=t()}catch{return}return{getItem:a=>{var r;const f=d=>d===null?null:JSON.parse(d,void 0),u=(r=e.getItem(a))!=null?r:null;return u instanceof Promise?u.then(f):f(u)},setItem:(a,r)=>e.setItem(a,JSON.stringify(r,void 0)),removeItem:a=>e.removeItem(a)}}const p=t=>s=>{try{const e=t(s);return e instanceof Promise?e:{then(o){return p(o)(e)},catch(o){return this}}}catch(e){return{then(o){return this},catch(o){return p(o)(e)}}}},x=(t,s)=>(e,o,a)=>{let r={storage:E(()=>localStorage),partialize:n=>n,version:0,merge:(n,S)=>({...S,...n}),...s},f=!1;const u=new Set,d=new Set;let i=r.storage;if(!i)return t((...n)=>{console.warn(`[zustand persist middleware] Unable to update item '${r.name}', the given storage is currently unavailable.`),e(...n)},o,a);const h=()=>{const n=r.partialize({...o()});return i.setItem(r.name,{state:n,version:r.version})},v=a.setState;a.setState=(n,S)=>(v(n,S),h());const g=t((...n)=>(e(...n),h()),o,a);a.getInitialState=()=>g;let m;const _=()=>{var n,S;if(!i)return;f=!1,u.forEach(c=>{var l;return c((l=o())!=null?l:g)});const y=((S=r.onRehydrateStorage)==null?void 0:S.call(r,(n=o())!=null?n:g))||void 0;return p(i.getItem.bind(i))(r.name).then(c=>{if(c)if(typeof c.version=="number"&&c.version!==r.version){if(r.migrate){const l=r.migrate(c.state,c.version);return l instanceof Promise?l.then(I=>[!0,I]):[!0,l]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,c.state];return[!1,void 0]}).then(c=>{var l;const[I,R]=c;if(m=r.merge(R,(l=o())!=null?l:g),e(m,!0),I)return h()}).then(()=>{y==null||y(m,void 0),m=o(),f=!0,d.forEach(c=>c(m))}).catch(c=>{y==null||y(void 0,c)})};return a.persist={setOptions:n=>{r={...r,...n},n.storage&&(i=n.storage)},clearStorage:()=>{i==null||i.removeItem(r.name)},getOptions:()=>r,rehydrate:()=>_(),hasHydrated:()=>f,onHydrate:n=>(u.add(n),()=>{u.delete(n)}),onFinishHydration:n=>(d.add(n),()=>{d.delete(n)})},r.skipHydration||_(),m||g},J=x;export{F as c,J as p};