@dskripchenko/laravel-admin 1.46.1 → 1.46.2

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.
@@ -4,7 +4,7 @@ const uE="modulepreload",hE=function(e,t){return new URL(e,t).href},pA={},_t=fun
4
4
 
5
5
  ${D("Текст…")}`),p=P("LABEL"),y=P("0"),m=P("50"),v=P(D("Янв, Фев, Мар, Апр")),M=P("10, 20, 15, 30"),w=P(""),b=P("5");Pe(()=>a.open,S=>{if(S)if(a.mode==="configure"&&a.item){const R=a.item.config??{};i.value=a.item.type??"",r.value=R.title??a.initialTitle,s.value=String(a.item.size??6),h.value=R.content??h.value;const A=R.stats?.[0];A&&(p.value=String(A.label??""),y.value=String(A.value??"")),m.value=String(R.value??50);const z=R.labels,H=R.datasets;z&&z.length>0&&(v.value=z.join(", ")),H&&H[0]?.data&&(M.value=H[0].data.join(", ")),w.value=R.resource??"",b.value=String(R.limit??5)}else i.value="",r.value="",s.value="6"});const g=k(()=>i.value!==""&&r.value.trim()!==""),_={stat:D("Stat — карточка с числом"),stats:D("Stats overview — несколько метрик"),chart:D("Chart — линия / столбцы / донат"),"bar-chart":D("Bar chart — гистограмма"),"donut-chart":D("Donut — кольцевая диаграмма"),"recent-table":D("Recent list — последние записи"),recent_list:D("Recent list — последние записи"),"recent-list":D("Recent list — последние записи"),heatmap:D("Heatmap — тепловая карта"),gauge:D("Gauge — шкала со значением"),markdown:D("Markdown — заметка / текст")};function C(S){return S==="markdown"?"markdown":S==="stat"||S==="stats"?"stat":S==="gauge"?"gauge":S==="chart"||S==="bar-chart"||S==="donut-chart"?"chart":S==="recent-table"||S==="recent_list"||S==="recent-list"?"recent":null}function L(){const S={title:r.value};switch(C(i.value)){case"markdown":S.content=h.value;break;case"stat":S.stats=[{label:p.value,value:y.value}];break;case"gauge":S.value=Number(m.value)||0,S.min=0,S.max=100;break;case"chart":{const R=v.value.split(",").map(z=>z.trim()).filter(Boolean),A=M.value.split(",").map(z=>Number(z.trim())).filter(z=>!Number.isNaN(z));S.labels=R,S.datasets=[{label:r.value,data:A}],S.type=i.value==="donut-chart"?"doughnut":"bar";break}case"recent":S.resource=w.value,S.limit=Number(b.value)||5;break}return S}function T(){if(!g.value)return;const S=Math.max(1,Math.min(12,Number(s.value)||6)),R=L();if(a.mode==="configure"&&a.item)n("save",{size:S,type:i.value,config:R});else{const A=`custom.${i.value}.${Date.now()}`;n("add",{slug:A,type:i.value,size:S,config:R})}n("close")}function $(){n("close")}return(S,R)=>(d(),O(zt,{to:"body"},[E(Kt,{name:"admin-dialog"},{default:F(()=>[e.open?(d(),f("div",nee,[x("div",{class:"admin-dialog-root__backdrop",onClick:$}),x("div",lee,[x("header",oee,[x("h2",iee,I(e.mode==="add"?u(D)("Добавить виджет"):u(D)("Настроить виджет")),1),x("button",{type:"button",class:"admin-dialog__close","aria-label":u(D)("Закрыть"),onClick:$},[E(u(fe),{icon:u(gt),size:16},null,8,["icon"])],8,ree)]),x("div",see,[e.mode==="add"?(d(),f("div",cee,[x("label",dee,I(u(D)("Скрытые виджеты")),1),e.restorable.length===0?(d(),f("p",uee,I(u(D)("Нечего добавлять — все виджеты дашборда уже показаны.")),1)):(d(),f("div",hee,[(d(!0),f(J,null,de(e.restorable,A=>(d(),f("button",{key:A.slug,type:"button",class:"admin-dialog__type-card","data-testid":`restore-widget-${A.slug}`,onClick:z=>l(A.slug)},[x("span",yee,I(A.title),1),x("span",fee,I(u(D)("Вернуть на дашборд")),1)],8,pee))),128))]))])):q("",!0),e.mode==="add"?(d(),f("div",mee,[x("label",vee,[le(I(u(D)("Тип виджета"))+" ",1),R[10]||(R[10]=x("span",{class:"admin-dialog__required"},"*",-1))]),o.value.length===0?(d(),f("p",kee,I(u(D)("Нет виджетов для добавления — все доступные типы уже на дашборде"))+" "+I(u(D)("или ни один не зарегистрирован.")),1)):(d(),f("div",gee,[(d(!0),f(J,null,de(o.value,A=>(d(),f("button",{key:A,type:"button",class:re(["admin-dialog__type-card",{"admin-dialog__type-card--active":i.value===A}]),onClick:z=>i.value=A},[x("span",Mee,I(_[A]??A),1),x("span",wee,I(A),1)],10,bee))),128))]))])):(d(),f("div",_ee,[x("label",xee,I(u(D)("Тип")),1),x("div",Iee,I(i.value||"unknown"),1)])),x("div",Lee,[x("label",Cee,[le(I(u(D)("Заголовок"))+" ",1),R[11]||(R[11]=x("span",{class:"admin-dialog__required"},"*",-1))]),E(u(kt),{modelValue:r.value,"onUpdate:modelValue":R[0]||(R[0]=A=>r.value=A),placeholder:u(D)("Название виджета")},null,8,["modelValue","placeholder"])]),x("div",See,[x("label",Aee,I(u(D)("Ширина (1..12)")),1),E(u(kt),{modelValue:s.value,"onUpdate:modelValue":R[1]||(R[1]=A=>s.value=A),type:"number"},null,8,["modelValue"])]),C(i.value)==="markdown"?(d(),f("div",$ee,[x("label",qee,I(u(D)("Markdown содержимое")),1),Tt(x("textarea",{"onUpdate:modelValue":R[2]||(R[2]=A=>h.value=A),class:"admin-dialog__textarea",rows:"6"},null,512),[[Ut,h.value]])])):C(i.value)==="stat"?(d(),f(J,{key:4},[x("div",zee,[x("label",Ree,I(u(D)("Метка")),1),E(u(kt),{modelValue:p.value,"onUpdate:modelValue":R[3]||(R[3]=A=>p.value=A)},null,8,["modelValue"])]),x("div",Pee,[x("label",Tee,I(u(D)("Значение")),1),E(u(kt),{modelValue:y.value,"onUpdate:modelValue":R[4]||(R[4]=A=>y.value=A)},null,8,["modelValue"])])],64)):C(i.value)==="gauge"?(d(),f("div",Dee,[x("label",Eee,I(u(D)("Значение (0..100)")),1),E(u(kt),{modelValue:m.value,"onUpdate:modelValue":R[5]||(R[5]=A=>m.value=A),type:"number"},null,8,["modelValue"])])):C(i.value)==="chart"?(d(),f(J,{key:6},[x("div",Vee,[x("label",Hee,I(u(D)("Метки (через запятую)")),1),E(u(kt),{modelValue:v.value,"onUpdate:modelValue":R[6]||(R[6]=A=>v.value=A),placeholder:u(D)("Янв, Фев, Мар")},null,8,["modelValue","placeholder"])]),x("div",Bee,[x("label",Fee,I(u(D)("Значения (через запятую)")),1),E(u(kt),{modelValue:M.value,"onUpdate:modelValue":R[7]||(R[7]=A=>M.value=A),placeholder:"10, 20, 15"},null,8,["modelValue"])])],64)):C(i.value)==="recent"?(d(),f(J,{key:7},[x("div",jee,[x("label",Oee,I(u(D)("Slug ресурса")),1),E(u(kt),{modelValue:w.value,"onUpdate:modelValue":R[8]||(R[8]=A=>w.value=A),placeholder:"articles"},null,8,["modelValue"])]),x("div",Uee,[x("label",Nee,I(u(D)("Лимит")),1),E(u(kt),{modelValue:b.value,"onUpdate:modelValue":R[9]||(R[9]=A=>b.value=A),type:"number"},null,8,["modelValue"])])],64)):q("",!0)]),x("footer",Wee,[g.value?q("",!0):(d(),f("span",Kee,[le(I(u(D)("Заполните"))+" ",1),R[12]||(R[12]=x("span",{class:"admin-dialog__required"},"*",-1)),le(I(u(D)("-поля")),1)])),E(u($e),{variant:"ghost",onClick:$},{default:F(()=>[le(I(u(D)("Отмена")),1)]),_:1}),E(u($e),{variant:"primary",disabled:!g.value,title:g.value?void 0:u(D)("Заполните обязательные поля"),onClick:T},{default:F(()=>[le(I(e.mode==="add"?u(D)("Добавить"):u(D)("Сохранить")),1)]),_:1},8,["disabled","title"])])])])):q("",!0)]),_:1})]))}}),Gee={class:"admin-page admin-dashboard"},Xee={class:"admin-page__hd"},Jee={class:"admin-page__title-wrap"},Yee={class:"admin-page__title"},Qee={key:0,class:"admin-page__count"},ete={class:"admin-page__actions"},tte=["draggable","onDragstart","onDragover","onDrop"],ate=["aria-label","onMousedown"],nte=140,lte=16,mT=ee({__name:"DashboardPage",props:{slug:{default:void 0},widgets:{default:void 0},title:{default:void 0},subtitle:{default:void 0}},emits:["change-period","export"],setup(e,{emit:t}){const a=e,n=t,l=aa(),o=pT(),i=vl(),r=be=>i.tr(be),s=Oa(),h=k(()=>{if(a.slug)return a.slug;const be=s?.meta?.slug;if(typeof be=="string"&&be.length>0)return be;const ie=s?.params?.slug;if(typeof ie=="string"&&ie.length>0)return ie}),p=(be,ie)=>i.has(be)?i.t(be):ie,y=k(()=>{const be=h.value;return!be||!l.manifest?null:l.manifest.dashboards?.find(Ce=>Ce.slug===be)??null}),m=k(()=>a.widgets?a.widgets:S.value!==null?S.value:y.value?.widgets??[]),v=k(()=>a.title??y.value?.label??"Dashboard"),M=k(()=>a.subtitle??y.value?.description??null),w=k(()=>{const be=new Map;for(const ze of m.value){const Be=String(ze.slug??"");Be&&be.set(Be,ze)}const ie=o.draft,Ce=[];if(ie.length>0){for(const ze of ie){const Be=be.get(ze.slug)??null;if(be.delete(ze.slug),ze.hidden)continue;let Ke=null;if(Be!==null)Ke={...Be,size:ze.size??Be.size??12};else if(ze.type){const at=ze.config??{};Ke={slug:ze.slug,type:ze.type,title:at.title??"",size:ze.size??6,data:at}}Ke&&Ce.push({node:Ke,layoutSlug:ze.slug})}for(const[ze,Be]of be.entries())Ce.push({node:Be,layoutSlug:ze})}else for(const ze of m.value)Ce.push({node:ze,layoutSlug:String(ze.slug??"")});return Ce});function b(be){const ie=be.size??be.span;return Math.max(1,Math.min(12,typeof ie=="number"?ie:12))}function g(be,ie){const ze=o.draft.find(at=>at.slug===be)?.config?.rowSpan;if(typeof ze=="number")return Math.max(1,Math.min(6,ze));const Be=ie.rowSpan??ie.row_span;if(typeof Be=="number")return Math.max(1,Math.min(6,Be));const Ke=String(ie.type??"");return Ke==="stats"||Ke==="stat"?1:Ke==="gauge"||Ke==="chart"||Ke==="bar-chart"||Ke==="donut-chart"||Ke==="heatmap"||Ke==="recent_list"||Ke==="recent-list"||Ke==="recent-table"||Ke==="markdown"||Ke==="iframe"||Ke==="table"?2:1}const _=["7d","30d","90d","all"];function C(be){if(be==="7d")return p("admin.dashboard.period.7d","За 7 дней");if(be==="30d")return p("admin.dashboard.period.30d","За 30 дней");if(be==="90d")return p("admin.dashboard.period.90d","За 90 дней");if(be==="all")return p("admin.dashboard.period.all","Всё время");const ie=/^(\d+)d$/.exec(be);return ie?r("За :n дн.").replace(":n",ie[1]):be}const L=k(()=>(y.value?y.value.periods??_:_).map(ie=>({key:ie,label:C(ie)}))),T=k(()=>y.value?.period??"30d"),$=P(T.value),S=P(null);async function R(){const be=o.period;be&&L.value.some(ie=>ie.key===be)&&($.value=be,await z())}async function A(be,ie){$.value=be,n("change-period",be);const Ce=h.value;Ce&&o.savePeriod(Ce,be),await z()}async function z(){const be=h.value;if(be)try{const{getAdminClient:ie}=await _t(async()=>{const{getAdminClient:Be}=await Promise.resolve().then(()=>St);return{getAdminClient:Be}},void 0,import.meta.url),ze=await ie().get(`/dashboard/widgets?key=${encodeURIComponent(be)}&period=${encodeURIComponent($.value)}`);S.value=ze.widgets}catch{}}let H=null;const B=k(()=>{let be=0;for(const ie of m.value){const Ce=ie.refresh;typeof Ce=="number"&&Ce>0&&(be===0||Ce<be)&&(be=Ce)}return be});function K(){W();const be=B.value;be<=0||(H=setInterval(()=>{z()},be*1e3))}function W(){H!==null&&(clearInterval(H),H=null)}Pe(()=>B.value,()=>K()),nt(async()=>{l.manifest===null&&await l.load().catch(()=>{});const be=h.value;be&&($.value=T.value,await o.openDashboard(be).catch(()=>{}),await R()),K()}),bt(()=>{W()}),Pe(()=>h.value,async(be,ie)=>{be!==ie&&(S.value=null,$.value=T.value,be?(await o.openDashboard(be).catch(()=>{}),await R()):o.reset())});const V=k(()=>L.value.find(be=>be.key===$.value)?.label??p("admin.dashboard.period.label","Период")),X=k(()=>L.value.length>0),U=P(null),te=P(null),Q=P("");function ke(){U.value="add",te.value=null,Q.value=""}function G(){U.value=null}function N(){o.draft.length===0&&o.seedDraft(w.value.map(({node:be,layoutSlug:ie})=>({slug:ie,size:b(be),type:String(be.type??"")||void 0}))),o.enterEditMode()}function Z(){o.cancelEdit()}async function ce(){await hl({title:r("Сброс раскладки"),confirmLabel:r("Сбросить"),message:p("admin.dashboard.reset_confirm","Сбросить layout к настройкам по умолчанию?"),destructive:!0})&&await o.resetToDefault().catch(()=>{})}async function ne(){await o.saveLayout().catch(()=>{})}function Me(be){const ie=m.value.some(ze=>String(ze.slug??"")===be),Ce=o.draft.some(ze=>ze.slug===be);ie?Ce?o.updateWidget(be,{hidden:!0}):o.addWidget({slug:be,hidden:!0}):o.removeWidget(be)}function ae(be){ge();const ie=o.draft.find(Be=>Be.slug===be)??null,ze=w.value.find(Be=>Be.layoutSlug===be)?.node;te.value=ie??{slug:be,type:ze?.type??"",size:ze?.size??6,config:{}},Q.value=ze?.title??"",U.value="configure"}function Se(be){o.addWidget(be)}const se=k(()=>{const be=new Map;for(const ie of m.value){const Ce=String(ie.slug??"");Ce&&be.set(Ce,ie)}return o.draft.filter(ie=>ie.hidden===!0).map(ie=>{const Ce=be.get(ie.slug),ze=ie.config??{};return{slug:ie.slug,title:Ce?.title||ze.title||ie.slug}})});function oe(be){o.restoreWidget(be)}function we(be){if(!te.value)return;const ie=te.value.slug;if(o.draft.some(ze=>ze.slug===ie)){const ze=o.draft.find(Be=>Be.slug===ie);o.updateWidget(ie,{...be,config:{...ze?.config??{},...be.config??{}}})}else o.addWidget({slug:ie,type:te.value.type,...be})}const j=P(null),Y=P(null),pe=P(!1);function xe(be){if(!o.editMode){pe.value=!1;return}const ie=be.target;pe.value=!!ie?.closest('[data-drag-handle="true"]')}function ve(be,ie){if(o.editMode&&ie.dataTransfer!==null){if(!pe.value){ie.preventDefault();return}j.value=be,ie.dataTransfer.effectAllowed="move",ie.dataTransfer.setData("text/plain",String(be))}}function _e(){pe.value=!1,j.value=null,Y.value=null}function Ie(be,ie){o.editMode&&j.value!==null&&(ie.preventDefault(),Y.value!==be&&(Y.value=be))}function he(be,ie){if(ie.preventDefault(),!o.editMode||j.value===null)return;const Ce=j.value;ge(),o.moveWidget(Ce,be),j.value=null,Y.value=null}function ge(){const be=o.draft.filter(Ce=>Ce.hidden===!0);if(o.draft.length===w.value.length+be.length)return;const ie=w.value.map(({node:Ce,layoutSlug:ze},Be)=>{const Ke=o.draft.find(at=>at.slug===ze);return{slug:ze,size:b(Ce),position:Be,hidden:!1,type:Ke?.type??Ce.type,config:Ke?.config}});o.setDraft([...ie,...be.map(Ce=>({...Ce}))])}const ye=P(null);let Ve=0;function De(be,ie,Ce,ze){if(!o.editMode)return;be.preventDefault(),be.stopPropagation(),ge(),ye.value={slug:ie,startX:be.clientX,startY:be.clientY,startSpan:Ce,startRowSpan:ze},Ve=be.target.closest(".admin-dashboard__grid")?.getBoundingClientRect().width??1200,window.addEventListener("mousemove",He),window.addEventListener("mouseup",Oe)}function He(be){if(!ye.value)return;const ie=Ve/12,Ce=Math.round((be.clientX-ye.value.startX)/ie),ze=Math.max(1,Math.min(12,ye.value.startSpan+Ce)),Be=nte+lte,Ke=Math.round((be.clientY-ye.value.startY)/Be),at=Math.max(1,Math.min(6,ye.value.startRowSpan+Ke)),pt=o.draft.find(Ht=>Ht.slug===ye.value.slug);if(!pt)return;const ot=pt.config?.rowSpan,dt={};pt.size!==ze&&(dt.size=ze),ot!==at&&(dt.config={...pt.config??{},rowSpan:at}),Object.keys(dt).length>0&&o.updateWidget(ye.value.slug,dt)}function Oe(){ye.value=null,window.removeEventListener("mousemove",He),window.removeEventListener("mouseup",Oe)}function et(){if(n("export"),typeof window>"u"||typeof document>"u")return;const be={dashboard:h.value,period:$.value,exported_at:new Date().toISOString(),widgets:w.value.map(({node:Be})=>{const Ke=Be;return{type:Ke.type,title:Ke.title??Ke.data?.title??null,data:Ke.data??null}})},ie=new Blob([JSON.stringify(be,null,2)],{type:"application/json"}),Ce=URL.createObjectURL(ie),ze=document.createElement("a");ze.href=Ce,ze.download=`dashboard-${h.value??"export"}-${$.value}.json`,document.body.appendChild(ze),ze.click(),ze.remove(),URL.revokeObjectURL(Ce)}return(be,ie)=>(d(),f("section",Gee,[x("header",Xee,[x("div",Jee,[x("h1",Yee,I(v.value),1),M.value?(d(),f("div",Qee,I(M.value),1)):q("",!0)]),x("div",ete,[Le(be.$slots,"actions"),X.value?(d(),O(u(Ft),{key:0},{trigger:F(()=>[E(u($e),{variant:"ghost",size:"md","data-testid":"dash-period"},{prepend:F(()=>[E(u(fe),{icon:u(Gr),size:14},null,8,["icon"])]),append:F(()=>[E(u(fe),{icon:u(Nt),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(V.value)+" ",1)]),_:1})]),default:F(()=>[(d(!0),f(J,null,de(L.value,Ce=>(d(),O(u(ca),{key:Ce.key,onClick:ze=>A(Ce.key,()=>{})},{default:F(()=>[le(I(Ce.label),1)]),_:2},1032,["onClick"]))),128))]),_:1})):q("",!0),E(u($e),{variant:"secondary",size:"md","data-testid":"dash-export",onClick:et},{prepend:F(()=>[E(u(fe),{icon:u(Ss),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(p("admin.dashboard.export","Экспорт")),1)]),_:1}),u(o).editMode?(d(),f(J,{key:2},[E(u($e),{variant:"secondary",size:"md","data-testid":"dash-add-widget",onClick:ke},{prepend:F(()=>[E(u(fe),{icon:u(Wt),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(p("admin.dashboard.add_widget","Добавить виджет")),1)]),_:1}),E(u($e),{variant:"ghost",size:"md",onClick:ce},{prepend:F(()=>[E(u(fe),{icon:u(xn),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(p("admin.dashboard.reset_layout","Сбросить")),1)]),_:1}),E(u($e),{variant:"ghost",size:"md",onClick:Z},{default:F(()=>[le(I(p("admin.dashboard.cancel_edit","Отмена")),1)]),_:1}),E(u($e),{variant:"primary",size:"md",loading:u(o).saving,disabled:u(o).saving,onClick:ne},{default:F(()=>[le(I(p("admin.dashboard.save_layout","Сохранить")),1)]),_:1},8,["loading","disabled"])],64)):(d(),O(u($e),{key:1,variant:"secondary",size:"md","data-testid":"dash-edit",onClick:N},{prepend:F(()=>[E(u(fe),{icon:u(rn),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(p("admin.dashboard.edit_layout","Редактировать")),1)]),_:1}))])]),x("div",{class:re(["admin-dashboard__grid",{"admin-dashboard__grid--editing":u(o).editMode}])},[(d(!0),f(J,null,de(w.value,(Ce,ze)=>(d(),f("div",{key:Ce.layoutSlug,class:re(["admin-dashboard__cell",{"admin-dashboard__cell--editing":u(o).editMode,"admin-dashboard__cell--dragging":j.value===ze,"admin-dashboard__cell--drop-target":Y.value===ze&&j.value!==ze&&j.value!==null}]),draggable:u(o).editMode,style:Te({gridColumn:`span ${b(Ce.node)} / span ${b(Ce.node)}`,gridRow:`span ${g(Ce.layoutSlug,Ce.node)} / span ${g(Ce.layoutSlug,Ce.node)}`}),onPointerdown:xe,onDragstart:Be=>ve(ze,Be),onDragover:Be=>Ie(ze,Be),onDrop:Be=>he(ze,Be),onDragend:_e},[E(fT,{node:Ce.node},null,8,["node"]),u(o).editMode?(d(),O(aee,{key:0,onConfigure:Be=>ae(Ce.layoutSlug),onRemove:Be=>Me(Ce.layoutSlug)},null,8,["onConfigure","onRemove"])):q("",!0),u(o).editMode?(d(),f("span",{key:1,class:"admin-dashboard__resize","aria-label":r("Изменить размер"),onMousedown:Be=>De(Be,Ce.layoutSlug,b(Ce.node),g(Ce.layoutSlug,Ce.node))},null,40,ate)):q("",!0)],46,tte))),128))],2),E(Zee,{open:U.value!==null,mode:U.value??"add",item:te.value,"initial-title":Q.value,restorable:se.value,onClose:G,onAdd:Se,onSave:we,onRestore:oe},null,8,["open","mode","item","initial-title","restorable"])]))}}),ote={key:1,class:"admin-home"},ite={class:"admin-home__title"},rte={class:"admin-home__lead"},ste={key:0,class:"admin-home__resources"},cte={class:"admin-home__heading"},dte={class:"admin-home__grid"},ute=["onClick"],hte={class:"admin-home__card-label"},pte={class:"admin-home__card-slug"},yte=ee({__name:"HomePage",setup(e){const t=aa(),a=ea(),n=Vt(),l=k(()=>a.user?.name??""),o=k(()=>t.manifest?.resources??[]),i=k(()=>t.manifest?.dashboards??[]),r=k(()=>i.value[0]?.slug??null),s=pT();return Pe(r,h=>{h&&s.openDashboard(h)},{immediate:!0}),(h,p)=>r.value?(d(),O(mT,{key:0,slug:r.value},null,8,["slug"])):(d(),f("div",ote,[E(u(st),{padding:"lg",class:"admin-home__hero"},{default:F(()=>[x("h1",ite,I(l.value?u(Ze)("Добро пожаловать, :name",{name:l.value}):u(D)("Добро пожаловать")),1),x("p",rte,I(u(D)("Админ-панель готова. Зарегистрируйте DashboardScreen чтобы увидеть widget-grid здесь,"))+" "+I(u(D)("либо переходите к ресурсам ниже.")),1)]),_:1}),o.value.length?(d(),f("section",ste,[x("h2",cte,I(u(D)("Ресурсы")),1),x("ul",dte,[(d(!0),f(J,null,de(o.value,y=>(d(),f("li",{key:y.slug},[x("button",{type:"button",class:"admin-home__card",onClick:m=>u(n).push({name:`admin.resource.${y.slug}.index`})},[x("span",hte,I(y.label),1),x("span",pte,I(y.slug),1)],8,ute)]))),128))])])):q("",!0)]))}}),fte={class:"admin-status-page"},mte={class:"admin-status-page__message"},vte=ee({__name:"ForbiddenPage",setup(e){const t=Vt();return(a,n)=>(d(),f("div",fte,[E(u(st),{padding:"lg",class:"admin-status-page__card"},{default:F(()=>[n[1]||(n[1]=x("h1",{class:"admin-status-page__code"},"403",-1)),x("p",mte,I(u(D)("Доступ запрещён.")),1),E(u($e),{variant:"ghost",onClick:n[0]||(n[0]=l=>u(t).replace({name:"admin.home"}))},{default:F(()=>[le(I(u(D)("На главную")),1)]),_:1})]),_:1})]))}}),kte={class:"admin-status-page"},gte={class:"admin-status-page__message"},bte=ee({__name:"NotFoundPage",setup(e){const t=Vt();return(a,n)=>(d(),f("div",kte,[E(u(st),{padding:"lg",class:"admin-status-page__card"},{default:F(()=>[n[1]||(n[1]=x("h1",{class:"admin-status-page__code"},"404",-1)),x("p",gte,I(u(D)("Страница не найдена.")),1),E(u($e),{variant:"ghost",onClick:n[0]||(n[0]=l=>u(t).replace({name:"admin.home"}))},{default:F(()=>[le(I(u(D)("На главную")),1)]),_:1})]),_:1})]))}}),Mte={class:"admin-settings-page"},wte={class:"admin-settings-page__title"},_te={key:0,class:"admin-settings-page__hint"},xte={key:1,class:"admin-settings-page__debug"},Ite=ee({__name:"SettingsPage",setup(e){const t=Oa(),a=aa(),n=k(()=>String(t.params.slug??"")),l=k(()=>a.manifest?.settings?.find(o=>o.slug===n.value)??null);return(o,i)=>(d(),f("div",Mte,[E(u(st),{padding:"lg"},{default:F(()=>[x("h1",wte,I(l.value?.label??n.value),1),l.value?(d(),f("pre",xte,I(JSON.stringify(l.value.fields,null,2)),1)):(d(),f("p",_te,I(u(Ze)("Раздел настроек «:slug» не найден в манифесте.",{slug:n.value})),1))]),_:1})]))}}),Lte=Ea("admin-screen",()=>{const e=P(null),t=P(""),a=P(null),n=P([]),l=P([]),o=P([]),i=P(null),r=P({}),s=P({}),h=P({}),p=P({}),y=P(!1),m=P(!1),v=P(null),M=P(null),w=P(null),b=P(null),g=k(()=>v.value!==null);function _(H,B){for(const K of Object.keys(H))delete H[K];Object.assign(H,B)}function C(H){return H.map(B=>L(B))}function L(H){const B={...H};return Array.isArray(H.children)&&H.items===void 0?B.items=H.children.map(K=>typeof K=="object"&&K!==null?L(K):K):Array.isArray(H.items)&&(B.items=H.items.map(K=>typeof K=="object"&&K!==null?L(K):K)),H.props&&typeof H.props=="object"&&Object.assign(B,H.props),B}function T(){e.value=null,p.value={},t.value="",a.value=null,n.value=[],l.value=[],o.value=[],i.value=null,_(r.value,{}),_(s.value,{}),h.value={},y.value=!1,m.value=!1,v.value=null,M.value=null,w.value=null,b.value=null}async function $(H,B){e.value!==H&&(M.value=null,w.value=null),e.value=H,p.value=B===void 0?{}:{...B},y.value=!0,v.value=null,h.value={};try{const W=await Qe().get(`/${H}/state`,{params:B});t.value=W.name,a.value=W.description,n.value=C(W.layout),l.value=W.command_bar,o.value=W.permissions,i.value=W.etag,_(r.value,W.state),_(s.value,W.state)}catch(K){throw v.value=K instanceof Error?K:new Error(String(K)),K}finally{y.value=!1}}async function S(H,B){if(!e.value)throw new Error("useScreenStore.runMethod() before slug set");if(m.value)throw new Error("Already running a method");m.value=!0,v.value=null,h.value={},M.value=null,w.value=null,b.value=null;try{const K=Qe(),W=B??r.value,V=await K.post(`/${e.value}/runMethod`,{method:H,payload:W});if(V.state&&Object.keys(V.state).length>0&&(_(r.value,V.state),_(s.value,{...V.state})),V.message&&(M.value=V.message,w.value=V.message_link??null),UQ(V.alerts,V.message),V.download_url&&typeof document<"u"){const X=document.createElement("a");X.href=V.download_url,X.rel="noopener",document.body.appendChild(X),X.click(),X.remove()}return typeof V.redirect_url=="string"&&V.redirect_url!==""?b.value=V.redirect_url:V.refresh&&await $(e.value,p.value).catch(()=>{}),V}catch(K){throw K instanceof kl&&Object.keys(K.fields).length>0?h.value={...K.fields}:(K instanceof ha||K instanceof Error)&&(v.value=K),K}finally{m.value=!1}}function R(H,B){if(r.value[H]=B,h.value[H]){const K={...h.value};delete K[H],h.value=K}}function A(H){h.value={...H}}function z(){h.value={}}return{slug:e,name:t,description:a,layout:n,commandBar:l,permissions:o,etag:i,query:p,state:r,initial:s,errors:h,loading:y,running:m,error:v,lastMessage:M,lastMessageLink:w,pendingRedirect:b,hasError:g,reset:T,load:$,runMethod:S,setField:R,setErrors:A,clearErrors:z}}),Cte=new Set(["done","error","expired","cancelled"]);function Ste(e){if(typeof e=="string")return e===""?null:{message:e};if(e&&typeof e=="object"){const t=e;return typeof t.message!="string"||t.message===""?null:{message:t.message,title:typeof t.title=="string"?t.title:void 0,confirmLabel:typeof t.confirmLabel=="string"?t.confirmLabel:void 0,cancelLabel:typeof t.cancelLabel=="string"?t.cancelLabel:void 0}}return null}function vT(e){if(!e||typeof e!="object")return null;const t=e,a=String(t.name??t.key??""),n=String(t.label??a);if(a===""||n==="")return null;const l=t.attributes&&typeof t.attributes=="object"?t.attributes:{};return{name:a,label:n,type:typeof t.type=="string"?t.type:"button",icon:typeof t.icon=="string"?t.icon:null,confirm:Ste(t.confirm),primary:!!t.primary,destructive:!!t.destructive,position:Array.isArray(t.position)?t.position:[],attributes:l,items:gL(t.items)}}function gL(e){return Array.isArray(e)?e.map(vT).filter(t=>t!==null):[]}function pn(e){return e.type==="bulk"?!0:e.attributes.standalone===!0?!1:e.position.includes("row")||e.position.includes("bulk")}function kT(e,t){const a=Number(e.attributes.requiresAtLeast??0),n=e.attributes.requiresAtMost;return!(Number.isFinite(a)&&t<a||n!=null&&t>Number(n))}function Ate(e){const t=String(e??"").toLowerCase();return t==="sm"||t==="small"?"sm":t==="lg"||t==="large"?"lg":t==="xl"||t==="extra"?"xl":t==="full"||t==="fullscreen"?"full":"md"}function zC(e,t){if(!e||!t.startsWith("/")||t.startsWith("//"))return null;const a=(e.options.history.base??"").replace(/\/+$/,"");if(a!==""){if(t===a)return"/";if(t.startsWith(`${a}/`)||t.startsWith(`${a}?`))return t.slice(a.length)}const n=e.resolve(t);return n.matched.length>0&&!n.matched.some(o=>o.path.includes("pathMatch"))?t:null}function $te(e){return new Promise(t=>setTimeout(t,e))}function CI(e,t){return Cn(t,Ze("Не удалось выполнить действие «:action».",{action:e.label}))}function qte(e){const t={};for(const[a,n]of Object.entries(e.fields))t[a.startsWith("payload.")?a.slice(8):a]=n;return t}function OS(e){let t;try{t=Vt()}catch{t=void 0}const a=P(!1),n=ga({open:!1,title:"",message:"",confirmLabel:"",cancelLabel:"",destructive:!1});let l=null;function o(_,C=!1){const L=typeof _=="string"?{message:_}:_;return l?.(!1),n.title=L.title??D("Подтверждение"),n.message=L.message,n.confirmLabel=L.confirmLabel??D("Подтвердить"),n.cancelLabel=L.cancelLabel??D("Отмена"),n.destructive=C,n.open=!0,new Promise(T=>{l=T})}function i(_){n.open=!1;const C=l;l=null,C?.(_)}const r=ga({open:!1,seq:0,action:null,title:"",submitLabel:"",size:"md",fields:[],values:{},errors:{},submitting:!1,options:void 0});function s(_,C){const L=Array.isArray(_.attributes.fields)?_.attributes.fields:[],T={};for(const $ of L)typeof $.name=="string"&&$.defaultValue!==void 0&&$.defaultValue!==null&&(T[$.name]=$.defaultValue);r.action=_,r.title=typeof _.attributes.modalTitle=="string"?_.attributes.modalTitle:_.label,r.submitLabel=typeof _.attributes.submitLabel=="string"?_.attributes.submitLabel:D("Выполнить"),r.size=Ate(_.attributes.modalSize),r.fields=L,r.values=T,r.errors={},r.submitting=!1,r.options=C,r.seq++,r.open=!0}function h(){r.open=!1,r.action=null,r.options=void 0}async function p(){const _=r.action;if(!_||r.submitting)return;const C=r.options;r.submitting=!0,r.errors={},a.value=!0;try{const L=await e.execute(_,{...r.values},C);h(),await e.onSuccess?.(_,L,C)}catch(L){if(L instanceof kl&&Object.keys(L.fields).length>0){r.errors=qte(L);const T=Object.keys(r.errors).filter($=>!r.fields.some(S=>S.name===$));T.length>0&&Ue.error(r.errors[T[0]]?.[0]??Cn(L,D("Проверьте заполнение формы.")))}else b(_,L)}finally{r.submitting=!1,a.value=!1}}const y=ga({open:!1,label:"",status:"",progress:0,error:null,finished:!1});let m=!1;ZC()&&Yq(()=>{m=!0});function v(){y.open=!1}async function M(_,C){const L=_.attributes.handler;if(!L?.entity||!L.method)return Ue.error(Ze("Действие «:action» не настроено.",{action:_.label})),!1;const T={..._.attributes.params??{}};C?.ids?T.ids=C.ids:e.ids&&pn(_)&&(T.ids=e.ids());const $={entity:L.entity,method:L.method,params:T};typeof _.attributes.callback=="string"&&($.callback=_.attributes.callback);const S=Math.max(1,Number(_.attributes.pollInterval??2)||2)*1e3,R=Qe();Object.assign(y,{open:!0,label:_.label,status:"new",progress:0,error:null,finished:!1});let A;try{const z=await R.post("/delayed/run",$);for(A={status:z.status,progress:0};!Cte.has(A.status);){if(await $te(S),m)return!1;A=await R.get(`/delayed/status?uuid=${encodeURIComponent(z.uuid)}`),y.status=A.status,y.progress=Math.max(0,Math.min(100,Number(A.progress??0)))}}catch(z){return y.finished=!0,y.error=Cn(z,D("Не удалось выполнить действие.")),Ue.error(CI(_,z)),!1}if(y.finished=!0,A.status==="done"){y.progress=100;const z=A.data,H=z&&typeof z=="object"&&typeof z.message=="string"?z.message:Ze("Действие «:action» выполнено.",{action:_.label});return Ue.success(H),await e.refresh?.(),!0}return y.error=A.error??D("Процесс завершился с ошибкой."),Ue.error(Ze("Действие «:action» завершилось с ошибкой: :error",{action:_.label,error:y.error})),!1}function w(_){const C=typeof _.attributes.href=="string"?_.attributes.href:"";if(C==="")return;const L=typeof _.attributes.target=="string"?_.attributes.target:"_self",T=_.attributes.download;if(T!==void 0&&T!==!1&&typeof document<"u"){const S=document.createElement("a");S.href=C,S.download=typeof T=="string"?T:"",S.rel="noopener",document.body.appendChild(S),S.click(),S.remove();return}if(L!=="_self"){window.open(C,L,"noopener");return}const $=zC(t,C);if($!==null&&t){t.push($).catch(()=>{});return}window.location.assign(C)}function b(_,C){if(e.onError){e.onError(_,C);return}Ue.error(CI(_,C))}async function g(_,C){if(_.type==="dropdown")return!1;const L=C?.ids??e.ids?.();if(L&&pn(_)&&!kT(_,L.length))return Ue.warning(Ze("Действие «:action» недоступно для выбранного числа записей.",{action:_.label})),!1;if(_.confirm){const T=typeof _.confirm=="string"?{message:_.confirm}:_.confirm,$={...T,title:T.title??_.label,confirmLabel:T.confirmLabel??_.label};if(!await o($,_.destructive))return!1}if(_.type==="link")return w(_),!0;if(_.type==="modal")return s(_,C),!0;if(_.type==="async")return M(_,C);a.value=!0;try{const T=await e.execute(_,void 0,C);return await e.onSuccess?.(_,T,C),!0}catch(T){return b(_,T),!1}finally{a.value=!1}}return{run:g,running:a,confirm:o,confirmState:n,resolveConfirm:i,modalState:r,submitModal:p,closeModal:h,asyncState:y,closeAsync:v}}const Eu=ee({__name:"AdminActionMenuItems",props:{actions:{},isDisabled:{type:Function,default:()=>!1}},emits:["run"],setup(e,{emit:t}){const a=t;return(n,l)=>(d(!0),f(J,null,de(e.actions,o=>(d(),f(J,{key:o.name},[o.type==="dropdown"?(d(),O(u(uP),{key:0,label:o.label,icon:u(_a)(o.icon)??void 0,"data-testid":`action-${o.name}`},{default:F(()=>[E(Eu,{actions:o.items,"is-disabled":e.isDisabled,onRun:l[0]||(l[0]=i=>a("run",i))},null,8,["actions","is-disabled"])]),_:2},1032,["label","icon","data-testid"])):(d(),O(u(ca),{key:1,variant:o.destructive?"danger":"default",icon:u(_a)(o.icon)??void 0,disabled:e.isDisabled(o),"data-testid":`action-${o.name}`,onClick:i=>a("run",o)},{default:F(()=>[le(I(o.label),1)]),_:2},1032,["variant","icon","disabled","data-testid","onClick"]))],64))),128))}}),gT=ee({__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(e,{emit:t}){const a=e,n=t,l=k(()=>a.variant?a.variant:a.action.destructive?"danger":a.action.primary?"primary":a.defaultVariant),o=k(()=>_a(a.action.icon));return(i,r)=>e.action.type==="dropdown"?(d(),O(u(Ft),{key:0},{trigger:F(()=>[E(u($e),{size:e.size,variant:l.value,disabled:e.disabled,icon:u(Nt),"icon-position":"end","data-testid":`action-${e.action.name}`},{default:F(()=>[le(I(e.action.label),1)]),_:1},8,["size","variant","disabled","icon","data-testid"])]),default:F(()=>[E(Eu,{actions:e.action.items,"is-disabled":e.isDisabled,onRun:r[0]||(r[0]=s=>n("run",s))},null,8,["actions","is-disabled"])]),_:1})):(d(),O(u($e),{key:1,size:e.size,variant:l.value,disabled:e.disabled||e.isDisabled(e.action),loading:e.loading,icon:o.value??void 0,"data-testid":`action-${e.action.name}`,onClick:r[1]||(r[1]=s=>n("run",e.action))},{default:F(()=>[le(I(e.action.label),1)]),_:1},8,["size","variant","disabled","loading","icon","data-testid"]))}}),bL=Symbol("admin.form-state");function ML(e={},t={},a){const n=ga(e),l=ga({...t}),o={state:n,errors:l,mode:a,setField(i,r){n[i]=r,l[i]&&delete l[i]},getField(i){return n[i]},setError(i,r){r===null||r.length===0?delete l[i]:l[i]=r},setErrors(i){for(const r of Object.keys(l))delete l[r];Object.assign(l,i)},clearErrors(){for(const i of Object.keys(l))delete l[i]}};return Ct(bL,o),o}function ct(){const e=rt(bL);if(!e)throw new Error("useFormState() called outside of provideFormState() scope");return e}function oc(){return rt(bL,null)}function zte(e,t){const a=`${t}.`,n=()=>{const r=e.getField(t);return r!==null&&typeof r=="object"&&!Array.isArray(r)?r:{}},l=()=>Object.keys(e.errors).filter(r=>r.startsWith(a)).map(r=>r.slice(a.length)),o=new Proxy({},{get:(r,s)=>typeof s=="string"?e.errors[a+s]:void 0,has:(r,s)=>typeof s=="string"&&a+s in e.errors,ownKeys:()=>l(),getOwnPropertyDescriptor:(r,s)=>typeof s=="string"&&a+s in e.errors?{enumerable:!0,configurable:!0,value:e.errors[a+s]}:void 0}),i={get state(){return n()},errors:o,mode:e.mode,setField(r,s){e.setField(t,{...n(),[r]:s}),e.setError(a+r,null)},getField(r){return n()[r]},setError(r,s){e.setError(a+r,s)},setErrors(r){for(const s of l())e.setError(a+s,null);for(const[s,h]of Object.entries(r))e.setError(a+s,h)},clearErrors(){for(const r of l())e.setError(a+r,null)}};return Ct(bL,i),i}const US=vL(),NS=vL(),Rte=US.register,bT=US.get,Pte=US.has,Tte=NS.register,RC=NS.get,Dte=NS.has,MT=ee({__name:"UnknownField",props:{type:{},name:{}},setup(e){return(t,a)=>(d(),O(u(ua),{variant:"warning",title:u(Ze)("Неизвестный тип поля: :type",{type:e.type})},{default:F(()=>[e.name?(d(),f(J,{key:0},[x("code",null,I(e.name),1),le(" — "+I(u(D)("зарегистрируйте компонент поля через"))+" ",1),x("code",null,"registerField('"+I(e.type)+"', YourComponent)",1),a[0]||(a[0]=le(". ",-1))],64)):q("",!0)]),_:1},8,["title"]))}}),SI=ee({__name:"FieldRenderer",props:{node:{}},setup(e){const t=e,a=k(()=>bT(t.node.type)),n=oc(),l=k(()=>{const r=n?.mode;return r?t.node.visibility?.[r]!==!1:!0}),o=k(()=>{const r=t.node.reactive;if(!r||typeof r!="object"||!n)return!0;for(const[s,h]of Object.entries(r)){const p=n.getField(s);if(Array.isArray(h)){if(!h.includes(p))return!1}else if(p!==h)return!1}return!0}),i=k(()=>{const{type:r,attributes:s,...h}=t.node;return{...h,...s??{}}});return(r,s)=>l.value&&o.value?(d(),f(J,{key:0},[a.value?(d(),O(Xe(a.value),es(lt({key:0},i.value)),null,16)):(d(),O(MT,{key:1,type:e.node.type,name:e.node.name},null,8,["type","name"]))],64)):q("",!0)}}),Da=ee({__name:"LayoutRenderer",props:{node:{}},setup(e){const t=e,a=k(()=>{if(t.node.kind==="field")return{kind:"field"};if(t.node.kind==="layout"){const s=RC(t.node.type);return s?{kind:"layout",component:s}:{kind:"unknown"}}const r=RC(t.node.type);return r?{kind:"layout",component:r}:bT(t.node.type)?{kind:"field"}:{kind:"unknown"}}),n=["children","props"];function l(r){const s=r?.props;return Array.isArray(s)?new Set(s):s&&typeof s=="object"?new Set(Object.keys(s)):new Set}const o=k(()=>{const{type:r,kind:s,...h}=t.node,p=a.value,y=p.kind==="layout"?l(p.component):new Set;for(const m of n)m in h&&!y.has(m)&&delete h[m];return h}),i=k(()=>t.node);return(r,s)=>a.value.kind==="layout"&&a.value.component?(d(),O(Xe(a.value.component),es(lt({key:0},o.value)),null,16)):a.value.kind==="field"?(d(),O(SI,{key:1,node:i.value},null,8,["node"])):(d(),O(MT,{key:2,type:e.node.type,name:e.node.name},null,8,["type","name"]))}}),Ete={class:"admin-action-form","data-testid":"action-form"},Vte=ee({__name:"AdminActionForm",props:{fields:{},values:{},errors:{}},setup(e){const t=e,a=ML(t.values,t.errors);return Pe(()=>t.errors,n=>a.setErrors({...n}),{deep:!0}),(n,l)=>(d(),f("div",Ete,[(d(!0),f(J,null,de(e.fields,(o,i)=>(d(),O(Da,{key:String(o.name??i),node:o},null,8,["node"]))),128))]))}}),Hte={class:"admin-action-confirm__message","data-testid":"action-confirm-message"},Bte={class:"admin-action-async","data-testid":"action-async"},Fte={key:1,class:"admin-action-async__hint"},WS=ee({__name:"AdminActionDialogs",props:{runner:{}},setup(e){const t=e,a=k({get:()=>t.runner.confirmState.open,set:i=>{i||t.runner.resolveConfirm(!1)}}),n=k({get:()=>t.runner.modalState.open,set:i=>{i||t.runner.closeModal()}}),l=k({get:()=>t.runner.asyncState.open,set:i=>{i||t.runner.closeAsync()}}),o=k(()=>{const i=t.runner.asyncState;return i.error?D("Ошибка"):i.finished?D("Готово"):i.status==="new"?D("В очереди…"):D("Выполняется…")});return(i,r)=>(d(),f(J,null,[E(u(sn),{modelValue:a.value,"onUpdate:modelValue":r[2]||(r[2]=s=>a.value=s),size:"sm",title:e.runner.confirmState.title},{footer:F(()=>[E(u($e),{variant:"ghost","data-testid":"action-confirm-cancel",onClick:r[0]||(r[0]=s=>e.runner.resolveConfirm(!1))},{default:F(()=>[le(I(e.runner.confirmState.cancelLabel),1)]),_:1}),E(u($e),{variant:e.runner.confirmState.destructive?"danger":"primary","data-testid":"action-confirm-ok",onClick:r[1]||(r[1]=s=>e.runner.resolveConfirm(!0))},{default:F(()=>[le(I(e.runner.confirmState.confirmLabel),1)]),_:1},8,["variant"])]),default:F(()=>[x("p",Hte,I(e.runner.confirmState.message),1)]),_:1},8,["modelValue","title"]),E(u(sn),{modelValue:n.value,"onUpdate:modelValue":r[6]||(r[6]=s=>n.value=s),size:e.runner.modalState.size,title:e.runner.modalState.title,"close-on-overlay":!1},{footer:F(()=>[E(u($e),{variant:"ghost","data-testid":"action-modal-cancel",onClick:r[4]||(r[4]=s=>e.runner.closeModal())},{default:F(()=>[le(I(u(D)("Отмена")),1)]),_:1}),E(u($e),{variant:e.runner.modalState.action?.destructive?"danger":"primary",loading:e.runner.modalState.submitting,"data-testid":"action-modal-submit",onClick:r[5]||(r[5]=s=>e.runner.submitModal())},{default:F(()=>[le(I(e.runner.modalState.submitLabel),1)]),_:1},8,["variant","loading"])]),default:F(()=>[x("form",{class:"admin-action-modal","data-testid":"action-modal",onSubmit:r[3]||(r[3]=je(s=>e.runner.submitModal(),["prevent"]))},[(d(),O(Vte,{key:e.runner.modalState.seq,fields:e.runner.modalState.fields,values:e.runner.modalState.values,errors:e.runner.modalState.errors},null,8,["fields","values","errors"]))],32)]),_:1},8,["modelValue","size","title"]),E(u(sn),{modelValue:l.value,"onUpdate:modelValue":r[8]||(r[8]=s=>l.value=s),size:"sm",title:e.runner.asyncState.label},{footer:F(()=>[E(u($e),{variant:"secondary","data-testid":"action-async-close",onClick:r[7]||(r[7]=s=>e.runner.closeAsync())},{default:F(()=>[le(I(u(D)("Закрыть")),1)]),_:1})]),default:F(()=>[x("div",Bte,[E(u(oP),{value:e.runner.asyncState.progress,max:100,label:o.value,variant:e.runner.asyncState.error?"danger":e.runner.asyncState.finished?"success":"default","show-value":""},null,8,["value","label","variant"]),e.runner.asyncState.error?(d(),O(u(ua),{key:0,variant:"danger"},{default:F(()=>[le(I(e.runner.asyncState.error),1)]),_:1})):e.runner.asyncState.finished?q("",!0):(d(),f("p",Fte,I(u(D)("Окно можно закрыть — процесс продолжится, а результат появится во всплывающем сообщении.")),1))])]),_:1},8,["modelValue","title"])],64))}}),wT=Symbol("admin.infolist-record");function wL(e){Ct(wT,e)}function Na(){return rt(wT,null)}const _T=Symbol("admin.screen-context");function jte(e){const t=ga(new Set),a=e.confirm??(l=>hl(l)),n={isOpen:l=>t.has(l),open:l=>{t.add(l)},close:l=>{t.delete(l)},running:e.running,runMethod:e.runMethod,async dispatch(l){const o=l.attributes?.opens;if((typeof o!="string"||o==="")&&e.run)return e.run(l);if(l.confirm?.message&&!await a(l.confirm))return!1;if(typeof o=="string"&&o!=="")return n.open(o),!0;const i=l.attributes?.method;return typeof i=="string"&&i!==""?e.runMethod(i):!1}};return n}function Ote(e){const t=jte(e);return Ct(_T,t),t}function xT(){return rt(_T,null)}const IT=Symbol("admin.listener-endpoint");function LT(e){Ct(IT,e)}function Ute(){return rt(IT,null)}const Nte={class:"admin-page admin-screen-page"},Wte={class:"admin-page__hd"},Kte={class:"admin-page__title-wrap"},Zte={class:"admin-page__title"},Gte={key:0,class:"admin-screen-page__description"},Xte={key:0,class:"admin-page__actions"},Jte=["href"],Yte={key:2,class:"admin-screen-page__loading"},Qte=ee({__name:"ScreenPage",props:{slug:{default:null}},setup(e){const t=e,a=Oa(),n=Vt(),l=Lte(),o=k(()=>t.slug?t.slug:String(a.params.slug??a.meta?.slug??"")),i=k(()=>{const b={};for(const[g,_]of Object.entries(a.query??{}))if(Array.isArray(_)){const C=_.filter(L=>typeof L=="string");C.length>0&&(b[g]=C)}else typeof _=="string"&&(b[g]=_);return b}),r=k(()=>JSON.stringify(i.value));function s(b){return l.load(b,i.value)}const h=ML(l.state,l.errors);wL(l.state),LT({url:()=>`/${o.value}/listener`});const p=k(()=>gL(l.commandBar)),y=OS({execute(b,g){const _=b.attributes.method;return typeof _!="string"||_===""?Promise.reject(new Error(`Action \`${b.name}\` has no method`)):l.runMethod(_,g?{...l.state,...g}:void 0)},onError:(b,g)=>{l.hasError||uT(g)},refresh:async()=>{o.value&&await s(o.value).catch(()=>{})}}),m=Ote({running:k(()=>l.running),async runMethod(b){try{return await l.runMethod(b),!0}catch{return!1}},confirm:b=>y.confirm(b),run:async b=>{const g=vT(b);return g?y.run(g):!1}});Pe(()=>l.errors,b=>{h.setErrors({...b})},{deep:!0});const v=k(()=>l.layout.filter(b=>typeof b.type=="string").map(b=>b)),M=k(()=>!l.loading&&o.value!==""),w=k(()=>{const b=l.lastMessageLink?.url;return b?zC(n,b):null});return nt(async()=>{o.value&&await s(o.value).catch(()=>{})}),Pe(()=>l.pendingRedirect,b=>{if(!b)return;l.pendingRedirect=null;const g=zC(n,b);g!==null?n.push(g):typeof window<"u"&&window.location.assign(b)}),Pe(()=>[o.value,r.value],async([b])=>{b?await s(b).catch(()=>{}):l.reset()}),(b,g)=>{const _=ds("router-link");return d(),f("section",Nte,[x("header",Wte,[x("div",Kte,[x("h1",Zte,I(u(l).name||o.value),1),u(l).description?(d(),f("p",Gte,I(u(l).description),1)):q("",!0)]),p.value.length>0?(d(),f("div",Xte,[(d(!0),f(J,null,de(p.value,C=>(d(),O(gT,{key:C.name,action:C,loading:u(l).running,disabled:u(l).running||u(l).loading,onRun:u(m).dispatch},null,8,["action","loading","disabled","onRun"]))),128))])):q("",!0)]),u(l).hasError?(d(),O(u(ua),{key:0,variant:"danger",class:"admin-screen-page__alert",role:"alert"},{default:F(()=>[le(I(u(Cn)(u(l).error,u(D)("Не удалось выполнить действие"))),1)]),_:1})):u(l).lastMessage?(d(),O(u(ua),{key:1,variant:"success",class:"admin-screen-page__alert",role:"status"},{default:F(()=>[le(I(u(l).lastMessage)+" ",1),w.value!==null?(d(),O(_,{key:0,class:"admin-screen-page__alert-link",to:w.value},{default:F(()=>[le(I(u(l).lastMessageLink.label),1)]),_:1},8,["to"])):u(l).lastMessageLink?(d(),f("a",{key:1,class:"admin-screen-page__alert-link",href:u(l).lastMessageLink.url,target:"_blank",rel:"noopener"},I(u(l).lastMessageLink.label),9,Jte)):q("",!0)]),_:1})):q("",!0),u(l).loading?(d(),f("div",Yte,[(d(),f(J,null,de(4,C=>E(u(ia),{key:C,height:"40px"})),64))])):M.value?(d(),O(u(st),{key:3,padding:"md",class:"admin-screen-page__body"},{default:F(()=>[(d(!0),f(J,null,de(v.value,(C,L)=>(d(),O(Da,{key:L,node:C},null,8,["node"]))),128))]),_:1})):q("",!0),E(WS,{runner:u(y)},null,8,["runner"])])}}}),eae={class:"admin-auth-card__row"},tae=["href"],aae={key:1,class:"admin-auth-demo","data-testid":"login-demo"},nae={class:"admin-auth-demo__title"},lae={class:"admin-auth-demo__label"},oae={key:0,class:"admin-auth-demo__description"},iae={key:2,style:{"text-align":"center","font-size":"var(--uid-font-size-xs)",color:"var(--uid-text-secondary)","padding-top":"4px"}},rae=["href"],sae=ee({__name:"LoginForm",props:{forgotUrl:{default:null},ssoLinkLabel:{default:null},ssoUrl:{default:null}},emits:["success"],setup(e,{emit:t}){const a=t,n=ea(),l=P(""),o=P(""),i=P(!1),r=P(!1),s=P(null),h=P({}),p=k(()=>h.value.email?.[0]),y=k(()=>h.value.password?.[0]),m=k(()=>n.demo?.accounts??[]);function v(w){l.value=w.email,o.value=w.password,M()}async function M(){if(!r.value){r.value=!0,s.value=null,h.value={};try{const w=await n.login({email:l.value,password:o.value,remember:i.value});a("success",w)}catch(w){(w instanceof ha?w.status:w?.response?.status)===429?s.value=D("Слишком много попыток входа. Подождите минуту и попробуйте снова"):w instanceof kl?(h.value=w.fields,s.value=w.firstFieldMessage()):w instanceof ES?s.value=D("Нет соединения с сервером"):w instanceof ha?s.value=w.message||D("Не удалось войти"):s.value=w.message}finally{r.value=!1}}}return(w,b)=>(d(),f("form",{class:"admin-auth-card__bd",novalidate:"",onSubmit:je(M,["prevent"])},[s.value?(d(),O(u(ua),{key:0,variant:"danger",class:"admin-auth-card__alert",role:"alert"},{default:F(()=>[le(I(s.value),1)]),_:1})):q("",!0),E(u(kt),{modelValue:l.value,"onUpdate:modelValue":b[0]||(b[0]=g=>l.value=g),type:"email",label:"Email",placeholder:"you@company.com",autocomplete:"username",required:!0,disabled:r.value,error:p.value,name:"email","data-testid":"login-email"},null,8,["modelValue","disabled","error"]),E(u(kt),{modelValue:o.value,"onUpdate:modelValue":b[1]||(b[1]=g=>o.value=g),type:"password",label:u(D)("Пароль"),autocomplete:"current-password",required:!0,disabled:r.value,error:y.value,name:"password","data-testid":"login-password"},null,8,["modelValue","label","disabled","error"]),x("div",eae,[E(u(as),{modelValue:i.value,"onUpdate:modelValue":b[2]||(b[2]=g=>i.value=g),disabled:r.value,label:u(D)("Запомнить меня")},null,8,["modelValue","disabled","label"]),e.forgotUrl?(d(),f("a",{key:0,href:e.forgotUrl,class:"admin-auth-card__link"},I(u(D)("Забыли пароль?")),9,tae)):q("",!0)]),E(u($e),{type:"submit",variant:"primary",size:"lg",loading:r.value,disabled:r.value,"data-testid":"login-submit"},{default:F(()=>[le(I(r.value?u(D)("Вход…"):u(D)("Войти")),1)]),_:1},8,["loading","disabled"]),m.value.length>0?(d(),f("div",aae,[x("div",nae,I(u(D)("Демо-доступ")),1),(d(!0),f(J,null,de(m.value,g=>(d(),O(u($e),{key:g.email,type:"button",variant:"secondary",class:"admin-auth-demo__account",disabled:r.value,"data-testid":`login-demo-${g.email}`,onClick:_=>v(g)},{default:F(()=>[x("span",lae,I(u(Ze)("Войти как :name",{name:g.label})),1),g.description?(d(),f("span",oae,I(g.description),1)):q("",!0)]),_:2},1032,["disabled","data-testid","onClick"]))),128))])):q("",!0),e.ssoLinkLabel&&e.ssoUrl?(d(),f("div",iae,[le(I(u(D)("или войдите через"))+" ",1),x("a",{href:e.ssoUrl,class:"admin-auth-card__link"},I(e.ssoLinkLabel),9,rae)])):q("",!0)],32))}}),cae=["value","disabled","aria-label","onInput","onKeydown"],dae={class:"admin-auth-card__row"},uae=ee({__name:"TwoFactorForm",emits:["success","cancel"],setup(e,{emit:t}){const a=t,n=ea(),l=P("totp"),o=P(["","","","","",""]),i=P(""),r=P([]),s=P(!1),h=P(null),p=P(null),y=k(()=>o.value.join("")),m=k(()=>l.value==="totp"?y.value.length===6:i.value.trim().length>0);function v(L,T){T instanceof HTMLInputElement&&(r.value[L]=T)}function M(L,T){const $=T.target,S=$.value.replace(/\D/g,"").slice(-1);o.value[L]=S,$.value=S,S&&L<o.value.length-1&&Ye(()=>r.value[L+1]?.focus()),y.value.length===o.value.length&&g()}function w(L,T){T.key==="Backspace"&&!o.value[L]&&L>0?Ye(()=>r.value[L-1]?.focus()):T.key==="ArrowLeft"&&L>0?(r.value[L-1]?.focus(),T.preventDefault()):T.key==="ArrowRight"&&L<o.value.length-1&&(r.value[L+1]?.focus(),T.preventDefault())}function b(L){const $=(L.clipboardData?.getData("text")??"").replace(/\D/g,"").slice(0,o.value.length);if($.length!==0){L.preventDefault();for(let S=0;S<o.value.length;S++)o.value[S]=$[S]??"";Ye(()=>{r.value[Math.min($.length,o.value.length-1)]?.focus(),$.length===o.value.length&&g()})}}async function g(){if(!(s.value||!m.value)){s.value=!0,h.value=null;try{if(l.value==="totp")await n.twoFactorChallenge(y.value);else{const L=await n.twoFactorRecovery(i.value.trim());p.value=L.remaining}a("success")}catch(L){L instanceof kl?h.value=L.firstFieldMessage()??D("Неверный код"):L instanceof ES?h.value=D("Нет соединения с сервером"):L instanceof ha?h.value=L.message||D("Не удалось проверить код"):h.value=L.message}finally{s.value=!1}}}function _(){n.cancelChallenge(),a("cancel")}function C(){l.value=l.value==="totp"?"recovery":"totp",h.value=null}return(L,T)=>(d(),f("form",{class:"admin-auth-card__bd",novalidate:"",onSubmit:je(g,["prevent"])},[h.value?(d(),O(u(ua),{key:0,variant:"danger",class:"admin-auth-card__alert",role:"alert"},{default:F(()=>[le(I(h.value),1)]),_:1})):q("",!0),p.value!==null?(d(),O(u(ua),{key:1,variant:"info",class:"admin-auth-card__alert",role:"status"},{default:F(()=>[le(I(u(Ze)("Использован код восстановления. Осталось: :count",{count:p.value})),1)]),_:1})):q("",!0),l.value==="totp"?(d(),f("div",{key:2,class:"admin-code-input",onPaste:b},[(d(!0),f(J,null,de(o.value,($,S)=>(d(),f("input",{key:S,ref_for:!0,ref:R=>v(S,R),value:o.value[S],type:"text",inputmode:"numeric",autocomplete:"one-time-code",maxlength:"1",disabled:s.value,"aria-label":u(Ze)("Цифра :n",{n:S+1}),onInput:R=>M(S,R),onKeydown:R=>w(S,R)},null,40,cae))),128))],32)):(d(),O(u(kt),{key:3,modelValue:i.value,"onUpdate:modelValue":T[0]||(T[0]=$=>i.value=$),type:"text",label:u(D)("Recovery-код"),autocomplete:"one-time-code",disabled:s.value,name:"recovery-code"},null,8,["modelValue","label","disabled"])),E(u($e),{type:"submit",variant:"primary",size:"lg",loading:s.value,disabled:s.value||!m.value},{default:F(()=>[le(I(s.value?u(D)("Проверка…"):u(D)("Подтвердить")),1)]),_:1},8,["loading","disabled"]),x("div",dae,[x("button",{type:"button",class:"admin-auth-card__link",onClick:C},[l.value==="totp"?(d(),f(J,{key:0},[le(I(u(D)("Использовать recovery-код")),1)],64)):(d(),f(J,{key:1},[le(I(u(D)("Вернуться к коду из приложения")),1)],64))]),x("button",{type:"button",class:"admin-auth-card__link",onClick:_},I(u(D)("Отмена")),1)])],32))}}),hae={class:"admin-auth-page"},pae={key:0,class:"admin-auth-page__corner"},yae={class:"admin-auth-card__hd"},fae=["src","alt"],mae={key:1,"aria-hidden":"true"},vae={key:2},kae={class:"admin-auth-card__title"},gae={class:"admin-auth-card__sub"},bae=ee({__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(e){const t=e,a=ea(),n=Vt(),l=Oa(),o=mL(),i=k(()=>t.brandName??o.name??"Laravel Admin"),r=k(()=>t.brandLogo??o.logo??null),s=k(()=>t.brandMark??o.mark??null);async function h(){const p=l.query[t.redirectQueryKey];if(typeof p=="string"&&p.length>0&&p.startsWith("/")){await n.push(p);return}await n.push({name:t.homeRouteName})}return Pe(()=>a.isAuthenticated,p=>{p&&h()}),nt(()=>{a.isAuthenticated&&h()}),(p,y)=>(d(),f("div",hae,[e.showCornerActions?(d(),f("div",pae,[E(XP),E(JP)])):q("",!0),E(u(st),{class:re(["admin-auth-card",u(a).isChallengePending?"admin-auth-card--wide":""]),padding:"none"},{default:F(()=>[x("div",yae,[x("div",{class:re(["admin-auth-card__logo",u(a).isChallengePending?"admin-auth-card__logo--accent":""])},[r.value&&!u(a).isChallengePending?(d(),f("img",{key:0,src:r.value,alt:i.value},null,8,fae)):u(a).isChallengePending?(d(),f("span",mae,"🛡")):s.value?(d(),f("span",vae,I(s.value),1)):(d(),O(pL,{key:3,size:40}))],2),x("div",kae,[u(a).isChallengePending?(d(),f(J,{key:0},[le(I(u(D)("Двухфакторная проверка")),1)],64)):(d(),f(J,{key:1},[le(I(i.value),1)],64))]),x("div",gae,[u(a).isChallengePending?(d(),f(J,{key:0},[le(I(u(D)("Введите 6-значный код из приложения-аутентификатора")),1)],64)):(d(),f(J,{key:1},[le(I(u(D)("Войдите, чтобы продолжить работу")),1)],64))])]),u(a).isChallengePending?(d(),O(uae,{key:0,onSuccess:y[0]||(y[0]=()=>{}),onCancel:y[1]||(y[1]=()=>{})})):(d(),O(sae,{key:1,"forgot-url":e.forgotUrl,"sso-link-label":e.ssoLinkLabel,"sso-url":e.ssoUrl,onSuccess:y[2]||(y[2]=()=>{})},null,8,["forgot-url","sso-link-label","sso-url"]))]),_:1},8,["class"])]))}}),Mae={class:"admin-auth-page"},wae={class:"admin-auth-card__hd"},_ae={class:"admin-auth-card__logo"},xae=["src","alt"],Iae={key:1},Lae={class:"admin-auth-card__title"},Cae={class:"admin-auth-card__sub"},Sae={class:"admin-auth-card__body"},Aae=ee({__name:"ForgotPasswordPage",props:{brandName:{default:"Laravel Admin"},loginRouteName:{default:"admin.login"}},setup(e){const t=mL(),a=Vt(),n=P(""),l=P(!1),o=P(!1);async function i(){if(n.value.trim()===""){Ue.error(D("Введите email."));return}o.value=!0;try{const{getAdminClient:r}=await _t(async()=>{const{getAdminClient:h}=await Promise.resolve().then(()=>St);return{getAdminClient:h}},void 0,import.meta.url);await r().post("/auth/forgotPassword",{email:n.value.trim()}),l.value=!0}catch{l.value=!0}finally{o.value=!1}}return(r,s)=>(d(),f("div",Mae,[E(u(st),{padding:"none",class:"admin-auth-card"},{default:F(()=>[x("div",wae,[x("div",_ae,[u(t).logo?(d(),f("img",{key:0,src:u(t).logo,alt:u(t).name??"Logo"},null,8,xae)):u(t).mark?(d(),f("span",Iae,I(u(t).mark),1)):(d(),O(pL,{key:2,size:40}))]),x("div",Lae,I(u(D)("Восстановление пароля")),1),x("div",Cae,I(l.value?u(D)("Если такой email зарегистрирован — мы отправили письмо со ссылкой на сброс."):u(D)("Введите email — отправим ссылку для сброса пароля.")),1)]),x("div",Sae,[l.value?q("",!0):(d(),f("form",{key:0,onSubmit:je(i,["prevent"])},[E(u(kt),{modelValue:n.value,"onUpdate:modelValue":s[0]||(s[0]=h=>n.value=h),type:"email",placeholder:"you@example.com",autocomplete:"email",required:""},null,8,["modelValue"]),E(u($e),{type:"submit",variant:"primary",class:"admin-auth-card__submit",loading:o.value},{prepend:F(()=>[E(u(fe),{icon:u(Ds),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(u(D)("Отправить ссылку")),1)]),_:1},8,["loading"])],32)),E(u($e),{variant:"ghost",class:"admin-auth-card__back",onClick:s[1]||(s[1]=h=>u(a).push({name:e.loginRouteName}))},{default:F(()=>[le(I(u(D)("← Назад ко входу")),1)]),_:1})])]),_:1})]))}}),$ae={class:"admin-auth-page"},qae={class:"admin-auth-card__hd"},zae={class:"admin-auth-card__logo"},Rae=["src","alt"],Pae={key:1},Tae={class:"admin-auth-card__title"},Dae={class:"admin-auth-card__sub"},Eae={class:"admin-auth-card__body"},Vae={key:0,class:"admin-auth-card__error"},Hae=ee({__name:"ResetPasswordPage",props:{loginRouteName:{default:"admin.login"}},setup(e){const t=mL(),a=e,n=Vt(),l=Oa(),o=k(()=>String(l.query.token??"")),i=P(String(l.query.email??"")),r=P(""),s=P(""),h=P(!1),p=P("");async function y(){if(p.value="",r.value.length<8){p.value=D("Пароль должен быть не менее 8 символов.");return}if(r.value!==s.value){p.value=D("Пароли не совпадают.");return}h.value=!0;try{const{getAdminClient:m}=await _t(async()=>{const{getAdminClient:M}=await Promise.resolve().then(()=>St);return{getAdminClient:M}},void 0,import.meta.url);await m().post("/auth/resetPassword",{token:o.value,email:i.value,password:r.value,password_confirmation:s.value}),Ue.success(D("Пароль обновлён. Войдите с новым паролем.")),await n.push({name:a.loginRouteName})}catch{p.value=D("Не удалось сбросить пароль. Возможно, ссылка устарела.")}finally{h.value=!1}}return(m,v)=>(d(),f("div",$ae,[E(u(st),{padding:"none",class:"admin-auth-card"},{default:F(()=>[x("div",qae,[x("div",zae,[u(t).logo?(d(),f("img",{key:0,src:u(t).logo,alt:u(t).name??"Logo"},null,8,Rae)):u(t).mark?(d(),f("span",Pae,I(u(t).mark),1)):(d(),O(pL,{key:2,size:40}))]),x("div",Tae,I(u(D)("Новый пароль")),1),x("div",Dae,I(u(D)("Задайте новый пароль для своего аккаунта.")),1)]),x("div",Eae,[x("form",{onSubmit:je(y,["prevent"])},[E(u(kt),{modelValue:i.value,"onUpdate:modelValue":v[0]||(v[0]=M=>i.value=M),type:"email",placeholder:"email",required:""},null,8,["modelValue"]),E(u(kt),{modelValue:r.value,"onUpdate:modelValue":v[1]||(v[1]=M=>r.value=M),type:"password",placeholder:u(D)("Новый пароль (мин. 8)"),autocomplete:"new-password",required:""},null,8,["modelValue","placeholder"]),E(u(kt),{modelValue:s.value,"onUpdate:modelValue":v[2]||(v[2]=M=>s.value=M),type:"password",placeholder:u(D)("Повторите пароль"),autocomplete:"new-password",required:""},null,8,["modelValue","placeholder"]),p.value?(d(),f("p",Vae,I(p.value),1)):q("",!0),E(u($e),{type:"submit",variant:"primary",class:"admin-auth-card__submit",loading:h.value},{prepend:F(()=>[E(u(fe),{icon:u(At),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(u(D)("Сохранить пароль")),1)]),_:1},8,["loading"])],32)])]),_:1})]))}}),q$={page:1,per_page:20,total:0,last_page:1},CT=Ea("admin-resource-index",()=>{const e=P(null),t=P([]),a=P({...q$}),n=P(!1),l=P(!1),o=P(null);let i=null;const r=200,s=P(""),h=P({}),p=P(null),y=P(null),m=P(new Set),v=k(()=>!n.value&&o.value===null&&t.value.length===0),M=k(()=>m.value.size),w=k(()=>m.value.size>0),b=k(()=>o.value!==null),g=k(()=>m.value.size===0||t.value.length===0?"none":t.value.every(Q=>m.value.has(_(Q)))?"all":"mixed");function _(te){return te.id??te.key??""}function C(te){e.value!==te&&(e.value=te,L(),n.value=!0)}function L(){t.value=[],a.value={...q$},n.value=!1,o.value=null,s.value="",h.value={},p.value=null,y.value=null,m.value=new Set}function T(te={}){const Q={page:te.page??a.value.page,per_page:te.per_page??a.value.per_page},ke=te.search??s.value;ke&&(Q.q=ke);const G=te.sort??p.value,N=te.direction??y.value;G&&N!==null&&(Q.order=[{column:G,direction:N}]);const Z=te.filters??h.value,ce={};for(const[ne,Me]of Object.entries(Z))Me==null||Me===""||(ce[ne]=Array.isArray(Me)?Me.join(","):Me);return Object.keys(ce).length>0&&(Q.filters=ce),Q}function $(){const{page:te,per_page:Q,...ke}=T();return ke}async function S(te={}){if(!e.value)throw new Error("useResourceIndexStore.load() called before setSlug()");n.value=!0,o.value=null,i!==null&&clearTimeout(i),i=setTimeout(()=>{l.value=!0},r);try{const Q=Qe(),ke=T(te),G=await Q.post(`/${e.value}/search`,ke);t.value=G.data,a.value=G.meta}catch(Q){throw o.value=Q instanceof Error?Q:new Error(String(Q)),Q}finally{n.value=!1,l.value=!1,i!==null&&(clearTimeout(i),i=null)}}async function R(te){s.value=te,a.value.page=1,await S()}async function A(te,Q){Q==null||Q===""?delete h.value[te]:h.value[te]=Q,a.value.page=1,await S()}async function z(){h.value={},a.value.page=1,await S()}async function H(te,Q="asc"){p.value=te,y.value=Q,await S()}async function B(te){p.value===te?y.value==="asc"?y.value="desc":y.value==="desc"?(p.value=null,y.value=null):y.value="asc":(p.value=te,y.value="asc"),await S()}async function K(te){a.value.page=te,await S()}function W(te){const Q=new Set(m.value);Q.has(te)?Q.delete(te):Q.add(te),m.value=Q}function V(){if(g.value==="all"){m.value=new Set;return}const te=new Set(m.value);for(const Q of t.value)te.add(_(Q));m.value=te}function X(){m.value=new Set}function U(te){return m.value.has(te)}return{slug:e,items:t,meta:a,loading:n,slowLoading:l,error:o,search:s,filters:h,sortKey:p,sortDirection:y,selection:m,isEmpty:v,hasError:b,hasSelection:w,selectedCount:M,selectionState:g,setSlug:C,reset:L,load:S,queryParams:$,setSearch:R,setFilter:A,clearFilters:z,setSort:H,toggleSort:B,setPage:K,toggleRow:W,toggleAllOnPage:V,clearSelection:X,isSelected:U,rowId:_}}),Bae=Object.freeze(Object.defineProperty({__proto__:null,useResourceIndexStore:CT},Symbol.toStringTag,{value:"Module"})),z$="d.m.Y H:i:s",Fae="d.m.Y",jae=/^\d{4}-\d{2}-\d{2}[T\s]\d{2}:\d{2}/;function KS(e,t,a={}){if(e==null)return"";if(!t&&typeof e=="string"&&jae.test(e))return ZL(e,z$);switch(t){case"date":return ZL(String(e),a.format??Fae);case"datetime":return ZL(String(e),a.format??z$);case"money":return Xae(e,a.currency??"RUB",a.decimals??2);case"boolean":return Jae(e,D(a.trueLabel??"Да"),D(a.falseLabel??"Нет"));case"bytes":return Yae(e);case"badge":return Nae(e,a);case"json":return R$(e);default:return Array.isArray(e)||e!==null&&typeof e=="object"?R$(e):String(e)}}const Oae={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 Uae(e,t={}){const a=t.colors??{},n=e==null?void 0:a[String(e)];return n&&Oae[n]||"default"}function Nae(e,t={}){return e==null?"":(t.labels??{})[String(e)]??String(e)}function Wae(e,t,a){if(!e)return"";const n=i=>i==null?"":String(i);let l=!1;const o=e.replace(/\{([\w.]+)\}/g,(i,r)=>{const s=t[r];return(s==null||s==="")&&(l=!0),n(s)}).replace(/:value/g,n(a));return l||o===""?"":o}function R$(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Kae(e){const t=e.trim(),a=/^(\d{4})-(\d{2})-(\d{2})$/.exec(t);if(a){const[l,o,i]=[Number(a[1]),Number(a[2]),Number(a[3])],r=new Date(l,o-1,i);return r.getFullYear()===l&&r.getMonth()===o-1&&r.getDate()===i?r:null}const n=new Date(/^\d{4}-\d{2}-\d{2} \d/.test(t)?t.replace(" ","T"):t);return isNaN(n.getTime())?null:n}function Zae(){const e=TS();try{return Intl.DateTimeFormat.supportedLocalesOf([e]).length>0?e:"en"}catch{return"en"}}function Ll(e,t,a,n){try{return new Intl.DateTimeFormat(t,a).formatToParts(e).find(l=>l.type===n)?.value??""}catch{return""}}function Gae(e){return e%100>=11&&e%100<=13?"th":["th","st","nd","rd"][e%10]??"th"}function P$(e){const t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())),a=t.getUTCDay()||7;t.setUTCDate(t.getUTCDate()+4-a);const n=new Date(Date.UTC(t.getUTCFullYear(),0,1));return{week:Math.ceil(((t.getTime()-n.getTime())/864e5+1)/7),year:t.getUTCFullYear()}}function C1(e,t){const a=-e.getTimezoneOffset(),n=a>=0?"+":"-",l=Math.abs(a),o=String(Math.floor(l/60)).padStart(2,"0"),i=String(l%60).padStart(2,"0");return t?`${n}${o}:${i}`:`${n}${o}${i}`}function ST(e,t){const a=Zae(),n=(v,M=2)=>String(v).padStart(M,"0"),l=e.getDate(),o=e.getMonth(),i=e.getFullYear(),r=e.getHours(),s=i%4===0&&i%100!==0||i%400===0,h=Math.round((Date.UTC(i,o,l)-Date.UTC(i,0,1))/864e5),p=/(^|[^\\])[dj]/.test(t),y=v=>{switch(v){case"d":return n(l);case"D":return Ll(e,a,{weekday:"short"},"weekday");case"j":return String(l);case"l":return Ll(e,a,{weekday:"long"},"weekday");case"N":return String((e.getDay()+6)%7+1);case"S":return a.startsWith("en")?Gae(l):"";case"w":return String(e.getDay());case"z":return String(h);case"W":return n(P$(e).week);case"F":return p?Ll(e,a,{day:"numeric",month:"long"},"month"):Ll(e,a,{month:"long"},"month");case"m":return n(o+1);case"M":return Ll(e,a,{month:"short"},"month");case"n":return String(o+1);case"t":return String(new Date(i,o+1,0).getDate());case"L":return s?"1":"0";case"o":return String(P$(e).year);case"X":case"x":case"Y":return String(i);case"y":return n(i%100);case"a":return r<12?"am":"pm";case"A":return r<12?"AM":"PM";case"B":{const M=(e.getUTCHours()*3600+e.getUTCMinutes()*60+e.getUTCSeconds()+3600)%86400;return n(Math.floor(M/86.4),3)}case"g":return String((r+11)%12+1);case"G":return String(r);case"h":return n((r+11)%12+1);case"H":return n(r);case"i":return n(e.getMinutes());case"s":return n(e.getSeconds());case"u":return n(e.getMilliseconds()*1e3,6);case"v":return n(e.getMilliseconds(),3);case"e":try{return Intl.DateTimeFormat().resolvedOptions().timeZone??""}catch{return""}case"I":{const M=new Date(i,0,1).getTimezoneOffset(),w=new Date(i,6,1).getTimezoneOffset();return e.getTimezoneOffset()<Math.max(M,w)?"1":"0"}case"O":return C1(e,!1);case"P":return C1(e,!0);case"p":return e.getTimezoneOffset()===0?"Z":C1(e,!0);case"T":return Ll(e,"en",{timeZoneName:"short"},"timeZoneName");case"Z":return String(-e.getTimezoneOffset()*60);case"c":return ST(e,"Y-m-d\\TH:i:sP");case"r":{const M=(w,b)=>Ll(e,"en",w,b);return`${M({weekday:"short"},"weekday")}, ${n(l)} ${M({month:"short"},"month")} ${i} ${n(r)}:${n(e.getMinutes())}:${n(e.getSeconds())} ${C1(e,!1)}`}case"U":return String(Math.floor(e.getTime()/1e3));default:return null}};let m="";for(let v=0;v<t.length;v++){const M=t[v]??"";if(M==="\\"&&v+1<t.length){m+=t[v+1],v++;continue}m+=y(M)??M}return m}function ZL(e,t){const a=Kae(e);return a===null?e:ST(a,t)}function Xae(e,t,a){const n=typeof e=="number"?e:Number(e);if(isNaN(n))return String(e);const l={minimumFractionDigits:a,maximumFractionDigits:a};if(/^[A-Za-z]{3}$/.test(t))try{return qn(n,{style:"currency",currency:t.toUpperCase(),...l})}catch{}return`${qn(n,l)} ${t}`}function Jae(e,t,a){return e===!0||e===1||e==="1"||e==="true"?t:a}function Yae(e){const t=typeof e=="number"?e:Number(e);return isNaN(t)?String(e):t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:t<1024*1024*1024?`${(t/1024/1024).toFixed(1)} MB`:`${(t/1024/1024/1024).toFixed(1)} GB`}const Qae={key:0,class:"admin-cell-image"},ene=["aria-label"],tne=["title"],ls=ee({__name:"AdminTableCell",props:{value:{default:void 0},preset:{default:null},meta:{default:null},row:{default:null}},setup(e){const t=e,a=k(()=>t.meta??{}),n=k(()=>KS(t.value,t.preset??void 0,a.value)),l=k(()=>{if(t.preset!=="image")return"";const p=t.value;if(typeof p=="string")return p;if(p&&typeof p=="object"){const y=p,m=y.thumb_url??y.thumbnail_url??y.url??y.src;return typeof m=="string"?m:""}return""});function o(p,y){const m=typeof p=="number"?p:Number(p);return Number.isFinite(m)&&m>0?m:y}const i=k(()=>o(a.value.width,32)),r=k(()=>o(a.value.height,i.value)),s=k(()=>t.preset==="link"?Wae(a.value.template,t.row??{},t.value):""),h=k(()=>a.value.target||void 0);return(p,y)=>e.preset==="image"?(d(),f("span",Qae,[l.value?(d(),O(u(qP),{key:0,src:l.value,alt:"",width:i.value,height:r.value,fit:"cover",radius:"sm"},null,8,["src","width","height"])):q("",!0)])):e.preset==="badge"&&n.value!==""?(d(),O(u(Ku),{key:1,variant:u(Uae)(e.value,a.value)},{default:F(()=>[le(I(n.value),1)]),_:1},8,["variant"])):e.preset==="link"&&s.value?(d(),O(u(Zu),{key:2,class:"admin-cell-truncate",href:s.value,external:h.value==="_blank",title:n.value,onClick:y[0]||(y[0]=je(()=>{},["stop"]))},{default:F(()=>[le(I(n.value),1)]),_:1},8,["href","external","title"])):n.value===""?(d(),f("span",{key:3,class:"admin-cell-empty","aria-label":u(D)("Нет значения")},"—",8,ene)):(d(),f("span",{key:4,class:"admin-cell-truncate",title:n.value},I(n.value),9,tne))}}),T$=ee({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(e,{emit:t}){return()=>{const a=e.filter;if(a.type==="options"&&a.options&&a.options.length>0)return Mt("div",{class:"admin-toolbar__editor admin-toolbar__editor--options"},a.options.map(n=>Mt("label",{key:String(n.value),class:"admin-toolbar__list-item admin-toolbar__list-item--checkbox"},[Mt("input",{type:a.multiple?"checkbox":"radio",checked:e.isChecked(n.value),onChange:()=>t("toggle-option",n.value)}),Mt("span",null,n.label)])));if(a.type==="date_range"){const n=e.draft??{};return Mt("div",{class:"admin-toolbar__editor admin-toolbar__editor--dates"},[Mt("input",{type:"date",value:n.from??"",class:"admin-toolbar__input",placeholder:D("От"),onChange:l=>t("set-draft",{...n,from:l.target.value})}),Mt("input",{type:"date",value:n.to??"",class:"admin-toolbar__input",placeholder:D("До"),onChange:l=>t("set-draft",{...n,to:l.target.value})})])}if(a.type==="trashed"){const n=[{value:"without",label:D("Без удалённых")},{value:"with",label:D("С удалёнными")},{value:"only",label:D("Только удалённые")}];return Mt("div",{class:"admin-toolbar__editor admin-toolbar__editor--options"},n.map(l=>Mt("label",{key:l.value,class:"admin-toolbar__list-item admin-toolbar__list-item--checkbox"},[Mt("input",{type:"radio",checked:e.draft===l.value,onChange:()=>t("set-draft",l.value)}),Mt("span",null,l.label)])))}return a.type==="switcher"?Mt("div",{class:"admin-toolbar__editor"},[Mt("label",{class:"admin-toolbar__list-item admin-toolbar__list-item--checkbox"},[Mt("input",{type:"radio",checked:e.draft===!0,onChange:()=>t("set-draft",!0)}),Mt("span",null,D("Да"))]),Mt("label",{class:"admin-toolbar__list-item admin-toolbar__list-item--checkbox"},[Mt("input",{type:"radio",checked:e.draft===!1,onChange:()=>t("set-draft",!1)}),Mt("span",null,D("Нет"))])]):Mt("input",{type:"text",value:e.draft??"",class:"admin-toolbar__input",placeholder:a.placeholder??a.label,onChange:n=>t("set-draft",n.target.value)})}}}),ane={class:"admin-toolbar"},nne={class:"admin-toolbar__row admin-toolbar__row--filters"},lne={class:"admin-toolbar__search"},one=["placeholder"],ine={key:0,class:"admin-toolbar__divider"},rne={type:"button",class:"admin-toolbar__chip admin-toolbar__chip--active"},sne={class:"admin-toolbar__chip-text"},cne=["aria-label","onClick","onKeydown"],dne={class:"admin-toolbar__popover-actions"},une={type:"button",class:"admin-toolbar__chip"},hne={class:"admin-toolbar__chip-text"},pne={class:"admin-toolbar__popover-actions"},yne={type:"button",class:"admin-toolbar__chip"},fne={class:"admin-toolbar__chip-text"},mne=["onClick"],vne={key:3,class:"admin-toolbar__spacer admin-toolbar__spacer--actions"},kne={type:"button",class:"admin-toolbar__chip"},gne={class:"admin-toolbar__chip-text"},bne=["onClick"],Mne={type:"button",class:"admin-toolbar__chip"},wne={class:"admin-toolbar__chip-text"},_ne={type:"button",class:"admin-toolbar__chip"},xne={class:"admin-toolbar__chip-text"},Ine=["placeholder"],Lne={class:"admin-toolbar__popover-actions"},D$=4,AT=ee({__name:"AdminFilterToolbar",props:{search:{},searchPlaceholder:{default:D("Поиск…")},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(e,{emit:t}){const a=e,n=t,l=P(a.search);Pe(()=>a.search,V=>{l.value=V});function o(){l.value!==a.search&&n("update:search",l.value)}function i(V){return V==null||V===""||Array.isArray(V)&&V.length===0?!1:typeof V=="object"&&!Array.isArray(V)?Object.values(V).some(U=>U!==null&&U!==""&&U!==void 0):!0}const r=k(()=>a.filters.filter(V=>i(a.values[V.name]))),s=k(()=>a.filters.filter(V=>!i(a.values[V.name]))),h=P(new Set),p=k(()=>s.value.filter((V,X)=>h.value.has(V.name)||X<D$)),y=k(()=>s.value.filter((V,X)=>!h.value.has(V.name)&&X>=D$));function m(V){const X=new Set(h.value);X.add(V),h.value=X}const v=k(()=>a.search!==""||r.value.length>0);function M(V){n("apply-filter",V,null)}function w(V){const X=a.values[V.name];if(V.options&&V.options.length>0){const te=(Array.isArray(X)?X:[X]).map(Q=>V.options?.find(ke=>String(ke.value)===String(Q))?.label??String(Q));return`${V.label}: ${te.join(", ")}`}if(V.type==="date_range"&&X&&typeof X=="object"){const U=X;return`${V.label}: ${U.from??""} – ${U.to??""}`}return V.type==="switcher"?`${V.label}: ${D(X?"да":"нет")}`:`${V.label}: ${String(X)}`}const b=P({});function g(V){return V in b.value||(b.value[V]=a.values[V]??null),b.value[V]}function _(V,X){b.value={...b.value,[V]:X}}function C(V,X){n("apply-filter",V,b.value[V]??null),X()}function L(V,X,U){if(!U){_(V,X);return}const te=g(V),Q=Array.isArray(te)?[...te]:[],ke=Q.findIndex(G=>String(G)===String(X));ke>=0?Q.splice(ke,1):Q.push(X),_(V,Q)}function T(V,X){const U=g(V);return Array.isArray(U)?U.some(te=>String(te)===String(X)):U!=null&&String(U)===String(X)}const $=k(()=>a.columns.filter(V=>V.groupable===!0&&(V.key??V.name)));function S(V,X){n("group-by",V),X()}function R(V){return String(V.key??V.name??"")}function A(V){return String(V.label??V.name??V.key??"")}function z(V){if(V.cantHide===!0)return!0;const X=R(V);return X in a.columnVisibility?a.columnVisibility[X]:V.defaultHidden!==!0}function H(V){if(V.cantHide===!0)return;const X=R(V);n("columns-visibility",{...a.columnVisibility,[X]:!z(V)})}const B=P("");function K(V){B.value.trim()!==""&&(n("save-view",B.value.trim()),B.value="",V())}function W(V){return _a(V)??null}return(V,X)=>(d(),f("div",ane,[x("div",nne,[x("label",lne,[E(u(fe),{icon:u(In),size:14,class:"admin-toolbar__search-icon"},null,8,["icon"]),Tt(x("input",{"onUpdate:modelValue":X[0]||(X[0]=U=>l.value=U),type:"search",placeholder:u(D)(e.searchPlaceholder),class:"admin-toolbar__search-input",onKeydown:Et(o,["enter"]),onBlur:o},null,40,one),[[Ut,l.value]])]),e.filters.length>0?(d(),f("span",ine)):q("",!0),(d(!0),f(J,null,de(r.value,U=>(d(),O(u(Ft),{key:`active-${U.name}`},{trigger:F(()=>[x("button",rne,[W(U.icon)!==null?(d(),O(u(fe),{key:0,icon:W(U.icon),size:14},null,8,["icon"])):q("",!0),x("span",sne,I(w(U)),1),x("span",{role:"button",tabindex:"0","aria-label":u(D)("Сбросить фильтр"),class:"admin-toolbar__chip-x",onClick:je(te=>M(U.name),["stop"]),onKeydown:Et(je(te=>M(U.name),["stop"]),["enter"])},[E(u(fe),{icon:u(gt),size:12},null,8,["icon"])],40,cne)])]),default:F(()=>[x("div",{class:"admin-toolbar__popover",onKeydown:X[1]||(X[1]=je(()=>{},["stop"]))},[E(u(T$),{filter:U,draft:g(U.name),"is-checked":te=>T(U.name,te),onToggleOption:te=>L(U.name,te,U.multiple??!1),onSetDraft:te=>_(U.name,te)},null,8,["filter","draft","is-checked","onToggleOption","onSetDraft"]),x("div",dne,[E(u($e),{size:"sm",variant:"ghost",onClick:te=>_(U.name,null)},{default:F(()=>[le(I(u(D)("Очистить")),1)]),_:1},8,["onClick"]),E(u($e),{size:"sm",variant:"primary",onClick:te=>C(U.name,()=>{})},{default:F(()=>[le(I(u(D)("Применить")),1)]),_:1},8,["onClick"])])],32)]),_:2},1024))),128)),(d(!0),f(J,null,de(p.value,U=>(d(),O(u(Ft),{key:`inactive-${U.name}`},{trigger:F(()=>[x("button",une,[W(U.icon)!==null?(d(),O(u(fe),{key:0,icon:W(U.icon),size:14},null,8,["icon"])):q("",!0),x("span",hne,I(U.label),1)])]),default:F(()=>[x("div",{class:"admin-toolbar__popover",onKeydown:X[2]||(X[2]=je(()=>{},["stop"]))},[E(u(T$),{filter:U,draft:g(U.name),"is-checked":te=>T(U.name,te),onToggleOption:te=>L(U.name,te,U.multiple??!1),onSetDraft:te=>_(U.name,te)},null,8,["filter","draft","is-checked","onToggleOption","onSetDraft"]),x("div",pne,[E(u($e),{size:"sm",variant:"ghost",onClick:te=>_(U.name,null)},{default:F(()=>[le(I(u(D)("Очистить")),1)]),_:1},8,["onClick"]),E(u($e),{size:"sm",variant:"primary",onClick:te=>C(U.name,()=>{})},{default:F(()=>[le(I(u(D)("Применить")),1)]),_:1},8,["onClick"])])],32)]),_:2},1024))),128)),y.value.length>0?(d(),O(u(Ft),{key:1},{trigger:F(()=>[x("button",yne,[E(u(fe),{icon:u(Wt),size:14},null,8,["icon"]),x("span",fne,I(u(D)("Фильтр")),1)])]),default:F(()=>[x("div",{class:"admin-toolbar__popover admin-toolbar__popover--list",onKeydown:X[3]||(X[3]=je(()=>{},["stop"]))},[(d(!0),f(J,null,de(y.value,U=>(d(),f("button",{key:U.name,type:"button",role:"menuitem",class:"admin-toolbar__list-item",onClick:te=>m(U.name)},[W(U.icon)!==null?(d(),O(u(fe),{key:0,icon:W(U.icon),size:14},null,8,["icon"])):q("",!0),le(" "+I(U.label),1)],8,mne))),128))],32)]),_:1})):q("",!0),v.value?(d(),O(u($e),{key:2,variant:"secondary",size:"sm",class:"admin-toolbar__reset","data-testid":"toolbar-reset",onClick:X[4]||(X[4]=U=>n("reset"))},{prepend:F(()=>[E(u(fe),{icon:u(xn),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(u(D)("Сбросить")),1)]),_:1})):q("",!0),X[12]||(X[12]=x("span",{class:"admin-toolbar__spacer"},null,-1)),$.value.length>0||e.columns.length>0||e.enableSavedViews?(d(),f("span",vne)):q("",!0),$.value.length>0?(d(),O(u(Ft),{key:4},{trigger:F(()=>[x("button",kne,[E(u(fe),{icon:u(Rs),size:14},null,8,["icon"]),x("span",gne,I(e.groupBy?u(Ze)("Группа: :name",{name:A(e.columns.find(U=>R(U)===e.groupBy)??{})}):u(D)("Группировать")),1)])]),default:F(()=>[x("div",{class:"admin-toolbar__popover admin-toolbar__popover--list",onKeydown:X[6]||(X[6]=je(()=>{},["stop"]))},[x("button",{type:"button",role:"menuitem",class:"admin-toolbar__list-item",onClick:X[5]||(X[5]=U=>S(null,()=>{}))},[e.groupBy?q("",!0):(d(),O(u(fe),{key:0,icon:u(At),size:14},null,8,["icon"])),x("span",null,I(u(D)("Без группировки")),1)]),(d(!0),f(J,null,de($.value,U=>(d(),f("button",{key:R(U),type:"button",role:"menuitem",class:"admin-toolbar__list-item",onClick:te=>S(R(U),()=>{})},[e.groupBy===R(U)?(d(),O(u(fe),{key:0,icon:u(At),size:14},null,8,["icon"])):q("",!0),x("span",null,I(A(U)),1)],8,bne))),128))],32)]),_:1})):q("",!0),e.columns.length>0?(d(),O(u(Ft),{key:5},{trigger:F(()=>[x("button",Mne,[E(u(fe),{icon:u(Kn),size:14},null,8,["icon"]),x("span",wne,I(u(D)("Колонки")),1)])]),default:F(()=>[x("div",{class:"admin-toolbar__popover admin-toolbar__popover--list",onKeydown:X[7]||(X[7]=je(()=>{},["stop"]))},[(d(!0),f(J,null,de(e.columns.filter(U=>R(U)!==""),U=>(d(),f("div",{key:R(U),class:"admin-toolbar__list-item admin-toolbar__list-item--checkbox"},[E(u(as),{"model-value":z(U),label:A(U),disabled:U.cantHide===!0,"onUpdate:modelValue":te=>H(U)},null,8,["model-value","label","disabled","onUpdate:modelValue"])]))),128))],32)]),_:1})):q("",!0),e.enableSavedViews?(d(),O(u(Ft),{key:6},{trigger:F(()=>[x("button",_ne,[E(u(fe),{icon:u(Kr),size:14},null,8,["icon"]),x("span",xne,I(u(D)("Сохранить")),1)])]),default:F(()=>[x("div",{class:"admin-toolbar__popover",onKeydown:X[11]||(X[11]=je(()=>{},["stop"]))},[Tt(x("input",{"onUpdate:modelValue":X[8]||(X[8]=U=>B.value=U),type:"text",placeholder:u(D)("Название view"),class:"admin-toolbar__input",onKeydown:X[9]||(X[9]=Et(U=>K(()=>{}),["enter"]))},null,40,Ine),[[Ut,B.value]]),x("div",Lne,[E(u($e),{size:"sm",variant:"primary",disabled:B.value.trim()==="",onClick:X[10]||(X[10]=U=>K(()=>{}))},{default:F(()=>[le(I(u(D)("Сохранить view")),1)]),_:1},8,["disabled"])])],32)]),_:1})):q("",!0)])]))}}),Cne=["title","role","tabindex"],Sne=["disabled"],Ane=["disabled"],$ne=["disabled"],qne=["value"],zne=["disabled"],Rne=["disabled"],$T=ee({__name:"InlineEditCell",props:{resourceSlug:{},rowId:{},column:{},value:{},editable:{type:Boolean,default:!0},inputType:{default:"text"},options:{default:()=>({})},rowOverride:{default:()=>({})}},emits:["saved"],setup(e,{emit:t}){const a=e,n=t,l=P(!1),o=P(""),i=P(!1),r=P(null),s=k(()=>!(!a.editable||a.rowOverride[a.column]===!1));async function h(){!s.value||i.value||(o.value=a.value===null||a.value===void 0?"":String(a.value),l.value=!0,await Ye(),r.value?.focus(),r.value&&"select"in r.value&&typeof r.value.select=="function"&&r.value.select())}function p(g){s.value&&(g.stopPropagation(),h())}function y(g){!s.value||g.key!=="Enter"&&g.key!==" "||(g.preventDefault(),g.stopPropagation(),h())}function m(){l.value=!1}async function v(){if(!(!l.value||i.value)){if(o.value===String(a.value??"")){l.value=!1;return}i.value=!0;try{const{getAdminClient:g}=await _t(async()=>{const{getAdminClient:L}=await Promise.resolve().then(()=>St);return{getAdminClient:L}},void 0,import.meta.url),_=g(),C=a.inputType==="switcher"?o.value==="true"||o.value==="1":o.value;await _.post(`/${a.resourceSlug}/inlineUpdate`,{id:a.rowId,column:a.column,value:C}),n("saved",C),l.value=!1}catch(g){typeof console<"u"&&console.error("[admin] inline-update failed:",g),Ue.error(Cn(g,Ze("Не удалось обновить «:column».",{column:a.column})))}finally{i.value=!1}}}function M(g){g.key==="Enter"&&a.inputType!=="textarea"?(g.preventDefault(),v()):g.key==="Escape"&&(g.preventDefault(),m())}function w(){!s.value||i.value||(o.value=a.value===!0||a.value===1||a.value==="1"?"false":"true",l.value=!0,v())}const b=k(()=>Object.entries(a.options).map(([g,_])=>({value:g,label:_})));return(g,_)=>e.inputType==="switcher"?(d(),f("span",{key:0,class:re(["admin-inline-edit",{"admin-inline-edit--editable":s.value}]),onClick:je(w,["stop"])},[Le(g.$slots,"default",{},()=>[le(I(e.value),1)])],2)):(d(),f(J,{key:1},[l.value?e.inputType==="number"?Tt((d(),f("input",{key:1,ref_key:"inputRef",ref:r,"onUpdate:modelValue":_[0]||(_[0]=C=>o.value=C),type:"number",class:"admin-inline-edit__input",disabled:i.value,onKeydown:M,onBlur:v,onClick:_[1]||(_[1]=je(()=>{},["stop"]))},null,40,Sne)),[[Ut,o.value]]):e.inputType==="date"?Tt((d(),f("input",{key:2,ref_key:"inputRef",ref:r,"onUpdate:modelValue":_[2]||(_[2]=C=>o.value=C),type:"date",class:"admin-inline-edit__input",disabled:i.value,onKeydown:M,onBlur:v,onClick:_[3]||(_[3]=je(()=>{},["stop"]))},null,40,Ane)),[[Ut,o.value]]):e.inputType==="select"?Tt((d(),f("select",{key:3,ref_key:"inputRef",ref:r,"onUpdate:modelValue":_[4]||(_[4]=C=>o.value=C),class:"admin-inline-edit__input",disabled:i.value,onKeydown:M,onChange:v,onBlur:v,onClick:_[5]||(_[5]=je(()=>{},["stop"]))},[(d(!0),f(J,null,de(b.value,C=>(d(),f("option",{key:C.value,value:C.value},I(C.label),9,qne))),128))],40,$ne)),[[pR,o.value]]):e.inputType==="textarea"?Tt((d(),f("textarea",{key:4,ref_key:"inputRef",ref:r,"onUpdate:modelValue":_[6]||(_[6]=C=>o.value=C),class:"admin-inline-edit__input admin-inline-edit__input--textarea",rows:"3",disabled:i.value,onKeydown:M,onBlur:v,onClick:_[7]||(_[7]=je(()=>{},["stop"]))},null,40,zne)),[[Ut,o.value]]):Tt((d(),f("input",{key:5,ref_key:"inputRef",ref:r,"onUpdate:modelValue":_[8]||(_[8]=C=>o.value=C),type:"text",class:"admin-inline-edit__input",disabled:i.value,onKeydown:M,onBlur:v,onClick:_[9]||(_[9]=je(()=>{},["stop"]))},null,40,Rne)),[[Ut,o.value]]):(d(),f("span",{key:0,class:re(["admin-inline-edit",{"admin-inline-edit--editable":s.value}]),title:s.value?u(D)("Нажмите, чтобы изменить"):void 0,role:s.value?"button":void 0,tabindex:s.value?0:void 0,onClick:p,onKeydown:y},[Le(g.$slots,"default",{},()=>[le(I(e.value),1)])],42,Cne))],64))}}),Pne={class:"admin-resource-tree-page"},Tne={class:"admin-resource-tree-page__header"},Dne={class:"admin-resource-tree-page__title"},Ene={key:0,class:"admin-resource-tree-page__count"},Vne={key:0,class:"admin-resource-tree-page__subtitle"},Hne={class:"admin-resource-tree-page__actions"},Bne={class:"admin-resource-tree-page__toolbar"},Fne={class:"admin-resource-tree-page__selection-label"},jne={class:"admin-resource-tree-page__body"},One=ee({__name:"ResourceTreePage",props:{slug:{},title:{default:null},subtitle:{default:null}},setup(e){const t=e,a=Vt(),n=aa(),l=k(()=>n.getResource(t.slug)),o=P([]),i=P(0),r=P(!1),s=P(null),h=P(""),p=P([]),y=P([]),m=k(()=>t.title??l.value?.label??t.slug),v=k(()=>t.subtitle??null),M=k(()=>!!l.value?.permissions?.create),w=k(()=>l.value?.label??t.slug);async function b(){r.value=!0,s.value=null;try{const U=Qe(),te={};h.value.trim()!==""&&(te.q=h.value.trim());const Q=await U.post(`/${t.slug}/tree`,te);o.value=Q.data,i.value=Q.meta.total}catch(U){s.value=U instanceof Error?U:new Error(String(U)),o.value=[],i.value=0}finally{r.value=!1}}function g(U){const te=[],Q=ke=>{for(const G of ke)te.push(G.key),G.children?.length&&Q(G.children)};return Q(U),te}function _(){p.value=g(o.value)}function C(){p.value=[]}const L=k(()=>y.value[0]??null);function T(U,te){for(const Q of U){if(Q.key===te)return Q;if(Q.children?.length){const ke=T(Q.children,te);if(ke)return ke}}return null}const $=k(()=>L.value===null?null:T(o.value,L.value)),S=k(()=>$.value?.slug??t.slug),R=k(()=>{const U=$.value;if(!U)return null;const te=U.record?.id;return typeof te=="string"||typeof te=="number"?te:U.key});function A(){a.push({name:`admin.resource.${t.slug}.create`})}function z(){R.value!==null&&a.push({name:`admin.resource.${S.value}.edit`,params:{id:String(R.value)}})}function H(){R.value!==null&&a.push({name:`admin.resource.${S.value}.view`,params:{id:String(R.value)}})}const B=k(()=>$.value?.actions??[]);function K(U,te){const Q={};if(!U)return Q;for(const[ke,G]of Object.entries(U))typeof G=="string"?Q[ke]=G.replace(/\{([a-zA-Z_][\w]*)\}/g,(N,Z)=>{const ce=te?.[Z];return ce==null?"":String(ce)}):Q[ke]=G;return Q}function W(U){if(U.kind!=="navigate")return;const Q=$.value?.record??{},ke=K(U.to.params,Q);a.push({name:`admin.resource.${U.to.slug}.${U.to.screen}`,query:ke})}async function V(){if(R.value!==null&&await hl({...ol(),message:D("Удалить выбранный узел?")}))try{await Qe().post(`/${S.value}/delete`,{id:R.value}),y.value=[],Ue.success(fL(n.getResource(S.value),S.value)),await b()}catch(U){s.value=U instanceof Error?U:new Error(String(U))}}let X=null;return Pe(h,()=>{X!==null&&clearTimeout(X),X=setTimeout(()=>{b()},300)}),nt(b),(U,te)=>(d(),f("div",Pne,[x("header",Tne,[x("div",null,[x("h1",Dne,[le(I(m.value)+" ",1),i.value>0?(d(),f("span",Ene,I(i.value),1)):q("",!0)]),v.value?(d(),f("p",Vne,I(v.value),1)):q("",!0)]),x("div",Hne,[M.value?(d(),O(u($e),{key:0,variant:"primary",title:u(iT)(l.value,e.slug),onClick:A},{default:F(()=>[E(u(fe),{icon:u(Wt)},null,8,["icon"]),le(" "+I(u(D)("Создать")),1)]),_:1},8,["title"])):q("",!0)])]),x("div",Bne,[E(u(kt),{modelValue:h.value,"onUpdate:modelValue":te[0]||(te[0]=Q=>h.value=Q),placeholder:u(D)("Поиск по дереву…"),class:"admin-resource-tree-page__search"},null,8,["modelValue","placeholder"]),E(u(Ft),null,{trigger:F(()=>[E(u($e),{variant:"ghost"},{default:F(()=>[E(u(fe),{icon:u(ad)},null,8,["icon"]),le(" "+I(u(D)("Развернуть"))+" ",1),E(u(fe),{icon:u(Nt)},null,8,["icon"])]),_:1})]),default:F(()=>[E(u(ca),{onClick:_},{default:F(()=>[le(I(u(D)("Развернуть все")),1)]),_:1}),E(u(ca),{onClick:C},{default:F(()=>[le(I(u(D)("Свернуть все")),1)]),_:1})]),_:1}),L.value!==null?(d(),f(J,{key:0},[te[5]||(te[5]=x("span",{class:"admin-resource-tree-page__selection-divider","aria-hidden":"true"},"|",-1)),x("span",Fne,I($.value?.label??L.value),1),E(u($e),{variant:"ghost",onClick:H},{default:F(()=>[E(u(fe),{icon:u(rn)},null,8,["icon"]),le(" "+I(u(D)("Открыть")),1)]),_:1}),E(u($e),{variant:"ghost",onClick:z},{default:F(()=>[E(u(fe),{icon:u(rn)},null,8,["icon"]),le(" "+I(u(D)("Редактировать")),1)]),_:1}),(d(!0),f(J,null,de(B.value,Q=>(d(),O(u($e),{key:Q.id,variant:Q.variant??"secondary",onClick:ke=>W(Q)},{default:F(()=>[le(I(Q.label),1)]),_:2},1032,["variant","onClick"]))),128)),l.value?.permissions?.delete?(d(),O(u($e),{key:0,variant:"danger",onClick:V},{default:F(()=>[E(u(fe),{icon:u(Ma)},null,8,["icon"]),le(" "+I(u(D)("Удалить")),1)]),_:1})):q("",!0),E(u($e),{variant:"ghost",onClick:te[1]||(te[1]=Q=>y.value=[])},{default:F(()=>[le(I(u(D)("Снять выбор")),1)]),_:1})],64)):q("",!0)]),x("div",jne,[r.value&&o.value.length===0?(d(),f(J,{key:0},de(6,Q=>E(u(ia),{key:Q})),64)):s.value?(d(),O(u(Ju),{key:1,title:u(D)("Не удалось загрузить данные"),description:s.value.message},{actions:F(()=>[E(u($e),{variant:"primary",onClick:b},{default:F(()=>[le(I(u(D)("Обновить")),1)]),_:1})]),_:1},8,["title","description"])):o.value.length===0&&h.value.trim()!==""?(d(),O(u(ns),{key:2,title:u(D)("Ничего не найдено"),description:u(Ze)("По запросу «:query» ничего не найдено. Измените запрос или сбросьте поиск.",{query:h.value.trim()}),"data-testid":"tree-no-results"},{actions:F(()=>[E(u($e),{variant:"secondary",onClick:te[2]||(te[2]=Q=>h.value="")},{default:F(()=>[le(I(u(D)("Сбросить поиск")),1)]),_:1})]),_:1},8,["title","description"])):o.value.length===0?(d(),O(u(ns),{key:3,title:u(D)("Пока пусто"),description:u(oT)(l.value,e.slug,M.value)},null,8,["title","description"])):(d(),O(u(II),{key:4,nodes:o.value,"virtual-root":w.value,"expanded-keys":p.value,"onUpdate:expandedKeys":te[3]||(te[3]=Q=>p.value=Q),"selected-keys":y.value,"onUpdate:selectedKeys":te[4]||(te[4]=Q=>y.value=Q),selectable:"single","show-guides":""},null,8,["nodes","virtual-root","expanded-keys","selected-keys"]))])]))}}),Une=ya(One,[["__scopeId","data-v-05592daf"]]);function Nne(e,t,a){const n=Number.isFinite(t)&&t>1?Math.floor(t):1,l=Number.isFinite(a)&&a>0?Math.floor(a):0;return{ids:e,offset:(n-1)*l}}function Wne(e,t,a,n){return e?a===null||n===null?!0:a===(t??"position")&&n==="asc":!1}function Kne(e,t,a,n){return!t||!a?e:e.map(l=>{const o=t[String(n(l))];return typeof o=="number"&&a in l?{...l,[a]:o}:l})}const Zne={key:1,class:"admin-page admin-resource-index"},Gne={class:"admin-page__hd"},Xne={class:"admin-page__title-wrap"},Jne={class:"admin-page__title-row"},Yne={class:"admin-page__title"},Qne={key:0,class:"admin-page__live",role:"status"},ele={key:0,class:"admin-page__count"},tle={class:"admin-page__actions"},ale={class:"admin-page__view-row"},nle={class:"admin-page__view-name"},lle={key:0,class:"admin-page__view-badge"},ole=["aria-label","onClick"],ile={key:0,class:"admin-bulk-toolbar","data-testid":"bulk-bar",role:"toolbar"},rle={class:"admin-bulk-toolbar__count"},sle={key:0,class:"admin-resource-index__loading"},cle=["data-disabled","draggable","title","onDragstart","onDragover","onDrop"],dle={key:1,class:"admin-resource-index__row-actions"},ule=["title","onClick"],hle=["title","onClick"],ple=["title","onClick"],yle=["title","onClick"],fle=["title","onClick"],mle=["title","onClick"],vle={key:4,class:"admin-resource-index__footer"},E$="__row_actions__",V$="__row_reorder__",qT=ee({__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(e,{emit:t}){const a=vl(),n=me=>a.tr(me),l=(me,Ae)=>a.t(me,Ae),o=(me,Ae,qe)=>a.has(me)?a.t(me,qe):Ae,i=e,r=t,s=CT(),h=aa(),p=FS(),y=Vt(),m=k(()=>h.getResource(i.slug)),v=k(()=>i.title??m.value?.label??i.slug),M=k(()=>{if(i.createRouteName!==null)return y.hasRoute(i.createRouteName)?i.createRouteName:null;const me=`admin.resource.${i.slug}.create`;return y.hasRoute(me)?me:null}),w=k(()=>gL(m.value?.actions)),b=k(()=>w.value.filter(me=>!pn(me))),g=k(()=>w.value.filter(me=>pn(me))),_=k(()=>w.value.filter(me=>me.position.includes("row")&&pn(me))),C=me=>pn(me)&&!kT(me,s.selectedCount),L=OS({ids:()=>[...s.selection],async execute(me,Ae,qe){p.start();try{const{getAdminClient:Re}=await _t(async()=>{const{getAdminClient:Fe}=await Promise.resolve().then(()=>St);return{getAdminClient:Fe}},void 0,import.meta.url);return await Re().post(`/${i.slug}/action`,{key:me.name,ids:qe?.ids??(pn(me)?[...s.selection]:[]),...Ae?{payload:Ae}:{}})}finally{p.end()}},async onSuccess(me,Ae,qe){const Re=Ae??{};pn(me)&&!qe?.ids&&s.clearSelection(),await s.load().catch(()=>{}),Ue.success(Re.message??l("Действие «:action» применено к :count записям.",{action:me.label,count:Re.affected??0}))},onError(me,Ae){typeof console<"u"&&console.error("[admin] header-action failed:",Ae),Ue.error(CI(me,Ae))},async refresh(){await s.load().catch(()=>{})}});async function T(me){if(pn(me)&&!s.hasSelection){Ue.error(n("Сначала выберите записи."));return}r("header-action",me.name),await L.run(me)}async function $(me,Ae){const qe=Wa(Ae);qe!==null&&await L.run(me,{ids:[qe]})}const S=P(!1);async function R(){const me=[...s.selection];if(me.length!==0&&await L.confirm({...ol(),message:l("Удалить выбранные записи (:count)?",{count:me.length})},!0)){S.value=!0;try{const{getAdminClient:Ae}=await _t(async()=>{const{getAdminClient:Fe}=await Promise.resolve().then(()=>St);return{getAdminClient:Fe}},void 0,import.meta.url),qe=Ae();let Re=0;for(const Fe of me)try{await qe.post(`/${i.slug}/delete`,{id:Fe}),Re++}catch{}s.clearSelection(),await s.load().catch(()=>{}),Re===me.length?Ue.success(l("Удалено записей: :count.",{count:Re})):Ue.error(l("Удалено :ok из :total; часть не удалена.",{ok:Re,total:me.length}))}finally{S.value=!1}}}async function A(me="csv"){r("header-action","export");try{p.start();const{getAdminClient:Ae}=await _t(async()=>{const{getAdminClient:En}=await Promise.resolve().then(()=>St);return{getAdminClient:En}},void 0,import.meta.url),Re=await Ae().post(`/${i.slug}/export`,{format:me,...s.queryParams()},{responseType:"blob"}),Fe=URL.createObjectURL(Re),vt=document.createElement("a");vt.href=Fe,vt.download=`${i.slug}-${new Date().toISOString().slice(0,10)}.${me}`,document.body.appendChild(vt),vt.click(),vt.remove(),URL.revokeObjectURL(Fe)}catch(Ae){typeof console<"u"&&console.error("[admin] export failed:",Ae),Ue.error(l("Не удалось экспортировать данные в формате :format.",{format:me.toUpperCase()}))}finally{p.end()}}const z=P(null);function H(){r("import"),z.value?.click()}async function B(me){const Ae=me.target,qe=Ae.files?.[0];if(qe)try{p.start();const{getAdminClient:Re}=await _t(async()=>{const{getAdminClient:dE}=await Promise.resolve().then(()=>St);return{getAdminClient:dE}},void 0,import.meta.url),Fe=Re(),vt=new FormData;vt.append("file",qe),vt.append("resource",i.slug);const En=await Fe.post("/import/upload",vt),dc=await Fe.post("/import/preview",{resource:i.slug,upload_id:En.upload_id}),SL=await Fe.post("/import/start",{resource:i.slug,upload_id:En.upload_id,mapping:dc.mapping}),s1=await K(Fe,SL.process_id),c1=s1.imported??0,ys=s1.failed??0;ys>0?Ue.warning(l("Импорт завершён с ошибками: :imported записей, :failed ошибок.",{imported:c1,failed:ys})):Ue.success(l("Импортировано записей: :count.",{count:c1})),await s.load().catch(()=>{})}catch(Re){typeof console<"u"&&console.error("[admin] import failed:",Re),Ue.error(n("Импорт не удался. Проверьте формат файла и поля ресурса либо обратитесь к администратору."))}finally{Ae.value="",p.end()}}async function K(me,Ae){const qe=Date.now()+9e4;for(;Date.now()<qe;){await new Promise(Fe=>setTimeout(Fe,800));const Re=await me.get(`/import/status?process_id=${encodeURIComponent(Ae)}`);if(Re.status==="done"||Re.status==="failed")return Re}return{status:"failed",failed:1}}const W=k(()=>(m.value?.features??{}).reorderable===!0),V=k(()=>{const me=m.value?.features??{};return typeof me.reorderColumn=="string"?me.reorderColumn:null}),X=k(()=>Wne(W.value,V.value,s.sortKey,s.sortDirection)),U=k(()=>(m.value?.features??{}).creatable!==!1),te=k(()=>(m.value?.features??{}).editable!==!1),Q=ea(),ke=k(()=>{if((m.value?.features??{}).replicable!==!0)return!1;const Ae=m.value?.permissions?.replicate;return typeof Ae!="string"||Q.hasPermission(Ae)}),G=k(()=>(m.value?.features??{}).savedViews===!0),N=k(()=>(m.value?.features??{}).importable===!0),Z=k(()=>{const me=m.value?.features??{};return(Array.isArray(me.exportable)?me.exportable:["csv"]).filter(qe=>typeof qe=="string"&&qe.length>0)}),ce={csv:"CSV",json:"JSON",xlsx:"XLSX",pdf:"PDF"},ne=k(()=>{const Ae=(m.value?.columns??[]).map(Re=>{const Fe=Re;return{key:String(Fe.key??Fe.name??""),label:String(Fe.label??Fe.name??""),sortable:!!Fe.sortable,align:Fe.align??"left",width:typeof Fe.width=="string"?Fe.width:void 0}}).filter(Re=>Re.key).filter(Re=>Me(Re.key));return[...W.value?[{key:V$,label:"",sortable:!1,align:"center",width:"32px",fixed:"left"}]:[],...Ae,{key:E$,label:"",sortable:!1,align:"right",width:_.value.length>0?"156px":"120px",fixed:"right"}]});function Me(me){const Ae=(m.value?.columns??[]).find(qe=>{const Re=qe;return String(Re.key??Re.name??"")===me});return Ae?.cantHide===!0?!0:me in _e.value?_e.value[me]!==!1:Ae?.defaultHidden!==!0}function ae(me){const Ae=m.value?.columns??[];for(const qe of Ae){const Re=qe;if(String(Re.key??Re.name??"")===me)return Re.editable!==null&&Re.editable!==void 0}return!1}function Se(me){const Ae=m.value?.columns??[];for(const qe of Ae){const Re=qe;if(String(Re.key??Re.name??"")===me){const vt=Re.editable??{};return{as:vt.as??"text",options:vt.options??{}}}}return{as:"text",options:{}}}const se=k(()=>{const me=m.value?.columns??[],Ae={};for(const qe of me){const Re=qe,Fe=String(Re.key??Re.name??"");Fe&&(Ae[Fe]={preset:typeof Re.preset=="string"?Re.preset:void 0,meta:Re.meta??{}})}return Ae});function oe(me){return me?.row}const we=k(()=>s.search!==""||Object.keys(s.filters).length>0),j=k(()=>!s.isEmpty||we.value),Y=k(()=>m.value?.filters??[]),pe=k(()=>m.value?.columns??[]),xe=k(()=>{const me=nI(m.value?.label??i.slug);return l("Поиск: :label…",{label:me})}),ve=P(null),_e=P({});async function Ie(me,Ae){await s.setFilter(me,Ae)}async function he(me){await s.setSearch(me)}async function ge(){s.search="",await s.clearFilters()}async function ye(me){ve.value=me,await s.load({group_by:me})}function Ve(me){_e.value=me}const De=P([]),He=P(null);async function Oe(){if(!G.value){De.value=[];return}try{const{getAdminClient:me}=await _t(async()=>{const{getAdminClient:Re}=await Promise.resolve().then(()=>St);return{getAdminClient:Re}},void 0,import.meta.url),qe=await me().get(`/${i.slug}_views/list`);De.value=qe.data??[]}catch{De.value=[]}}async function et(me){He.value=me.id;const Ae=me.state;s.search=Ae.search??"",s.filters={...Ae.filters??{}},s.sortKey=Ae.sort?.key??null,s.sortDirection=Ae.sort?.direction??null,ve.value=Ae.group_by??null,_e.value={...Ae.columns??{}},s.meta.page=1,await Ht()}async function be(){He.value=null,s.search="",s.filters={},s.sortKey=null,s.sortDirection=null,ve.value=null,_e.value={},s.meta.page=1,await Ht()}async function ie(me,Ae){if(Ae?.stopPropagation(),!!me.owned&&await L.confirm({...ol(),message:l("Удалить представление «:name»?",{name:me.name})},!0))try{p.start();const{getAdminClient:qe}=await _t(async()=>{const{getAdminClient:Fe}=await Promise.resolve().then(()=>St);return{getAdminClient:Fe}},void 0,import.meta.url);await qe().post(`/${i.slug}_views/delete`,{id:me.id}),He.value===me.id&&(He.value=null),await Oe()}catch(qe){typeof console<"u"&&console.error("[admin] delete-view failed:",qe)}finally{p.end()}}async function Ce(me){try{p.start();const{getAdminClient:Ae}=await _t(async()=>{const{getAdminClient:Fe}=await Promise.resolve().then(()=>St);return{getAdminClient:Fe}},void 0,import.meta.url),Re=await Ae().post(`/${i.slug}_views/create`,{name:me,state:{search:s.search,filters:s.filters,sort:{key:s.sortKey,direction:s.sortDirection},group_by:ve.value,columns:_e.value}});Re?.view&&(He.value=Re.view.id),await Oe(),Ue.success(o("admin.resource.view_saved","Представление сохранено."))}catch(Ae){typeof console<"u"&&console.error("[admin] save-view failed:",Ae),Ue.error(n("Не удалось сохранить view. Возможно, недостаточно прав либо ресурс не зарегистрирован."))}finally{p.end()}}const ze=k(()=>{const me=s.meta.total;return me===0?"":l(":shown из :total :word",{shown:s.items.length,total:me,word:Be(me)})});function Be(me){const Ae=new Intl.PluralRules(lc()).select(me);return n(Ae==="one"?"запись":Ae==="few"||Ae==="two"?"записи":"записей")}const Ke=P(null),at=P(0);let pt=null;Pe(()=>s.loading,(me,Ae)=>{Ae&&!me&&s.error===null&&(Ke.value=Date.now())}),nt(()=>{pt=setInterval(()=>{at.value+=1},3e4)}),bt(()=>{pt!==null&&clearInterval(pt)});const ot=k(()=>{if(at.value,Ke.value===null)return null;const me=Math.floor((Date.now()-Ke.value)/1e3);if(me<60)return null;const Ae=Math.floor(me/60);if(Ae<60)return n("обновлено :min мин назад").replace(":min",String(Ae));const qe=Math.floor(Ae/60);return qe<24?n("обновлено :hr ч назад").replace(":hr",String(qe)):n("обновлено более суток назад")}),dt=k(()=>{if(He.value!==null){const Ae=De.value.find(qe=>qe.id===He.value);if(Ae)return Ae.name}const me=m.value?.label??i.slug;return`${n("Все")} ${nI(me)}`});async function Ht(){p.start();try{await s.load()}catch{}finally{p.end()}}nt(async()=>{s.setSlug(i.slug),h.manifest===null&&await h.load().catch(()=>{}),Oe(),await Ht()}),Pe(()=>i.slug,async(me,Ae)=>{me!==Ae&&(s.setSlug(me),He.value=null,Oe(),await Ht())});async function La(me){await Ye(),await s.setSort(me,s.sortDirection)}async function ND(me){await Ye(),await s.setSort(s.sortKey,me)}function WD(me){s.selection=me}async function KD(me){await s.setPage(me)}function Wa(me){const Ae=me?.id??me?.key;return typeof Ae=="string"||typeof Ae=="number"?Ae:null}function ZD(me){return Wa(oe(me)??{})??""}const GD=["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 CL=null;function XD(me){CL=me.target}function JD(me){if(!(me instanceof Element))return!1;const Ae=me.closest(GD);return Ae!==null&&Ae.closest("tr")!==null}function YD(me){const Ae=CL;if(CL=null,JD(Ae))return;const qe=typeof window<"u"?window.getSelection():null;if(qe&&!qe.isCollapsed&&qe.toString().trim()!=="")return;r("row-click",me);const Re=Wa(me);Re!==null&&y.push({name:`admin.resource.${i.slug}.view`,params:{id:String(Re)}})}function QD(me,Ae){Ae?.stopPropagation();const qe=Wa(me);qe!==null&&y.push({name:`admin.resource.${i.slug}.view`,params:{id:String(qe)}})}function eE(me,Ae){Ae?.stopPropagation();const qe=Wa(me);qe!==null&&y.push({name:`admin.resource.${i.slug}.edit`,params:{id:String(qe)}})}async function tE(me,Ae){Ae?.stopPropagation();const qe=Wa(me);if(qe!==null&&await L.confirm({...ol(),message:o("admin.resource.delete_confirm",HS(m.value,i.slug),$a(m.value,i.slug))},!0))try{p.start();const{getAdminClient:Re}=await _t(async()=>{const{getAdminClient:vt}=await Promise.resolve().then(()=>St);return{getAdminClient:vt}},void 0,import.meta.url);await Re().post(`/${i.slug}/delete`,{id:qe}),await s.load().catch(()=>{}),Ue.success(o("admin.resource.deleted",fL(m.value,i.slug),$a(m.value,i.slug)))}catch(Re){typeof console<"u"&&console.error("[admin] delete failed:",Re),Ue.error(o("admin.resource.delete_failed","Не удалось удалить запись."))}finally{p.end()}}async function aE(me,Ae){Ae?.stopPropagation();const qe=Wa(me);if(qe!==null)try{p.start();const{getAdminClient:Re}=await _t(async()=>{const{getAdminClient:En}=await Promise.resolve().then(()=>St);return{getAdminClient:En}},void 0,import.meta.url),Fe=await Re().post(`/${i.slug}/replicate`,{id:qe});Ue.success(n("Копия создана."));const vt=Fe?.record?Wa(Fe.record):null;vt!==null&&y.hasRoute(`admin.resource.${i.slug}.edit`)?y.push({name:`admin.resource.${i.slug}.edit`,params:{id:String(vt)}}):await s.load().catch(()=>{})}catch(Re){typeof console<"u"&&console.error("[admin] replicate failed:",Re),Ue.error(n("Не удалось создать копию."))}finally{p.end()}}function nE(me){return me.deleted_at!==null&&me.deleted_at!==void 0}async function lE(me,Ae){Ae?.stopPropagation();const qe=Wa(me);if(qe!==null)try{p.start();const{getAdminClient:Re}=await _t(async()=>{const{getAdminClient:vt}=await Promise.resolve().then(()=>St);return{getAdminClient:vt}},void 0,import.meta.url);await Re().post(`/${i.slug}/restore`,{id:qe}),await s.load().catch(()=>{}),Ue.success(o("admin.resource.restored",n("Запись восстановлена."),$a(m.value,i.slug)))}catch(Re){typeof console<"u"&&console.error("[admin] restore failed:",Re),Ue.error(o("admin.resource.restore_failed","Не удалось восстановить запись."))}finally{p.end()}}const Dn=P(null),gl=P(null),r1=P("before");function oE(me,Ae){if(!X.value||!Ae.dataTransfer){Ae.preventDefault();return}if(!Ae.target?.closest('[data-row-drag-handle="true"]')){Ae.preventDefault();return}Dn.value=me,Ae.dataTransfer.effectAllowed="move",Ae.dataTransfer.setData("text/plain",String(me))}function iE(me,Ae){if(!X.value||Dn.value===null)return;Ae.preventDefault();const qe=Ae.currentTarget;if(qe){const Re=qe.getBoundingClientRect();r1.value=Ae.clientY<Re.top+Re.height/2?"before":"after"}gl.value=me}function rE(){Dn.value=null,gl.value=null}async function sE(me,Ae){if(Ae.preventDefault(),!X.value||Dn.value===null)return;const qe=Dn.value,Re=r1.value==="after"?me+1:me,Fe=Re>qe?Re-1:Re;if(Dn.value=null,gl.value=null,qe===Fe)return;const vt=[...s.items],[En]=vt.splice(qe,1);vt.splice(Fe,0,En),s.items=vt;try{p.start();const{getAdminClient:dc}=await _t(async()=>{const{getAdminClient:ys}=await Promise.resolve().then(()=>St);return{getAdminClient:ys}},void 0,import.meta.url),SL=dc(),s1=vt.map(ys=>s.rowId(ys)),c1=await SL.post(`/${i.slug}/reorder`,Nne(s1,s.meta.page,s.meta.per_page));s.items=Kne(s.items,c1?.positions,V.value,s.rowId),Ue.success(o("admin.resource.reorder_saved","Порядок сохранён."))}catch(dc){typeof console<"u"&&console.error("[admin] reorder failed:",dc),Ue.error(o("admin.resource.reorder_failed","Не удалось сохранить порядок.")),await s.load().catch(()=>{})}finally{p.end()}}async function cE(me,Ae){Ae?.stopPropagation();const qe=Wa(me);if(qe!==null&&await L.confirm({...BQ(),message:o("admin.resource.force_delete_confirm",n("Удалить запись НАВСЕГДА? Действие необратимо."),$a(m.value,i.slug))},!0))try{p.start();const{getAdminClient:Re}=await _t(async()=>{const{getAdminClient:vt}=await Promise.resolve().then(()=>St);return{getAdminClient:vt}},void 0,import.meta.url);await Re().post(`/${i.slug}/forceDelete`,{id:qe}),await s.load().catch(()=>{}),Ue.success(o("admin.resource.force_deleted",n("Запись удалена навсегда."),$a(m.value,i.slug)))}catch(Re){typeof console<"u"&&console.error("[admin] force-delete failed:",Re),Ue.error(o("admin.resource.force_delete_failed","Не удалось удалить запись навсегда."))}finally{p.end()}}async function hA(){await s.load().catch(()=>{})}return(me,Ae)=>m.value?.view_mode==="tree"?(d(),O(Une,{key:0,slug:e.slug,title:e.title,subtitle:e.subtitle},null,8,["slug","title","subtitle"])):(d(),f("section",Zne,[x("header",Gne,[x("div",Xne,[x("div",Jne,[x("h1",Yne,I(v.value),1),ot.value?(d(),f("span",Qne,[Ae[4]||(Ae[4]=x("span",{class:"admin-page__live-dot","aria-hidden":"true"},null,-1)),le(" "+I(ot.value),1)])):q("",!0)]),e.subtitle||ze.value?(d(),f("div",ele,[e.subtitle?(d(),f(J,{key:0},[le(I(e.subtitle),1)],64)):q("",!0),e.subtitle&&ze.value?(d(),f(J,{key:1},[le(" · ")],64)):q("",!0),ze.value?(d(),f(J,{key:2},[le(I(ze.value),1)],64)):q("",!0)])):q("",!0)]),x("div",tle,[Le(me.$slots,"actions"),G.value?(d(),O(u(Ft),{key:0},{trigger:F(()=>[E(u($e),{variant:"ghost",size:"md",class:"admin-page__scope"},{prepend:F(()=>[E(u(fe),{icon:u(Kr),size:14},null,8,["icon"])]),append:F(()=>[E(u(fe),{icon:u(Nt),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(dt.value)+" ",1)]),_:1})]),default:F(()=>[E(u(ca),{onClick:be},{default:F(()=>[le(I(n("Все"))+" "+I(u(nI)(m.value?.label??e.slug)),1)]),_:1}),(d(!0),f(J,null,de(De.value,qe=>(d(),O(u(ca),{key:qe.id,onClick:Re=>et(qe)},{default:F(()=>[x("span",ale,[x("span",nle,[le(I(qe.name)+" ",1),qe.is_default?(d(),f("span",lle,"default")):q("",!0)]),qe.owned?(d(),f("button",{key:0,type:"button",class:"admin-page__view-delete","aria-label":n("Удалить view"),onClick:je(Re=>ie(qe,Re),["stop"])},[E(u(fe),{icon:u(Ma),size:12},null,8,["icon"])],8,ole)):q("",!0)])]),_:2},1032,["onClick"]))),128))]),_:1})):q("",!0),E(u(Ft),null,{trigger:F(()=>[E(u($e),{variant:"ghost",size:"md","aria-label":n("Действия"),class:"admin-page__more"},{default:F(()=>[E(u(fe),{icon:u(kn),size:16},null,8,["icon"])]),_:1},8,["aria-label"])]),default:F(()=>[E(u(ca),{onClick:hA},{default:F(()=>[le(I(n("Обновить")),1)]),_:1}),(d(!0),f(J,null,de(Z.value,qe=>(d(),O(u(ca),{key:qe,onClick:Re=>A(qe)},{default:F(()=>[le(I(n("Экспорт"))+" "+I(ce[qe]??qe.toUpperCase()),1)]),_:2},1032,["onClick"]))),128)),E(Eu,{actions:b.value,onRun:T},null,8,["actions"]),Le(me.$slots,"header-menu")]),_:3}),N.value?(d(),O(u($e),{key:1,variant:"secondary",size:"md",onClick:H},{prepend:F(()=>[E(u(fe),{icon:u(Ln),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(n("Импорт")),1)]),_:1})):q("",!0),x("input",{ref_key:"importInput",ref:z,type:"file",class:"admin-page__import-input",accept:".csv,.json,.xlsx,.xls,application/json,text/csv",onChange:B},null,544),M.value&&U.value?(d(),O(u($e),{key:2,"data-testid":"resource-create",variant:"primary",size:"md",title:u(iT)(m.value,e.slug),onClick:Ae[0]||(Ae[0]=qe=>me.$router.push({name:M.value}))},{prepend:F(()=>[E(u(fe),{icon:u(Wt),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(e.createLabel??n("Создать")),1)]),_:1},8,["title"])):q("",!0)])]),u(s).hasSelection?(d(),f("div",ile,[x("span",rle,[le(I(n("Выбрано"))+" ",1),x("b",null,I(u(s).selectedCount),1)]),Ae[5]||(Ae[5]=x("span",{class:"admin-bulk-toolbar__divider"},null,-1)),(d(!0),f(J,null,de(g.value,qe=>(d(),O(gT,{key:qe.name,action:qe,size:"sm","default-variant":"ghost","is-disabled":C,onRun:T},null,8,["action"]))),128)),E(u($e),{size:"sm",variant:"ghost",onClick:Ae[1]||(Ae[1]=qe=>A("csv"))},{default:F(()=>[le(I(n("Экспорт")),1)]),_:1}),te.value?(d(),O(u($e),{key:0,size:"sm",variant:"danger",loading:S.value,onClick:R},{default:F(()=>[le(I(n("Удалить")),1)]),_:1},8,["loading"])):q("",!0),Ae[6]||(Ae[6]=x("span",{class:"admin-bulk-toolbar__spacer"},null,-1)),E(u($e),{size:"sm",variant:"ghost",onClick:u(s).clearSelection},{default:F(()=>[le(I(n("Снять выделение")),1)]),_:1},8,["onClick"])])):j.value?(d(),O(AT,{key:1,search:u(s).search,"search-placeholder":xe.value,filters:Y.value,values:u(s).filters,columns:pe.value,"group-by":ve.value,"column-visibility":_e.value,"enable-saved-views":G.value,"onUpdate:search":he,onApplyFilter:Ie,onReset:ge,onGroupBy:ye,onColumnsVisibility:Ve,onSaveView:Ce},{extra:F(()=>[Le(me.$slots,"filters",{filters:u(s).filters,setFilter:u(s).setFilter})]),_:3},8,["search","search-placeholder","filters","values","columns","group-by","column-visibility","enable-saved-views"])):q("",!0),u(s).loading&&u(s).items.length===0||u(s).hasError||u(s).isEmpty?(d(),f("div",{key:2,class:re(["admin-resource-index__panel",{"admin-resource-index__panel--joined":j.value||u(s).hasSelection}]),"data-testid":"resource-state"},[u(s).loading&&u(s).items.length===0?(d(),f("div",sle,[u(s).slowLoading?(d(),f(J,{key:0},de(8,qe=>E(u(ia),{key:qe,height:"40px"})),64)):q("",!0)])):u(s).hasError?(d(),O(u(Ju),{key:1,title:n("Не удалось загрузить данные"),description:u(s).error?.message??n("Попробуйте обновить страницу."),class:"admin-resource-index__state"},{actions:F(()=>[E(u($e),{variant:"primary",onClick:hA},{default:F(()=>[le(I(n("Обновить")),1)]),_:1})]),_:1},8,["title","description"])):we.value?(d(),O(u(ns),{key:2,title:n("Ничего не найдено"),description:u(s).search!==""?l("По запросу «:query» ничего не найдено. Измените запрос или сбросьте поиск и фильтры.",{query:u(s).search}):n("Ни одна запись не подходит под фильтры. Измените их или сбросьте."),class:"admin-resource-index__state","data-testid":"resource-no-results"},{actions:F(()=>[E(u($e),{variant:"secondary","data-testid":"resource-reset-filters",onClick:ge},{prepend:F(()=>[E(u(fe),{icon:u(xn),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(n("Сбросить поиск и фильтры")),1)]),_:1})]),_:1},8,["title","description"])):(d(),O(u(ns),{key:3,title:n("Пока пусто"),description:u(oT)(m.value,e.slug,!!(M.value&&U.value)),class:"admin-resource-index__state","data-testid":"resource-empty"},{actions:F(()=>[M.value&&U.value?(d(),O(u($e),{key:0,variant:"primary",onClick:Ae[2]||(Ae[2]=qe=>me.$router.push({name:M.value}))},{prepend:F(()=>[E(u(fe),{icon:u(Wt),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(e.createLabel??n("Создать")),1)]),_:1})):q("",!0)]),_:1},8,["title","description"]))],2)):(d(),f("div",{key:3,class:"admin-resource-index__table",onClickCapture:XD},[E(u(nc),{columns:ne.value,data:u(s).items,"sort-key":u(s).sortKey,"sort-direction":u(s).sortDirection,selectable:"","selection-fixed":"",selection:u(s).selection,"row-key":qe=>u(s).rowId(qe),"onUpdate:sortKey":La,"onUpdate:sortDirection":ND,"onUpdate:selection":WD,onRowClick:YD},us({_:2},[de(ne.value,qe=>({name:qe.key,fn:F(Re=>[qe.key===V$?(d(),f("span",{key:0,class:re(["admin-resource-index__row-drag",{"admin-resource-index__row-drag--drop-before":gl.value!==null&&gl.value===u(s).items.indexOf(oe(Re)??{})&&r1.value==="before","admin-resource-index__row-drag--drop-after":gl.value!==null&&gl.value===u(s).items.indexOf(oe(Re)??{})&&r1.value==="after","admin-resource-index__row-drag--ghost":Dn.value!==null&&Dn.value===u(s).items.indexOf(oe(Re)??{})}]),"data-row-drag-handle":"true","data-disabled":X.value?void 0:"true",draggable:X.value,title:X.value?n("Перетащить"):n("Сбросьте сортировку, чтобы менять порядок"),onDragstart:Fe=>oE(u(s).items.indexOf(oe(Re)??{}),Fe),onDragover:Fe=>iE(u(s).items.indexOf(oe(Re)??{}),Fe),onDragend:rE,onDrop:Fe=>sE(u(s).items.indexOf(oe(Re)??{}),Fe)},[E(u(fe),{icon:u(zs),size:14},null,8,["icon"])],42,cle)):qe.key===E$?(d(),f("div",dle,[x("button",{type:"button",class:"admin-resource-index__row-action",title:n("Просмотр"),onClick:je(Fe=>QD(oe(Re)??{},Fe),["stop"])},[E(u(fe),{icon:u(As),size:16},null,8,["icon"])],8,ule),nE(oe(Re)??{})?(d(),f(J,{key:1},[x("button",{type:"button",class:"admin-resource-index__row-action",title:n("Восстановить"),onClick:je(Fe=>lE(oe(Re)??{},Fe),["stop"])},[E(u(fe),{icon:u(xn),size:16},null,8,["icon"])],8,fle),x("button",{type:"button",class:"admin-resource-index__row-action admin-resource-index__row-action--danger",title:n("Удалить навсегда"),onClick:je(Fe=>cE(oe(Re)??{},Fe),["stop"])},[E(u(fe),{icon:u(Ma),size:16},null,8,["icon"])],8,mle)],64)):(d(),f(J,{key:0},[te.value?(d(),f("button",{key:0,type:"button",class:"admin-resource-index__row-action",title:n("Редактировать"),onClick:je(Fe=>eE(oe(Re)??{},Fe),["stop"])},[E(u(fe),{icon:u(rn),size:16},null,8,["icon"])],8,hle)):q("",!0),ke.value?(d(),f("button",{key:1,type:"button",class:"admin-resource-index__row-action","data-testid":"row-replicate",title:n("Создать копию"),onClick:je(Fe=>aE(oe(Re)??{},Fe),["stop"])},[E(u(fe),{icon:u(on),size:16},null,8,["icon"])],8,ple)):q("",!0),te.value?(d(),f("button",{key:2,type:"button",class:"admin-resource-index__row-action admin-resource-index__row-action--danger",title:n("Удалить"),onClick:je(Fe=>tE(oe(Re)??{},Fe),["stop"])},[E(u(fe),{icon:u(Ma),size:16},null,8,["icon"])],8,yle)):q("",!0)],64)),_.value.length>0?(d(),f("span",{key:2,class:"admin-resource-index__row-menu-wrap",onClick:Ae[3]||(Ae[3]=je(()=>{},["stop"]))},[E(u(Ft),null,{trigger:F(()=>[E(u($e),{variant:"ghost",size:"sm",class:"admin-resource-index__row-menu",icon:u(Gn),"aria-label":n("Действия"),"data-testid":"row-actions-menu"},null,8,["icon","aria-label"])]),default:F(()=>[E(Eu,{actions:_.value,onRun:Fe=>$(Fe,oe(Re)??{})},null,8,["actions","onRun"])]),_:2},1024)])):q("",!0)])):Le(me.$slots,`cell-${qe.key}`,{row:oe(Re)},()=>[ae(qe.key)?(d(),O($T,{key:0,"resource-slug":e.slug,"row-id":ZD(Re),column:qe.key,value:(oe(Re)??{})[qe.key],editable:!0,"input-type":Se(qe.key).as,options:Se(qe.key).options,"row-override":(oe(Re)??{})._editable??{},onSaved:Fe=>{const vt=oe(Re);vt&&(vt[qe.key]=Fe)}},{default:F(()=>[E(ls,{value:(oe(Re)??{})[qe.key],preset:se.value[qe.key]?.preset,meta:se.value[qe.key]?.meta,row:oe(Re)},null,8,["value","preset","meta","row"])]),_:2},1032,["resource-slug","row-id","column","value","input-type","options","row-override","onSaved"])):(d(),O(ls,{key:1,value:(oe(Re)??{})[qe.key],preset:se.value[qe.key]?.preset,meta:se.value[qe.key]?.meta,row:oe(Re)},null,8,["value","preset","meta","row"]))],void 0,2)])}))]),1032,["columns","data","sort-key","sort-direction","selection","row-key"])],32)),!u(s).loading&&!u(s).hasError&&!u(s).isEmpty?(d(),f("footer",vle,[E(u(_S),{"model-value":u(s).meta.page,total:u(s).meta.total,"per-page":u(s).meta.per_page,"onUpdate:modelValue":KD},null,8,["model-value","total","per-page"])])):q("",!0),E(WS,{runner:u(L)},null,8,["runner"])]))}});function zT(e,t){for(const a of e){const n=a;if(n.kind==="field"&&n.name===t)return n;const l=n.items??n.children;if(Array.isArray(l)){const o=zT(l,t);if(o!==null)return o}}return null}function kle(e,t){if(t===null)return null;const a=zT(e,"status"),l=a?.attributes?.options??a?.options;if(Array.isArray(l)){const o=l.find(i=>String(i?.value)===t);if(typeof o?.label=="string")return o.label}else if(l!==null&&typeof l=="object"){const o=l[t];if(typeof o=="string")return o}return t}const AI=ee({__name:"RowsLayout",props:{items:{},gap:{default:"var(--uid-space-md)"}},setup(e){const t=e;function a(l){const o=l,i=o.span??(o.attributes&&o.attributes.span),r=Number(i);return Number.isFinite(r)&&r>=1&&r<=12?r:0}const n=k(()=>t.items.some(l=>a(l)>0));return(l,o)=>n.value?(d(),O(u(Xu),{key:0,cols:12,"col-gap":e.gap,"row-gap":"var(--uid-space-lg)"},{default:F(()=>[(d(!0),f(J,null,de(e.items,(i,r)=>(d(),f("div",{key:r,style:Te({gridColumn:`span ${a(i)||12}`})},[E(Da,{node:i},null,8,["node"])],4))),128))]),_:1},8,["col-gap"])):(d(),O(u(ml),{key:1,direction:"column",gap:e.gap,align:"stretch"},{default:F(()=>[(d(!0),f(J,null,de(e.items,(i,r)=>(d(),O(Da,{key:r,node:i},null,8,["node"]))),128))]),_:1},8,["gap"]))}}),gle={class:"admin-page admin-resource-form"},ble={class:"admin-page__hd"},Mle={class:"admin-page__title-wrap"},wle={class:"admin-page__title"},_le={class:"admin-page__actions"},xle={class:"admin-resource-form__notfound-title"},Ile={class:"admin-resource-form__notfound-hint"},Lle={key:1,class:"admin-resource-form__loading"},Cle={key:2,class:"admin-resource-form__savebar"},Sle={class:"admin-resource-form__savebar-hint"},H$=ee({__name:"ResourceFormPage",props:{slug:{},id:{default:null},indexRouteName:{default:null}},setup(e){const t=e,a=yL(),n=aa(),l=Vt(),o=Oa();function i(){const $={};for(const[S,R]of Object.entries(o.query))if(R!=null){if(Array.isArray(R)){$[S]=R;continue}/^-?\d+$/.test(R)?$[S]=parseInt(R,10):$[S]=R}return $}const r=ML(a.state,a.errors,t.id!==null&&t.id!==void 0?"update":"create");LT({url:()=>`/${t.slug}/listener`,extra:()=>a.isCreate?{context:"create"}:{context:"update",id:t.id}}),Pe(()=>a.errors,$=>{r.setErrors({...$})});const s=k(()=>n.getResource(t.slug)),h=k(()=>!a.isCreate&&a.hasError&&a.error instanceof ha&&a.error.status===404),p=k(()=>{const $=s.value;return a.isCreate&&$?.create_fields?$.create_fields:$?.fields??[]});function y($,S){for(const R of $){const A=R;Array.isArray(A.items)&&y(A.items,S),!(A.kind!=="field"||typeof A.name!="string")&&(A.defaultValue===null||A.defaultValue===void 0||(S[A.name]=A.defaultValue))}}function m(){const $={};y(p.value,$),Object.keys($).length>0&&a.seedDefaults($)}const v=k(()=>a.recordTitle&&a.recordTitle!==`#${t.id}`?a.recordTitle:BS(a.initial)),M=k(()=>a.isCreate?nT(s.value,t.slug):YY(s.value,t.slug,t.id??"",v.value)),w=k(()=>{const $=a.state.status;return typeof $=="string"?$:null}),b=k(()=>kle(p.value,w.value)),g=k(()=>{switch(w.value){case"published":return"success";case"review":case"draft":return"warning";case"archived":return"danger";default:return"default"}});nt(async()=>{n.manifest===null&&await n.load().catch(()=>{}),t.id!==null&&t.id!==void 0?await a.load(t.slug,t.id,"edit").catch(()=>{}):(a.prepareCreate(t.slug,i()),m())}),Pe(()=>[t.slug,t.id],async([$,S])=>{S!=null?await a.load($,S,"edit").catch(()=>{}):(a.prepareCreate($,i()),m())});async function _(){const $=a.isCreate;try{const S=await a.save();Ue.success($?QY(s.value,t.slug):D("Изменения сохранены.")),$&&l.push({name:`admin.resource.${t.slug}.edit`,params:{id:S}}).catch(()=>{})}catch{}}const C=k(()=>{if(t.indexRouteName)return t.indexRouteName;const $=n.getResource(t.slug)?.parent_slug;return $?`admin.resource.${$}.index`:`admin.resource.${t.slug}.index`});async function L(){const $=HS(s.value,t.slug,v.value);await hl({...ol(),message:$})&&(await a.destroy().catch(()=>{}),a.hasError||(Ue.success(fL(s.value,t.slug)),l.push({name:C.value}).catch(()=>{})))}async function T(){a.isDirty&&!await hl({title:D("Несохранённые изменения"),message:D("Несохранённые изменения будут потеряны. Продолжить?"),confirmLabel:D("Уйти без сохранения"),destructive:!0})||l.push({name:C.value}).catch(()=>{})}return($,S)=>(d(),f("section",gle,[x("header",ble,[x("div",Mle,[x("a",{class:"admin-resource-form__back",onClick:T},I(u(D)("← Назад")),1),x("h1",wle,I(M.value),1),b.value?(d(),O(u(Ku),{key:0,variant:g.value},{default:F(()=>[le(I(b.value),1)]),_:1},8,["variant"])):q("",!0)]),x("div",_le,[E(u($e),{variant:"ghost",disabled:u(a).saving||u(a).deleting,onClick:T},{default:F(()=>[le(I(u(D)("Отмена")),1)]),_:1},8,["disabled"]),u(a).isEdit&&!h.value?(d(),O(u($e),{key:0,variant:"danger",disabled:u(a).saving||u(a).deleting,loading:u(a).deleting,"data-testid":"form-delete",onClick:L},{default:F(()=>[le(I(u(D)("Удалить")),1)]),_:1},8,["disabled","loading"])):q("",!0),h.value?q("",!0):(d(),O(u($e),{key:1,variant:"primary",disabled:u(a).saving||u(a).loading,loading:u(a).saving,"data-testid":"form-save",onClick:_},{default:F(()=>[le(I(u(a).isCreate?u(D)("Создать"):u(D)("Сохранить")),1)]),_:1},8,["disabled","loading"]))])]),h.value?(d(),O(u(st),{key:0,padding:"lg",class:"admin-resource-form__notfound"},{default:F(()=>[x("p",xle,I(u(D)("Запись не найдена")),1),x("p",Ile,I(u(D)("Возможно, она была удалена. Вернитесь к списку.")),1),E(u($e),{variant:"primary",size:"sm",onClick:T},{default:F(()=>[le(I(u(D)("← К списку")),1)]),_:1})]),_:1})):(d(),f(J,{key:1},[u(a).hasError?(d(),O(u(ua),{key:0,variant:"danger",class:"admin-resource-form__alert",role:"alert"},{default:F(()=>[le(I(u(a).error?.message??u(D)("Не удалось сохранить запись")),1)]),_:1})):q("",!0),u(a).loading?(d(),f("div",Lle,[(d(),f(J,null,de(6,R=>E(u(ia),{key:R,height:"40px"})),64))])):(d(),O(u(st),{key:2,padding:"md",class:"admin-resource-form__body"},{default:F(()=>[E(AI,{items:p.value},null,8,["items"])]),_:1}))],64)),u(a).isDirty&&!u(a).loading&&!h.value?(d(),f("div",Cle,[x("span",Sle,I(u(D)("Есть несохранённые изменения")),1),E(u($e),{variant:"ghost",size:"sm",onClick:T},{default:F(()=>[le(I(u(D)("Отмена")),1)]),_:1}),E(u($e),{variant:"primary",size:"sm",loading:u(a).saving,disabled:u(a).saving,onClick:_},{default:F(()=>[le(I(u(D)("Сохранить")),1)]),_:1},8,["loading","disabled"])])):q("",!0)]))}}),RT=vL(),$I=RT.get,Ale=RT.registerBundle,$le=ee({__name:"UnknownEntry",props:{type:{},name:{}},setup(e){return(t,a)=>(d(),O(u(ua),{variant:"warning",title:u(Ze)("Неизвестный тип элемента: :type",{type:e.type})},{default:F(()=>[le(I(u(D)("Зарегистрируйте через"))+" ",1),x("code",null,"registerInfolistEntry('"+I(e.type)+"', YourComponent)",1),a[0]||(a[0]=le(". ",-1))]),_:1},8,["title"]))}}),qle={key:0,class:"admin-infolist-entry"},zle={class:"admin-infolist-entry__label"},Rle={key:2,class:"admin-infolist-rows"},Ple={key:3,class:"admin-infolist-cols"},Tle={key:4,class:"admin-infolist-section"},Dle={key:0,class:"admin-infolist-section__hd"},Ele={key:0,class:"admin-infolist-section__title"},Vle={key:1,class:"admin-infolist-section__description"},Hle={class:"admin-infolist-section__body"},Ble={key:5,class:"admin-infolist-tabs"},Fle={class:"admin-infolist-tabs__list",role:"tablist"},jle={class:"admin-infolist-tabs__panel"},qI=ee({__name:"InfolistRenderer",props:{node:{}},setup(e){const t=e,a=new Set(["rows","columns","section","block","tabs"]),n=k(()=>{if(t.node.kind==="entry"){const m=$I(t.node.type);return m?{kind:"entry",component:m}:{kind:"unknown"}}if(t.node.kind==="layout")return a.has(t.node.type)?{kind:"layout",layoutType:t.node.type}:{kind:"unknown"};if(a.has(t.node.type))return{kind:"layout",layoutType:t.node.type};const y=$I(t.node.type);return y?{kind:"entry",component:y}:{kind:"unknown"}}),l=k(()=>{const{type:y,kind:m,items:v,attributes:M,...w}=t.node,b=M??{},{preset:g,format:_,currency:C,decimals:L,...T}=b,$={};return _!==void 0&&($.format=_),C!==void 0&&($.currency=C),L!==void 0&&($.decimals=L),{...w,...T,preset:g,meta:$}}),o=k(()=>t.node.items??[]),i=k(()=>t.node.title??null),r=k(()=>_a(t.node.icon)),s=k(()=>t.node.description??null),h=k(()=>{const y=t.node.active;return typeof y=="number"?y:0}),p=k(()=>t.node.items??[]);return(y,m)=>{const v=ds("InfolistRenderer",!0);return n.value.kind==="entry"&&e.node.label?(d(),f("div",qle,[x("span",zle,I(e.node.label),1),(d(),O(Xe(n.value.component),es(dS(l.value)),null,16))])):n.value.kind==="entry"?(d(),O(Xe(n.value.component),es(lt({key:1},l.value)),null,16)):n.value.kind==="layout"&&n.value.layoutType==="rows"?(d(),f("div",Rle,[(d(!0),f(J,null,de(o.value,(M,w)=>(d(),O(v,{key:w,node:M},null,8,["node"]))),128))])):n.value.kind==="layout"&&n.value.layoutType==="columns"?(d(),f("div",Ple,[(d(!0),f(J,null,de(o.value,(M,w)=>(d(),f("div",{key:w,class:"admin-infolist-cols__item",style:Te({gridColumn:`span ${typeof M.span=="number"?M.span:Math.max(1,Math.floor(12/o.value.length))}`})},[E(v,{node:M},null,8,["node"])],4))),128))])):n.value.kind==="layout"&&(n.value.layoutType==="section"||n.value.layoutType==="block")?(d(),f("section",Tle,[i.value||s.value?(d(),f("header",Dle,[i.value?(d(),f("h3",Ele,[r.value?(d(),O(u(fe),{key:0,icon:r.value,size:16,class:"admin-infolist-section__icon"},null,8,["icon"])):q("",!0),le(" "+I(i.value),1)])):q("",!0),s.value?(d(),f("p",Vle,I(s.value),1)):q("",!0)])):q("",!0),x("div",Hle,[(d(!0),f(J,null,de(o.value,(M,w)=>(d(),O(v,{key:w,node:M},null,8,["node"]))),128))])])):n.value.kind==="layout"&&n.value.layoutType==="tabs"?(d(),f("div",Ble,[x("ul",Fle,[(d(!0),f(J,null,de(p.value,(M,w)=>(d(),f("li",{key:M.key??w,class:re(["admin-infolist-tabs__tab",{"admin-infolist-tabs__tab--active":w===h.value}])},I(M.label),3))),128))]),x("div",jle,[(d(!0),f(J,null,de(p.value[h.value]?.items??[],(M,w)=>(d(),O(v,{key:w,node:M},null,8,["node"]))),128))])])):(d(),O($le,{key:6,type:e.node.type,name:e.node.name},null,8,["type","name"]))}}}),Ole={class:"admin-audit-timeline"},Ule={class:"admin-audit-timeline__title"},Nle={key:0,class:"admin-audit-timeline__loading"},Wle={key:1,class:"admin-audit-timeline__error"},Kle={key:2,class:"admin-audit-timeline__empty"},Zle={key:3,class:"admin-audit-timeline__list"},Gle={class:"admin-audit-timeline__icon","aria-hidden":"true"},Xle={class:"admin-audit-timeline__body"},Jle={class:"admin-audit-timeline__row"},Yle={class:"admin-audit-timeline__actor"},Qle={class:"admin-audit-timeline__verb"},eoe={class:"admin-audit-timeline__when"},toe={key:0,class:"admin-audit-timeline__diff"},aoe={class:"admin-audit-timeline__diff-field"},noe={class:"admin-audit-timeline__diff-values"},loe={class:"admin-audit-timeline__diff-after"},ooe={key:1,class:"admin-audit-timeline__diff-before"},ioe={class:"admin-audit-timeline__diff-before"},roe={class:"admin-audit-timeline__diff-after"},soe={key:1,class:"admin-audit-timeline__detail"},PT=ee({__name:"AuditTimeline",props:{subjectType:{},subjectId:{},limit:{default:null}},setup(e){const t=e,a=P([]),n=P(!1),l=P(null);async function o(){if(!t.subjectType||t.subjectType===""){a.value=[],n.value=!1,l.value=null;return}n.value=!0,l.value=null;try{const{getAdminClient:M}=await _t(async()=>{const{getAdminClient:_}=await Promise.resolve().then(()=>St);return{getAdminClient:_}},void 0,import.meta.url),g=(await M().get(`/audit/timeline?subject_type=${encodeURIComponent(t.subjectType)}&subject_id=${encodeURIComponent(String(t.subjectId))}`)).data??[];a.value=t.limit&&t.limit>0?g.slice(0,t.limit):g}catch(M){l.value=M instanceof Error?M:new Error(String(M)),a.value=[]}finally{n.value=!1}}nt(o),Pe(()=>[t.subjectType,t.subjectId,t.limit],o);const i=k(()=>a.value.length>0);function r(M){return M==="created"?Wt:M==="deleted"||M==="destroyed"?Ma:M.includes("tag")||M.includes("label")?Ks:sa}function s(M){return{created:D("создал"),updated:D("отредактировал"),deleted:D("удалил"),destroyed:D("удалил"),restored:D("восстановил"),published:D("опубликовал")}[M]??M}function h(M){const w=new Date(M).getTime();if(Number.isNaN(w))return"";const b=(Date.now()-w)/1e3;return b<60?`${Math.max(1,Math.floor(b))} ${D("сек назад")}`:b<3600?`${Math.floor(b/60)} ${D("мин назад")}`:b<86400?`${Math.floor(b/3600)} ${D("ч назад")}`:b<86400*30?`${Math.floor(b/86400)} ${D("д назад")}`:new Date(M).toLocaleDateString(lc())}function p(M){return!!M.diff&&M.diff.length>0}function y(M){return p(M)?"":M.summary??""}const m=/^(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?$/;function v(M){if(M==null)return"∅";if(typeof M=="boolean")return D(M?"Да":"Нет");if(M===0)return D("Нет");if(M===1)return D("Да");if(typeof M=="string"){const w=M.match(m);return w?`${w[1]} ${w[2]}`:M.length>40?`${M.slice(0,40)}…`:M}if(typeof M=="object")try{return JSON.stringify(M)}catch{return"[object]"}return String(M)}return(M,w)=>(d(),f("section",Ole,[x("h2",Ule,I(u(D)("История изменений")),1),n.value?(d(),f("div",Nle,[(d(),f(J,null,de(3,b=>E(u(ia),{key:b,height:"48px"})),64))])):l.value?(d(),f("div",Wle,I(u(Ze)("Не удалось загрузить историю: :reason",{reason:l.value.message})),1)):i.value?(d(),f("ol",Zle,[(d(!0),f(J,null,de(a.value,b=>(d(),f("li",{key:b.id,class:"admin-audit-timeline__item"},[x("span",Gle,[E(u(fe),{icon:r(b.event),size:14},null,8,["icon"])]),x("div",Xle,[x("div",Jle,[E(u(cL),{name:b.actor?.name??"?",alt:b.actor?.name??u(D)("Неизвестный"),size:"xs"},null,8,["name","alt"]),x("span",Yle,I(b.actor?.name??u(D)("Система")),1),x("span",Qle,I(s(b.event)),1),x("span",eoe,I(h(b.created_at)),1)]),p(b)?(d(),f("ul",toe,[(d(!0),f(J,null,de(b.diff,g=>(d(),f("li",{key:g.field,class:re(["admin-audit-timeline__diff-row",`admin-audit-timeline__diff-row--${b.event}`])},[x("span",aoe,I(g.field),1),x("span",noe,[b.event==="created"||b.event==="restored"?(d(),f(J,{key:0},[w[0]||(w[0]=x("span",{class:"admin-audit-timeline__diff-arrow","aria-hidden":"true"},"→",-1)),x("span",loe,I(v(g.after)),1)],64)):b.event==="deleted"||b.event==="destroyed"?(d(),f("span",ooe,I(v(g.before)),1)):(d(),f(J,{key:2},[x("span",ioe,I(v(g.before)),1),w[1]||(w[1]=x("span",{class:"admin-audit-timeline__diff-arrow","aria-hidden":"true"},"→",-1)),x("span",roe,I(v(g.after)),1)],64))])],2))),128))])):y(b)?(d(),f("div",soe,I(y(b)),1)):q("",!0)])]))),128))])):(d(),f("div",Kle,I(u(D)("Записей в истории пока нет.")),1))]))}}),coe={class:"admin-page admin-resource-view"},doe={class:"admin-resource-view__hd"},uoe={class:"admin-resource-view__hd-left"},hoe={class:"admin-page__title"},poe={class:"admin-resource-view__meta"},yoe=["data-variant","data-status"],foe={class:"admin-resource-view__uid"},moe={class:"admin-resource-view__hd-right"},voe={key:1,class:"admin-resource-view__loading"},koe={key:2,class:"admin-resource-view__grid"},goe={class:"admin-resource-view__main"},boe={class:"admin-resource-view__card-title"},Moe={class:"admin-resource-view__aside"},woe={class:"admin-resource-view__card-title"},_oe={class:"admin-resource-view__metrics"},xoe={class:"admin-resource-view__metric-label"},Ioe={class:"admin-resource-view__metric-value"},Loe=ee({__name:"ResourceViewPage",props:{slug:{},id:{},editRouteName:{default:void 0},indexRouteName:{default:null},auditSubjectType:{default:null},statusField:{default:"status"},uidPrefix:{default:"#"}},setup(e){const t=e,a=yL(),n=aa(),l=Vt();wL(a.state);const o=k(()=>n.getResource(t.slug)),i=k(()=>(o.value?.features??{}).editable!==!1),r=k(()=>o.value?.infolist??o.value?.fields??[]),s=k(()=>t.auditSubjectType!==null?t.auditSubjectType:o.value?.subject_type??null),h=k(()=>{const S=a.state,R=[],A=K=>{if(typeof K!="string"||K==="")return null;const W=new Date(K);return Number.isNaN(W.getTime())?null:W.toLocaleString(lc(),{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"})},z=A(S.created_at);z&&R.push({label:D("Создано"),value:z});const H=A(S.updated_at);H&&H!==z&&R.push({label:D("Обновлено"),value:H});const B=typeof S.created_by_name=="string"&&S.created_by_name!==""?S.created_by_name:typeof S.author=="string"?S.author:null;return B&&R.push({label:D("Автор"),value:B}),R}),p=k(()=>a.recordTitle&&a.recordTitle!==`#${t.id}`?a.recordTitle:BS(a.state)),y=k(()=>p.value??lT(o.value,t.slug,t.id)),m=k(()=>o.value?.label??t.slug),v=k(()=>`${t.uidPrefix}${t.id}`),M=k(()=>{const R=a.state[t.statusField];return typeof R=="string"&&R.length>0?R:null}),w={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 b(S){return w[S.toLowerCase()]??"neutral"}const g=k(()=>gL(o.value?.actions)),_=OS({ids:()=>[t.id],async execute(S,R){const{getAdminClient:A}=await _t(async()=>{const{getAdminClient:z}=await Promise.resolve().then(()=>St);return{getAdminClient:z}},void 0,import.meta.url);return A().post(`/${t.slug}/action`,{key:S.name,ids:[t.id],...R?{payload:R}:{}})},async onSuccess(S,R){const A=R??{};Ue.success(A.message??Ze("Действие «:action» выполнено.",{action:S.label})),await a.load(t.slug,t.id,"view").catch(()=>{})},onError(S,R){typeof console<"u"&&console.error("[admin] action failed:",R),Ue.error(CI(S,R))},async refresh(){await a.load(t.slug,t.id,"view").catch(()=>{})}});nt(async()=>{n.manifest===null&&await n.load().catch(()=>{}),await a.load(t.slug,t.id,"view").catch(()=>{})}),Pe(()=>[t.slug,t.id],async([S,R])=>{await a.load(S,R,"view").catch(()=>{})});const C=k(()=>{if(t.indexRouteName)return t.indexRouteName;const S=n.getResource(t.slug)?.parent_slug;return S?`admin.resource.${S}.index`:`admin.resource.${t.slug}.index`});function L(){l.push({name:C.value}).catch(()=>{l.push(`/r/${t.slug}`)})}function T(){if(!t.editRouteName){l.push(`/r/${t.slug}/${t.id}/edit`).catch(()=>{});return}l.push({name:t.editRouteName,params:{id:t.id}}).catch(()=>{})}async function $(){await _.confirm({...ol(),message:HS(o.value,t.slug,p.value)},!0)&&(await a.destroy().catch(()=>{}),a.hasError||(Ue.success(fL(o.value,t.slug)),l.push({name:C.value}).catch(()=>{})))}return(S,R)=>(d(),f("section",coe,[x("header",doe,[x("div",uoe,[x("button",{type:"button",class:"admin-resource-view__back",onClick:L},[E(u(fe),{icon:u(xs),size:14},null,8,["icon"]),le(" "+I(m.value),1)]),x("h1",hoe,I(y.value),1),x("div",poe,[M.value?(d(),f("span",{key:0,class:"admin-status-badge","data-variant":b(M.value),"data-status":M.value},[R[0]||(R[0]=x("span",{class:"admin-status-badge__dot","aria-hidden":"true"},null,-1)),le(" "+I(M.value),1)],8,yoe)):q("",!0),x("span",foe,I(v.value),1)])]),x("div",moe,[i.value?(d(),O(u($e),{key:0,variant:"secondary",size:"md",onClick:T},{prepend:F(()=>[E(u(fe),{icon:u(rn),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(u(D)("Редактировать")),1)]),_:1})):q("",!0),E(u(Ft),null,{trigger:F(()=>[E(u($e),{variant:"ghost",size:"md","aria-label":u(D)("Действия"),class:"admin-page__more"},{default:F(()=>[E(u(fe),{icon:u(kn),size:16},null,8,["icon"])]),_:1},8,["aria-label"])]),default:F(()=>[E(Eu,{actions:g.value,onRun:u(_).run},null,8,["actions","onRun"]),E(u(ca),{variant:"danger",icon:u(Ma),onClick:$},{default:F(()=>[le(I(u(D)("Удалить")),1)]),_:1},8,["icon"])]),_:1})])]),u(a).hasError?(d(),O(u(ua),{key:0,variant:"danger",class:"admin-resource-view__alert",role:"alert"},{default:F(()=>[le(I(u(a).error?.message??u(D)("Не удалось загрузить запись")),1)]),_:1})):q("",!0),u(a).loading?(d(),f("div",voe,[(d(),f(J,null,de(8,A=>E(u(ia),{key:A,height:"24px"})),64))])):(d(),f("div",koe,[x("div",goe,[E(u(st),{padding:"md",class:"admin-resource-view__card"},{default:F(()=>[x("h2",boe,I(u(D)("Основные данные")),1),(d(!0),f(J,null,de(r.value,(A,z)=>(d(),O(qI,{key:z,node:A},null,8,["node"]))),128))]),_:1}),E(u(st),{padding:"md",class:"admin-resource-view__card"},{default:F(()=>[E(PT,{"subject-type":s.value,"subject-id":e.id},null,8,["subject-type","subject-id"])]),_:1})]),x("aside",Moe,[h.value.length>0?(d(),O(u(st),{key:0,padding:"md",class:"admin-resource-view__card"},{default:F(()=>[x("h2",woe,I(u(D)("Метрики")),1),x("dl",_oe,[(d(!0),f(J,null,de(h.value,A=>(d(),f(J,{key:A.label},[x("dt",xoe,I(A.label),1),x("dd",Ioe,I(A.value),1)],64))),128))])]),_:1})):q("",!0),Le(S.$slots,"sidebar",{record:u(a).state,resource:o.value})])])),E(WS,{runner:u(_)},null,8,["runner"])]))}}),Coe=[.2,3/8,5/9,2/3],Soe=(e,t)=>a=>{const n=4*e+a-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(n)-35,o=n>8?l:1,i=t/o|0,r=t%o,s=o-r,h=n>8?i*Coe[a]+(e>5)&-2:l,p=i-h;return{t:s*p+r*p+r,o:[[s,p],[r,p+1]],i:h}},Aoe={min:0,L:0,M:1,Q:2,H:3,max:3},ps=e=>new Uint8Array(e),qc=e=>{const t=new Error(`lean-qr error ${e}`);throw t.code=e,t},S1=e=>"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:".indexOf(e),PC=e=>e.charCodeAt(0),TT=(...e)=>(t,a)=>e.forEach(n=>n(t,a)),DT=e=>t=>{t.eci!==e&&(t.push(7,4),e<128?t.push(e,8):e<16384?t.push(32768|e,16):t.push(12582912|e,24),t.eci=e)},ZS=e=>(t,a)=>{t.push(4,4),t.push(e.length,8+8*(a>9)),e.forEach(n=>t.push(n,8))},ic=(e,t,a,n,l=(i,r)=>a(i.length,r),o=n?i=>TT(DT(n),e(i)):e)=>(o.test=t,o.l=a,o.est=l,o.eci=n&&[n],o),ET=ic(e=>(t,a)=>{t.push(1,4),t.push(e.length,10+2*(a>26)+2*(a>9));let n=0;for(;n<e.length-2;n+=3)t.push(+e.slice(n,n+3),10);n<e.length-1?t.push(+e.slice(n),7):n<e.length&&t.push(+e[n],4)},e=>/[0-9]/.test(e),(e,t)=>14+2*(t>26)+2*(t>9)+10*e/3),VT=ic(e=>(t,a)=>{t.push(2,4),t.push(e.length,9+2*(a>26)+2*(a>9));let n=0;for(;n<e.length-1;n+=2)t.push(45*S1(e[n])+S1(e[n+1]),11);n<e.length&&t.push(S1(e[n]),6)},e=>S1(e)>=0,(e,t)=>13+2*(t>26)+2*(t>9)+5.5*e),tc=ic(e=>ZS([...e].map(PC)),e=>PC(e)<128,(e,t)=>12+8*(t>9)+8*e);tc._=!0,tc.u=!0;const GS=ic(tc,e=>PC(e)<256,tc.l,3);GS._=!0;const B$=new TextEncoder,XS=ic(e=>ZS(B$.encode(e)),()=>1,0,26,(e,t)=>12+8*(t>9)+8*B$.encode(e).length);XS._=!0;let TC=()=>{const e=new Map,t=new TextDecoder("sjis"),a=ps(2);for(let n=0;n<7973;++n)a[0]=n/192+129+64*(n>5951),a[1]=n%192+64,e.set(t.decode(a),n);return e.delete("�"),TC=()=>e,e};const JS=ic(e=>(t,a)=>{t.push(8,4),t.push(e.length,8+2*(a>26)+2*(a>9));for(const n of e)t.push(TC().get(n),13)},e=>TC().has(e),(e,t)=>12+2*(t>26)+2*(t>9)+13*e);JS._=!0;const HT=[ET,VT,tc,GS,JS,XS],$oe={auto:(e,{modes:t=HT}={})=>(a,n)=>{const l=t.map((p,y)=>{const m=new Map,v=(M,w)=>(m.has(M)||m.set(M,w(M,n)),m.get(M));return{m:p,h:1<<y,C:p.est("",n),S:p.l?(M,w)=>v(w-M,p.l):(M,w)=>v(e.slice(M,w),p.est)}});let o=[{v:0}],i=0,r=0,s=-1;for(const p of[...e,""]){let y=0;if(p)for(const m of l)m.m.test(p)&&(y|=m.h);if(!p||y!==s){if(s!==-1){const m=new Set(o.map(M=>M.D)),v=[];for(const{m:M,C:w,S:b,h:g}of l)if(s&g){const _=b(i,r);for(const C of M.eci??m)if(!M.u||!C){let L;for(const T of o)if(T.D===C||M.eci){const $=T.m===M&&T.D===C,S=$?T.V:T,R=M._&&$?T.v+_-w:S.v+12*(S.D!==C)+($?b($?T.$:i,r):_);(!L||R<L.v)&&(L={$:$?T.$:i,V:S,m:M,D:C,A:r,v:R})}L&&v.push(L)}}o=v}s=y,i=r}r+=p.length}o.length||qc(5);const h=[];for(let p=o.reduce((y,m)=>m.v<y.v?m:y);p.m;p=p.V)h.push(p.m(e.slice(p.$,p.A)));h.reverse().forEach(p=>p(a,n))},multi:TT,eci:DT,bytes:ZS,numeric:ET,alphaNumeric:VT,ascii:tc,iso8859_1:GS,shift_jis:JS,utf8:XS},qoe=()=>({F:ps(2956),I:0,push(e,t){for(let a=t,n=8-(7&this.I);a>0;a-=n,n=8)this.F[this.I>>3]|=e<<n>>a,this.I+=a<n?a:n}}),GL=(e,t=e*e,a=ps(t))=>({size:e,K:a,get:(n,l)=>n>=0&&n<e&&!!(1&a[l*e+n]),toString({on:n="##",off:l=" ",lf:o=`
6
6
  `,pad:i=4,padX:r=i,padY:s=i}={}){let h="";for(let p=-s;p<e+s;++p){for(let y=-r;y<e+r;++y)h+=this.get(y,p)?n:l;h+=o}return h},toImageData(n,{on:l=[0,0,0],off:o=[0,0,0,0],pad:i=4,padX:r=i,padY:s=i}={}){const h=e+2*r,p=e+2*s,y=n.createImageData(h,p),m=new Uint32Array(y.data.buffer);y.data.set([...l,255]);const v=m[0];y.data.set([...o,255]);const M=m[0];for(let w=0;w<p;++w)for(let b=0;b<h;++b)m[w*h+b]=this.get(b-r,w-s)?v:M;return y},toCanvas(n,l){const o=n.getContext("2d"),i=this.toImageData(o,l);n.width=i.width,n.height=i.height,o.putImageData(i,0,0)},toDataURL({type:n="image/png",scale:l=1,...o}={}){const i=document.createElement("canvas"),r=i.getContext("2d"),s=this.toImageData(r,o);return i.width=s.width*l,i.height=s.height*l,r.putImageData(s,0,0),r.imageSmoothingEnabled=!1,r.globalCompositeOperation="copy",r.drawImage(i,0,0,s.width,s.height,0,0,i.width,i.height),i.toDataURL(n,1)}}),A1=[(e,t)=>1&(e^t),(e,t)=>1&t,e=>e%3,(e,t)=>(e+t)%3,(e,t)=>1&(e/3^t>>1),(e,t)=>(e&t&1)+e*t%3,(e,t)=>(e&t)+e*t%3&1,(e,t)=>(e^t)+e*t%3&1],zI=ps(511);for(let e=0,t=1;e<255;t=2*t^285*(t>127))zI[zI[t+255]=e++]=t;const BT=e=>zI[e%255],FT=e=>zI[e+255],zoe=(e,t)=>{const a=ps(e.length+t.length-1);for(let n=0;n<e.length;++n)for(let l=0;l<t.length;++l)a[n+l]^=BT(e[n]+t[l]);return a.map(FT)},Roe=(e,t)=>{const a=ps(e.length+t.length-1);a.set(e,0);for(let n=0;n<e.length;++n)if(a[n]){const l=FT(a[n]);for(let o=0;o<t.length;++o)a[n+o]^=BT(t[o]+l)}return a.slice(e.length)},DC=[[0],[0,0]];for(let e=1;e<30;++e)DC.push(zoe(DC[e],[0,e]));const Poe=(e,t)=>{const a=[[],[]];let n=0,l=0;for(const[i,r]of t.o)for(let s=0;s<i;++s,n+=r){const h=e.slice(n,n+r);a[0].push(h),a[1].push(Roe(h,DC[t.i])),l+=r+t.i}const o=ps(l);l=0;for(const i of a)for(let r=0,s=-1;s<l;++r){s=l;for(const h of i)r<h.length&&(o[l++]=h[r])}return o},jT=(e,t,a)=>{let n=e<<=a;for(let l=134217728;l>>=1;)n&l&&(n^=t*(l>>a));return n|e},Toe=({size:e,K:t},a)=>{const n=(i,r,s,h)=>{for(;s-- >0;i+=e)t.fill(h,i,i+r)},l=(i,r,s)=>{for(let h=0;h++<3;s-=2)n(r*e+i-(s>>1)*(e+1),s,s,2|h)},o=2*((e-13)/(1+(a/7|0))/2+.75|0);if(a>1)for(let i=e-7;i>8;i-=o){for(let r=i;r>8;r-=o)l(i,r,5);i<e-7&&l(i,6,5)}if(a>6)for(let i=jT(a,7973,12),r=1;r<7;++r)for(let s=12;s-- >9;i>>=1)t[r*e-s]=2|1&i;n(7,2,9,2),n(e-8,8,9,2);for(let i=0;i<e;++i)t[6*e+i]=3^1&i;l(3,3,7),l(e-4,3,7);for(let i=0;i<e;++i)for(let r=i;r<e;++r)t[r*e+i]=t[i*e+r];t[(e-8)*e+8]=3},Doe=({size:e,K:t})=>{const a=[];for(let n=e-2,l=e,o=-1;n>=0;n-=2){for(n===5&&(n=4);l+=o,l!==-1&&l!==e;){const i=l*e+n;t[i+1]||a.push(i+1),t[i]||a.push(i)}o*=-1}return a},Eoe=({K:e},t,a)=>t.forEach((n,l)=>e[n]=a[l>>3]>>(7&~l)&1),Voe=({size:e,K:t},a,n,l)=>{for(let i=0;i<e;++i)for(let r=0;r<e;++r){const s=i*e+r;t[s]^=!(a(r,i)||2&t[s])}let o=21522^jT((1^l)<<3|n,1335,10);for(let i=0;i++<8;o>>=1)t[(i-(i<7))*e+8]=1&o,t[9*e-i]=1&o;for(let i=8;--i,o;o>>=1)t[8*e+i-(i<7)]=1&o,t[(e-i)*e+8]=1&o},Hoe=({size:e,K:t},a=0,n=0)=>{for(let l=0;l<e;++l){for(let o=0;o<2;++o)for(let i,r=0,s=0,h=2;r<e;++r){const p=1&t[o?l*e+r:r*e+l];n+=p,s=(s>>1|2098176)&(3047517^p-1),2049&s&&(a+=40),p^h&&(i=0),h=p,a+=++i===5?3:i>5}if(l)for(let o=e+l,i=5*t[l-1]^t[l];o<e*e;o+=e){const r=5*t[o-1]^t[o];a+=3*!(1&(i|r)|4&(i^r)),i=r}}return a+10*(10*Math.abs(n/(e*e)-1)|0)},F$=[],EC=(e=qc(1),{minCorrectionLevel:t=0,maxCorrectionLevel:a=3,minVersion:n=1,maxVersion:l=40,mask:o,trailer:i=60433,...r}={})=>{a<t&&qc(3),l<n&&qc(2),typeof e=="string"&&(e=$oe.auto(e,r));for(let s=n,h=0;s<=l;++s){let p=F$[s];p||(F$[s]=p=GL(4*s+17),Toe(p,s),p.p=Doe(p));const y=Soe(s,p.p.length>>3);if(8*y(t).t<h)continue;const m=qoe();e(m,s),h=m.I;for(let v=a;v>=t;--v){const M=y(v);if(8*M.t<h)continue;for(m.I=h+11&-8;m.I<8*M.t;)m.push(i,16);const w=GL(p.size,p.K);return Eoe(w,p.p,Poe(m.F,M)),(A1[o]?[A1[o]]:A1).map((b,g)=>{const _=GL(w.size,w.K);return Voe(_,b,o??g,v),_.s=A1[o]?0:Hoe(_),_}).reduce((b,g)=>g.s<b.s?g:b)}}qc(4)};EC.with=(...e)=>(t,a)=>EC(t,{modes:[...HT,...e],...a});const Boe="http://www.w3.org/2000/svg",Foe=(e,t,a,n=[])=>[`<${t}`,...Object.entries(a).map(([l,o])=>` ${l}="${`${o}`.replace(/[^ -~]|["&]/g,"")}"`),">",...n,`</${t}>`].join(""),joe=e=>{const t=[];let a="";for(let n=0;n<=e.size;++n)for(let l=0;l<=e.size;++l){const o=e.get(l,n),i=l<<8|n;let r=e.get(l-1,n)^o&&i+1,s=e.get(l,n-1)^o&&i+256;if(r||s){o||([r,s]=[s,r]);const h=t[r||i]||=[],p=t[s||i];r&&h.push(i),s&&h.push(s),h===p?a+=`M${h.map(y=>`${y>>8} ${255&y}`).join("L")}Z`:(p&&h.push(...p),t[h[h.length-1]]=h)}}return a},Ooe=(e,{on:t="black",off:a,pad:n=4,padX:l=n,padY:o=n,width:i,height:r,scale:s=1},h,p,y)=>{const m=e.size+2*l,v=e.size+2*o;return h(p,"svg",{xmlns:Boe,version:"1.1",viewBox:`${-l} ${-o} ${m} ${v}`,width:i??m*s,height:r??v*s,"shape-rendering":"crispedges"},[a?h(p,"rect",{x:-l,y:-o,width:m,height:v,fill:a}):"",h(p,"path",{d:joe(e),fill:t})],y)},Uoe=(e,t={})=>(t.xmlDeclaration?'<?xml version="1.0" encoding="UTF-8" ?>':"")+Ooe(e,t,Foe),Noe={class:"admin-2fa"},Woe={key:0,class:"admin-2fa__panel"},Koe={class:"admin-2fa__lead"},Zoe={key:0,class:"admin-2fa__error"},Goe={key:1,class:"admin-2fa__panel"},Xoe={class:"admin-2fa__steps"},Joe={class:"admin-2fa__secret","data-testid":"2fa-secret"},Yoe=["innerHTML"],Qoe={key:1,class:"admin-2fa__hint"},eie={class:"admin-2fa__uri"},tie={class:"admin-2fa__code-row"},aie={key:0,class:"admin-2fa__error"},nie={key:2,class:"admin-2fa__panel admin-2fa__panel--success"},lie={class:"admin-2fa__lead"},oie={class:"admin-2fa__codes"},iie={key:3,class:"admin-2fa__panel"},rie={class:"admin-2fa__lead"},sie={class:"admin-2fa__manage"},cie={key:0,class:"admin-2fa__error"},die={key:1,class:"admin-2fa__codes"},uie=ee({__name:"TwoFactorSetup",props:{enabled:{type:Boolean}},emits:["enabled","disabled"],setup(e,{emit:t}){const a=e,n=t,l=P(a.enabled?"enabled":"idle"),o=P(""),i=P(""),r=P(""),s=P([]),h=P(""),p=P(!1),y=P("");async function m(){p.value=!0,y.value="";try{const{getAdminClient:L}=await _t(async()=>{const{getAdminClient:S}=await Promise.resolve().then(()=>St);return{getAdminClient:S}},void 0,import.meta.url),$=await L().post("/profile/twoFactorEnable");o.value=$.secret,i.value=$.qr_uri,s.value=$.recovery_codes??[],l.value="setup"}catch{y.value=D("Не удалось инициализировать 2FA.")}finally{p.value=!1}}async function v(){if(!(r.value.length<4)){p.value=!0,y.value="";try{const{getAdminClient:L}=await _t(async()=>{const{getAdminClient:S}=await Promise.resolve().then(()=>St);return{getAdminClient:S}},void 0,import.meta.url),$=await L().post("/profile/twoFactorConfirm",{code:r.value});$.recovery_codes&&(s.value=$.recovery_codes),l.value="confirmed",Ue.success(D("Двухфакторная аутентификация подключена.")),n("enabled")}catch{y.value=D("Неверный код. Попробуйте ещё раз.")}finally{p.value=!1}}}async function M(){if(h.value===""){y.value=D("Введите текущий пароль.");return}if(await hl({title:D("Отключение 2FA"),confirmLabel:D("Отключить"),message:D("Отключить 2FA? Аккаунт станет менее защищённым."),destructive:!0})){p.value=!0,y.value="";try{const{getAdminClient:L}=await _t(async()=>{const{getAdminClient:$}=await Promise.resolve().then(()=>St);return{getAdminClient:$}},void 0,import.meta.url);await L().post("/profile/twoFactorDisable",{password:h.value}),l.value="idle",Ue.success(D("2FA отключена.")),n("disabled")}catch{Ue.error(D("Не удалось отключить 2FA."))}finally{p.value=!1}}}async function w(){if(h.value===""){y.value=D("Введите текущий пароль.");return}p.value=!0,y.value="";try{const{getAdminClient:L}=await _t(async()=>{const{getAdminClient:S}=await Promise.resolve().then(()=>St);return{getAdminClient:S}},void 0,import.meta.url),$=await L().post("/profile/twoFactorRegenerateCodes",{password:h.value});s.value=$.recovery_codes,h.value="",Ue.success(D("Recovery-коды обновлены."))}catch{y.value=D("Неверный пароль.")}finally{p.value=!1}}async function b(){try{await navigator.clipboard.writeText(o.value),Ue.success(D("Secret скопирован."))}catch{Ue.warning(D("Скопируйте вручную."))}}async function g(){try{await navigator.clipboard.writeText(s.value.join(`
7
- `)),Ue.success(D("Recovery-коды скопированы."))}catch{Ue.warning(D("Скопируйте вручную."))}}const _=k(()=>o.value.match(/.{1,4}/g)?.join(" ")??o.value),C=k(()=>{if(i.value==="")return"";try{const L=EC(i.value,{minCorrectionLevel:Aoe.M});return Uoe(L,{on:"#18181b",off:"transparent",padX:1,padY:1})}catch{return""}});return(L,T)=>(d(),f("div",Noe,[l.value==="idle"?(d(),f("div",Woe,[x("p",Koe,I(u(D)("Двухфакторная аутентификация добавляет второй слой защиты — даже если пароль попадёт"))+" "+I(u(D)("в чужие руки, без OTP-кода из приложения войти не получится.")),1),E(u($e),{variant:"primary",loading:p.value,"data-testid":"2fa-enable",onClick:m},{prepend:F(()=>[E(u(fe),{icon:u(Os),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(u(D)("Включить 2FA")),1)]),_:1},8,["loading"]),y.value?(d(),f("p",Zoe,I(y.value),1)):q("",!0)])):l.value==="setup"?(d(),f("div",Goe,[x("ol",Xoe,[x("li",null,I(u(D)("Откройте Authenticator-приложение (Google Authenticator, 1Password, Authy…).")),1),x("li",null,[le(I(u(D)("Добавьте новый аккаунт вручную, скопировав ключ:"))+" ",1),x("div",Joe,[x("code",null,I(_.value),1),x("button",{type:"button",class:"admin-2fa__copy",onClick:b},[E(u(fe),{icon:u(on),size:12},null,8,["icon"]),le(" "+I(u(D)("Копировать")),1)])]),Le(L.$slots,"qr-code",{uri:i.value},()=>[C.value?(d(),f("div",{key:0,class:"admin-2fa__qr",innerHTML:C.value},null,8,Yoe)):(d(),f("p",Qoe,[le(I(u(D)("Либо отсканируйте QR с другого устройства — поделитесь URI:"))+" ",1),x("code",eie,I(i.value),1)]))])]),x("li",null,[le(I(u(D)("Введите 6-значный код из приложения:"))+" ",1),x("div",tie,[E(u(kt),{modelValue:r.value,"onUpdate:modelValue":T[0]||(T[0]=$=>r.value=$),"data-testid":"2fa-code",placeholder:"123456",maxlength:"6",class:"admin-2fa__code-input"},null,8,["modelValue"]),E(u($e),{variant:"primary",loading:p.value,disabled:r.value.length<4,"data-testid":"2fa-confirm",onClick:v},{default:F(()=>[le(I(u(D)("Подтвердить")),1)]),_:1},8,["loading","disabled"])])])]),y.value?(d(),f("p",aie,I(y.value),1)):q("",!0)])):l.value==="confirmed"?(d(),f("div",nie,[x("p",lie,I(u(D)("2FA активирована. Сохраните recovery-коды в безопасном месте — они нужны если вы"))+" "+I(u(D)("потеряете доступ к Authenticator-приложению.")),1),x("div",oie,[(d(!0),f(J,null,de(s.value,$=>(d(),f("code",{key:$,class:"admin-2fa__codes-item"},I($),1))),128))]),E(u($e),{variant:"ghost",onClick:g},{prepend:F(()=>[E(u(fe),{icon:u(on),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(u(D)("Скопировать все")),1)]),_:1}),E(u($e),{variant:"primary",onClick:T[1]||(T[1]=$=>l.value="enabled")},{default:F(()=>[le(I(u(D)("Готово")),1)]),_:1})])):l.value==="enabled"?(d(),f("div",iie,[x("p",rie,I(u(D)("2FA включена. Если у вас остался доступ к Authenticator app — всё в порядке.")),1),x("div",sie,[E(u(kt),{modelValue:h.value,"onUpdate:modelValue":T[2]||(T[2]=$=>h.value=$),type:"password",placeholder:u(D)("Текущий пароль")},null,8,["modelValue","placeholder"]),E(u($e),{variant:"secondary",loading:p.value,onClick:w},{prepend:F(()=>[E(u(fe),{icon:u(Bs),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(u(D)("Перегенерировать recovery-коды")),1)]),_:1},8,["loading"]),E(u($e),{variant:"danger",loading:p.value,"data-testid":"2fa-disable",onClick:M},{prepend:F(()=>[E(u(fe),{icon:u(iu),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(u(D)("Отключить 2FA")),1)]),_:1},8,["loading"])]),y.value?(d(),f("p",cie,I(y.value),1)):q("",!0),s.value.length>0?(d(),f("div",die,[(d(!0),f(J,null,de(s.value,$=>(d(),f("code",{key:$,class:"admin-2fa__codes-item"},I($),1))),128))])):q("",!0)])):q("",!0)]))}}),hie={class:"admin-page admin-profile"},pie={class:"admin-page__hd"},yie={class:"admin-page__title-wrap"},fie={class:"admin-page__title"},mie={class:"admin-page__count"},vie={class:"admin-profile__layout"},kie=["aria-label"],gie=["onClick"],bie=["data-icon"],Mie={class:"admin-profile__content"},wie={class:"admin-profile__card-hd"},_ie={class:"admin-profile__card-title"},xie={class:"admin-profile__hero"},Iie={class:"admin-profile__hero-text"},Lie={class:"admin-profile__hero-name"},Cie={class:"admin-profile__hero-meta"},Sie={class:"admin-profile__form"},Aie={class:"admin-profile__card-ft"},$ie={class:"admin-profile__card-hd"},qie={class:"admin-profile__card-title"},zie={class:"admin-profile__hint"},Rie=ee({__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(e,{emit:t}){const a=e,n=t,l=ea(),o=PS(),i=ul(),r=lS(),s=P(!!l.user?.twoFactorEnabled),h=k(()=>[{id:"general",label:D("Основное"),icon:"user"},...l.twoFactorAvailable||s.value?[{id:"security",label:D("Безопасность"),icon:"shield"}]:[],...r.tokens?[{id:"tokens",label:D("API токены"),icon:"key"}]:[],...r.sessions?[{id:"sessions",label:D("Сессии"),icon:"monitor"}]:[]]);function p(T){return h.value.some($=>$.id===T)?T:"general"}const y=P(p(a.section));function m(T){y.value=T,n("update:section",T)}Pe(()=>a.section,T=>{y.value=p(T)});const v=P({name:l.user?.name??"",email:l.user?.email??"",locale:i.current,theme:o.current}),M=k(()=>i.available.map(T=>({value:T,label:T.toUpperCase()}))),w=k(()=>o.available.map(T=>({value:T,label:T==="dark"?D("Тёмная"):T==="light"?D("Светлая"):T})));Pe(()=>v.value.locale,(T,$)=>{T===$||!T||i.setLocale(T).then(()=>{typeof window<"u"&&window.location.reload()}).catch(()=>{})}),Pe(()=>v.value.theme,(T,$)=>{T===$||!T||o.setTheme(T).catch(()=>{})});function b(){n("save",{...v.value})}function g(){n("avatar-replace")}const _=k(()=>s.value);function C(){s.value=!0,l.user&&(l.user.twoFactorEnabled=!0),n("two-factor-regenerate")}function L(){s.value=!1,l.user&&(l.user.twoFactorEnabled=!1),n("two-factor-disable")}return(T,$)=>(d(),f("section",hie,[x("header",pie,[x("div",yie,[x("h1",fie,I(e.title??u(D)("Профиль")),1),x("div",mie,I(e.subtitle??u(D)("Личные данные, безопасность, токены")),1)])]),x("div",vie,[x("nav",{class:"admin-profile__nav","aria-label":u(D)("Разделы профиля")},[(d(!0),f(J,null,de(h.value,S=>(d(),f("button",{key:S.id,type:"button",class:re(["admin-profile__nav-item",{"admin-profile__nav-item--active":y.value===S.id}]),onClick:R=>m(S.id)},[x("span",{class:"admin-profile__nav-icon","data-icon":S.icon},null,8,bie),x("span",null,I(S.label),1)],10,gie))),128))],8,kie),x("div",Mie,[y.value==="general"?(d(),O(u(st),{key:0,padding:"md"},{default:F(()=>[x("header",wie,[x("h3",_ie,I(u(D)("Профиль")),1)]),x("div",xie,[E(u(cL),{src:u(l).user?.avatar??void 0,name:u(l).user?.name??"?",size:"lg"},null,8,["src","name"]),x("div",Iie,[x("div",Lie,I(u(l).user?.name??"—"),1),x("div",Cie,I(u(l).user?.email??"—"),1)]),$[4]||($[4]=x("div",{style:{flex:"1"}},null,-1)),E(u($e),{variant:"ghost",size:"sm",onClick:g},{default:F(()=>[le(I(u(D)("Заменить")),1)]),_:1})]),x("div",Sie,[E(u(kt),{modelValue:v.value.name,"onUpdate:modelValue":$[0]||($[0]=S=>v.value.name=S),label:u(D)("Имя"),name:"name"},null,8,["modelValue","label"]),E(u(kt),{modelValue:v.value.email,"onUpdate:modelValue":$[1]||($[1]=S=>v.value.email=S),label:"Email",type:"email",name:"email"},null,8,["modelValue"]),E(u(qt),{label:u(D)("Язык")},{default:F(()=>[E(u(cl),{modelValue:v.value.locale,"onUpdate:modelValue":$[2]||($[2]=S=>v.value.locale=S),options:M.value},null,8,["modelValue","options"])]),_:1},8,["label"]),E(u(qt),{label:u(D)("Тема")},{default:F(()=>[E(u(cl),{modelValue:v.value.theme,"onUpdate:modelValue":$[3]||($[3]=S=>v.value.theme=S),options:w.value},null,8,["modelValue","options"])]),_:1},8,["label"])]),x("footer",Aie,[E(u($e),{variant:"primary",onClick:b},{default:F(()=>[le(I(u(D)("Сохранить")),1)]),_:1})])]),_:1})):y.value==="security"?(d(),O(u(st),{key:1,padding:"md"},{default:F(()=>[x("header",$ie,[x("h3",qie,I(u(D)("Двухфакторная аутентификация")),1),E(u(Ku),{variant:_.value?"success":"default"},{default:F(()=>[le(I(_.value?u(D)("Включена"):u(D)("Отключена")),1)]),_:1},8,["variant"])]),u(l).needsTwoFactorSetup?(d(),O(u(ua),{key:0,variant:"warning",class:"admin-profile__alert"},{default:F(()=>[le(I(u(D)("Ваша роль требует двухфакторной аутентификации. Включите её, чтобы продолжить работу в панели.")),1)]),_:1})):q("",!0),Le(T.$slots,"enable-2fa",{},()=>[E(uie,{enabled:_.value,onEnabled:C,onDisabled:L},null,8,["enabled"])])]),_:3})):Le(T.$slots,y.value,{section:y.value},()=>[E(u(st),{padding:"md"},{default:F(()=>[x("p",zie,I(u(Ze)("Раздел «:section» библиотекой не реализован —",{section:y.value}))+" "+I(u(Ze)("проект подключает его через слот :section.",{section:y.value})),1)]),_:1})],void 0,2)])])]))}}),Pie={class:"admin-page admin-notifs-page"},Tie={class:"admin-notifs-page__head"},Die={class:"admin-page__title"},Eie={class:"admin-notifs-page__sub"},Vie={class:"admin-notifs-page__tabs"},Hie=["onClick"],Bie={key:1,class:"admin-notifs-page__empty"},Fie={class:"admin-notifs-page__row"},jie=["data-kind"],Oie={class:"admin-notifs-page__body"},Uie={key:0,class:"admin-notifs-page__item-body"},Nie={class:"admin-notifs-page__time"},Wie={class:"admin-notifs-page__actions"},Kie={key:3,class:"admin-notifs-page__pager"},Zie={class:"admin-notifs-page__pager-info"},Gie=ee({__name:"NotificationsPage",setup(e){const t=hL(),a=P("all"),n=[{id:"all",label:D("Все")},{id:"unread",label:D("Непрочитанные")},{id:"read",label:D("Прочитанные")}],l=k(()=>t.meta?.page??1),o=k(()=>t.meta?.last_page??1),i=k(()=>t.meta?.total??t.items.length);async function r(g){a.value=g,await t.load(g,1).catch(()=>{})}async function s(g){g<1||g>o.value||await t.load(a.value,g).catch(()=>{})}async function h(g){g.read_at||await t.markAsRead(g.id).catch(()=>{})}async function p(g){await t.destroy(g.id).catch(()=>{})}async function y(){await t.markAllAsRead().catch(()=>{}),await t.load(a.value,l.value).catch(()=>{})}const m=g=>rT(g,"—"),v=g=>sT(g),M=g=>g.data.url??null,w=g=>jS(g);function b(g){return g===null?"":new Date(g).toLocaleString(lc())}return nt(()=>{t.load("all",1).catch(()=>{})}),(g,_)=>(d(),f("div",Pie,[x("div",Tie,[x("div",null,[x("h1",Die,I(u(D)("Уведомления")),1),x("p",Eie,I(u(Ze)("Всего: :total, непрочитанных: :unread",{total:i.value,unread:u(t).unreadCount})),1)]),u(t).hasUnread?(d(),O(u($e),{key:0,variant:"secondary",size:"sm",onClick:y},{default:F(()=>[le(I(u(D)("Прочитать все")),1)]),_:1})):q("",!0)]),x("div",Vie,[(d(),f(J,null,de(n,C=>x("button",{key:C.id,type:"button",class:re(["admin-notifs-page__tab",{"admin-notifs-page__tab--active":a.value===C.id}]),onClick:L=>r(C.id)},I(C.label),11,Hie)),64))]),u(t).loading?(d(),O(u(hs),{key:0})):u(t).items.length===0?(d(),f("p",Bie,I(a.value==="unread"?u(D)("Непрочитанных нет."):u(D)("Уведомлений пока нет.")),1)):(d(!0),f(J,{key:2},de(u(t).items,C=>(d(),O(u(st),{key:C.id,padding:"sm",class:re(["admin-notifs-page__item",{"admin-notifs-page__item--unread":!C.read_at}])},{default:F(()=>[x("div",Fie,[x("span",{class:"admin-notifs-page__icon","data-kind":w(C),"aria-hidden":"true"},[E(u(fe),{icon:u(cT)(C),size:14},null,8,["icon"])],8,jie),x("div",Oie,[(d(),O(Xe(M(C)?"a":"span"),{href:M(C)??void 0,class:"admin-notifs-page__item-title",onClick:L=>h(C)},{default:F(()=>[le(I(m(C)),1)]),_:2},1032,["href","onClick"])),v(C)?(d(),f("p",Uie,I(v(C)),1)):q("",!0),x("span",Nie,I(b(C.created_at)),1)]),x("div",Wie,[C.read_at?q("",!0):(d(),O(u($e),{key:0,variant:"ghost",size:"sm",onClick:L=>h(C)},{default:F(()=>[le(I(u(D)("Прочитано")),1)]),_:1},8,["onClick"])),E(u($e),{variant:"ghost",size:"sm",onClick:L=>p(C)},{default:F(()=>[le(I(u(D)("Удалить")),1)]),_:1},8,["onClick"])])])]),_:2},1032,["class"]))),128)),o.value>1?(d(),f("div",Kie,[E(u($e),{variant:"ghost",size:"sm",disabled:l.value<=1,onClick:_[0]||(_[0]=C=>s(l.value-1))},{default:F(()=>[le(I(u(D)("Назад")),1)]),_:1},8,["disabled"]),x("span",Zie,I(u(Ze)("Страница :page из :last",{page:l.value,last:o.value})),1),E(u($e),{variant:"ghost",size:"sm",disabled:l.value>=o.value,onClick:_[1]||(_[1]=C=>s(l.value+1))},{default:F(()=>[le(I(u(D)("Вперёд")),1)]),_:1},8,["disabled"])])):q("",!0)]))}}),Xie=ya(Gie,[["__scopeId","data-v-5112f887"]]),Jie={key:1,class:"admin-stats-widget"},Yie={key:0,class:"admin-stats-widget__hd"},Qie={class:"admin-stats-widget__title"},ere={class:"admin-stats-widget__grid"},j$=ee({__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(e){const t=e,a={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 n(p){return a[(p??"").toLowerCase()]??a[t.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 o(p){if(p?.style!=="currency"||!p.currency)return;const y=p.decimals??0;return m=>{const v=typeof m=="number"?m:Number(m);if(typeof m=="string"&&(m.trim()===""||Number.isNaN(v)))return m;try{return qn(v,{style:"currency",currency:p.currency,minimumFractionDigits:y,maximumFractionDigits:y})}catch{return`${qn(v,{minimumFractionDigits:y,maximumFractionDigits:y})} ${p.currency}`}}}const i=k(()=>{if(t.stats.length===0)return[{title:t.title,value:t.value,prefix:t.prefix,suffix:t.suffix,trend:t.trend,tone:n(null),icon:void 0,precision:t.precision,formatter:void 0}];const p=t.stats.length===1;return t.stats.map(y=>({title:(p&&t.title?t.title:y.label)??"",value:y.value??"",prefix:y.prefix??"",suffix:y.suffix??"",trend:l(y.change),tone:n(y.color),icon:_a(y.icon)??void 0,precision:typeof y.precision=="number"?y.precision:t.precision,formatter:o(y.format)}))}),r=k(()=>i.value.length>1);let s=null;try{s=ul()}catch{}const h=k(()=>DS(s?.current??TS()));return(p,y)=>r.value?(d(),f("section",Jie,[e.title?(d(),f("header",Yie,[x("h3",Qie,I(e.title),1)])):q("",!0),x("div",ere,[(d(!0),f(J,null,de(i.value,(m,v)=>(d(),O(u(qC),{key:v,title:m.title,value:m.value,prefix:m.prefix,suffix:m.suffix,trend:m.trend,precision:m.precision,formatter:m.formatter,locale:h.value,tone:m.tone,icon:m.icon,loading:e.loading,"trend-placement":"below"},null,8,["title","value","prefix","suffix","trend","precision","formatter","locale","tone","icon","loading"]))),128))])])):(d(),O(u(qC),{key:0,title:i.value[0].title,value:i.value[0].value,prefix:i.value[0].prefix,suffix:i.value[0].suffix,trend:i.value[0].trend,precision:i.value[0].precision,formatter:i.value[0].formatter,locale:h.value,tone:i.value[0].tone,icon:i.value[0].icon,loading:e.loading,"trend-placement":"below",class:"admin-stats-widget__single"},null,8,["title","value","prefix","suffix","trend","precision","formatter","locale","tone","icon","loading"]))}}),tre={class:"admin-chart-legend"},are={class:"admin-chart-legend__label"},OT=ee({__name:"ChartLegend",props:{items:{}},setup(e){return(t,a)=>(d(),f("ul",tre,[(d(!0),f(J,null,de(e.items,(n,l)=>(d(),f("li",{key:l,class:"admin-chart-legend__item"},[x("span",{class:"admin-chart-legend__swatch",style:Te({background:n.color})},null,4),x("span",are,I(n.label),1)]))),128))]))}}),nre={class:"admin-chart-tooltip__title"},lre={class:"admin-chart-tooltip__label"},ore={class:"admin-chart-tooltip__value"},UT=ee({__name:"ChartTooltip",props:{x:{},y:{},title:{},rows:{},boundsWidth:{}},setup(e){const t=e,a=k(()=>{const n=t.x>t.boundsWidth/2;return{top:`${Math.max(0,t.y)}px`,...n?{right:`${Math.max(0,t.boundsWidth-t.x+12)}px`}:{left:`${t.x+12}px`}}});return(n,l)=>(d(),f("div",{class:"admin-chart-tooltip",role:"presentation",style:Te(a.value)},[x("div",nre,I(e.title),1),(d(!0),f(J,null,de(e.rows,(o,i)=>(d(),f("div",{key:i,class:"admin-chart-tooltip__row"},[x("span",{class:"admin-chart-tooltip__swatch",style:Te({background:o.color})},null,4),x("span",lre,I(o.label),1),x("span",ore,I(o.value),1)]))),128))],4))}});function NT(e,t){const a=P(t.width),n=P(t.height);let l=null;function o(i,r){i>0&&(a.value=Math.round(i)),r>0&&(n.value=Math.round(r))}return nt(()=>{if(!e.value)return;const i=e.value.getBoundingClientRect();o(i.width,i.height),!(typeof ResizeObserver>"u")&&(l=new ResizeObserver(r=>{const s=r[0]?.contentRect;s&&o(s.width,s.height)}),l.observe(e.value))}),Yt(()=>{l?.disconnect(),l=null}),{width:a,height:n}}const ire={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 ac(e){if(typeof e!="string")return"";const t=e.trim();return t===""?"":ire[t.toLowerCase()]??t}const O$=["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)"],rre="var(--uid-accent)";function sre(e){if(typeof e=="number")return Number.isFinite(e)?e:null;if(typeof e=="string"&&e.trim()!==""){const t=Number(e);return Number.isFinite(t)?t:null}return null}function cre(e,t=rre){const a=Array.isArray(e)?e.filter(n=>n&&typeof n=="object"):[];return a.map((n,l)=>({label:typeof n.label=="string"&&n.label!==""?n.label:`#${l+1}`,data:Array.isArray(n.data)?n.data.map(sre):[],color:ac(n.color)!==""?ac(n.color):a.length===1?t:O$[l%O$.length]}))}function dre(e,t){const a=Array.isArray(e)?e.map(o=>String(o??"")):[],n=Math.max(a.length,...t.map(o=>o.data.length),0),l=[];for(let o=0;o<n;o++)l.push(a[o]??String(o+1));return l}function WT(e){return!e.some(t=>t.data.some(a=>a!==null&&a!==0))}function ure(e,t){const a=new Array(t).fill(0);return e.map(n=>a.map((l,o)=>(a[o]+=n.data[o]??0,a[o])))}function hre(e,t){const a=e/Math.max(1,t),n=Math.pow(10,Math.floor(Math.log10(a))),l=a/n;return(l<=1?1:l<=2?2:l<=2.5?2.5:l<=5?5:10)*n}function KT(e,t,a=4){let n=Math.min(0,e),l=Math.max(0,t);n===l&&(l=n+1);const o=hre(l-n,a);n=Math.floor(n/o)*o,l=Math.ceil(l/o)*o;const i=[];for(let r=n;r<=l+o/2;r+=o)i.push(Math.round(r/o)*o);return{min:n,max:l,ticks:i}}function ZT(e){return e?.style!=="currency"||!e.currency||!/^[A-Za-z]{3}$/.test(e.currency)?null:{style:"currency",currency:e.currency.toUpperCase()}}function GT(e,t){const a=ZT(t);if(a)try{return qn(e,{...a,notation:"compact",maximumFractionDigits:1})}catch{}return qn(e,{notation:"compact",maximumFractionDigits:1})}function Vu(e,t){if(e===null)return"—";const a=typeof t?.decimals=="number"?t.decimals:null,n=a===null?{maximumFractionDigits:2}:{minimumFractionDigits:a,maximumFractionDigits:a},l=ZT(t);if(l)try{return qn(e,{...l,...n})}catch{}const o=qn(e,n);return t?.style==="currency"&&t.currency?`${o} ${t.currency}`:o}function U$(e,t=11){return e.length*t*.6}const pre={key:0,class:"admin-widget__hd"},yre={key:0,class:"admin-widget__title"},fre={key:1,class:"admin-widget__desc"},mre={key:1,class:"admin-widget__empty"},vre=["width","height","viewBox","aria-label"],kre={class:"admin-chart__grid"},gre=["x1","x2","y1","y2"],bre=["x","y"],Mre=["x","width","height"],wre={key:1,class:"admin-chart__bars"},_re=["x","y","width","height","fill","rx","data-series","data-label","data-value"],xre={key:2,class:"admin-chart__series"},Ire=["data-series"],Lre=["d","fill","fill-opacity"],Cre=["d","stroke"],Sre=["cx","cy","r","fill"],Are=["cx","cy","fill"],$re=["x1","x2","y2"],qre=["x","y"],zre={class:"admin-chart__sr"},Rre={scope:"row"},Cl=8,Pre=12,Tre=22,N$=11,XT=ee({__name:"CartesianChartWidget",props:{kind:{default:"line"},title:{default:""},description:{default:""},labels:{},series:{},stacked:{type:Boolean,default:!1},height:{default:200},format:{default:null}},setup(e){const t=e,a=P(null),n=P(null),{width:l,height:o}=NT(a,{width:480,height:t.height}),i=k(()=>t.labels.length),r=k(()=>i.value===0||WT(t.series)),s=k(()=>t.kind==="bar"),h=k(()=>t.stacked?ure(t.series,i.value).map((X,U)=>X.map((te,Q)=>t.series[U].data[Q]===null?null:te)):t.series.map(X=>X.data.slice(0,i.value))),p=k(()=>{const V=[];for(const te of h.value)for(const Q of te)Q!==null&&V.push(Q);if(t.stacked&&s.value)for(let te=0;te<i.value;te++){let Q=0;for(const ke of t.series){const G=ke.data[te];G!=null&&G<0&&(Q+=G)}V.push(Q)}const X=V.length?Math.min(...V):0,U=V.length?Math.max(...V):1;return KT(X,U,o.value<160?3:4)}),y=k(()=>p.value.ticks.map(V=>GT(V,t.format))),m=k(()=>Math.ceil(Math.max(...y.value.map(V=>U$(V,N$)),8))+10),v=k(()=>Math.max(20,l.value-m.value-Pre)),M=k(()=>Math.max(20,o.value-Cl-Tre)),w=k(()=>v.value/Math.max(1,i.value));function b(V){const{min:X,max:U}=p.value;return Cl+M.value*(1-(V-X)/(U-X||1))}const g=k(()=>b(Math.max(p.value.min,Math.min(0,p.value.max))));function _(V){return s.value?m.value+w.value*(V+.5):i.value<=1?m.value+v.value/2:m.value+v.value*V/(i.value-1)}const C=k(()=>p.value.ticks.map((V,X)=>({y:b(V),label:y.value[X],zero:V===0}))),L=k(()=>{const V=t.labels.map(G=>G.length>16?`${G.slice(0,15)}…`:G),X=V.map(G=>U$(G,N$)),U=Math.max(...X,1)+12,te=s.value?w.value:v.value/Math.max(1,i.value-1),Q=Math.max(1,Math.ceil(U/Math.max(1,te))),ke=[];for(let G=0;G<i.value;G+=Q){const N=X[G]/2;ke.push({text:V[G],x:Math.min(Math.max(_(G),N+2),l.value-N-2)})}return ke});function T(V){const X=[];let U=[];return V.forEach((te,Q)=>{te===null?(U.length&&X.push(U),U=[]):U.push({i:Q,v:te})}),U.length&&X.push(U),X}const $=V=>(Math.round(V*100)/100).toString(),S=k(()=>h.value.map((V,X)=>{const U=T(V),te=U.map(G=>G.map((N,Z)=>`${Z===0?"M":"L"}${$(_(N.i))} ${$(b(N.v))}`).join(" ")).join(" "),Q=t.kind==="area"?U.map(G=>{const N=G.map((ce,ne)=>`${ne===0?"M":"L"}${$(_(ce.i))} ${$(b(ce.v))}`).join(" "),Z=[...G].reverse().map(ce=>{const ne=t.stacked&&X>0?h.value[X-1][ce.i]??0:null;return`L${$(_(ce.i))} ${$(ne===null?g.value:b(ne))}`}).join(" ");return`${N} ${Z} Z`}).join(" "):"",ke=U.flat().map(G=>({i:G.i,cx:_(G.i),cy:b(G.v)}));return{color:t.series[X].color,d:te,area:Q,points:ke}})),R=k(()=>i.value<=24&&v.value/Math.max(1,i.value)>=12),A=k(()=>{if(!s.value)return[];const V=[],X=Math.max(1,t.series.length);if(t.stacked){const ke=Math.min(48,w.value*.6);for(let G=0;G<i.value;G++){let N=0,Z=0;t.series.forEach((ce,ne)=>{const Me=ce.data[G];if(Me==null||Me===0)return;const ae=Me>0?N:Z,Se=ae+Me;Me>0?N=Se:Z=Se;const se=b(Math.max(ae,Se));V.push({x:_(G)-ke/2,y:se,w:ke,h:Math.max(0,b(Math.min(ae,Se))-se),color:ce.color,si:ne,i:G,value:Me})})}return V}const U=Math.min(w.value*.72,40*X),te=U/X>6?2:0,Q=Math.max(1,(U-te*(X-1))/X);for(let ke=0;ke<i.value;ke++)t.series.forEach((G,N)=>{const Z=G.data[ke];if(Z==null)return;const ce=Math.min(b(Z),g.value);V.push({x:_(ke)-U/2+N*(Q+te),y:ce,w:Q,h:Math.abs(b(Z)-g.value),color:G.color,si:N,i:ke,value:Z})});return V}),z=P(null);function H(V){const X=n.value?.getBoundingClientRect();if(!X||i.value===0)return;const U=V.clientX-X.left-m.value;let te;s.value?te=Math.floor(U/w.value):te=i.value<=1?0:Math.round(U/v.value*(i.value-1)),z.value=Math.min(i.value-1,Math.max(0,te))}function B(){z.value=null}const K=k(()=>{const V=z.value;return V===null?null:{x:_(V),y:Cl,title:t.labels[V]??"",rows:t.series.map(X=>({label:X.label,color:X.color,value:Vu(X.data[V]??null,t.format)}))}}),W=k(()=>t.series.map(V=>({label:V.label,color:V.color})));return(V,X)=>(d(),O(u(st),{padding:"md",class:re(["admin-widget admin-chart",[`admin-chart--${e.kind}`,{"admin-chart--stacked":e.stacked}]])},{default:F(()=>[e.title||e.description?(d(),f("header",pre,[e.title?(d(),f("h3",yre,I(e.title),1)):q("",!0),e.description?(d(),f("p",fre,I(e.description),1)):q("",!0)])):q("",!0),r.value?(d(),f("div",mre,I(u(D)("Нет данных за период")),1)):(d(),f(J,{key:2},[x("div",{ref_key:"box",ref:a,class:"admin-chart__box",style:Te({minHeight:`${e.height}px`})},[(d(),f("svg",{ref_key:"svgEl",ref:n,class:"admin-chart__svg",width:u(l),height:u(o),viewBox:`0 0 ${u(l)} ${u(o)}`,role:"img","aria-label":e.title||e.kind,onPointermove:H,onMousemove:H,onPointerleave:B,onMouseleave:B},[x("g",kre,[(d(!0),f(J,null,de(C.value,(U,te)=>(d(),f("line",{key:`g${te}`,x1:m.value,x2:m.value+v.value,y1:U.y,y2:U.y,class:re(U.zero?"admin-chart__axis-line":"admin-chart__grid-line")},null,10,gre))),128)),(d(!0),f(J,null,de(C.value,(U,te)=>(d(),f("text",{key:`t${te}`,x:m.value-6,y:U.y,class:"admin-chart__tick","text-anchor":"end","dominant-baseline":"middle"},I(U.label),9,bre))),128))]),z.value!==null&&s.value?(d(),f("rect",{key:0,class:"admin-chart__hover-band",x:m.value+w.value*z.value,y:Cl,width:w.value,height:M.value},null,8,Mre)):q("",!0),s.value?(d(),f("g",wre,[(d(!0),f(J,null,de(A.value,(U,te)=>(d(),f("rect",{key:te,class:"admin-chart__bar",x:U.x,y:U.y,width:U.w,height:U.h,fill:U.color,rx:e.stacked?0:Math.min(3,U.w/2),"data-series":U.si,"data-label":e.labels[U.i],"data-value":U.value},null,8,_re))),128))])):(d(),f("g",xre,[(d(!0),f(J,null,de(S.value,(U,te)=>(d(),f("g",{key:te,"data-series":te},[e.kind==="area"?(d(),f("path",{key:0,class:"admin-chart__area",d:U.area,fill:U.color,"fill-opacity":e.stacked?.45:.16},null,8,Lre)):q("",!0),x("path",{class:"admin-chart__line",d:U.d,stroke:U.color,fill:"none"},null,8,Cre),R.value?(d(!0),f(J,{key:1},de(U.points,Q=>(d(),f("circle",{key:Q.i,class:"admin-chart__point",cx:Q.cx,cy:Q.cy,r:z.value===Q.i?4.5:3,fill:U.color},null,8,Sre))),128)):(d(!0),f(J,{key:2},de(U.points.filter(Q=>Q.i===z.value),Q=>(d(),f("circle",{key:Q.i,class:"admin-chart__point",cx:Q.cx,cy:Q.cy,r:"4.5",fill:U.color},null,8,Are))),128))],8,Ire))),128))])),z.value!==null&&!s.value?(d(),f("line",{key:3,class:"admin-chart__crosshair",x1:_(z.value),x2:_(z.value),y1:Cl,y2:Cl+M.value},null,8,$re)):q("",!0),(d(!0),f(J,null,de(L.value,(U,te)=>(d(),f("text",{key:`x${te}`,class:"admin-chart__tick",x:U.x,y:Cl+M.value+15,"text-anchor":"middle"},I(U.text),9,qre))),128))],40,vre)),K.value?(d(),O(UT,{key:0,x:K.value.x,y:K.value.y,title:K.value.title,rows:K.value.rows,"bounds-width":u(l)},null,8,["x","y","title","rows","bounds-width"])):q("",!0)],4),e.series.length>1?(d(),O(OT,{key:0,items:W.value},null,8,["items"])):q("",!0),x("table",zre,[x("thead",null,[x("tr",null,[X[0]||(X[0]=x("th",null,null,-1)),(d(!0),f(J,null,de(e.series,(U,te)=>(d(),f("th",{key:te,scope:"col"},I(U.label),1))),128))])]),x("tbody",null,[(d(!0),f(J,null,de(e.labels,(U,te)=>(d(),f("tr",{key:te},[x("th",Rre,I(U),1),(d(!0),f(J,null,de(e.series,(Q,ke)=>(d(),f("td",{key:ke},I(u(Vu)(Q.data[te]??null,e.format)),1))),128))]))),128))])])],64))]),_:1},8,["class"]))}}),Dre=ee({__name:"BarChartWidget",props:{title:{default:""},description:{default:""},data:{},accent:{default:"var(--uid-accent)"},height:{default:200},seriesLabel:{default:""}},setup(e){const t=e,a=k(()=>(t.data??[]).map(l=>String(l.label))),n=k(()=>[{label:t.seriesLabel||t.title||"",data:(t.data??[]).map(l=>Number.isFinite(Number(l.value))?Number(l.value):null),color:t.accent}]);return(l,o)=>(d(),O(XT,{kind:"bar",title:e.title,description:e.description,labels:a.value,series:n.value,height:e.height},null,8,["title","description","labels","series","height"]))}}),Ere={key:0,class:"admin-widget__hd"},Vre={class:"admin-widget__title"},Hre={key:1,class:"admin-widget__empty"},Bre={key:2,class:"admin-donut-widget__row"},Fre=["aria-label"],jre=["d","fill"],Ore={key:0,cx:"60",cy:"60",r:"30",fill:"var(--uid-surface-raised)"},Ure={class:"admin-donut-widget__legend"},Nre={class:"admin-donut-widget__label"},Wre={class:"admin-donut-widget__value"},JT=ee({__name:"DonutChartWidget",props:{title:{default:""},data:{},hole:{type:Boolean,default:!0},format:{default:null}},setup(e){const t=e,a=["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)"],n=k(()=>t.data.length===0||t.data.every(i=>!i.value)),l=k(()=>t.data.reduce((i,r)=>i+r.value,0)||1),o=k(()=>{let i=0;return t.data.map((r,s)=>{const h=i/l.value*2*Math.PI;i+=r.value;const p=i/l.value*2*Math.PI,y=50,m=60,v=60,M=m+y*Math.cos(h-Math.PI/2),w=v+y*Math.sin(h-Math.PI/2),b=m+y*Math.cos(p-Math.PI/2),g=v+y*Math.sin(p-Math.PI/2),_=p-h>Math.PI?1:0,C=t.data.length===1?`M ${m-y} ${v} a ${y} ${y} 0 1 0 ${y*2} 0 a ${y} ${y} 0 1 0 ${-y*2} 0`:`M ${m} ${v} L ${M} ${w} A ${y} ${y} 0 ${_} 1 ${b} ${g} Z`;return{...r,path:C,color:ac(r.color)||a[s%a.length],pct:qn(r.value/l.value*100,{minimumFractionDigits:1,maximumFractionDigits:1})}})});return(i,r)=>(d(),O(u(st),{padding:"md",class:"admin-widget admin-donut-widget"},{default:F(()=>[e.title?(d(),f("header",Ere,[x("h3",Vre,I(e.title),1)])):q("",!0),n.value?(d(),f("div",Hre,I(u(D)("Нет данных")),1)):(d(),f("div",Bre,[(d(),f("svg",{viewBox:"0 0 120 120",class:"admin-donut-widget__svg",role:"img","aria-label":e.title},[(d(!0),f(J,null,de(o.value,(s,h)=>(d(),f("path",{key:h,d:s.path,fill:s.color,stroke:"var(--uid-surface-raised)","stroke-width":"1"},[x("title",null,I(s.label)+": "+I(u(Vu)(s.value,e.format))+" ("+I(s.pct)+"%)",1)],8,jre))),128)),e.hole?(d(),f("circle",Ore)):q("",!0)],8,Fre)),x("ul",Ure,[(d(!0),f(J,null,de(o.value,(s,h)=>(d(),f("li",{key:h},[x("span",{class:"admin-donut-widget__dot",style:Te({background:s.color})},null,4),x("span",Nre,I(s.label),1),x("span",Wre,I(s.pct)+"%",1)]))),128))])]))]),_:1}))}}),Kre={key:0,class:"admin-widget__hd"},Zre={class:"admin-widget__title"},Gre=ee({__name:"RecentTableWidget",props:{title:{default:""},columns:{default:()=>[]},rows:{default:()=>[]},emptyText:{default:D("Нет данных")},linkTo:{default:null}},setup(e){const t=e,a=Vt();function n(r){const s=r.id;!t.linkTo||s===void 0||s===null||a?.push(`/r/${t.linkTo}/${s}`)}const l=k(()=>t.columns.map(r=>{const s=r;return{key:String(s.column??s.name??r.key??""),preset:s.preset??null,meta:s.meta??null}})),o=k(()=>t.columns.map((r,s)=>({key:l.value[s].key,label:r.label,align:r.align,width:r.width??void 0})));function i(r){return r?.row??{}}return(r,s)=>(d(),O(u(st),{padding:"md",class:"admin-widget"},{default:F(()=>[e.title?(d(),f("header",Kre,[x("h3",Zre,I(e.title),1)])):q("",!0),E(u(nc),{columns:o.value,data:e.rows,"empty-text":u(D)(e.emptyText),class:re({"admin-widget__table--clickable":!!e.linkTo}),onRowClick:n},us({_:2},[de(l.value,h=>({name:h.key,fn:F(p=>[E(ls,{value:i(p)[h.key],preset:h.preset,meta:h.meta,row:i(p)},null,8,["value","preset","meta","row"])])}))]),1032,["columns","data","empty-text","class"])]),_:1}))}}),XL=ya(Gre,[["__scopeId","data-v-fec32896"]]),Xre={key:0,class:"admin-widget__hd"},Jre={class:"admin-widget__title"},Yre={class:"admin-heatmap__cols-axis","aria-hidden":"true"},Qre={class:"admin-heatmap__row-label"},ese={class:"admin-heatmap__cells"},tse=["title"],ase={key:2,class:"admin-heatmap__empty"},nse=ee({__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(e){const t=e,a=k(()=>{let o=0;for(const i of t.matrix)for(const r of i)typeof r=="number"&&r>o&&(o=r);return o||1});function n(o){return typeof o!="number"||o<=0?0:Math.max(.1,Math.min(1,o/a.value))}function l(o,i,r){const s=t.rows[i]??"",h=t.cols[r]??"";return t.formatValue?t.formatValue(o,s,h):`${s} ${h}: ${o}`}return(o,i)=>(d(),O(u(st),{padding:"md",class:"admin-widget admin-heatmap-widget"},{default:F(()=>[e.title?(d(),f("header",Xre,[x("h3",Jre,I(e.title),1)])):q("",!0),e.rows.length>0&&e.cols.length>0&&e.matrix.length>0?(d(),f("div",{key:1,class:"admin-heatmap",style:Te({"--admin-heatmap-cols":e.cols.length})},[x("div",Yre,[(d(!0),f(J,null,de(e.cols,(r,s)=>(d(),f("span",{key:`c-${s}`,class:"admin-heatmap__col-label"},I(s%3===0?r:""),1))),128))]),(d(!0),f(J,null,de(e.matrix,(r,s)=>(d(),f("div",{key:`r-${s}`,class:"admin-heatmap__row"},[x("span",Qre,I(e.rows[s]??""),1),x("div",ese,[(d(!0),f(J,null,de(r,(h,p)=>(d(),f("span",{key:`cell-${s}-${p}`,class:"admin-heatmap__cell",style:Te({background:e.color,opacity:n(h)}),title:l(h,s,p)},null,12,tse))),128))])]))),128))],4)):(d(),f("div",ase,I(u(D)("Нет данных")),1))]),_:1}))}}),lse={key:0,class:"admin-widget__hd"},ose={class:"admin-widget__title"},ise={class:"admin-gauge-widget__body"},rse=ee({__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(e){const t=e,a={neutral:"primary",positive:"success",warning:"warning",negative:"danger"},n=k(()=>a[t.tone]),l=k(()=>(t.ranges.length>0?t.ranges:t.thresholds).map(s=>({...s,color:ac(s.color)||void 0})));function o(s){if(!Number.isFinite(s)||Number.isInteger(s))return 0;const h=String(s).split(".")[1]??"";return Math.min(2,h.length)}const i=k(()=>typeof t.precision=="number"&&t.precision>=0?Math.min(20,Math.floor(t.precision)):o(Number(t.value))),r=k(()=>t.suffix||t.unit||"");return(s,h)=>(d(),O(u(st),{padding:"md",class:"admin-widget"},{default:F(()=>[e.title?(d(),f("header",lse,[x("h3",ose,I(e.title),1)])):q("",!0),x("div",ise,[E(u(EP),{value:e.value,min:e.min,max:e.max,size:e.size,ranges:l.value,tone:n.value,color:u(ac)(e.color)||void 0,label:e.label,suffix:r.value,precision:i.value},null,8,["value","min","max","size","ranges","tone","color","label","suffix","precision"])])]),_:1}))}}),sse={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function RI(e){return e.replace(/[&<>"']/g,t=>sse[t]??t)}function YS(e){return e.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&amp;/g,"&")}function cse(){const e=new Map;return t=>{const a=t.toLowerCase().trim().replace(/[^\p{L}\p{N}\s_-]/gu,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")||"section",n=e.get(a)??0;return e.set(a,n+1),n===0?a:`${a}-${n}`}}function W$(e){const t=e.trim(),a=t.replace(/&#0*58;|&colon;/gi,":").replace(/\s+/g,"").toLowerCase(),n=/^([a-z][a-z0-9+.-]*):/.exec(a);return n&&!["http","https","mailto"].includes(n[1]??"")?null:t}function K$(e){return!/^([a-z][a-z0-9+.-]*:|\/|#|\?)/i.test(e)}function Z$(e,t,a=!1){let n=YS(e);a&&(n=n.replace(/\.md(?=$|[?#])/i,""));try{const l=/^[a-z][a-z0-9+.-]*:\/\//i.test(t),o=new URL(n,l?t:`http://base.invalid${t.startsWith("/")?"":"/"}${t}`),i=l?o.href:o.pathname+o.search+o.hash;return RI(i)}catch{return e}}function YT(e,t={}){const a=[],n=o=>`${a.push(o)-1}`;let l=e.replace(/`([^`]+)`/g,(o,i)=>n(`<code>${i}</code>`));return l=l.replace(/!\[([^\]]*)\]\(([^)\s]+)(?:\s+&quot;[^)]*&quot;)?\)/g,(o,i,r)=>{let s=W$(r);return s===null?o:(t.imageBase&&K$(s)&&(s=Z$(s,t.imageBase)),n(`<img src="${s}" alt="${i}" loading="lazy">`))}),l=l.replace(/\[([^\]]+)\]\(([^)\s]+)(?:\s+&quot;[^)]*&quot;)?\)/g,(o,i,r)=>{let s=W$(r);if(s===null)return o;const h=K$(s);t.linkBase&&h&&(s=Z$(s,t.linkBase,t.stripMdExtension??!1));const p=/^(https?:)?\/\//i.test(s)||/^mailto:/i.test(s),y=t.internalLinksInPlace===!0&&!p;return n(y?`<a href="${s}">${i}</a>`:`<a href="${s}" target="_blank" rel="noopener noreferrer">${i}</a>`)}),l=l.replace(new RegExp("\\*\\*(?=\\S)(.+?)(?<=\\S)\\*\\*","g"),"<strong>$1</strong>").replace(new RegExp("(?<!\\w)__(?=\\S)(.+?)(?<=\\S)__(?!\\w)","g"),"<strong>$1</strong>").replace(new RegExp("\\*(?=\\S)(.+?)(?<=\\S)\\*","g"),"<em>$1</em>").replace(new RegExp("(?<!\\w)_(?=\\S)(.+?)(?<=\\S)_(?!\\w)","g"),"<em>$1</em>").replace(new RegExp("~~(?=\\S)(.+?)(?<=\\S)~~","g"),"<del>$1</del>"),l.replace(/(\d+)/g,(o,i)=>a[Number(i)]??"")}function dse(e){return YS(e.replace(/<[^>]+>/g,""))}const zc=/^(\s*)([-*+]|\d+[.)])\s+(.*)$/,use=/^\s*\|?\s*:?-+:?\s*(\|\s*:?-+:?\s*)*\|?\s*$/;function JL(e){let t=e.trim();return t.startsWith("|")&&(t=t.slice(1)),t.endsWith("|")&&!t.endsWith("\\|")&&(t=t.slice(0,-1)),t.split(new RegExp("(?<!\\\\)\\|")).map(a=>a.trim().replace(/\\\|/g,"|"))}const G$={note:"note",info:"note",tip:"tip",hint:"tip",important:"important",warning:"warning",caution:"caution",danger:"caution",примечание:"note",заметка:"note",совет:"tip",важно:"important",внимание:"warning",предупреждение:"warning",осторожно:"caution"};function hse(e){switch(e){case"tip":return D("Совет");case"important":return D("Важно");case"warning":return D("Внимание");case"caution":return D("Осторожно");default:return D("Примечание")}}function e1(e,t={}){if(!e)return"";const a=RI(e.replace(/\r\n?/g,`
7
+ `)),Ue.success(D("Recovery-коды скопированы."))}catch{Ue.warning(D("Скопируйте вручную."))}}const _=k(()=>o.value.match(/.{1,4}/g)?.join(" ")??o.value),C=k(()=>{if(i.value==="")return"";try{const L=EC(i.value,{minCorrectionLevel:Aoe.M});return Uoe(L,{on:"#18181b",off:"transparent",padX:1,padY:1})}catch{return""}});return(L,T)=>(d(),f("div",Noe,[l.value==="idle"?(d(),f("div",Woe,[x("p",Koe,I(u(D)("Двухфакторная аутентификация добавляет второй слой защиты — даже если пароль попадёт"))+" "+I(u(D)("в чужие руки, без OTP-кода из приложения войти не получится.")),1),E(u($e),{variant:"primary",loading:p.value,"data-testid":"2fa-enable",onClick:m},{prepend:F(()=>[E(u(fe),{icon:u(Os),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(u(D)("Включить 2FA")),1)]),_:1},8,["loading"]),y.value?(d(),f("p",Zoe,I(y.value),1)):q("",!0)])):l.value==="setup"?(d(),f("div",Goe,[x("ol",Xoe,[x("li",null,I(u(D)("Откройте Authenticator-приложение (Google Authenticator, 1Password, Authy…).")),1),x("li",null,[le(I(u(D)("Добавьте новый аккаунт вручную, скопировав ключ:"))+" ",1),x("div",Joe,[x("code",null,I(_.value),1),x("button",{type:"button",class:"admin-2fa__copy",onClick:b},[E(u(fe),{icon:u(on),size:12},null,8,["icon"]),le(" "+I(u(D)("Копировать")),1)])]),Le(L.$slots,"qr-code",{uri:i.value},()=>[C.value?(d(),f("div",{key:0,class:"admin-2fa__qr",innerHTML:C.value},null,8,Yoe)):(d(),f("p",Qoe,[le(I(u(D)("Либо отсканируйте QR с другого устройства — поделитесь URI:"))+" ",1),x("code",eie,I(i.value),1)]))])]),x("li",null,[le(I(u(D)("Введите 6-значный код из приложения:"))+" ",1),x("div",tie,[E(u(kt),{modelValue:r.value,"onUpdate:modelValue":T[0]||(T[0]=$=>r.value=$),"data-testid":"2fa-code",placeholder:"123456",maxlength:"6",class:"admin-2fa__code-input"},null,8,["modelValue"]),E(u($e),{variant:"primary",loading:p.value,disabled:r.value.length<4,"data-testid":"2fa-confirm",onClick:v},{default:F(()=>[le(I(u(D)("Подтвердить")),1)]),_:1},8,["loading","disabled"])])])]),y.value?(d(),f("p",aie,I(y.value),1)):q("",!0)])):l.value==="confirmed"?(d(),f("div",nie,[x("p",lie,I(u(D)("2FA активирована. Сохраните recovery-коды в безопасном месте — они нужны если вы"))+" "+I(u(D)("потеряете доступ к Authenticator-приложению.")),1),x("div",oie,[(d(!0),f(J,null,de(s.value,$=>(d(),f("code",{key:$,class:"admin-2fa__codes-item"},I($),1))),128))]),E(u($e),{variant:"ghost",onClick:g},{prepend:F(()=>[E(u(fe),{icon:u(on),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(u(D)("Скопировать все")),1)]),_:1}),E(u($e),{variant:"primary",onClick:T[1]||(T[1]=$=>l.value="enabled")},{default:F(()=>[le(I(u(D)("Готово")),1)]),_:1})])):l.value==="enabled"?(d(),f("div",iie,[x("p",rie,I(u(D)("2FA включена. Если у вас остался доступ к Authenticator app — всё в порядке.")),1),x("div",sie,[E(u(kt),{modelValue:h.value,"onUpdate:modelValue":T[2]||(T[2]=$=>h.value=$),type:"password",placeholder:u(D)("Текущий пароль")},null,8,["modelValue","placeholder"]),E(u($e),{variant:"secondary",loading:p.value,onClick:w},{prepend:F(()=>[E(u(fe),{icon:u(Bs),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(u(D)("Перегенерировать recovery-коды")),1)]),_:1},8,["loading"]),E(u($e),{variant:"danger",loading:p.value,"data-testid":"2fa-disable",onClick:M},{prepend:F(()=>[E(u(fe),{icon:u(iu),size:14},null,8,["icon"])]),default:F(()=>[le(" "+I(u(D)("Отключить 2FA")),1)]),_:1},8,["loading"])]),y.value?(d(),f("p",cie,I(y.value),1)):q("",!0),s.value.length>0?(d(),f("div",die,[(d(!0),f(J,null,de(s.value,$=>(d(),f("code",{key:$,class:"admin-2fa__codes-item"},I($),1))),128))])):q("",!0)])):q("",!0)]))}}),hie={class:"admin-page admin-profile"},pie={class:"admin-page__hd"},yie={class:"admin-page__title-wrap"},fie={class:"admin-page__title"},mie={class:"admin-page__count"},vie={class:"admin-profile__layout"},kie=["aria-label"],gie=["onClick"],bie=["data-icon"],Mie={class:"admin-profile__content"},wie={class:"admin-profile__card-hd"},_ie={class:"admin-profile__card-title"},xie={class:"admin-profile__hero"},Iie={class:"admin-profile__hero-text"},Lie={class:"admin-profile__hero-name"},Cie={class:"admin-profile__hero-meta"},Sie={class:"admin-profile__form"},Aie={class:"admin-profile__card-ft"},$ie={class:"admin-profile__card-hd"},qie={class:"admin-profile__card-title"},zie={class:"admin-profile__hint"},Rie=ee({__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(e,{emit:t}){const a=e,n=t,l=ea(),o=PS(),i=ul(),r=lS(),s=P(!!l.user?.twoFactorEnabled),h=k(()=>[{id:"general",label:D("Основное"),icon:"user"},...l.twoFactorAvailable||s.value?[{id:"security",label:D("Безопасность"),icon:"shield"}]:[],...r.tokens?[{id:"tokens",label:D("API токены"),icon:"key"}]:[],...r.sessions?[{id:"sessions",label:D("Сессии"),icon:"monitor"}]:[]]);function p(T){return h.value.some($=>$.id===T)?T:"general"}const y=P(p(a.section));function m(T){y.value=T,n("update:section",T)}Pe(()=>a.section,T=>{y.value=p(T)});const v=P({name:l.user?.name??"",email:l.user?.email??"",locale:i.current,theme:o.current}),M=k(()=>i.available.map(T=>({value:T,label:T.toUpperCase()}))),w=k(()=>o.available.map(T=>({value:T,label:T==="dark"?D("Тёмная"):T==="light"?D("Светлая"):T})));Pe(()=>v.value.locale,(T,$)=>{T===$||!T||i.setLocale(T).then(()=>{typeof window<"u"&&window.location.reload()}).catch(()=>{})}),Pe(()=>v.value.theme,(T,$)=>{T===$||!T||o.setTheme(T).catch(()=>{})});function b(){n("save",{...v.value})}function g(){n("avatar-replace")}const _=k(()=>s.value);function C(){s.value=!0,l.user&&(l.user.twoFactorEnabled=!0),n("two-factor-regenerate")}function L(){s.value=!1,l.user&&(l.user.twoFactorEnabled=!1),n("two-factor-disable")}return(T,$)=>(d(),f("section",hie,[x("header",pie,[x("div",yie,[x("h1",fie,I(e.title??u(D)("Профиль")),1),x("div",mie,I(e.subtitle??u(D)("Личные данные, безопасность, токены")),1)])]),x("div",vie,[x("nav",{class:"admin-profile__nav","aria-label":u(D)("Разделы профиля")},[(d(!0),f(J,null,de(h.value,S=>(d(),f("button",{key:S.id,type:"button",class:re(["admin-profile__nav-item",{"admin-profile__nav-item--active":y.value===S.id}]),onClick:R=>m(S.id)},[x("span",{class:"admin-profile__nav-icon","data-icon":S.icon},null,8,bie),x("span",null,I(S.label),1)],10,gie))),128))],8,kie),x("div",Mie,[y.value==="general"?(d(),O(u(st),{key:0,padding:"md"},{default:F(()=>[x("header",wie,[x("h3",_ie,I(u(D)("Профиль")),1)]),x("div",xie,[E(u(cL),{src:u(l).user?.avatar??void 0,name:u(l).user?.name??"?",size:"lg"},null,8,["src","name"]),x("div",Iie,[x("div",Lie,I(u(l).user?.name??"—"),1),x("div",Cie,I(u(l).user?.email??"—"),1)]),$[4]||($[4]=x("div",{style:{flex:"1"}},null,-1)),E(u($e),{variant:"ghost",size:"sm",onClick:g},{default:F(()=>[le(I(u(D)("Заменить")),1)]),_:1})]),x("div",Sie,[E(u(kt),{modelValue:v.value.name,"onUpdate:modelValue":$[0]||($[0]=S=>v.value.name=S),label:u(D)("Имя"),name:"name"},null,8,["modelValue","label"]),E(u(kt),{modelValue:v.value.email,"onUpdate:modelValue":$[1]||($[1]=S=>v.value.email=S),label:"Email",type:"email",name:"email"},null,8,["modelValue"]),E(u(qt),{label:u(D)("Язык")},{default:F(()=>[E(u(cl),{modelValue:v.value.locale,"onUpdate:modelValue":$[2]||($[2]=S=>v.value.locale=S),options:M.value},null,8,["modelValue","options"])]),_:1},8,["label"]),E(u(qt),{label:u(D)("Тема")},{default:F(()=>[E(u(cl),{modelValue:v.value.theme,"onUpdate:modelValue":$[3]||($[3]=S=>v.value.theme=S),options:w.value},null,8,["modelValue","options"])]),_:1},8,["label"])]),x("footer",Aie,[E(u($e),{variant:"primary",onClick:b},{default:F(()=>[le(I(u(D)("Сохранить")),1)]),_:1})])]),_:1})):y.value==="security"?(d(),O(u(st),{key:1,padding:"md"},{default:F(()=>[x("header",$ie,[x("h3",qie,I(u(D)("Двухфакторная аутентификация")),1),E(u(Ku),{variant:_.value?"success":"default"},{default:F(()=>[le(I(_.value?u(D)("Включена"):u(D)("Отключена")),1)]),_:1},8,["variant"])]),u(l).needsTwoFactorSetup?(d(),O(u(ua),{key:0,variant:"warning",class:"admin-profile__alert"},{default:F(()=>[le(I(u(D)("Ваша роль требует двухфакторной аутентификации. Включите её, чтобы продолжить работу в панели.")),1)]),_:1})):q("",!0),Le(T.$slots,"enable-2fa",{},()=>[E(uie,{enabled:_.value,onEnabled:C,onDisabled:L},null,8,["enabled"])])]),_:3})):Le(T.$slots,y.value,{section:y.value},()=>[E(u(st),{padding:"md"},{default:F(()=>[x("p",zie,I(u(Ze)("Раздел «:section» библиотекой не реализован —",{section:y.value}))+" "+I(u(Ze)("проект подключает его через слот :section.",{section:y.value})),1)]),_:1})],void 0,2)])])]))}}),Pie={class:"admin-page admin-notifs-page"},Tie={class:"admin-notifs-page__head"},Die={class:"admin-page__title"},Eie={class:"admin-notifs-page__sub"},Vie={class:"admin-notifs-page__tabs"},Hie=["onClick"],Bie={key:1,class:"admin-notifs-page__empty"},Fie={class:"admin-notifs-page__row"},jie=["data-kind"],Oie={class:"admin-notifs-page__body"},Uie={key:0,class:"admin-notifs-page__item-body"},Nie={class:"admin-notifs-page__time"},Wie={class:"admin-notifs-page__actions"},Kie={key:3,class:"admin-notifs-page__pager"},Zie={class:"admin-notifs-page__pager-info"},Gie=ee({__name:"NotificationsPage",setup(e){const t=hL(),a=P("all"),n=[{id:"all",label:D("Все")},{id:"unread",label:D("Непрочитанные")},{id:"read",label:D("Прочитанные")}],l=k(()=>t.meta?.page??1),o=k(()=>t.meta?.last_page??1),i=k(()=>t.meta?.total??t.items.length);async function r(g){a.value=g,await t.load(g,1).catch(()=>{})}async function s(g){g<1||g>o.value||await t.load(a.value,g).catch(()=>{})}async function h(g){g.read_at||await t.markAsRead(g.id).catch(()=>{})}async function p(g){await t.destroy(g.id).catch(()=>{})}async function y(){await t.markAllAsRead().catch(()=>{}),await t.load(a.value,l.value).catch(()=>{})}const m=g=>rT(g,"—"),v=g=>sT(g),M=g=>g.data.url??null,w=g=>jS(g);function b(g){return g===null?"":new Date(g).toLocaleString(lc())}return nt(()=>{t.load("all",1).catch(()=>{})}),(g,_)=>(d(),f("div",Pie,[x("div",Tie,[x("div",null,[x("h1",Die,I(u(D)("Уведомления")),1),x("p",Eie,I(u(Ze)("Всего: :total, непрочитанных: :unread",{total:i.value,unread:u(t).unreadCount})),1)]),u(t).hasUnread?(d(),O(u($e),{key:0,variant:"secondary",size:"sm",onClick:y},{default:F(()=>[le(I(u(D)("Прочитать все")),1)]),_:1})):q("",!0)]),x("div",Vie,[(d(),f(J,null,de(n,C=>x("button",{key:C.id,type:"button",class:re(["admin-notifs-page__tab",{"admin-notifs-page__tab--active":a.value===C.id}]),onClick:L=>r(C.id)},I(C.label),11,Hie)),64))]),u(t).loading?(d(),O(u(hs),{key:0})):u(t).items.length===0?(d(),f("p",Bie,I(a.value==="unread"?u(D)("Непрочитанных нет."):u(D)("Уведомлений пока нет.")),1)):(d(!0),f(J,{key:2},de(u(t).items,C=>(d(),O(u(st),{key:C.id,padding:"sm",class:re(["admin-notifs-page__item",{"admin-notifs-page__item--unread":!C.read_at}])},{default:F(()=>[x("div",Fie,[x("span",{class:"admin-notifs-page__icon","data-kind":w(C),"aria-hidden":"true"},[E(u(fe),{icon:u(cT)(C),size:14},null,8,["icon"])],8,jie),x("div",Oie,[(d(),O(Xe(M(C)?"a":"span"),{href:M(C)??void 0,class:"admin-notifs-page__item-title",onClick:L=>h(C)},{default:F(()=>[le(I(m(C)),1)]),_:2},1032,["href","onClick"])),v(C)?(d(),f("p",Uie,I(v(C)),1)):q("",!0),x("span",Nie,I(b(C.created_at)),1)]),x("div",Wie,[C.read_at?q("",!0):(d(),O(u($e),{key:0,variant:"ghost",size:"sm",onClick:L=>h(C)},{default:F(()=>[le(I(u(D)("Прочитано")),1)]),_:1},8,["onClick"])),E(u($e),{variant:"ghost",size:"sm",onClick:L=>p(C)},{default:F(()=>[le(I(u(D)("Удалить")),1)]),_:1},8,["onClick"])])])]),_:2},1032,["class"]))),128)),o.value>1?(d(),f("div",Kie,[E(u($e),{variant:"ghost",size:"sm",disabled:l.value<=1,onClick:_[0]||(_[0]=C=>s(l.value-1))},{default:F(()=>[le(I(u(D)("Назад")),1)]),_:1},8,["disabled"]),x("span",Zie,I(u(Ze)("Страница :page из :last",{page:l.value,last:o.value})),1),E(u($e),{variant:"ghost",size:"sm",disabled:l.value>=o.value,onClick:_[1]||(_[1]=C=>s(l.value+1))},{default:F(()=>[le(I(u(D)("Вперёд")),1)]),_:1},8,["disabled"])])):q("",!0)]))}}),Xie=ya(Gie,[["__scopeId","data-v-5112f887"]]),Jie={key:1,class:"admin-stats-widget"},Yie={key:0,class:"admin-stats-widget__hd"},Qie={class:"admin-stats-widget__title"},ere={class:"admin-stats-widget__grid"},j$=ee({__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(e){const t=e,a={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 n(m){return a[(m??"").toLowerCase()]??a[t.tone]??"primary"}function l(m){if(!m||typeof m.delta!="number")return;const v=Math.abs(m.delta);return m.direction==="down"?-v:m.direction==="up"?v:m.delta}function o(m){if(m?.style!=="currency"||!m.currency)return;const v=m.decimals??0;return M=>{const w=typeof M=="number"?M:Number(M);if(typeof M=="string"&&(M.trim()===""||Number.isNaN(w)))return M;try{return qn(w,{style:"currency",currency:m.currency,minimumFractionDigits:v,maximumFractionDigits:v})}catch{return`${qn(w,{minimumFractionDigits:v,maximumFractionDigits:v})} ${m.currency}`}}}const i=k(()=>{if(t.stats.length===0)return[{title:t.title,value:t.value,prefix:t.prefix,suffix:t.suffix,trend:t.trend,tone:n(null),icon:void 0,precision:t.precision,formatter:void 0}];const m=t.stats.length===1&&!s.value;return t.stats.map(v=>({title:(m&&t.title?t.title:v.label)??"",value:v.value??"",prefix:v.prefix??"",suffix:v.suffix??"",trend:l(v.change),tone:n(v.color),icon:_a(v.icon)??void 0,precision:typeof v.precision=="number"?v.precision:t.precision,formatter:o(v.format)}))}),r=k(()=>i.value.length>1),s=k(()=>{if(t.stats.length!==1||!t.title)return!1;const m=t.stats[0].label;return typeof m=="string"&&m!==""&&m!==t.title}),h=k(()=>r.value||s.value);let p=null;try{p=ul()}catch{}const y=k(()=>DS(p?.current??TS()));return(m,v)=>h.value?(d(),f("section",Jie,[e.title?(d(),f("header",Yie,[x("h3",Qie,I(e.title),1)])):q("",!0),x("div",ere,[(d(!0),f(J,null,de(i.value,(M,w)=>(d(),O(u(qC),{key:w,title:M.title,value:M.value,prefix:M.prefix,suffix:M.suffix,trend:M.trend,precision:M.precision,formatter:M.formatter,locale:y.value,tone:M.tone,icon:M.icon,loading:e.loading,"trend-placement":"below"},null,8,["title","value","prefix","suffix","trend","precision","formatter","locale","tone","icon","loading"]))),128))])])):(d(),O(u(qC),{key:0,title:i.value[0].title,value:i.value[0].value,prefix:i.value[0].prefix,suffix:i.value[0].suffix,trend:i.value[0].trend,precision:i.value[0].precision,formatter:i.value[0].formatter,locale:y.value,tone:i.value[0].tone,icon:i.value[0].icon,loading:e.loading,"trend-placement":"below",class:"admin-stats-widget__single"},null,8,["title","value","prefix","suffix","trend","precision","formatter","locale","tone","icon","loading"]))}}),tre={class:"admin-chart-legend"},are={class:"admin-chart-legend__label"},OT=ee({__name:"ChartLegend",props:{items:{}},setup(e){return(t,a)=>(d(),f("ul",tre,[(d(!0),f(J,null,de(e.items,(n,l)=>(d(),f("li",{key:l,class:"admin-chart-legend__item"},[x("span",{class:"admin-chart-legend__swatch",style:Te({background:n.color})},null,4),x("span",are,I(n.label),1)]))),128))]))}}),nre={class:"admin-chart-tooltip__title"},lre={class:"admin-chart-tooltip__label"},ore={class:"admin-chart-tooltip__value"},UT=ee({__name:"ChartTooltip",props:{x:{},y:{},title:{},rows:{},boundsWidth:{}},setup(e){const t=e,a=k(()=>{const n=t.x>t.boundsWidth/2;return{top:`${Math.max(0,t.y)}px`,...n?{right:`${Math.max(0,t.boundsWidth-t.x+12)}px`}:{left:`${t.x+12}px`}}});return(n,l)=>(d(),f("div",{class:"admin-chart-tooltip",role:"presentation",style:Te(a.value)},[x("div",nre,I(e.title),1),(d(!0),f(J,null,de(e.rows,(o,i)=>(d(),f("div",{key:i,class:"admin-chart-tooltip__row"},[x("span",{class:"admin-chart-tooltip__swatch",style:Te({background:o.color})},null,4),x("span",lre,I(o.label),1),x("span",ore,I(o.value),1)]))),128))],4))}});function NT(e,t){const a=P(t.width),n=P(t.height);let l=null;function o(i,r){i>0&&(a.value=Math.round(i)),r>0&&(n.value=Math.round(r))}return nt(()=>{if(!e.value)return;const i=e.value.getBoundingClientRect();o(i.width,i.height),!(typeof ResizeObserver>"u")&&(l=new ResizeObserver(r=>{const s=r[0]?.contentRect;s&&o(s.width,s.height)}),l.observe(e.value))}),Yt(()=>{l?.disconnect(),l=null}),{width:a,height:n}}const ire={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 ac(e){if(typeof e!="string")return"";const t=e.trim();return t===""?"":ire[t.toLowerCase()]??t}const O$=["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)"],rre="var(--uid-accent)";function sre(e){if(typeof e=="number")return Number.isFinite(e)?e:null;if(typeof e=="string"&&e.trim()!==""){const t=Number(e);return Number.isFinite(t)?t:null}return null}function cre(e,t=rre){const a=Array.isArray(e)?e.filter(n=>n&&typeof n=="object"):[];return a.map((n,l)=>({label:typeof n.label=="string"&&n.label!==""?n.label:`#${l+1}`,data:Array.isArray(n.data)?n.data.map(sre):[],color:ac(n.color)!==""?ac(n.color):a.length===1?t:O$[l%O$.length]}))}function dre(e,t){const a=Array.isArray(e)?e.map(o=>String(o??"")):[],n=Math.max(a.length,...t.map(o=>o.data.length),0),l=[];for(let o=0;o<n;o++)l.push(a[o]??String(o+1));return l}function WT(e){return!e.some(t=>t.data.some(a=>a!==null&&a!==0))}function ure(e,t){const a=new Array(t).fill(0);return e.map(n=>a.map((l,o)=>(a[o]+=n.data[o]??0,a[o])))}function hre(e,t){const a=e/Math.max(1,t),n=Math.pow(10,Math.floor(Math.log10(a))),l=a/n;return(l<=1?1:l<=2?2:l<=2.5?2.5:l<=5?5:10)*n}function KT(e,t,a=4){let n=Math.min(0,e),l=Math.max(0,t);n===l&&(l=n+1);const o=hre(l-n,a);n=Math.floor(n/o)*o,l=Math.ceil(l/o)*o;const i=[];for(let r=n;r<=l+o/2;r+=o)i.push(Math.round(r/o)*o);return{min:n,max:l,ticks:i}}function ZT(e){return e?.style!=="currency"||!e.currency||!/^[A-Za-z]{3}$/.test(e.currency)?null:{style:"currency",currency:e.currency.toUpperCase()}}function GT(e,t){const a=ZT(t);if(a)try{return qn(e,{...a,notation:"compact",maximumFractionDigits:1})}catch{}return qn(e,{notation:"compact",maximumFractionDigits:1})}function Vu(e,t){if(e===null)return"—";const a=typeof t?.decimals=="number"?t.decimals:null,n=a===null?{maximumFractionDigits:2}:{minimumFractionDigits:a,maximumFractionDigits:a},l=ZT(t);if(l)try{return qn(e,{...l,...n})}catch{}const o=qn(e,n);return t?.style==="currency"&&t.currency?`${o} ${t.currency}`:o}function U$(e,t=11){return e.length*t*.6}const pre={key:0,class:"admin-widget__hd"},yre={key:0,class:"admin-widget__title"},fre={key:1,class:"admin-widget__desc"},mre={key:1,class:"admin-widget__empty"},vre=["width","height","viewBox","aria-label"],kre={class:"admin-chart__grid"},gre=["x1","x2","y1","y2"],bre=["x","y"],Mre=["x","width","height"],wre={key:1,class:"admin-chart__bars"},_re=["x","y","width","height","fill","rx","data-series","data-label","data-value"],xre={key:2,class:"admin-chart__series"},Ire=["data-series"],Lre=["d","fill","fill-opacity"],Cre=["d","stroke"],Sre=["cx","cy","r","fill"],Are=["cx","cy","fill"],$re=["x1","x2","y2"],qre=["x","y"],zre={class:"admin-chart__sr"},Rre={scope:"row"},Cl=8,Pre=12,Tre=22,N$=11,XT=ee({__name:"CartesianChartWidget",props:{kind:{default:"line"},title:{default:""},description:{default:""},labels:{},series:{},stacked:{type:Boolean,default:!1},height:{default:200},format:{default:null}},setup(e){const t=e,a=P(null),n=P(null),{width:l,height:o}=NT(a,{width:480,height:t.height}),i=k(()=>t.labels.length),r=k(()=>i.value===0||WT(t.series)),s=k(()=>t.kind==="bar"),h=k(()=>t.stacked?ure(t.series,i.value).map((X,U)=>X.map((te,Q)=>t.series[U].data[Q]===null?null:te)):t.series.map(X=>X.data.slice(0,i.value))),p=k(()=>{const V=[];for(const te of h.value)for(const Q of te)Q!==null&&V.push(Q);if(t.stacked&&s.value)for(let te=0;te<i.value;te++){let Q=0;for(const ke of t.series){const G=ke.data[te];G!=null&&G<0&&(Q+=G)}V.push(Q)}const X=V.length?Math.min(...V):0,U=V.length?Math.max(...V):1;return KT(X,U,o.value<160?3:4)}),y=k(()=>p.value.ticks.map(V=>GT(V,t.format))),m=k(()=>Math.ceil(Math.max(...y.value.map(V=>U$(V,N$)),8))+10),v=k(()=>Math.max(20,l.value-m.value-Pre)),M=k(()=>Math.max(20,o.value-Cl-Tre)),w=k(()=>v.value/Math.max(1,i.value));function b(V){const{min:X,max:U}=p.value;return Cl+M.value*(1-(V-X)/(U-X||1))}const g=k(()=>b(Math.max(p.value.min,Math.min(0,p.value.max))));function _(V){return s.value?m.value+w.value*(V+.5):i.value<=1?m.value+v.value/2:m.value+v.value*V/(i.value-1)}const C=k(()=>p.value.ticks.map((V,X)=>({y:b(V),label:y.value[X],zero:V===0}))),L=k(()=>{const V=t.labels.map(G=>G.length>16?`${G.slice(0,15)}…`:G),X=V.map(G=>U$(G,N$)),U=Math.max(...X,1)+12,te=s.value?w.value:v.value/Math.max(1,i.value-1),Q=Math.max(1,Math.ceil(U/Math.max(1,te))),ke=[];for(let G=0;G<i.value;G+=Q){const N=X[G]/2;ke.push({text:V[G],x:Math.min(Math.max(_(G),N+2),l.value-N-2)})}return ke});function T(V){const X=[];let U=[];return V.forEach((te,Q)=>{te===null?(U.length&&X.push(U),U=[]):U.push({i:Q,v:te})}),U.length&&X.push(U),X}const $=V=>(Math.round(V*100)/100).toString(),S=k(()=>h.value.map((V,X)=>{const U=T(V),te=U.map(G=>G.map((N,Z)=>`${Z===0?"M":"L"}${$(_(N.i))} ${$(b(N.v))}`).join(" ")).join(" "),Q=t.kind==="area"?U.map(G=>{const N=G.map((ce,ne)=>`${ne===0?"M":"L"}${$(_(ce.i))} ${$(b(ce.v))}`).join(" "),Z=[...G].reverse().map(ce=>{const ne=t.stacked&&X>0?h.value[X-1][ce.i]??0:null;return`L${$(_(ce.i))} ${$(ne===null?g.value:b(ne))}`}).join(" ");return`${N} ${Z} Z`}).join(" "):"",ke=U.flat().map(G=>({i:G.i,cx:_(G.i),cy:b(G.v)}));return{color:t.series[X].color,d:te,area:Q,points:ke}})),R=k(()=>i.value<=24&&v.value/Math.max(1,i.value)>=12),A=k(()=>{if(!s.value)return[];const V=[],X=Math.max(1,t.series.length);if(t.stacked){const ke=Math.min(48,w.value*.6);for(let G=0;G<i.value;G++){let N=0,Z=0;t.series.forEach((ce,ne)=>{const Me=ce.data[G];if(Me==null||Me===0)return;const ae=Me>0?N:Z,Se=ae+Me;Me>0?N=Se:Z=Se;const se=b(Math.max(ae,Se));V.push({x:_(G)-ke/2,y:se,w:ke,h:Math.max(0,b(Math.min(ae,Se))-se),color:ce.color,si:ne,i:G,value:Me})})}return V}const U=Math.min(w.value*.72,40*X),te=U/X>6?2:0,Q=Math.max(1,(U-te*(X-1))/X);for(let ke=0;ke<i.value;ke++)t.series.forEach((G,N)=>{const Z=G.data[ke];if(Z==null)return;const ce=Math.min(b(Z),g.value);V.push({x:_(ke)-U/2+N*(Q+te),y:ce,w:Q,h:Math.abs(b(Z)-g.value),color:G.color,si:N,i:ke,value:Z})});return V}),z=P(null);function H(V){const X=n.value?.getBoundingClientRect();if(!X||i.value===0)return;const U=V.clientX-X.left-m.value;let te;s.value?te=Math.floor(U/w.value):te=i.value<=1?0:Math.round(U/v.value*(i.value-1)),z.value=Math.min(i.value-1,Math.max(0,te))}function B(){z.value=null}const K=k(()=>{const V=z.value;return V===null?null:{x:_(V),y:Cl,title:t.labels[V]??"",rows:t.series.map(X=>({label:X.label,color:X.color,value:Vu(X.data[V]??null,t.format)}))}}),W=k(()=>t.series.map(V=>({label:V.label,color:V.color})));return(V,X)=>(d(),O(u(st),{padding:"md",class:re(["admin-widget admin-chart",[`admin-chart--${e.kind}`,{"admin-chart--stacked":e.stacked}]])},{default:F(()=>[e.title||e.description?(d(),f("header",pre,[e.title?(d(),f("h3",yre,I(e.title),1)):q("",!0),e.description?(d(),f("p",fre,I(e.description),1)):q("",!0)])):q("",!0),r.value?(d(),f("div",mre,I(u(D)("Нет данных за период")),1)):(d(),f(J,{key:2},[x("div",{ref_key:"box",ref:a,class:"admin-chart__box",style:Te({minHeight:`${e.height}px`})},[(d(),f("svg",{ref_key:"svgEl",ref:n,class:"admin-chart__svg",width:u(l),height:u(o),viewBox:`0 0 ${u(l)} ${u(o)}`,role:"img","aria-label":e.title||e.kind,onPointermove:H,onMousemove:H,onPointerleave:B,onMouseleave:B},[x("g",kre,[(d(!0),f(J,null,de(C.value,(U,te)=>(d(),f("line",{key:`g${te}`,x1:m.value,x2:m.value+v.value,y1:U.y,y2:U.y,class:re(U.zero?"admin-chart__axis-line":"admin-chart__grid-line")},null,10,gre))),128)),(d(!0),f(J,null,de(C.value,(U,te)=>(d(),f("text",{key:`t${te}`,x:m.value-6,y:U.y,class:"admin-chart__tick","text-anchor":"end","dominant-baseline":"middle"},I(U.label),9,bre))),128))]),z.value!==null&&s.value?(d(),f("rect",{key:0,class:"admin-chart__hover-band",x:m.value+w.value*z.value,y:Cl,width:w.value,height:M.value},null,8,Mre)):q("",!0),s.value?(d(),f("g",wre,[(d(!0),f(J,null,de(A.value,(U,te)=>(d(),f("rect",{key:te,class:"admin-chart__bar",x:U.x,y:U.y,width:U.w,height:U.h,fill:U.color,rx:e.stacked?0:Math.min(3,U.w/2),"data-series":U.si,"data-label":e.labels[U.i],"data-value":U.value},null,8,_re))),128))])):(d(),f("g",xre,[(d(!0),f(J,null,de(S.value,(U,te)=>(d(),f("g",{key:te,"data-series":te},[e.kind==="area"?(d(),f("path",{key:0,class:"admin-chart__area",d:U.area,fill:U.color,"fill-opacity":e.stacked?.45:.16},null,8,Lre)):q("",!0),x("path",{class:"admin-chart__line",d:U.d,stroke:U.color,fill:"none"},null,8,Cre),R.value?(d(!0),f(J,{key:1},de(U.points,Q=>(d(),f("circle",{key:Q.i,class:"admin-chart__point",cx:Q.cx,cy:Q.cy,r:z.value===Q.i?4.5:3,fill:U.color},null,8,Sre))),128)):(d(!0),f(J,{key:2},de(U.points.filter(Q=>Q.i===z.value),Q=>(d(),f("circle",{key:Q.i,class:"admin-chart__point",cx:Q.cx,cy:Q.cy,r:"4.5",fill:U.color},null,8,Are))),128))],8,Ire))),128))])),z.value!==null&&!s.value?(d(),f("line",{key:3,class:"admin-chart__crosshair",x1:_(z.value),x2:_(z.value),y1:Cl,y2:Cl+M.value},null,8,$re)):q("",!0),(d(!0),f(J,null,de(L.value,(U,te)=>(d(),f("text",{key:`x${te}`,class:"admin-chart__tick",x:U.x,y:Cl+M.value+15,"text-anchor":"middle"},I(U.text),9,qre))),128))],40,vre)),K.value?(d(),O(UT,{key:0,x:K.value.x,y:K.value.y,title:K.value.title,rows:K.value.rows,"bounds-width":u(l)},null,8,["x","y","title","rows","bounds-width"])):q("",!0)],4),e.series.length>1?(d(),O(OT,{key:0,items:W.value},null,8,["items"])):q("",!0),x("table",zre,[x("thead",null,[x("tr",null,[X[0]||(X[0]=x("th",null,null,-1)),(d(!0),f(J,null,de(e.series,(U,te)=>(d(),f("th",{key:te,scope:"col"},I(U.label),1))),128))])]),x("tbody",null,[(d(!0),f(J,null,de(e.labels,(U,te)=>(d(),f("tr",{key:te},[x("th",Rre,I(U),1),(d(!0),f(J,null,de(e.series,(Q,ke)=>(d(),f("td",{key:ke},I(u(Vu)(Q.data[te]??null,e.format)),1))),128))]))),128))])])],64))]),_:1},8,["class"]))}}),Dre=ee({__name:"BarChartWidget",props:{title:{default:""},description:{default:""},data:{},accent:{default:"var(--uid-accent)"},height:{default:200},seriesLabel:{default:""}},setup(e){const t=e,a=k(()=>(t.data??[]).map(l=>String(l.label))),n=k(()=>[{label:t.seriesLabel||t.title||"",data:(t.data??[]).map(l=>Number.isFinite(Number(l.value))?Number(l.value):null),color:t.accent}]);return(l,o)=>(d(),O(XT,{kind:"bar",title:e.title,description:e.description,labels:a.value,series:n.value,height:e.height},null,8,["title","description","labels","series","height"]))}}),Ere={key:0,class:"admin-widget__hd"},Vre={class:"admin-widget__title"},Hre={key:1,class:"admin-widget__empty"},Bre={key:2,class:"admin-donut-widget__row"},Fre=["aria-label"],jre=["d","fill"],Ore={key:0,cx:"60",cy:"60",r:"30",fill:"var(--uid-surface-raised)"},Ure={class:"admin-donut-widget__legend"},Nre={class:"admin-donut-widget__label"},Wre={class:"admin-donut-widget__value"},JT=ee({__name:"DonutChartWidget",props:{title:{default:""},data:{},hole:{type:Boolean,default:!0},format:{default:null}},setup(e){const t=e,a=["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)"],n=k(()=>t.data.length===0||t.data.every(i=>!i.value)),l=k(()=>t.data.reduce((i,r)=>i+r.value,0)||1),o=k(()=>{let i=0;return t.data.map((r,s)=>{const h=i/l.value*2*Math.PI;i+=r.value;const p=i/l.value*2*Math.PI,y=50,m=60,v=60,M=m+y*Math.cos(h-Math.PI/2),w=v+y*Math.sin(h-Math.PI/2),b=m+y*Math.cos(p-Math.PI/2),g=v+y*Math.sin(p-Math.PI/2),_=p-h>Math.PI?1:0,C=t.data.length===1?`M ${m-y} ${v} a ${y} ${y} 0 1 0 ${y*2} 0 a ${y} ${y} 0 1 0 ${-y*2} 0`:`M ${m} ${v} L ${M} ${w} A ${y} ${y} 0 ${_} 1 ${b} ${g} Z`;return{...r,path:C,color:ac(r.color)||a[s%a.length],pct:qn(r.value/l.value*100,{minimumFractionDigits:1,maximumFractionDigits:1})}})});return(i,r)=>(d(),O(u(st),{padding:"md",class:"admin-widget admin-donut-widget"},{default:F(()=>[e.title?(d(),f("header",Ere,[x("h3",Vre,I(e.title),1)])):q("",!0),n.value?(d(),f("div",Hre,I(u(D)("Нет данных")),1)):(d(),f("div",Bre,[(d(),f("svg",{viewBox:"0 0 120 120",class:"admin-donut-widget__svg",role:"img","aria-label":e.title},[(d(!0),f(J,null,de(o.value,(s,h)=>(d(),f("path",{key:h,d:s.path,fill:s.color,stroke:"var(--uid-surface-raised)","stroke-width":"1"},[x("title",null,I(s.label)+": "+I(u(Vu)(s.value,e.format))+" ("+I(s.pct)+"%)",1)],8,jre))),128)),e.hole?(d(),f("circle",Ore)):q("",!0)],8,Fre)),x("ul",Ure,[(d(!0),f(J,null,de(o.value,(s,h)=>(d(),f("li",{key:h},[x("span",{class:"admin-donut-widget__dot",style:Te({background:s.color})},null,4),x("span",Nre,I(s.label),1),x("span",Wre,I(s.pct)+"%",1)]))),128))])]))]),_:1}))}}),Kre={key:0,class:"admin-widget__hd"},Zre={class:"admin-widget__title"},Gre=ee({__name:"RecentTableWidget",props:{title:{default:""},columns:{default:()=>[]},rows:{default:()=>[]},emptyText:{default:D("Нет данных")},linkTo:{default:null}},setup(e){const t=e,a=Vt();function n(r){const s=r.id;!t.linkTo||s===void 0||s===null||a?.push(`/r/${t.linkTo}/${s}`)}const l=k(()=>t.columns.map(r=>{const s=r;return{key:String(s.column??s.name??r.key??""),preset:s.preset??null,meta:s.meta??null}})),o=k(()=>t.columns.map((r,s)=>({key:l.value[s].key,label:r.label,align:r.align,width:r.width??void 0})));function i(r){return r?.row??{}}return(r,s)=>(d(),O(u(st),{padding:"md",class:"admin-widget"},{default:F(()=>[e.title?(d(),f("header",Kre,[x("h3",Zre,I(e.title),1)])):q("",!0),E(u(nc),{columns:o.value,data:e.rows,"empty-text":u(D)(e.emptyText),class:re({"admin-widget__table--clickable":!!e.linkTo}),onRowClick:n},us({_:2},[de(l.value,h=>({name:h.key,fn:F(p=>[E(ls,{value:i(p)[h.key],preset:h.preset,meta:h.meta,row:i(p)},null,8,["value","preset","meta","row"])])}))]),1032,["columns","data","empty-text","class"])]),_:1}))}}),XL=ya(Gre,[["__scopeId","data-v-fec32896"]]),Xre={key:0,class:"admin-widget__hd"},Jre={class:"admin-widget__title"},Yre={class:"admin-heatmap__cols-axis","aria-hidden":"true"},Qre={class:"admin-heatmap__row-label"},ese={class:"admin-heatmap__cells"},tse=["title"],ase={key:2,class:"admin-heatmap__empty"},nse=ee({__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(e){const t=e,a=k(()=>{let o=0;for(const i of t.matrix)for(const r of i)typeof r=="number"&&r>o&&(o=r);return o||1});function n(o){return typeof o!="number"||o<=0?0:Math.max(.1,Math.min(1,o/a.value))}function l(o,i,r){const s=t.rows[i]??"",h=t.cols[r]??"";return t.formatValue?t.formatValue(o,s,h):`${s} ${h}: ${o}`}return(o,i)=>(d(),O(u(st),{padding:"md",class:"admin-widget admin-heatmap-widget"},{default:F(()=>[e.title?(d(),f("header",Xre,[x("h3",Jre,I(e.title),1)])):q("",!0),e.rows.length>0&&e.cols.length>0&&e.matrix.length>0?(d(),f("div",{key:1,class:"admin-heatmap",style:Te({"--admin-heatmap-cols":e.cols.length})},[x("div",Yre,[(d(!0),f(J,null,de(e.cols,(r,s)=>(d(),f("span",{key:`c-${s}`,class:"admin-heatmap__col-label"},I(s%3===0?r:""),1))),128))]),(d(!0),f(J,null,de(e.matrix,(r,s)=>(d(),f("div",{key:`r-${s}`,class:"admin-heatmap__row"},[x("span",Qre,I(e.rows[s]??""),1),x("div",ese,[(d(!0),f(J,null,de(r,(h,p)=>(d(),f("span",{key:`cell-${s}-${p}`,class:"admin-heatmap__cell",style:Te({background:e.color,opacity:n(h)}),title:l(h,s,p)},null,12,tse))),128))])]))),128))],4)):(d(),f("div",ase,I(u(D)("Нет данных")),1))]),_:1}))}}),lse={key:0,class:"admin-widget__hd"},ose={class:"admin-widget__title"},ise={class:"admin-gauge-widget__body"},rse=ee({__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(e){const t=e,a={neutral:"primary",positive:"success",warning:"warning",negative:"danger"},n=k(()=>a[t.tone]),l=k(()=>(t.ranges.length>0?t.ranges:t.thresholds).map(s=>({...s,color:ac(s.color)||void 0})));function o(s){if(!Number.isFinite(s)||Number.isInteger(s))return 0;const h=String(s).split(".")[1]??"";return Math.min(2,h.length)}const i=k(()=>typeof t.precision=="number"&&t.precision>=0?Math.min(20,Math.floor(t.precision)):o(Number(t.value))),r=k(()=>t.suffix||t.unit||"");return(s,h)=>(d(),O(u(st),{padding:"md",class:"admin-widget"},{default:F(()=>[e.title?(d(),f("header",lse,[x("h3",ose,I(e.title),1)])):q("",!0),x("div",ise,[E(u(EP),{value:e.value,min:e.min,max:e.max,size:e.size,ranges:l.value,tone:n.value,color:u(ac)(e.color)||void 0,label:e.label,suffix:r.value,precision:i.value},null,8,["value","min","max","size","ranges","tone","color","label","suffix","precision"])])]),_:1}))}}),sse={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function RI(e){return e.replace(/[&<>"']/g,t=>sse[t]??t)}function YS(e){return e.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&amp;/g,"&")}function cse(){const e=new Map;return t=>{const a=t.toLowerCase().trim().replace(/[^\p{L}\p{N}\s_-]/gu,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")||"section",n=e.get(a)??0;return e.set(a,n+1),n===0?a:`${a}-${n}`}}function W$(e){const t=e.trim(),a=t.replace(/&#0*58;|&colon;/gi,":").replace(/\s+/g,"").toLowerCase(),n=/^([a-z][a-z0-9+.-]*):/.exec(a);return n&&!["http","https","mailto"].includes(n[1]??"")?null:t}function K$(e){return!/^([a-z][a-z0-9+.-]*:|\/|#|\?)/i.test(e)}function Z$(e,t,a=!1){let n=YS(e);a&&(n=n.replace(/\.md(?=$|[?#])/i,""));try{const l=/^[a-z][a-z0-9+.-]*:\/\//i.test(t),o=new URL(n,l?t:`http://base.invalid${t.startsWith("/")?"":"/"}${t}`),i=l?o.href:o.pathname+o.search+o.hash;return RI(i)}catch{return e}}function YT(e,t={}){const a=[],n=o=>`${a.push(o)-1}`;let l=e.replace(/`([^`]+)`/g,(o,i)=>n(`<code>${i}</code>`));return l=l.replace(/!\[([^\]]*)\]\(([^)\s]+)(?:\s+&quot;[^)]*&quot;)?\)/g,(o,i,r)=>{let s=W$(r);return s===null?o:(t.imageBase&&K$(s)&&(s=Z$(s,t.imageBase)),n(`<img src="${s}" alt="${i}" loading="lazy">`))}),l=l.replace(/\[([^\]]+)\]\(([^)\s]+)(?:\s+&quot;[^)]*&quot;)?\)/g,(o,i,r)=>{let s=W$(r);if(s===null)return o;const h=K$(s);t.linkBase&&h&&(s=Z$(s,t.linkBase,t.stripMdExtension??!1));const p=/^(https?:)?\/\//i.test(s)||/^mailto:/i.test(s),y=t.internalLinksInPlace===!0&&!p;return n(y?`<a href="${s}">${i}</a>`:`<a href="${s}" target="_blank" rel="noopener noreferrer">${i}</a>`)}),l=l.replace(new RegExp("\\*\\*(?=\\S)(.+?)(?<=\\S)\\*\\*","g"),"<strong>$1</strong>").replace(new RegExp("(?<!\\w)__(?=\\S)(.+?)(?<=\\S)__(?!\\w)","g"),"<strong>$1</strong>").replace(new RegExp("\\*(?=\\S)(.+?)(?<=\\S)\\*","g"),"<em>$1</em>").replace(new RegExp("(?<!\\w)_(?=\\S)(.+?)(?<=\\S)_(?!\\w)","g"),"<em>$1</em>").replace(new RegExp("~~(?=\\S)(.+?)(?<=\\S)~~","g"),"<del>$1</del>"),l.replace(/(\d+)/g,(o,i)=>a[Number(i)]??"")}function dse(e){return YS(e.replace(/<[^>]+>/g,""))}const zc=/^(\s*)([-*+]|\d+[.)])\s+(.*)$/,use=/^\s*\|?\s*:?-+:?\s*(\|\s*:?-+:?\s*)*\|?\s*$/;function JL(e){let t=e.trim();return t.startsWith("|")&&(t=t.slice(1)),t.endsWith("|")&&!t.endsWith("\\|")&&(t=t.slice(0,-1)),t.split(new RegExp("(?<!\\\\)\\|")).map(a=>a.trim().replace(/\\\|/g,"|"))}const G$={note:"note",info:"note",tip:"tip",hint:"tip",important:"important",warning:"warning",caution:"caution",danger:"caution",примечание:"note",заметка:"note",совет:"tip",важно:"important",внимание:"warning",предупреждение:"warning",осторожно:"caution"};function hse(e){switch(e){case"tip":return D("Совет");case"important":return D("Важно");case"warning":return D("Внимание");case"caution":return D("Осторожно");default:return D("Примечание")}}function e1(e,t={}){if(!e)return"";const a=RI(e.replace(/\r\n?/g,`
8
8
  `)).split(`
9
9
  `),n=[];let l=[];const o=r=>YT(r,t),i=()=>{l.length>0&&(n.push(`<p>${o(l.join(`
10
10
  `))}</p>`),l=[])};for(let r=0;r<a.length;r++){const s=a[r]??"",h=/^\s*(```|~~~)\s*([\w+#.-]*)[^`]*$/.exec(s);if(h){i();const y=[];for(r++;r<a.length&&!(a[r]??"").trim().startsWith(h[1]??"```");)y.push(a[r]??""),r++;const m=h[2]?` class="language-${h[2]}"`:"";n.push(`<pre><code${m}>${y.join(`