1import{_ as ce}from"./D9MvgeHQ.js";import{K as re,al as ue,r as c,e as h,g as be,c as d,d as s,b as V,h as g,i as y,v as T,t as i,E as x,aL as m,aM as L,F as k,m as F,b1 as I,b2 as R,b5 as M,B as ve,Y as me,z as fe,o as n,a3 as B}from"./hpNDvw06.js";import{n as G}from"./D24zabUg.js";const pe={class:"container-fluid blog-cms-admin"},ge={class:"row mb-3"},he={class:"col-12 d-flex justify-content-between align-items-center flex-wrap gap-2"},_e={class:"d-flex gap-2 flex-wrap"},ye={key:0,class:"alert alert-secondary"},ke={key:1,class:"alert alert-danger"},we={key:2,class:"alert alert-warning"},Ce={key:3},xe={class:"card mb-3"},Le={class:"card-body d-flex flex-wrap align-items-end gap-2"},Se={class:"flex-grow-1",style:{"min-width":"260px"}},Ee=["disabled"],De=["disabled"],Ae={key:1,class:"card mb-3"},Oe={class:"card-body"},Me={class:"d-flex justify-content-between align-items-start gap-3 flex-wrap mb-3"},Ne={class:"mb-1"},Ue={class:"text-muted mb-0"},$e=["disabled"],ze={class:"row g-3"},Ve={class:"col-lg-5"},Te={class:"locale-editor-panel h-100"},Fe={class:"list-group locale-picker-list"},Re=["disabled","onClick"],Be={class:"d-flex justify-content-between gap-2 align-items-start"},qe={class:"fw-semibold"},je={class:"small text-muted"},Pe={class:"text-end"},We={class:"small text-muted mt-1"},He={key:0,class:"text-muted small p-3"},Je={class:"locale-selection-summary"},Ke={class:"fw-semibold"},Ye={class:"text-muted small"},Ie={class:"small mt-2 text-uppercase"},Ge={class:"col-lg-7"},Qe={class:"locale-editor-panel h-100"},Xe={class:"row g-3"},Ze={class:"col-md-4"},es=["value"],ss={class:"col-md-4"},as={class:"col-md-4"},ts={class:"col-md-6"},ls={class:"col-md-6"},os={class:"col-md-4"},ns=["disabled"],ds=["value","disabled"],is={class:"col-md-8"},cs={class:"d-flex flex-wrap gap-3 mt-md-4 pt-md-2"},rs={class:"form-check m-0"},us={class:"form-check m-0"},bs={class:"form-check m-0"},vs=["disabled"],ms={class:"d-flex justify-content-end gap-2 mt-3"},fs=["disabled"],ps=["disabled"],gs={key:1,class:"text-muted"},hs={class:"card"},_s={class:"card-body p-0"},ys={class:"table-responsive"},ks={class:"table table-sm mb-0 align-middle"},ws={key:0},Cs={key:1},xs={class:"ps-3 text-uppercase"},Ls={class:"fw-semibold"},Ss={class:"small text-muted"},Es={key:0,class:"badge bg-primary"},Ds={key:1,class:"text-muted"},As={class:"text-uppercase"},Os={class:"text-end pe-3"},Ms={class:"d-inline-flex gap-2"},Ns=["disabled","onClick"],Us=["disabled","onClick"],Q="/api/admin/cms-locales",Rs=re({__name:"locales",setup($s){const{authData:N}=ue(),q=fe(),r=c("loading"),S=c("Unable to verify access."),w=c(!1),b=c(!1),u=c([]),E=c([]),U=c(""),_=c(""),v=c("closed"),o=c(null),C=c(""),D=c(""),j=c("info"),X=h(()=>{var t;return String(((t=q.public)==null?void 0:t.apiUrl)||"").replace(/\/+$/,"")}),Z=h(()=>`${X.value}/auth/status`),ee=h(()=>new Map(u.value.map(t=>[t.code,t]))),P=h(()=>new Set(u.value.map(t=>t.code))),W=h(()=>{const t=String(U.value||"").trim().toLowerCase();return u.value.slice().sort((e,l)=>e.sortOrder-l.sortOrder||e.label.localeCompare(l.label,"en",{sensitivity:"base"})).filter(e=>t?[e.code,e.label,e.nativeLabel].map(l=>String(l||"").toLowerCase()).some(l=>l.includes(t)):!0)}),H=h(()=>{const t=String(_.value||"").trim().toLowerCase();return E.value.filter(e=>t?[e.code,e.label,e.nativeLabel].map(l=>String(l||"").toLowerCase()).some(l=>l.includes(t)):!0)}),se=h(()=>{const t=new Map;return u.value.forEach(e=>t.set(e.code,e)),o.value&&!t.has(o.value.code)&&t.set(o.value.code,o.value),Array.from(t.values()).sort((e,l)=>e.sortOrder-l.sortOrder||e.label.localeCompare(l.label,"en",{sensitivity:"base"}))}),$=async(t,e={})=>{var l;try{return await $fetch(t,{credentials:"include",headers:ve(),...e})}catch(a){const f=Number((a==null?void 0:a.statusCode)??((l=a==null?void 0:a.response)==null?void 0:l.status)??0);if(f===403){r.value="unauthorized",await me("/admin/access-required");return}if(f===401){z();return}throw a}},z=()=>{var e;const t=new URL(String(((e=q.public)==null?void 0:e.dashboardSigninUrl)||""));t.searchParams.set("redirect","admin_blog"),r.value="unauthorized",S.value="Session expired â redirecting to sign in...",typeof window<"u"&&(window.location.href=t.toString())},p=(t,e="info")=>{D.value=t,j.value=e},A=()=>{D.value=""},ae=async()=>{var t,e;try{const l=await $(Z.value);if(!l)return;r.value=M("/admin/cms/locales",l)?"authorized":"unauthorized",r.value==="unauthorized"&&z()}catch(l){const a=Number((l==null?void 0:l.statusCode)??((t=l==null?void 0:l.response)==null?void 0:t.status)??0);if(a===401||a===403){r.value="unauthorized",z();return}r.value="error",S.value=String(((e=l==null?void 0:l.data)==null?void 0:e.message)||(l==null?void 0:l.message)||S.value)}},J=async()=>{var t;if(r.value==="authorized"){w.value=!0,A();try{const e=await $(Q);if(!e)return;u.value=Array.isArray(e.locales)?e.locales:[],E.value=Array.isArray(e.catalog)?e.catalog:[]}catch(e){p(String(((t=e==null?void 0:e.data)==null?void 0:t.message)||(e==null?void 0:e.message)||"Failed to load locale settings."),"danger")}finally{w.value=!1}}},K=async(t,e)=>{var l;b.value=!0,A();try{const a=await $(Q,{method:"PUT",body:{locales:t}});return a?(u.value=Array.isArray(a.locales)?a.locales:[],E.value=Array.isArray(a.catalog)?a.catalog:E.value,p(e,"success"),!0):!1}catch(a){return p(String(((l=a==null?void 0:a.data)==null?void 0:l.message)||(a==null?void 0:a.message)||"Failed to save locale settings."),"danger"),
1!1}finally{b.value=!1}},Y=t=>JSON.parse(JSON.stringify(t)),te=()=>{v.value="add",C.value="",_.value="",o.value=null,A()},O=()=>{v.value="closed",C.value="",o.value=null,_.value=""},le=t=>{const e=u.value.reduce((a,f)=>Math.max(a,Number(f.sortOrder)||0),0),l=u.value.find(a=>a.isDefault)||ee.value.get("en");o.value={code:t.code,label:t.label,nativeLabel:t.nativeLabel,direction:t.direction,cmsEnabled:!0,websiteEnabled:!1,isDefault:!1,fallbackCode:(l==null?void 0:l.code)||"en",sortOrder:e+1}},oe=t=>{v.value="edit",C.value=t.code,o.value=Y(t),_.value="",A()},ne=()=>{if(o.value){if(o.value.isDefault)o.value.cmsEnabled=!0,o.value.websiteEnabled=!0,o.value.fallbackCode=null;else if(!o.value.fallbackCode){const t=u.value.find(e=>e.isDefault);o.value.fallbackCode=(t==null?void 0:t.code)||"en"}}},de=async()=>{if(!o.value){p("Select a locale before saving.","warning");return}const t=Y(o.value);if(t.code=G(t.code),t.label=String(t.label||"").trim(),t.nativeLabel=String(t.nativeLabel||"").trim(),t.sortOrder=Number.isFinite(Number(t.sortOrder))?Number(t.sortOrder):1,t.fallbackCode=t.isDefault?null:G(t.fallbackCode),!t.code){p("Locale code is required.","warning");return}if(!t.label){p("Display label is required.","warning");return}if(!t.nativeLabel){p("Native label is required.","warning");return}if(v.value==="add"&&P.value.has(t.code)){p(`Locale ${t.code} is already configured.`,"warning");return}const e=u.value.filter(a=>a.code!==C.value&&a.code!==t.code);e.push(t),await K(e,v.value==="add"?`Added ${t.label} (${t.code}).`:`Saved ${t.label} (${t.code}).`)&&O()},ie=async t=>{if(t.isDefault||t.code==="en"||typeof window<"u"&&!window.confirm(`Remove locale ${t.label} (${t.code}) from the registry?`))return;const e=u.value.filter(a=>a.code!==t.code);await K(e,`Removed ${t.label} (${t.code}).`)&&C.value===t.code&&O()};return be(async()=>{await ae(),r.value==="authorized"&&await J()}),(t,e)=>{const l=ce;
1return n(),d("div",pe,[s("div",ge,[s("div",he,[e[13]||(e[13]=s("h1",{class:"mb-0"},"Locale Settings",-1)),s("div",_e,[y(M)("/admin/cms/vocabulary",y(N))?(n(),V(l,{key:0,class:"btn btn-sm btn-primary",to:"/admin/cms/vocabulary"},{default:T(()=>[...e[10]||(e[10]=[B("KB Tags",-1)])]),_:1})):g("",!0),y(M)("/admin/cms/migrations",y(N))?(n(),V(l,{key:1,class:"btn btn-sm btn-primary",to:"/admin/cms/migrations"},{default:T(()=>[...e[11]||(e[11]=[B("Migrations",-1)])]),_:1})):g("",!0),y(M)("/admin/cms",y(N))?(n(),V(l,{key:2,class:"btn btn-sm btn-primary",to:"/admin/cms"},{default:T(()=>[...e[12]||(e[12]=[B("Back to Editor",-1)])]),_:1})):g("",!0)])])]),r.value==="loading"?(n(),d("div",ye,"Checking access...")):r.value==="error"?(n(),d("div",ke,i(S.value),1)):r.value!=="authorized"?(n(),d("div",we," You are not authorized to manage locales. ")):(n(),d("div",Ce,[D.value?(n(),d("div",{key:0,class:x(["alert mb-3",`alert-${j.value}`])},i(D.value),3)):g("",!0),s("div",xe,[s("div",Le,[s("div",Se,[e[14]||(e[14]=s("label",{class:"form-label mb-1"},"Search configured locales",-1)),m(s("input",{"onUpdate:modelValue":e[0]||(e[0]=a=>U.value=a),class:"form-control",type:"search",placeholder:"Search by code, label, or native label"},null,512),[[L,U.value]])]),s("button",{class:"btn btn-sm btn-outline-secondary",disabled:w.value||b.value,onClick:J}," Refresh ",8,Ee),s("button",{class:"btn btn-sm btn-warning",disabled:w.value||b.value,onClick:te}," Add Locale ",8,De)])]),v.value!=="closed"?(n(),d("div",Ae,[s("div",Oe,[s("div",Me,[s("div",null,[s("h5",Ne,i(v.value==="add"?"Add Locale":"Edit Locale"),1),s("p",Ue,i(v.value==="add"?"Pick a locale from the master list, then decide whether it should appear in CMS or on the website.":"Adjust labels and rollout flags for this locale."),1)]),s("button",{class:"btn btn-sm btn-outline-secondary",disabled:b.value,onClick:O}," Close ",8,$e)]),s("div",ze,[s("div",Ve,[s("div",Te,[v.value==="add"?(n(),d(k,{key:0},[e[15]||(e[15]=s("label",{class:"form-label"},"Search all available locales",-1)),m(s("input",{"onUpdate:modelValue":e[1]||(e[1]=a=>_.value=a),class:"form-control mb-2",type:"search",placeholder:"Search locales by code or name"},null,512),[[L,_.value]]),s("div",Fe,[(n(!0),d(k,null,F(H.value,a=>{var f;return n(),d("button",{key:a.code,type:"button",class:x(["list-group-item list-group-item-action",{active:((f=o.value)==null?void 0:f.code)===a.code}]),disabled:P.value.has(a.code),onClick:zs=>le(a)},[s("div",Be,[s("div",null,[s("div",qe,i(a.label),1),s("div",je,i(a.nativeLabel),1)]),s("div",Pe,[s("span",{class:x(["badge text-uppercase",a.direction==="rtl"?"bg-warning text-dark":"bg-light text-dark"])},i(a.direction),3),s("div",We,i(a.code),1)])])],10,Re)}),128)),H.value.length?g("",!0):(n(),d("div",He," No locales match this search. "))])],64)):o.value?(n(),d(k,{key:1},[e[16]||(e[16]=s("label",{class:"form-label"},"Locale",-1)),s("div",Je,[s("div",Ke,i(o.value.label),1),s("div",Ye,i(o.value.nativeLabel),1),s("div",Ie,i(o.value.code),1)])],64)):g("",!0)])]),s("div",Ge,[s("div",Qe,[o.value?(n(),d(k,{key:0},[s("div",Xe,[s("div",Ze,[e[17]||(e[17]=s("label",{class:"form-label"},"Locale code",-1)),s("input",{value:o.value.code,class:"form-control",type:"text",disabled:""},null,8,es)]),s("div",ss,[e[19]||(e[19]=s("label",{class:"form-label"},"Direction",-1)),m(s("select",{"onUpdate:modelValue":e[2]||(e[2]=a=>o.value.direction=a),class:"form-select"},[...e[18]||(e[18]=[s("option",{value:"ltr"},"LTR",-1),s("option",{value:"rtl"},"RTL",-1)])],512),[[I,o.value.direction]])]),s("div",as,[e[20]||(e[20]=s("label",{class:"form-label"},"Sort order",-1)),m(s("input",{"onUpdate:modelValue":e[3]||(e[3]=a=>o.value.sortOrder=a),class:"form-control",type:"number",min:"1",step:"1"},null,512),[[L,o.value.sortOrder,void 0,{number:!0}]])]),s("div",ts,[e[21]||(e[21]=s("label",{class:"form-label"},"Display label",-1)),m(s("input",{"onUpdate:modelValue":e[4]||(e[4]=a=>o.value.label=a),class:"form-control",type:"text"},null,512),[[L,o.value.label]])]),s("div",ls,[e[22]||(e[22]=s("label",{class:"form-label"},"Native label",-1)),m(s("input",{"onUpdate:modelValue":e[5]||(e[5]=a=>o.value.nativeLabel=a),class:"form-control",type:"text"},null,512),[[L,o.value.nativeLabel]])]),s("div",os,[e[24]||(e[24]=s("label",{class:"form-label"},"Fallback locale",-1)),m(s("select",{"onUpdate:modelValue":e[6]||(e[6]=a=>o.value.fallbackCode=a),class:"form-select",disabled:o.value.isDefault},[e[23]||(e[23]=s("option",{value:null},"None",-1)),(n(!0),d(k,null,F(se.value,a=>(n(),d("option",{key:a.code,value:a.code,disabled:a.code===o.value.code},i(a.label)+" ("+i(a.code)+") ",9,ds))),128))],8,ns),[[I,o.value.fallbackCode]])]),s("div",is,[s("div",cs,[s("label",rs,[m(s("input",{"onUpdate:modelValue":e[7]||
1(e[7]=a=>o.value.cmsEnabled=a),class:"form-check-input",type:"checkbox"},null,512),[[R,o.value.cmsEnabled]]),e[25]||(e[25]=s("span",{class:"form-check-label"},"Available in CMS",-1))]),s("label",us,[m(s("input",{"onUpdate:modelValue":e[8]||(e[8]=a=>o.value.websiteEnabled=a),class:"form-check-input",type:"checkbox"},null,512),[[R,o.value.websiteEnabled]]),e[26]||(e[26]=s("span",{class:"form-check-label"},"Enabled on website",-1))]),s("label",bs,[m(s("input",{"onUpdate:modelValue":e[9]||(e[9]=a=>o.value.isDefault=a),class:"form-check-input",type:"checkbox",disabled:o.value.code==="en",onChange:ne},null,40,vs),[[R,o.value.isDefault]]),e[27]||(e[27]=s("span",{class:"form-check-label"},"Default locale",-1))])])]),e[28]||(e[28]=s("div",{class:"col-12"},[s("div",{class:"alert alert-info mb-0"}," Adding a locale here makes it available for CMS workflows. Enabling it for the website does not create translations automatically. ")],-1))]),s("div",ms,[s("button",{class:"btn btn-sm btn-outline-secondary",disabled:b.value,onClick:O}," Cancel ",8,fs),s("button",{class:"btn btn-sm btn-warning",disabled:b.value,onClick:de},i(b.value?"Saving...":v.value==="add"?"Add Locale":"Save Changes"),9,ps)])],64)):(n(),d("div",gs,"Select a locale from the list to configure it."))])])])])])):g("",!0),s("div",hs,[s("div",_s,[s("div",ys,[s("table",ks,[e[31]||(e[31]=s("thead",null,[s("tr",null,[s("th",{class:"ps-3"},"Code"),s("th",null,"Language"),s("th",null,"CMS"),s("th",null,"Website"),s("th",null,"Default"),s("th",null,"Fallback"),s("th",null,"Order"),s("th",{class:"text-end pe-3"},"Actions")])],-1)),s("tbody",null,[w.value?(n(),d("tr",ws,[...e[29]||(e[29]=[s("td",{colspan:"8",class:"text-muted p-3"},"Loading locale settings...",-1)])])):W.value.length?g("",!0):(n(),d("tr",Cs,[...e[30]||(e[30]=[s("td",{colspan:"8",class:"text-muted p-3"}," No configured locales match this search. ",-1)])])),(n(!0),d(k,null,F(W.value,a=>(n(),d("tr",{key:a.code},[s("td",xs,i(a.code),1),s("td",null,[s("div",Ls,i(a.label),1),s("div",Ss,i(a.nativeLabel),1)]),s("td",null,[s("span",{class:x(["badge",a.cmsEnabled?"bg-success":"bg-secondary"])},i(a.cmsEnabled?"Enabled":"Hidden"),3)]),s("td",null,[s("span",{class:x(["badge",a.websiteEnabled?"bg-success":"bg-secondary"])},i(a.websiteEnabled?"Enabled":"Off"),3)]),s("td",null,[a.isDefault?(n(),d("span",Es,"Default")):(n(),d("span",Ds,"â"))]),s("td",As,i(a.fallbackCode||"â"),1),s("td",null,i(a.sortOrder),1),s("td",Os,[s("div",Ms,[s("button",{class:"btn btn-sm btn-outline-secondary",disabled:b.value,onClick:f=>oe(a)}," Edit ",8,Ns),s("button",{class:"btn btn-sm btn-outline-danger",disabled:b.value||a.isDefault||a.code==="en",onClick:f=>ie(a)}," Remove ",8,Us)])])]))),128))])])])])])]))])}}});export{Rs 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.