1import{d as T,e as q,x as n,A as e,F as f,G as K,E as r,H as c,n as G,M as D,S as M,Y as H,r as i,L as Y,y as J,q as a}from"./vue-Do-5PJoS.js";import{q as O,r as P,i as Q,s as W,t as X}from"./blog-xQW3EmF4.js";import{d as Z,e as j,g as A,h as ee,i as te}from"./kb-B0IrWQOM.js";const oe={class:"max-w-4xl mx-auto"},le={class:"flex gap-1 mb-8 p-1 rounded-xl w-fit",style:{background:"var(--land-surface)"}},se=["onClick"],ae={key:0,class:"mb-4 p-3 rounded-lg text-sm font-medium bg-red-500/10 text-red-400 border border-red-500/20"},ne={class:"flex items-center justify-between mb-4"},re={class:"flex gap-2"},de=["disabled"],ie={key:0,class:"text-center py-12"},ue={key:1,class:"rounded-xl border overflow-hidden",style:{borderColor:"var(--land-border)"}},ce={class:"w-full text-sm"},be={class:"px-4 py-3 font-medium"},ve={class:"px-4 py-3",style:{color:"var(--land-text-muted)"}},me={class:"px-4 py-3 max-w-[180px] truncate",style:{color:"var(--land-text-muted)"}},pe={class:"px-4 py-3 text-center"},ge={class:"px-2.5 py-0.5 rounded-full text-xs font-semibold",style:{background:"var(--land-surface)",color:"var(--land-text-muted)"}},xe={class:"px-4 py-3 text-right"},ye={class:"flex items-center justify-end gap-1.5"},fe=["onClick"],ke=["onClick"],_e={key:2,class:"flex items-center justify-between mt-4"},Ce={class:"text-sm",style:{color:"var(--land-text-muted)"}},he={class:"flex items-center gap-1"},we=["disabled"],$e=["disabled"],Be={key:3,class:"text-center py-12"},Ke={class:"flex items-center justify-between mb-4"},De={class:"flex gap-2"},Me=["disabled"],Ne={key:0,class:"text-center py-12"},Fe={key:1,class:"rounded-xl border overflow-hidden",style:{borderColor:"var(--land-border)"}},Se={class:"w-full text-sm"},Pe={class:"px-4 py-3 font-medium"},je={class:"px-4 py-3",style:{color:"var(--land-text-muted)"}},Ae={class:"px-4 py-3 max-w-[180px] truncate",style:{color:"var(--land-text-muted)"}},Re={class:"px-4 py-3 text-center"},Ee={class:"px-2.5 py-0.5 rounded-full text-xs font-semibold",style:{background:"var(--land-surface)",color:"var(--land-text-muted)"}},Ue={class:"px-4 py-3 text-right"},ze={class:"flex items-center justify-end gap-1.5"},Le=["onClick"],Ve=["onClick"],Ie={key:2,class:"flex items-center justify-between mt-4"},Te={class:"text-sm",style:{color:"var(--land-text-muted)"}},qe={class:"flex items-center gap-1"},Ge=["disabled"],He=["disabled"],Ye={key:3,class:"text-center py-12"},Je={key:0,class:"fixed inset-0 z-[999] flex items-center justify-center"},Oe={class:"relative w-full max-w-md mx-4 rounded-2xl p-6 border shadow-2xl",style:{background:"var(--land-card)",borderColor:"var(--land-border)"}},Qe={class:"text-lg font-bold mb-5"},We={class:"space-y-4"},Xe={class:"flex justify-end gap-3 mt-6"},Ze=["disabled"],st=T({__name:"FrontofficeCategories",setup(et){const R=[{key:"blog",label:"Blog"},{key:"kb",label:"Knowledge Base"}],k=i("blog"),d=i(""),b=i(!1),o=Y({open:!1,isCreate:!0,type:"blog",id:0,name:"",slug:"",description:"",slugManual:!1}),_=i(!1);function N(s){return s.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")}function E(){o.slugManual||(o.slug=N(o.name))}function F(s){o.open=!0,o.isCreate=!0,o.type=s,o.id=0,o.name="",o.slug="",o.description="",o.slugManual=!1}function S(s,t){o.open=!0,o.isCreate=!1,o.type=t,o.id=s.id,o.name=s.name,o.slug=s.slug,o.description=s.description||"",o.slugManual=!0}function B(){o.open=!1}async function U(){const s=o.name.trim();if(s){_.value=!0,d.value="";try{if(o.type==="blog")if(o.isCreate){const t=await O(s);(o.slug||o.description)&&await P(t.id,{name:s,slug:o.slug||void 0,description:o.description||void 0}),await p()}else await P(o.id,{name:s,slug:o.slug||void 0,description:o.description||void 0}),await p();else if(o.isCreate){if(await Z({name:s,description:o.description||void 0}),o.slug&&o.slug!==N(s)){const l=((await j()).categories||[]).find(u=>u.name===s);l&&await A(l.id,{name:s,slug:o.slug,description:o.description||void 0})}await y()}else await A(o.id,{name:s,slug:o.slug||void 0,description:o.description||void 0}),await y();B()}catch(t){d.value=t.message||"Failed to save category"}finally{_.value=!1}}}const v=i([]),C=i(!0),m=i(1),h=i(1);async function p(){C.value=!0;try{const s=await Q(m.value);v.value=s.categories||[],h.value=s.pages||1}catch{d.value="Failed to load blog categories"}finally{C.value=!1}}async function z(s){const t=s.post_count>0?`Delete "${s.name}"? It will be removed from ${s.post_count} post(s).`:`Delete "${s.name}"?`;if(confirm(t)){d.value="";try{await X(s.id),v.value=v.value.filter(l=>
1l.id!==s.id)}catch(l){d.value=l.message||"Failed to delete category"}}}async function L(){b.value=!0;try{await W(),await p()}catch{d.value="Failed to recount"}finally{b.value=!1}}const g=i([]),w=i(!0),x=i(1),$=i(1);async function y(){w.value=!0;try{const s=await j(x.value);g.value=s.categories||[],$.value=s.pages||1}catch{d.value="Failed to load KB categories"}finally{w.value=!1}}async function V(s){const t=parseInt(s.article_count)||0,l=t>0?`Delete "${s.name}"? ${t} article(s) will become uncategorized.`:`Delete "${s.name}"?`;if(confirm(l)){d.value="";try{await te(s.id),g.value=g.value.filter(u=>u.id!==s.id)}catch(u){d.value=u.message||"Failed to delete KB category"}}}async function I(){b.value=!0;try{await ee(),await y()}catch{d.value="Failed to recount"}finally{b.value=!1}}return q(()=>{p(),y()}),(s,t)=>(a(),n("div",oe,[t[21]||(t[21]=e("h1",{class:"text-2xl font-extrabold mb-8"},"Categories",-1)),e("div",le,[(a(),n(f,null,K(R,l=>e("button",{key:l.key,onClick:u=>k.value=l.key,class:"px-5 py-2 rounded-lg text-sm font-semibold transition-colors",style:J(k.value===l.key?{background:"var(--color-brand)",color:"white"}:{color:"var(--land-text-muted)"})},r(l.label),13,se)),64))]),d.value?(a(),n("div",ae,r(d.value),1)):c("",!0),k.value==="blog"?(a(),n(f,{key:1},[e("div",ne,[t[9]||(t[9]=e("span",{class:"text-sm font-medium",style:{color:"var(--land-text-muted)"}},"Blog post categories",-1)),e("div",re,[e("button",{onClick:L,disabled:b.value,class:"text-sm font-medium px-3 py-1.5 rounded-lg transition-colors",style:{background:"var(--land-surface)",color:"var(--land-text-muted)"}},r(b.value?"Recounting...":"Recount"),9,de),e("button",{onClick:t[0]||(t[0]=l=>F("blog")),class:"text-sm font-semibold px-4 py-1.5 rounded-lg text-white bg-brand hover:bg-brand-hover transition-colors"}," + Add Category ")])]),C.value?(a(),n("div",ie,[...t[10]||(t[10]=[e("div",{class:"w-8 h-8 border-3 border-brand border-t-transparent rounded-full animate-spin mx-auto"},null,-1)])])):v.value.length?(a(),n("div",ue,[e("table",ce,[t[11]||(t[11]=e("thead",null,[e("tr",{style:{background:"var(--land-surface)"}},[e("th",{class:"text-left px-4 py-3 font-semibold"},"Name"),e("th",{class:"text-left px-4 py-3 font-semibold"},"Slug"),e("th",{class:"text-left px-4 py-3 font-semibold"},"Description"),e("th",{class:"text-center px-4 py-3 font-semibold"},"Posts"),e("th",{class:"text-right px-4 py-3 font-semibold"},"Actions")])],-1)),e("tbody",null,[(a(!0),n(f,null,K(v.value,l=>(a(),n("tr",{key:l.id,class:"border-t",style:{borderColor:"var(--land-border)"}},[e("td",be,r(l.name),1),e("td",ve,r(l.slug),1),e("td",me,r(l.description||"â"),1),e("td",pe,[e("span",ge,r(l.post_count),1)]),e("td",xe,[e("div",ye,[e("button",{onClick:u=>S(l,"blog"),class:"px-2.5 py-1 rounded-lg text-xs font-medium transition-colors",style:{background:"var(--land-surface)",color:"var(--land-text-muted)"}},"Edit",8,fe),e("button",{onClick:u=>z(l),class:"px-2.5 py-1 rounded-lg text-xs font-medium bg-red-500/10 text-red-400 hover:bg-red-500/20 transition-colors"},"Delete",8,ke)])])]))),128))])])])):c("",!0),h.value>1?(a(),n("div",_e,[e("div",Ce,"Page "+r(m.value)+" of "+r(h.value),1),e("div",he,[e("button",{onClick:t[1]||(t[1]=l=>{m.value--,p()}),disabled:m.value<=1,class:"px-3 py-1.5 rounded-lg text-sm font-medium border transition-colors disabled:opacity-30",style:{background:"var(--land-card)",borderColor:"var(--land-border)",color:"var(--land-text)"}},"Prev",8,we),e("button",{onClick:t[2]||(t[2]=l=>{m.value++,p()}),disabled:m.value>=h.value,class:"px-3 py-1.5 rounded-lg text-sm font-medium border transition-colors disabled:opacity-30",style:{background:"var(--land-card)",borderColor:"var(--land-border)",color:"var(--land-text)"}},"Next",8,$e)])])):c("",!0),!C.value&&!v.value.length?(a(),n("div",Be,[...t[12]||(t[12]=[e("p",{style:{color:"var(--land-text-muted)"}},"No blog categories yet.",-1)])])):c("",!0)],64)):c("",!0),k.value==="kb"?(a(),n(f,{key:2},[e("div",Ke,[t[13]||(t[13]=e("span",{class:"text-sm font-medium",style:{color:"var(--land-text-muted)"}}
1,"Knowledge Base categories",-1)),e("div",De,[e("button",{onClick:I,disabled:b.value,class:"text-sm font-medium px-3 py-1.5 rounded-lg transition-colors",style:{background:"var(--land-surface)",color:"var(--land-text-muted)"}},r(b.value?"Recounting...":"Recount"),9,Me),e("button",{onClick:t[3]||(t[3]=l=>F("kb")),class:"text-sm font-semibold px-4 py-1.5 rounded-lg text-white bg-brand hover:bg-brand-hover transition-colors"}," + Add Category ")])]),w.value?(a(),n("div",Ne,[...t[14]||(t[14]=[e("div",{class:"w-8 h-8 border-3 border-brand border-t-transparent rounded-full animate-spin mx-auto"},null,-1)])])):g.value.length?(a(),n("div",Fe,[e("table",Se,[t[15]||(t[15]=e("thead",null,[e("tr",{style:{background:"var(--land-surface)"}},[e("th",{class:"text-left px-4 py-3 font-semibold"},"Name"),e("th",{class:"text-left px-4 py-3 font-semibold"},"Slug"),e("th",{class:"text-left px-4 py-3 font-semibold"},"Description"),e("th",{class:"text-center px-4 py-3 font-semibold"},"Articles"),e("th",{class:"text-right px-4 py-3 font-semibold"},"Actions")])],-1)),e("tbody",null,[(a(!0),n(f,null,K(g.value,l=>(a(),n("tr",{key:l.id,class:"border-t",style:{borderColor:"var(--land-border)"}},[e("td",Pe,r(l.name),1),e("td",je,r(l.slug),1),e("td",Ae,r(l.description||"â"),1),e("td",Re,[e
1("span",Ee,r(l.article_count||0),1)]),e("td",Ue,[e("div",ze,[e("button",{onClick:u=>S(l,"kb"),class:"px-2.5 py-1 rounded-lg text-xs font-medium transition-colors",style:{background:"var(--land-surface)",color:"var(--land-text-muted)"}},"Edit",8,Le),e("button",{onClick:u=>V(l),class:"px-2.5 py-1 rounded-lg text-xs font-medium bg-red-500/10 text-red-400 hover:bg-red-500/20 transition-colors"},"Delete",8,Ve)])])]))),128))])])])):c("",!0),$.value>1?(a(),n("div",Ie,[e("div",Te,"Page "+r(x.value)+" of "+r($.value),1),e("div",qe,[e("button",{onClick:t[4]||(t[4]=l=>{x.value--,y()}),disabled:x.value<=1,class:"px-3 py-1.5 rounded-lg text-sm font-medium border transition-colors disabled:opacity-30",style:{background:"var(--land-card)",borderColor:"var(--land-border)",color:"var(--land-text)"}},"Prev",8,Ge),e("button",{onClick:t[5]||(t[5]=l=>{x.value++,y()}),disabled:x.value>=$.value,class:"px-3 py-1.5 rounded-lg text-sm font-medium border transition-colors disabled:opacity-30",style:{background:"var(--land-card)",borderColor:"var(--land-border)",color:"var(--land-text)"}},"Next",8,He)])])):c("",!0),!w.value&&!g.value.length?(a(),n("div",Ye,[...t[16]||(t[16]=[e("p",{style:{color:"var(--land-text-muted)"}},"No KB categories yet.",-1)])])):c("",!0)],64)):c("",!0),(a(),G(H,{to:"body"},[o.open?(a(),n("div",Je,[e("div",{class:"absolute inset-0 bg-black/80 backdrop-blur-sm",onClick:B}),e("div",Oe,[e("h2",Qe,r(o.isCreate?"New Category":"Edit Category"),1),e("div",We,[e("div",null,[t[17]||(t[17]=e("label",{class:"block text-sm font-semibold mb-1.5"},"Name",-1)),D(e("input",{"onUpdate:modelValue":t[6]||(t[6]=l=>o.name=l),type:"text",class:"w-full px-4 py-2.5 rounded-lg text-sm border outline-none",style:{background:"var(--land-input-bg)",borderColor:"var(--land-input-border)",color:"var(--land-text)"},placeholder:"Category name",onInput:E},null,544),[[M,o.name]])]),e("div",null,[t[18]||(t[18]=e("label",{class:"block text-sm font-semibold mb-1.5"},"Slug",-1)),D(e("input",{"onUpdate:modelValue":t[7]||(t[7]=l=>o.slug=l),type:"text",class:"w-full px-4 py-2.5 rounded-lg text-sm border outline-none",style:{background:"var(--land-input-bg)",borderColor:"var(--land-input-border)",color:"var(--land-text)"},placeholder:"category-slug"},null,512),[[M,o.slug]]),t[19]||(t[19]=e("p",{class:"text-xs mt-1",style:{color:"var(--land-text-subtle)"}},"URL-friendly identifier. Auto-generated from name if left empty.",-1))]),e("div",null,[t[20]||(t[20]=e("label",{class:"block text-sm font-semibold mb-1.5"},"Description",-1)),D(e("textarea",{"onUpdate:modelValue":t[8]||(t[8]=l=>o.description=l),rows:"3",class:"w-full px-4 py-2.5 rounded-lg text-sm border outline-none resize-none",style:{background:"var(--land-input-bg)",borderColor:"var(--land-input-border)",color:"var(--land-text)"},placeholder:"Short description (optional)"},null,512),[[M,o.description]])])]),e("div",Xe,[e("button",{onClick:B,class:"px-4 py-2.5 rounded-lg text-sm font-semibold transition-colors",style:{background:"var(--land-surface)",color:"var(--land-text-muted)"}}," Cancel "),e("button",{onClick:U,disabled:!o.name.trim()||_.value,class:"px-5 py-2.5 rounded-lg text-sm font-semibold text-white bg-brand hover:bg-brand-hover disabled:opacity-40 transition-colors"},r(_.value?"Saving...":o.isCreate?"Create":"Save Changes"),9,Ze)])])])):c("",!0)]))]))}});export{st as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.