@dskripchenko/laravel-admin 1.44.0 → 1.44.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +2 -2
- package/dist/assets/{app-CxQTEfcf.js → app-BSLBKVsR.js} +2 -2
- package/dist/assets/app-D8xmSFFQ.css +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +5 -2
- package/dist/index.mjs.map +1 -1
- package/dist/source-hash.txt +1 -1
- package/dist/style.css +1 -1
- package/package.json +3 -3
- package/dist/assets/app-CwIxrlX6.css +0 -1
package/dist/index.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
${h.trSafe("Текст…")}`),p=e.ref("LABEL"),y=e.ref("0"),k=e.ref("50"),f=e.ref(h.trSafe("Янв, Фев, Мар, Апр")),x=e.ref("10, 20, 15, 30"),w=e.ref(""),g=e.ref("5");e.watch(()=>o.open,B=>{if(B)if(o.mode==="configure"&&o.item){const E=o.item.config??{};d.value=o.item.type??"",s.value=E.title??o.initialTitle,i.value=String(o.item.size??6),u.value=E.content??u.value;const z=E.stats?.[0];z&&(p.value=String(z.label??""),y.value=String(z.value??"")),k.value=String(E.value??50);const q=E.labels,F=E.datasets;q&&q.length>0&&(f.value=q.join(", ")),F&&F[0]?.data&&(x.value=F[0].data.join(", ")),w.value=E.resource??"",g.value=String(E.limit??5)}else d.value="",s.value="",i.value="6"});const M=e.computed(()=>d.value!==""&&s.value.trim()!==""),v={stat:h.trSafe("Stat — карточка с числом"),stats:h.trSafe("Stats overview — несколько метрик"),chart:h.trSafe("Chart — линия / столбцы / донат"),"bar-chart":h.trSafe("Bar chart — гистограмма"),"donut-chart":h.trSafe("Donut — кольцевая диаграмма"),"recent-table":h.trSafe("Recent list — последние записи"),recent_list:h.trSafe("Recent list — последние записи"),"recent-list":h.trSafe("Recent list — последние записи"),heatmap:h.trSafe("Heatmap — тепловая карта"),gauge:h.trSafe("Gauge — шкала со значением"),markdown:h.trSafe("Markdown — заметка / текст")};function C(B){return B==="markdown"?"markdown":B==="stat"||B==="stats"?"stat":B==="gauge"?"gauge":B==="chart"||B==="bar-chart"||B==="donut-chart"?"chart":B==="recent-table"||B==="recent_list"||B==="recent-list"?"recent":null}function I(){const B={title:s.value};switch(C(d.value)){case"markdown":B.content=u.value;break;case"stat":B.stats=[{label:p.value,value:y.value}];break;case"gauge":B.value=Number(k.value)||0,B.min=0,B.max=100;break;case"chart":{const E=f.value.split(",").map(q=>q.trim()).filter(Boolean),z=x.value.split(",").map(q=>Number(q.trim())).filter(q=>!Number.isNaN(q));B.labels=E,B.datasets=[{label:s.value,data:z}],B.type=d.value==="donut-chart"?"doughnut":"bar";break}case"recent":B.resource=w.value,B.limit=Number(g.value)||5;break}return B}function _(){if(!M.value)return;const B=Math.max(1,Math.min(12,Number(i.value)||6)),E=I();if(o.mode==="configure"&&o.item)r("save",{size:B,type:d.value,config:E});else{const z=`custom.${d.value}.${Date.now()}`;r("add",{slug:z,type:d.value,size:B,config:E})}r("close")}function L(){r("close")}return(B,E)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createVNode(e.Transition,{name:"admin-dialog"},{default:e.withCtx(()=>[t.open?(e.openBlock(),e.createElementBlock("div",WS,[e.createElementVNode("div",{class:"admin-dialog-root__backdrop",onClick:L}),e.createElementVNode("div",ZS,[e.createElementVNode("header",GS,[e.createElementVNode("h2",KS,e.toDisplayString(t.mode==="add"?e.unref(h.trSafe)("Добавить виджет"):e.unref(h.trSafe)("Настроить виджет")),1),e.createElementVNode("button",{type:"button",class:"admin-dialog__close","aria-label":e.unref(h.trSafe)("Закрыть"),onClick:L},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(pe),size:16},null,8,["icon"])],8,XS)]),e.createElementVNode("div",JS,[t.mode==="add"?(e.openBlock(),e.createElementBlock("div",YS,[e.createElementVNode("label",QS,e.toDisplayString(e.unref(h.trSafe)("Скрытые виджеты")),1),t.restorable.length===0?(e.openBlock(),e.createElementBlock("p",eL,e.toDisplayString(e.unref(h.trSafe)("Нечего добавлять — все виджеты дашборда уже показаны.")),1)):(e.openBlock(),e.createElementBlock("div",tL,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.restorable,z=>(e.openBlock(),e.createElementBlock("button",{key:z.slug,type:"button",class:"admin-dialog__type-card","data-testid":`restore-widget-${z.slug}`,onClick:q=>l(z.slug)},[e.createElementVNode("span",nL,e.toDisplayString(z.title),1),e.createElementVNode("span",oL,e.toDisplayString(e.unref(h.trSafe)("Вернуть на дашборд")),1)],8,aL))),128))]))])):e.createCommentVNode("",!0),t.mode==="add"?(e.openBlock(),e.createElementBlock("div",rL,[e.createElementVNode("label",lL,[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Тип виджета"))+" ",1),E[10]||(E[10]=e.createElementVNode("span",{class:"admin-dialog__required"},"*",-1))]),c.value.length===0?(e.openBlock(),e.createElementBlock("p",cL,e.toDisplayString(e.unref(h.trSafe)("Нет виджетов для добавления — все доступные типы уже на дашборде"))+" "+e.toDisplayString(e.unref(h.trSafe)("или ни один не зарегистрирован.")),1)):(e.openBlock(),e.createElementBlock("div",iL,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,z=>(e.openBlock(),e.createElementBlock("button",{key:z,type:"button",class:e.normalizeClass(["admin-dialog__type-card",{"admin-dialog__type-card--active":d.value===z}]),onClick:q=>d.value=z},[e.createElementVNode("span",sL,e.toDisplayString(v[z]??z),1),e.createElementVNode("span",uL,e.toDisplayString(z),1)],10,dL))),128))]))])):(e.openBlock(),e.createElementBlock("div",hL,[e.createElementVNode("label",pL,e.toDisplayString(e.unref(h.trSafe)("Тип")),1),e.createElementVNode("div",yL,e.toDisplayString(d.value||"unknown"),1)])),e.createElementVNode("div",kL,[e.createElementVNode("label",mL,[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Заголовок"))+" ",1),E[11]||(E[11]=e.createElementVNode("span",{class:"admin-dialog__required"},"*",-1))]),e.createVNode(e.unref(m.UidInput),{modelValue:s.value,"onUpdate:modelValue":E[0]||(E[0]=z=>s.value=z),placeholder:e.unref(h.trSafe)("Название виджета")},null,8,["modelValue","placeholder"])]),e.createElementVNode("div",fL,[e.createElementVNode("label",vL,e.toDisplayString(e.unref(h.trSafe)("Ширина (1..12)")),1),e.createVNode(e.unref(m.UidInput),{modelValue:i.value,"onUpdate:modelValue":E[1]||(E[1]=z=>i.value=z),type:"number"},null,8,["modelValue"])]),C(d.value)==="markdown"?(e.openBlock(),e.createElementBlock("div",gL,[e.createElementVNode("label",ML,e.toDisplayString(e.unref(h.trSafe)("Markdown содержимое")),1),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":E[2]||(E[2]=z=>u.value=z),class:"admin-dialog__textarea",rows:"6"},null,512),[[e.vModelText,u.value]])])):C(d.value)==="stat"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:4},[e.createElementVNode("div",wL,[e.createElementVNode("label",xL,e.toDisplayString(e.unref(h.trSafe)("Метка")),1),e.createVNode(e.unref(m.UidInput),{modelValue:p.value,"onUpdate:modelValue":E[3]||(E[3]=z=>p.value=z)},null,8,["modelValue"])]),e.createElementVNode("div",bL,[e.createElementVNode("label",IL,e.toDisplayString(e.unref(h.trSafe)("Значение")),1),e.createVNode(e.unref(m.UidInput),{modelValue:y.value,"onUpdate:modelValue":E[4]||(E[4]=z=>y.value=z)},null,8,["modelValue"])])],64)):C(d.value)==="gauge"?(e.openBlock(),e.createElementBlock("div",CL,[e.createElementVNode("label",SL,e.toDisplayString(e.unref(h.trSafe)("Значение (0..100)")),1),e.createVNode(e.unref(m.UidInput),{modelValue:k.value,"onUpdate:modelValue":E[5]||(E[5]=z=>k.value=z),type:"number"},null,8,["modelValue"])])):C(d.value)==="chart"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:6},[e.createElementVNode("div",LL,[e.createElementVNode("label",BL,e.toDisplayString(e.unref(h.trSafe)("Метки (через запятую)")),1),e.createVNode(e.unref(m.UidInput),{modelValue:f.value,"onUpdate:modelValue":E[6]||(E[6]=z=>f.value=z),placeholder:e.unref(h.trSafe)("Янв, Фев, Мар")},null,8,["modelValue","placeholder"])]),e.createElementVNode("div",_L,[e.createElementVNode("label",VL,e.toDisplayString(e.unref(h.trSafe)("Значения (через запятую)")),1),e.createVNode(e.unref(m.UidInput),{modelValue:x.value,"onUpdate:modelValue":E[7]||(E[7]=z=>x.value=z),placeholder:"10, 20, 15"},null,8,["modelValue"])])],64)):C(d.value)==="recent"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:7},[e.createElementVNode("div",qL,[e.createElementVNode("label",AL,e.toDisplayString(e.unref(h.trSafe)("Slug ресурса")),1),e.createVNode(e.unref(m.UidInput),{modelValue:w.value,"onUpdate:modelValue":E[8]||(E[8]=z=>w.value=z),placeholder:"articles"},null,8,["modelValue"])]),e.createElementVNode("div",zL,[e.createElementVNode("label",EL,e.toDisplayString(e.unref(h.trSafe)("Лимит")),1),e.createVNode(e.unref(m.UidInput),{modelValue:g.value,"onUpdate:modelValue":E[9]||(E[9]=z=>g.value=z),type:"number"},null,8,["modelValue"])])],64)):e.createCommentVNode("",!0)]),e.createElementVNode("footer",NL,[M.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",DL,[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Заполните"))+" ",1),E[12]||(E[12]=e.createElementVNode("span",{class:"admin-dialog__required"},"*",-1)),e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("-поля")),1)])),e.createVNode(e.unref(m.UidButton),{variant:"ghost",onClick:L},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Отмена")),1)]),_:1}),e.createVNode(e.unref(m.UidButton),{variant:"primary",disabled:!M.value,title:M.value?void 0:e.unref(h.trSafe)("Заполните обязательные поля"),onClick:_},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.mode==="add"?e.unref(h.trSafe)("Добавить"):e.unref(h.trSafe)("Сохранить")),1)]),_:1},8,["disabled","title"])])])])):e.createCommentVNode("",!0)]),_:1})]))}}),$L={class:"admin-page admin-dashboard"},HL={class:"admin-page__hd"},PL={class:"admin-page__title-wrap"},TL={class:"admin-page__title"},UL={key:0,class:"admin-page__count"},RL={class:"admin-page__actions"},jL=["draggable","onDragstart","onDragover","onDrop"],OL=["aria-label","onMousedown"],WL=140,ZL=16,Cw=e.defineComponent({__name:"DashboardPage",props:{slug:{default:void 0},widgets:{default:void 0},title:{default:void 0},subtitle:{default:void 0}},emits:["change-period","export"],setup(t,{emit:a}){const o=t,r=a,l=ke(),c=Jx(),d=h.useI18nStore(),s=U=>d.tr(U),i=le.useRoute(),u=e.computed(()=>{if(o.slug)return o.slug;const U=i?.meta?.slug;if(typeof U=="string"&&U.length>0)return U;const W=i?.params?.slug;if(typeof W=="string"&&W.length>0)return W}),p=(U,W)=>d.has(U)?d.t(U):W,y=e.computed(()=>{const U=u.value;return!U||!l.manifest?null:l.manifest.dashboards?.find(G=>G.slug===U)??null}),k=e.computed(()=>o.widgets?o.widgets:B.value!==null?B.value:y.value?.widgets??[]),f=e.computed(()=>o.title??y.value?.label??"Dashboard"),x=e.computed(()=>o.subtitle??y.value?.description??null),w=e.computed(()=>{const U=new Map;for(const Z of k.value){const re=String(Z.slug??"");re&&U.set(re,Z)}const W=c.draft,G=[];if(W.length>0){for(const Z of W){const re=U.get(Z.slug)??null;if(U.delete(Z.slug),Z.hidden)continue;let ce=null;if(re!==null)ce={...re,size:Z.size??re.size??12};else if(Z.type){const Le=Z.config??{};ce={slug:Z.slug,type:Z.type,title:Le.title??"",size:Z.size??6,data:Le}}ce&&G.push({node:ce,layoutSlug:Z.slug})}for(const[Z,re]of U.entries())G.push({node:re,layoutSlug:Z})}else for(const Z of k.value)G.push({node:Z,layoutSlug:String(Z.slug??"")});return G});function g(U){const W=U.size??U.span;return Math.max(1,Math.min(12,typeof W=="number"?W:12))}function M(U,W){const Z=c.draft.find(Le=>Le.slug===U)?.config?.rowSpan;if(typeof Z=="number")return Math.max(1,Math.min(6,Z));const re=W.rowSpan??W.row_span;if(typeof re=="number")return Math.max(1,Math.min(6,re));const ce=String(W.type??"");return ce==="stats"||ce==="stat"?1:ce==="gauge"||ce==="chart"||ce==="bar-chart"||ce==="donut-chart"||ce==="heatmap"||ce==="recent_list"||ce==="recent-list"||ce==="recent-table"||ce==="markdown"||ce==="iframe"||ce==="table"?2:1}const v=["7d","30d","90d","all"];function C(U){if(U==="7d")return p("admin.dashboard.period.7d","За 7 дней");if(U==="30d")return p("admin.dashboard.period.30d","За 30 дней");if(U==="90d")return p("admin.dashboard.period.90d","За 90 дней");if(U==="all")return p("admin.dashboard.period.all","Всё время");const W=/^(\d+)d$/.exec(U);return W?s("За :n дн.").replace(":n",W[1]):U}const I=e.computed(()=>(y.value?y.value.periods??v:v).map(W=>({key:W,label:C(W)}))),_=e.computed(()=>y.value?.period??"30d"),L=e.ref(_.value),B=e.ref(null);async function E(){const U=c.period;U&&I.value.some(W=>W.key===U)&&(L.value=U,await q())}async function z(U,W){L.value=U,r("change-period",U);const G=u.value;G&&c.savePeriod(G,U),await q()}async function q(){const U=u.value;if(U)try{const{getAdminClient:W}=await Promise.resolve().then(()=>ue),Z=await W().get(`/dashboard/widgets?key=${encodeURIComponent(U)}&period=${encodeURIComponent(L.value)}`);B.value=Z.widgets}catch{}}let F=null;const H=e.computed(()=>{let U=0;for(const W of k.value){const G=W.refresh;typeof G=="number"&&G>0&&(U===0||G<U)&&(U=G)}return U});function $(){N();const U=H.value;U<=0||(F=setInterval(()=>{q()},U*1e3))}function N(){F!==null&&(clearInterval(F),F=null)}e.watch(()=>H.value,()=>$()),e.onMounted(async()=>{l.manifest===null&&await l.load().catch(()=>{});const U=u.value;U&&(L.value=_.value,await c.openDashboard(U).catch(()=>{}),await E()),$()}),e.onUnmounted(()=>{N()}),e.watch(()=>u.value,async(U,W)=>{U!==W&&(B.value=null,L.value=_.value,U?(await c.openDashboard(U).catch(()=>{}),await E()):c.reset())});const b=e.computed(()=>I.value.find(U=>U.key===L.value)?.label??p("admin.dashboard.period.label","Период")),V=e.computed(()=>I.value.length>0),S=e.ref(null),A=e.ref(null),P=e.ref("");function X(){S.value="add",A.value=null,P.value=""}function O(){S.value=null}function ae(){c.draft.length===0&&c.seedDraft(w.value.map(({node:U,layoutSlug:W})=>({slug:W,size:g(U),type:String(U.type??"")||void 0}))),c.enterEditMode()}function Y(){c.cancelEdit()}async function Q(){await Pe({message:p("admin.dashboard.reset_confirm","Сбросить layout к настройкам по умолчанию?"),destructive:!0})&&await c.resetToDefault().catch(()=>{})}async function ee(){await c.saveLayout().catch(()=>{})}function oe(U){const W=k.value.some(Z=>String(Z.slug??"")===U),G=c.draft.some(Z=>Z.slug===U);W?G?c.updateWidget(U,{hidden:!0}):c.addWidget({slug:U,hidden:!0}):c.removeWidget(U)}function he(U){jo();const W=c.draft.find(re=>re.slug===U)??null,Z=w.value.find(re=>re.layoutSlug===U)?.node;A.value=W??{slug:U,type:Z?.type??"",size:Z?.size??6,config:{}},P.value=Z?.title??"",S.value="configure"}function Me(U){c.addWidget(U)}const Te=e.computed(()=>{const U=new Map;for(const W of k.value){const G=String(W.slug??"");G&&U.set(G,W)}return c.draft.filter(W=>W.hidden===!0).map(W=>{const G=U.get(W.slug),Z=W.config??{};return{slug:W.slug,title:G?.title||Z.title||W.slug}})});function ie(U){c.restoreWidget(U)}function qc(U){if(!A.value)return;const W=A.value.slug;if(c.draft.some(Z=>Z.slug===W)){const Z=c.draft.find(re=>re.slug===W);c.updateWidget(W,{...U,config:{...Z?.config??{},...U.config??{}}})}else c.addWidget({slug:W,type:A.value.type,...U})}const Se=e.ref(null),vt=e.ref(null),Ro=e.ref(!1);function U9(U){if(!c.editMode){Ro.value=!1;return}const W=U.target;Ro.value=!!W?.closest('[data-drag-handle="true"]')}function gt(U,W){if(c.editMode&&W.dataTransfer!==null){if(!Ro.value){W.preventDefault();return}Se.value=U,W.dataTransfer.effectAllowed="move",W.dataTransfer.setData("text/plain",String(U))}}function Ue(){Ro.value=!1,Se.value=null,vt.value=null}function R9(U,W){c.editMode&&Se.value!==null&&(W.preventDefault(),vt.value!==U&&(vt.value=U))}function j9(U,W){if(W.preventDefault(),!c.editMode||Se.value===null)return;const G=Se.value;jo(),c.moveWidget(G,U),Se.value=null,vt.value=null}function jo(){const U=c.draft.filter(G=>G.hidden===!0);if(c.draft.length===w.value.length+U.length)return;const W=w.value.map(({node:G,layoutSlug:Z},re)=>{const ce=c.draft.find(Le=>Le.slug===Z);return{slug:Z,size:g(G),position:re,hidden:!1,type:ce?.type??G.type,config:ce?.config}});c.setDraft([...W,...U.map(G=>({...G}))])}const qe=e.ref(null);let Ac=0;function Mt(U,W,G,Z){if(!c.editMode)return;U.preventDefault(),U.stopPropagation(),jo(),qe.value={slug:W,startX:U.clientX,startY:U.clientY,startSpan:G,startRowSpan:Z},Ac=U.target.closest(".admin-dashboard__grid")?.getBoundingClientRect().width??1200,window.addEventListener("mousemove",Ae),window.addEventListener("mouseup",wt)}function Ae(U){if(!qe.value)return;const W=Ac/12,G=Math.round((U.clientX-qe.value.startX)/W),Z=Math.max(1,Math.min(12,qe.value.startSpan+G)),re=WL+ZL,ce=Math.round((U.clientY-qe.value.startY)/re),Le=Math.max(1,Math.min(6,qe.value.startRowSpan+ce)),et=c.draft.find(Wo=>Wo.slug===qe.value.slug);if(!et)return;const zc=et.config?.rowSpan,Oo={};et.size!==Z&&(Oo.size=Z),zc!==Le&&(Oo.config={...et.config??{},rowSpan:Le}),Object.keys(Oo).length>0&&c.updateWidget(qe.value.slug,Oo)}function wt(){qe.value=null,window.removeEventListener("mousemove",Ae),window.removeEventListener("mouseup",wt)}function O9(){if(r("export"),typeof window>"u"||typeof document>"u")return;const U={dashboard:u.value,period:L.value,exported_at:new Date().toISOString(),widgets:w.value.map(({node:re})=>{const ce=re;return{type:ce.type,title:ce.title??ce.data?.title??null,data:ce.data??null}})},W=new Blob([JSON.stringify(U,null,2)],{type:"application/json"}),G=URL.createObjectURL(W),Z=document.createElement("a");Z.href=G,Z.download=`dashboard-${u.value??"export"}-${L.value}.json`,document.body.appendChild(Z),Z.click(),Z.remove(),URL.revokeObjectURL(G)}return(U,W)=>(e.openBlock(),e.createElementBlock("section",$L,[e.createElementVNode("header",HL,[e.createElementVNode("div",PL,[e.createElementVNode("h1",TL,e.toDisplayString(f.value),1),x.value?(e.openBlock(),e.createElementBlock("div",UL,e.toDisplayString(x.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",RL,[e.renderSlot(U.$slots,"actions"),V.value?(e.openBlock(),e.createBlock(e.unref(m.UidMenu),{key:0},{trigger:e.withCtx(()=>[e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"md","data-testid":"dash-period"},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Zo),size:14},null,8,["icon"])]),append:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref($e),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(b.value)+" ",1)]),_:1})]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.value,G=>(e.openBlock(),e.createBlock(e.unref(m.UidMenuItem),{key:G.key,onClick:Z=>z(G.key)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(G.label),1)]),_:2},1032,["onClick"]))),128))]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(m.UidButton),{variant:"secondary",size:"md","data-testid":"dash-export",onClick:O9},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Xo),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(p("admin.dashboard.export","Экспорт")),1)]),_:1}),e.unref(c).editMode?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createVNode(e.unref(m.UidButton),{variant:"secondary",size:"md","data-testid":"dash-add-widget",onClick:X},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(me),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(p("admin.dashboard.add_widget","Добавить виджет")),1)]),_:1}),e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"md",onClick:Q},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Je),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(p("admin.dashboard.reset_layout","Сбросить")),1)]),_:1}),e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"md",onClick:Y},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p("admin.dashboard.cancel_edit","Отмена")),1)]),_:1}),e.createVNode(e.unref(m.UidButton),{variant:"primary",size:"md",loading:e.unref(c).saving,disabled:e.unref(c).saving,onClick:ee},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p("admin.dashboard.save_layout","Сохранить")),1)]),_:1},8,["loading","disabled"])],64)):(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:1,variant:"secondary",size:"md","data-testid":"dash-edit",onClick:ae},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(He),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(p("admin.dashboard.edit_layout","Редактировать")),1)]),_:1}))])]),e.createElementVNode("div",{class:e.normalizeClass(["admin-dashboard__grid",{"admin-dashboard__grid--editing":e.unref(c).editMode}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(w.value,(G,Z)=>(e.openBlock(),e.createElementBlock("div",{key:G.layoutSlug,class:e.normalizeClass(["admin-dashboard__cell",{"admin-dashboard__cell--editing":e.unref(c).editMode,"admin-dashboard__cell--dragging":Se.value===Z,"admin-dashboard__cell--drop-target":vt.value===Z&&Se.value!==Z&&Se.value!==null}]),draggable:e.unref(c).editMode,style:e.normalizeStyle({gridColumn:`span ${g(G.node)} / span ${g(G.node)}`,gridRow:`span ${M(G.layoutSlug,G.node)} / span ${M(G.layoutSlug,G.node)}`}),onPointerdown:U9,onDragstart:re=>gt(Z,re),onDragover:re=>R9(Z,re),onDrop:re=>j9(Z,re),onDragend:Ue},[e.createVNode(Iw,{node:G.node},null,8,["node"]),e.unref(c).editMode?(e.openBlock(),e.createBlock(OS,{key:0,onConfigure:re=>he(G.layoutSlug),onRemove:re=>oe(G.layoutSlug)},null,8,["onConfigure","onRemove"])):e.createCommentVNode("",!0),e.unref(c).editMode?(e.openBlock(),e.createElementBlock("span",{key:1,class:"admin-dashboard__resize","aria-label":s("Изменить размер"),onMousedown:re=>Mt(re,G.layoutSlug,g(G.node),M(G.layoutSlug,G.node))},null,40,OL)):e.createCommentVNode("",!0)],46,jL))),128))],2),e.createVNode(FL,{open:S.value!==null,mode:S.value??"add",item:A.value,"initial-title":P.value,restorable:Te.value,onClose:O,onAdd:Me,onSave:qc,onRestore:ie},null,8,["open","mode","item","initial-title","restorable"])]))}}),GL={key:1,class:"admin-home"},KL={class:"admin-home__title"},XL={class:"admin-home__lead"},JL={key:0,class:"admin-home__resources"},YL={class:"admin-home__heading"},QL={class:"admin-home__grid"},eB=["onClick"],tB={class:"admin-home__card-label"},aB={class:"admin-home__card-slug"},ab=e.defineComponent({__name:"HomePage",setup(t){const a=ke(),o=ye(),r=le.useRouter(),l=e.computed(()=>o.user?.name??""),c=e.computed(()=>a.manifest?.resources??[]),d=e.computed(()=>a.manifest?.dashboards??[]),s=e.computed(()=>d.value[0]?.slug??null),i=Jx();return e.watch(s,u=>{u&&i.openDashboard(u)},{immediate:!0}),(u,p)=>s.value?(e.openBlock(),e.createBlock(Cw,{key:0,slug:s.value},null,8,["slug"])):(e.openBlock(),e.createElementBlock("div",GL,[e.createVNode(e.unref(m.UidCard),{padding:"lg",class:"admin-home__hero"},{default:e.withCtx(()=>[e.createElementVNode("h1",KL,e.toDisplayString(l.value?e.unref(h.tRaw)("Добро пожаловать, :name",{name:l.value}):e.unref(h.trSafe)("Добро пожаловать")),1),e.createElementVNode("p",XL,e.toDisplayString(e.unref(h.trSafe)("Админ-панель готова. Зарегистрируйте DashboardScreen чтобы увидеть widget-grid здесь,"))+" "+e.toDisplayString(e.unref(h.trSafe)("либо переходите к ресурсам ниже.")),1)]),_:1}),c.value.length?(e.openBlock(),e.createElementBlock("section",JL,[e.createElementVNode("h2",YL,e.toDisplayString(e.unref(h.trSafe)("Ресурсы")),1),e.createElementVNode("ul",QL,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,y=>(e.openBlock(),e.createElementBlock("li",{key:y.slug},[e.createElementVNode("button",{type:"button",class:"admin-home__card",onClick:k=>e.unref(r).push({name:`admin.resource.${y.slug}.index`})},[e.createElementVNode("span",tB,e.toDisplayString(y.label),1),e.createElementVNode("span",aB,e.toDisplayString(y.slug),1)],8,eB)]))),128))])])):e.createCommentVNode("",!0)]))}}),nB={class:"admin-status-page"},oB={class:"admin-status-page__message"},nb=e.defineComponent({__name:"ForbiddenPage",setup(t){const a=le.useRouter();return(o,r)=>(e.openBlock(),e.createElementBlock("div",nB,[e.createVNode(e.unref(m.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[r[1]||(r[1]=e.createElementVNode("h1",{class:"admin-status-page__code"},"403",-1)),e.createElementVNode("p",oB,e.toDisplayString(e.unref(h.trSafe)("Доступ запрещён.")),1),e.createVNode(e.unref(m.UidButton),{variant:"ghost",onClick:r[0]||(r[0]=l=>e.unref(a).replace({name:"admin.home"}))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("На главную")),1)]),_:1})]),_:1})]))}}),rB={class:"admin-status-page"},lB={class:"admin-status-page__message"},ob=e.defineComponent({__name:"NotFoundPage",setup(t){const a=le.useRouter();return(o,r)=>(e.openBlock(),e.createElementBlock("div",rB,[e.createVNode(e.unref(m.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[r[1]||(r[1]=e.createElementVNode("h1",{class:"admin-status-page__code"},"404",-1)),e.createElementVNode("p",lB,e.toDisplayString(e.unref(h.trSafe)("Страница не найдена.")),1),e.createVNode(e.unref(m.UidButton),{variant:"ghost",onClick:r[0]||(r[0]=l=>e.unref(a).replace({name:"admin.home"}))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("На главную")),1)]),_:1})]),_:1})]))}}),cB={class:"admin-settings-page"},iB={class:"admin-settings-page__title"},dB={key:0,class:"admin-settings-page__hint"},sB={key:1,class:"admin-settings-page__debug"},rb=e.defineComponent({__name:"SettingsPage",setup(t){const a=le.useRoute(),o=ke(),r=e.computed(()=>String(a.params.slug??"")),l=e.computed(()=>o.manifest?.settings?.find(c=>c.slug===r.value)??null);return(c,d)=>(e.openBlock(),e.createElementBlock("div",cB,[e.createVNode(e.unref(m.UidCard),{padding:"lg"},{default:e.withCtx(()=>[e.createElementVNode("h1",iB,e.toDisplayString(l.value?.label??r.value),1),l.value?(e.openBlock(),e.createElementBlock("pre",sB,e.toDisplayString(JSON.stringify(l.value.fields,null,2)),1)):(e.openBlock(),e.createElementBlock("p",dB,e.toDisplayString(e.unref(h.tRaw)("Раздел настроек «:slug» не найден в манифесте.",{slug:r.value})),1))]),_:1})]))}}),uB=_e.defineStore("admin-screen",()=>{const t=e.ref(null),a=e.ref(""),o=e.ref(null),r=e.ref([]),l=e.ref([]),c=e.ref([]),d=e.ref(null),s=e.ref({}),i=e.ref({}),u=e.ref({}),p=e.ref({}),y=e.ref(!1),k=e.ref(!1),f=e.ref(null),x=e.ref(null),w=e.ref(null),g=e.ref(null),M=e.computed(()=>f.value!==null);function v(F,H){for(const $ of Object.keys(F))delete F[$];Object.assign(F,H)}function C(F){return F.map(H=>I(H))}function I(F){const H={...F};return Array.isArray(F.children)&&F.items===void 0?H.items=F.children.map($=>typeof $=="object"&&$!==null?I($):$):Array.isArray(F.items)&&(H.items=F.items.map($=>typeof $=="object"&&$!==null?I($):$)),F.props&&typeof F.props=="object"&&Object.assign(H,F.props),H}function _(){t.value=null,p.value={},a.value="",o.value=null,r.value=[],l.value=[],c.value=[],d.value=null,v(s.value,{}),v(i.value,{}),u.value={},y.value=!1,k.value=!1,f.value=null,x.value=null,w.value=null,g.value=null}async function L(F,H){t.value!==F&&(x.value=null,w.value=null),t.value=F,p.value=H===void 0?{}:{...H},y.value=!0,f.value=null,u.value={};try{const N=await ne().get(`/${F}/state`,{params:H});a.value=N.name,o.value=N.description,r.value=C(N.layout),l.value=N.command_bar,c.value=N.permissions,d.value=N.etag,v(s.value,N.state),v(i.value,N.state)}catch($){throw f.value=$ instanceof Error?$:new Error(String($)),$}finally{y.value=!1}}async function B(F,H){if(!t.value)throw new Error("useScreenStore.runMethod() before slug set");if(k.value)throw new Error("Already running a method");k.value=!0,f.value=null,u.value={},x.value=null,w.value=null,g.value=null;try{const $=ne(),N=H??s.value,b=await $.post(`/${t.value}/runMethod`,{method:F,payload:N});if(b.state&&Object.keys(b.state).length>0&&(v(s.value,b.state),v(i.value,{...b.state})),b.message&&(x.value=b.message,w.value=b.message_link??null),DS(b.alerts,b.message),b.download_url&&typeof document<"u"){const V=document.createElement("a");V.href=b.download_url,V.rel="noopener",document.body.appendChild(V),V.click(),V.remove()}return typeof b.redirect_url=="string"&&b.redirect_url!==""?g.value=b.redirect_url:b.refresh&&await L(t.value,p.value).catch(()=>{}),b}catch($){throw $ instanceof Qe?u.value={...$.fields}:($ instanceof ve||$ instanceof Error)&&(f.value=$),$}finally{k.value=!1}}function E(F,H){if(s.value[F]=H,u.value[F]){const $={...u.value};delete $[F],u.value=$}}function z(F){u.value={...F}}function q(){u.value={}}return{slug:t,name:a,description:o,layout:r,commandBar:l,permissions:c,etag:d,query:p,state:s,initial:i,errors:u,loading:y,running:k,error:f,lastMessage:x,lastMessageLink:w,pendingRedirect:g,hasError:M,reset:_,load:L,runMethod:B,setField:E,setErrors:z,clearErrors:q}}),hB=new Set(["done","error","expired","cancelled"]);function pB(t){if(typeof t=="string")return t===""?null:{message:t};if(t&&typeof t=="object"){const a=t;return typeof a.message!="string"||a.message===""?null:{message:a.message,title:typeof a.title=="string"?a.title:void 0,confirmLabel:typeof a.confirmLabel=="string"?a.confirmLabel:void 0,cancelLabel:typeof a.cancelLabel=="string"?a.cancelLabel:void 0}}return null}function Sw(t){if(!t||typeof t!="object")return null;const a=t,o=String(a.name??a.key??""),r=String(a.label??o);if(o===""||r==="")return null;const l=a.attributes&&typeof a.attributes=="object"?a.attributes:{};return{name:o,label:r,type:typeof a.type=="string"?a.type:"button",icon:typeof a.icon=="string"?a.icon:null,confirm:pB(a.confirm),primary:!!a.primary,destructive:!!a.destructive,position:Array.isArray(a.position)?a.position:[],attributes:l,items:Lc(a.items)}}function Lc(t){return Array.isArray(t)?t.map(Sw).filter(a=>a!==null):[]}function Re(t){return t.type==="bulk"?!0:t.attributes.standalone===!0?!1:t.position.includes("row")||t.position.includes("bulk")}function lb(t,a){const o=Number(t.attributes.requiresAtLeast??0),r=t.attributes.requiresAtMost;return!(Number.isFinite(o)&&a<o||r!=null&&a>Number(r))}function yB(t){const a=String(t??"").toLowerCase();return a==="sm"||a==="small"?"sm":a==="lg"||a==="large"?"lg":a==="xl"||a==="extra"?"xl":a==="full"||a==="fullscreen"?"full":"md"}function aw(t,a){if(!t||!a.startsWith("/")||a.startsWith("//"))return null;const o=(t.options.history.base??"").replace(/\/+$/,"");if(o!==""){if(a===o)return"/";if(a.startsWith(`${o}/`)||a.startsWith(`${o}?`))return a.slice(o.length)}const r=t.resolve(a);return r.matched.length>0&&!r.matched.some(c=>c.path.includes("pathMatch"))?a:null}function kB(t){return new Promise(a=>setTimeout(a,t))}function X9(t,a){return t instanceof Qe?t.firstFieldMessage()??t.message??a:t instanceof Error&&t.message?t.message:a}function mB(t){const a={};for(const[o,r]of Object.entries(t.fields))a[o.startsWith("payload.")?o.slice(8):o]=r;return a}function H9(t){let a;try{a=le.useRouter()}catch{a=void 0}const o=e.ref(!1),r=e.reactive({open:!1,title:"",message:"",confirmLabel:"",cancelLabel:"",destructive:!1});let l=null;function c(v,C=!1){const I=typeof v=="string"?{message:v}:v;return l?.(!1),r.title=I.title??h.trSafe("Подтверждение"),r.message=I.message,r.confirmLabel=I.confirmLabel??h.trSafe("Подтвердить"),r.cancelLabel=I.cancelLabel??h.trSafe("Отмена"),r.destructive=C,r.open=!0,new Promise(_=>{l=_})}function d(v){r.open=!1;const C=l;l=null,C?.(v)}const s=e.reactive({open:!1,seq:0,action:null,title:"",submitLabel:"",size:"md",fields:[],values:{},errors:{},submitting:!1,options:void 0});function i(v,C){const I=Array.isArray(v.attributes.fields)?v.attributes.fields:[],_={};for(const L of I)typeof L.name=="string"&&L.defaultValue!==void 0&&L.defaultValue!==null&&(_[L.name]=L.defaultValue);s.action=v,s.title=typeof v.attributes.modalTitle=="string"?v.attributes.modalTitle:v.label,s.submitLabel=typeof v.attributes.submitLabel=="string"?v.attributes.submitLabel:h.trSafe("Выполнить"),s.size=yB(v.attributes.modalSize),s.fields=I,s.values=_,s.errors={},s.submitting=!1,s.options=C,s.seq++,s.open=!0}function u(){s.open=!1,s.action=null,s.options=void 0}async function p(){const v=s.action;if(!v||s.submitting)return;const C=s.options;s.submitting=!0,s.errors={},o.value=!0;try{const I=await t.execute(v,{...s.values},C);u(),await t.onSuccess?.(v,I,C)}catch(I){I instanceof Qe?(s.errors=mB(I),(Object.keys(s.errors).filter(L=>!s.fields.some(B=>B.name===L)).length>0||Object.keys(s.errors).length===0)&&K.error(X9(I,h.trSafe("Проверьте заполнение формы.")))):g(v,I)}finally{s.submitting=!1,o.value=!1}}const y=e.reactive({open:!1,label:"",status:"",progress:0,error:null,finished:!1});let k=!1;e.getCurrentScope()&&e.onScopeDispose(()=>{k=!0});function f(){y.open=!1}async function x(v,C){const I=v.attributes.handler;if(!I?.entity||!I.method)return K.error(h.tRaw("Действие «:action» не настроено.",{action:v.label})),!1;const _={...v.attributes.params??{}};C?.ids?_.ids=C.ids:t.ids&&Re(v)&&(_.ids=t.ids());const L={entity:I.entity,method:I.method,params:_};typeof v.attributes.callback=="string"&&(L.callback=v.attributes.callback);const B=Math.max(1,Number(v.attributes.pollInterval??2)||2)*1e3,E=ne();Object.assign(y,{open:!0,label:v.label,status:"new",progress:0,error:null,finished:!1});let z;try{const q=await E.post("/delayed/run",L);for(z={status:q.status,progress:0};!hB.has(z.status);){if(await kB(B),k)return!1;z=await E.get(`/delayed/status?uuid=${encodeURIComponent(q.uuid)}`),y.status=z.status,y.progress=Math.max(0,Math.min(100,Number(z.progress??0)))}}catch(q){return y.finished=!0,y.error=X9(q,h.trSafe("Не удалось выполнить действие.")),K.error(h.tRaw("Не удалось выполнить действие «:action».",{action:v.label})),!1}if(y.finished=!0,z.status==="done"){y.progress=100;const q=z.data,F=q&&typeof q=="object"&&typeof q.message=="string"?q.message:h.tRaw("Действие «:action» выполнено.",{action:v.label});return K.success(F),await t.refresh?.(),!0}return y.error=z.error??h.trSafe("Процесс завершился с ошибкой."),K.error(h.tRaw("Действие «:action» завершилось с ошибкой: :error",{action:v.label,error:y.error})),!1}function w(v){const C=typeof v.attributes.href=="string"?v.attributes.href:"";if(C==="")return;const I=typeof v.attributes.target=="string"?v.attributes.target:"_self",_=v.attributes.download;if(_!==void 0&&_!==!1&&typeof document<"u"){const B=document.createElement("a");B.href=C,B.download=typeof _=="string"?_:"",B.rel="noopener",document.body.appendChild(B),B.click(),B.remove();return}if(I!=="_self"){window.open(C,I,"noopener");return}const L=aw(a,C);if(L!==null&&a){a.push(L).catch(()=>{});return}window.location.assign(C)}function g(v,C){if(t.onError){t.onError(v,C);return}K.error(X9(C,h.tRaw("Не удалось выполнить действие «:action».",{action:v.label})))}async function M(v,C){if(v.type==="dropdown")return!1;const I=C?.ids??t.ids?.();if(I&&Re(v)&&!lb(v,I.length))return K.warning(h.tRaw("Действие «:action» недоступно для выбранного числа записей.",{action:v.label})),!1;if(v.confirm&&!await c(v.confirm,v.destructive))return!1;if(v.type==="link")return w(v),!0;if(v.type==="modal")return i(v,C),!0;if(v.type==="async")return x(v,C);o.value=!0;try{const _=await t.execute(v,void 0,C);return await t.onSuccess?.(v,_,C),!0}catch(_){return g(v,_),!1}finally{o.value=!1}}return{run:M,running:o,confirm:c,confirmState:r,resolveConfirm:d,modalState:s,submitModal:p,closeModal:u,asyncState:y,closeAsync:f}}const mr=e.defineComponent({__name:"AdminActionMenuItems",props:{actions:{},isDisabled:{type:Function,default:()=>!1}},emits:["run"],setup(t,{emit:a}){const o=a;return(r,l)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.actions,c=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:c.name},[c.type==="dropdown"?(e.openBlock(),e.createBlock(e.unref(m.UidSubMenu),{key:0,label:c.label,icon:e.unref(be)(c.icon)??void 0,"data-testid":`action-${c.name}`},{default:e.withCtx(()=>[e.createVNode(mr,{actions:c.items,"is-disabled":t.isDisabled,onRun:l[0]||(l[0]=d=>o("run",d))},null,8,["actions","is-disabled"])]),_:2},1032,["label","icon","data-testid"])):(e.openBlock(),e.createBlock(e.unref(m.UidMenuItem),{key:1,variant:c.destructive?"danger":"default",icon:e.unref(be)(c.icon)??void 0,disabled:t.isDisabled(c),"data-testid":`action-${c.name}`,onClick:d=>o("run",c)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.label),1)]),_:2},1032,["variant","icon","disabled","data-testid","onClick"]))],64))),128))}}),Lw=e.defineComponent({__name:"AdminActionButton",props:{action:{},size:{default:"md"},variant:{default:void 0},defaultVariant:{default:"secondary"},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},isDisabled:{type:Function,default:()=>!1}},emits:["run"],setup(t,{emit:a}){const o=t,r=a,l=e.computed(()=>o.variant?o.variant:o.action.destructive?"danger":o.action.primary?"primary":o.defaultVariant),c=e.computed(()=>be(o.action.icon));return(d,s)=>t.action.type==="dropdown"?(e.openBlock(),e.createBlock(e.unref(m.UidMenu),{key:0},{trigger:e.withCtx(()=>[e.createVNode(e.unref(m.UidButton),{size:t.size,variant:l.value,disabled:t.disabled,icon:e.unref($e),"icon-position":"end","data-testid":`action-${t.action.name}`},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.action.label),1)]),_:1},8,["size","variant","disabled","icon","data-testid"])]),default:e.withCtx(()=>[e.createVNode(mr,{actions:t.action.items,"is-disabled":t.isDisabled,onRun:s[0]||(s[0]=i=>r("run",i))},null,8,["actions","is-disabled"])]),_:1})):(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:1,size:t.size,variant:l.value,disabled:t.disabled||t.isDisabled(t.action),loading:t.loading,icon:c.value??void 0,"data-testid":`action-${t.action.name}`,onClick:s[1]||(s[1]=i=>r("run",t.action))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.action.label),1)]),_:1},8,["size","variant","disabled","loading","icon","data-testid"]))}}),br=$9(),Ir=$9(),cb=br.register,Bw=br.get,ib=br.has,fB=br.list,db=Ir.register,L9=Ir.get,sb=Ir.has,vB=Ir.list;function gB(){br.clear(),Ir.clear()}function MB(t){t.fields&&br.registerBundle(t.fields),t.layouts&&Ir.registerBundle(t.layouts)}const _w=e.defineComponent({__name:"UnknownField",props:{type:{},name:{}},setup(t){return(a,o)=>(e.openBlock(),e.createBlock(e.unref(m.UidAlert),{variant:"warning"},{title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.tRaw)("Неизвестный тип поля: :type",{type:t.type})),1)]),default:e.withCtx(()=>[t.name?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("code",null,e.toDisplayString(t.name),1),e.createTextVNode(" — "+e.toDisplayString(e.unref(h.trSafe)("зарегистрируйте компонент поля через"))+" ",1),e.createElementVNode("code",null,"registerField('"+e.toDisplayString(t.type)+"', YourComponent)",1),o[0]||(o[0]=e.createTextVNode(". ",-1))],64)):e.createCommentVNode("",!0)]),_:1}))}}),fr=e.defineComponent({__name:"FieldRenderer",props:{node:{}},setup(t){const a=t,o=e.computed(()=>Bw(a.node.type)),r=te.tryUseFormState(),l=e.computed(()=>{const s=r?.mode;return s?a.node.visibility?.[s]!==!1:!0}),c=e.computed(()=>{const s=a.node.reactive;if(!s||typeof s!="object"||!r)return!0;for(const[i,u]of Object.entries(s)){const p=r.getField(i);if(Array.isArray(u)){if(!u.includes(p))return!1}else if(p!==u)return!1}return!0}),d=e.computed(()=>{const{type:s,attributes:i,...u}=a.node;return{...u,...i??{}}});return(s,i)=>l.value&&c.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[o.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(o.value),e.normalizeProps(e.mergeProps({key:0},d.value)),null,16)):(e.openBlock(),e.createBlock(_w,{key:1,type:t.node.type,name:t.node.name},null,8,["type","name"]))],64)):e.createCommentVNode("",!0)}}),Ie=e.defineComponent({__name:"LayoutRenderer",props:{node:{}},setup(t){const a=t,o=e.computed(()=>{if(a.node.kind==="field")return{kind:"field"};if(a.node.kind==="layout"){const i=L9(a.node.type);return i?{kind:"layout",component:i}:{kind:"unknown"}}const s=L9(a.node.type);return s?{kind:"layout",component:s}:Bw(a.node.type)?{kind:"field"}:{kind:"unknown"}}),r=["children","props"];function l(s){const i=s?.props;return Array.isArray(i)?new Set(i):i&&typeof i=="object"?new Set(Object.keys(i)):new Set}const c=e.computed(()=>{const{type:s,kind:i,...u}=a.node,p=o.value,y=p.kind==="layout"?l(p.component):new Set;for(const k of r)k in u&&!y.has(k)&&delete u[k];return u}),d=e.computed(()=>a.node);return(s,i)=>o.value.kind==="layout"&&o.value.component?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(o.value.component),e.normalizeProps(e.mergeProps({key:0},c.value)),null,16)):o.value.kind==="field"?(e.openBlock(),e.createBlock(fr,{key:1,node:d.value},null,8,["node"])):(e.openBlock(),e.createBlock(_w,{key:2,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}),wB={class:"admin-action-form","data-testid":"action-form"},xB=e.defineComponent({__name:"AdminActionForm",props:{fields:{},values:{},errors:{}},setup(t){const a=t,o=te.provideFormState(a.values,a.errors);return e.watch(()=>a.errors,r=>o.setErrors({...r}),{deep:!0}),(r,l)=>(e.openBlock(),e.createElementBlock("div",wB,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.fields,(c,d)=>(e.openBlock(),e.createBlock(Ie,{key:String(c.name??d),node:c},null,8,["node"]))),128))]))}}),bB={class:"admin-action-confirm__message","data-testid":"action-confirm-message"},IB={class:"admin-action-async","data-testid":"action-async"},CB={key:1,class:"admin-action-async__hint"},P9=e.defineComponent({__name:"AdminActionDialogs",props:{runner:{}},setup(t){const a=t,o=e.computed({get:()=>a.runner.confirmState.open,set:d=>{d||a.runner.resolveConfirm(!1)}}),r=e.computed({get:()=>a.runner.modalState.open,set:d=>{d||a.runner.closeModal()}}),l=e.computed({get:()=>a.runner.asyncState.open,set:d=>{d||a.runner.closeAsync()}}),c=e.computed(()=>{const d=a.runner.asyncState;return d.error?h.trSafe("Ошибка"):d.finished?h.trSafe("Готово"):d.status==="new"?h.trSafe("В очереди…"):h.trSafe("Выполняется…")});return(d,s)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(e.unref(m.UidModal),{modelValue:o.value,"onUpdate:modelValue":s[2]||(s[2]=i=>o.value=i),size:"sm",title:t.runner.confirmState.title},{footer:e.withCtx(()=>[e.createVNode(e.unref(m.UidButton),{variant:"ghost","data-testid":"action-confirm-cancel",onClick:s[0]||(s[0]=i=>t.runner.resolveConfirm(!1))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.runner.confirmState.cancelLabel),1)]),_:1}),e.createVNode(e.unref(m.UidButton),{variant:t.runner.confirmState.destructive?"danger":"primary","data-testid":"action-confirm-ok",onClick:s[1]||(s[1]=i=>t.runner.resolveConfirm(!0))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.runner.confirmState.confirmLabel),1)]),_:1},8,["variant"])]),default:e.withCtx(()=>[e.createElementVNode("p",bB,e.toDisplayString(t.runner.confirmState.message),1)]),_:1},8,["modelValue","title"]),e.createVNode(e.unref(m.UidModal),{modelValue:r.value,"onUpdate:modelValue":s[6]||(s[6]=i=>r.value=i),size:t.runner.modalState.size,title:t.runner.modalState.title,"close-on-overlay":!1},{footer:e.withCtx(()=>[e.createVNode(e.unref(m.UidButton),{variant:"ghost","data-testid":"action-modal-cancel",onClick:s[4]||(s[4]=i=>t.runner.closeModal())},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Отмена")),1)]),_:1}),e.createVNode(e.unref(m.UidButton),{variant:t.runner.modalState.action?.destructive?"danger":"primary",loading:t.runner.modalState.submitting,"data-testid":"action-modal-submit",onClick:s[5]||(s[5]=i=>t.runner.submitModal())},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.runner.modalState.submitLabel),1)]),_:1},8,["variant","loading"])]),default:e.withCtx(()=>[e.createElementVNode("form",{class:"admin-action-modal","data-testid":"action-modal",onSubmit:s[3]||(s[3]=e.withModifiers(i=>t.runner.submitModal(),["prevent"]))},[(e.openBlock(),e.createBlock(xB,{key:t.runner.modalState.seq,fields:t.runner.modalState.fields,values:t.runner.modalState.values,errors:t.runner.modalState.errors},null,8,["fields","values","errors"]))],32)]),_:1},8,["modelValue","size","title"]),e.createVNode(e.unref(m.UidModal),{modelValue:l.value,"onUpdate:modelValue":s[8]||(s[8]=i=>l.value=i),size:"sm",title:t.runner.asyncState.label},{footer:e.withCtx(()=>[e.createVNode(e.unref(m.UidButton),{variant:"secondary","data-testid":"action-async-close",onClick:s[7]||(s[7]=i=>t.runner.closeAsync())},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Закрыть")),1)]),_:1})]),default:e.withCtx(()=>[e.createElementVNode("div",IB,[e.createVNode(e.unref(m.UidProgress),{value:t.runner.asyncState.progress,max:100,label:c.value,variant:t.runner.asyncState.error?"danger":t.runner.asyncState.finished?"success":"default","show-value":""},null,8,["value","label","variant"]),t.runner.asyncState.error?(e.openBlock(),e.createBlock(e.unref(m.UidAlert),{key:0,variant:"danger"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.runner.asyncState.error),1)]),_:1})):t.runner.asyncState.finished?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("p",CB,e.toDisplayString(e.unref(h.trSafe)("Окно можно закрыть — процесс продолжится, а результат появится во всплывающем сообщении.")),1))])]),_:1},8,["modelValue","title"])],64))}}),Vw=Symbol("admin.infolist-record");function Bc(t){e.provide(Vw,t)}function SB(){const t=e.inject(Vw);if(!t)throw new Error("useRecord() called outside of provideRecord() scope");return t}function Ve(){return e.inject(Vw,null)}const ub=Symbol("admin.screen-context");function hb(t){const a=e.reactive(new Set),o=t.confirm??(l=>Pe(l)),r={isOpen:l=>a.has(l),open:l=>{a.add(l)},close:l=>{a.delete(l)},running:t.running,runMethod:t.runMethod,async dispatch(l){const c=l.attributes?.opens;if((typeof c!="string"||c==="")&&t.run)return t.run(l);if(l.confirm?.message&&!await o(l.confirm))return!1;if(typeof c=="string"&&c!=="")return r.open(c),!0;const d=l.attributes?.method;return typeof d=="string"&&d!==""?t.runMethod(d):!1}};return r}function pb(t){const a=hb(t);return e.provide(ub,a),a}function qw(){return e.inject(ub,null)}const yb=Symbol("admin.listener-endpoint");function Aw(t){e.provide(yb,t)}function kb(){return e.inject(yb,null)}const LB={class:"admin-page admin-screen-page"},BB={class:"admin-page__hd"},_B={class:"admin-page__title-wrap"},VB={class:"admin-page__title"},qB={key:0,class:"admin-screen-page__description"},AB={key:0,class:"admin-page__actions"},zB=["href"],EB={key:2,class:"admin-screen-page__loading"},mb=e.defineComponent({__name:"ScreenPage",props:{slug:{default:null}},setup(t){const a=t,o=le.useRoute(),r=le.useRouter(),l=uB(),c=e.computed(()=>a.slug?a.slug:String(o.params.slug??o.meta?.slug??"")),d=e.computed(()=>{const g={};for(const[M,v]of Object.entries(o.query??{}))if(Array.isArray(v)){const C=v.filter(I=>typeof I=="string");C.length>0&&(g[M]=C)}else typeof v=="string"&&(g[M]=v);return g}),s=e.computed(()=>JSON.stringify(d.value));function i(g){return l.load(g,d.value)}const u=te.provideFormState(l.state,l.errors);Bc(l.state),Aw({url:()=>`/${c.value}/listener`});const p=e.computed(()=>Lc(l.commandBar)),y=H9({execute(g,M){const v=g.attributes.method;return typeof v!="string"||v===""?Promise.reject(new Error(`Action \`${g.name}\` has no method`)):l.runMethod(v,M?{...l.state,...M}:void 0)},onError:(g,M)=>{l.hasError||Kx(M)},refresh:async()=>{c.value&&await i(c.value).catch(()=>{})}}),k=pb({running:e.computed(()=>l.running),async runMethod(g){try{return await l.runMethod(g),!0}catch{return!1}},confirm:g=>y.confirm(g),run:async g=>{const M=Sw(g);return M?y.run(M):!1}});e.watch(()=>l.errors,g=>{u.setErrors({...g})},{deep:!0});const f=e.computed(()=>l.layout.filter(g=>typeof g.type=="string").map(g=>g)),x=e.computed(()=>!l.loading&&c.value!==""),w=e.computed(()=>{const g=l.lastMessageLink?.url;return g?aw(r,g):null});return e.onMounted(async()=>{c.value&&await i(c.value).catch(()=>{})}),e.watch(()=>l.pendingRedirect,g=>{if(!g)return;l.pendingRedirect=null;const M=aw(r,g);M!==null?r.push(M):typeof window<"u"&&window.location.assign(g)}),e.watch(()=>[c.value,s.value],async([g])=>{g?await i(g).catch(()=>{}):l.reset()}),(g,M)=>{const v=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("section",LB,[e.createElementVNode("header",BB,[e.createElementVNode("div",_B,[e.createElementVNode("h1",VB,e.toDisplayString(e.unref(l).name||c.value),1),e.unref(l).description?(e.openBlock(),e.createElementBlock("p",qB,e.toDisplayString(e.unref(l).description),1)):e.createCommentVNode("",!0)]),p.value.length>0?(e.openBlock(),e.createElementBlock("div",AB,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,C=>(e.openBlock(),e.createBlock(Lw,{key:C.name,action:C,loading:e.unref(l).running,disabled:e.unref(l).running||e.unref(l).loading,onRun:e.unref(k).dispatch},null,8,["action","loading","disabled","onRun"]))),128))])):e.createCommentVNode("",!0)]),e.unref(l).hasError?(e.openBlock(),e.createBlock(e.unref(m.UidAlert),{key:0,variant:"danger",class:"admin-screen-page__alert",role:"alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(l).error?.message??e.unref(h.trSafe)("Не удалось выполнить действие")),1)]),_:1})):e.unref(l).lastMessage?(e.openBlock(),e.createBlock(e.unref(m.UidAlert),{key:1,variant:"success",class:"admin-screen-page__alert",role:"status"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(l).lastMessage)+" ",1),w.value!==null?(e.openBlock(),e.createBlock(v,{key:0,class:"admin-screen-page__alert-link",to:w.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(l).lastMessageLink.label),1)]),_:1},8,["to"])):e.unref(l).lastMessageLink?(e.openBlock(),e.createElementBlock("a",{key:1,class:"admin-screen-page__alert-link",href:e.unref(l).lastMessageLink.url,target:"_blank",rel:"noopener"},e.toDisplayString(e.unref(l).lastMessageLink.label),9,zB)):e.createCommentVNode("",!0)]),_:1})):e.createCommentVNode("",!0),e.unref(l).loading?(e.openBlock(),e.createElementBlock("div",EB,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(4,C=>e.createVNode(e.unref(m.UidSkeleton),{key:C,height:"40px"})),64))])):x.value?(e.openBlock(),e.createBlock(e.unref(m.UidCard),{key:3,padding:"md",class:"admin-screen-page__body"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,(C,I)=>(e.openBlock(),e.createBlock(Ie,{key:I,node:C},null,8,["node"]))),128))]),_:1})):e.createCommentVNode("",!0),e.createVNode(P9,{runner:e.unref(y)},null,8,["runner"])])}}}),NB={class:"admin-auth-card__row"},DB=["href"],FB={key:1,class:"admin-auth-demo","data-testid":"login-demo"},$B={class:"admin-auth-demo__title"},HB={class:"admin-auth-demo__label"},PB={key:0,class:"admin-auth-demo__description"},TB={key:2,style:{"text-align":"center","font-size":"var(--uid-font-size-xs)",color:"var(--uid-text-secondary)","padding-top":"4px"}},UB=["href"],fb=e.defineComponent({__name:"LoginForm",props:{forgotUrl:{default:null},ssoLinkLabel:{default:null},ssoUrl:{default:null}},emits:["success"],setup(t,{emit:a}){const o=a,r=ye(),l=e.ref(""),c=e.ref(""),d=e.ref(!1),s=e.ref(!1),i=e.ref(null),u=e.ref({}),p=e.computed(()=>u.value.email?.[0]),y=e.computed(()=>u.value.password?.[0]),k=e.computed(()=>r.demo?.accounts??[]);function f(w){l.value=w.email,c.value=w.password,x()}async function x(){if(!s.value){s.value=!0,i.value=null,u.value={};try{const w=await r.login({email:l.value,password:c.value,remember:d.value});o("success",w)}catch(w){(w instanceof ve?w.status:w?.response?.status)===429?i.value=h.trSafe("Слишком много попыток входа. Подождите минуту и попробуйте снова"):w instanceof Qe?(u.value=w.fields,i.value=w.firstFieldMessage()):w instanceof Ic?i.value=h.trSafe("Нет соединения с сервером"):w instanceof ve?i.value=w.message||h.trSafe("Не удалось войти"):i.value=w.message}finally{s.value=!1}}}return(w,g)=>(e.openBlock(),e.createElementBlock("form",{class:"admin-auth-card__bd",novalidate:"",onSubmit:e.withModifiers(x,["prevent"])},[i.value?(e.openBlock(),e.createBlock(e.unref(m.UidAlert),{key:0,variant:"danger",class:"admin-auth-card__alert",role:"alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(m.UidInput),{modelValue:l.value,"onUpdate:modelValue":g[0]||(g[0]=M=>l.value=M),type:"email",label:"Email",placeholder:"you@company.com",autocomplete:"username",required:!0,disabled:s.value,error:p.value,name:"email","data-testid":"login-email"},null,8,["modelValue","disabled","error"]),e.createVNode(e.unref(m.UidInput),{modelValue:c.value,"onUpdate:modelValue":g[1]||(g[1]=M=>c.value=M),type:"password",label:e.unref(h.trSafe)("Пароль"),autocomplete:"current-password",required:!0,disabled:s.value,error:y.value,name:"password","data-testid":"login-password"},null,8,["modelValue","label","disabled","error"]),e.createElementVNode("div",NB,[e.createVNode(e.unref(m.UidCheckbox),{modelValue:d.value,"onUpdate:modelValue":g[2]||(g[2]=M=>d.value=M),disabled:s.value,label:e.unref(h.trSafe)("Запомнить меня")},null,8,["modelValue","disabled","label"]),t.forgotUrl?(e.openBlock(),e.createElementBlock("a",{key:0,href:t.forgotUrl,class:"admin-auth-card__link"},e.toDisplayString(e.unref(h.trSafe)("Забыли пароль?")),9,DB)):e.createCommentVNode("",!0)]),e.createVNode(e.unref(m.UidButton),{type:"submit",variant:"primary",size:"lg",loading:s.value,disabled:s.value,"data-testid":"login-submit"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value?e.unref(h.trSafe)("Вход…"):e.unref(h.trSafe)("Войти")),1)]),_:1},8,["loading","disabled"]),k.value.length>0?(e.openBlock(),e.createElementBlock("div",FB,[e.createElementVNode("div",$B,e.toDisplayString(e.unref(h.trSafe)("Демо-доступ")),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,M=>(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:M.email,type:"button",variant:"secondary",class:"admin-auth-demo__account",disabled:s.value,"data-testid":`login-demo-${M.email}`,onClick:v=>f(M)},{default:e.withCtx(()=>[e.createElementVNode("span",HB,e.toDisplayString(e.unref(h.tRaw)("Войти как :name",{name:M.label})),1),M.description?(e.openBlock(),e.createElementBlock("span",PB,e.toDisplayString(M.description),1)):e.createCommentVNode("",!0)]),_:2},1032,["disabled","data-testid","onClick"]))),128))])):e.createCommentVNode("",!0),t.ssoLinkLabel&&t.ssoUrl?(e.openBlock(),e.createElementBlock("div",TB,[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("или войдите через"))+" ",1),e.createElementVNode("a",{href:t.ssoUrl,class:"admin-auth-card__link"},e.toDisplayString(t.ssoLinkLabel),9,UB)])):e.createCommentVNode("",!0)],32))}}),RB=["value","disabled","aria-label","onInput","onKeydown"],jB={class:"admin-auth-card__row"},vb=e.defineComponent({__name:"TwoFactorForm",emits:["success","cancel"],setup(t,{emit:a}){const o=a,r=ye(),l=e.ref("totp"),c=e.ref(["","","","","",""]),d=e.ref(""),s=e.ref([]),i=e.ref(!1),u=e.ref(null),p=e.ref(null),y=e.computed(()=>c.value.join("")),k=e.computed(()=>l.value==="totp"?y.value.length===6:d.value.trim().length>0);function f(I,_){_ instanceof HTMLInputElement&&(s.value[I]=_)}function x(I,_){const L=_.target,B=L.value.replace(/\D/g,"").slice(-1);c.value[I]=B,L.value=B,B&&I<c.value.length-1&&e.nextTick(()=>s.value[I+1]?.focus()),y.value.length===c.value.length&&M()}function w(I,_){_.key==="Backspace"&&!c.value[I]&&I>0?e.nextTick(()=>s.value[I-1]?.focus()):_.key==="ArrowLeft"&&I>0?(s.value[I-1]?.focus(),_.preventDefault()):_.key==="ArrowRight"&&I<c.value.length-1&&(s.value[I+1]?.focus(),_.preventDefault())}function g(I){const L=(I.clipboardData?.getData("text")??"").replace(/\D/g,"").slice(0,c.value.length);if(L.length!==0){I.preventDefault();for(let B=0;B<c.value.length;B++)c.value[B]=L[B]??"";e.nextTick(()=>{s.value[Math.min(L.length,c.value.length-1)]?.focus(),L.length===c.value.length&&M()})}}async function M(){if(!(i.value||!k.value)){i.value=!0,u.value=null;try{if(l.value==="totp")await r.twoFactorChallenge(y.value);else{const I=await r.twoFactorRecovery(d.value.trim());p.value=I.remaining}o("success")}catch(I){I instanceof Qe?u.value=I.firstFieldMessage()??h.trSafe("Неверный код"):I instanceof Ic?u.value=h.trSafe("Нет соединения с сервером"):I instanceof ve?u.value=I.message||h.trSafe("Не удалось проверить код"):u.value=I.message}finally{i.value=!1}}}function v(){r.cancelChallenge(),o("cancel")}function C(){l.value=l.value==="totp"?"recovery":"totp",u.value=null}return(I,_)=>(e.openBlock(),e.createElementBlock("form",{class:"admin-auth-card__bd",novalidate:"",onSubmit:e.withModifiers(M,["prevent"])},[u.value?(e.openBlock(),e.createBlock(e.unref(m.UidAlert),{key:0,variant:"danger",class:"admin-auth-card__alert",role:"alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.value),1)]),_:1})):e.createCommentVNode("",!0),p.value!==null?(e.openBlock(),e.createBlock(e.unref(m.UidAlert),{key:1,variant:"info",class:"admin-auth-card__alert",role:"status"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.tRaw)("Использован код восстановления. Осталось: :count",{count:p.value})),1)]),_:1})):e.createCommentVNode("",!0),l.value==="totp"?(e.openBlock(),e.createElementBlock("div",{key:2,class:"admin-code-input",onPaste:g},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(L,B)=>(e.openBlock(),e.createElementBlock("input",{key:B,ref_for:!0,ref:E=>f(B,E),value:c.value[B],type:"text",inputmode:"numeric",autocomplete:"one-time-code",maxlength:"1",disabled:i.value,"aria-label":e.unref(h.tRaw)("Цифра :n",{n:B+1}),onInput:E=>x(B,E),onKeydown:E=>w(B,E)},null,40,RB))),128))],32)):(e.openBlock(),e.createBlock(e.unref(m.UidInput),{key:3,modelValue:d.value,"onUpdate:modelValue":_[0]||(_[0]=L=>d.value=L),type:"text",label:e.unref(h.trSafe)("Recovery-код"),autocomplete:"one-time-code",disabled:i.value,name:"recovery-code"},null,8,["modelValue","label","disabled"])),e.createVNode(e.unref(m.UidButton),{type:"submit",variant:"primary",size:"lg",loading:i.value,disabled:i.value||!k.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value?e.unref(h.trSafe)("Проверка…"):e.unref(h.trSafe)("Подтвердить")),1)]),_:1},8,["loading","disabled"]),e.createElementVNode("div",jB,[e.createElementVNode("button",{type:"button",class:"admin-auth-card__link",onClick:C},[l.value==="totp"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Использовать recovery-код")),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Вернуться к коду из приложения")),1)],64))]),e.createElementVNode("button",{type:"button",class:"admin-auth-card__link",onClick:v},e.toDisplayString(e.unref(h.trSafe)("Отмена")),1)])],32))}}),OB={class:"admin-auth-page"},WB={key:0,class:"admin-auth-page__corner"},ZB={class:"admin-auth-card__hd"},GB=["src","alt"],KB={key:1,"aria-hidden":"true"},XB={key:2},JB={class:"admin-auth-card__title"},YB={class:"admin-auth-card__sub"},gb=e.defineComponent({__name:"LoginPage",props:{brandName:{default:void 0},brandMark:{default:void 0},brandLogo:{default:void 0},homeRouteName:{default:"admin.home"},redirectQueryKey:{default:"redirect"},forgotUrl:{default:null},ssoLinkLabel:{default:null},ssoUrl:{default:null},showCornerActions:{type:Boolean,default:!0}},setup(t){const a=t,o=ye(),r=le.useRouter(),l=le.useRoute(),c=Sc(),d=e.computed(()=>a.brandName??c.name??"Laravel Admin"),s=e.computed(()=>a.brandLogo??c.logo??null),i=e.computed(()=>a.brandMark??c.mark??null);async function u(){const p=l.query[a.redirectQueryKey];if(typeof p=="string"&&p.length>0&&p.startsWith("/")){await r.push(p);return}await r.push({name:a.homeRouteName})}return e.watch(()=>o.isAuthenticated,p=>{p&&u()}),e.onMounted(()=>{o.isAuthenticated&&u()}),(p,y)=>(e.openBlock(),e.createElementBlock("div",OB,[t.showCornerActions?(e.openBlock(),e.createElementBlock("div",WB,[e.createVNode(mw),e.createVNode(fw)])):e.createCommentVNode("",!0),e.createVNode(e.unref(m.UidCard),{class:e.normalizeClass(["admin-auth-card",e.unref(o).isChallengePending?"admin-auth-card--wide":""]),padding:"none"},{default:e.withCtx(()=>[e.createElementVNode("div",ZB,[e.createElementVNode("div",{class:e.normalizeClass(["admin-auth-card__logo",e.unref(o).isChallengePending?"admin-auth-card__logo--accent":""])},[s.value&&!e.unref(o).isChallengePending?(e.openBlock(),e.createElementBlock("img",{key:0,src:s.value,alt:d.value},null,8,GB)):e.unref(o).isChallengePending?(e.openBlock(),e.createElementBlock("span",KB,"🛡")):i.value?(e.openBlock(),e.createElementBlock("span",XB,e.toDisplayString(i.value),1)):(e.openBlock(),e.createBlock(F9,{key:3,size:40}))],2),e.createElementVNode("div",JB,[e.unref(o).isChallengePending?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Двухфакторная проверка")),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(d.value),1)],64))]),e.createElementVNode("div",YB,[e.unref(o).isChallengePending?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Введите 6-значный код из приложения-аутентификатора")),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Войдите, чтобы продолжить работу")),1)],64))])]),e.unref(o).isChallengePending?(e.openBlock(),e.createBlock(vb,{key:0,onSuccess:y[0]||(y[0]=()=>{}),onCancel:y[1]||(y[1]=()=>{})})):(e.openBlock(),e.createBlock(fb,{key:1,"forgot-url":t.forgotUrl,"sso-link-label":t.ssoLinkLabel,"sso-url":t.ssoUrl,onSuccess:y[2]||(y[2]=()=>{})},null,8,["forgot-url","sso-link-label","sso-url"]))]),_:1},8,["class"])]))}}),QB={class:"admin-auth-page"},e_={class:"admin-auth-card__hd"},t_={class:"admin-auth-card__logo"},a_=["src","alt"],n_={key:1},o_={class:"admin-auth-card__title"},r_={class:"admin-auth-card__sub"},l_={class:"admin-auth-card__body"},c_=e.defineComponent({__name:"ForgotPasswordPage",props:{brandName:{default:"Laravel Admin"},loginRouteName:{default:"admin.login"}},setup(t){const a=Sc(),o=le.useRouter(),r=e.ref(""),l=e.ref(!1),c=e.ref(!1);async function d(){if(r.value.trim()===""){K.error(h.trSafe("Введите email."));return}c.value=!0;try{const{getAdminClient:s}=await Promise.resolve().then(()=>ue);await s().post("/auth/forgotPassword",{email:r.value.trim()}),l.value=!0}catch{l.value=!0}finally{c.value=!1}}return(s,i)=>(e.openBlock(),e.createElementBlock("div",QB,[e.createVNode(e.unref(m.UidCard),{padding:"none",class:"admin-auth-card"},{default:e.withCtx(()=>[e.createElementVNode("div",e_,[e.createElementVNode("div",t_,[e.unref(a).logo?(e.openBlock(),e.createElementBlock("img",{key:0,src:e.unref(a).logo,alt:e.unref(a).name??"Logo"},null,8,a_)):e.unref(a).mark?(e.openBlock(),e.createElementBlock("span",n_,e.toDisplayString(e.unref(a).mark),1)):(e.openBlock(),e.createBlock(F9,{key:2,size:40}))]),e.createElementVNode("div",o_,e.toDisplayString(e.unref(h.trSafe)("Восстановление пароля")),1),e.createElementVNode("div",r_,e.toDisplayString(l.value?e.unref(h.trSafe)("Если такой email зарегистрирован — мы отправили письмо со ссылкой на сброс."):e.unref(h.trSafe)("Введите email — отправим ссылку для сброса пароля.")),1)]),e.createElementVNode("div",l_,[l.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("form",{key:0,onSubmit:e.withModifiers(d,["prevent"])},[e.createVNode(e.unref(m.UidInput),{modelValue:r.value,"onUpdate:modelValue":i[0]||(i[0]=u=>r.value=u),type:"email",placeholder:"you@example.com",autocomplete:"email",required:""},null,8,["modelValue"]),e.createVNode(e.unref(m.UidButton),{type:"submit",variant:"primary",class:"admin-auth-card__submit",loading:c.value},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(or),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Отправить ссылку")),1)]),_:1},8,["loading"])],32)),e.createVNode(e.unref(m.UidButton),{variant:"ghost",class:"admin-auth-card__back",onClick:i[1]||(i[1]=u=>e.unref(o).push({name:t.loginRouteName}))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("← Назад ко входу")),1)]),_:1})])]),_:1})]))}}),i_={class:"admin-auth-page"},d_={class:"admin-auth-card__hd"},s_={class:"admin-auth-card__logo"},u_=["src","alt"],h_={key:1},p_={class:"admin-auth-card__title"},y_={class:"admin-auth-card__sub"},k_={class:"admin-auth-card__body"},m_={key:0,class:"admin-auth-card__error"},f_=e.defineComponent({__name:"ResetPasswordPage",props:{loginRouteName:{default:"admin.login"}},setup(t){const a=Sc(),o=t,r=le.useRouter(),l=le.useRoute(),c=e.computed(()=>String(l.query.token??"")),d=e.ref(String(l.query.email??"")),s=e.ref(""),i=e.ref(""),u=e.ref(!1),p=e.ref("");async function y(){if(p.value="",s.value.length<8){p.value=h.trSafe("Пароль должен быть не менее 8 символов.");return}if(s.value!==i.value){p.value=h.trSafe("Пароли не совпадают.");return}u.value=!0;try{const{getAdminClient:k}=await Promise.resolve().then(()=>ue);await k().post("/auth/resetPassword",{token:c.value,email:d.value,password:s.value,password_confirmation:i.value}),K.success(h.trSafe("Пароль обновлён. Войдите с новым паролем.")),await r.push({name:o.loginRouteName})}catch{p.value=h.trSafe("Не удалось сбросить пароль. Возможно, ссылка устарела.")}finally{u.value=!1}}return(k,f)=>(e.openBlock(),e.createElementBlock("div",i_,[e.createVNode(e.unref(m.UidCard),{padding:"none",class:"admin-auth-card"},{default:e.withCtx(()=>[e.createElementVNode("div",d_,[e.createElementVNode("div",s_,[e.unref(a).logo?(e.openBlock(),e.createElementBlock("img",{key:0,src:e.unref(a).logo,alt:e.unref(a).name??"Logo"},null,8,u_)):e.unref(a).mark?(e.openBlock(),e.createElementBlock("span",h_,e.toDisplayString(e.unref(a).mark),1)):(e.openBlock(),e.createBlock(F9,{key:2,size:40}))]),e.createElementVNode("div",p_,e.toDisplayString(e.unref(h.trSafe)("Новый пароль")),1),e.createElementVNode("div",y_,e.toDisplayString(e.unref(h.trSafe)("Задайте новый пароль для своего аккаунта.")),1)]),e.createElementVNode("div",k_,[e.createElementVNode("form",{onSubmit:e.withModifiers(y,["prevent"])},[e.createVNode(e.unref(m.UidInput),{modelValue:d.value,"onUpdate:modelValue":f[0]||(f[0]=x=>d.value=x),type:"email",placeholder:"email",required:""},null,8,["modelValue"]),e.createVNode(e.unref(m.UidInput),{modelValue:s.value,"onUpdate:modelValue":f[1]||(f[1]=x=>s.value=x),type:"password",placeholder:e.unref(h.trSafe)("Новый пароль (мин. 8)"),autocomplete:"new-password",required:""},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(m.UidInput),{modelValue:i.value,"onUpdate:modelValue":f[2]||(f[2]=x=>i.value=x),type:"password",placeholder:e.unref(h.trSafe)("Повторите пароль"),autocomplete:"new-password",required:""},null,8,["modelValue","placeholder"]),p.value?(e.openBlock(),e.createElementBlock("p",m_,e.toDisplayString(p.value),1)):e.createCommentVNode("",!0),e.createVNode(e.unref(m.UidButton),{type:"submit",variant:"primary",class:"admin-auth-card__submit",loading:u.value},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Be),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Сохранить пароль")),1)]),_:1},8,["loading"])],32)])]),_:1})]))}}),Xw={page:1,per_page:20,total:0,last_page:1},zw=_e.defineStore("admin-resource-index",()=>{const t=e.ref(null),a=e.ref([]),o=e.ref({...Xw}),r=e.ref(!1),l=e.ref(!1),c=e.ref(null);let d=null;const s=200,i=e.ref(""),u=e.ref({}),p=e.ref(null),y=e.ref(null),k=e.ref(new Set),f=e.computed(()=>!r.value&&c.value===null&&a.value.length===0),x=e.computed(()=>k.value.size),w=e.computed(()=>k.value.size>0),g=e.computed(()=>c.value!==null),M=e.computed(()=>k.value.size===0||a.value.length===0?"none":a.value.every(P=>k.value.has(v(P)))?"all":"mixed");function v(A){return A.id??A.key??""}function C(A){t.value!==A&&(t.value=A,I(),r.value=!0)}function I(){a.value=[],o.value={...Xw},r.value=!1,c.value=null,i.value="",u.value={},p.value=null,y.value=null,k.value=new Set}function _(A={}){const P={page:A.page??o.value.page,per_page:A.per_page??o.value.per_page},X=A.search??i.value;X&&(P.q=X);const O=A.sort??p.value,ae=A.direction??y.value;O&&ae!==null&&(P.order=[{column:O,direction:ae}]);const Y=A.filters??u.value,Q={};for(const[ee,oe]of Object.entries(Y))oe==null||oe===""||(Q[ee]=Array.isArray(oe)?oe.join(","):oe);return Object.keys(Q).length>0&&(P.filters=Q),P}function L(){const{page:A,per_page:P,...X}=_();return X}async function B(A={}){if(!t.value)throw new Error("useResourceIndexStore.load() called before setSlug()");r.value=!0,c.value=null,d!==null&&clearTimeout(d),d=setTimeout(()=>{l.value=!0},s);try{const P=ne(),X=_(A),O=await P.post(`/${t.value}/search`,X);a.value=O.data,o.value=O.meta}catch(P){throw c.value=P instanceof Error?P:new Error(String(P)),P}finally{r.value=!1,l.value=!1,d!==null&&(clearTimeout(d),d=null)}}async function E(A){i.value=A,o.value.page=1,await B()}async function z(A,P){P==null||P===""?delete u.value[A]:u.value[A]=P,o.value.page=1,await B()}async function q(){u.value={},o.value.page=1,await B()}async function F(A,P="asc"){p.value=A,y.value=P,await B()}async function H(A){p.value===A?y.value==="asc"?y.value="desc":y.value==="desc"?(p.value=null,y.value=null):y.value="asc":(p.value=A,y.value="asc"),await B()}async function $(A){o.value.page=A,await B()}function N(A){const P=new Set(k.value);P.has(A)?P.delete(A):P.add(A),k.value=P}function b(){if(M.value==="all"){k.value=new Set;return}const A=new Set(k.value);for(const P of a.value)A.add(v(P));k.value=A}function V(){k.value=new Set}function S(A){return k.value.has(A)}return{slug:t,items:a,meta:o,loading:r,slowLoading:l,error:c,search:i,filters:u,sortKey:p,sortDirection:y,selection:k,isEmpty:f,hasError:g,hasSelection:w,selectedCount:x,selectionState:M,setSlug:C,reset:I,load:B,queryParams:L,setSearch:E,setFilter:z,clearFilters:q,setSort:F,toggleSort:H,setPage:$,toggleRow:N,toggleAllOnPage:b,clearSelection:V,isSelected:S,rowId:v}}),v_=Object.freeze(Object.defineProperty({__proto__:null,useResourceIndexStore:zw},Symbol.toStringTag,{value:"Module"})),Jw="d.m.Y H:i:s",g_="d.m.Y",M_=/^\d{4}-\d{2}-\d{2}[T\s]\d{2}:\d{2}/;function T9(t,a,o={}){if(t==null)return"";if(!a&&typeof t=="string"&&M_.test(t))return J9(t,Jw);switch(a){case"date":return J9(String(t),o.format??g_);case"datetime":return J9(String(t),o.format??Jw);case"money":return B_(t,o.currency??"RUB",o.decimals??2);case"boolean":return __(t,h.trSafe(o.trueLabel??"Да"),h.trSafe(o.falseLabel??"Нет"));case"bytes":return V_(t);case"badge":return b_(t,o);case"json":return Yw(t);default:return Array.isArray(t)||t!==null&&typeof t=="object"?Yw(t):String(t)}}const w_={info:"info",success:"success",warning:"warning",danger:"danger",default:"default",blue:"info",green:"success",yellow:"warning",amber:"warning",orange:"warning",red:"danger",gray:"default",grey:"default",neutral:"default"};function x_(t,a={}){const o=a.colors??{},r=t==null?void 0:o[String(t)];return r&&w_[r]||"default"}function b_(t,a={}){return t==null?"":(a.labels??{})[String(t)]??String(t)}function I_(t,a,o){if(!t)return"";const r=d=>d==null?"":String(d);let l=!1;const c=t.replace(/\{([\w.]+)\}/g,(d,s)=>{const i=a[s];return(i==null||i==="")&&(l=!0),r(i)}).replace(/:value/g,r(o));return l||c===""?"":c}function Yw(t){try{return JSON.stringify(t,null,2)}catch{return String(t)}}function C_(t){const a=t.trim(),o=/^(\d{4})-(\d{2})-(\d{2})$/.exec(a);if(o){const[l,c,d]=[Number(o[1]),Number(o[2]),Number(o[3])],s=new Date(l,c-1,d);return s.getFullYear()===l&&s.getMonth()===c-1&&s.getDate()===d?s:null}const r=new Date(/^\d{4}-\d{2}-\d{2} \d/.test(a)?a.replace(" ","T"):a);return isNaN(r.getTime())?null:r}function S_(){const t=h.currentLocale();try{return Intl.DateTimeFormat.supportedLocalesOf([t]).length>0?t:"en"}catch{return"en"}}function bt(t,a,o,r){try{return new Intl.DateTimeFormat(a,o).formatToParts(t).find(l=>l.type===r)?.value??""}catch{return""}}function L_(t){return t%100>=11&&t%100<=13?"th":["th","st","nd","rd"][t%10]??"th"}function Qw(t){const a=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate())),o=a.getUTCDay()||7;a.setUTCDate(a.getUTCDate()+4-o);const r=new Date(Date.UTC(a.getUTCFullYear(),0,1));return{week:Math.ceil(((a.getTime()-r.getTime())/864e5+1)/7),year:a.getUTCFullYear()}}function Uc(t,a){const o=-t.getTimezoneOffset(),r=o>=0?"+":"-",l=Math.abs(o),c=String(Math.floor(l/60)).padStart(2,"0"),d=String(l%60).padStart(2,"0");return a?`${r}${c}:${d}`:`${r}${c}${d}`}function Mb(t,a){const o=S_(),r=(f,x=2)=>String(f).padStart(x,"0"),l=t.getDate(),c=t.getMonth(),d=t.getFullYear(),s=t.getHours(),i=d%4===0&&d%100!==0||d%400===0,u=Math.round((Date.UTC(d,c,l)-Date.UTC(d,0,1))/864e5),p=/(^|[^\\])[dj]/.test(a),y=f=>{switch(f){case"d":return r(l);case"D":return bt(t,o,{weekday:"short"},"weekday");case"j":return String(l);case"l":return bt(t,o,{weekday:"long"},"weekday");case"N":return String((t.getDay()+6)%7+1);case"S":return o.startsWith("en")?L_(l):"";case"w":return String(t.getDay());case"z":return String(u);case"W":return r(Qw(t).week);case"F":return p?bt(t,o,{day:"numeric",month:"long"},"month"):bt(t,o,{month:"long"},"month");case"m":return r(c+1);case"M":return bt(t,o,{month:"short"},"month");case"n":return String(c+1);case"t":return String(new Date(d,c+1,0).getDate());case"L":return i?"1":"0";case"o":return String(Qw(t).year);case"X":case"x":case"Y":return String(d);case"y":return r(d%100);case"a":return s<12?"am":"pm";case"A":return s<12?"AM":"PM";case"B":{const x=(t.getUTCHours()*3600+t.getUTCMinutes()*60+t.getUTCSeconds()+3600)%86400;return r(Math.floor(x/86.4),3)}case"g":return String((s+11)%12+1);case"G":return String(s);case"h":return r((s+11)%12+1);case"H":return r(s);case"i":return r(t.getMinutes());case"s":return r(t.getSeconds());case"u":return r(t.getMilliseconds()*1e3,6);case"v":return r(t.getMilliseconds(),3);case"e":try{return Intl.DateTimeFormat().resolvedOptions().timeZone??""}catch{return""}case"I":{const x=new Date(d,0,1).getTimezoneOffset(),w=new Date(d,6,1).getTimezoneOffset();return t.getTimezoneOffset()<Math.max(x,w)?"1":"0"}case"O":return Uc(t,!1);case"P":return Uc(t,!0);case"p":return t.getTimezoneOffset()===0?"Z":Uc(t,!0);case"T":return bt(t,"en",{timeZoneName:"short"},"timeZoneName");case"Z":return String(-t.getTimezoneOffset()*60);case"c":return Mb(t,"Y-m-d\\TH:i:sP");case"r":{const x=(w,g)=>bt(t,"en",w,g);return`${x({weekday:"short"},"weekday")}, ${r(l)} ${x({month:"short"},"month")} ${d} ${r(s)}:${r(t.getMinutes())}:${r(t.getSeconds())} ${Uc(t,!1)}`}case"U":return String(Math.floor(t.getTime()/1e3));default:return null}};let k="";for(let f=0;f<a.length;f++){const x=a[f]??"";if(x==="\\"&&f+1<a.length){k+=a[f+1],f++;continue}k+=y(x)??x}return k}function J9(t,a){const o=C_(t);return o===null?t:Mb(o,a)}function B_(t,a,o){const r=typeof t=="number"?t:Number(t);if(isNaN(r))return String(t);const l={minimumFractionDigits:o,maximumFractionDigits:o};if(/^[A-Za-z]{3}$/.test(a))try{return h.formatNumber(r,{style:"currency",currency:a.toUpperCase(),...l})}catch{}return`${h.formatNumber(r,l)} ${a}`}function __(t,a,o){return t===!0||t===1||t==="1"||t==="true"?a:o}function V_(t){const a=typeof t=="number"?t:Number(t);return isNaN(a)?String(t):a<1024?`${a} B`:a<1024*1024?`${(a/1024).toFixed(1)} KB`:a<1024*1024*1024?`${(a/1024/1024).toFixed(1)} MB`:`${(a/1024/1024/1024).toFixed(1)} GB`}const q_={key:0,class:"admin-cell-image"},A_=["aria-label"],z_=["title"],vr=e.defineComponent({__name:"AdminTableCell",props:{value:{default:void 0},preset:{default:null},meta:{default:null},row:{default:null}},setup(t){const a=t,o=e.computed(()=>a.meta??{}),r=e.computed(()=>T9(a.value,a.preset??void 0,o.value)),l=e.computed(()=>{if(a.preset!=="image")return"";const p=a.value;if(typeof p=="string")return p;if(p&&typeof p=="object"){const y=p,k=y.thumb_url??y.thumbnail_url??y.url??y.src;return typeof k=="string"?k:""}return""});function c(p,y){const k=typeof p=="number"?p:Number(p);return Number.isFinite(k)&&k>0?k:y}const d=e.computed(()=>c(o.value.width,32)),s=e.computed(()=>c(o.value.height,d.value)),i=e.computed(()=>a.preset==="link"?I_(o.value.template,a.row??{},a.value):""),u=e.computed(()=>o.value.target||void 0);return(p,y)=>t.preset==="image"?(e.openBlock(),e.createElementBlock("span",q_,[l.value?(e.openBlock(),e.createBlock(e.unref(m.UidImage),{key:0,src:l.value,alt:"",width:d.value,height:s.value,fit:"cover",radius:"sm"},null,8,["src","width","height"])):e.createCommentVNode("",!0)])):t.preset==="badge"&&r.value!==""?(e.openBlock(),e.createBlock(e.unref(m.UidBadge),{key:1,variant:e.unref(x_)(t.value,o.value)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r.value),1)]),_:1},8,["variant"])):t.preset==="link"&&i.value?(e.openBlock(),e.createBlock(e.unref(m.UidLink),{key:2,class:"admin-cell-truncate",href:i.value,external:u.value==="_blank",title:r.value,onClick:y[0]||(y[0]=e.withModifiers(()=>{},["stop"]))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r.value),1)]),_:1},8,["href","external","title"])):r.value===""?(e.openBlock(),e.createElementBlock("span",{key:3,class:"admin-cell-empty","aria-label":e.unref(h.trSafe)("Нет значения")},"—",8,A_)):(e.openBlock(),e.createElementBlock("span",{key:4,class:"admin-cell-truncate",title:r.value},e.toDisplayString(r.value),9,z_))}}),ex=e.defineComponent({name:"FilterEditor",props:{filter:{type:Object,required:!0},draft:{type:null,required:!1,default:null},isChecked:{type:Function,required:!0}},emits:["toggle-option","set-draft"],setup(t,{emit:a}){return()=>{const o=t.filter;if(o.type==="options"&&o.options&&o.options.length>0)return e.h("div",{class:"admin-toolbar__editor admin-toolbar__editor--options"},o.options.map(r=>e.h("label",{key:String(r.value),class:"admin-toolbar__list-item admin-toolbar__list-item--checkbox"},[e.h("input",{type:o.multiple?"checkbox":"radio",checked:t.isChecked(r.value),onChange:()=>a("toggle-option",r.value)}),e.h("span",null,r.label)])));if(o.type==="date_range"){const r=t.draft??{};return e.h("div",{class:"admin-toolbar__editor admin-toolbar__editor--dates"},[e.h("input",{type:"date",value:r.from??"",class:"admin-toolbar__input",placeholder:h.trSafe("От"),onChange:l=>a("set-draft",{...r,from:l.target.value})}),e.h("input",{type:"date",value:r.to??"",class:"admin-toolbar__input",placeholder:h.trSafe("До"),onChange:l=>a("set-draft",{...r,to:l.target.value})})])}if(o.type==="trashed"){const r=[{value:"without",label:h.trSafe("Без удалённых")},{value:"with",label:h.trSafe("С удалёнными")},{value:"only",label:h.trSafe("Только удалённые")}];return e.h("div",{class:"admin-toolbar__editor admin-toolbar__editor--options"},r.map(l=>e.h("label",{key:l.value,class:"admin-toolbar__list-item admin-toolbar__list-item--checkbox"},[e.h("input",{type:"radio",checked:t.draft===l.value,onChange:()=>a("set-draft",l.value)}),e.h("span",null,l.label)])))}return o.type==="switcher"?e.h("div",{class:"admin-toolbar__editor"},[e.h("label",{class:"admin-toolbar__list-item admin-toolbar__list-item--checkbox"},[e.h("input",{type:"radio",checked:t.draft===!0,onChange:()=>a("set-draft",!0)}),e.h("span",null,h.trSafe("Да"))]),e.h("label",{class:"admin-toolbar__list-item admin-toolbar__list-item--checkbox"},[e.h("input",{type:"radio",checked:t.draft===!1,onChange:()=>a("set-draft",!1)}),e.h("span",null,h.trSafe("Нет"))])]):e.h("input",{type:"text",value:t.draft??"",class:"admin-toolbar__input",placeholder:o.placeholder??o.label,onChange:r=>a("set-draft",r.target.value)})}}}),E_={class:"admin-toolbar"},N_={class:"admin-toolbar__row admin-toolbar__row--filters"},D_={class:"admin-toolbar__search"},F_=["placeholder"],$_={key:0,class:"admin-toolbar__divider"},H_={type:"button",class:"admin-toolbar__chip admin-toolbar__chip--active"},P_={class:"admin-toolbar__chip-text"},T_=["aria-label","onClick","onKeydown"],U_={class:"admin-toolbar__popover-actions"},R_={type:"button",class:"admin-toolbar__chip"},j_={class:"admin-toolbar__chip-text"},O_={class:"admin-toolbar__popover-actions"},W_={type:"button",class:"admin-toolbar__chip"},Z_={class:"admin-toolbar__chip-text"},G_=["onClick"],K_={key:3,class:"admin-toolbar__spacer admin-toolbar__spacer--actions"},X_={type:"button",class:"admin-toolbar__chip"},J_={class:"admin-toolbar__chip-text"},Y_=["onClick"],Q_={type:"button",class:"admin-toolbar__chip"},eV={class:"admin-toolbar__chip-text"},tV={type:"button",class:"admin-toolbar__chip"},aV={class:"admin-toolbar__chip-text"},nV=["placeholder"],oV={class:"admin-toolbar__popover-actions"},tx=4,wb=e.defineComponent({__name:"AdminFilterToolbar",props:{search:{},searchPlaceholder:{default:h.trSafe("Поиск…")},filters:{},values:{},columns:{},groupBy:{default:null},columnVisibility:{default:()=>({})},enableSavedViews:{type:Boolean,default:!0}},emits:["update:search","apply-filter","reset","group-by","columns-visibility","save-view"],setup(t,{emit:a}){const o=t,r=a,l=e.ref(o.search);e.watch(()=>o.search,b=>{l.value=b});function c(){l.value!==o.search&&r("update:search",l.value)}function d(b){return b==null||b===""||Array.isArray(b)&&b.length===0?!1:typeof b=="object"&&!Array.isArray(b)?Object.values(b).some(S=>S!==null&&S!==""&&S!==void 0):!0}const s=e.computed(()=>o.filters.filter(b=>d(o.values[b.name]))),i=e.computed(()=>o.filters.filter(b=>!d(o.values[b.name]))),u=e.ref(new Set),p=e.computed(()=>i.value.filter((b,V)=>u.value.has(b.name)||V<tx)),y=e.computed(()=>i.value.filter((b,V)=>!u.value.has(b.name)&&V>=tx));function k(b){const V=new Set(u.value);V.add(b),u.value=V}const f=e.computed(()=>o.search!==""||s.value.length>0);function x(b){r("apply-filter",b,null)}function w(b){const V=o.values[b.name];if(b.options&&b.options.length>0){const A=(Array.isArray(V)?V:[V]).map(P=>b.options?.find(X=>String(X.value)===String(P))?.label??String(P));return`${b.label}: ${A.join(", ")}`}if(b.type==="date_range"&&V&&typeof V=="object"){const S=V;return`${b.label}: ${S.from??""} – ${S.to??""}`}return b.type==="switcher"?`${b.label}: ${V?h.trSafe("да"):h.trSafe("нет")}`:`${b.label}: ${String(V)}`}const g=e.ref({});function M(b){return b in g.value||(g.value[b]=o.values[b]??null),g.value[b]}function v(b,V){g.value={...g.value,[b]:V}}function C(b,V){r("apply-filter",b,g.value[b]??null),V()}function I(b,V,S){if(!S){v(b,V);return}const A=M(b),P=Array.isArray(A)?[...A]:[],X=P.findIndex(O=>String(O)===String(V));X>=0?P.splice(X,1):P.push(V),v(b,P)}function _(b,V){const S=M(b);return Array.isArray(S)?S.some(A=>String(A)===String(V)):S!=null&&String(S)===String(V)}const L=e.computed(()=>o.columns.filter(b=>b.groupable===!0&&(b.key??b.name)));function B(b,V){r("group-by",b),V()}function E(b){return String(b.key??b.name??"")}function z(b){return String(b.label??b.name??b.key??"")}function q(b){if(b.cantHide===!0)return!0;const V=E(b);return V in o.columnVisibility?o.columnVisibility[V]:b.defaultHidden!==!0}function F(b){if(b.cantHide===!0)return;const V=E(b);r("columns-visibility",{...o.columnVisibility,[V]:!q(b)})}const H=e.ref("");function $(b){H.value.trim()!==""&&(r("save-view",H.value.trim()),H.value="",b())}function N(b){return be(b)??null}return(b,V)=>(e.openBlock(),e.createElementBlock("div",E_,[e.createElementVNode("div",N_,[e.createElementVNode("label",D_,[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(mt),size:14,class:"admin-toolbar__search-icon"},null,8,["icon"]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":V[0]||(V[0]=S=>l.value=S),type:"search",placeholder:e.unref(h.trSafe)(t.searchPlaceholder),class:"admin-toolbar__search-input",onKeydown:e.withKeys(c,["enter"]),onBlur:c},null,40,F_),[[e.vModelText,l.value]])]),t.filters.length>0?(e.openBlock(),e.createElementBlock("span",$_)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,S=>(e.openBlock(),e.createBlock(e.unref(m.UidMenu),{key:`active-${S.name}`},{trigger:e.withCtx(()=>[e.createElementVNode("button",H_,[N(S.icon)!==null?(e.openBlock(),e.createBlock(e.unref(m.UidIcon),{key:0,icon:N(S.icon),size:14},null,8,["icon"])):e.createCommentVNode("",!0),e.createElementVNode("span",P_,e.toDisplayString(w(S)),1),e.createElementVNode("span",{role:"button",tabindex:"0","aria-label":e.unref(h.trSafe)("Сбросить фильтр"),class:"admin-toolbar__chip-x",onClick:e.withModifiers(A=>x(S.name),["stop"]),onKeydown:e.withKeys(e.withModifiers(A=>x(S.name),["stop"]),["enter"])},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(pe),size:12},null,8,["icon"])],40,T_)])]),default:e.withCtx(()=>[e.createElementVNode("div",{class:"admin-toolbar__popover",onKeydown:V[1]||(V[1]=e.withModifiers(()=>{},["stop"]))},[e.createVNode(e.unref(ex),{filter:S,draft:M(S.name),"is-checked":A=>_(S.name,A),onToggleOption:A=>I(S.name,A,S.multiple??!1),onSetDraft:A=>v(S.name,A)},null,8,["filter","draft","is-checked","onToggleOption","onSetDraft"]),e.createElementVNode("div",U_,[e.createVNode(e.unref(m.UidButton),{size:"sm",variant:"ghost",onClick:A=>v(S.name,null)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Очистить")),1)]),_:1},8,["onClick"]),e.createVNode(e.unref(m.UidButton),{size:"sm",variant:"primary",onClick:A=>C(S.name,()=>{})},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Применить")),1)]),_:1},8,["onClick"])])],32)]),_:2},1024))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,S=>(e.openBlock(),e.createBlock(e.unref(m.UidMenu),{key:`inactive-${S.name}`},{trigger:e.withCtx(()=>[e.createElementVNode("button",R_,[N(S.icon)!==null?(e.openBlock(),e.createBlock(e.unref(m.UidIcon),{key:0,icon:N(S.icon),size:14},null,8,["icon"])):e.createCommentVNode("",!0),e.createElementVNode("span",j_,e.toDisplayString(S.label),1)])]),default:e.withCtx(()=>[e.createElementVNode("div",{class:"admin-toolbar__popover",onKeydown:V[2]||(V[2]=e.withModifiers(()=>{},["stop"]))},[e.createVNode(e.unref(ex),{filter:S,draft:M(S.name),"is-checked":A=>_(S.name,A),onToggleOption:A=>I(S.name,A,S.multiple??!1),onSetDraft:A=>v(S.name,A)},null,8,["filter","draft","is-checked","onToggleOption","onSetDraft"]),e.createElementVNode("div",O_,[e.createVNode(e.unref(m.UidButton),{size:"sm",variant:"ghost",onClick:A=>v(S.name,null)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Очистить")),1)]),_:1},8,["onClick"]),e.createVNode(e.unref(m.UidButton),{size:"sm",variant:"primary",onClick:A=>C(S.name,()=>{})},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Применить")),1)]),_:1},8,["onClick"])])],32)]),_:2},1024))),128)),y.value.length>0?(e.openBlock(),e.createBlock(e.unref(m.UidMenu),{key:1},{trigger:e.withCtx(()=>[e.createElementVNode("button",W_,[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(me),size:14},null,8,["icon"]),e.createElementVNode("span",Z_,e.toDisplayString(e.unref(h.trSafe)("Фильтр")),1)])]),default:e.withCtx(()=>[e.createElementVNode("div",{class:"admin-toolbar__popover admin-toolbar__popover--list",onKeydown:V[3]||(V[3]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,S=>(e.openBlock(),e.createElementBlock("button",{key:S.name,type:"button",role:"menuitem",class:"admin-toolbar__list-item",onClick:A=>k(S.name)},[N(S.icon)!==null?(e.openBlock(),e.createBlock(e.unref(m.UidIcon),{key:0,icon:N(S.icon),size:14},null,8,["icon"])):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(S.label),1)],8,G_))),128))],32)]),_:1})):e.createCommentVNode("",!0),f.value?(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:2,variant:"secondary",size:"sm",class:"admin-toolbar__reset","data-testid":"toolbar-reset",onClick:V[4]||(V[4]=S=>r("reset"))},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Je),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Сбросить")),1)]),_:1})):e.createCommentVNode("",!0),V[12]||(V[12]=e.createElementVNode("span",{class:"admin-toolbar__spacer"},null,-1)),L.value.length>0||t.columns.length>0||t.enableSavedViews?(e.openBlock(),e.createElementBlock("span",K_)):e.createCommentVNode("",!0),L.value.length>0?(e.openBlock(),e.createBlock(e.unref(m.UidMenu),{key:4},{trigger:e.withCtx(()=>[e.createElementVNode("button",X_,[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(tr),size:14},null,8,["icon"]),e.createElementVNode("span",J_,e.toDisplayString(t.groupBy?e.unref(h.tRaw)("Группа: :name",{name:z(t.columns.find(S=>E(S)===t.groupBy)??{})}):e.unref(h.trSafe)("Группировать")),1)])]),default:e.withCtx(()=>[e.createElementVNode("div",{class:"admin-toolbar__popover admin-toolbar__popover--list",onKeydown:V[6]||(V[6]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("button",{type:"button",role:"menuitem",class:"admin-toolbar__list-item",onClick:V[5]||(V[5]=S=>B(null,()=>{}))},[t.groupBy?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(m.UidIcon),{key:0,icon:e.unref(Be),size:14},null,8,["icon"])),e.createElementVNode("span",null,e.toDisplayString(e.unref(h.trSafe)("Без группировки")),1)]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(L.value,S=>(e.openBlock(),e.createElementBlock("button",{key:E(S),type:"button",role:"menuitem",class:"admin-toolbar__list-item",onClick:A=>B(E(S),()=>{})},[t.groupBy===E(S)?(e.openBlock(),e.createBlock(e.unref(m.UidIcon),{key:0,icon:e.unref(Be),size:14},null,8,["icon"])):e.createCommentVNode("",!0),e.createElementVNode("span",null,e.toDisplayString(z(S)),1)],8,Y_))),128))],32)]),_:1})):e.createCommentVNode("",!0),t.columns.length>0?(e.openBlock(),e.createBlock(e.unref(m.UidMenu),{key:5},{trigger:e.withCtx(()=>[e.createElementVNode("button",Q_,[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(lt),size:14},null,8,["icon"]),e.createElementVNode("span",eV,e.toDisplayString(e.unref(h.trSafe)("Колонки")),1)])]),default:e.withCtx(()=>[e.createElementVNode("div",{class:"admin-toolbar__popover admin-toolbar__popover--list",onKeydown:V[7]||(V[7]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.columns.filter(S=>E(S)!==""),S=>(e.openBlock(),e.createElementBlock("div",{key:E(S),class:"admin-toolbar__list-item admin-toolbar__list-item--checkbox"},[e.createVNode(e.unref(m.UidCheckbox),{"model-value":q(S),label:z(S),disabled:S.cantHide===!0,"onUpdate:modelValue":A=>F(S)},null,8,["model-value","label","disabled","onUpdate:modelValue"])]))),128))],32)]),_:1})):e.createCommentVNode("",!0),t.enableSavedViews?(e.openBlock(),e.createBlock(e.unref(m.UidMenu),{key:6},{trigger:e.withCtx(()=>[e.createElementVNode("button",tV,[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Fo),size:14},null,8,["icon"]),e.createElementVNode("span",aV,e.toDisplayString(e.unref(h.trSafe)("Сохранить")),1)])]),default:e.withCtx(()=>[e.createElementVNode("div",{class:"admin-toolbar__popover",onKeydown:V[11]||(V[11]=e.withModifiers(()=>{},["stop"]))},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":V[8]||(V[8]=S=>H.value=S),type:"text",placeholder:e.unref(h.trSafe)("Название view"),class:"admin-toolbar__input",onKeydown:V[9]||(V[9]=e.withKeys(S=>$(()=>{}),["enter"]))},null,40,nV),[[e.vModelText,H.value]]),e.createElementVNode("div",oV,[e.createVNode(e.unref(m.UidButton),{size:"sm",variant:"primary",disabled:H.value.trim()==="",onClick:V[10]||(V[10]=S=>$(()=>{}))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Сохранить view")),1)]),_:1},8,["disabled"])])],32)]),_:1})):e.createCommentVNode("",!0)])]))}}),rV=["title","role","tabindex"],lV=["disabled"],cV=["disabled"],iV=["disabled"],dV=["value"],sV=["disabled"],uV=["disabled"],xb=e.defineComponent({__name:"InlineEditCell",props:{resourceSlug:{},rowId:{},column:{},value:{},editable:{type:Boolean,default:!0},inputType:{default:"text"},options:{default:()=>({})},rowOverride:{default:()=>({})}},emits:["saved"],setup(t,{emit:a}){const o=t,r=a,l=e.ref(!1),c=e.ref(""),d=e.ref(!1),s=e.ref(null),i=e.computed(()=>!(!o.editable||o.rowOverride[o.column]===!1));async function u(){!i.value||d.value||(c.value=o.value===null||o.value===void 0?"":String(o.value),l.value=!0,await e.nextTick(),s.value?.focus(),s.value&&"select"in s.value&&typeof s.value.select=="function"&&s.value.select())}function p(M){i.value&&(M.stopPropagation(),u())}function y(M){!i.value||M.key!=="Enter"&&M.key!==" "||(M.preventDefault(),M.stopPropagation(),u())}function k(){l.value=!1}async function f(){if(!(!l.value||d.value)){if(c.value===String(o.value??"")){l.value=!1;return}d.value=!0;try{const{getAdminClient:M}=await Promise.resolve().then(()=>ue),v=M(),C=o.inputType==="switcher"?c.value==="true"||c.value==="1":c.value;await v.post(`/${o.resourceSlug}/inlineUpdate`,{id:o.rowId,column:o.column,value:C}),r("saved",C),l.value=!1}catch(M){typeof console<"u"&&console.error("[admin] inline-update failed:",M),K.error(h.tRaw("Не удалось обновить «:column».",{column:o.column}))}finally{d.value=!1}}}function x(M){M.key==="Enter"&&o.inputType!=="textarea"?(M.preventDefault(),f()):M.key==="Escape"&&(M.preventDefault(),k())}function w(){!i.value||d.value||(c.value=o.value===!0||o.value===1||o.value==="1"?"false":"true",l.value=!0,f())}const g=e.computed(()=>Object.entries(o.options).map(([M,v])=>({value:M,label:v})));return(M,v)=>t.inputType==="switcher"?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["admin-inline-edit",{"admin-inline-edit--editable":i.value}]),onClick:e.withModifiers(w,["stop"])},[e.renderSlot(M.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(t.value),1)])],2)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[l.value?t.inputType==="number"?e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,ref_key:"inputRef",ref:s,"onUpdate:modelValue":v[0]||(v[0]=C=>c.value=C),type:"number",class:"admin-inline-edit__input",disabled:d.value,onKeydown:x,onBlur:f,onClick:v[1]||(v[1]=e.withModifiers(()=>{},["stop"]))},null,40,lV)),[[e.vModelText,c.value]]):t.inputType==="date"?e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:2,ref_key:"inputRef",ref:s,"onUpdate:modelValue":v[2]||(v[2]=C=>c.value=C),type:"date",class:"admin-inline-edit__input",disabled:d.value,onKeydown:x,onBlur:f,onClick:v[3]||(v[3]=e.withModifiers(()=>{},["stop"]))},null,40,cV)),[[e.vModelText,c.value]]):t.inputType==="select"?e.withDirectives((e.openBlock(),e.createElementBlock("select",{key:3,ref_key:"inputRef",ref:s,"onUpdate:modelValue":v[4]||(v[4]=C=>c.value=C),class:"admin-inline-edit__input",disabled:d.value,onKeydown:x,onChange:f,onBlur:f,onClick:v[5]||(v[5]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,C=>(e.openBlock(),e.createElementBlock("option",{key:C.value,value:C.value},e.toDisplayString(C.label),9,dV))),128))],40,iV)),[[e.vModelSelect,c.value]]):t.inputType==="textarea"?e.withDirectives((e.openBlock(),e.createElementBlock("textarea",{key:4,ref_key:"inputRef",ref:s,"onUpdate:modelValue":v[6]||(v[6]=C=>c.value=C),class:"admin-inline-edit__input admin-inline-edit__input--textarea",rows:"3",disabled:d.value,onKeydown:x,onBlur:f,onClick:v[7]||(v[7]=e.withModifiers(()=>{},["stop"]))},null,40,sV)),[[e.vModelText,c.value]]):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:5,ref_key:"inputRef",ref:s,"onUpdate:modelValue":v[8]||(v[8]=C=>c.value=C),type:"text",class:"admin-inline-edit__input",disabled:d.value,onKeydown:x,onBlur:f,onClick:v[9]||(v[9]=e.withModifiers(()=>{},["stop"]))},null,40,uV)),[[e.vModelText,c.value]]):(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["admin-inline-edit",{"admin-inline-edit--editable":i.value}]),title:i.value?e.unref(h.trSafe)("Нажмите, чтобы изменить"):void 0,role:i.value?"button":void 0,tabindex:i.value?0:void 0,onClick:p,onKeydown:y},[e.renderSlot(M.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(t.value),1)])],42,rV))],64))}}),hV={class:"admin-resource-tree-page"},pV={class:"admin-resource-tree-page__header"},yV={class:"admin-resource-tree-page__title"},kV={key:0,class:"admin-resource-tree-page__count"},mV={key:0,class:"admin-resource-tree-page__subtitle"},fV={class:"admin-resource-tree-page__actions"},vV={class:"admin-resource-tree-page__toolbar"},gV={class:"admin-resource-tree-page__selection-label"},MV={class:"admin-resource-tree-page__body"},wV=e.defineComponent({__name:"ResourceTreePage",props:{slug:{},title:{default:null},subtitle:{default:null}},setup(t){const a=t,o=le.useRouter(),r=ke(),l=e.computed(()=>r.getResource(a.slug)),c=e.ref([]),d=e.ref(0),s=e.ref(!1),i=e.ref(null),u=e.ref(""),p=e.ref([]),y=e.ref([]),k=e.computed(()=>a.title??l.value?.label??a.slug),f=e.computed(()=>a.subtitle??null),x=e.computed(()=>!!l.value?.permissions?.create),w=e.computed(()=>l.value?.label??a.slug);async function g(){s.value=!0,i.value=null;try{const S=ne(),A={};u.value.trim()!==""&&(A.q=u.value.trim());const P=await S.post(`/${a.slug}/tree`,A);c.value=P.data,d.value=P.meta.total}catch(S){i.value=S instanceof Error?S:new Error(String(S)),c.value=[],d.value=0}finally{s.value=!1}}function M(S){const A=[],P=X=>{for(const O of X)A.push(O.key),O.children?.length&&P(O.children)};return P(S),A}function v(){p.value=M(c.value)}function C(){p.value=[]}const I=e.computed(()=>y.value[0]??null);function _(S,A){for(const P of S){if(P.key===A)return P;if(P.children?.length){const X=_(P.children,A);if(X)return X}}return null}const L=e.computed(()=>I.value===null?null:_(c.value,I.value)),B=e.computed(()=>L.value?.slug??a.slug),E=e.computed(()=>{const S=L.value;if(!S)return null;const A=S.record?.id;return typeof A=="string"||typeof A=="number"?A:S.key});function z(){o.push({name:`admin.resource.${a.slug}.create`})}function q(){E.value!==null&&o.push({name:`admin.resource.${B.value}.edit`,params:{id:String(E.value)}})}function F(){E.value!==null&&o.push({name:`admin.resource.${B.value}.view`,params:{id:String(E.value)}})}const H=e.computed(()=>L.value?.actions??[]);function $(S,A){const P={};if(!S)return P;for(const[X,O]of Object.entries(S))typeof O=="string"?P[X]=O.replace(/\{([a-zA-Z_][\w]*)\}/g,(ae,Y)=>{const Q=A?.[Y];return Q==null?"":String(Q)}):P[X]=O;return P}function N(S){if(S.kind!=="navigate")return;const P=L.value?.record??{},X=$(S.to.params,P);o.push({name:`admin.resource.${S.to.slug}.${S.to.screen}`,query:X})}async function b(){if(E.value!==null&&await Pe({message:h.trSafe("Удалить выбранный узел?"),destructive:!0}))try{await ne().post(`/${B.value}/delete`,{id:E.value}),y.value=[],K.success(h.trSafe("Запись удалена.")),await g()}catch(S){i.value=S instanceof Error?S:new Error(String(S))}}let V=null;return e.watch(u,()=>{V!==null&&clearTimeout(V),V=setTimeout(()=>{g()},300)}),e.onMounted(g),(S,A)=>(e.openBlock(),e.createElementBlock("div",hV,[e.createElementVNode("header",pV,[e.createElementVNode("div",null,[e.createElementVNode("h1",yV,[e.createTextVNode(e.toDisplayString(k.value)+" ",1),d.value>0?(e.openBlock(),e.createElementBlock("span",kV,e.toDisplayString(d.value),1)):e.createCommentVNode("",!0)]),f.value?(e.openBlock(),e.createElementBlock("p",mV,e.toDisplayString(f.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",fV,[x.value?(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:0,variant:"primary",onClick:z},{default:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(me)},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Создать")),1)]),_:1})):e.createCommentVNode("",!0)])]),e.createElementVNode("div",vV,[e.createVNode(e.unref(m.UidInput),{modelValue:u.value,"onUpdate:modelValue":A[0]||(A[0]=P=>u.value=P),placeholder:e.unref(h.trSafe)("Поиск по дереву…"),class:"admin-resource-tree-page__search"},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(m.UidMenu),null,{trigger:e.withCtx(()=>[e.createVNode(e.unref(m.UidButton),{variant:"ghost"},{default:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Xr)},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Развернуть"))+" ",1),e.createVNode(e.unref(m.UidIcon),{icon:e.unref($e)},null,8,["icon"])]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(m.UidMenuItem),{onClick:v},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Развернуть все")),1)]),_:1}),e.createVNode(e.unref(m.UidMenuItem),{onClick:C},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Свернуть все")),1)]),_:1})]),_:1}),I.value!==null?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[A[5]||(A[5]=e.createElementVNode("span",{class:"admin-resource-tree-page__selection-divider","aria-hidden":"true"},"|",-1)),e.createElementVNode("span",gV,e.toDisplayString(L.value?.label??I.value),1),e.createVNode(e.unref(m.UidButton),{variant:"ghost",onClick:F},{default:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(He)},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Открыть")),1)]),_:1}),e.createVNode(e.unref(m.UidButton),{variant:"ghost",onClick:q},{default:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(He)},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Редактировать")),1)]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(H.value,P=>(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:P.id,variant:P.variant??"secondary",onClick:X=>N(P)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(P.label),1)]),_:2},1032,["variant","onClick"]))),128)),l.value?.permissions?.delete?(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:0,variant:"danger",onClick:b},{default:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(xe)},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Удалить")),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(m.UidButton),{variant:"ghost",onClick:A[1]||(A[1]=P=>y.value=[])},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Снять выбор")),1)]),_:1})],64)):e.createCommentVNode("",!0)]),e.createElementVNode("div",MV,[s.value&&c.value.length===0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},e.renderList(6,P=>e.createVNode(e.unref(m.UidSkeleton),{key:P})),64)):i.value?(e.openBlock(),e.createBlock(e.unref(m.UidErrorState),{key:1,title:e.unref(h.trSafe)("Не удалось загрузить данные"),description:i.value.message},{actions:e.withCtx(()=>[e.createVNode(e.unref(m.UidButton),{variant:"primary",onClick:g},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Обновить")),1)]),_:1})]),_:1},8,["title","description"])):c.value.length===0&&u.value.trim()!==""?(e.openBlock(),e.createBlock(e.unref(m.UidEmptyState),{key:2,title:e.unref(h.trSafe)("Ничего не найдено"),description:e.unref(h.tRaw)("По запросу «:query» ничего не найдено. Измените запрос или сбросьте поиск.",{query:u.value.trim()}),"data-testid":"tree-no-results"},{actions:e.withCtx(()=>[e.createVNode(e.unref(m.UidButton),{variant:"secondary",onClick:A[2]||(A[2]=P=>u.value="")},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Сбросить поиск")),1)]),_:1})]),_:1},8,["title","description"])):c.value.length===0?(e.openBlock(),e.createBlock(e.unref(m.UidEmptyState),{key:3,title:e.unref(h.trSafe)("Пока пусто"),description:e.unref(h.trSafe)("Здесь пока нет записей.")},null,8,["title","description"])):(e.openBlock(),e.createBlock(e.unref(m.UidTreeView),{key:4,nodes:c.value,"virtual-root":w.value,"expanded-keys":p.value,"onUpdate:expandedKeys":A[3]||(A[3]=P=>p.value=P),"selected-keys":y.value,"onUpdate:selectedKeys":A[4]||(A[4]=P=>y.value=P),selectable:"single","show-guides":""},null,8,["nodes","virtual-root","expanded-keys","selected-keys"]))])]))}}),xV=ge(wV,[["__scopeId","data-v-ec0d0c9c"]]);function bV(t,a,o){const r=Number.isFinite(a)&&a>1?Math.floor(a):1,l=Number.isFinite(o)&&o>0?Math.floor(o):0;return{ids:t,offset:(r-1)*l}}function IV(t,a,o,r){return t?o===null||r===null?!0:o===(a??"position")&&r==="asc":!1}function CV(t,a,o,r){return!a||!o?t:t.map(l=>{const c=a[String(r(l))];return typeof c=="number"&&o in l?{...l,[o]:c}:l})}const SV={key:1,class:"admin-page admin-resource-index"},LV={class:"admin-page__hd"},BV={class:"admin-page__title-wrap"},_V={class:"admin-page__title-row"},VV={class:"admin-page__title"},qV={key:0,class:"admin-page__live",role:"status"},AV={key:0,class:"admin-page__count"},zV={class:"admin-page__actions"},EV={class:"admin-page__view-row"},NV={class:"admin-page__view-name"},DV={key:0,class:"admin-page__view-badge"},FV=["aria-label","onClick"],$V={key:0,class:"admin-bulk-toolbar","data-testid":"bulk-bar",role:"toolbar"},HV={class:"admin-bulk-toolbar__count"},PV={key:0,class:"admin-resource-index__loading"},TV=["data-disabled","draggable","title","onDragstart","onDragover","onDrop"],UV={key:1,class:"admin-resource-index__row-actions"},RV=["title","onClick"],jV=["title","onClick"],OV=["title","onClick"],WV=["title","onClick"],ZV=["title","onClick"],GV=["title","onClick"],KV={key:4,class:"admin-resource-index__footer"},ax="__row_actions__",nx="__row_reorder__",Ew=e.defineComponent({__name:"ResourceIndexPage",props:{slug:{},title:{default:null},subtitle:{default:null},createLabel:{default:void 0},createRouteName:{default:null}},emits:["bulk-action","row-click","import","header-action"],setup(t,{emit:a}){const o=h.useI18nStore(),r=D=>o.tr(D),l=(D,T)=>o.t(D,T),c=(D,T,R)=>o.has(D)?o.t(D,R):T,d=t,s=a,i=zw(),u=ke(),p=Mw(),y=le.useRouter(),k=e.computed(()=>u.getResource(d.slug)),f=e.computed(()=>d.title??k.value?.label??d.slug),x=e.computed(()=>{if(d.createRouteName!==null)return y.hasRoute(d.createRouteName)?d.createRouteName:null;const D=`admin.resource.${d.slug}.create`;return y.hasRoute(D)?D:null}),w=e.computed(()=>Lc(k.value?.actions)),g=e.computed(()=>w.value.filter(D=>!Re(D))),M=e.computed(()=>w.value.filter(D=>Re(D))),v=e.computed(()=>w.value.filter(D=>D.position.includes("row")&&Re(D))),C=D=>Re(D)&&!lb(D,i.selectedCount),I=H9({ids:()=>[...i.selection],async execute(D,T,R){p.start();try{const{getAdminClient:j}=await Promise.resolve().then(()=>ue);return await j().post(`/${d.slug}/action`,{key:D.name,ids:R?.ids??(Re(D)?[...i.selection]:[]),...T?{payload:T}:{}})}finally{p.end()}},async onSuccess(D,T,R){const j=T??{};Re(D)&&!R?.ids&&i.clearSelection(),await i.load().catch(()=>{}),K.success(j.message??l("Действие «:action» применено к :count записям.",{action:D.label,count:j.affected??0}))},onError(D,T){typeof console<"u"&&console.error("[admin] header-action failed:",T),K.error(l("Не удалось выполнить действие «:action».",{action:D.label}))},async refresh(){await i.load().catch(()=>{})}});async function _(D){if(Re(D)&&!i.hasSelection){K.error(r("Сначала выберите записи."));return}s("header-action",D.name),await I.run(D)}async function L(D,T){const R=Ee(T);R!==null&&await I.run(D,{ids:[R]})}const B=e.ref(!1);async function E(){const D=[...i.selection];if(D.length!==0&&await I.confirm(l("Удалить выбранные записи (:count)?",{count:D.length}),!0)){B.value=!0;try{const{getAdminClient:T}=await Promise.resolve().then(()=>ue),R=T();let j=0;for(const J of D)try{await R.post(`/${d.slug}/delete`,{id:J}),j++}catch{}i.clearSelection(),await i.load().catch(()=>{}),j===D.length?K.success(l("Удалено записей: :count.",{count:j})):K.error(l("Удалено :ok из :total; часть не удалена.",{ok:j,total:D.length}))}finally{B.value=!1}}}async function z(D="csv"){s("header-action","export");try{p.start();const{getAdminClient:T}=await Promise.resolve().then(()=>ue),j=await T().post(`/${d.slug}/export`,{format:D,...i.queryParams()},{responseType:"blob"}),J=URL.createObjectURL(j),se=document.createElement("a");se.href=J,se.download=`${d.slug}-${new Date().toISOString().slice(0,10)}.${D}`,document.body.appendChild(se),se.click(),se.remove(),URL.revokeObjectURL(J)}catch(T){typeof console<"u"&&console.error("[admin] export failed:",T),K.error(l("Не удалось экспортировать данные в формате :format.",{format:D.toUpperCase()}))}finally{p.end()}}const q=e.ref(null);function F(){s("import"),q.value?.click()}async function H(D){const T=D.target,R=T.files?.[0];if(R)try{p.start();const{getAdminClient:j}=await Promise.resolve().then(()=>ue),J=j(),se=new FormData;se.append("file",R),se.append("resource",d.slug);const Nc=await J.post("/import/upload",se),Lr=await J.post("/import/preview",{resource:d.slug,upload_id:Nc.upload_id}),Z9=await J.post("/import/start",{resource:d.slug,upload_id:Nc.upload_id,mapping:Lr.mapping}),Dc=await $(J,Z9.process_id),Fc=Dc.imported??0,$c=Dc.failed??0;$c>0?K.warning(l("Импорт завершён с ошибками: :imported записей, :failed ошибок.",{imported:Fc,failed:$c})):K.success(l("Импортировано записей: :count.",{count:Fc})),await i.load().catch(()=>{})}catch(j){typeof console<"u"&&console.error("[admin] import failed:",j),K.error(r("Импорт не удался. Проверьте формат файла и поля ресурса либо обратитесь к администратору."))}finally{T.value="",p.end()}}async function $(D,T){const R=Date.now()+9e4;for(;Date.now()<R;){await new Promise(J=>setTimeout(J,800));const j=await D.get(`/import/status?process_id=${encodeURIComponent(T)}`);if(j.status==="done"||j.status==="failed")return j}return{status:"failed",failed:1}}const N=e.computed(()=>(k.value?.features??{}).reorderable===!0),b=e.computed(()=>{const D=k.value?.features??{};return typeof D.reorderColumn=="string"?D.reorderColumn:null}),V=e.computed(()=>IV(N.value,b.value,i.sortKey,i.sortDirection)),S=e.computed(()=>(k.value?.features??{}).creatable!==!1),A=e.computed(()=>(k.value?.features??{}).editable!==!1),P=ye(),X=e.computed(()=>{if((k.value?.features??{}).replicable!==!0)return!1;const T=k.value?.permissions?.replicate;return typeof T!="string"||P.hasPermission(T)}),O=e.computed(()=>(k.value?.features??{}).savedViews===!0),ae=e.computed(()=>(k.value?.features??{}).importable===!0),Y=e.computed(()=>{const D=k.value?.features??{};return(Array.isArray(D.exportable)?D.exportable:["csv"]).filter(R=>typeof R=="string"&&R.length>0)}),Q={csv:"CSV",json:"JSON",xlsx:"XLSX",pdf:"PDF"},ee=e.computed(()=>{const T=(k.value?.columns??[]).map(j=>{const J=j;return{key:String(J.key??J.name??""),label:String(J.label??J.name??""),sortable:!!J.sortable,align:J.align??"left",width:typeof J.width=="string"?J.width:void 0}}).filter(j=>j.key).filter(j=>oe(j.key));return[...N.value?[{key:nx,label:"",sortable:!1,align:"center",width:"32px",fixed:"left"}]:[],...T,{key:ax,label:"",sortable:!1,align:"right",width:v.value.length>0?"156px":"120px",fixed:"right"}]});function oe(D){const T=(k.value?.columns??[]).find(R=>{const j=R;return String(j.key??j.name??"")===D});return T?.cantHide===!0?!0:D in Ue.value?Ue.value[D]!==!1:T?.defaultHidden!==!0}function he(D){const T=k.value?.columns??[];for(const R of T){const j=R;if(String(j.key??j.name??"")===D)return j.editable!==null&&j.editable!==void 0}return!1}function Me(D){const T=k.value?.columns??[];for(const R of T){const j=R;if(String(j.key??j.name??"")===D){const se=j.editable??{};return{as:se.as??"text",options:se.options??{}}}}return{as:"text",options:{}}}const Te=e.computed(()=>{const D=k.value?.columns??[],T={};for(const R of D){const j=R,J=String(j.key??j.name??"");J&&(T[J]={preset:typeof j.preset=="string"?j.preset:void 0,meta:j.meta??{}})}return T});function ie(D){return D?.row}const qc=e.computed(()=>i.search!==""||Object.keys(i.filters).length>0),Se=e.computed(()=>!i.isEmpty||qc.value),vt=e.computed(()=>k.value?.filters??[]),Ro=e.computed(()=>k.value?.columns??[]),U9=e.computed(()=>{const D=(k.value?.label??d.slug).toLowerCase();return l("Поиск: :label…",{label:D})}),gt=e.ref(null),Ue=e.ref({});async function R9(D,T){await i.setFilter(D,T)}async function j9(D){await i.setSearch(D)}async function jo(){i.search="",await i.clearFilters()}async function qe(D){gt.value=D,await i.load({group_by:D})}function Ac(D){Ue.value=D}const Mt=e.ref([]),Ae=e.ref(null);async function wt(){if(!O.value){Mt.value=[];return}try{const{getAdminClient:D}=await Promise.resolve().then(()=>ue),R=await D().get(`/${d.slug}_views/list`);Mt.value=R.data??[]}catch{Mt.value=[]}}async function O9(D){Ae.value=D.id;const T=D.state;i.search=T.search??"",i.filters={...T.filters??{}},i.sortKey=T.sort?.key??null,i.sortDirection=T.sort?.direction??null,gt.value=T.group_by??null,Ue.value={...T.columns??{}},i.meta.page=1,await Wo()}async function U(){Ae.value=null,i.search="",i.filters={},i.sortKey=null,i.sortDirection=null,gt.value=null,Ue.value={},i.meta.page=1,await Wo()}async function W(D,T){if(T?.stopPropagation(),!!D.owned&&await I.confirm(l("Удалить представление «:name»?",{name:D.name}),!0))try{p.start();const{getAdminClient:R}=await Promise.resolve().then(()=>ue);await R().post(`/${d.slug}_views/delete`,{id:D.id}),Ae.value===D.id&&(Ae.value=null),await wt()}catch(R){typeof console<"u"&&console.error("[admin] delete-view failed:",R)}finally{p.end()}}async function G(D){try{p.start();const{getAdminClient:T}=await Promise.resolve().then(()=>ue),j=await T().post(`/${d.slug}_views/create`,{name:D,state:{search:i.search,filters:i.filters,sort:{key:i.sortKey,direction:i.sortDirection},group_by:gt.value,columns:Ue.value}});j?.view&&(Ae.value=j.view.id),await wt(),K.success(c("admin.resource.view_saved","Представление сохранено."))}catch(T){typeof console<"u"&&console.error("[admin] save-view failed:",T),K.error(r("Не удалось сохранить view. Возможно, недостаточно прав либо ресурс не зарегистрирован."))}finally{p.end()}}const Z=e.computed(()=>{const D=i.meta.total;return D===0?"":l(":shown из :total :word",{shown:i.items.length,total:D,word:re(D)})});function re(D){const T=new Intl.PluralRules(h.formatLocale()).select(D);return r(T==="one"?"запись":T==="few"||T==="two"?"записи":"записей")}const ce=e.ref(null),Le=e.ref(0);let et=null;e.watch(()=>i.loading,(D,T)=>{T&&!D&&i.error===null&&(ce.value=Date.now())}),e.onMounted(()=>{et=setInterval(()=>{Le.value+=1},3e4)}),e.onUnmounted(()=>{et!==null&&clearInterval(et)});const zc=e.computed(()=>{if(Le.value,ce.value===null)return null;const D=Math.floor((Date.now()-ce.value)/1e3);if(D<60)return null;const T=Math.floor(D/60);if(T<60)return r("обновлено :min мин назад").replace(":min",String(T));const R=Math.floor(T/60);return R<24?r("обновлено :hr ч назад").replace(":hr",String(R)):r("обновлено более суток назад")}),Oo=e.computed(()=>{if(Ae.value!==null){const T=Mt.value.find(R=>R.id===Ae.value);if(T)return T.name}const D=k.value?.label??d.slug;return`${r("Все")} ${D.toLowerCase()}`});async function Wo(){p.start();try{await i.load()}catch{}finally{p.end()}}e.onMounted(async()=>{i.setSlug(d.slug),u.manifest===null&&await u.load().catch(()=>{}),wt(),await Wo()}),e.watch(()=>d.slug,async(D,T)=>{D!==T&&(i.setSlug(D),Ae.value=null,wt(),await Wo())});async function EI(D){await e.nextTick(),await i.setSort(D,i.sortDirection)}async function NI(D){await e.nextTick(),await i.setSort(i.sortKey,D)}function DI(D){i.selection=D}async function FI(D){await i.setPage(D)}function Ee(D){const T=D?.id??D?.key;return typeof T=="string"||typeof T=="number"?T:null}function $I(D){return Ee(ie(D)??{})??""}const HI=["a[href]","button","input","select","textarea","label","summary",'[contenteditable]:not([contenteditable="false"])','[role="button"]','[role="checkbox"]','[role="switch"]','[role="link"]','[role="menuitem"]','[role="option"]','[role="combobox"]',".admin-inline-edit--editable",".admin-inline-edit__input"].join(",");let W9=null;function PI(D){W9=D.target}function TI(D){if(!(D instanceof Element))return!1;const T=D.closest(HI);return T!==null&&T.closest("tr")!==null}function UI(D){const T=W9;if(W9=null,TI(T))return;const R=typeof window<"u"?window.getSelection():null;if(R&&!R.isCollapsed&&R.toString().trim()!=="")return;s("row-click",D);const j=Ee(D);j!==null&&y.push({name:`admin.resource.${d.slug}.view`,params:{id:String(j)}})}function RI(D,T){T?.stopPropagation();const R=Ee(D);R!==null&&y.push({name:`admin.resource.${d.slug}.view`,params:{id:String(R)}})}function jI(D,T){T?.stopPropagation();const R=Ee(D);R!==null&&y.push({name:`admin.resource.${d.slug}.edit`,params:{id:String(R)}})}async function OI(D,T){T?.stopPropagation();const R=Ee(D);if(R!==null&&await I.confirm(c("admin.resource.delete_confirm","Удалить запись?"),!0))try{p.start();const{getAdminClient:j}=await Promise.resolve().then(()=>ue);await j().post(`/${d.slug}/delete`,{id:R}),await i.load().catch(()=>{}),K.success(c("admin.resource.deleted","Запись удалена."))}catch(j){typeof console<"u"&&console.error("[admin] delete failed:",j),K.error(c("admin.resource.delete_failed","Не удалось удалить запись."))}finally{p.end()}}async function WI(D,T){T?.stopPropagation();const R=Ee(D);if(R!==null)try{p.start();const{getAdminClient:j}=await Promise.resolve().then(()=>ue),J=await j().post(`/${d.slug}/replicate`,{id:R});K.success(r("Копия создана."));const se=J?.record?Ee(J.record):null;se!==null&&y.hasRoute(`admin.resource.${d.slug}.edit`)?y.push({name:`admin.resource.${d.slug}.edit`,params:{id:String(se)}}):await i.load().catch(()=>{})}catch(j){typeof console<"u"&&console.error("[admin] replicate failed:",j),K.error(r("Не удалось создать копию."))}finally{p.end()}}function ZI(D){return D.deleted_at!==null&&D.deleted_at!==void 0}async function GI(D,T){T?.stopPropagation();const R=Ee(D);if(R!==null)try{p.start();const{getAdminClient:j}=await Promise.resolve().then(()=>ue);await j().post(`/${d.slug}/restore`,{id:R}),await i.load().catch(()=>{}),K.success(c("admin.resource.restored","Запись восстановлена."))}catch(j){typeof console<"u"&&console.error("[admin] restore failed:",j),K.error(c("admin.resource.restore_failed","Не удалось восстановить запись."))}finally{p.end()}}const tt=e.ref(null),xt=e.ref(null),Ec=e.ref("before");function KI(D,T){if(!V.value||!T.dataTransfer){T.preventDefault();return}if(!T.target?.closest('[data-row-drag-handle="true"]')){T.preventDefault();return}tt.value=D,T.dataTransfer.effectAllowed="move",T.dataTransfer.setData("text/plain",String(D))}function XI(D,T){if(!V.value||tt.value===null)return;T.preventDefault();const R=T.currentTarget;if(R){const j=R.getBoundingClientRect();Ec.value=T.clientY<j.top+j.height/2?"before":"after"}xt.value=D}function JI(){tt.value=null,xt.value=null}async function YI(D,T){if(T.preventDefault(),!V.value||tt.value===null)return;const R=tt.value,j=Ec.value==="after"?D+1:D,J=j>R?j-1:j;if(tt.value=null,xt.value=null,R===J)return;const se=[...i.items],[Nc]=se.splice(R,1);se.splice(J,0,Nc),i.items=se;try{p.start();const{getAdminClient:Lr}=await Promise.resolve().then(()=>ue),Z9=Lr(),Dc=se.map($c=>i.rowId($c)),Fc=await Z9.post(`/${d.slug}/reorder`,bV(Dc,i.meta.page,i.meta.per_page));i.items=CV(i.items,Fc?.positions,b.value,i.rowId),K.success(c("admin.resource.reorder_saved","Порядок сохранён."))}catch(Lr){typeof console<"u"&&console.error("[admin] reorder failed:",Lr),K.error(c("admin.resource.reorder_failed","Не удалось сохранить порядок.")),await i.load().catch(()=>{})}finally{p.end()}}async function QI(D,T){T?.stopPropagation();const R=Ee(D);if(R!==null&&await I.confirm(c("admin.resource.force_delete_confirm","Удалить запись НАВСЕГДА? Действие необратимо."),!0))try{p.start();const{getAdminClient:j}=await Promise.resolve().then(()=>ue);await j().post(`/${d.slug}/forceDelete`,{id:R}),await i.load().catch(()=>{}),K.success(c("admin.resource.force_deleted","Запись удалена навсегда."))}catch(j){typeof console<"u"&&console.error("[admin] force-delete failed:",j),K.error(c("admin.resource.force_delete_failed","Не удалось удалить запись навсегда."))}finally{p.end()}}async function Ow(){await i.load().catch(()=>{})}return(D,T)=>k.value?.view_mode==="tree"?(e.openBlock(),e.createBlock(xV,{key:0,slug:t.slug,title:t.title,subtitle:t.subtitle},null,8,["slug","title","subtitle"])):(e.openBlock(),e.createElementBlock("section",SV,[e.createElementVNode("header",LV,[e.createElementVNode("div",BV,[e.createElementVNode("div",_V,[e.createElementVNode("h1",VV,e.toDisplayString(f.value),1),zc.value?(e.openBlock(),e.createElementBlock("span",qV,[T[4]||(T[4]=e.createElementVNode("span",{class:"admin-page__live-dot","aria-hidden":"true"},null,-1)),e.createTextVNode(" "+e.toDisplayString(zc.value),1)])):e.createCommentVNode("",!0)]),t.subtitle||Z.value?(e.openBlock(),e.createElementBlock("div",AV,[t.subtitle?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(t.subtitle),1)],64)):e.createCommentVNode("",!0),t.subtitle&&Z.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" · ")],64)):e.createCommentVNode("",!0),Z.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(Z.value),1)],64)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",zV,[e.renderSlot(D.$slots,"actions"),O.value?(e.openBlock(),e.createBlock(e.unref(m.UidMenu),{key:0},{trigger:e.withCtx(()=>[e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"md",class:"admin-page__scope"},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Fo),size:14},null,8,["icon"])]),append:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref($e),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(Oo.value)+" ",1)]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(m.UidMenuItem),{onClick:U},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r("Все"))+" "+e.toDisplayString((k.value?.label??t.slug).toLowerCase()),1)]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Mt.value,R=>(e.openBlock(),e.createBlock(e.unref(m.UidMenuItem),{key:R.id,onClick:j=>O9(R)},{default:e.withCtx(()=>[e.createElementVNode("span",EV,[e.createElementVNode("span",NV,[e.createTextVNode(e.toDisplayString(R.name)+" ",1),R.is_default?(e.openBlock(),e.createElementBlock("span",DV,"default")):e.createCommentVNode("",!0)]),R.owned?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"admin-page__view-delete","aria-label":r("Удалить view"),onClick:e.withModifiers(j=>W(R,j),["stop"])},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(xe),size:12},null,8,["icon"])],8,FV)):e.createCommentVNode("",!0)])]),_:2},1032,["onClick"]))),128))]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(m.UidMenu),null,{trigger:e.withCtx(()=>[e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"md","aria-label":r("Действия"),class:"admin-page__more"},{default:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Ke),size:16},null,8,["icon"])]),_:1},8,["aria-label"])]),default:e.withCtx(()=>[e.createVNode(e.unref(m.UidMenuItem),{onClick:Ow},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r("Обновить")),1)]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Y.value,R=>(e.openBlock(),e.createBlock(e.unref(m.UidMenuItem),{key:R,onClick:j=>z(R)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r("Экспорт"))+" "+e.toDisplayString(Q[R]??R.toUpperCase()),1)]),_:2},1032,["onClick"]))),128)),e.createVNode(mr,{actions:g.value,onRun:_},null,8,["actions"]),e.renderSlot(D.$slots,"header-menu")]),_:3}),ae.value?(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:1,variant:"secondary",size:"md",onClick:F},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(ft),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(r("Импорт")),1)]),_:1})):e.createCommentVNode("",!0),e.createElementVNode("input",{ref_key:"importInput",ref:q,type:"file",class:"admin-page__import-input",accept:".csv,.json,.xlsx,.xls,application/json,text/csv",onChange:H},null,544),x.value&&S.value?(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:2,"data-testid":"resource-create",variant:"primary",size:"md",onClick:T[0]||(T[0]=R=>D.$router.push({name:x.value}))},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(me),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(t.createLabel??r("Создать")),1)]),_:1})):e.createCommentVNode("",!0)])]),e.unref(i).hasSelection?(e.openBlock(),e.createElementBlock("div",$V,[e.createElementVNode("span",HV,[e.createTextVNode(e.toDisplayString(r("Выбрано"))+" ",1),e.createElementVNode("b",null,e.toDisplayString(e.unref(i).selectedCount),1)]),T[5]||(T[5]=e.createElementVNode("span",{class:"admin-bulk-toolbar__divider"},null,-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(M.value,R=>(e.openBlock(),e.createBlock(Lw,{key:R.name,action:R,size:"sm","default-variant":"ghost","is-disabled":C,onRun:_},null,8,["action"]))),128)),e.createVNode(e.unref(m.UidButton),{size:"sm",variant:"ghost",onClick:T[1]||(T[1]=R=>z("csv"))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r("Экспорт")),1)]),_:1}),A.value?(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:0,size:"sm",variant:"danger",loading:B.value,onClick:E},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r("Удалить")),1)]),_:1},8,["loading"])):e.createCommentVNode("",!0),T[6]||(T[6]=e.createElementVNode("span",{class:"admin-bulk-toolbar__spacer"},null,-1)),e.createVNode(e.unref(m.UidButton),{size:"sm",variant:"ghost",onClick:e.unref(i).clearSelection},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r("Снять выделение")),1)]),_:1},8,["onClick"])])):Se.value?(e.openBlock(),e.createBlock(wb,{key:1,search:e.unref(i).search,"search-placeholder":U9.value,filters:vt.value,values:e.unref(i).filters,columns:Ro.value,"group-by":gt.value,"column-visibility":Ue.value,"enable-saved-views":O.value,"onUpdate:search":j9,onApplyFilter:R9,onReset:jo,onGroupBy:qe,onColumnsVisibility:Ac,onSaveView:G},{extra:e.withCtx(()=>[e.renderSlot(D.$slots,"filters",{filters:e.unref(i).filters,setFilter:e.unref(i).setFilter})]),_:3},8,["search","search-placeholder","filters","values","columns","group-by","column-visibility","enable-saved-views"])):e.createCommentVNode("",!0),e.unref(i).loading&&e.unref(i).items.length===0||e.unref(i).hasError||e.unref(i).isEmpty?(e.openBlock(),e.createElementBlock("div",{key:2,class:e.normalizeClass(["admin-resource-index__panel",{"admin-resource-index__panel--joined":Se.value||e.unref(i).hasSelection}]),"data-testid":"resource-state"},[e.unref(i).loading&&e.unref(i).items.length===0?(e.openBlock(),e.createElementBlock("div",PV,[e.unref(i).slowLoading?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},e.renderList(8,R=>e.createVNode(e.unref(m.UidSkeleton),{key:R,height:"40px"})),64)):e.createCommentVNode("",!0)])):e.unref(i).hasError?(e.openBlock(),e.createBlock(e.unref(m.UidErrorState),{key:1,title:r("Не удалось загрузить данные"),description:e.unref(i).error?.message??r("Попробуйте обновить страницу."),class:"admin-resource-index__state"},{actions:e.withCtx(()=>[e.createVNode(e.unref(m.UidButton),{variant:"primary",onClick:Ow},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r("Обновить")),1)]),_:1})]),_:1},8,["title","description"])):qc.value?(e.openBlock(),e.createBlock(e.unref(m.UidEmptyState),{key:2,title:r("Ничего не найдено"),description:e.unref(i).search!==""?l("По запросу «:query» ничего не найдено. Измените запрос или сбросьте поиск и фильтры.",{query:e.unref(i).search}):r("Ни одна запись не подходит под фильтры. Измените их или сбросьте."),class:"admin-resource-index__state","data-testid":"resource-no-results"},{actions:e.withCtx(()=>[e.createVNode(e.unref(m.UidButton),{variant:"secondary","data-testid":"resource-reset-filters",onClick:jo},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Je),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(r("Сбросить поиск и фильтры")),1)]),_:1})]),_:1},8,["title","description"])):(e.openBlock(),e.createBlock(e.unref(m.UidEmptyState),{key:3,title:r("Пока пусто"),description:x.value&&S.value?r("Создайте первую запись."):r("Здесь пока нет записей."),class:"admin-resource-index__state","data-testid":"resource-empty"},{actions:e.withCtx(()=>[x.value&&S.value?(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:0,variant:"primary",onClick:T[2]||(T[2]=R=>D.$router.push({name:x.value}))},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(me),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(t.createLabel??r("Создать")),1)]),_:1})):e.createCommentVNode("",!0)]),_:1},8,["title","description"]))],2)):(e.openBlock(),e.createElementBlock("div",{key:3,class:"admin-resource-index__table",onClickCapture:PI},[e.createVNode(e.unref(m.UidTable),{columns:ee.value,data:e.unref(i).items,"sort-key":e.unref(i).sortKey,"sort-direction":e.unref(i).sortDirection,selectable:"","selection-fixed":"",selection:e.unref(i).selection,"row-key":R=>e.unref(i).rowId(R),"onUpdate:sortKey":EI,"onUpdate:sortDirection":NI,"onUpdate:selection":DI,onRowClick:UI},e.createSlots({_:2},[e.renderList(ee.value,R=>({name:R.key,fn:e.withCtx(j=>[R.key===nx?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["admin-resource-index__row-drag",{"admin-resource-index__row-drag--drop-before":xt.value!==null&&xt.value===e.unref(i).items.indexOf(ie(j)??{})&&Ec.value==="before","admin-resource-index__row-drag--drop-after":xt.value!==null&&xt.value===e.unref(i).items.indexOf(ie(j)??{})&&Ec.value==="after","admin-resource-index__row-drag--ghost":tt.value!==null&&tt.value===e.unref(i).items.indexOf(ie(j)??{})}]),"data-row-drag-handle":"true","data-disabled":V.value?void 0:"true",draggable:V.value,title:V.value?r("Перетащить"):r("Сбросьте сортировку, чтобы менять порядок"),onDragstart:J=>KI(e.unref(i).items.indexOf(ie(j)??{}),J),onDragover:J=>XI(e.unref(i).items.indexOf(ie(j)??{}),J),onDragend:JI,onDrop:J=>YI(e.unref(i).items.indexOf(ie(j)??{}),J)},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Qo),size:14},null,8,["icon"])],42,TV)):R.key===ax?(e.openBlock(),e.createElementBlock("div",UV,[e.createElementVNode("button",{type:"button",class:"admin-resource-index__row-action",title:r("Просмотр"),onClick:e.withModifiers(J=>RI(ie(j)??{},J),["stop"])},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Jo),size:16},null,8,["icon"])],8,RV),ZI(ie(j)??{})?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("button",{type:"button",class:"admin-resource-index__row-action",title:r("Восстановить"),onClick:e.withModifiers(J=>GI(ie(j)??{},J),["stop"])},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Je),size:16},null,8,["icon"])],8,ZV),e.createElementVNode("button",{type:"button",class:"admin-resource-index__row-action admin-resource-index__row-action--danger",title:r("Удалить навсегда"),onClick:e.withModifiers(J=>QI(ie(j)??{},J),["stop"])},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(xe),size:16},null,8,["icon"])],8,GV)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[A.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"admin-resource-index__row-action",title:r("Редактировать"),onClick:e.withModifiers(J=>jI(ie(j)??{},J),["stop"])},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(He),size:16},null,8,["icon"])],8,jV)):e.createCommentVNode("",!0),X.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"admin-resource-index__row-action","data-testid":"row-replicate",title:r("Создать копию"),onClick:e.withModifiers(J=>WI(ie(j)??{},J),["stop"])},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(kt),size:16},null,8,["icon"])],8,OV)):e.createCommentVNode("",!0),A.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"admin-resource-index__row-action admin-resource-index__row-action--danger",title:r("Удалить"),onClick:e.withModifiers(J=>OI(ie(j)??{},J),["stop"])},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(xe),size:16},null,8,["icon"])],8,WV)):e.createCommentVNode("",!0)],64)),v.value.length>0?(e.openBlock(),e.createElementBlock("span",{key:2,class:"admin-resource-index__row-menu-wrap",onClick:T[3]||(T[3]=e.withModifiers(()=>{},["stop"]))},[e.createVNode(e.unref(m.UidMenu),null,{trigger:e.withCtx(()=>[e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"sm",class:"admin-resource-index__row-menu",icon:e.unref(it),"aria-label":r("Действия"),"data-testid":"row-actions-menu"},null,8,["icon","aria-label"])]),default:e.withCtx(()=>[e.createVNode(mr,{actions:v.value,onRun:J=>L(J,ie(j)??{})},null,8,["actions","onRun"])]),_:2},1024)])):e.createCommentVNode("",!0)])):e.renderSlot(D.$slots,`cell-${R.key}`,{row:ie(j)},()=>[he(R.key)?(e.openBlock(),e.createBlock(xb,{key:0,"resource-slug":t.slug,"row-id":$I(j),column:R.key,value:(ie(j)??{})[R.key],editable:!0,"input-type":Me(R.key).as,options:Me(R.key).options,"row-override":(ie(j)??{})._editable??{},onSaved:J=>{const se=ie(j);se&&(se[R.key]=J)}},{default:e.withCtx(()=>[e.createVNode(vr,{value:(ie(j)??{})[R.key],preset:Te.value[R.key]?.preset,meta:Te.value[R.key]?.meta,row:ie(j)},null,8,["value","preset","meta","row"])]),_:2},1032,["resource-slug","row-id","column","value","input-type","options","row-override","onSaved"])):(e.openBlock(),e.createBlock(vr,{key:1,value:(ie(j)??{})[R.key],preset:Te.value[R.key]?.preset,meta:Te.value[R.key]?.meta,row:ie(j)},null,8,["value","preset","meta","row"]))],void 0,2)])}))]),1032,["columns","data","sort-key","sort-direction","selection","row-key"])],32)),!e.unref(i).loading&&!e.unref(i).hasError&&!e.unref(i).isEmpty?(e.openBlock(),e.createElementBlock("footer",KV,[e.createVNode(e.unref(m.UidPagination),{"model-value":e.unref(i).meta.page,total:e.unref(i).meta.total,"per-page":e.unref(i).meta.per_page,"onUpdate:modelValue":FI},null,8,["model-value","total","per-page"])])):e.createCommentVNode("",!0),e.createVNode(P9,{runner:e.unref(I)},null,8,["runner"])]))}});function bb(t,a){for(const o of t){const r=o;if(r.kind==="field"&&r.name===a)return r;const l=r.items??r.children;if(Array.isArray(l)){const c=bb(l,a);if(c!==null)return c}}return null}function XV(t,a){if(a===null)return null;const o=bb(t,"status"),l=o?.attributes?.options??o?.options;if(Array.isArray(l)){const c=l.find(d=>String(d?.value)===a);if(typeof c?.label=="string")return c.label}else if(l!==null&&typeof l=="object"){const c=l[a];if(typeof c=="string")return c}return a}const Mc=e.defineComponent({__name:"RowsLayout",props:{items:{},gap:{default:"var(--uid-space-md)"}},setup(t){const a=t;function o(l){const c=l,d=c.span??(c.attributes&&c.attributes.span),s=Number(d);return Number.isFinite(s)&&s>=1&&s<=12?s:0}const r=e.computed(()=>a.items.some(l=>o(l)>0));return(l,c)=>r.value?(e.openBlock(),e.createBlock(e.unref(m.UidGrid),{key:0,cols:12,"col-gap":t.gap,"row-gap":"var(--uid-space-lg)"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(d,s)=>(e.openBlock(),e.createElementBlock("div",{key:s,style:e.normalizeStyle({gridColumn:`span ${o(d)||12}`})},[e.createVNode(Ie,{node:d},null,8,["node"])],4))),128))]),_:1},8,["col-gap"])):(e.openBlock(),e.createBlock(e.unref(m.UidStack),{key:1,direction:"column",gap:t.gap,align:"stretch"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(d,s)=>(e.openBlock(),e.createBlock(Ie,{key:s,node:d},null,8,["node"]))),128))]),_:1},8,["gap"]))}}),JV={class:"admin-page admin-resource-form"},YV={class:"admin-page__hd"},QV={class:"admin-page__title-wrap"},eq={class:"admin-page__title"},tq={class:"admin-page__actions"},aq={class:"admin-resource-form__notfound-title"},nq={class:"admin-resource-form__notfound-hint"},oq={key:1,class:"admin-resource-form__loading"},rq={key:2,class:"admin-resource-form__savebar"},lq={class:"admin-resource-form__savebar-hint"},nw=e.defineComponent({__name:"ResourceFormPage",props:{slug:{},id:{default:null},indexRouteName:{default:null}},setup(t){const a=t,o=Cc(),r=ke(),l=le.useRouter(),c=le.useRoute();function d(){const _={};for(const[L,B]of Object.entries(c.query))if(B!=null){if(Array.isArray(B)){_[L]=B;continue}/^-?\d+$/.test(B)?_[L]=parseInt(B,10):_[L]=B}return _}const s=te.provideFormState(o.state,o.errors,a.id!==null&&a.id!==void 0?"update":"create");Aw({url:()=>`/${a.slug}/listener`,extra:()=>o.isCreate?{context:"create"}:{context:"update",id:a.id}}),e.watch(()=>o.errors,_=>{s.setErrors({..._})});const i=e.computed(()=>r.getResource(a.slug)),u=e.computed(()=>!o.isCreate&&o.hasError&&o.error instanceof ve&&o.error.status===404),p=e.computed(()=>{const _=i.value;return o.isCreate&&_?.create_fields?_.create_fields:_?.fields??[]});function y(_,L){for(const B of _){const E=B;Array.isArray(E.items)&&y(E.items,L),!(E.kind!=="field"||typeof E.name!="string")&&(E.defaultValue===null||E.defaultValue===void 0||(L[E.name]=E.defaultValue))}}function k(){const _={};y(p.value,_),Object.keys(_).length>0&&o.seedDefaults(_)}const f=e.computed(()=>o.isCreate?`${h.trSafe("Создать")}: ${i.value?.label??a.slug}`:o.recordTitle&&o.recordTitle!==`#${a.id}`?o.recordTitle:`${i.value?.label??a.slug}: ${h.tRaw("запись #:id",{id:a.id??""})}`),x=e.computed(()=>{const _=o.state.status;return typeof _=="string"?_:null}),w=e.computed(()=>XV(p.value,x.value)),g=e.computed(()=>{switch(x.value){case"published":return"success";case"review":case"draft":return"warning";case"archived":return"danger";default:return"default"}});e.onMounted(async()=>{r.manifest===null&&await r.load().catch(()=>{}),a.id!==null&&a.id!==void 0?await o.load(a.slug,a.id,"edit").catch(()=>{}):(o.prepareCreate(a.slug,d()),k())}),e.watch(()=>[a.slug,a.id],async([_,L])=>{L!=null?await o.load(_,L,"edit").catch(()=>{}):(o.prepareCreate(_,d()),k())});async function M(){const _=o.isCreate;try{const L=await o.save();K.success(_?h.trSafe("Запись создана."):h.trSafe("Изменения сохранены.")),_&&l.push({name:`admin.resource.${a.slug}.edit`,params:{id:L}}).catch(()=>{})}catch{}}const v=e.computed(()=>{if(a.indexRouteName)return a.indexRouteName;const _=r.getResource(a.slug)?.parent_slug;return _?`admin.resource.${_}.index`:`admin.resource.${a.slug}.index`});async function C(){await Pe({message:h.trSafe("Удалить запись?"),destructive:!0})&&(await o.destroy().catch(()=>{}),o.hasError||(K.success(h.trSafe("Запись удалена.")),l.push({name:v.value}).catch(()=>{})))}async function I(){o.isDirty&&!await Pe(h.trSafe("Несохранённые изменения будут потеряны. Продолжить?"))||l.push({name:v.value}).catch(()=>{})}return(_,L)=>(e.openBlock(),e.createElementBlock("section",JV,[e.createElementVNode("header",YV,[e.createElementVNode("div",QV,[e.createElementVNode("a",{class:"admin-resource-form__back",onClick:I},e.toDisplayString(e.unref(h.trSafe)("← Назад")),1),e.createElementVNode("h1",eq,e.toDisplayString(f.value),1),w.value?(e.openBlock(),e.createBlock(e.unref(m.UidBadge),{key:0,variant:g.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(w.value),1)]),_:1},8,["variant"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",tq,[e.createVNode(e.unref(m.UidButton),{variant:"ghost",disabled:e.unref(o).saving||e.unref(o).deleting,onClick:I},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Отмена")),1)]),_:1},8,["disabled"]),e.unref(o).isEdit&&!u.value?(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:0,variant:"danger",disabled:e.unref(o).saving||e.unref(o).deleting,loading:e.unref(o).deleting,"data-testid":"form-delete",onClick:C},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Удалить")),1)]),_:1},8,["disabled","loading"])):e.createCommentVNode("",!0),u.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:1,variant:"primary",disabled:e.unref(o).saving||e.unref(o).loading,loading:e.unref(o).saving,"data-testid":"form-save",onClick:M},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(o).isCreate?e.unref(h.trSafe)("Создать"):e.unref(h.trSafe)("Сохранить")),1)]),_:1},8,["disabled","loading"]))])]),u.value?(e.openBlock(),e.createBlock(e.unref(m.UidCard),{key:0,padding:"lg",class:"admin-resource-form__notfound"},{default:e.withCtx(()=>[e.createElementVNode("p",aq,e.toDisplayString(e.unref(h.trSafe)("Запись не найдена")),1),e.createElementVNode("p",nq,e.toDisplayString(e.unref(h.trSafe)("Возможно, она была удалена. Вернитесь к списку.")),1),e.createVNode(e.unref(m.UidButton),{variant:"primary",size:"sm",onClick:I},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("← К списку")),1)]),_:1})]),_:1})):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.unref(o).hasError?(e.openBlock(),e.createBlock(e.unref(m.UidAlert),{key:0,variant:"danger",class:"admin-resource-form__alert",role:"alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(o).error?.message??e.unref(h.trSafe)("Не удалось сохранить запись")),1)]),_:1})):e.createCommentVNode("",!0),e.unref(o).loading?(e.openBlock(),e.createElementBlock("div",oq,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(6,B=>e.createVNode(e.unref(m.UidSkeleton),{key:B,height:"40px"})),64))])):(e.openBlock(),e.createBlock(e.unref(m.UidCard),{key:2,padding:"md",class:"admin-resource-form__body"},{default:e.withCtx(()=>[e.createVNode(Mc,{items:p.value},null,8,["items"])]),_:1}))],64)),e.unref(o).isDirty&&!e.unref(o).loading&&!u.value?(e.openBlock(),e.createElementBlock("div",rq,[e.createElementVNode("span",lq,e.toDisplayString(e.unref(h.trSafe)("Есть несохранённые изменения")),1),e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"sm",onClick:I},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Отмена")),1)]),_:1}),e.createVNode(e.unref(m.UidButton),{variant:"primary",size:"sm",loading:e.unref(o).saving,disabled:e.unref(o).saving,onClick:M},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Сохранить")),1)]),_:1},8,["loading","disabled"])])):e.createCommentVNode("",!0)]))}}),Cr=$9(),cq=Cr.register,wc=Cr.get,iq=Cr.has,dq=Cr.list,sq=Cr.clear,Ib=Cr.registerBundle,Cb=e.defineComponent({__name:"UnknownEntry",props:{type:{},name:{}},setup(t){return(a,o)=>(e.openBlock(),e.createBlock(e.unref(m.UidAlert),{variant:"warning"},{title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.tRaw)("Неизвестный тип элемента: :type",{type:t.type})),1)]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Зарегистрируйте через"))+" ",1),e.createElementVNode("code",null,"registerInfolistEntry('"+e.toDisplayString(t.type)+"', YourComponent)",1),o[0]||(o[0]=e.createTextVNode(". ",-1))]),_:1}))}}),uq={key:0,class:"admin-infolist-entry"},hq={class:"admin-infolist-entry__label"},pq={key:2,class:"admin-infolist-rows"},yq={key:3,class:"admin-infolist-cols"},kq={key:4,class:"admin-infolist-section"},mq={key:0,class:"admin-infolist-section__hd"},fq={key:0,class:"admin-infolist-section__title"},vq={key:1,class:"admin-infolist-section__description"},gq={class:"admin-infolist-section__body"},Mq={key:5,class:"admin-infolist-tabs"},wq={class:"admin-infolist-tabs__list",role:"tablist"},xq={class:"admin-infolist-tabs__panel"},xc=e.defineComponent({__name:"InfolistRenderer",props:{node:{}},setup(t){const a=t,o=new Set(["rows","columns","section","block","tabs"]),r=e.computed(()=>{if(a.node.kind==="entry"){const k=wc(a.node.type);return k?{kind:"entry",component:k}:{kind:"unknown"}}if(a.node.kind==="layout")return o.has(a.node.type)?{kind:"layout",layoutType:a.node.type}:{kind:"unknown"};if(o.has(a.node.type))return{kind:"layout",layoutType:a.node.type};const y=wc(a.node.type);return y?{kind:"entry",component:y}:{kind:"unknown"}}),l=e.computed(()=>{const{type:y,kind:k,items:f,attributes:x,...w}=a.node,g=x??{},{preset:M,format:v,currency:C,decimals:I,..._}=g,L={};return v!==void 0&&(L.format=v),C!==void 0&&(L.currency=C),I!==void 0&&(L.decimals=I),{...w,..._,preset:M,meta:L}}),c=e.computed(()=>a.node.items??[]),d=e.computed(()=>a.node.title??null),s=e.computed(()=>be(a.node.icon)),i=e.computed(()=>a.node.description??null),u=e.computed(()=>{const y=a.node.active;return typeof y=="number"?y:0}),p=e.computed(()=>a.node.items??[]);return(y,k)=>{const f=e.resolveComponent("InfolistRenderer",!0);return r.value.kind==="entry"&&t.node.label?(e.openBlock(),e.createElementBlock("div",uq,[e.createElementVNode("span",hq,e.toDisplayString(t.node.label),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.value.component),e.normalizeProps(e.guardReactiveProps(l.value)),null,16))])):r.value.kind==="entry"?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.value.component),e.normalizeProps(e.mergeProps({key:1},l.value)),null,16)):r.value.kind==="layout"&&r.value.layoutType==="rows"?(e.openBlock(),e.createElementBlock("div",pq,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(x,w)=>(e.openBlock(),e.createBlock(f,{key:w,node:x},null,8,["node"]))),128))])):r.value.kind==="layout"&&r.value.layoutType==="columns"?(e.openBlock(),e.createElementBlock("div",yq,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(x,w)=>(e.openBlock(),e.createElementBlock("div",{key:w,class:"admin-infolist-cols__item",style:e.normalizeStyle({gridColumn:`span ${typeof x.span=="number"?x.span:Math.max(1,Math.floor(12/c.value.length))}`})},[e.createVNode(f,{node:x},null,8,["node"])],4))),128))])):r.value.kind==="layout"&&(r.value.layoutType==="section"||r.value.layoutType==="block")?(e.openBlock(),e.createElementBlock("section",kq,[d.value||i.value?(e.openBlock(),e.createElementBlock("header",mq,[d.value?(e.openBlock(),e.createElementBlock("h3",fq,[s.value?(e.openBlock(),e.createBlock(e.unref(m.UidIcon),{key:0,icon:s.value,size:16,class:"admin-infolist-section__icon"},null,8,["icon"])):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(d.value),1)])):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createElementBlock("p",vq,e.toDisplayString(i.value),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",gq,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(x,w)=>(e.openBlock(),e.createBlock(f,{key:w,node:x},null,8,["node"]))),128))])])):r.value.kind==="layout"&&r.value.layoutType==="tabs"?(e.openBlock(),e.createElementBlock("div",Mq,[e.createElementVNode("ul",wq,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,(x,w)=>(e.openBlock(),e.createElementBlock("li",{key:x.key??w,class:e.normalizeClass(["admin-infolist-tabs__tab",{"admin-infolist-tabs__tab--active":w===u.value}])},e.toDisplayString(x.label),3))),128))]),e.createElementVNode("div",xq,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value[u.value]?.items??[],(x,w)=>(e.openBlock(),e.createBlock(f,{key:w,node:x},null,8,["node"]))),128))])])):(e.openBlock(),e.createBlock(Cb,{key:6,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}}),bq={class:"admin-audit-timeline"},Iq={class:"admin-audit-timeline__title"},Cq={key:0,class:"admin-audit-timeline__loading"},Sq={key:1,class:"admin-audit-timeline__error"},Lq={key:2,class:"admin-audit-timeline__empty"},Bq={key:3,class:"admin-audit-timeline__list"},_q={class:"admin-audit-timeline__icon","aria-hidden":"true"},Vq={class:"admin-audit-timeline__body"},qq={class:"admin-audit-timeline__row"},Aq={class:"admin-audit-timeline__actor"},zq={class:"admin-audit-timeline__verb"},Eq={class:"admin-audit-timeline__when"},Nq={key:0,class:"admin-audit-timeline__diff"},Dq={class:"admin-audit-timeline__diff-field"},Fq={class:"admin-audit-timeline__diff-values"},$q={class:"admin-audit-timeline__diff-after"},Hq={key:1,class:"admin-audit-timeline__diff-before"},Pq={class:"admin-audit-timeline__diff-before"},Tq={class:"admin-audit-timeline__diff-after"},Uq={key:1,class:"admin-audit-timeline__detail"},Sb=e.defineComponent({__name:"AuditTimeline",props:{subjectType:{},subjectId:{},limit:{default:null}},setup(t){const a=t,o=e.ref([]),r=e.ref(!1),l=e.ref(null);async function c(){if(!a.subjectType||a.subjectType===""){o.value=[],r.value=!1,l.value=null;return}r.value=!0,l.value=null;try{const{getAdminClient:x}=await Promise.resolve().then(()=>ue),M=(await x().get(`/audit/timeline?subject_type=${encodeURIComponent(a.subjectType)}&subject_id=${encodeURIComponent(String(a.subjectId))}`)).data??[];o.value=a.limit&&a.limit>0?M.slice(0,a.limit):M}catch(x){l.value=x instanceof Error?x:new Error(String(x)),o.value=[]}finally{r.value=!1}}e.onMounted(c),e.watch(()=>[a.subjectType,a.subjectId,a.limit],c);const d=e.computed(()=>o.value.length>0);function s(x){return x==="created"?me:x==="deleted"||x==="destroyed"?xe:x.includes("tag")||x.includes("label")?yr:fe}function i(x){return{created:h.trSafe("создал"),updated:h.trSafe("отредактировал"),deleted:h.trSafe("удалил"),destroyed:h.trSafe("удалил"),restored:h.trSafe("восстановил"),published:h.trSafe("опубликовал")}[x]??x}function u(x){const w=new Date(x).getTime();if(Number.isNaN(w))return"";const g=(Date.now()-w)/1e3;return g<60?`${Math.max(1,Math.floor(g))} ${h.trSafe("сек назад")}`:g<3600?`${Math.floor(g/60)} ${h.trSafe("мин назад")}`:g<86400?`${Math.floor(g/3600)} ${h.trSafe("ч назад")}`:g<86400*30?`${Math.floor(g/86400)} ${h.trSafe("д назад")}`:new Date(x).toLocaleDateString(h.formatLocale())}function p(x){return!!x.diff&&x.diff.length>0}function y(x){return p(x)?"":x.summary??""}const k=/^(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?$/;function f(x){if(x==null)return"∅";if(typeof x=="boolean")return x?h.trSafe("Да"):h.trSafe("Нет");if(x===0)return h.trSafe("Нет");if(x===1)return h.trSafe("Да");if(typeof x=="string"){const w=x.match(k);return w?`${w[1]} ${w[2]}`:x.length>40?`${x.slice(0,40)}…`:x}if(typeof x=="object")try{return JSON.stringify(x)}catch{return"[object]"}return String(x)}return(x,w)=>(e.openBlock(),e.createElementBlock("section",bq,[e.createElementVNode("h2",Iq,e.toDisplayString(e.unref(h.trSafe)("История изменений")),1),r.value?(e.openBlock(),e.createElementBlock("div",Cq,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(3,g=>e.createVNode(e.unref(m.UidSkeleton),{key:g,height:"48px"})),64))])):l.value?(e.openBlock(),e.createElementBlock("div",Sq,e.toDisplayString(e.unref(h.tRaw)("Не удалось загрузить историю: :reason",{reason:l.value.message})),1)):d.value?(e.openBlock(),e.createElementBlock("ol",Bq,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,g=>(e.openBlock(),e.createElementBlock("li",{key:g.id,class:"admin-audit-timeline__item"},[e.createElementVNode("span",_q,[e.createVNode(e.unref(m.UidIcon),{icon:s(g.event),size:14},null,8,["icon"])]),e.createElementVNode("div",Vq,[e.createElementVNode("div",qq,[e.createVNode(e.unref(m.UidAvatar),{name:g.actor?.name??"?",alt:g.actor?.name??e.unref(h.trSafe)("Неизвестный"),size:"xs"},null,8,["name","alt"]),e.createElementVNode("span",Aq,e.toDisplayString(g.actor?.name??e.unref(h.trSafe)("Система")),1),e.createElementVNode("span",zq,e.toDisplayString(i(g.event)),1),e.createElementVNode("span",Eq,e.toDisplayString(u(g.created_at)),1)]),p(g)?(e.openBlock(),e.createElementBlock("ul",Nq,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.diff,M=>(e.openBlock(),e.createElementBlock("li",{key:M.field,class:e.normalizeClass(["admin-audit-timeline__diff-row",`admin-audit-timeline__diff-row--${g.event}`])},[e.createElementVNode("span",Dq,e.toDisplayString(M.field),1),e.createElementVNode("span",Fq,[g.event==="created"||g.event==="restored"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[w[0]||(w[0]=e.createElementVNode("span",{class:"admin-audit-timeline__diff-arrow","aria-hidden":"true"},"→",-1)),e.createElementVNode("span",$q,e.toDisplayString(f(M.after)),1)],64)):g.event==="deleted"||g.event==="destroyed"?(e.openBlock(),e.createElementBlock("span",Hq,e.toDisplayString(f(M.before)),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("span",Pq,e.toDisplayString(f(M.before)),1),w[1]||(w[1]=e.createElementVNode("span",{class:"admin-audit-timeline__diff-arrow","aria-hidden":"true"},"→",-1)),e.createElementVNode("span",Tq,e.toDisplayString(f(M.after)),1)],64))])],2))),128))])):y(g)?(e.openBlock(),e.createElementBlock("div",Uq,e.toDisplayString(y(g)),1)):e.createCommentVNode("",!0)])]))),128))])):(e.openBlock(),e.createElementBlock("div",Lq,e.toDisplayString(e.unref(h.trSafe)("Записей в истории пока нет.")),1))]))}}),Rq={class:"admin-page admin-resource-view"},jq={class:"admin-resource-view__hd"},Oq={class:"admin-resource-view__hd-left"},Wq={class:"admin-page__title"},Zq={class:"admin-resource-view__meta"},Gq=["data-variant","data-status"],Kq={class:"admin-resource-view__uid"},Xq={class:"admin-resource-view__hd-right"},Jq={key:1,class:"admin-resource-view__loading"},Yq={key:2,class:"admin-resource-view__grid"},Qq={class:"admin-resource-view__main"},eA={class:"admin-resource-view__card-title"},tA={class:"admin-resource-view__aside"},aA={class:"admin-resource-view__card-title"},nA={class:"admin-resource-view__metrics"},oA={class:"admin-resource-view__metric-label"},rA={class:"admin-resource-view__metric-value"},Lb=e.defineComponent({__name:"ResourceViewPage",props:{slug:{},id:{},editRouteName:{default:void 0},indexRouteName:{default:null},auditSubjectType:{default:null},statusField:{default:"status"},uidPrefix:{default:"#"}},setup(t){const a=t,o=Cc(),r=ke(),l=le.useRouter();Bc(o.state);const c=e.computed(()=>r.getResource(a.slug)),d=e.computed(()=>(c.value?.features??{}).editable!==!1),s=e.computed(()=>c.value?.infolist??c.value?.fields??[]),i=e.computed(()=>a.auditSubjectType!==null?a.auditSubjectType:c.value?.subject_type??null),u=e.computed(()=>{const L=o.state,B=[],E=H=>{if(typeof H!="string"||H==="")return null;const $=new Date(H);return Number.isNaN($.getTime())?null:$.toLocaleString(h.formatLocale(),{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"})},z=E(L.created_at);z&&B.push({label:h.trSafe("Создано"),value:z});const q=E(L.updated_at);q&&q!==z&&B.push({label:h.trSafe("Обновлено"),value:q});const F=typeof L.created_by_name=="string"&&L.created_by_name!==""?L.created_by_name:typeof L.author=="string"?L.author:null;return F&&B.push({label:h.trSafe("Автор"),value:F}),B}),p=e.computed(()=>{if(o.recordTitle&&o.recordTitle!==`#${a.id}`)return o.recordTitle;const L=o.state,B=L.title??L.name??L.label;return typeof B=="string"&&B.length>0?B:`${c.value?.label??a.slug}: ${h.tRaw("запись #:id",{id:a.id})}`}),y=e.computed(()=>c.value?.label??a.slug),k=e.computed(()=>`${a.uidPrefix}${a.id}`),f=e.computed(()=>{const B=o.state[a.statusField];return typeof B=="string"&&B.length>0?B:null}),x={published:"success",active:"success",enabled:"success",draft:"neutral",pending:"warning",review:"warning",archived:"muted",disabled:"muted",inactive:"muted",deleted:"danger",failed:"danger",error:"danger"};function w(L){return x[L.toLowerCase()]??"neutral"}const g=e.computed(()=>Lc(c.value?.actions)),M=H9({ids:()=>[a.id],async execute(L,B){const{getAdminClient:E}=await Promise.resolve().then(()=>ue);return E().post(`/${a.slug}/action`,{key:L.name,ids:[a.id],...B?{payload:B}:{}})},async onSuccess(L,B){const E=B??{};K.success(E.message??h.tRaw("Действие «:action» выполнено.",{action:L.label})),await o.load(a.slug,a.id,"view").catch(()=>{})},onError(L,B){typeof console<"u"&&console.error("[admin] action failed:",B),K.error(h.tRaw("Не удалось выполнить действие «:action».",{action:L.label}))},async refresh(){await o.load(a.slug,a.id,"view").catch(()=>{})}});e.onMounted(async()=>{r.manifest===null&&await r.load().catch(()=>{}),await o.load(a.slug,a.id,"view").catch(()=>{})}),e.watch(()=>[a.slug,a.id],async([L,B])=>{await o.load(L,B,"view").catch(()=>{})});const v=e.computed(()=>{if(a.indexRouteName)return a.indexRouteName;const L=r.getResource(a.slug)?.parent_slug;return L?`admin.resource.${L}.index`:`admin.resource.${a.slug}.index`});function C(){l.push({name:v.value}).catch(()=>{l.push(`/r/${a.slug}`)})}function I(){if(!a.editRouteName){l.push(`/r/${a.slug}/${a.id}/edit`).catch(()=>{});return}l.push({name:a.editRouteName,params:{id:a.id}}).catch(()=>{})}async function _(){await M.confirm(h.trSafe("Удалить запись?"),!0)&&(await o.destroy().catch(()=>{}),o.hasError||(K.success(h.trSafe("Запись удалена.")),l.push({name:v.value}).catch(()=>{})))}return(L,B)=>(e.openBlock(),e.createElementBlock("section",Rq,[e.createElementVNode("header",jq,[e.createElementVNode("div",Oq,[e.createElementVNode("button",{type:"button",class:"admin-resource-view__back",onClick:C},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Nr),size:14},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(y.value),1)]),e.createElementVNode("h1",Wq,e.toDisplayString(p.value),1),e.createElementVNode("div",Zq,[f.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"admin-status-badge","data-variant":w(f.value),"data-status":f.value},[B[0]||(B[0]=e.createElementVNode("span",{class:"admin-status-badge__dot","aria-hidden":"true"},null,-1)),e.createTextVNode(" "+e.toDisplayString(f.value),1)],8,Gq)):e.createCommentVNode("",!0),e.createElementVNode("span",Kq,e.toDisplayString(k.value),1)])]),e.createElementVNode("div",Xq,[d.value?(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:0,variant:"secondary",size:"md",onClick:I},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(He),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Редактировать")),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(m.UidMenu),null,{trigger:e.withCtx(()=>[e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"md","aria-label":e.unref(h.trSafe)("Действия"),class:"admin-page__more"},{default:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Ke),size:16},null,8,["icon"])]),_:1},8,["aria-label"])]),default:e.withCtx(()=>[e.createVNode(mr,{actions:g.value,onRun:e.unref(M).run},null,8,["actions","onRun"]),e.createVNode(e.unref(m.UidMenuItem),{variant:"danger",icon:e.unref(xe),onClick:_},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Удалить")),1)]),_:1},8,["icon"])]),_:1})])]),e.unref(o).hasError?(e.openBlock(),e.createBlock(e.unref(m.UidAlert),{key:0,variant:"danger",class:"admin-resource-view__alert",role:"alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(o).error?.message??e.unref(h.trSafe)("Не удалось загрузить запись")),1)]),_:1})):e.createCommentVNode("",!0),e.unref(o).loading?(e.openBlock(),e.createElementBlock("div",Jq,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(8,E=>e.createVNode(e.unref(m.UidSkeleton),{key:E,height:"24px"})),64))])):(e.openBlock(),e.createElementBlock("div",Yq,[e.createElementVNode("div",Qq,[e.createVNode(e.unref(m.UidCard),{padding:"md",class:"admin-resource-view__card"},{default:e.withCtx(()=>[e.createElementVNode("h2",eA,e.toDisplayString(e.unref(h.trSafe)("Основные данные")),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,(E,z)=>(e.openBlock(),e.createBlock(xc,{key:z,node:E},null,8,["node"]))),128))]),_:1}),e.createVNode(e.unref(m.UidCard),{padding:"md",class:"admin-resource-view__card"},{default:e.withCtx(()=>[e.createVNode(Sb,{"subject-type":i.value,"subject-id":t.id},null,8,["subject-type","subject-id"])]),_:1})]),e.createElementVNode("aside",tA,[u.value.length>0?(e.openBlock(),e.createBlock(e.unref(m.UidCard),{key:0,padding:"md",class:"admin-resource-view__card"},{default:e.withCtx(()=>[e.createElementVNode("h2",aA,e.toDisplayString(e.unref(h.trSafe)("Метрики")),1),e.createElementVNode("dl",nA,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,E=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:E.label},[e.createElementVNode("dt",oA,e.toDisplayString(E.label),1),e.createElementVNode("dd",rA,e.toDisplayString(E.value),1)],64))),128))])]),_:1})):e.createCommentVNode("",!0),e.renderSlot(L.$slots,"sidebar",{record:e.unref(o).state,resource:c.value})])])),e.createVNode(P9,{runner:e.unref(M)},null,8,["runner"])]))}}),lA=[.2,3/8,5/9,2/3],cA=(t,a)=>o=>{const r=4*t+o-4,l="*-04-39?2$%%$%%'$%''%'''%')(%'))%(++'(++'(+.'+-.',/3',33)-/5)-43).36)058*18<+37<+4:<,4:E,5<A-7>C/8@F/:EH/<EK0=FM1?IP2@KS3BNV4DPY5FS\\6HV_6IXb7K[e8N^i9Pam;Rdp<Tgt".charCodeAt(r)-35,c=r>8?l:1,d=a/c|0,s=a%c,i=c-s,u=r>8?d*lA[o]+(t>5)&-2:l,p=d-u;return{t:i*p+s*p+s,o:[[i,p],[s,p+1]],i:u}},iA={min:0,L:0,M:1,Q:2,H:3,max:3},Uo=t=>new Uint8Array(t),Vr=t=>{const a=new Error(`lean-qr error ${t}`);throw a.code=t,a},Rc=t=>"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:".indexOf(t),ow=t=>t.charCodeAt(0),Bb=(...t)=>(a,o)=>t.forEach(r=>r(a,o)),_b=t=>a=>{a.eci!==t&&(a.push(7,4),t<128?a.push(t,8):t<16384?a.push(32768|t,16):a.push(12582912|t,24),a.eci=t)},Nw=t=>(a,o)=>{a.push(4,4),a.push(t.length,8+8*(o>9)),t.forEach(r=>a.push(r,8))},Sr=(t,a,o,r,l=(d,s)=>o(d.length,s),c=r?d=>Bb(_b(r),t(d)):t)=>(c.test=a,c.l=o,c.est=l,c.eci=r&&[r],c),Vb=Sr(t=>(a,o)=>{a.push(1,4),a.push(t.length,10+2*(o>26)+2*(o>9));let r=0;for(;r<t.length-2;r+=3)a.push(+t.slice(r,r+3),10);r<t.length-1?a.push(+t.slice(r),7):r<t.length&&a.push(+t[r],4)},t=>/[0-9]/.test(t),(t,a)=>14+2*(a>26)+2*(a>9)+10*t/3),qb=Sr(t=>(a,o)=>{a.push(2,4),a.push(t.length,9+2*(o>26)+2*(o>9));let r=0;for(;r<t.length-1;r+=2)a.push(45*Rc(t[r])+Rc(t[r+1]),11);r<t.length&&a.push(Rc(t[r]),6)},t=>Rc(t)>=0,(t,a)=>13+2*(a>26)+2*(a>9)+5.5*t),gr=Sr(t=>Nw([...t].map(ow)),t=>ow(t)<128,(t,a)=>12+8*(a>9)+8*t);gr._=!0,gr.u=!0;const Dw=Sr(gr,t=>ow(t)<256,gr.l,3);Dw._=!0;const ox=new TextEncoder,Fw=Sr(t=>Nw(ox.encode(t)),()=>1,0,26,(t,a)=>12+8*(a>9)+8*ox.encode(t).length);Fw._=!0;let rw=()=>{const t=new Map,a=new TextDecoder("sjis"),o=Uo(2);for(let r=0;r<7973;++r)o[0]=r/192+129+64*(r>5951),o[1]=r%192+64,t.set(a.decode(o),r);return t.delete("�"),rw=()=>t,t};const $w=Sr(t=>(a,o)=>{a.push(8,4),a.push(t.length,8+2*(o>26)+2*(o>9));for(const r of t)a.push(rw().get(r),13)},t=>rw().has(t),(t,a)=>12+2*(a>26)+2*(a>9)+13*t);$w._=!0;const Ab=[Vb,qb,gr,Dw,$w,Fw],dA={auto:(t,{modes:a=Ab}={})=>(o,r)=>{const l=a.map((p,y)=>{const k=new Map,f=(x,w)=>(k.has(x)||k.set(x,w(x,r)),k.get(x));return{m:p,h:1<<y,C:p.est("",r),S:p.l?(x,w)=>f(w-x,p.l):(x,w)=>f(t.slice(x,w),p.est)}});let c=[{v:0}],d=0,s=0,i=-1;for(const p of[...t,""]){let y=0;if(p)for(const k of l)k.m.test(p)&&(y|=k.h);if(!p||y!==i){if(i!==-1){const k=new Set(c.map(x=>x.D)),f=[];for(const{m:x,C:w,S:g,h:M}of l)if(i&M){const v=g(d,s);for(const C of x.eci??k)if(!x.u||!C){let I;for(const _ of c)if(_.D===C||x.eci){const L=_.m===x&&_.D===C,B=L?_.V:_,E=x._&&L?_.v+v-w:B.v+12*(B.D!==C)+(L?g(L?_.$:d,s):v);(!I||E<I.v)&&(I={$:L?_.$:d,V:B,m:x,D:C,A:s,v:E})}I&&f.push(I)}}c=f}i=y,d=s}s+=p.length}c.length||Vr(5);const u=[];for(let p=c.reduce((y,k)=>k.v<y.v?k:y);p.m;p=p.V)u.push(p.m(t.slice(p.$,p.A)));u.reverse().forEach(p=>p(o,r))},multi:Bb,eci:_b,bytes:Nw,numeric:Vb,alphaNumeric:qb,ascii:gr,iso8859_1:Dw,shift_jis:$w,utf8:Fw},sA=()=>({F:Uo(2956),I:0,push(t,a){for(let o=a,r=8-(7&this.I);o>0;o-=r,r=8)this.F[this.I>>3]|=t<<r>>o,this.I+=o<r?o:r}}),Y9=(t,a=t*t,o=Uo(a))=>({size:t,K:o,get:(r,l)=>r>=0&&r<t&&!!(1&o[l*t+r]),toString({on:r="##",off:l=" ",lf:c=`
|
|
4
4
|
`,pad:d=4,padX:s=d,padY:i=d}={}){let u="";for(let p=-i;p<t+i;++p){for(let y=-s;y<t+s;++y)u+=this.get(y,p)?r:l;u+=c}return u},toImageData(r,{on:l=[0,0,0],off:c=[0,0,0,0],pad:d=4,padX:s=d,padY:i=d}={}){const u=t+2*s,p=t+2*i,y=r.createImageData(u,p),k=new Uint32Array(y.data.buffer);y.data.set([...l,255]);const f=k[0];y.data.set([...c,255]);const x=k[0];for(let w=0;w<p;++w)for(let g=0;g<u;++g)k[w*u+g]=this.get(g-s,w-i)?f:x;return y},toCanvas(r,l){const c=r.getContext("2d"),d=this.toImageData(c,l);r.width=d.width,r.height=d.height,c.putImageData(d,0,0)},toDataURL({type:r="image/png",scale:l=1,...c}={}){const d=document.createElement("canvas"),s=d.getContext("2d"),i=this.toImageData(s,c);return d.width=i.width*l,d.height=i.height*l,s.putImageData(i,0,0),s.imageSmoothingEnabled=!1,s.globalCompositeOperation="copy",s.drawImage(d,0,0,i.width,i.height,0,0,d.width,d.height),d.toDataURL(r,1)}}),jc=[(t,a)=>1&(t^a),(t,a)=>1&a,t=>t%3,(t,a)=>(t+a)%3,(t,a)=>1&(t/3^a>>1),(t,a)=>(t&a&1)+t*a%3,(t,a)=>(t&a)+t*a%3&1,(t,a)=>(t^a)+t*a%3&1],B9=Uo(511);for(let t=0,a=1;t<255;a=2*a^285*(a>127))B9[B9[a+255]=t++]=a;const zb=t=>B9[t%255],Eb=t=>B9[t+255],uA=(t,a)=>{const o=Uo(t.length+a.length-1);for(let r=0;r<t.length;++r)for(let l=0;l<a.length;++l)o[r+l]^=zb(t[r]+a[l]);return o.map(Eb)},hA=(t,a)=>{const o=Uo(t.length+a.length-1);o.set(t,0);for(let r=0;r<t.length;++r)if(o[r]){const l=Eb(o[r]);for(let c=0;c<a.length;++c)o[r+c]^=zb(a[c]+l)}return o.slice(t.length)},lw=[[0],[0,0]];for(let t=1;t<30;++t)lw.push(uA(lw[t],[0,t]));const pA=(t,a)=>{const o=[[],[]];let r=0,l=0;for(const[d,s]of a.o)for(let i=0;i<d;++i,r+=s){const u=t.slice(r,r+s);o[0].push(u),o[1].push(hA(u,lw[a.i])),l+=s+a.i}const c=Uo(l);l=0;for(const d of o)for(let s=0,i=-1;i<l;++s){i=l;for(const u of d)s<u.length&&(c[l++]=u[s])}return c},Nb=(t,a,o)=>{let r=t<<=o;for(let l=134217728;l>>=1;)r&l&&(r^=a*(l>>o));return r|t},yA=({size:t,K:a},o)=>{const r=(d,s,i,u)=>{for(;i-- >0;d+=t)a.fill(u,d,d+s)},l=(d,s,i)=>{for(let u=0;u++<3;i-=2)r(s*t+d-(i>>1)*(t+1),i,i,2|u)},c=2*((t-13)/(1+(o/7|0))/2+.75|0);if(o>1)for(let d=t-7;d>8;d-=c){for(let s=d;s>8;s-=c)l(d,s,5);d<t-7&&l(d,6,5)}if(o>6)for(let d=Nb(o,7973,12),s=1;s<7;++s)for(let i=12;i-- >9;d>>=1)a[s*t-i]=2|1&d;r(7,2,9,2),r(t-8,8,9,2);for(let d=0;d<t;++d)a[6*t+d]=3^1&d;l(3,3,7),l(t-4,3,7);for(let d=0;d<t;++d)for(let s=d;s<t;++s)a[s*t+d]=a[d*t+s];a[(t-8)*t+8]=3},kA=({size:t,K:a})=>{const o=[];for(let r=t-2,l=t,c=-1;r>=0;r-=2){for(r===5&&(r=4);l+=c,l!==-1&&l!==t;){const d=l*t+r;a[d+1]||o.push(d+1),a[d]||o.push(d)}c*=-1}return o},mA=({K:t},a,o)=>a.forEach((r,l)=>t[r]=o[l>>3]>>(7&~l)&1),fA=({size:t,K:a},o,r,l)=>{for(let d=0;d<t;++d)for(let s=0;s<t;++s){const i=d*t+s;a[i]^=!(o(s,d)||2&a[i])}let c=21522^Nb((1^l)<<3|r,1335,10);for(let d=0;d++<8;c>>=1)a[(d-(d<7))*t+8]=1&c,a[9*t-d]=1&c;for(let d=8;--d,c;c>>=1)a[8*t+d-(d<7)]=1&c,a[(t-d)*t+8]=1&c},vA=({size:t,K:a},o=0,r=0)=>{for(let l=0;l<t;++l){for(let c=0;c<2;++c)for(let d,s=0,i=0,u=2;s<t;++s){const p=1&a[c?l*t+s:s*t+l];r+=p,i=(i>>1|2098176)&(3047517^p-1),2049&i&&(o+=40),p^u&&(d=0),u=p,o+=++d===5?3:d>5}if(l)for(let c=t+l,d=5*a[l-1]^a[l];c<t*t;c+=t){const s=5*a[c-1]^a[c];o+=3*!(1&(d|s)|4&(d^s)),d=s}}return o+10*(10*Math.abs(r/(t*t)-1)|0)},rx=[],cw=(t=Vr(1),{minCorrectionLevel:a=0,maxCorrectionLevel:o=3,minVersion:r=1,maxVersion:l=40,mask:c,trailer:d=60433,...s}={})=>{o<a&&Vr(3),l<r&&Vr(2),typeof t=="string"&&(t=dA.auto(t,s));for(let i=r,u=0;i<=l;++i){let p=rx[i];p||(rx[i]=p=Y9(4*i+17),yA(p,i),p.p=kA(p));const y=cA(i,p.p.length>>3);if(8*y(a).t<u)continue;const k=sA();t(k,i),u=k.I;for(let f=o;f>=a;--f){const x=y(f);if(8*x.t<u)continue;for(k.I=u+11&-8;k.I<8*x.t;)k.push(d,16);const w=Y9(p.size,p.K);return mA(w,p.p,pA(k.F,x)),(jc[c]?[jc[c]]:jc).map((g,M)=>{const v=Y9(w.size,w.K);return fA(v,g,c??M,f),v.s=jc[c]?0:vA(v),v}).reduce((g,M)=>M.s<g.s?M:g)}}Vr(4)};cw.with=(...t)=>(a,o)=>cw(a,{modes:[...Ab,...t],...o});const gA="http://www.w3.org/2000/svg",MA=(t,a,o,r=[])=>[`<${a}`,...Object.entries(o).map(([l,c])=>` ${l}="${`${c}`.replace(/[^ -~]|["&]/g,"")}"`),">",...r,`</${a}>`].join(""),wA=t=>{const a=[];let o="";for(let r=0;r<=t.size;++r)for(let l=0;l<=t.size;++l){const c=t.get(l,r),d=l<<8|r;let s=t.get(l-1,r)^c&&d+1,i=t.get(l,r-1)^c&&d+256;if(s||i){c||([s,i]=[i,s]);const u=a[s||d]||=[],p=a[i||d];s&&u.push(d),i&&u.push(i),u===p?o+=`M${u.map(y=>`${y>>8} ${255&y}`).join("L")}Z`:(p&&u.push(...p),a[u[u.length-1]]=u)}}return o},xA=(t,{on:a="black",off:o,pad:r=4,padX:l=r,padY:c=r,width:d,height:s,scale:i=1},u,p,y)=>{const k=t.size+2*l,f=t.size+2*c;return u(p,"svg",{xmlns:gA,version:"1.1",viewBox:`${-l} ${-c} ${k} ${f}`,width:d??k*i,height:s??f*i,"shape-rendering":"crispedges"},[o?u(p,"rect",{x:-l,y:-c,width:k,height:f,fill:o}):"",u(p,"path",{d:wA(t),fill:a})],y)},bA=(t,a={})=>(a.xmlDeclaration?'<?xml version="1.0" encoding="UTF-8" ?>':"")+xA(t,a,MA),IA={class:"admin-2fa"},CA={key:0,class:"admin-2fa__panel"},SA={class:"admin-2fa__lead"},LA={key:0,class:"admin-2fa__error"},BA={key:1,class:"admin-2fa__panel"},_A={class:"admin-2fa__steps"},VA={class:"admin-2fa__secret","data-testid":"2fa-secret"},qA=["innerHTML"],AA={key:1,class:"admin-2fa__hint"},zA={class:"admin-2fa__uri"},EA={class:"admin-2fa__code-row"},NA={key:0,class:"admin-2fa__error"},DA={key:2,class:"admin-2fa__panel admin-2fa__panel--success"},FA={class:"admin-2fa__lead"},$A={class:"admin-2fa__codes"},HA={key:3,class:"admin-2fa__panel"},PA={class:"admin-2fa__lead"},TA={class:"admin-2fa__manage"},UA={key:0,class:"admin-2fa__error"},RA={key:1,class:"admin-2fa__codes"},jA=e.defineComponent({__name:"TwoFactorSetup",props:{enabled:{type:Boolean}},emits:["enabled","disabled"],setup(t,{emit:a}){const o=t,r=a,l=e.ref(o.enabled?"enabled":"idle"),c=e.ref(""),d=e.ref(""),s=e.ref(""),i=e.ref([]),u=e.ref(""),p=e.ref(!1),y=e.ref("");async function k(){p.value=!0,y.value="";try{const{getAdminClient:I}=await Promise.resolve().then(()=>ue),L=await I().post("/profile/twoFactorEnable");c.value=L.secret,d.value=L.qr_uri,i.value=L.recovery_codes??[],l.value="setup"}catch{y.value=h.trSafe("Не удалось инициализировать 2FA.")}finally{p.value=!1}}async function f(){if(!(s.value.length<4)){p.value=!0,y.value="";try{const{getAdminClient:I}=await Promise.resolve().then(()=>ue),L=await I().post("/profile/twoFactorConfirm",{code:s.value});L.recovery_codes&&(i.value=L.recovery_codes),l.value="confirmed",K.success(h.trSafe("Двухфакторная аутентификация подключена.")),r("enabled")}catch{y.value=h.trSafe("Неверный код. Попробуйте ещё раз.")}finally{p.value=!1}}}async function x(){if(u.value===""){y.value=h.trSafe("Введите текущий пароль.");return}if(await Pe({message:h.trSafe("Отключить 2FA? Аккаунт станет менее защищённым."),destructive:!0})){p.value=!0,y.value="";try{const{getAdminClient:I}=await Promise.resolve().then(()=>ue);await I().post("/profile/twoFactorDisable",{password:u.value}),l.value="idle",K.success(h.trSafe("2FA отключена.")),r("disabled")}catch{K.error(h.trSafe("Не удалось отключить 2FA."))}finally{p.value=!1}}}async function w(){if(u.value===""){y.value=h.trSafe("Введите текущий пароль.");return}p.value=!0,y.value="";try{const{getAdminClient:I}=await Promise.resolve().then(()=>ue),L=await I().post("/profile/twoFactorRegenerateCodes",{password:u.value});i.value=L.recovery_codes,u.value="",K.success(h.trSafe("Recovery-коды обновлены."))}catch{y.value=h.trSafe("Неверный пароль.")}finally{p.value=!1}}async function g(){try{await navigator.clipboard.writeText(c.value),K.success(h.trSafe("Secret скопирован."))}catch{K.warning(h.trSafe("Скопируйте вручную."))}}async function M(){try{await navigator.clipboard.writeText(i.value.join(`
|
|
5
|
-
`)),K.success(h.trSafe("Recovery-коды скопированы."))}catch{K.warning(h.trSafe("Скопируйте вручную."))}}const v=e.computed(()=>c.value.match(/.{1,4}/g)?.join(" ")??c.value),C=e.computed(()=>{if(d.value==="")return"";try{const I=cw(d.value,{minCorrectionLevel:iA.M});return bA(I,{on:"#18181b",off:"transparent",padX:1,padY:1})}catch{return""}});return(I,_)=>(e.openBlock(),e.createElementBlock("div",IA,[l.value==="idle"?(e.openBlock(),e.createElementBlock("div",CA,[e.createElementVNode("p",SA,e.toDisplayString(e.unref(h.trSafe)("Двухфакторная аутентификация добавляет второй слой защиты — даже если пароль попадёт"))+" "+e.toDisplayString(e.unref(h.trSafe)("в чужие руки, без OTP-кода из приложения войти не получится.")),1),e.createVNode(e.unref(m.UidButton),{variant:"primary",loading:p.value,"data-testid":"2fa-enable",onClick:k},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(ur),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Включить 2FA")),1)]),_:1},8,["loading"]),y.value?(e.openBlock(),e.createElementBlock("p",LA,e.toDisplayString(y.value),1)):e.createCommentVNode("",!0)])):l.value==="setup"?(e.openBlock(),e.createElementBlock("div",BA,[e.createElementVNode("ol",_A,[e.createElementVNode("li",null,e.toDisplayString(e.unref(h.trSafe)("Откройте Authenticator-приложение (Google Authenticator, 1Password, Authy…).")),1),e.createElementVNode("li",null,[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Добавьте новый аккаунт вручную, скопировав ключ:"))+" ",1),e.createElementVNode("div",VA,[e.createElementVNode("code",null,e.toDisplayString(v.value),1),e.createElementVNode("button",{type:"button",class:"admin-2fa__copy",onClick:g},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(kt),size:12},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Копировать")),1)])]),e.renderSlot(I.$slots,"qr-code",{uri:d.value},()=>[C.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"admin-2fa__qr",innerHTML:C.value},null,8,qA)):(e.openBlock(),e.createElementBlock("p",AA,[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Либо отсканируйте QR с другого устройства — поделитесь URI:"))+" ",1),e.createElementVNode("code",zA,e.toDisplayString(d.value),1)]))])]),e.createElementVNode("li",null,[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Введите 6-значный код из приложения:"))+" ",1),e.createElementVNode("div",EA,[e.createVNode(e.unref(m.UidInput),{modelValue:s.value,"onUpdate:modelValue":_[0]||(_[0]=L=>s.value=L),"data-testid":"2fa-code",placeholder:"123456",maxlength:"6",class:"admin-2fa__code-input"},null,8,["modelValue"]),e.createVNode(e.unref(m.UidButton),{variant:"primary",loading:p.value,disabled:s.value.length<4,"data-testid":"2fa-confirm",onClick:f},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Подтвердить")),1)]),_:1},8,["loading","disabled"])])])]),y.value?(e.openBlock(),e.createElementBlock("p",NA,e.toDisplayString(y.value),1)):e.createCommentVNode("",!0)])):l.value==="confirmed"?(e.openBlock(),e.createElementBlock("div",DA,[e.createElementVNode("p",FA,e.toDisplayString(e.unref(h.trSafe)("2FA активирована. Сохраните recovery-коды в безопасном месте — они нужны если вы"))+" "+e.toDisplayString(e.unref(h.trSafe)("потеряете доступ к Authenticator-приложению.")),1),e.createElementVNode("div",$A,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,L=>(e.openBlock(),e.createElementBlock("code",{key:L,class:"admin-2fa__codes-item"},e.toDisplayString(L),1))),128))]),e.createVNode(e.unref(m.UidButton),{variant:"ghost",onClick:M},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(kt),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Скопировать все")),1)]),_:1}),e.createVNode(e.unref(m.UidButton),{variant:"primary",onClick:_[1]||(_[1]=L=>l.value="enabled")},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Готово")),1)]),_:1})])):l.value==="enabled"?(e.openBlock(),e.createElementBlock("div",HA,[e.createElementVNode("p",PA,e.toDisplayString(e.unref(h.trSafe)("2FA включена. Если у вас остался доступ к Authenticator app — всё в порядке.")),1),e.createElementVNode("div",TA,[e.createVNode(e.unref(m.UidInput),{modelValue:u.value,"onUpdate:modelValue":_[2]||(_[2]=L=>u.value=L),type:"password",placeholder:e.unref(h.trSafe)("Текущий пароль")},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(m.UidButton),{variant:"secondary",loading:p.value,onClick:w},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(ir),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Перегенерировать recovery-коды")),1)]),_:1},8,["loading"]),e.createVNode(e.unref(m.UidButton),{variant:"danger",loading:p.value,"data-testid":"2fa-disable",onClick:x},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Ql),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Отключить 2FA")),1)]),_:1},8,["loading"])]),y.value?(e.openBlock(),e.createElementBlock("p",UA,e.toDisplayString(y.value),1)):e.createCommentVNode("",!0),i.value.length>0?(e.openBlock(),e.createElementBlock("div",RA,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,L=>(e.openBlock(),e.createElementBlock("code",{key:L,class:"admin-2fa__codes-item"},e.toDisplayString(L),1))),128))])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)]))}}),OA={class:"admin-page admin-profile"},WA={class:"admin-page__hd"},ZA={class:"admin-page__title-wrap"},GA={class:"admin-page__title"},KA={class:"admin-page__count"},XA={class:"admin-profile__layout"},JA=["aria-label"],YA=["onClick"],QA=["data-icon"],ez={class:"admin-profile__content"},tz={class:"admin-profile__card-hd"},az={class:"admin-profile__card-title"},nz={class:"admin-profile__hero"},oz={class:"admin-profile__hero-text"},rz={class:"admin-profile__hero-name"},lz={class:"admin-profile__hero-meta"},cz={class:"admin-profile__form"},iz={class:"admin-profile__card-ft"},dz={class:"admin-profile__card-hd"},sz={class:"admin-profile__card-title"},uz={class:"admin-profile__hint"},Db=e.defineComponent({__name:"ProfilePage",props:{title:{default:void 0},subtitle:{default:void 0},section:{default:"general"}},emits:["update:section","avatar-replace","two-factor-disable","two-factor-regenerate","save"],setup(t,{emit:a}){const o=t,r=a,l=ye(),c=D9(),d=Ye(),s=e.useSlots(),i=e.ref(!!l.user?.twoFactorEnabled),u=e.computed(()=>[{id:"general",label:h.trSafe("Основное"),icon:"user"},...l.twoFactorAvailable||i.value?[{id:"security",label:h.trSafe("Безопасность"),icon:"shield"}]:[],...s.tokens?[{id:"tokens",label:h.trSafe("API токены"),icon:"key"}]:[],...s.sessions?[{id:"sessions",label:h.trSafe("Сессии"),icon:"monitor"}]:[]]);function p(_){return u.value.some(L=>L.id===_)?_:"general"}const y=e.ref(p(o.section));function k(_){y.value=_,r("update:section",_)}e.watch(()=>o.section,_=>{y.value=p(_)});const f=e.ref({name:l.user?.name??"",email:l.user?.email??"",locale:d.current,theme:c.current}),x=e.computed(()=>d.available.map(_=>({value:_,label:_.toUpperCase()}))),w=e.computed(()=>c.available.map(_=>({value:_,label:_==="dark"?h.trSafe("Тёмная"):_==="light"?h.trSafe("Светлая"):_})));e.watch(()=>f.value.locale,(_,L)=>{_===L||!_||d.setLocale(_).then(()=>{typeof window<"u"&&window.location.reload()}).catch(()=>{})}),e.watch(()=>f.value.theme,(_,L)=>{_===L||!_||c.setTheme(_).catch(()=>{})});function g(){r("save",{...f.value})}function M(){r("avatar-replace")}const v=e.computed(()=>i.value);function C(){i.value=!0,l.user&&(l.user.twoFactorEnabled=!0),r("two-factor-regenerate")}function I(){i.value=!1,l.user&&(l.user.twoFactorEnabled=!1),r("two-factor-disable")}return(_,L)=>(e.openBlock(),e.createElementBlock("section",OA,[e.createElementVNode("header",WA,[e.createElementVNode("div",ZA,[e.createElementVNode("h1",GA,e.toDisplayString(t.title??e.unref(h.trSafe)("Профиль")),1),e.createElementVNode("div",KA,e.toDisplayString(t.subtitle??e.unref(h.trSafe)("Личные данные, безопасность, токены")),1)])]),e.createElementVNode("div",XA,[e.createElementVNode("nav",{class:"admin-profile__nav","aria-label":e.unref(h.trSafe)("Разделы профиля")},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,B=>(e.openBlock(),e.createElementBlock("button",{key:B.id,type:"button",class:e.normalizeClass(["admin-profile__nav-item",{"admin-profile__nav-item--active":y.value===B.id}]),onClick:E=>k(B.id)},[e.createElementVNode("span",{class:"admin-profile__nav-icon","data-icon":B.icon},null,8,QA),e.createElementVNode("span",null,e.toDisplayString(B.label),1)],10,YA))),128))],8,JA),e.createElementVNode("div",ez,[y.value==="general"?(e.openBlock(),e.createBlock(e.unref(m.UidCard),{key:0,padding:"md"},{default:e.withCtx(()=>[e.createElementVNode("header",tz,[e.createElementVNode("h3",az,e.toDisplayString(e.unref(h.trSafe)("Профиль")),1)]),e.createElementVNode("div",nz,[e.createVNode(e.unref(m.UidAvatar),{src:e.unref(l).user?.avatar??void 0,name:e.unref(l).user?.name??"?",size:"lg"},null,8,["src","name"]),e.createElementVNode("div",oz,[e.createElementVNode("div",rz,e.toDisplayString(e.unref(l).user?.name??"—"),1),e.createElementVNode("div",lz,e.toDisplayString(e.unref(l).user?.email??"—"),1)]),L[4]||(L[4]=e.createElementVNode("div",{style:{flex:"1"}},null,-1)),e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"sm",onClick:M},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Заменить")),1)]),_:1})]),e.createElementVNode("div",cz,[e.createVNode(e.unref(m.UidInput),{modelValue:f.value.name,"onUpdate:modelValue":L[0]||(L[0]=B=>f.value.name=B),label:e.unref(h.trSafe)("Имя"),name:"name"},null,8,["modelValue","label"]),e.createVNode(e.unref(m.UidInput),{modelValue:f.value.email,"onUpdate:modelValue":L[1]||(L[1]=B=>f.value.email=B),label:"Email",type:"email",name:"email"},null,8,["modelValue"]),e.createVNode(e.unref(m.UidFormField),{label:e.unref(h.trSafe)("Язык")},{default:e.withCtx(()=>[e.createVNode(e.unref(m.UidSelect),{modelValue:f.value.locale,"onUpdate:modelValue":L[2]||(L[2]=B=>f.value.locale=B),options:x.value},null,8,["modelValue","options"])]),_:1},8,["label"]),e.createVNode(e.unref(m.UidFormField),{label:e.unref(h.trSafe)("Тема")},{default:e.withCtx(()=>[e.createVNode(e.unref(m.UidSelect),{modelValue:f.value.theme,"onUpdate:modelValue":L[3]||(L[3]=B=>f.value.theme=B),options:w.value},null,8,["modelValue","options"])]),_:1},8,["label"])]),e.createElementVNode("footer",iz,[e.createVNode(e.unref(m.UidButton),{variant:"primary",onClick:g},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Сохранить")),1)]),_:1})])]),_:1})):y.value==="security"?(e.openBlock(),e.createBlock(e.unref(m.UidCard),{key:1,padding:"md"},{default:e.withCtx(()=>[e.createElementVNode("header",dz,[e.createElementVNode("h3",sz,e.toDisplayString(e.unref(h.trSafe)("Двухфакторная аутентификация")),1),e.createVNode(e.unref(m.UidBadge),{variant:v.value?"success":"default"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(v.value?e.unref(h.trSafe)("Включена"):e.unref(h.trSafe)("Отключена")),1)]),_:1},8,["variant"])]),e.unref(l).needsTwoFactorSetup?(e.openBlock(),e.createBlock(e.unref(m.UidAlert),{key:0,variant:"warning",class:"admin-profile__alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Ваша роль требует двухфакторной аутентификации. Включите её, чтобы продолжить работу в панели.")),1)]),_:1})):e.createCommentVNode("",!0),e.renderSlot(_.$slots,"enable-2fa",{},()=>[e.createVNode(jA,{enabled:v.value,onEnabled:C,onDisabled:I},null,8,["enabled"])])]),_:3})):e.renderSlot(_.$slots,y.value,{section:y.value},()=>[e.createVNode(e.unref(m.UidCard),{padding:"md"},{default:e.withCtx(()=>[e.createElementVNode("p",uz,e.toDisplayString(e.unref(h.tRaw)("Раздел «:section» библиотекой не реализован —",{section:y.value}))+" "+e.toDisplayString(e.unref(h.tRaw)("проект подключает его через слот :section.",{section:y.value})),1)]),_:1})],void 0,2)])])]))}}),hz={class:"admin-page admin-notifs-page"},pz={class:"admin-notifs-page__head"},yz={class:"admin-page__title"},kz={class:"admin-notifs-page__sub"},mz={class:"admin-notifs-page__tabs"},fz=["onClick"],vz={key:1,class:"admin-notifs-page__empty"},gz={class:"admin-notifs-page__row"},Mz=["data-kind"],wz={class:"admin-notifs-page__body"},xz={key:0,class:"admin-notifs-page__item-body"},bz={class:"admin-notifs-page__time"},Iz={class:"admin-notifs-page__actions"},Cz={key:3,class:"admin-notifs-page__pager"},Sz={class:"admin-notifs-page__pager-info"},Lz=e.defineComponent({__name:"NotificationsPage",setup(t){const a=bc(),o=e.ref("all"),r=[{id:"all",label:h.trSafe("Все")},{id:"unread",label:h.trSafe("Непрочитанные")},{id:"read",label:h.trSafe("Прочитанные")}],l=e.computed(()=>a.meta?.page??1),c=e.computed(()=>a.meta?.last_page??1),d=e.computed(()=>a.meta?.total??a.items.length);async function s(M){o.value=M,await a.load(M,1).catch(()=>{})}async function i(M){M<1||M>c.value||await a.load(o.value,M).catch(()=>{})}async function u(M){M.read_at||await a.markAsRead(M.id).catch(()=>{})}async function p(M){await a.destroy(M.id).catch(()=>{})}async function y(){await a.markAllAsRead().catch(()=>{}),await a.load(o.value,l.value).catch(()=>{})}const k=M=>Rx(M,"—"),f=M=>jx(M),x=M=>M.data.url??null,w=M=>ww(M);function g(M){return M===null?"":new Date(M).toLocaleString(h.formatLocale())}return e.onMounted(()=>{a.load("all",1).catch(()=>{})}),(M,v)=>(e.openBlock(),e.createElementBlock("div",hz,[e.createElementVNode("div",pz,[e.createElementVNode("div",null,[e.createElementVNode("h1",yz,e.toDisplayString(e.unref(h.trSafe)("Уведомления")),1),e.createElementVNode("p",kz,e.toDisplayString(e.unref(h.tRaw)("Всего: :total, непрочитанных: :unread",{total:d.value,unread:e.unref(a).unreadCount})),1)]),e.unref(a).hasUnread?(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:0,variant:"secondary",size:"sm",onClick:y},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Прочитать все")),1)]),_:1})):e.createCommentVNode("",!0)]),e.createElementVNode("div",mz,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(r,C=>e.createElementVNode("button",{key:C.id,type:"button",class:e.normalizeClass(["admin-notifs-page__tab",{"admin-notifs-page__tab--active":o.value===C.id}]),onClick:I=>s(C.id)},e.toDisplayString(C.label),11,fz)),64))]),e.unref(a).loading?(e.openBlock(),e.createBlock(e.unref(m.UidSpinner),{key:0})):e.unref(a).items.length===0?(e.openBlock(),e.createElementBlock("p",vz,e.toDisplayString(o.value==="unread"?e.unref(h.trSafe)("Непрочитанных нет."):e.unref(h.trSafe)("Уведомлений пока нет.")),1)):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(e.unref(a).items,C=>(e.openBlock(),e.createBlock(e.unref(m.UidCard),{key:C.id,padding:"sm",class:e.normalizeClass(["admin-notifs-page__item",{"admin-notifs-page__item--unread":!C.read_at}])},{default:e.withCtx(()=>[e.createElementVNode("div",gz,[e.createElementVNode("span",{class:"admin-notifs-page__icon","data-kind":w(C),"aria-hidden":"true"},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Ox)(C),size:14},null,8,["icon"])],8,Mz),e.createElementVNode("div",wz,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(x(C)?"a":"span"),{href:x(C)??void 0,class:"admin-notifs-page__item-title",onClick:I=>u(C)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(k(C)),1)]),_:2},1032,["href","onClick"])),f(C)?(e.openBlock(),e.createElementBlock("p",xz,e.toDisplayString(f(C)),1)):e.createCommentVNode("",!0),e.createElementVNode("span",bz,e.toDisplayString(g(C.created_at)),1)]),e.createElementVNode("div",Iz,[C.read_at?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:0,variant:"ghost",size:"sm",onClick:I=>u(C)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Прочитано")),1)]),_:1},8,["onClick"])),e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"sm",onClick:I=>p(C)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Удалить")),1)]),_:1},8,["onClick"])])])]),_:2},1032,["class"]))),128)),c.value>1?(e.openBlock(),e.createElementBlock("div",Cz,[e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"sm",disabled:l.value<=1,onClick:v[0]||(v[0]=C=>i(l.value-1))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Назад")),1)]),_:1},8,["disabled"]),e.createElementVNode("span",Sz,e.toDisplayString(e.unref(h.tRaw)("Страница :page из :last",{page:l.value,last:c.value})),1),e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"sm",disabled:l.value>=c.value,onClick:v[1]||(v[1]=C=>i(l.value+1))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Вперёд")),1)]),_:1},8,["disabled"])])):e.createCommentVNode("",!0)]))}}),Fb=ge(Lz,[["__scopeId","data-v-5112f887"]]),Bz={key:1,class:"admin-stats-widget"},_z={key:0,class:"admin-stats-widget__hd"},Vz={class:"admin-stats-widget__title"},qz={class:"admin-stats-widget__grid"},iw=e.defineComponent({__name:"StatWidget",props:{title:{default:""},stats:{default:()=>[]},value:{default:0},prefix:{default:""},suffix:{default:""},trend:{default:void 0},precision:{default:0},tone:{default:"neutral"},loading:{type:Boolean,default:!1}},setup(t){const a=t,o={neutral:"primary",primary:"primary",default:"primary",positive:"success",success:"success",green:"success",negative:"danger",danger:"danger",error:"danger",red:"danger",warning:"warning",yellow:"warning",orange:"warning",info:"info",blue:"info"};function r(p){return o[(p??"").toLowerCase()]??o[a.tone]??"primary"}function l(p){if(!p||typeof p.delta!="number")return;const y=Math.abs(p.delta);return p.direction==="down"?-y:p.direction==="up"?y:p.delta}function c(p){if(p?.style!=="currency"||!p.currency)return;const y=p.decimals??0;return k=>{const f=typeof k=="number"?k:Number(k);if(typeof k=="string"&&(k.trim()===""||Number.isNaN(f)))return k;try{return h.formatNumber(f,{style:"currency",currency:p.currency,minimumFractionDigits:y,maximumFractionDigits:y})}catch{return`${h.formatNumber(f,{minimumFractionDigits:y,maximumFractionDigits:y})} ${p.currency}`}}}const d=e.computed(()=>{if(a.stats.length===0)return[{title:a.title,value:a.value,prefix:a.prefix,suffix:a.suffix,trend:a.trend,tone:r(null),icon:void 0,precision:a.precision,formatter:void 0}];const p=a.stats.length===1;return a.stats.map(y=>({title:(p&&a.title?a.title:y.label)??"",value:y.value??"",prefix:y.prefix??"",suffix:y.suffix??"",trend:l(y.change),tone:r(y.color),icon:be(y.icon)??void 0,precision:typeof y.precision=="number"?y.precision:a.precision,formatter:c(y.format)}))}),s=e.computed(()=>d.value.length>1);let i=null;try{i=Ye()}catch{}const u=e.computed(()=>h.intlLocale(i?.current??h.currentLocale()));return(p,y)=>s.value?(e.openBlock(),e.createElementBlock("section",Bz,[t.title?(e.openBlock(),e.createElementBlock("header",_z,[e.createElementVNode("h3",Vz,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",qz,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,(k,f)=>(e.openBlock(),e.createBlock(e.unref(m.UidStat),{key:f,title:k.title,value:k.value,prefix:k.prefix,suffix:k.suffix,trend:k.trend,precision:k.precision,formatter:k.formatter,locale:u.value,tone:k.tone,icon:k.icon,loading:t.loading},null,8,["title","value","prefix","suffix","trend","precision","formatter","locale","tone","icon","loading"]))),128))])])):(e.openBlock(),e.createBlock(e.unref(m.UidStat),{key:0,title:d.value[0].title,value:d.value[0].value,prefix:d.value[0].prefix,suffix:d.value[0].suffix,trend:d.value[0].trend,precision:d.value[0].precision,formatter:d.value[0].formatter,locale:u.value,tone:d.value[0].tone,icon:d.value[0].icon,loading:t.loading},null,8,["title","value","prefix","suffix","trend","precision","formatter","locale","tone","icon","loading"]))}}),Az={class:"admin-chart-legend"},zz={class:"admin-chart-legend__label"},$b=e.defineComponent({__name:"ChartLegend",props:{items:{}},setup(t){return(a,o)=>(e.openBlock(),e.createElementBlock("ul",Az,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(r,l)=>(e.openBlock(),e.createElementBlock("li",{key:l,class:"admin-chart-legend__item"},[e.createElementVNode("span",{class:"admin-chart-legend__swatch",style:e.normalizeStyle({background:r.color})},null,4),e.createElementVNode("span",zz,e.toDisplayString(r.label),1)]))),128))]))}}),Ez={class:"admin-chart-tooltip__title"},Nz={class:"admin-chart-tooltip__label"},Dz={class:"admin-chart-tooltip__value"},Hb=e.defineComponent({__name:"ChartTooltip",props:{x:{},y:{},title:{},rows:{},boundsWidth:{}},setup(t){const a=t,o=e.computed(()=>{const r=a.x>a.boundsWidth/2;return{top:`${Math.max(0,a.y)}px`,...r?{right:`${Math.max(0,a.boundsWidth-a.x+12)}px`}:{left:`${a.x+12}px`}}});return(r,l)=>(e.openBlock(),e.createElementBlock("div",{class:"admin-chart-tooltip",role:"presentation",style:e.normalizeStyle(o.value)},[e.createElementVNode("div",Ez,e.toDisplayString(t.title),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.rows,(c,d)=>(e.openBlock(),e.createElementBlock("div",{key:d,class:"admin-chart-tooltip__row"},[e.createElementVNode("span",{class:"admin-chart-tooltip__swatch",style:e.normalizeStyle({background:c.color})},null,4),e.createElementVNode("span",Nz,e.toDisplayString(c.label),1),e.createElementVNode("span",Dz,e.toDisplayString(c.value),1)]))),128))],4))}});function Pb(t,a){const o=e.ref(a.width),r=e.ref(a.height);let l=null;function c(d,s){d>0&&(o.value=Math.round(d)),s>0&&(r.value=Math.round(s))}return e.onMounted(()=>{if(!t.value)return;const d=t.value.getBoundingClientRect();c(d.width,d.height),!(typeof ResizeObserver>"u")&&(l=new ResizeObserver(s=>{const i=s[0]?.contentRect;i&&c(i.width,i.height)}),l.observe(t.value))}),e.onBeforeUnmount(()=>{l?.disconnect(),l=null}),{width:o,height:r}}const Fz={primary:"var(--uid-accent)",accent:"var(--uid-accent)",teal:"var(--uid-accent)",success:"var(--uid-color-success)",positive:"var(--uid-color-success)",green:"var(--uid-color-success)",emerald:"var(--uid-color-success)",warning:"var(--uid-color-warning)",amber:"var(--uid-color-warning)",yellow:"var(--uid-color-warning)",orange:"var(--uid-color-warning)",danger:"var(--uid-color-danger)",negative:"var(--uid-color-danger)",error:"var(--uid-color-danger)",red:"var(--uid-color-danger)",rose:"var(--uid-color-danger)",info:"var(--uid-color-info)",blue:"var(--uid-color-info)",neutral:"var(--uid-color-zinc-400)",default:"var(--uid-color-zinc-400)",gray:"var(--uid-color-zinc-400)",grey:"var(--uid-color-zinc-400)",zinc:"var(--uid-color-zinc-400)"};function Mr(t){if(typeof t!="string")return"";const a=t.trim();return a===""?"":Fz[a.toLowerCase()]??a}const lx=["var(--admin-chart-series-1, #2563eb)","var(--admin-chart-series-2, #d97706)","var(--admin-chart-series-3, #059669)","var(--admin-chart-series-4, #9333ea)","var(--admin-chart-series-5, #db2777)","var(--admin-chart-series-6, #0891b2)"],$z="var(--uid-accent)";function Hz(t){if(typeof t=="number")return Number.isFinite(t)?t:null;if(typeof t=="string"&&t.trim()!==""){const a=Number(t);return Number.isFinite(a)?a:null}return null}function Pz(t,a=$z){const o=Array.isArray(t)?t.filter(r=>r&&typeof r=="object"):[];return o.map((r,l)=>({label:typeof r.label=="string"&&r.label!==""?r.label:`#${l+1}`,data:Array.isArray(r.data)?r.data.map(Hz):[],color:Mr(r.color)!==""?Mr(r.color):o.length===1?a:lx[l%lx.length]}))}function Tz(t,a){const o=Array.isArray(t)?t.map(c=>String(c??"")):[],r=Math.max(o.length,...a.map(c=>c.data.length),0),l=[];for(let c=0;c<r;c++)l.push(o[c]??String(c+1));return l}function Tb(t){return!t.some(a=>a.data.some(o=>o!==null&&o!==0))}function Uz(t,a){const o=new Array(a).fill(0);return t.map(r=>o.map((l,c)=>(o[c]+=r.data[c]??0,o[c])))}function Rz(t,a){const o=t/Math.max(1,a),r=Math.pow(10,Math.floor(Math.log10(o))),l=o/r;return(l<=1?1:l<=2?2:l<=2.5?2.5:l<=5?5:10)*r}function Ub(t,a,o=4){let r=Math.min(0,t),l=Math.max(0,a);r===l&&(l=r+1);const c=Rz(l-r,o);r=Math.floor(r/c)*c,l=Math.ceil(l/c)*c;const d=[];for(let s=r;s<=l+c/2;s+=c)d.push(Math.round(s/c)*c);return{min:r,max:l,ticks:d}}function Rb(t){return h.formatNumber(t,{notation:"compact",maximumFractionDigits:1})}function _9(t){return t===null?"—":h.formatNumber(t,{maximumFractionDigits:2})}function cx(t,a=11){return t.length*a*.6}const jz={key:0,class:"admin-widget__hd"},Oz={key:0,class:"admin-widget__title"},Wz={key:1,class:"admin-widget__desc"},Zz={key:1,class:"admin-widget__empty"},Gz=["width","height","viewBox","aria-label"],Kz={class:"admin-chart__grid"},Xz=["x1","x2","y1","y2"],Jz=["x","y"],Yz=["x","width","height"],Qz={key:1,class:"admin-chart__bars"},eE=["x","y","width","height","fill","rx","data-series","data-label","data-value"],tE={key:2,class:"admin-chart__series"},aE=["data-series"],nE=["d","fill","fill-opacity"],oE=["d","stroke"],rE=["cx","cy","r","fill"],lE=["cx","cy","fill"],cE=["x1","x2","y2"],iE=["x","y"],dE={class:"admin-chart__sr"},sE={scope:"row"},It=8,uE=12,hE=22,ix=11,jb=e.defineComponent({__name:"CartesianChartWidget",props:{kind:{default:"line"},title:{default:""},description:{default:""},labels:{},series:{},stacked:{type:Boolean,default:!1},height:{default:200}},setup(t){const a=t,o=e.ref(null),r=e.ref(null),{width:l,height:c}=Pb(o,{width:480,height:a.height}),d=e.computed(()=>a.labels.length),s=e.computed(()=>d.value===0||Tb(a.series)),i=e.computed(()=>a.kind==="bar"),u=e.computed(()=>a.stacked?Uz(a.series,d.value).map((V,S)=>V.map((A,P)=>a.series[S].data[P]===null?null:A)):a.series.map(V=>V.data.slice(0,d.value))),p=e.computed(()=>{const b=[];for(const A of u.value)for(const P of A)P!==null&&b.push(P);if(a.stacked&&i.value)for(let A=0;A<d.value;A++){let P=0;for(const X of a.series){const O=X.data[A];O!=null&&O<0&&(P+=O)}b.push(P)}const V=b.length?Math.min(...b):0,S=b.length?Math.max(...b):1;return Ub(V,S,c.value<160?3:4)}),y=e.computed(()=>p.value.ticks.map(b=>Rb(b))),k=e.computed(()=>Math.ceil(Math.max(...y.value.map(b=>cx(b,ix)),8))+10),f=e.computed(()=>Math.max(20,l.value-k.value-uE)),x=e.computed(()=>Math.max(20,c.value-It-hE)),w=e.computed(()=>f.value/Math.max(1,d.value));function g(b){const{min:V,max:S}=p.value;return It+x.value*(1-(b-V)/(S-V||1))}const M=e.computed(()=>g(Math.max(p.value.min,Math.min(0,p.value.max))));function v(b){return i.value?k.value+w.value*(b+.5):d.value<=1?k.value+f.value/2:k.value+f.value*b/(d.value-1)}const C=e.computed(()=>p.value.ticks.map((b,V)=>({y:g(b),label:y.value[V],zero:b===0}))),I=e.computed(()=>{const b=a.labels.map(O=>O.length>16?`${O.slice(0,15)}…`:O),V=b.map(O=>cx(O,ix)),S=Math.max(...V,1)+12,A=i.value?w.value:f.value/Math.max(1,d.value-1),P=Math.max(1,Math.ceil(S/Math.max(1,A))),X=[];for(let O=0;O<d.value;O+=P){const ae=V[O]/2;X.push({text:b[O],x:Math.min(Math.max(v(O),ae+2),l.value-ae-2)})}return X});function _(b){const V=[];let S=[];return b.forEach((A,P)=>{A===null?(S.length&&V.push(S),S=[]):S.push({i:P,v:A})}),S.length&&V.push(S),V}const L=b=>(Math.round(b*100)/100).toString(),B=e.computed(()=>u.value.map((b,V)=>{const S=_(b),A=S.map(O=>O.map((ae,Y)=>`${Y===0?"M":"L"}${L(v(ae.i))} ${L(g(ae.v))}`).join(" ")).join(" "),P=a.kind==="area"?S.map(O=>{const ae=O.map((Q,ee)=>`${ee===0?"M":"L"}${L(v(Q.i))} ${L(g(Q.v))}`).join(" "),Y=[...O].reverse().map(Q=>{const ee=a.stacked&&V>0?u.value[V-1][Q.i]??0:null;return`L${L(v(Q.i))} ${L(ee===null?M.value:g(ee))}`}).join(" ");return`${ae} ${Y} Z`}).join(" "):"",X=S.flat().map(O=>({i:O.i,cx:v(O.i),cy:g(O.v)}));return{color:a.series[V].color,d:A,area:P,points:X}})),E=e.computed(()=>d.value<=24&&f.value/Math.max(1,d.value)>=12),z=e.computed(()=>{if(!i.value)return[];const b=[],V=Math.max(1,a.series.length);if(a.stacked){const X=Math.min(48,w.value*.6);for(let O=0;O<d.value;O++){let ae=0,Y=0;a.series.forEach((Q,ee)=>{const oe=Q.data[O];if(oe==null||oe===0)return;const he=oe>0?ae:Y,Me=he+oe;oe>0?ae=Me:Y=Me;const Te=g(Math.max(he,Me));b.push({x:v(O)-X/2,y:Te,w:X,h:Math.max(0,g(Math.min(he,Me))-Te),color:Q.color,si:ee,i:O,value:oe})})}return b}const S=Math.min(w.value*.72,40*V),A=S/V>6?2:0,P=Math.max(1,(S-A*(V-1))/V);for(let X=0;X<d.value;X++)a.series.forEach((O,ae)=>{const Y=O.data[X];if(Y==null)return;const Q=Math.min(g(Y),M.value);b.push({x:v(X)-S/2+ae*(P+A),y:Q,w:P,h:Math.abs(g(Y)-M.value),color:O.color,si:ae,i:X,value:Y})});return b}),q=e.ref(null);function F(b){const V=r.value?.getBoundingClientRect();if(!V||d.value===0)return;const S=b.clientX-V.left-k.value;let A;i.value?A=Math.floor(S/w.value):A=d.value<=1?0:Math.round(S/f.value*(d.value-1)),q.value=Math.min(d.value-1,Math.max(0,A))}function H(){q.value=null}const $=e.computed(()=>{const b=q.value;return b===null?null:{x:v(b),y:It,title:a.labels[b]??"",rows:a.series.map(V=>({label:V.label,color:V.color,value:_9(V.data[b]??null)}))}}),N=e.computed(()=>a.series.map(b=>({label:b.label,color:b.color})));return(b,V)=>(e.openBlock(),e.createBlock(e.unref(m.UidCard),{padding:"md",class:e.normalizeClass(["admin-widget admin-chart",[`admin-chart--${t.kind}`,{"admin-chart--stacked":t.stacked}]])},{default:e.withCtx(()=>[t.title||t.description?(e.openBlock(),e.createElementBlock("header",jz,[t.title?(e.openBlock(),e.createElementBlock("h3",Oz,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("p",Wz,e.toDisplayString(t.description),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("div",Zz,e.toDisplayString(e.unref(h.trSafe)("Нет данных за период")),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("div",{ref_key:"box",ref:o,class:"admin-chart__box",style:e.normalizeStyle({minHeight:`${t.height}px`})},[(e.openBlock(),e.createElementBlock("svg",{ref_key:"svgEl",ref:r,class:"admin-chart__svg",width:e.unref(l),height:e.unref(c),viewBox:`0 0 ${e.unref(l)} ${e.unref(c)}`,role:"img","aria-label":t.title||t.kind,onPointermove:F,onMousemove:F,onPointerleave:H,onMouseleave:H},[e.createElementVNode("g",Kz,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,(S,A)=>(e.openBlock(),e.createElementBlock("line",{key:`g${A}`,x1:k.value,x2:k.value+f.value,y1:S.y,y2:S.y,class:e.normalizeClass(S.zero?"admin-chart__axis-line":"admin-chart__grid-line")},null,10,Xz))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,(S,A)=>(e.openBlock(),e.createElementBlock("text",{key:`t${A}`,x:k.value-6,y:S.y,class:"admin-chart__tick","text-anchor":"end","dominant-baseline":"middle"},e.toDisplayString(S.label),9,Jz))),128))]),q.value!==null&&i.value?(e.openBlock(),e.createElementBlock("rect",{key:0,class:"admin-chart__hover-band",x:k.value+w.value*q.value,y:It,width:w.value,height:x.value},null,8,Yz)):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createElementBlock("g",Qz,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(z.value,(S,A)=>(e.openBlock(),e.createElementBlock("rect",{key:A,class:"admin-chart__bar",x:S.x,y:S.y,width:S.w,height:S.h,fill:S.color,rx:t.stacked?0:Math.min(3,S.w/2),"data-series":S.si,"data-label":t.labels[S.i],"data-value":S.value},null,8,eE))),128))])):(e.openBlock(),e.createElementBlock("g",tE,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.value,(S,A)=>(e.openBlock(),e.createElementBlock("g",{key:A,"data-series":A},[t.kind==="area"?(e.openBlock(),e.createElementBlock("path",{key:0,class:"admin-chart__area",d:S.area,fill:S.color,"fill-opacity":t.stacked?.45:.16},null,8,nE)):e.createCommentVNode("",!0),e.createElementVNode("path",{class:"admin-chart__line",d:S.d,stroke:S.color,fill:"none"},null,8,oE),E.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(S.points,P=>(e.openBlock(),e.createElementBlock("circle",{key:P.i,class:"admin-chart__point",cx:P.cx,cy:P.cy,r:q.value===P.i?4.5:3,fill:S.color},null,8,rE))),128)):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(S.points.filter(P=>P.i===q.value),P=>(e.openBlock(),e.createElementBlock("circle",{key:P.i,class:"admin-chart__point",cx:P.cx,cy:P.cy,r:"4.5",fill:S.color},null,8,lE))),128))],8,aE))),128))])),q.value!==null&&!i.value?(e.openBlock(),e.createElementBlock("line",{key:3,class:"admin-chart__crosshair",x1:v(q.value),x2:v(q.value),y1:It,y2:It+x.value},null,8,cE)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.value,(S,A)=>(e.openBlock(),e.createElementBlock("text",{key:`x${A}`,class:"admin-chart__tick",x:S.x,y:It+x.value+15,"text-anchor":"middle"},e.toDisplayString(S.text),9,iE))),128))],40,Gz)),$.value?(e.openBlock(),e.createBlock(Hb,{key:0,x:$.value.x,y:$.value.y,title:$.value.title,rows:$.value.rows,"bounds-width":e.unref(l)},null,8,["x","y","title","rows","bounds-width"])):e.createCommentVNode("",!0)],4),t.series.length>1?(e.openBlock(),e.createBlock($b,{key:0,items:N.value},null,8,["items"])):e.createCommentVNode("",!0),e.createElementVNode("table",dE,[e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[V[0]||(V[0]=e.createElementVNode("th",null,null,-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.series,(S,A)=>(e.openBlock(),e.createElementBlock("th",{key:A,scope:"col"},e.toDisplayString(S.label),1))),128))])]),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.labels,(S,A)=>(e.openBlock(),e.createElementBlock("tr",{key:A},[e.createElementVNode("th",sE,e.toDisplayString(S),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.series,(P,X)=>(e.openBlock(),e.createElementBlock("td",{key:X},e.toDisplayString(e.unref(_9)(P.data[A]??null)),1))),128))]))),128))])])],64))]),_:1},8,["class"]))}}),Ob=e.defineComponent({__name:"BarChartWidget",props:{title:{default:""},description:{default:""},data:{},accent:{default:"var(--uid-accent)"},height:{default:200},seriesLabel:{default:""}},setup(t){const a=t,o=e.computed(()=>(a.data??[]).map(l=>String(l.label))),r=e.computed(()=>[{label:a.seriesLabel||a.title||"",data:(a.data??[]).map(l=>Number.isFinite(Number(l.value))?Number(l.value):null),color:a.accent}]);return(l,c)=>(e.openBlock(),e.createBlock(jb,{kind:"bar",title:t.title,description:t.description,labels:o.value,series:r.value,height:t.height},null,8,["title","description","labels","series","height"]))}}),pE={key:0,class:"admin-widget__hd"},yE={class:"admin-widget__title"},kE={key:1,class:"admin-widget__empty"},mE={key:2,class:"admin-donut-widget__row"},fE=["aria-label"],vE=["d","fill"],gE={key:0,cx:"60",cy:"60",r:"30",fill:"var(--uid-surface-raised)"},ME={class:"admin-donut-widget__legend"},wE={class:"admin-donut-widget__label"},xE={class:"admin-donut-widget__value"},Hw=e.defineComponent({__name:"DonutChartWidget",props:{title:{default:""},data:{},hole:{type:Boolean,default:!0}},setup(t){const a=t,o=["var(--uid-color-teal-500, #14b8a6)","var(--uid-color-zinc-700, #3f3f46)","var(--uid-color-amber-400, #fbbf24)","var(--uid-color-rose-400, #fb7185)","var(--uid-color-blue-400, #60a5fa)"],r=e.computed(()=>a.data.length===0||a.data.every(d=>!d.value)),l=e.computed(()=>a.data.reduce((d,s)=>d+s.value,0)||1),c=e.computed(()=>{let d=0;return a.data.map((s,i)=>{const u=d/l.value*2*Math.PI;d+=s.value;const p=d/l.value*2*Math.PI,y=50,k=60,f=60,x=k+y*Math.cos(u-Math.PI/2),w=f+y*Math.sin(u-Math.PI/2),g=k+y*Math.cos(p-Math.PI/2),M=f+y*Math.sin(p-Math.PI/2),v=p-u>Math.PI?1:0,C=a.data.length===1?`M ${k-y} ${f} a ${y} ${y} 0 1 0 ${y*2} 0 a ${y} ${y} 0 1 0 ${-y*2} 0`:`M ${k} ${f} L ${x} ${w} A ${y} ${y} 0 ${v} 1 ${g} ${M} Z`;return{...s,path:C,color:Mr(s.color)||o[i%o.length],pct:h.formatNumber(s.value/l.value*100,{minimumFractionDigits:1,maximumFractionDigits:1})}})});return(d,s)=>(e.openBlock(),e.createBlock(e.unref(m.UidCard),{padding:"md",class:"admin-widget admin-donut-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",pE,[e.createElementVNode("h3",yE,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),r.value?(e.openBlock(),e.createElementBlock("div",kE,e.toDisplayString(e.unref(h.trSafe)("Нет данных")),1)):(e.openBlock(),e.createElementBlock("div",mE,[(e.openBlock(),e.createElementBlock("svg",{viewBox:"0 0 120 120",class:"admin-donut-widget__svg",role:"img","aria-label":t.title},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(i,u)=>(e.openBlock(),e.createElementBlock("path",{key:u,d:i.path,fill:i.color,stroke:"var(--uid-surface-raised)","stroke-width":"1"},[e.createElementVNode("title",null,e.toDisplayString(i.label)+": "+e.toDisplayString(e.unref(h.formatNumber)(i.value))+" ("+e.toDisplayString(i.pct)+"%)",1)],8,vE))),128)),t.hole?(e.openBlock(),e.createElementBlock("circle",gE)):e.createCommentVNode("",!0)],8,fE)),e.createElementVNode("ul",ME,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(i,u)=>(e.openBlock(),e.createElementBlock("li",{key:u},[e.createElementVNode("span",{class:"admin-donut-widget__dot",style:e.normalizeStyle({background:i.color})},null,4),e.createElementVNode("span",wE,e.toDisplayString(i.label),1),e.createElementVNode("span",xE,e.toDisplayString(i.pct)+"%",1)]))),128))])]))]),_:1}))}}),bE={key:0,class:"admin-widget__hd"},IE={class:"admin-widget__title"},CE=e.defineComponent({__name:"RecentTableWidget",props:{title:{default:""},columns:{default:()=>[]},rows:{default:()=>[]},emptyText:{default:h.trSafe("Нет данных")},linkTo:{default:null}},setup(t){const a=t,o=le.useRouter();function r(d){const s=d.id;!a.linkTo||s===void 0||s===null||o?.push(`/r/${a.linkTo}/${s}`)}const l=e.computed(()=>a.columns.map(d=>{const s=d.column??d.key;return{key:String(s??""),label:d.label,align:d.align}})),c=e.computed(()=>a.rows.map(d=>{const s={...d};for(const i of l.value)s[i.key]=T9(d[i.key],void 0,{});return s}));return(d,s)=>(e.openBlock(),e.createBlock(e.unref(m.UidCard),{padding:"md",class:"admin-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",bE,[e.createElementVNode("h3",IE,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createVNode(e.unref(m.UidTable),{columns:l.value,data:c.value,"empty-text":e.unref(h.trSafe)(t.emptyText),class:e.normalizeClass({"admin-widget__table--clickable":!!t.linkTo}),onRowClick:r},null,8,["columns","data","empty-text","class"])]),_:1}))}}),w9=ge(CE,[["__scopeId","data-v-c9bc6a1d"]]),SE={key:0,class:"admin-widget__hd"},LE={class:"admin-widget__title"},BE={class:"admin-heatmap__cols-axis","aria-hidden":"true"},_E={class:"admin-heatmap__row-label"},VE={class:"admin-heatmap__cells"},qE=["title"],AE={key:2,class:"admin-heatmap__empty"},Wb=e.defineComponent({__name:"HeatmapWidget",props:{title:{default:""},rows:{default:()=>[]},cols:{default:()=>[]},matrix:{default:()=>[]},formatValue:{type:Function,default:void 0},color:{default:"var(--uid-color-primary, #14b8a6)"}},setup(t){const a=t,o=e.computed(()=>{let c=0;for(const d of a.matrix)for(const s of d)typeof s=="number"&&s>c&&(c=s);return c||1});function r(c){return typeof c!="number"||c<=0?0:Math.max(.1,Math.min(1,c/o.value))}function l(c,d,s){const i=a.rows[d]??"",u=a.cols[s]??"";return a.formatValue?a.formatValue(c,i,u):`${i} ${u}: ${c}`}return(c,d)=>(e.openBlock(),e.createBlock(e.unref(m.UidCard),{padding:"md",class:"admin-widget admin-heatmap-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",SE,[e.createElementVNode("h3",LE,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),t.rows.length>0&&t.cols.length>0&&t.matrix.length>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"admin-heatmap",style:e.normalizeStyle({"--admin-heatmap-cols":t.cols.length})},[e.createElementVNode("div",BE,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.cols,(s,i)=>(e.openBlock(),e.createElementBlock("span",{key:`c-${i}`,class:"admin-heatmap__col-label"},e.toDisplayString(i%3===0?s:""),1))),128))]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.matrix,(s,i)=>(e.openBlock(),e.createElementBlock("div",{key:`r-${i}`,class:"admin-heatmap__row"},[e.createElementVNode("span",_E,e.toDisplayString(t.rows[i]??""),1),e.createElementVNode("div",VE,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s,(u,p)=>(e.openBlock(),e.createElementBlock("span",{key:`cell-${i}-${p}`,class:"admin-heatmap__cell",style:e.normalizeStyle({background:t.color,opacity:r(u)}),title:l(u,i,p)},null,12,qE))),128))])]))),128))],4)):(e.openBlock(),e.createElementBlock("div",AE,e.toDisplayString(e.unref(h.trSafe)("Нет данных")),1))]),_:1}))}}),zE={key:0,class:"admin-widget__hd"},EE={class:"admin-widget__title"},NE={class:"admin-gauge-widget__body"},Zb=e.defineComponent({__name:"GaugeWidget",props:{title:{default:""},value:{default:0},min:{default:0},max:{default:100},size:{default:220},ranges:{default:()=>[]},thresholds:{default:()=>[]},unit:{default:""},tone:{default:"neutral"},color:{default:void 0},label:{default:""},suffix:{default:""},precision:{default:null}},setup(t){const a=t,o={neutral:"primary",positive:"success",warning:"warning",negative:"danger"},r=e.computed(()=>o[a.tone]),l=e.computed(()=>(a.ranges.length>0?a.ranges:a.thresholds).map(i=>({...i,color:Mr(i.color)||void 0})));function c(i){if(!Number.isFinite(i)||Number.isInteger(i))return 0;const u=String(i).split(".")[1]??"";return Math.min(2,u.length)}const d=e.computed(()=>typeof a.precision=="number"&&a.precision>=0?Math.min(20,Math.floor(a.precision)):c(Number(a.value))),s=e.computed(()=>a.suffix||a.unit||"");return(i,u)=>(e.openBlock(),e.createBlock(e.unref(m.UidCard),{padding:"md",class:"admin-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",zE,[e.createElementVNode("h3",EE,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",NE,[e.createVNode(e.unref(m.UidGauge),{value:t.value,min:t.min,max:t.max,size:t.size,ranges:l.value,tone:r.value,color:e.unref(Mr)(t.color)||void 0,label:t.label,suffix:s.value,precision:d.value},null,8,["value","min","max","size","ranges","tone","color","label","suffix","precision"])])]),_:1}))}}),DE={"&":"&","<":"<",">":">",'"':""","'":"'"};function V9(t){return t.replace(/[&<>"']/g,a=>DE[a]??a)}function Pw(t){return t.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}function FE(){const t=new Map;return a=>{const o=a.toLowerCase().trim().replace(/[^\p{L}\p{N}\s_-]/gu,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")||"section",r=t.get(o)??0;return t.set(o,r+1),r===0?o:`${o}-${r}`}}function dx(t){const a=t.trim(),o=a.replace(/�*58;|:/gi,":").replace(/\s+/g,"").toLowerCase(),r=/^([a-z][a-z0-9+.-]*):/.exec(o);return r&&!["http","https","mailto"].includes(r[1]??"")?null:a}function sx(t){return!/^([a-z][a-z0-9+.-]*:|\/|#|\?)/i.test(t)}function ux(t,a,o=!1){let r=Pw(t);o&&(r=r.replace(/\.md(?=$|[?#])/i,""));try{const l=/^[a-z][a-z0-9+.-]*:\/\//i.test(a),c=new URL(r,l?a:`http://base.invalid${a.startsWith("/")?"":"/"}${a}`),d=l?c.href:c.pathname+c.search+c.hash;return V9(d)}catch{return t}}function Gb(t,a={}){const o=[],r=c=>`${o.push(c)-1}`;let l=t.replace(/`([^`]+)`/g,(c,d)=>r(`<code>${d}</code>`));return l=l.replace(/!\[([^\]]*)\]\(([^)\s]+)(?:\s+"[^)]*")?\)/g,(c,d,s)=>{let i=dx(s);return i===null?c:(a.imageBase&&sx(i)&&(i=ux(i,a.imageBase)),r(`<img src="${i}" alt="${d}" loading="lazy">`))}),l=l.replace(/\[([^\]]+)\]\(([^)\s]+)(?:\s+"[^)]*")?\)/g,(c,d,s)=>{let i=dx(s);if(i===null)return c;const u=sx(i);a.linkBase&&u&&(i=ux(i,a.linkBase,a.stripMdExtension??!1));const p=/^(https?:)?\/\//i.test(i)||/^mailto:/i.test(i),y=a.internalLinksInPlace===!0&&!p;return r(y?`<a href="${i}">${d}</a>`:`<a href="${i}" target="_blank" rel="noopener noreferrer">${d}</a>`)}),l=l.replace(/\*\*(?=\S)(.+?)(?<=\S)\*\*/g,"<strong>$1</strong>").replace(/(?<!\w)__(?=\S)(.+?)(?<=\S)__(?!\w)/g,"<strong>$1</strong>").replace(/\*(?=\S)(.+?)(?<=\S)\*/g,"<em>$1</em>").replace(/(?<!\w)_(?=\S)(.+?)(?<=\S)_(?!\w)/g,"<em>$1</em>").replace(/~~(?=\S)(.+?)(?<=\S)~~/g,"<del>$1</del>"),l.replace(/(\d+)/g,(c,d)=>o[Number(d)]??"")}function $E(t){return Pw(t.replace(/<[^>]+>/g,""))}const qr=/^(\s*)([-*+]|\d+[.)])\s+(.*)$/,HE=/^\s*\|?\s*:?-+:?\s*(\|\s*:?-+:?\s*)*\|?\s*$/;function Q9(t){let a=t.trim();return a.startsWith("|")&&(a=a.slice(1)),a.endsWith("|")&&!a.endsWith("\\|")&&(a=a.slice(0,-1)),a.split(/(?<!\\)\|/).map(o=>o.trim().replace(/\\\|/g,"|"))}const hx={note:"note",info:"note",tip:"tip",hint:"tip",important:"important",warning:"warning",caution:"caution",danger:"caution",примечание:"note",заметка:"note",совет:"tip",важно:"important",внимание:"warning",предупреждение:"warning",осторожно:"caution"};function PE(t){switch(t){case"tip":return h.trSafe("Совет");case"important":return h.trSafe("Важно");case"warning":return h.trSafe("Внимание");case"caution":return h.trSafe("Осторожно");default:return h.trSafe("Примечание")}}function _c(t,a={}){if(!t)return"";const o=V9(t.replace(/\r\n?/g,`
|
|
5
|
+
`)),K.success(h.trSafe("Recovery-коды скопированы."))}catch{K.warning(h.trSafe("Скопируйте вручную."))}}const v=e.computed(()=>c.value.match(/.{1,4}/g)?.join(" ")??c.value),C=e.computed(()=>{if(d.value==="")return"";try{const I=cw(d.value,{minCorrectionLevel:iA.M});return bA(I,{on:"#18181b",off:"transparent",padX:1,padY:1})}catch{return""}});return(I,_)=>(e.openBlock(),e.createElementBlock("div",IA,[l.value==="idle"?(e.openBlock(),e.createElementBlock("div",CA,[e.createElementVNode("p",SA,e.toDisplayString(e.unref(h.trSafe)("Двухфакторная аутентификация добавляет второй слой защиты — даже если пароль попадёт"))+" "+e.toDisplayString(e.unref(h.trSafe)("в чужие руки, без OTP-кода из приложения войти не получится.")),1),e.createVNode(e.unref(m.UidButton),{variant:"primary",loading:p.value,"data-testid":"2fa-enable",onClick:k},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(ur),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Включить 2FA")),1)]),_:1},8,["loading"]),y.value?(e.openBlock(),e.createElementBlock("p",LA,e.toDisplayString(y.value),1)):e.createCommentVNode("",!0)])):l.value==="setup"?(e.openBlock(),e.createElementBlock("div",BA,[e.createElementVNode("ol",_A,[e.createElementVNode("li",null,e.toDisplayString(e.unref(h.trSafe)("Откройте Authenticator-приложение (Google Authenticator, 1Password, Authy…).")),1),e.createElementVNode("li",null,[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Добавьте новый аккаунт вручную, скопировав ключ:"))+" ",1),e.createElementVNode("div",VA,[e.createElementVNode("code",null,e.toDisplayString(v.value),1),e.createElementVNode("button",{type:"button",class:"admin-2fa__copy",onClick:g},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(kt),size:12},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Копировать")),1)])]),e.renderSlot(I.$slots,"qr-code",{uri:d.value},()=>[C.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"admin-2fa__qr",innerHTML:C.value},null,8,qA)):(e.openBlock(),e.createElementBlock("p",AA,[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Либо отсканируйте QR с другого устройства — поделитесь URI:"))+" ",1),e.createElementVNode("code",zA,e.toDisplayString(d.value),1)]))])]),e.createElementVNode("li",null,[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Введите 6-значный код из приложения:"))+" ",1),e.createElementVNode("div",EA,[e.createVNode(e.unref(m.UidInput),{modelValue:s.value,"onUpdate:modelValue":_[0]||(_[0]=L=>s.value=L),"data-testid":"2fa-code",placeholder:"123456",maxlength:"6",class:"admin-2fa__code-input"},null,8,["modelValue"]),e.createVNode(e.unref(m.UidButton),{variant:"primary",loading:p.value,disabled:s.value.length<4,"data-testid":"2fa-confirm",onClick:f},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Подтвердить")),1)]),_:1},8,["loading","disabled"])])])]),y.value?(e.openBlock(),e.createElementBlock("p",NA,e.toDisplayString(y.value),1)):e.createCommentVNode("",!0)])):l.value==="confirmed"?(e.openBlock(),e.createElementBlock("div",DA,[e.createElementVNode("p",FA,e.toDisplayString(e.unref(h.trSafe)("2FA активирована. Сохраните recovery-коды в безопасном месте — они нужны если вы"))+" "+e.toDisplayString(e.unref(h.trSafe)("потеряете доступ к Authenticator-приложению.")),1),e.createElementVNode("div",$A,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,L=>(e.openBlock(),e.createElementBlock("code",{key:L,class:"admin-2fa__codes-item"},e.toDisplayString(L),1))),128))]),e.createVNode(e.unref(m.UidButton),{variant:"ghost",onClick:M},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(kt),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Скопировать все")),1)]),_:1}),e.createVNode(e.unref(m.UidButton),{variant:"primary",onClick:_[1]||(_[1]=L=>l.value="enabled")},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Готово")),1)]),_:1})])):l.value==="enabled"?(e.openBlock(),e.createElementBlock("div",HA,[e.createElementVNode("p",PA,e.toDisplayString(e.unref(h.trSafe)("2FA включена. Если у вас остался доступ к Authenticator app — всё в порядке.")),1),e.createElementVNode("div",TA,[e.createVNode(e.unref(m.UidInput),{modelValue:u.value,"onUpdate:modelValue":_[2]||(_[2]=L=>u.value=L),type:"password",placeholder:e.unref(h.trSafe)("Текущий пароль")},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(m.UidButton),{variant:"secondary",loading:p.value,onClick:w},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(ir),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Перегенерировать recovery-коды")),1)]),_:1},8,["loading"]),e.createVNode(e.unref(m.UidButton),{variant:"danger",loading:p.value,"data-testid":"2fa-disable",onClick:x},{prepend:e.withCtx(()=>[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Ql),size:14},null,8,["icon"])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(e.unref(h.trSafe)("Отключить 2FA")),1)]),_:1},8,["loading"])]),y.value?(e.openBlock(),e.createElementBlock("p",UA,e.toDisplayString(y.value),1)):e.createCommentVNode("",!0),i.value.length>0?(e.openBlock(),e.createElementBlock("div",RA,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,L=>(e.openBlock(),e.createElementBlock("code",{key:L,class:"admin-2fa__codes-item"},e.toDisplayString(L),1))),128))])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)]))}}),OA={class:"admin-page admin-profile"},WA={class:"admin-page__hd"},ZA={class:"admin-page__title-wrap"},GA={class:"admin-page__title"},KA={class:"admin-page__count"},XA={class:"admin-profile__layout"},JA=["aria-label"],YA=["onClick"],QA=["data-icon"],ez={class:"admin-profile__content"},tz={class:"admin-profile__card-hd"},az={class:"admin-profile__card-title"},nz={class:"admin-profile__hero"},oz={class:"admin-profile__hero-text"},rz={class:"admin-profile__hero-name"},lz={class:"admin-profile__hero-meta"},cz={class:"admin-profile__form"},iz={class:"admin-profile__card-ft"},dz={class:"admin-profile__card-hd"},sz={class:"admin-profile__card-title"},uz={class:"admin-profile__hint"},Db=e.defineComponent({__name:"ProfilePage",props:{title:{default:void 0},subtitle:{default:void 0},section:{default:"general"}},emits:["update:section","avatar-replace","two-factor-disable","two-factor-regenerate","save"],setup(t,{emit:a}){const o=t,r=a,l=ye(),c=D9(),d=Ye(),s=e.useSlots(),i=e.ref(!!l.user?.twoFactorEnabled),u=e.computed(()=>[{id:"general",label:h.trSafe("Основное"),icon:"user"},...l.twoFactorAvailable||i.value?[{id:"security",label:h.trSafe("Безопасность"),icon:"shield"}]:[],...s.tokens?[{id:"tokens",label:h.trSafe("API токены"),icon:"key"}]:[],...s.sessions?[{id:"sessions",label:h.trSafe("Сессии"),icon:"monitor"}]:[]]);function p(_){return u.value.some(L=>L.id===_)?_:"general"}const y=e.ref(p(o.section));function k(_){y.value=_,r("update:section",_)}e.watch(()=>o.section,_=>{y.value=p(_)});const f=e.ref({name:l.user?.name??"",email:l.user?.email??"",locale:d.current,theme:c.current}),x=e.computed(()=>d.available.map(_=>({value:_,label:_.toUpperCase()}))),w=e.computed(()=>c.available.map(_=>({value:_,label:_==="dark"?h.trSafe("Тёмная"):_==="light"?h.trSafe("Светлая"):_})));e.watch(()=>f.value.locale,(_,L)=>{_===L||!_||d.setLocale(_).then(()=>{typeof window<"u"&&window.location.reload()}).catch(()=>{})}),e.watch(()=>f.value.theme,(_,L)=>{_===L||!_||c.setTheme(_).catch(()=>{})});function g(){r("save",{...f.value})}function M(){r("avatar-replace")}const v=e.computed(()=>i.value);function C(){i.value=!0,l.user&&(l.user.twoFactorEnabled=!0),r("two-factor-regenerate")}function I(){i.value=!1,l.user&&(l.user.twoFactorEnabled=!1),r("two-factor-disable")}return(_,L)=>(e.openBlock(),e.createElementBlock("section",OA,[e.createElementVNode("header",WA,[e.createElementVNode("div",ZA,[e.createElementVNode("h1",GA,e.toDisplayString(t.title??e.unref(h.trSafe)("Профиль")),1),e.createElementVNode("div",KA,e.toDisplayString(t.subtitle??e.unref(h.trSafe)("Личные данные, безопасность, токены")),1)])]),e.createElementVNode("div",XA,[e.createElementVNode("nav",{class:"admin-profile__nav","aria-label":e.unref(h.trSafe)("Разделы профиля")},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,B=>(e.openBlock(),e.createElementBlock("button",{key:B.id,type:"button",class:e.normalizeClass(["admin-profile__nav-item",{"admin-profile__nav-item--active":y.value===B.id}]),onClick:E=>k(B.id)},[e.createElementVNode("span",{class:"admin-profile__nav-icon","data-icon":B.icon},null,8,QA),e.createElementVNode("span",null,e.toDisplayString(B.label),1)],10,YA))),128))],8,JA),e.createElementVNode("div",ez,[y.value==="general"?(e.openBlock(),e.createBlock(e.unref(m.UidCard),{key:0,padding:"md"},{default:e.withCtx(()=>[e.createElementVNode("header",tz,[e.createElementVNode("h3",az,e.toDisplayString(e.unref(h.trSafe)("Профиль")),1)]),e.createElementVNode("div",nz,[e.createVNode(e.unref(m.UidAvatar),{src:e.unref(l).user?.avatar??void 0,name:e.unref(l).user?.name??"?",size:"lg"},null,8,["src","name"]),e.createElementVNode("div",oz,[e.createElementVNode("div",rz,e.toDisplayString(e.unref(l).user?.name??"—"),1),e.createElementVNode("div",lz,e.toDisplayString(e.unref(l).user?.email??"—"),1)]),L[4]||(L[4]=e.createElementVNode("div",{style:{flex:"1"}},null,-1)),e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"sm",onClick:M},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Заменить")),1)]),_:1})]),e.createElementVNode("div",cz,[e.createVNode(e.unref(m.UidInput),{modelValue:f.value.name,"onUpdate:modelValue":L[0]||(L[0]=B=>f.value.name=B),label:e.unref(h.trSafe)("Имя"),name:"name"},null,8,["modelValue","label"]),e.createVNode(e.unref(m.UidInput),{modelValue:f.value.email,"onUpdate:modelValue":L[1]||(L[1]=B=>f.value.email=B),label:"Email",type:"email",name:"email"},null,8,["modelValue"]),e.createVNode(e.unref(m.UidFormField),{label:e.unref(h.trSafe)("Язык")},{default:e.withCtx(()=>[e.createVNode(e.unref(m.UidSelect),{modelValue:f.value.locale,"onUpdate:modelValue":L[2]||(L[2]=B=>f.value.locale=B),options:x.value},null,8,["modelValue","options"])]),_:1},8,["label"]),e.createVNode(e.unref(m.UidFormField),{label:e.unref(h.trSafe)("Тема")},{default:e.withCtx(()=>[e.createVNode(e.unref(m.UidSelect),{modelValue:f.value.theme,"onUpdate:modelValue":L[3]||(L[3]=B=>f.value.theme=B),options:w.value},null,8,["modelValue","options"])]),_:1},8,["label"])]),e.createElementVNode("footer",iz,[e.createVNode(e.unref(m.UidButton),{variant:"primary",onClick:g},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Сохранить")),1)]),_:1})])]),_:1})):y.value==="security"?(e.openBlock(),e.createBlock(e.unref(m.UidCard),{key:1,padding:"md"},{default:e.withCtx(()=>[e.createElementVNode("header",dz,[e.createElementVNode("h3",sz,e.toDisplayString(e.unref(h.trSafe)("Двухфакторная аутентификация")),1),e.createVNode(e.unref(m.UidBadge),{variant:v.value?"success":"default"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(v.value?e.unref(h.trSafe)("Включена"):e.unref(h.trSafe)("Отключена")),1)]),_:1},8,["variant"])]),e.unref(l).needsTwoFactorSetup?(e.openBlock(),e.createBlock(e.unref(m.UidAlert),{key:0,variant:"warning",class:"admin-profile__alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Ваша роль требует двухфакторной аутентификации. Включите её, чтобы продолжить работу в панели.")),1)]),_:1})):e.createCommentVNode("",!0),e.renderSlot(_.$slots,"enable-2fa",{},()=>[e.createVNode(jA,{enabled:v.value,onEnabled:C,onDisabled:I},null,8,["enabled"])])]),_:3})):e.renderSlot(_.$slots,y.value,{section:y.value},()=>[e.createVNode(e.unref(m.UidCard),{padding:"md"},{default:e.withCtx(()=>[e.createElementVNode("p",uz,e.toDisplayString(e.unref(h.tRaw)("Раздел «:section» библиотекой не реализован —",{section:y.value}))+" "+e.toDisplayString(e.unref(h.tRaw)("проект подключает его через слот :section.",{section:y.value})),1)]),_:1})],void 0,2)])])]))}}),hz={class:"admin-page admin-notifs-page"},pz={class:"admin-notifs-page__head"},yz={class:"admin-page__title"},kz={class:"admin-notifs-page__sub"},mz={class:"admin-notifs-page__tabs"},fz=["onClick"],vz={key:1,class:"admin-notifs-page__empty"},gz={class:"admin-notifs-page__row"},Mz=["data-kind"],wz={class:"admin-notifs-page__body"},xz={key:0,class:"admin-notifs-page__item-body"},bz={class:"admin-notifs-page__time"},Iz={class:"admin-notifs-page__actions"},Cz={key:3,class:"admin-notifs-page__pager"},Sz={class:"admin-notifs-page__pager-info"},Lz=e.defineComponent({__name:"NotificationsPage",setup(t){const a=bc(),o=e.ref("all"),r=[{id:"all",label:h.trSafe("Все")},{id:"unread",label:h.trSafe("Непрочитанные")},{id:"read",label:h.trSafe("Прочитанные")}],l=e.computed(()=>a.meta?.page??1),c=e.computed(()=>a.meta?.last_page??1),d=e.computed(()=>a.meta?.total??a.items.length);async function s(M){o.value=M,await a.load(M,1).catch(()=>{})}async function i(M){M<1||M>c.value||await a.load(o.value,M).catch(()=>{})}async function u(M){M.read_at||await a.markAsRead(M.id).catch(()=>{})}async function p(M){await a.destroy(M.id).catch(()=>{})}async function y(){await a.markAllAsRead().catch(()=>{}),await a.load(o.value,l.value).catch(()=>{})}const k=M=>Rx(M,"—"),f=M=>jx(M),x=M=>M.data.url??null,w=M=>ww(M);function g(M){return M===null?"":new Date(M).toLocaleString(h.formatLocale())}return e.onMounted(()=>{a.load("all",1).catch(()=>{})}),(M,v)=>(e.openBlock(),e.createElementBlock("div",hz,[e.createElementVNode("div",pz,[e.createElementVNode("div",null,[e.createElementVNode("h1",yz,e.toDisplayString(e.unref(h.trSafe)("Уведомления")),1),e.createElementVNode("p",kz,e.toDisplayString(e.unref(h.tRaw)("Всего: :total, непрочитанных: :unread",{total:d.value,unread:e.unref(a).unreadCount})),1)]),e.unref(a).hasUnread?(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:0,variant:"secondary",size:"sm",onClick:y},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Прочитать все")),1)]),_:1})):e.createCommentVNode("",!0)]),e.createElementVNode("div",mz,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(r,C=>e.createElementVNode("button",{key:C.id,type:"button",class:e.normalizeClass(["admin-notifs-page__tab",{"admin-notifs-page__tab--active":o.value===C.id}]),onClick:I=>s(C.id)},e.toDisplayString(C.label),11,fz)),64))]),e.unref(a).loading?(e.openBlock(),e.createBlock(e.unref(m.UidSpinner),{key:0})):e.unref(a).items.length===0?(e.openBlock(),e.createElementBlock("p",vz,e.toDisplayString(o.value==="unread"?e.unref(h.trSafe)("Непрочитанных нет."):e.unref(h.trSafe)("Уведомлений пока нет.")),1)):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(e.unref(a).items,C=>(e.openBlock(),e.createBlock(e.unref(m.UidCard),{key:C.id,padding:"sm",class:e.normalizeClass(["admin-notifs-page__item",{"admin-notifs-page__item--unread":!C.read_at}])},{default:e.withCtx(()=>[e.createElementVNode("div",gz,[e.createElementVNode("span",{class:"admin-notifs-page__icon","data-kind":w(C),"aria-hidden":"true"},[e.createVNode(e.unref(m.UidIcon),{icon:e.unref(Ox)(C),size:14},null,8,["icon"])],8,Mz),e.createElementVNode("div",wz,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(x(C)?"a":"span"),{href:x(C)??void 0,class:"admin-notifs-page__item-title",onClick:I=>u(C)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(k(C)),1)]),_:2},1032,["href","onClick"])),f(C)?(e.openBlock(),e.createElementBlock("p",xz,e.toDisplayString(f(C)),1)):e.createCommentVNode("",!0),e.createElementVNode("span",bz,e.toDisplayString(g(C.created_at)),1)]),e.createElementVNode("div",Iz,[C.read_at?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(m.UidButton),{key:0,variant:"ghost",size:"sm",onClick:I=>u(C)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Прочитано")),1)]),_:1},8,["onClick"])),e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"sm",onClick:I=>p(C)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Удалить")),1)]),_:1},8,["onClick"])])])]),_:2},1032,["class"]))),128)),c.value>1?(e.openBlock(),e.createElementBlock("div",Cz,[e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"sm",disabled:l.value<=1,onClick:v[0]||(v[0]=C=>i(l.value-1))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Назад")),1)]),_:1},8,["disabled"]),e.createElementVNode("span",Sz,e.toDisplayString(e.unref(h.tRaw)("Страница :page из :last",{page:l.value,last:c.value})),1),e.createVNode(e.unref(m.UidButton),{variant:"ghost",size:"sm",disabled:l.value>=c.value,onClick:v[1]||(v[1]=C=>i(l.value+1))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h.trSafe)("Вперёд")),1)]),_:1},8,["disabled"])])):e.createCommentVNode("",!0)]))}}),Fb=ge(Lz,[["__scopeId","data-v-5112f887"]]),Bz={key:1,class:"admin-stats-widget"},_z={key:0,class:"admin-stats-widget__hd"},Vz={class:"admin-stats-widget__title"},qz={class:"admin-stats-widget__grid"},iw=e.defineComponent({__name:"StatWidget",props:{title:{default:""},stats:{default:()=>[]},value:{default:0},prefix:{default:""},suffix:{default:""},trend:{default:void 0},precision:{default:0},tone:{default:"neutral"},loading:{type:Boolean,default:!1}},setup(t){const a=t,o={neutral:"primary",primary:"primary",default:"primary",positive:"success",success:"success",green:"success",negative:"danger",danger:"danger",error:"danger",red:"danger",warning:"warning",yellow:"warning",orange:"warning",info:"info",blue:"info"};function r(p){return o[(p??"").toLowerCase()]??o[a.tone]??"primary"}function l(p){if(!p||typeof p.delta!="number")return;const y=Math.abs(p.delta);return p.direction==="down"?-y:p.direction==="up"?y:p.delta}function c(p){if(p?.style!=="currency"||!p.currency)return;const y=p.decimals??0;return k=>{const f=typeof k=="number"?k:Number(k);if(typeof k=="string"&&(k.trim()===""||Number.isNaN(f)))return k;try{return h.formatNumber(f,{style:"currency",currency:p.currency,minimumFractionDigits:y,maximumFractionDigits:y})}catch{return`${h.formatNumber(f,{minimumFractionDigits:y,maximumFractionDigits:y})} ${p.currency}`}}}const d=e.computed(()=>{if(a.stats.length===0)return[{title:a.title,value:a.value,prefix:a.prefix,suffix:a.suffix,trend:a.trend,tone:r(null),icon:void 0,precision:a.precision,formatter:void 0}];const p=a.stats.length===1;return a.stats.map(y=>({title:(p&&a.title?a.title:y.label)??"",value:y.value??"",prefix:y.prefix??"",suffix:y.suffix??"",trend:l(y.change),tone:r(y.color),icon:be(y.icon)??void 0,precision:typeof y.precision=="number"?y.precision:a.precision,formatter:c(y.format)}))}),s=e.computed(()=>d.value.length>1);let i=null;try{i=Ye()}catch{}const u=e.computed(()=>h.intlLocale(i?.current??h.currentLocale()));return(p,y)=>s.value?(e.openBlock(),e.createElementBlock("section",Bz,[t.title?(e.openBlock(),e.createElementBlock("header",_z,[e.createElementVNode("h3",Vz,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",qz,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,(k,f)=>(e.openBlock(),e.createBlock(e.unref(m.UidStat),{key:f,title:k.title,value:k.value,prefix:k.prefix,suffix:k.suffix,trend:k.trend,precision:k.precision,formatter:k.formatter,locale:u.value,tone:k.tone,icon:k.icon,loading:t.loading,"trend-placement":"below"},null,8,["title","value","prefix","suffix","trend","precision","formatter","locale","tone","icon","loading"]))),128))])])):(e.openBlock(),e.createBlock(e.unref(m.UidStat),{key:0,title:d.value[0].title,value:d.value[0].value,prefix:d.value[0].prefix,suffix:d.value[0].suffix,trend:d.value[0].trend,precision:d.value[0].precision,formatter:d.value[0].formatter,locale:u.value,tone:d.value[0].tone,icon:d.value[0].icon,loading:t.loading,"trend-placement":"below",class:"admin-stats-widget__single"},null,8,["title","value","prefix","suffix","trend","precision","formatter","locale","tone","icon","loading"]))}}),Az={class:"admin-chart-legend"},zz={class:"admin-chart-legend__label"},$b=e.defineComponent({__name:"ChartLegend",props:{items:{}},setup(t){return(a,o)=>(e.openBlock(),e.createElementBlock("ul",Az,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(r,l)=>(e.openBlock(),e.createElementBlock("li",{key:l,class:"admin-chart-legend__item"},[e.createElementVNode("span",{class:"admin-chart-legend__swatch",style:e.normalizeStyle({background:r.color})},null,4),e.createElementVNode("span",zz,e.toDisplayString(r.label),1)]))),128))]))}}),Ez={class:"admin-chart-tooltip__title"},Nz={class:"admin-chart-tooltip__label"},Dz={class:"admin-chart-tooltip__value"},Hb=e.defineComponent({__name:"ChartTooltip",props:{x:{},y:{},title:{},rows:{},boundsWidth:{}},setup(t){const a=t,o=e.computed(()=>{const r=a.x>a.boundsWidth/2;return{top:`${Math.max(0,a.y)}px`,...r?{right:`${Math.max(0,a.boundsWidth-a.x+12)}px`}:{left:`${a.x+12}px`}}});return(r,l)=>(e.openBlock(),e.createElementBlock("div",{class:"admin-chart-tooltip",role:"presentation",style:e.normalizeStyle(o.value)},[e.createElementVNode("div",Ez,e.toDisplayString(t.title),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.rows,(c,d)=>(e.openBlock(),e.createElementBlock("div",{key:d,class:"admin-chart-tooltip__row"},[e.createElementVNode("span",{class:"admin-chart-tooltip__swatch",style:e.normalizeStyle({background:c.color})},null,4),e.createElementVNode("span",Nz,e.toDisplayString(c.label),1),e.createElementVNode("span",Dz,e.toDisplayString(c.value),1)]))),128))],4))}});function Pb(t,a){const o=e.ref(a.width),r=e.ref(a.height);let l=null;function c(d,s){d>0&&(o.value=Math.round(d)),s>0&&(r.value=Math.round(s))}return e.onMounted(()=>{if(!t.value)return;const d=t.value.getBoundingClientRect();c(d.width,d.height),!(typeof ResizeObserver>"u")&&(l=new ResizeObserver(s=>{const i=s[0]?.contentRect;i&&c(i.width,i.height)}),l.observe(t.value))}),e.onBeforeUnmount(()=>{l?.disconnect(),l=null}),{width:o,height:r}}const Fz={primary:"var(--uid-accent)",accent:"var(--uid-accent)",teal:"var(--uid-accent)",success:"var(--uid-color-success)",positive:"var(--uid-color-success)",green:"var(--uid-color-success)",emerald:"var(--uid-color-success)",warning:"var(--uid-color-warning)",amber:"var(--uid-color-warning)",yellow:"var(--uid-color-warning)",orange:"var(--uid-color-warning)",danger:"var(--uid-color-danger)",negative:"var(--uid-color-danger)",error:"var(--uid-color-danger)",red:"var(--uid-color-danger)",rose:"var(--uid-color-danger)",info:"var(--uid-color-info)",blue:"var(--uid-color-info)",neutral:"var(--uid-color-zinc-400)",default:"var(--uid-color-zinc-400)",gray:"var(--uid-color-zinc-400)",grey:"var(--uid-color-zinc-400)",zinc:"var(--uid-color-zinc-400)"};function Mr(t){if(typeof t!="string")return"";const a=t.trim();return a===""?"":Fz[a.toLowerCase()]??a}const lx=["var(--admin-chart-series-1, #2563eb)","var(--admin-chart-series-2, #d97706)","var(--admin-chart-series-3, #059669)","var(--admin-chart-series-4, #9333ea)","var(--admin-chart-series-5, #db2777)","var(--admin-chart-series-6, #0891b2)"],$z="var(--uid-accent)";function Hz(t){if(typeof t=="number")return Number.isFinite(t)?t:null;if(typeof t=="string"&&t.trim()!==""){const a=Number(t);return Number.isFinite(a)?a:null}return null}function Pz(t,a=$z){const o=Array.isArray(t)?t.filter(r=>r&&typeof r=="object"):[];return o.map((r,l)=>({label:typeof r.label=="string"&&r.label!==""?r.label:`#${l+1}`,data:Array.isArray(r.data)?r.data.map(Hz):[],color:Mr(r.color)!==""?Mr(r.color):o.length===1?a:lx[l%lx.length]}))}function Tz(t,a){const o=Array.isArray(t)?t.map(c=>String(c??"")):[],r=Math.max(o.length,...a.map(c=>c.data.length),0),l=[];for(let c=0;c<r;c++)l.push(o[c]??String(c+1));return l}function Tb(t){return!t.some(a=>a.data.some(o=>o!==null&&o!==0))}function Uz(t,a){const o=new Array(a).fill(0);return t.map(r=>o.map((l,c)=>(o[c]+=r.data[c]??0,o[c])))}function Rz(t,a){const o=t/Math.max(1,a),r=Math.pow(10,Math.floor(Math.log10(o))),l=o/r;return(l<=1?1:l<=2?2:l<=2.5?2.5:l<=5?5:10)*r}function Ub(t,a,o=4){let r=Math.min(0,t),l=Math.max(0,a);r===l&&(l=r+1);const c=Rz(l-r,o);r=Math.floor(r/c)*c,l=Math.ceil(l/c)*c;const d=[];for(let s=r;s<=l+c/2;s+=c)d.push(Math.round(s/c)*c);return{min:r,max:l,ticks:d}}function Rb(t){return h.formatNumber(t,{notation:"compact",maximumFractionDigits:1})}function _9(t){return t===null?"—":h.formatNumber(t,{maximumFractionDigits:2})}function cx(t,a=11){return t.length*a*.6}const jz={key:0,class:"admin-widget__hd"},Oz={key:0,class:"admin-widget__title"},Wz={key:1,class:"admin-widget__desc"},Zz={key:1,class:"admin-widget__empty"},Gz=["width","height","viewBox","aria-label"],Kz={class:"admin-chart__grid"},Xz=["x1","x2","y1","y2"],Jz=["x","y"],Yz=["x","width","height"],Qz={key:1,class:"admin-chart__bars"},eE=["x","y","width","height","fill","rx","data-series","data-label","data-value"],tE={key:2,class:"admin-chart__series"},aE=["data-series"],nE=["d","fill","fill-opacity"],oE=["d","stroke"],rE=["cx","cy","r","fill"],lE=["cx","cy","fill"],cE=["x1","x2","y2"],iE=["x","y"],dE={class:"admin-chart__sr"},sE={scope:"row"},It=8,uE=12,hE=22,ix=11,jb=e.defineComponent({__name:"CartesianChartWidget",props:{kind:{default:"line"},title:{default:""},description:{default:""},labels:{},series:{},stacked:{type:Boolean,default:!1},height:{default:200}},setup(t){const a=t,o=e.ref(null),r=e.ref(null),{width:l,height:c}=Pb(o,{width:480,height:a.height}),d=e.computed(()=>a.labels.length),s=e.computed(()=>d.value===0||Tb(a.series)),i=e.computed(()=>a.kind==="bar"),u=e.computed(()=>a.stacked?Uz(a.series,d.value).map((V,S)=>V.map((A,P)=>a.series[S].data[P]===null?null:A)):a.series.map(V=>V.data.slice(0,d.value))),p=e.computed(()=>{const b=[];for(const A of u.value)for(const P of A)P!==null&&b.push(P);if(a.stacked&&i.value)for(let A=0;A<d.value;A++){let P=0;for(const X of a.series){const O=X.data[A];O!=null&&O<0&&(P+=O)}b.push(P)}const V=b.length?Math.min(...b):0,S=b.length?Math.max(...b):1;return Ub(V,S,c.value<160?3:4)}),y=e.computed(()=>p.value.ticks.map(b=>Rb(b))),k=e.computed(()=>Math.ceil(Math.max(...y.value.map(b=>cx(b,ix)),8))+10),f=e.computed(()=>Math.max(20,l.value-k.value-uE)),x=e.computed(()=>Math.max(20,c.value-It-hE)),w=e.computed(()=>f.value/Math.max(1,d.value));function g(b){const{min:V,max:S}=p.value;return It+x.value*(1-(b-V)/(S-V||1))}const M=e.computed(()=>g(Math.max(p.value.min,Math.min(0,p.value.max))));function v(b){return i.value?k.value+w.value*(b+.5):d.value<=1?k.value+f.value/2:k.value+f.value*b/(d.value-1)}const C=e.computed(()=>p.value.ticks.map((b,V)=>({y:g(b),label:y.value[V],zero:b===0}))),I=e.computed(()=>{const b=a.labels.map(O=>O.length>16?`${O.slice(0,15)}…`:O),V=b.map(O=>cx(O,ix)),S=Math.max(...V,1)+12,A=i.value?w.value:f.value/Math.max(1,d.value-1),P=Math.max(1,Math.ceil(S/Math.max(1,A))),X=[];for(let O=0;O<d.value;O+=P){const ae=V[O]/2;X.push({text:b[O],x:Math.min(Math.max(v(O),ae+2),l.value-ae-2)})}return X});function _(b){const V=[];let S=[];return b.forEach((A,P)=>{A===null?(S.length&&V.push(S),S=[]):S.push({i:P,v:A})}),S.length&&V.push(S),V}const L=b=>(Math.round(b*100)/100).toString(),B=e.computed(()=>u.value.map((b,V)=>{const S=_(b),A=S.map(O=>O.map((ae,Y)=>`${Y===0?"M":"L"}${L(v(ae.i))} ${L(g(ae.v))}`).join(" ")).join(" "),P=a.kind==="area"?S.map(O=>{const ae=O.map((Q,ee)=>`${ee===0?"M":"L"}${L(v(Q.i))} ${L(g(Q.v))}`).join(" "),Y=[...O].reverse().map(Q=>{const ee=a.stacked&&V>0?u.value[V-1][Q.i]??0:null;return`L${L(v(Q.i))} ${L(ee===null?M.value:g(ee))}`}).join(" ");return`${ae} ${Y} Z`}).join(" "):"",X=S.flat().map(O=>({i:O.i,cx:v(O.i),cy:g(O.v)}));return{color:a.series[V].color,d:A,area:P,points:X}})),E=e.computed(()=>d.value<=24&&f.value/Math.max(1,d.value)>=12),z=e.computed(()=>{if(!i.value)return[];const b=[],V=Math.max(1,a.series.length);if(a.stacked){const X=Math.min(48,w.value*.6);for(let O=0;O<d.value;O++){let ae=0,Y=0;a.series.forEach((Q,ee)=>{const oe=Q.data[O];if(oe==null||oe===0)return;const he=oe>0?ae:Y,Me=he+oe;oe>0?ae=Me:Y=Me;const Te=g(Math.max(he,Me));b.push({x:v(O)-X/2,y:Te,w:X,h:Math.max(0,g(Math.min(he,Me))-Te),color:Q.color,si:ee,i:O,value:oe})})}return b}const S=Math.min(w.value*.72,40*V),A=S/V>6?2:0,P=Math.max(1,(S-A*(V-1))/V);for(let X=0;X<d.value;X++)a.series.forEach((O,ae)=>{const Y=O.data[X];if(Y==null)return;const Q=Math.min(g(Y),M.value);b.push({x:v(X)-S/2+ae*(P+A),y:Q,w:P,h:Math.abs(g(Y)-M.value),color:O.color,si:ae,i:X,value:Y})});return b}),q=e.ref(null);function F(b){const V=r.value?.getBoundingClientRect();if(!V||d.value===0)return;const S=b.clientX-V.left-k.value;let A;i.value?A=Math.floor(S/w.value):A=d.value<=1?0:Math.round(S/f.value*(d.value-1)),q.value=Math.min(d.value-1,Math.max(0,A))}function H(){q.value=null}const $=e.computed(()=>{const b=q.value;return b===null?null:{x:v(b),y:It,title:a.labels[b]??"",rows:a.series.map(V=>({label:V.label,color:V.color,value:_9(V.data[b]??null)}))}}),N=e.computed(()=>a.series.map(b=>({label:b.label,color:b.color})));return(b,V)=>(e.openBlock(),e.createBlock(e.unref(m.UidCard),{padding:"md",class:e.normalizeClass(["admin-widget admin-chart",[`admin-chart--${t.kind}`,{"admin-chart--stacked":t.stacked}]])},{default:e.withCtx(()=>[t.title||t.description?(e.openBlock(),e.createElementBlock("header",jz,[t.title?(e.openBlock(),e.createElementBlock("h3",Oz,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("p",Wz,e.toDisplayString(t.description),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("div",Zz,e.toDisplayString(e.unref(h.trSafe)("Нет данных за период")),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("div",{ref_key:"box",ref:o,class:"admin-chart__box",style:e.normalizeStyle({minHeight:`${t.height}px`})},[(e.openBlock(),e.createElementBlock("svg",{ref_key:"svgEl",ref:r,class:"admin-chart__svg",width:e.unref(l),height:e.unref(c),viewBox:`0 0 ${e.unref(l)} ${e.unref(c)}`,role:"img","aria-label":t.title||t.kind,onPointermove:F,onMousemove:F,onPointerleave:H,onMouseleave:H},[e.createElementVNode("g",Kz,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,(S,A)=>(e.openBlock(),e.createElementBlock("line",{key:`g${A}`,x1:k.value,x2:k.value+f.value,y1:S.y,y2:S.y,class:e.normalizeClass(S.zero?"admin-chart__axis-line":"admin-chart__grid-line")},null,10,Xz))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,(S,A)=>(e.openBlock(),e.createElementBlock("text",{key:`t${A}`,x:k.value-6,y:S.y,class:"admin-chart__tick","text-anchor":"end","dominant-baseline":"middle"},e.toDisplayString(S.label),9,Jz))),128))]),q.value!==null&&i.value?(e.openBlock(),e.createElementBlock("rect",{key:0,class:"admin-chart__hover-band",x:k.value+w.value*q.value,y:It,width:w.value,height:x.value},null,8,Yz)):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createElementBlock("g",Qz,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(z.value,(S,A)=>(e.openBlock(),e.createElementBlock("rect",{key:A,class:"admin-chart__bar",x:S.x,y:S.y,width:S.w,height:S.h,fill:S.color,rx:t.stacked?0:Math.min(3,S.w/2),"data-series":S.si,"data-label":t.labels[S.i],"data-value":S.value},null,8,eE))),128))])):(e.openBlock(),e.createElementBlock("g",tE,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.value,(S,A)=>(e.openBlock(),e.createElementBlock("g",{key:A,"data-series":A},[t.kind==="area"?(e.openBlock(),e.createElementBlock("path",{key:0,class:"admin-chart__area",d:S.area,fill:S.color,"fill-opacity":t.stacked?.45:.16},null,8,nE)):e.createCommentVNode("",!0),e.createElementVNode("path",{class:"admin-chart__line",d:S.d,stroke:S.color,fill:"none"},null,8,oE),E.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(S.points,P=>(e.openBlock(),e.createElementBlock("circle",{key:P.i,class:"admin-chart__point",cx:P.cx,cy:P.cy,r:q.value===P.i?4.5:3,fill:S.color},null,8,rE))),128)):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(S.points.filter(P=>P.i===q.value),P=>(e.openBlock(),e.createElementBlock("circle",{key:P.i,class:"admin-chart__point",cx:P.cx,cy:P.cy,r:"4.5",fill:S.color},null,8,lE))),128))],8,aE))),128))])),q.value!==null&&!i.value?(e.openBlock(),e.createElementBlock("line",{key:3,class:"admin-chart__crosshair",x1:v(q.value),x2:v(q.value),y1:It,y2:It+x.value},null,8,cE)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.value,(S,A)=>(e.openBlock(),e.createElementBlock("text",{key:`x${A}`,class:"admin-chart__tick",x:S.x,y:It+x.value+15,"text-anchor":"middle"},e.toDisplayString(S.text),9,iE))),128))],40,Gz)),$.value?(e.openBlock(),e.createBlock(Hb,{key:0,x:$.value.x,y:$.value.y,title:$.value.title,rows:$.value.rows,"bounds-width":e.unref(l)},null,8,["x","y","title","rows","bounds-width"])):e.createCommentVNode("",!0)],4),t.series.length>1?(e.openBlock(),e.createBlock($b,{key:0,items:N.value},null,8,["items"])):e.createCommentVNode("",!0),e.createElementVNode("table",dE,[e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[V[0]||(V[0]=e.createElementVNode("th",null,null,-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.series,(S,A)=>(e.openBlock(),e.createElementBlock("th",{key:A,scope:"col"},e.toDisplayString(S.label),1))),128))])]),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.labels,(S,A)=>(e.openBlock(),e.createElementBlock("tr",{key:A},[e.createElementVNode("th",sE,e.toDisplayString(S),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.series,(P,X)=>(e.openBlock(),e.createElementBlock("td",{key:X},e.toDisplayString(e.unref(_9)(P.data[A]??null)),1))),128))]))),128))])])],64))]),_:1},8,["class"]))}}),Ob=e.defineComponent({__name:"BarChartWidget",props:{title:{default:""},description:{default:""},data:{},accent:{default:"var(--uid-accent)"},height:{default:200},seriesLabel:{default:""}},setup(t){const a=t,o=e.computed(()=>(a.data??[]).map(l=>String(l.label))),r=e.computed(()=>[{label:a.seriesLabel||a.title||"",data:(a.data??[]).map(l=>Number.isFinite(Number(l.value))?Number(l.value):null),color:a.accent}]);return(l,c)=>(e.openBlock(),e.createBlock(jb,{kind:"bar",title:t.title,description:t.description,labels:o.value,series:r.value,height:t.height},null,8,["title","description","labels","series","height"]))}}),pE={key:0,class:"admin-widget__hd"},yE={class:"admin-widget__title"},kE={key:1,class:"admin-widget__empty"},mE={key:2,class:"admin-donut-widget__row"},fE=["aria-label"],vE=["d","fill"],gE={key:0,cx:"60",cy:"60",r:"30",fill:"var(--uid-surface-raised)"},ME={class:"admin-donut-widget__legend"},wE={class:"admin-donut-widget__label"},xE={class:"admin-donut-widget__value"},Hw=e.defineComponent({__name:"DonutChartWidget",props:{title:{default:""},data:{},hole:{type:Boolean,default:!0}},setup(t){const a=t,o=["var(--uid-color-teal-500, #14b8a6)","var(--uid-color-zinc-700, #3f3f46)","var(--uid-color-amber-400, #fbbf24)","var(--uid-color-rose-400, #fb7185)","var(--uid-color-blue-400, #60a5fa)"],r=e.computed(()=>a.data.length===0||a.data.every(d=>!d.value)),l=e.computed(()=>a.data.reduce((d,s)=>d+s.value,0)||1),c=e.computed(()=>{let d=0;return a.data.map((s,i)=>{const u=d/l.value*2*Math.PI;d+=s.value;const p=d/l.value*2*Math.PI,y=50,k=60,f=60,x=k+y*Math.cos(u-Math.PI/2),w=f+y*Math.sin(u-Math.PI/2),g=k+y*Math.cos(p-Math.PI/2),M=f+y*Math.sin(p-Math.PI/2),v=p-u>Math.PI?1:0,C=a.data.length===1?`M ${k-y} ${f} a ${y} ${y} 0 1 0 ${y*2} 0 a ${y} ${y} 0 1 0 ${-y*2} 0`:`M ${k} ${f} L ${x} ${w} A ${y} ${y} 0 ${v} 1 ${g} ${M} Z`;return{...s,path:C,color:Mr(s.color)||o[i%o.length],pct:h.formatNumber(s.value/l.value*100,{minimumFractionDigits:1,maximumFractionDigits:1})}})});return(d,s)=>(e.openBlock(),e.createBlock(e.unref(m.UidCard),{padding:"md",class:"admin-widget admin-donut-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",pE,[e.createElementVNode("h3",yE,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),r.value?(e.openBlock(),e.createElementBlock("div",kE,e.toDisplayString(e.unref(h.trSafe)("Нет данных")),1)):(e.openBlock(),e.createElementBlock("div",mE,[(e.openBlock(),e.createElementBlock("svg",{viewBox:"0 0 120 120",class:"admin-donut-widget__svg",role:"img","aria-label":t.title},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(i,u)=>(e.openBlock(),e.createElementBlock("path",{key:u,d:i.path,fill:i.color,stroke:"var(--uid-surface-raised)","stroke-width":"1"},[e.createElementVNode("title",null,e.toDisplayString(i.label)+": "+e.toDisplayString(e.unref(h.formatNumber)(i.value))+" ("+e.toDisplayString(i.pct)+"%)",1)],8,vE))),128)),t.hole?(e.openBlock(),e.createElementBlock("circle",gE)):e.createCommentVNode("",!0)],8,fE)),e.createElementVNode("ul",ME,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(i,u)=>(e.openBlock(),e.createElementBlock("li",{key:u},[e.createElementVNode("span",{class:"admin-donut-widget__dot",style:e.normalizeStyle({background:i.color})},null,4),e.createElementVNode("span",wE,e.toDisplayString(i.label),1),e.createElementVNode("span",xE,e.toDisplayString(i.pct)+"%",1)]))),128))])]))]),_:1}))}}),bE={key:0,class:"admin-widget__hd"},IE={class:"admin-widget__title"},CE=e.defineComponent({__name:"RecentTableWidget",props:{title:{default:""},columns:{default:()=>[]},rows:{default:()=>[]},emptyText:{default:h.trSafe("Нет данных")},linkTo:{default:null}},setup(t){const a=t,o=le.useRouter();function r(d){const s=d.id;!a.linkTo||s===void 0||s===null||o?.push(`/r/${a.linkTo}/${s}`)}const l=e.computed(()=>a.columns.map(d=>{const s=d.column??d.key;return{key:String(s??""),label:d.label,align:d.align}})),c=e.computed(()=>a.rows.map(d=>{const s={...d};for(const i of l.value)s[i.key]=T9(d[i.key],void 0,{});return s}));return(d,s)=>(e.openBlock(),e.createBlock(e.unref(m.UidCard),{padding:"md",class:"admin-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",bE,[e.createElementVNode("h3",IE,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createVNode(e.unref(m.UidTable),{columns:l.value,data:c.value,"empty-text":e.unref(h.trSafe)(t.emptyText),class:e.normalizeClass({"admin-widget__table--clickable":!!t.linkTo}),onRowClick:r},null,8,["columns","data","empty-text","class"])]),_:1}))}}),w9=ge(CE,[["__scopeId","data-v-c9bc6a1d"]]),SE={key:0,class:"admin-widget__hd"},LE={class:"admin-widget__title"},BE={class:"admin-heatmap__cols-axis","aria-hidden":"true"},_E={class:"admin-heatmap__row-label"},VE={class:"admin-heatmap__cells"},qE=["title"],AE={key:2,class:"admin-heatmap__empty"},Wb=e.defineComponent({__name:"HeatmapWidget",props:{title:{default:""},rows:{default:()=>[]},cols:{default:()=>[]},matrix:{default:()=>[]},formatValue:{type:Function,default:void 0},color:{default:"var(--uid-color-primary, #14b8a6)"}},setup(t){const a=t,o=e.computed(()=>{let c=0;for(const d of a.matrix)for(const s of d)typeof s=="number"&&s>c&&(c=s);return c||1});function r(c){return typeof c!="number"||c<=0?0:Math.max(.1,Math.min(1,c/o.value))}function l(c,d,s){const i=a.rows[d]??"",u=a.cols[s]??"";return a.formatValue?a.formatValue(c,i,u):`${i} ${u}: ${c}`}return(c,d)=>(e.openBlock(),e.createBlock(e.unref(m.UidCard),{padding:"md",class:"admin-widget admin-heatmap-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",SE,[e.createElementVNode("h3",LE,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),t.rows.length>0&&t.cols.length>0&&t.matrix.length>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"admin-heatmap",style:e.normalizeStyle({"--admin-heatmap-cols":t.cols.length})},[e.createElementVNode("div",BE,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.cols,(s,i)=>(e.openBlock(),e.createElementBlock("span",{key:`c-${i}`,class:"admin-heatmap__col-label"},e.toDisplayString(i%3===0?s:""),1))),128))]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.matrix,(s,i)=>(e.openBlock(),e.createElementBlock("div",{key:`r-${i}`,class:"admin-heatmap__row"},[e.createElementVNode("span",_E,e.toDisplayString(t.rows[i]??""),1),e.createElementVNode("div",VE,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s,(u,p)=>(e.openBlock(),e.createElementBlock("span",{key:`cell-${i}-${p}`,class:"admin-heatmap__cell",style:e.normalizeStyle({background:t.color,opacity:r(u)}),title:l(u,i,p)},null,12,qE))),128))])]))),128))],4)):(e.openBlock(),e.createElementBlock("div",AE,e.toDisplayString(e.unref(h.trSafe)("Нет данных")),1))]),_:1}))}}),zE={key:0,class:"admin-widget__hd"},EE={class:"admin-widget__title"},NE={class:"admin-gauge-widget__body"},Zb=e.defineComponent({__name:"GaugeWidget",props:{title:{default:""},value:{default:0},min:{default:0},max:{default:100},size:{default:220},ranges:{default:()=>[]},thresholds:{default:()=>[]},unit:{default:""},tone:{default:"neutral"},color:{default:void 0},label:{default:""},suffix:{default:""},precision:{default:null}},setup(t){const a=t,o={neutral:"primary",positive:"success",warning:"warning",negative:"danger"},r=e.computed(()=>o[a.tone]),l=e.computed(()=>(a.ranges.length>0?a.ranges:a.thresholds).map(i=>({...i,color:Mr(i.color)||void 0})));function c(i){if(!Number.isFinite(i)||Number.isInteger(i))return 0;const u=String(i).split(".")[1]??"";return Math.min(2,u.length)}const d=e.computed(()=>typeof a.precision=="number"&&a.precision>=0?Math.min(20,Math.floor(a.precision)):c(Number(a.value))),s=e.computed(()=>a.suffix||a.unit||"");return(i,u)=>(e.openBlock(),e.createBlock(e.unref(m.UidCard),{padding:"md",class:"admin-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",zE,[e.createElementVNode("h3",EE,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",NE,[e.createVNode(e.unref(m.UidGauge),{value:t.value,min:t.min,max:t.max,size:t.size,ranges:l.value,tone:r.value,color:e.unref(Mr)(t.color)||void 0,label:t.label,suffix:s.value,precision:d.value},null,8,["value","min","max","size","ranges","tone","color","label","suffix","precision"])])]),_:1}))}}),DE={"&":"&","<":"<",">":">",'"':""","'":"'"};function V9(t){return t.replace(/[&<>"']/g,a=>DE[a]??a)}function Pw(t){return t.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}function FE(){const t=new Map;return a=>{const o=a.toLowerCase().trim().replace(/[^\p{L}\p{N}\s_-]/gu,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")||"section",r=t.get(o)??0;return t.set(o,r+1),r===0?o:`${o}-${r}`}}function dx(t){const a=t.trim(),o=a.replace(/�*58;|:/gi,":").replace(/\s+/g,"").toLowerCase(),r=/^([a-z][a-z0-9+.-]*):/.exec(o);return r&&!["http","https","mailto"].includes(r[1]??"")?null:a}function sx(t){return!/^([a-z][a-z0-9+.-]*:|\/|#|\?)/i.test(t)}function ux(t,a,o=!1){let r=Pw(t);o&&(r=r.replace(/\.md(?=$|[?#])/i,""));try{const l=/^[a-z][a-z0-9+.-]*:\/\//i.test(a),c=new URL(r,l?a:`http://base.invalid${a.startsWith("/")?"":"/"}${a}`),d=l?c.href:c.pathname+c.search+c.hash;return V9(d)}catch{return t}}function Gb(t,a={}){const o=[],r=c=>`${o.push(c)-1}`;let l=t.replace(/`([^`]+)`/g,(c,d)=>r(`<code>${d}</code>`));return l=l.replace(/!\[([^\]]*)\]\(([^)\s]+)(?:\s+"[^)]*")?\)/g,(c,d,s)=>{let i=dx(s);return i===null?c:(a.imageBase&&sx(i)&&(i=ux(i,a.imageBase)),r(`<img src="${i}" alt="${d}" loading="lazy">`))}),l=l.replace(/\[([^\]]+)\]\(([^)\s]+)(?:\s+"[^)]*")?\)/g,(c,d,s)=>{let i=dx(s);if(i===null)return c;const u=sx(i);a.linkBase&&u&&(i=ux(i,a.linkBase,a.stripMdExtension??!1));const p=/^(https?:)?\/\//i.test(i)||/^mailto:/i.test(i),y=a.internalLinksInPlace===!0&&!p;return r(y?`<a href="${i}">${d}</a>`:`<a href="${i}" target="_blank" rel="noopener noreferrer">${d}</a>`)}),l=l.replace(/\*\*(?=\S)(.+?)(?<=\S)\*\*/g,"<strong>$1</strong>").replace(/(?<!\w)__(?=\S)(.+?)(?<=\S)__(?!\w)/g,"<strong>$1</strong>").replace(/\*(?=\S)(.+?)(?<=\S)\*/g,"<em>$1</em>").replace(/(?<!\w)_(?=\S)(.+?)(?<=\S)_(?!\w)/g,"<em>$1</em>").replace(/~~(?=\S)(.+?)(?<=\S)~~/g,"<del>$1</del>"),l.replace(/(\d+)/g,(c,d)=>o[Number(d)]??"")}function $E(t){return Pw(t.replace(/<[^>]+>/g,""))}const qr=/^(\s*)([-*+]|\d+[.)])\s+(.*)$/,HE=/^\s*\|?\s*:?-+:?\s*(\|\s*:?-+:?\s*)*\|?\s*$/;function Q9(t){let a=t.trim();return a.startsWith("|")&&(a=a.slice(1)),a.endsWith("|")&&!a.endsWith("\\|")&&(a=a.slice(0,-1)),a.split(/(?<!\\)\|/).map(o=>o.trim().replace(/\\\|/g,"|"))}const hx={note:"note",info:"note",tip:"tip",hint:"tip",important:"important",warning:"warning",caution:"caution",danger:"caution",примечание:"note",заметка:"note",совет:"tip",важно:"important",внимание:"warning",предупреждение:"warning",осторожно:"caution"};function PE(t){switch(t){case"tip":return h.trSafe("Совет");case"important":return h.trSafe("Важно");case"warning":return h.trSafe("Внимание");case"caution":return h.trSafe("Осторожно");default:return h.trSafe("Примечание")}}function _c(t,a={}){if(!t)return"";const o=V9(t.replace(/\r\n?/g,`
|
|
6
6
|
`)).split(`
|
|
7
7
|
`),r=[];let l=[];const c=s=>Gb(s,a),d=()=>{l.length>0&&(r.push(`<p>${c(l.join(`
|
|
8
8
|
`))}</p>`),l=[])};for(let s=0;s<o.length;s++){const i=o[s]??"",u=/^\s*(```|~~~)\s*([\w+#.-]*)[^`]*$/.exec(i);if(u){d();const y=[];for(s++;s<o.length&&!(o[s]??"").trim().startsWith(u[1]??"```");)y.push(o[s]??""),s++;const k=u[2]?` class="language-${u[2]}"`:"";r.push(`<pre><code${k}>${y.join(`
|