1import{j as e,J as T,m as R,b7 as y,i as L,t as P,ap as K,bq as M,V as w,c as A,w as I,X as _,L as N}from"./vendor-ui-DUDkkSHt.js";import{r as u,L as q}from"./vendor-react-BnoC6jaQ.js";import{b as B,d as v,D as F,c as G,S as U,v as V,a as J,s as Q,K as X,P as Z,u as H,C as O}from"./sortable.esm-CdWgX0Ha.js";import{u as h,cK as W,cF as Y,a7 as $,cZ as C}from"./index-C1V3a2SY.js";import{u as ee,a as te,b as se,C as ae}from"./CategoryFormModal-BxfrAbMl.js";import{c as ie}from"./categoryColors-CCdpVMPA.js";import{a as ne,E as re}from"./states-CpXjdexW.js";import"./vendor-supabase-BC1hGCEc.js";import"./vendor-map-C4RD4rgy.js";import"./vendor-pdf-Mz6frGtm.js";function oe({category:t,onEdit:a,onDelete:d}){const{t:l}=h("adminNews"),{attributes:n,listeners:r,setNodeRef:s,transform:c,transition:p,isDragging:o}=H({id:t.id}),g={transform:O.Transform.toString(c),transition:p};return e.jsxs("div",{ref:s,style:g,className:A("bg-white rounded-xl border border-gray-200 px-3 py-2.5 flex items-center gap-3",o&&"shadow-lg z-10 relative"),children:[e.jsx("button",{type:"button",...n,...r,className:"cursor-grab active:cursor-grabbing p-1.5 text-app-text/65 hover:text-app-text transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-accent/40 rounded","aria-label":l("categories.reorderAria"),children:e.jsx(K,{size:14})}),e.jsx("span",{className:$("shrink-0",ie(t.color_token),"bg-black/65"),children:t.label}),e.jsxs("code",{className:"text-[11px] font-mono text-app-text/65 truncate flex-1",children:["/",t.slug]}),e.jsxs("span",{className:"text-[10.5px] font-mono text-app-text/65 tabular-nums shrink-0",children:["#",t.sort_order]}),e.jsxs("div",{className:"flex items-center gap-0.5 shrink-0",children:[e.jsx("button",{type:"button",onClick:a,title:l("categories.rowEdit"),className:"p-1.5 text-app-text/65 hover:text-app-text rounded transition-colors",children:e.jsx(M,{size:13})}),e.jsx("button",{type:"button",onClick:d,title:l("categories.rowDelete"),className:"p-1.5 text-app-text/65 hover:text-error rounded transition-colors",children:e.jsx(w,{size:13})})]})]})}function le({category:t,count:a,loading:d,deleting:l,onConfirm:n,onCancel:r}){const{t:s}=h(["adminNews","adminCommon"]);return e.jsx("div",{className:"fixed inset-0 z-50 bg-black/40 backdrop-blur-sm flex items-center justify-center p-4",onClick:r,role:"dialog","aria-modal":"true",children:e.jsxs("div",{className:"bg-white rounded-2xl shadow-2xl w-full max-w-md overflow-hidden",onClick:c=>c.stopPropagation(),children:[e.jsxs("header",{className:"flex items-center justify-between px-5 py-4 border-b border-gray-100",children:[e.jsxs("h2",{className:"text-base font-semibold text-app-text inline-flex items-center gap-2",children:[e.jsx(I,{size:16,className:"text-amber-700"}),s("categories.delete.title")]}),e.jsx("button",{type:"button",onClick:r,className:"p-1 rounded-md text-app-text/65 hover:text-app-text hover:bg-gray-100 transition-colors","aria-label":s("adminCommon:action.close"),children:e.jsx(_,{size:16})})]}),e.jsxs("div",{className:"px-5 py-5 space-y-3 text-sm text-app-text/75 leading-relaxed",children:[e.jsx("p",{children:e.jsx(C,{t:s,i18nKey:"categories.delete.question",values:{label:t.label},components:{b:e.jsx("strong",{className:"text-app-text"})}})}),d?e.jsxs("p",{className:"text-app-text/65 inline-flex items-center gap-1.5",children:[e.jsx(N,{size:13,className:"animate-spin"})," ",s("categories.delete.checking")]}):a>0?e.jsx("p",{className:"rounded-lg bg-amber-50 border border-amber-100 px-3 py-2 text-amber-900 text-[13px]",children:e.jsx(C,{t:s,i18nKey:"categories.delete.inUse",count:a,values:{count:a},components:{b:e.jsx("strong",{})}})}):e.jsx("p",{className:"text-app-text/65 text-[13px]",children:s("categories.delete.inUseNone")})]}),e.jsxs("footer",{className:"flex items-center justify-end gap-2 px-5 py-3 bg-gray-50 border-t border-gray-100",children:[e.jsx("button",{type:"button",onClick:r,className:"px-3 py-1.5 rounded-lg text-sm font-medium text-app-text/65 hover:text-app-text hover:bg-gray-100 transition-colors",children:s("adminCommon:action.cancel")}),e.jsxs("button",{type:"button",onClick:n,disabled:l,className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-red-500 text-white text-sm font-semibold hover:bg-red-600 transition-colors disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-red-300",children:[l?e.jsx(N,{size:14,className:"animate-spin"}):e.jsx(w,{size:14}),s("categories.delete.confirm")]})]})]})})}function ye(){const{t}=h("adminNews"),a=W(),d=ee(),l=te(),[n,r]=u.useState(null),[s,c]=u.useState(null),p=se(s?.id),o=u.useMemo(()=>a.data??[],[a.data]),g=u.useMemo(()=>{const i=new Set;for(const x of o)n?.mode==="edit"&&n.initial?.id===x.id||i.add(x.slug);return i},[o,n]),k=B(v(Z,{activationConstraint:{distance:5}}),v(X,{coordinateGetter:Q}));function S(i){const{active:x,over:b}=i;if(!b||x.id===b.id)return;const f=o.findIndex(m=>m.id===x.id),j=o.findIndex(m=>m.id===b.id);if(f<0||j<0)return;const D=J(o,f,j).map((m,E)=>({id:m.id,sort_order:(E+1)*10}));d.mutate(D)}async function z(){if(s)try{await l.mutateAsync(s.id),P.success(t("categories.toastDeleted",{label:s.label})),c(null)}catch{}}
1return e.jsxs("div",{className:"max-w-3xl mx-auto space-y-5",children:[e.jsxs("nav",{"aria-label":"Breadcrumb",className:"flex items-center gap-1.5 text-xs text-app-text/65",children:[e.jsx(q,{to:"/admin/news",className:"hover:text-app-text transition-colors",children:t("categories.breadcrumbNews")}),e.jsx(T,{size:11,className:"text-app-text/35"}),e.jsx("span",{className:"text-app-text/85",children:t("categories.breadcrumbCurrent")})]}),e.jsxs(R.header,{initial:{opacity:0,y:8},animate:{opacity:1,y:0},transition:{duration:.42,ease:[.2,.7,.2,1]},className:"flex items-end justify-between gap-3 flex-wrap",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("p",{className:"text-[11px] font-semibold text-app-text/65 uppercase tracking-[.14em] flex items-center gap-2",children:[e.jsx(y,{size:13,className:"text-accent"}),t("categories.eyebrow")]}),e.jsx("h1",{className:"mt-1 text-[22px] md:text-[24px] font-semibold tracking-tight text-app-text",children:t("categories.title")}),e.jsx("p",{className:"mt-1 text-sm text-app-text/65 max-w-md leading-relaxed",children:t("categories.description")})]}),e.jsxs("button",{type:"button",onClick:()=>r({mode:"create",initial:null}),className:"inline-flex items-center gap-2 px-3 py-2 rounded-xl bg-accent text-white text-sm font-semibold hover:bg-accent/90 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-accent/50",children:[e.jsx(L,{size:14})," ",t("categories.newCategory")]})]}),e.jsx("div",{className:"space-y-2",children:a.isLoading?e.jsx(ne,{rows:4,withThumb:!1}):a.isError?e.jsx(re,{onRetry:()=>{a.refetch()},retrying:a.isRefetching}):o.length===0?e.jsx(Y,{icon:y,title:t("categories.empty.title"),description:t("categories.empty.description"),action:{label:t("categories.empty.action"),onClick:()=>r({mode:"create",initial:null})}}):e.jsx(F,{sensors:k,collisionDetection:G,onDragEnd:S,children:e.jsx(U,{items:o.map(i=>i.id),strategy:V,children:e.jsx("div",{className:"space-y-2",children:o.map(i=>e.jsx(oe,{category:i,onEdit:()=>r({mode:"edit",initial:i}),onDelete:()=>c(i)},i.id))})})})}),n&&e.jsx(ae,{mode:n.mode,initial:n.initial,onClose:()=>r(null),takenSlugs:g}),s&&e.jsx(le,{category:s,count:p.data??0,loading:p.isLoading,deleting:l.isPending,onConfirm:z,onCancel:()=>c(null)})]})}export{ye 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.