@dskripchenko/laravel-admin 1.1.6 → 1.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +765 -732
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),L=require("pinia"),U=require("vue-router"),c=require("@dskripchenko/ui"),St=require("axios"),A=require("./formState-GlJBphEn.cjs");let H=null;function we(t){H=t}function x(){if(H===null)throw new Error("[admin] AdminClient is not registered. Call setAdminClient(...) before using stores.");return H}function Ut(){H=null}function Ft(){return H!==null}const te=L.defineStore("admin-theme",()=>{const t=e.ref("light"),n=e.ref(["light","dark"]),a=e.computed(()=>t.value==="dark");function i(s){t.value=s.theme,n.value=s.availableThemes,r(s.theme)}function o(s){if(!n.value.includes(s))throw new Error(`Theme "${s}" is not available`);t.value=s,r(s)}async function l(s){if(!n.value.includes(s))throw new Error(`Theme "${s}" is not available`);const d=t.value;o(s);try{await x().post("/system/setTheme",{theme:s})}catch(u){throw o(d),u}}function r(s){typeof document<"u"&&document.documentElement&&document.documentElement.setAttribute("data-theme",s)}return{current:t,available:n,isDark:a,hydrate:i,applyLocal:o,setTheme:l}}),Tt=["aria-label","aria-pressed"],Dt=["data-icon"],pe=e.defineComponent({__name:"ThemeToggle",setup(t){const n=te(),a=e.computed(()=>n.current==="dark"),i=e.computed(()=>a.value?"sun":"moon"),o=e.computed(()=>a.value?"Переключить на светлую тему":"Переключить на тёмную тему");async function l(){const r=a.value?"light":"dark";await n.setTheme(r)}return(r,s)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"admin-topbar__icon-btn","aria-label":o.value,"aria-pressed":a.value,onClick:l},[e.createElementVNode("span",{class:"admin-topbar__icon","data-icon":i.value},null,8,Dt)],8,Tt))}}),ne=L.defineStore("admin-locale",()=>{const t=e.ref("ru"),n=e.ref(["ru","en"]);function a(r){t.value=r.locale,n.value=r.availableLocales,l(r.locale)}function i(r){if(!n.value.includes(r))throw new Error(`Locale "${r}" is not available`);t.value=r,l(r)}async function o(r){if(!n.value.includes(r))throw new Error(`Locale "${r}" is not available`);const s=t.value;i(r);try{await x().post("/system/setLocale",{locale:r})}catch(d){throw i(s),d}}function l(r){typeof document<"u"&&document.documentElement&&document.documentElement.setAttribute("lang",r);try{x().setLocale(r)}catch{}}return{current:t,available:n,hydrate:a,applyLocal:i,setLocale:o}}),At={type:"button",class:"admin-topbar__icon-btn",style:{width:"auto",padding:"0 8px",gap:"4px","font-size":"12px"},"aria-label":"Сменить локаль"},ve=e.defineComponent({__name:"LocaleSwitcher",setup(t){const n=ne();async function a(i){i!==n.current&&await n.setLocale(i)}return(i,o)=>(e.openBlock(),e.createBlock(e.unref(c.UidMenu),null,{trigger:e.withCtx(()=>[e.createElementVNode("button",At,[o[0]||(o[0]=e.createElementVNode("span",{class:"admin-topbar__icon","data-icon":"globe"},null,-1)),e.createElementVNode("span",null,e.toDisplayString((e.unref(n).current??"").toUpperCase()),1)])]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(n).available,l=>(e.openBlock(),e.createBlock(e.unref(c.UidMenuItem),{key:l,onClick:r=>a(l)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.toUpperCase()),1)]),_:2},1032,["onClick"]))),128))]),_:1}))}}),ae=L.defineStore("admin-notifications",()=>{const t=e.ref([]),n=e.ref(0),a=e.ref(!1),i=e.ref("all"),o=e.ref(null),l=e.computed(()=>n.value>0);function r(_){n.value=_.unread_notifications_count}async function s(_="all",y=1){a.value=!0;try{const m=await x().get(`/notifications/list?type=${_}&page=${y}`);t.value=m.data,n.value=m.meta.unread_count,o.value={page:m.meta.page,per_page:m.meta.per_page,total:m.meta.total,last_page:m.meta.last_page},i.value=_}finally{a.value=!1}}async function d(){const y=await x().get("/notifications/unread");n.value=y.count,i.value==="unread"&&(t.value=y.data)}async function u(_){await x().post("/notifications/markAsRead",{id:_});const f=t.value.find(m=>m.id===_);f&&f.read_at===null&&(f.read_at=new Date().toISOString(),n.value=Math.max(0,n.value-1))}async function v(){await x().post("/notifications/markAllAsRead");const y=new Date().toISOString();for(const f of t.value)f.read_at===null&&(f.read_at=y);n.value=0}async function h(_){await x().post("/notifications/destroy",{id:_});const f=t.value.findIndex(m=>m.id===_);if(f!==-1){const m=t.value[f].read_at===null;t.value.splice(f,1),m&&(n.value=Math.max(0,n.value-1))}}return{items:t,unreadCount:n,loading:a,meta:o,lastFilter:i,hasUnread:l,hydrate:r,load:s,loadUnread:d,markAsRead:u,markAllAsRead:v,destroy:h}}),Rt=["title"],Ne=e.defineComponent({__name:"NotificationBell",setup(t){const n=ae(),a=e.computed(()=>{const i=n.unreadCount;return i<=0?null:i>99?"99+":String(i)});return(i,o)=>(e.openBlock(),e.createBlock(e.unref(U.RouterLink),{to:"/notifications",class:"admin-topbar__icon-btn","aria-label":"Уведомления"},{default:e.withCtx(()=>[o[0]||(o[0]=e.createElementVNode("span",{class:"admin-topbar__icon","data-icon":"bell"},null,-1)),a.value!==null?(e.openBlock(),e.createElementBlock("span",{key:0,class:"admin-topbar__bell-badge",title:`Непрочитанных: ${e.unref(n).unreadCount}`},e.toDisplayString(a.value),9,Rt)):e.createCommentVNode("",!0)]),_:1}))}});class R extends Error{status;errorKey;payload;constructor(n,a){super(a.message??`API error ${n}`),this.name="ApiError",this.status=n,this.errorKey=a.errorKey??"unknown",this.payload=a}}class ge extends R{constructor(n){super(401,n),this.name="UnauthenticatedError"}}class Ve extends R{constructor(n){super(403,n),this.name="ForbiddenError"}}class Ee extends R{constructor(n){super(404,n),this.name="NotFoundError"}}class X extends R{fields;constructor(n){super(422,n),this.name="ValidationError",this.fields=n.messages??{}}firstFieldMessage(){for(const n of Object.values(this.fields))if(n.length>0)return n[0];return null}}class J extends Error{constructor(n="Network error"){super(n),this.name="NetworkError"}}function ie(t,n){switch(t){case 401:return new ge(n);case 403:return new Ve(n);case 404:return new Ee(n);case 422:return new X(n);default:return new R(t,n)}}const D=L.defineStore("admin-auth",()=>{const t=e.ref(null),n=e.ref([]),a=e.ref(null),i=e.computed(()=>t.value!==null),o=e.computed(()=>a.value!==null);function l(f){t.value=f.user,n.value=f.permissions}function r(f){return n.value.includes("*")||n.value.includes(f)?!0:n.value.some(m=>{if(!m.endsWith(".*"))return!1;const B=m.slice(0,-1);return f.startsWith(B)})}function s(f){return f.some(r)}function d(f){return f.every(r)}async function u(f){const m=x();try{const B=await m.post("/auth/login",f);return B?.user&&(t.value=B.user),Array.isArray(B?.permissions)&&(n.value=B.permissions),a.value=null,"authenticated"}catch(B){if(B instanceof R&&B.errorKey==="two_factor_required"){const b=B.payload.challenge_token;return a.value={challengeToken:typeof b=="string"?b:"",remember:f.remember??!1},"two_factor_required"}throw B}}async function v(f){if(a.value===null)throw new Error("No pending 2FA challenge");const B=await x().post("/auth/twoFactorChallenge",{challenge_token:a.value.challengeToken,code:f});t.value=B.user,a.value=null}async function h(f){if(a.value===null)throw new Error("No pending 2FA challenge");const B=await x().post("/auth/twoFactorRecovery",{challenge_token:a.value.challengeToken,recovery_code:f});return t.value=B.user,a.value=null,{remaining:B.recovery_codes_remaining}}function _(){a.value=null}async function y(){const f=x();try{await f.post("/auth/logout")}finally{t.value=null,n.value=[],a.value=null}}return{user:t,permissions:n,pendingChallenge:a,isAuthenticated:i,isChallengePending:o,hydrate:l,hasPermission:r,hasAnyPermission:s,hasAllPermissions:d,login:u,twoFactorChallenge:v,twoFactorRecovery:h,cancelChallenge:_,logout:y}}),Lt={type:"button",class:"admin-topbar__icon-btn admin-user-menu__trigger","aria-label":"Меню пользователя","aria-haspopup":"menu",style:{width:"auto",padding:"0 4px",gap:"8px"}},Ce=e.defineComponent({__name:"UserMenu",setup(t){const n=D(),a=U.useRouter();async function i(){try{await n.logout()}finally{await a.push({name:"admin.login"})}}function o(){a.push({name:"admin.profile"})}return(l,r)=>(e.openBlock(),e.createBlock(e.unref(c.UidMenu),null,{trigger:e.withCtx(()=>[e.createElementVNode("button",Lt,[e.createVNode(e.unref(c.UidAvatar),{src:e.unref(n).user?.avatar??void 0,name:e.unref(n).user?.name??"?",alt:e.unref(n).user?.name??"User",size:"sm"},null,8,["src","name","alt"])])]),default:e.withCtx(()=>[e.createVNode(e.unref(c.UidMenuItem),{onClick:o},{default:e.withCtx(()=>[...r[0]||(r[0]=[e.createTextVNode("Профиль",-1)])]),_:1}),e.createVNode(e.unref(c.UidMenuSeparator)),e.createVNode(e.unref(c.UidMenuItem),{variant:"danger",onClick:i},{default:e.withCtx(()=>[...r[1]||(r[1]=[e.createTextVNode("Выйти",-1)])]),_:1})]),_:1}))}}),Pt={class:"admin-topbar"},Mt={class:"admin-topbar__breadcrumbs"},It={key:0,class:"sep"},xe=e.defineComponent({__name:"AdminTopBar",props:{breadcrumbs:{default:()=>[]},showCollapseToggle:{type:Boolean,default:!0}},emits:["toggle-sidebar"],setup(t,{emit:n}){const a=t,i=n,o=e.computed(()=>a.breadcrumbs.length-1);return(l,r)=>(e.openBlock(),e.createElementBlock("header",Pt,[t.showCollapseToggle?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"admin-topbar__icon-btn","aria-label":"Свернуть меню",onClick:r[0]||(r[0]=s=>i("toggle-sidebar"))},[...r[1]||(r[1]=[e.createElementVNode("span",{class:"admin-topbar__icon","data-icon":"panel-left"},null,-1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",Mt,[e.renderSlot(l.$slots,"breadcrumbs",{},()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.breadcrumbs,(s,d)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d},[d>0?(e.openBlock(),e.createElementBlock("span",It,"›")):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(s.to?"a":"span"),{href:typeof s.to=="string"?s.to:void 0,class:e.normalizeClass(d===o.value?"cur":"")},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.label),1)]),_:2},1032,["href","class"]))],64))),128))])]),r[3]||(r[3]=e.createElementVNode("div",{class:"admin-topbar__spacer"},null,-1)),e.renderSlot(l.$slots,"search",{},()=>[r[2]||(r[2]=e.createElementVNode("div",{class:"admin-topbar__search",role:"button",tabindex:"0"},[e.createElementVNode("span",{class:"admin-topbar__icon","data-icon":"search"}),e.createElementVNode("span",null,"Поиск везде…"),e.createElementVNode("kbd",null,"⌘K")],-1))]),e.renderSlot(l.$slots,"actions"),e.createVNode(Ne),e.createVNode(pe),e.createVNode(ve),e.createVNode(Ce)]))}}),$e=L.defineStore("admin-menu",()=>{const t=e.ref([]),n=e.ref(!1),a=e.ref(null),i=e.ref(!1),o=e.computed(()=>{const u=D(),v=h=>{if(Array.isArray(h.permissions)&&h.permissions.length>0&&!u.hasAnyPermission(h.permissions))return null;const _=(h.children??[]).map(v).filter(y=>y!==null);return{...h,children:_}};return t.value.map(v).filter(h=>h!==null)}),l=e.computed(()=>{const u=new Map;for(const h of o.value){const _=h.group??null;u.has(_)||u.set(_,[]),u.get(_).push(h)}const v=[];for(const[h,_]of u)_.sort((y,f)=>{const m=(y.order??0)-(f.order??0);return m!==0?m:y.label.localeCompare(f.label)}),v.push({group:h,items:_});return v});async function r(u=!1){if(i.value&&!u)return t.value;n.value=!0,a.value=null;try{const h=await x().get("/system/menu");return t.value=Array.isArray(h.items)?h.items:[],i.value=!0,t.value}catch(v){throw a.value=v instanceof Error?v:new Error(String(v)),v}finally{n.value=!1}}function s(u){t.value=u,i.value=!0,a.value=null}function d(){t.value=[],i.value=!1,a.value=null,n.value=!1}return{items:t,loading:n,error:a,isLoaded:i,visibleItems:o,groupedItems:l,load:r,setItems:s,reset:d}}),zt={class:"admin-sidebar-brand"},qt={class:"admin-sidebar-brand__mark"},Wt={key:0,class:"admin-sidebar-brand__name"},Ot={key:0,class:"admin-sidebar-tenant"},jt={class:"admin-sidebar-foot"},Kt={key:0,class:"admin-sidebar-foot__text"},Gt=["href"],Se=e.defineComponent({__name:"AdminSidebar",props:{collapsed:{type:Boolean,default:!1},brandName:{default:"Laravel Admin"},brandMark:{default:"L"},tenant:{default:null},version:{default:null},docsUrl:{default:null}},setup(t){const n=$e(),a=U.useRoute(),i=e.computed(()=>n.groupedItems);function o(s){return!!(s.routeName&&a.name===s.routeName||s.url&&a.path===s.url)}function l(s){if(s)return()=>e.h("span",{class:"admin-sidebar__icon","data-icon":s})}function r(s){if(s.routeName)return{name:s.routeName};if(s.url)return s.url}return(s,d)=>(e.openBlock(),e.createBlock(e.unref(c.UidSidebar),{collapsed:t.collapsed},e.createSlots({header:e.withCtx(()=>[e.createElementVNode("div",zt,[e.createElementVNode("div",qt,e.toDisplayString(t.brandMark),1),t.collapsed?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Wt,e.toDisplayString(t.brandName),1))]),t.tenant&&!t.collapsed?(e.openBlock(),e.createElementBlock("div",Ot,[e.createElementVNode("span",null,e.toDisplayString(t.tenant.label),1),e.createElementVNode("b",null,e.toDisplayString(t.tenant.name),1)])):e.createCommentVNode("",!0)]),nav:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,(u,v)=>(e.openBlock(),e.createBlock(e.unref(c.UidSidebarGroup),{key:`grp-${v}`,title:u.group??void 0},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.items,h=>(e.openBlock(),e.createBlock(e.unref(c.UidSidebarItem),{key:h.key,to:r(h),active:o(h),badge:h.badge??void 0},e.createSlots({default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(h.label),1)]),_:2},[h.icon?{name:"icon",fn:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l(h.icon))))]),key:"0"}:void 0]),1032,["to","active","badge"]))),128))]),_:2},1032,["title"]))),128))]),_:2},[t.version||t.docsUrl?{name:"footer",fn:e.withCtx(()=>[e.createElementVNode("div",jt,[t.version?(e.openBlock(),e.createElementBlock("span",Kt,e.toDisplayString(t.version),1)):e.createCommentVNode("",!0),t.docsUrl?(e.openBlock(),e.createElementBlock("a",{key:1,href:t.docsUrl,class:"admin-sidebar-foot__text admin-sidebar-foot__link"}," Docs ",8,Gt)):e.createCommentVNode("",!0)])]),key:"0"}:void 0]),1032,["collapsed"]))}}),Ht={class:"admin-shell-root"},Xt={key:0,class:"admin-impersonation-banner",role:"status"},re="data-admin-impersonating",Ue=e.defineComponent({__name:"AdminShell",props:{collapsed:{type:Boolean,default:!1},impersonation:{default:null}},emits:["update:collapsed","exit-impersonation"],setup(t,{emit:n}){const a=t,i=n;function o(r){i("update:collapsed",r)}function l(){i("exit-impersonation")}return e.watch(()=>a.impersonation,r=>{typeof document>"u"||(r!==null?document.documentElement.setAttribute(re,"true"):document.documentElement.removeAttribute(re))},{immediate:!0}),e.onBeforeUnmount(()=>{typeof document<"u"&&document.documentElement.removeAttribute(re)}),(r,s)=>(e.openBlock(),e.createElementBlock("div",Ht,[t.impersonation?(e.openBlock(),e.createElementBlock("div",Xt,[e.createElementVNode("span",null,[s[1]||(s[1]=e.createTextVNode(" Вы вошли как ",-1)),e.createElementVNode("b",null,e.toDisplayString(t.impersonation.asName),1),s[2]||(s[2]=e.createTextVNode(" · режим имперсонации ",-1))]),e.createElementVNode("button",{type:"button",class:"admin-impersonation-banner__exit",onClick:l}," Выйти из режима ")])):e.createCommentVNode("",!0),e.createVNode(e.unref(c.UidSidebarLayout),{"model-value":t.collapsed,"onUpdate:modelValue":o},{sidebar:e.withCtx(()=>[e.renderSlot(r.$slots,"sidebar",{},()=>[e.createVNode(Se,{collapsed:t.collapsed},null,8,["collapsed"])])]),header:e.withCtx(()=>[e.renderSlot(r.$slots,"topbar",{},()=>[e.createVNode(xe,{onToggleSidebar:s[0]||(s[0]=d=>o(!t.collapsed))})])]),default:e.withCtx(()=>[e.renderSlot(r.$slots,"default")]),_:3},8,["model-value"])]))}}),Fe=e.defineComponent({__name:"AdminApp",setup(t){const n=U.useRoute(),a=e.computed(()=>!(n.meta?.fullscreen===!0||n.meta?.kind==="auth"||n.name==="admin.notFound"));return(i,o)=>{const l=e.resolveComponent("router-view");return a.value?(e.openBlock(),e.createBlock(Ue,{key:0},{default:e.withCtx(()=>[e.createVNode(l)]),_:1})):(e.openBlock(),e.createBlock(l,{key:1}))}}}),P=L.defineStore("admin-manifest",()=>{const t=e.ref(null),n=e.ref(!1),a=e.ref(null),i=e.computed(()=>t.value!==null),o=e.computed(()=>t.value?.version??null),l=e.computed(()=>t.value?.resources??[]),r=e.computed(()=>t.value?.screens??[]),s=e.computed(()=>t.value?.settings??[]),d=e.computed(()=>t.value?.plugins??[]);function u(f){return l.value.find(m=>m.slug===f)??null}function v(f){return r.value.find(m=>m.slug===f)??null}function h(f){return s.value.find(m=>m.slug===f)??null}async function _(f=!1){if(t.value!==null&&!f)return t.value;n.value=!0,a.value=null;try{const B=await x().get("/system/manifest");return t.value=B,B}catch(m){throw a.value=m instanceof Error?m:new Error(String(m)),m}finally{n.value=!1}}function y(){t.value=null,a.value=null,n.value=!1}return{manifest:t,loading:n,error:a,isLoaded:i,version:o,resources:l,screens:r,settings:s,plugins:d,getResource:u,getScreen:v,getSettings:h,load:_,reset:y}}),Jt={class:"admin-home"},Yt={class:"admin-home__title"},Qt={key:0,class:"admin-home__resources"},Zt={class:"admin-home__grid"},en=["onClick"],tn={class:"admin-home__card-label"},nn={class:"admin-home__card-slug"},Te=e.defineComponent({__name:"HomePage",setup(t){const n=P(),a=D(),i=U.useRouter(),o=e.computed(()=>a.user?.name??""),l=e.computed(()=>n.manifest?.resources??[]);return(r,s)=>(e.openBlock(),e.createElementBlock("div",Jt,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-home__hero"},{default:e.withCtx(()=>[e.createElementVNode("h1",Yt,"Добро пожаловать"+e.toDisplayString(o.value?", "+o.value:""),1),s[0]||(s[0]=e.createElementVNode("p",{class:"admin-home__lead"}," Админ-панель готова. Воспользуйтесь сайдбаром или переходите к ресурсам ниже. ",-1))]),_:1}),l.value.length?(e.openBlock(),e.createElementBlock("section",Qt,[s[1]||(s[1]=e.createElementVNode("h2",{class:"admin-home__heading"},"Ресурсы",-1)),e.createElementVNode("ul",Zt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,d=>(e.openBlock(),e.createElementBlock("li",{key:d.slug},[e.createElementVNode("button",{type:"button",class:"admin-home__card",onClick:u=>e.unref(i).push({name:`admin.resource.${d.slug}.index`})},[e.createElementVNode("span",tn,e.toDisplayString(d.label),1),e.createElementVNode("span",nn,e.toDisplayString(d.slug),1)],8,en)]))),128))])])):e.createCommentVNode("",!0)]))}}),an={class:"admin-status-page"},De=e.defineComponent({__name:"ForbiddenPage",setup(t){const n=U.useRouter();return(a,i)=>(e.openBlock(),e.createElementBlock("div",an,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[i[2]||(i[2]=e.createElementVNode("h1",{class:"admin-status-page__code"},"403",-1)),i[3]||(i[3]=e.createElementVNode("p",{class:"admin-status-page__message"},"Доступ запрещён.",-1)),e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:i[0]||(i[0]=o=>e.unref(n).replace({name:"admin.home"}))},{default:e.withCtx(()=>[...i[1]||(i[1]=[e.createTextVNode(" На главную ",-1)])]),_:1})]),_:1})]))}}),on={class:"admin-status-page"},Ae=e.defineComponent({__name:"NotFoundPage",setup(t){const n=U.useRouter();return(a,i)=>(e.openBlock(),e.createElementBlock("div",on,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[i[2]||(i[2]=e.createElementVNode("h1",{class:"admin-status-page__code"},"404",-1)),i[3]||(i[3]=e.createElementVNode("p",{class:"admin-status-page__message"},"Страница не найдена.",-1)),e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:i[0]||(i[0]=o=>e.unref(n).replace({name:"admin.home"}))},{default:e.withCtx(()=>[...i[1]||(i[1]=[e.createTextVNode(" На главную ",-1)])]),_:1})]),_:1})]))}}),ln={class:"admin-settings-page"},rn={class:"admin-settings-page__title"},sn={key:0,class:"admin-settings-page__hint"},cn={key:1,class:"admin-settings-page__debug"},Re=e.defineComponent({__name:"SettingsPage",setup(t){const n=U.useRoute(),a=P(),i=e.computed(()=>String(n.params.slug??"")),o=e.computed(()=>a.manifest?.settings?.find(l=>l.slug===i.value)??null);return(l,r)=>(e.openBlock(),e.createElementBlock("div",ln,[e.createVNode(e.unref(c.UidCard),{padding:"lg"},{default:e.withCtx(()=>[e.createElementVNode("h1",rn,e.toDisplayString(o.value?.label??i.value),1),o.value?(e.openBlock(),e.createElementBlock("pre",cn,e.toDisplayString(JSON.stringify(o.value.fields,null,2)),1)):(e.openBlock(),e.createElementBlock("p",sn," Settings «"+e.toDisplayString(i.value)+"» не найдено в manifest'е. ",1))]),_:1})]))}}),dn={class:"admin-status-page"},un={class:"admin-status-page__title"},mn={class:"admin-status-page__hint"},Le=e.defineComponent({__name:"UnknownScreenPage",setup(t){const n=U.useRoute(),a=e.computed(()=>String(n.params.slug??"")),i=e.computed(()=>String(n.meta?.title??a.value));return(o,l)=>(e.openBlock(),e.createElementBlock("div",dn,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[e.createElementVNode("h1",un,e.toDisplayString(i.value),1),e.createElementVNode("p",mn,[e.createTextVNode(" Это заглушка для screen «"+e.toDisplayString(a.value)+"». Передайте свой компонент через ",1),l[0]||(l[0]=e.createElementVNode("code",null,"createAdminApp("+e.toDisplayString("{")+" pages: "+e.toDisplayString("{")+" screen: MyScreen "+e.toDisplayString("}")+" "+e.toDisplayString("}")+")",-1)),l[1]||(l[1]=e.createTextVNode(". ",-1))])]),_:1})]))}}),fn={class:"admin-auth-card__row"},pn=["href"],vn={key:1,style:{"text-align":"center","font-size":"var(--uid-font-size-xs)",color:"var(--uid-text-secondary)","padding-top":"4px"}},gn=["href"],Pe=e.defineComponent({__name:"LoginForm",props:{forgotUrl:{default:null},ssoLinkLabel:{default:null},ssoUrl:{default:null}},emits:["success"],setup(t,{emit:n}){const a=n,i=D(),o=e.ref(""),l=e.ref(""),r=e.ref(!1),s=e.ref(!1),d=e.ref(null),u=e.ref({}),v=e.computed(()=>u.value.email?.[0]),h=e.computed(()=>u.value.password?.[0]);async function _(){if(!s.value){s.value=!0,d.value=null,u.value={};try{const y=await i.login({email:o.value,password:l.value,remember:r.value});a("success",y)}catch(y){y instanceof X?(u.value=y.fields,d.value=y.firstFieldMessage()):y instanceof J?d.value="Нет соединения с сервером":y instanceof R?d.value=y.message||"Не удалось войти":d.value=y.message}finally{s.value=!1}}}return(y,f)=>(e.openBlock(),e.createElementBlock("form",{class:"admin-auth-card__bd",novalidate:"",onSubmit:e.withModifiers(_,["prevent"])},[d.value?(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{key:0,variant:"danger",class:"admin-auth-card__alert",role:"alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(c.UidInput),{modelValue:o.value,"onUpdate:modelValue":f[0]||(f[0]=m=>o.value=m),type:"email",label:"Email",placeholder:"you@company.com",autocomplete:"username",required:!0,disabled:s.value,error:v.value,name:"email"},null,8,["modelValue","disabled","error"]),e.createVNode(e.unref(c.UidInput),{modelValue:l.value,"onUpdate:modelValue":f[1]||(f[1]=m=>l.value=m),type:"password",label:"Пароль",autocomplete:"current-password",required:!0,disabled:s.value,error:h.value,name:"password"},null,8,["modelValue","disabled","error"]),e.createElementVNode("div",fn,[e.createVNode(e.unref(c.UidCheckbox),{modelValue:r.value,"onUpdate:modelValue":f[2]||(f[2]=m=>r.value=m),disabled:s.value},{default:e.withCtx(()=>[...f[3]||(f[3]=[e.createTextVNode(" Запомнить меня ",-1)])]),_:1},8,["modelValue","disabled"]),t.forgotUrl?(e.openBlock(),e.createElementBlock("a",{key:0,href:t.forgotUrl,class:"admin-auth-card__link"}," Забыли пароль? ",8,pn)):e.createCommentVNode("",!0)]),e.createVNode(e.unref(c.UidButton),{type:"submit",variant:"primary",size:"lg",loading:s.value,disabled:s.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value?"Вход…":"Войти"),1)]),_:1},8,["loading","disabled"]),t.ssoLinkLabel&&t.ssoUrl?(e.openBlock(),e.createElementBlock("div",vn,[f[4]||(f[4]=e.createTextVNode(" или войдите через ",-1)),e.createElementVNode("a",{href:t.ssoUrl,class:"admin-auth-card__link"},e.toDisplayString(t.ssoLinkLabel),9,gn)])):e.createCommentVNode("",!0)],32))}}),kn=["value","disabled","aria-label","onInput","onKeydown"],hn={class:"admin-auth-card__row"},Me=e.defineComponent({__name:"TwoFactorForm",emits:["success","cancel"],setup(t,{emit:n}){const a=n,i=D(),o=e.ref("totp"),l=e.ref(["","","","","",""]),r=e.ref(""),s=e.ref([]),d=e.ref(!1),u=e.ref(null),v=e.ref(null),h=e.computed(()=>l.value.join("")),_=e.computed(()=>o.value==="totp"?h.value.length===6:r.value.trim().length>0);function y(k,V){V instanceof HTMLInputElement&&(s.value[k]=V)}function f(k,V){const S=V.target,C=S.value.replace(/\D/g,"").slice(-1);l.value[k]=C,S.value=C,C&&k<l.value.length-1&&e.nextTick(()=>s.value[k+1]?.focus()),h.value.length===l.value.length&&b()}function m(k,V){V.key==="Backspace"&&!l.value[k]&&k>0?e.nextTick(()=>s.value[k-1]?.focus()):V.key==="ArrowLeft"&&k>0?(s.value[k-1]?.focus(),V.preventDefault()):V.key==="ArrowRight"&&k<l.value.length-1&&(s.value[k+1]?.focus(),V.preventDefault())}function B(k){const S=(k.clipboardData?.getData("text")??"").replace(/\D/g,"").slice(0,l.value.length);if(S.length!==0){k.preventDefault();for(let C=0;C<l.value.length;C++)l.value[C]=S[C]??"";e.nextTick(()=>{s.value[Math.min(S.length,l.value.length-1)]?.focus(),S.length===l.value.length&&b()})}}async function b(){if(!(d.value||!_.value)){d.value=!0,u.value=null;try{if(o.value==="totp")await i.twoFactorChallenge(h.value);else{const k=await i.twoFactorRecovery(r.value.trim());v.value=k.remaining}a("success")}catch(k){k instanceof X?u.value=k.firstFieldMessage()??"Неверный код":k instanceof J?u.value="Нет соединения с сервером":k instanceof R?u.value=k.message||"Не удалось проверить код":u.value=k.message}finally{d.value=!1}}}function g(){i.cancelChallenge(),a("cancel")}function p(){o.value=o.value==="totp"?"recovery":"totp",u.value=null}return(k,V)=>(e.openBlock(),e.createElementBlock("form",{class:"admin-auth-card__bd",novalidate:"",onSubmit:e.withModifiers(b,["prevent"])},[u.value?(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{key:0,variant:"danger",class:"admin-auth-card__alert",role:"alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.value),1)]),_:1})):e.createCommentVNode("",!0),v.value!==null?(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{key:1,variant:"info",class:"admin-auth-card__alert",role:"status"},{default:e.withCtx(()=>[e.createTextVNode(" Использован recovery-код. Осталось: "+e.toDisplayString(v.value),1)]),_:1})):e.createCommentVNode("",!0),o.value==="totp"?(e.openBlock(),e.createElementBlock("div",{key:2,class:"admin-code-input",onPaste:B},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(S,C)=>(e.openBlock(),e.createElementBlock("input",{key:C,ref_for:!0,ref:w=>y(C,w),value:l.value[C],type:"text",inputmode:"numeric",autocomplete:"one-time-code",maxlength:"1",disabled:d.value,"aria-label":`Цифра ${C+1}`,onInput:w=>f(C,w),onKeydown:w=>m(C,w)},null,40,kn))),128))],32)):(e.openBlock(),e.createBlock(e.unref(c.UidInput),{key:3,modelValue:r.value,"onUpdate:modelValue":V[0]||(V[0]=S=>r.value=S),type:"text",label:"Recovery-код",autocomplete:"one-time-code",disabled:d.value,name:"recovery-code"},null,8,["modelValue","disabled"])),e.createVNode(e.unref(c.UidButton),{type:"submit",variant:"primary",size:"lg",loading:d.value,disabled:d.value||!_.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value?"Проверка…":"Подтвердить"),1)]),_:1},8,["loading","disabled"]),e.createElementVNode("div",hn,[e.createElementVNode("button",{type:"button",class:"admin-auth-card__link",onClick:p},[o.value==="totp"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode("Использовать recovery-код")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode("Вернуться к коду из приложения")],64))]),e.createElementVNode("button",{type:"button",class:"admin-auth-card__link",onClick:g}," Отмена ")])],32))}}),yn={class:"admin-auth-page"},_n={key:0,class:"admin-auth-page__corner"},Bn={class:"admin-auth-card__hd"},bn=["src","alt"],wn={key:1,"aria-hidden":"true"},Nn={key:2},Vn={class:"admin-auth-card__title"},En={class:"admin-auth-card__sub"},Ie=e.defineComponent({__name:"LoginPage",props:{brandName:{default:"Laravel Admin"},brandMark:{default:"L"},brandLogo:{default:null},homeRouteName:{default:"admin.home"},redirectQueryKey:{default:"redirect"},forgotUrl:{default:null},ssoLinkLabel:{default:null},ssoUrl:{default:null},showCornerActions:{type:Boolean,default:!0}},setup(t){const n=t,a=D(),i=U.useRouter(),o=U.useRoute();async function l(){const r=o.query[n.redirectQueryKey];if(typeof r=="string"&&r.length>0&&r.startsWith("/")){await i.push(r);return}await i.push({name:n.homeRouteName})}return e.watch(()=>a.isAuthenticated,r=>{r&&l()}),e.onMounted(()=>{a.isAuthenticated&&l()}),(r,s)=>(e.openBlock(),e.createElementBlock("div",yn,[t.showCornerActions?(e.openBlock(),e.createElementBlock("div",_n,[e.createVNode(pe),e.createVNode(ve)])):e.createCommentVNode("",!0),e.createVNode(e.unref(c.UidCard),{class:e.normalizeClass(["admin-auth-card",e.unref(a).isChallengePending?"admin-auth-card--wide":""]),padding:"none"},{default:e.withCtx(()=>[e.createElementVNode("div",Bn,[e.createElementVNode("div",{class:e.normalizeClass(["admin-auth-card__logo",e.unref(a).isChallengePending?"admin-auth-card__logo--accent":""])},[t.brandLogo&&!e.unref(a).isChallengePending?(e.openBlock(),e.createElementBlock("img",{key:0,src:t.brandLogo,alt:t.brandName},null,8,bn)):e.unref(a).isChallengePending?(e.openBlock(),e.createElementBlock("span",wn,"🛡")):(e.openBlock(),e.createElementBlock("span",Nn,e.toDisplayString(t.brandMark),1))],2),e.createElementVNode("div",Vn,[e.unref(a).isChallengePending?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode("Двухфакторная проверка")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(t.brandName),1)],64))]),e.createElementVNode("div",En,[e.unref(a).isChallengePending?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Введите 6-значный код из приложения-аутентификатора ")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode("Войдите, чтобы продолжить работу")],64))])]),e.unref(a).isChallengePending?(e.openBlock(),e.createBlock(Me,{key:0,onSuccess:s[0]||(s[0]=()=>{}),onCancel:s[1]||(s[1]=()=>{})})):(e.openBlock(),e.createBlock(Pe,{key:1,"forgot-url":t.forgotUrl,"sso-link-label":t.ssoLinkLabel,"sso-url":t.ssoUrl,onSuccess:s[2]||(s[2]=()=>{})},null,8,["forgot-url","sso-link-label","sso-url"]))]),_:1},8,["class"])]))}}),be={page:1,per_page:20,total:0,last_page:1},ze=L.defineStore("admin-resource-index",()=>{const t=e.ref(null),n=e.ref([]),a=e.ref({...be}),i=e.ref(!1),o=e.ref(null),l=e.ref(""),r=e.ref({}),s=e.ref(null),d=e.ref("asc"),u=e.ref(new Set),v=e.computed(()=>!i.value&&o.value===null&&n.value.length===0),h=e.computed(()=>u.value.size),_=e.computed(()=>u.value.size>0),y=e.computed(()=>o.value!==null),f=e.computed(()=>u.value.size===0||n.value.length===0?"none":n.value.every(E=>u.value.has(m(E)))?"all":"mixed");function m(N){return N.id??N.key??""}function B(N){t.value!==N&&(t.value=N,b())}function b(){n.value=[],a.value={...be},i.value=!1,o.value=null,l.value="",r.value={},s.value=null,d.value="asc",u.value=new Set}function g(N={}){const E={page:N.page??a.value.page,per_page:N.per_page??a.value.per_page},Q=N.search??l.value;Q&&(E.q=Q);const G=N.sort??s.value;G&&(E.order=[{column:G,direction:N.direction??d.value}]);const xt=N.filters??r.value,le={};for(const[$t,z]of Object.entries(xt))z==null||z===""||(le[$t]=Array.isArray(z)?z.join(","):z);return Object.keys(le).length>0&&(E.filters=le),E}async function p(N={}){if(!t.value)throw new Error("useResourceIndexStore.load() called before setSlug()");i.value=!0,o.value=null;try{const E=x(),Q=g(N),G=await E.post(`/${t.value}/search`,Q);n.value=G.data,a.value=G.meta}catch(E){throw o.value=E instanceof Error?E:new Error(String(E)),E}finally{i.value=!1}}async function k(N){l.value=N,a.value.page=1,await p()}async function V(N,E){E==null||E===""?delete r.value[N]:r.value[N]=E,a.value.page=1,await p()}async function S(){r.value={},a.value.page=1,await p()}async function C(N,E="asc"){s.value=N,d.value=E,await p()}async function w(N){s.value===N?d.value=d.value==="asc"?"desc":"asc":(s.value=N,d.value="asc"),await p()}async function $(N){a.value.page=N,await p()}function T(N){const E=new Set(u.value);E.has(N)?E.delete(N):E.add(N),u.value=E}function F(){if(f.value==="all"){u.value=new Set;return}const N=new Set(u.value);for(const E of n.value)N.add(m(E));u.value=N}function M(){u.value=new Set}function Ct(N){return u.value.has(N)}return{slug:t,items:n,meta:a,loading:i,error:o,search:l,filters:r,sortKey:s,sortDirection:d,selection:u,isEmpty:v,hasError:y,hasSelection:_,selectedCount:h,selectionState:f,setSlug:B,reset:b,load:p,setSearch:k,setFilter:V,clearFilters:S,setSort:C,toggleSort:w,setPage:$,toggleRow:T,toggleAllOnPage:F,clearSelection:M,isSelected:Ct,rowId:m}}),Cn={class:"admin-page admin-resource-index"},xn={class:"admin-page__hd"},$n={class:"admin-page__title-wrap"},Sn={class:"admin-page__title"},Un={key:0,class:"admin-page__count"},Fn={class:"admin-page__actions"},Tn={key:0,class:"admin-bulk-toolbar",role:"toolbar"},Dn={class:"admin-bulk-toolbar__count"},An={key:1,class:"admin-filter-bar"},Rn=["value"],Ln={key:2,class:"admin-resource-index__loading"},Pn={key:5,class:"admin-resource-index__table"},Mn={class:"admin-resource-index__select-header"},In={class:"admin-resource-index__select-overlay"},zn=["onClick"],qn={key:6,class:"admin-resource-index__footer"},qe=e.defineComponent({__name:"ResourceIndexPage",props:{slug:{},title:{default:null},subtitle:{default:null},createLabel:{default:"Создать"},createRouteName:{default:null}},emits:["bulk-action","row-click"],setup(t,{emit:n}){const a=t,i=n,o=ze(),l=P(),r=e.computed(()=>l.getResource(a.slug)),s=e.computed(()=>a.title??r.value?.label??a.slug),d=e.computed(()=>(r.value?.columns??[]).map(g=>{const p=g;return{key:String(p.key??p.name??""),label:String(p.label??p.name??""),sortable:!!p.sortable,align:p.align??"left",width:typeof p.width=="string"?p.width:void 0}}).filter(g=>g.key)),u=e.computed(()=>{const b=o.meta.total;return b===0?"":`${o.items.length} из ${b}`});e.onMounted(async()=>{o.setSlug(a.slug),l.manifest===null&&await l.load().catch(()=>{}),await o.load().catch(()=>{})}),e.watch(()=>a.slug,async(b,g)=>{b!==g&&(o.setSlug(b),await o.load().catch(()=>{}))});async function v(b){await o.toggleSort(b)}async function h(b){await o.setPage(b)}function _(){o.toggleAllOnPage()}function y(b){o.toggleRow(b)}function f(b){i("row-click",b)}function m(b){i("bulk-action",b,[...o.selection])}async function B(){await o.load().catch(()=>{})}return(b,g)=>(e.openBlock(),e.createElementBlock("section",Cn,[e.createElementVNode("header",xn,[e.createElementVNode("div",$n,[e.createElementVNode("h1",Sn,e.toDisplayString(s.value),1),t.subtitle||u.value?(e.openBlock(),e.createElementBlock("div",Un,[t.subtitle?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(t.subtitle),1)],64)):e.createCommentVNode("",!0),t.subtitle&&u.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" · ")],64)):e.createCommentVNode("",!0),u.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(u.value),1)],64)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Fn,[e.renderSlot(b.$slots,"actions"),t.createRouteName?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"primary",onClick:g[0]||(g[0]=p=>b.$router.push({name:t.createRouteName}))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.createLabel),1)]),_:1})):e.createCommentVNode("",!0)])]),e.unref(o).hasSelection?(e.openBlock(),e.createElementBlock("div",Tn,[e.createElementVNode("span",Dn,[g[8]||(g[8]=e.createTextVNode(" Выбрано ",-1)),e.createElementVNode("b",null,e.toDisplayString(e.unref(o).selectedCount),1)]),g[14]||(g[14]=e.createElementVNode("span",{class:"admin-bulk-toolbar__divider"},null,-1)),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:g[1]||(g[1]=p=>m("publish"))},{default:e.withCtx(()=>[...g[9]||(g[9]=[e.createTextVNode("Опубликовать",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:g[2]||(g[2]=p=>m("archive"))},{default:e.withCtx(()=>[...g[10]||(g[10]=[e.createTextVNode("Архивировать",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:g[3]||(g[3]=p=>m("export"))},{default:e.withCtx(()=>[...g[11]||(g[11]=[e.createTextVNode("Экспорт",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"danger",onClick:g[4]||(g[4]=p=>m("delete"))},{default:e.withCtx(()=>[...g[12]||(g[12]=[e.createTextVNode("Удалить",-1)])]),_:1}),g[15]||(g[15]=e.createElementVNode("span",{class:"admin-bulk-toolbar__spacer"},null,-1)),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:e.unref(o).clearSelection},{default:e.withCtx(()=>[...g[13]||(g[13]=[e.createTextVNode(" Снять выделение ",-1)])]),_:1},8,["onClick"])])):(e.openBlock(),e.createElementBlock("div",An,[e.createElementVNode("input",{value:e.unref(o).search,type:"search",placeholder:"Поиск…",class:"admin-filter-bar__search",onKeydown:g[5]||(g[5]=e.withKeys(p=>e.unref(o).setSearch(p.target.value),["enter"]))},null,40,Rn),e.renderSlot(b.$slots,"filters",{filters:e.unref(o).filters,setFilter:e.unref(o).setFilter}),g[17]||(g[17]=e.createElementVNode("span",{class:"admin-filter-bar__spacer"},null,-1)),Object.keys(e.unref(o).filters).length>0?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,size:"sm",variant:"ghost",onClick:e.unref(o).clearFilters},{default:e.withCtx(()=>[...g[16]||(g[16]=[e.createTextVNode(" Сброс ",-1)])]),_:1},8,["onClick"])):e.createCommentVNode("",!0)])),e.unref(o).loading?(e.openBlock(),e.createElementBlock("div",Ln,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(8,p=>e.createVNode(e.unref(c.UidSkeleton),{key:p,height:"40px"})),64))])):e.unref(o).hasError?(e.openBlock(),e.createBlock(e.unref(c.UidErrorState),{key:3,title:"Не удалось загрузить данные",description:e.unref(o).error?.message??"Попробуйте обновить страницу.",class:"admin-resource-index__state"},{actions:e.withCtx(()=>[e.createVNode(e.unref(c.UidButton),{variant:"primary",onClick:B},{default:e.withCtx(()=>[...g[18]||(g[18]=[e.createTextVNode("Обновить",-1)])]),_:1})]),_:1},8,["description"])):e.unref(o).isEmpty?(e.openBlock(),e.createBlock(e.unref(c.UidEmptyState),{key:4,title:"Пока пусто",description:"Создайте первую запись или измените фильтры.",class:"admin-resource-index__state"},{actions:e.withCtx(()=>[t.createRouteName?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"primary",onClick:g[6]||(g[6]=p=>b.$router.push({name:t.createRouteName}))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.createLabel),1)]),_:1})):e.createCommentVNode("",!0)]),_:1})):(e.openBlock(),e.createElementBlock("div",Pn,[e.createElementVNode("div",Mn,[e.createVNode(e.unref(c.UidCheckbox),{"model-value":e.unref(o).selectionState==="all",indeterminate:e.unref(o).selectionState==="mixed","aria-label":"Выделить всё","onUpdate:modelValue":_},null,8,["model-value","indeterminate"])]),e.createVNode(e.unref(c.UidTable),{columns:d.value,data:e.unref(o).items,"sort-key":e.unref(o).sortKey??"","sort-direction":e.unref(o).sortDirection,"onUpdate:sortKey":v},e.createSlots({_:2},[e.renderList(d.value,p=>({name:`cell-${p.key}`,fn:e.withCtx(k=>[e.renderSlot(b.$slots,`cell-${p.key}`,{row:k},()=>[e.createTextVNode(e.toDisplayString(k?.[p.key]),1)])])}))]),1032,["columns","data","sort-key","sort-direction"]),e.createElementVNode("div",In,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(o).items,p=>(e.openBlock(),e.createElementBlock("div",{key:String(e.unref(o).rowId(p)),class:e.normalizeClass(["admin-resource-index__row",{"admin-resource-index__row--selected":e.unref(o).isSelected(e.unref(o).rowId(p))}]),onClick:k=>f(p)},[e.createVNode(e.unref(c.UidCheckbox),{"model-value":e.unref(o).isSelected(e.unref(o).rowId(p)),"aria-label":`Строка ${e.unref(o).rowId(p)}`,"onUpdate:modelValue":k=>y(e.unref(o).rowId(p)),onClick:g[7]||(g[7]=e.withModifiers(()=>{},["stop"]))},null,8,["model-value","aria-label","onUpdate:modelValue"])],10,zn))),128))])])),!e.unref(o).loading&&!e.unref(o).hasError&&!e.unref(o).isEmpty?(e.openBlock(),e.createElementBlock("footer",qn,[e.createVNode(e.unref(c.UidPagination),{"model-value":e.unref(o).meta.page,total:e.unref(o).meta.total,"per-page":e.unref(o).meta.per_page,"onUpdate:modelValue":h},null,8,["model-value","total","per-page"])])):e.createCommentVNode("",!0)]))}}),ke=L.defineStore("admin-resource-form",()=>{const t=e.ref(null),n=e.ref("create"),a=e.ref(null),i=e.ref({}),o=e.ref({}),l=e.ref({}),r=e.ref(!1),s=e.ref(!1),d=e.ref(!1),u=e.ref(null),v=e.computed(()=>n.value==="create"),h=e.computed(()=>n.value==="edit"),_=e.computed(()=>n.value==="view"),y=e.computed(()=>u.value!==null),f=e.computed(()=>{const w=i.value,$=o.value,T=new Set([...Object.keys(w),...Object.keys($)]);for(const F of T)if(!Object.is(w[F],$[F]))if(typeof w[F]=="object"||typeof $[F]=="object"){if(JSON.stringify(w[F])!==JSON.stringify($[F]))return!0}else return!0;return!1});function m(w,$){for(const T of Object.keys(w))delete w[T];Object.assign(w,$)}function B(){m(i.value,{}),m(o.value,{}),l.value={},r.value=!1,s.value=!1,d.value=!1,u.value=null,a.value=null}function b(w,$={}){t.value=w,n.value="create",a.value=null,m(i.value,$),m(o.value,$),l.value={},u.value=null}async function g(w,$,T="edit"){t.value=w,n.value=T,a.value=$,r.value=!0,u.value=null,l.value={};try{const M=await x().get(`/${w}/read`,{params:{id:$}});m(i.value,M.data),m(o.value,M.data)}catch(F){throw u.value=F instanceof Error?F:new Error(String(F)),F}finally{r.value=!1}}function p(w,$){if(i.value[w]=$,l.value[w]){const T={...l.value};delete T[w],l.value=T}}function k(w){l.value={...w}}function V(){l.value={}}async function S(){if(!t.value)throw new Error("useResourceFormStore.save() before slug set");if(s.value)throw new Error("Already saving");s.value=!0,u.value=null,l.value={};try{const w=x(),$=n.value==="create"?`/${t.value}/create`:`/${t.value}/update`,T=n.value==="create"?i.value:{id:a.value,...i.value},M=(await w.post($,T)).id;return a.value=M,m(o.value,{...i.value}),n.value="edit",M}catch(w){throw w instanceof X?l.value={...w.fields}:(w instanceof R||w instanceof Error)&&(u.value=w),w}finally{s.value=!1}}async function C(){if(!t.value||a.value===null)throw new Error("Nothing to delete");if(d.value)throw new Error("Already deleting");d.value=!0,u.value=null;try{await x().post(`/${t.value}/delete`,{id:a.value})}catch(w){throw w instanceof Error&&(u.value=w),w}finally{d.value=!1}}return{slug:t,mode:n,recordId:a,state:i,initial:o,errors:l,loading:r,saving:s,deleting:d,error:u,isCreate:v,isEdit:h,isView:_,isDirty:f,hasError:y,reset:B,prepareCreate:b,load:g,setField:p,setErrors:k,clearErrors:V,save:S,destroy:C}});function oe(){const t=new Map;return{register(n,a){t.set(n,a)},get(n){return t.get(n)??null},has(n){return t.has(n)},list(){return[...t.keys()]},clear(){t.clear()},registerBundle(n){for(const[a,i]of Object.entries(n))t.set(a,i)}}}const q=oe(),W=oe(),Wn=q.register,he=q.get,On=q.has,jn=q.list,Kn=W.register,se=W.get,Gn=W.has,Hn=W.list;function Xn(){q.clear(),W.clear()}function We(t){t.fields&&q.registerBundle(t.fields),t.layouts&&W.registerBundle(t.layouts)}const ye=e.defineComponent({__name:"UnknownField",props:{type:{},name:{}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{variant:"warning"},{title:e.withCtx(()=>[e.createTextVNode("Неизвестный тип поля: "+e.toDisplayString(t.type),1)]),default:e.withCtx(()=>[t.name?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("code",null,e.toDisplayString(t.name),1),a[0]||(a[0]=e.createTextVNode(" — зарегистрируйте field-компонент через ",-1)),e.createElementVNode("code",null,"registerField('"+e.toDisplayString(t.type)+"', YourComponent)",1),a[1]||(a[1]=e.createTextVNode(". ",-1))],64)):e.createCommentVNode("",!0)]),_:1}))}}),_e=e.defineComponent({__name:"FieldRenderer",props:{node:{}},setup(t){const n=t,a=e.computed(()=>he(n.node.type)),i=e.computed(()=>{const{type:o,...l}=n.node;return l});return(o,l)=>a.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value),e.normalizeProps(e.mergeProps({key:0},i.value)),null,16)):(e.openBlock(),e.createBlock(ye,{key:1,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}),O=e.defineComponent({__name:"LayoutRenderer",props:{node:{}},setup(t){const n=t,a=e.computed(()=>{if(n.node.kind==="field")return{kind:"field"};if(n.node.kind==="layout"){const r=se(n.node.type);return r?{kind:"layout",component:r}:{kind:"unknown"}}const l=se(n.node.type);return l?{kind:"layout",component:l}:he(n.node.type)?{kind:"field"}:{kind:"unknown"}}),i=e.computed(()=>{const{type:l,kind:r,...s}=n.node;return s}),o=e.computed(()=>n.node);return(l,r)=>a.value.kind==="layout"&&a.value.component?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value.component),e.normalizeProps(e.mergeProps({key:0},i.value)),null,16)):a.value.kind==="field"?(e.openBlock(),e.createBlock(_e,{key:1,node:o.value},null,8,["node"])):(e.openBlock(),e.createBlock(ye,{key:2,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}),Jn={class:"admin-page admin-resource-form"},Yn={class:"admin-page__hd"},Qn={class:"admin-page__title-wrap"},Zn={class:"admin-page__title"},ea={class:"admin-page__actions"},ta={key:1,class:"admin-resource-form__loading"},na={key:3,class:"admin-resource-form__savebar"},ce=e.defineComponent({__name:"ResourceFormPage",props:{slug:{},id:{default:null},indexRouteName:{default:"admin.home"}},setup(t){const n=t,a=ke(),i=P(),o=U.useRouter(),l=A.provideFormState(a.state,a.errors);e.watch(()=>a.errors,f=>{l.setErrors({...f})});const r=e.computed(()=>i.getResource(n.slug)),s=e.computed(()=>r.value?.fields??[]),d=e.computed(()=>a.isCreate?`Создать: ${r.value?.label??n.slug}`:`${r.value?.label??n.slug}: запись #${n.id}`),u=e.computed(()=>{const f=a.state.status;return typeof f=="string"?f:null}),v=e.computed(()=>{switch(u.value){case"published":return"success";case"review":case"draft":return"warning";case"archived":return"danger";default:return"default"}});e.onMounted(async()=>{i.manifest===null&&await i.load().catch(()=>{}),n.id!==null&&n.id!==void 0?await a.load(n.slug,n.id,"edit").catch(()=>{}):a.prepareCreate(n.slug)}),e.watch(()=>[n.slug,n.id],async([f,m])=>{m!=null?await a.load(f,m,"edit").catch(()=>{}):a.prepareCreate(f)});async function h(){try{const f=await a.save();a.isCreate&&o.push({name:`admin.resource.${n.slug}.edit`,params:{id:f}}).catch(()=>{})}catch{}}async function _(){confirm("Удалить запись?")&&(await a.destroy().catch(()=>{}),a.hasError||o.push({name:n.indexRouteName}).catch(()=>{}))}function y(){a.isDirty&&!confirm("Несохранённые изменения будут потеряны. Продолжить?")||o.push({name:n.indexRouteName}).catch(()=>{})}return(f,m)=>(e.openBlock(),e.createElementBlock("section",Jn,[e.createElementVNode("header",Yn,[e.createElementVNode("div",Qn,[e.createElementVNode("a",{class:"admin-resource-form__back",onClick:y},"← Назад"),e.createElementVNode("h1",Zn,e.toDisplayString(d.value),1),u.value?(e.openBlock(),e.createBlock(e.unref(c.UidBadge),{key:0,variant:v.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.value),1)]),_:1},8,["variant"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ea,[e.createVNode(e.unref(c.UidButton),{variant:"ghost",disabled:e.unref(a).saving||e.unref(a).deleting,onClick:y},{default:e.withCtx(()=>[...m[0]||(m[0]=[e.createTextVNode(" Отмена ",-1)])]),_:1},8,["disabled"]),e.unref(a).isEdit?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"danger",disabled:e.unref(a).saving||e.unref(a).deleting,loading:e.unref(a).deleting,onClick:_},{default:e.withCtx(()=>[...m[1]||(m[1]=[e.createTextVNode(" Удалить ",-1)])]),_:1},8,["disabled","loading"])):e.createCommentVNode("",!0),e.createVNode(e.unref(c.UidButton),{variant:"primary",disabled:e.unref(a).saving||e.unref(a).loading,loading:e.unref(a).saving,onClick:h},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(a).isCreate?"Создать":"Сохранить"),1)]),_:1},8,["disabled","loading"])])]),e.unref(a).hasError?(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{key:0,variant:"danger",class:"admin-resource-form__alert",role:"alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(a).error?.message??"Не удалось сохранить запись"),1)]),_:1})):e.createCommentVNode("",!0),e.unref(a).loading?(e.openBlock(),e.createElementBlock("div",ta,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(6,B=>e.createVNode(e.unref(c.UidSkeleton),{key:B,height:"40px"})),64))])):(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:2,padding:"md",class:"admin-resource-form__body"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,(B,b)=>(e.openBlock(),e.createBlock(O,{key:b,node:B},null,8,["node"]))),128))]),_:1})),e.unref(a).isDirty&&!e.unref(a).loading?(e.openBlock(),e.createElementBlock("div",na,[m[4]||(m[4]=e.createElementVNode("span",{class:"admin-resource-form__savebar-hint"}," Есть несохранённые изменения ",-1)),e.createVNode(e.unref(c.UidButton),{variant:"ghost",size:"sm",onClick:y},{default:e.withCtx(()=>[...m[2]||(m[2]=[e.createTextVNode("Отмена",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{variant:"primary",size:"sm",loading:e.unref(a).saving,disabled:e.unref(a).saving,onClick:h},{default:e.withCtx(()=>[...m[3]||(m[3]=[e.createTextVNode(" Сохранить ",-1)])]),_:1},8,["loading","disabled"])])):e.createCommentVNode("",!0)]))}}),j=oe(),aa=j.register,de=j.get,oa=j.has,la=j.list,ra=j.clear,Oe=j.registerBundle,je=e.defineComponent({__name:"UnknownEntry",props:{type:{},name:{}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{variant:"warning"},{title:e.withCtx(()=>[e.createTextVNode("Неизвестный тип infolist-entry: "+e.toDisplayString(t.type),1)]),default:e.withCtx(()=>[a[0]||(a[0]=e.createTextVNode(" Зарегистрируйте через ",-1)),e.createElementVNode("code",null,"registerInfolistEntry('"+e.toDisplayString(t.type)+"', YourComponent)",1),a[1]||(a[1]=e.createTextVNode(". ",-1))]),_:1}))}}),ia={key:1,class:"admin-infolist-rows"},sa={key:2,class:"admin-infolist-cols"},ca={key:3,class:"admin-infolist-section"},da={key:0,class:"admin-infolist-section__hd"},ua={key:0,class:"admin-infolist-section__title"},ma={key:1,class:"admin-infolist-section__description"},fa={class:"admin-infolist-section__body"},pa={key:4,class:"admin-infolist-tabs"},va={class:"admin-infolist-tabs__list",role:"tablist"},ga={class:"admin-infolist-tabs__panel"},Ke=e.defineComponent({__name:"InfolistRenderer",props:{node:{}},setup(t){const n=t,a=new Set(["rows","columns","section","block","tabs"]),i=e.computed(()=>{if(n.node.kind==="entry"){const h=de(n.node.type);return h?{kind:"entry",component:h}:{kind:"unknown"}}if(n.node.kind==="layout")return a.has(n.node.type)?{kind:"layout",layoutType:n.node.type}:{kind:"unknown"};if(a.has(n.node.type))return{kind:"layout",layoutType:n.node.type};const v=de(n.node.type);return v?{kind:"entry",component:v}:{kind:"unknown"}}),o=e.computed(()=>{const{type:v,kind:h,items:_,...y}=n.node;return y}),l=e.computed(()=>n.node.items??[]),r=e.computed(()=>n.node.title??null),s=e.computed(()=>n.node.description??null),d=e.computed(()=>{const v=n.node.active;return typeof v=="number"?v:0}),u=e.computed(()=>n.node.items??[]);return(v,h)=>{const _=e.resolveComponent("InfolistRenderer",!0);return i.value.kind==="entry"?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i.value.component),e.normalizeProps(e.mergeProps({key:0},o.value)),null,16)):i.value.kind==="layout"&&i.value.layoutType==="rows"?(e.openBlock(),e.createElementBlock("div",ia,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(y,f)=>(e.openBlock(),e.createBlock(_,{key:f,node:y},null,8,["node"]))),128))])):i.value.kind==="layout"&&i.value.layoutType==="columns"?(e.openBlock(),e.createElementBlock("div",sa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(y,f)=>(e.openBlock(),e.createElementBlock("div",{key:f,class:"admin-infolist-cols__item",style:e.normalizeStyle({gridColumn:`span ${typeof y.span=="number"?y.span:Math.max(1,Math.floor(12/l.value.length))}`})},[e.createVNode(_,{node:y},null,8,["node"])],4))),128))])):i.value.kind==="layout"&&(i.value.layoutType==="section"||i.value.layoutType==="block")?(e.openBlock(),e.createElementBlock("section",ca,[r.value||s.value?(e.openBlock(),e.createElementBlock("header",da,[r.value?(e.openBlock(),e.createElementBlock("h3",ua,e.toDisplayString(r.value),1)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("p",ma,e.toDisplayString(s.value),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",fa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(y,f)=>(e.openBlock(),e.createBlock(_,{key:f,node:y},null,8,["node"]))),128))])])):i.value.kind==="layout"&&i.value.layoutType==="tabs"?(e.openBlock(),e.createElementBlock("div",pa,[e.createElementVNode("ul",va,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(y,f)=>(e.openBlock(),e.createElementBlock("li",{key:y.key??f,class:e.normalizeClass(["admin-infolist-tabs__tab",{"admin-infolist-tabs__tab--active":f===d.value}])},e.toDisplayString(y.label),3))),128))]),e.createElementVNode("div",ga,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value[d.value]?.items??[],(y,f)=>(e.openBlock(),e.createBlock(_,{key:f,node:y},null,8,["node"]))),128))])])):(e.openBlock(),e.createBlock(je,{key:5,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}}),Be=Symbol("admin.infolist-record");function Ge(t){e.provide(Be,t)}function ka(){const t=e.inject(Be);if(!t)throw new Error("useRecord() called outside of provideRecord() scope");return t}function Y(){return e.inject(Be,null)}const ha={class:"admin-page admin-resource-view"},ya={class:"admin-page__hd"},_a={class:"admin-page__title-wrap"},Ba={class:"admin-page__title"},ba={class:"admin-page__actions"},wa={key:1,class:"admin-resource-view__loading"},He=e.defineComponent({__name:"ResourceViewPage",props:{slug:{},id:{},editRouteName:{default:void 0},indexRouteName:{default:"admin.home"}},setup(t){const n=t,a=ke(),i=P(),o=U.useRouter();Ge(a.state);const l=e.computed(()=>i.getResource(n.slug)),r=e.computed(()=>l.value?.fields??[]),s=e.computed(()=>`${l.value?.label??n.slug}: запись #${n.id}`);e.onMounted(async()=>{i.manifest===null&&await i.load().catch(()=>{}),await a.load(n.slug,n.id,"view").catch(()=>{})}),e.watch(()=>[n.slug,n.id],async([v,h])=>{await a.load(v,h,"view").catch(()=>{})});function d(){if(!n.editRouteName){o.push(`/r/${n.slug}/${n.id}/edit`).catch(()=>{});return}o.push({name:n.editRouteName,params:{id:n.id}}).catch(()=>{})}async function u(){confirm("Удалить запись?")&&(await a.destroy().catch(()=>{}),a.hasError||o.push({name:n.indexRouteName}).catch(()=>{}))}return(v,h)=>(e.openBlock(),e.createElementBlock("section",ha,[e.createElementVNode("header",ya,[e.createElementVNode("div",_a,[e.createElementVNode("h1",Ba,e.toDisplayString(s.value),1)]),e.createElementVNode("div",ba,[e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:d},{default:e.withCtx(()=>[...h[0]||(h[0]=[e.createTextVNode("Редактировать",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{variant:"danger",loading:e.unref(a).deleting,disabled:e.unref(a).deleting,onClick:u},{default:e.withCtx(()=>[...h[1]||(h[1]=[e.createTextVNode(" Удалить ",-1)])]),_:1},8,["loading","disabled"])])]),e.unref(a).hasError?(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{key:0,variant:"danger",class:"admin-resource-view__alert",role:"alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(a).error?.message??"Не удалось загрузить запись"),1)]),_:1})):e.createCommentVNode("",!0),e.unref(a).loading?(e.openBlock(),e.createElementBlock("div",wa,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(8,_=>e.createVNode(e.unref(c.UidSkeleton),{key:_,height:"24px"})),64))])):(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:2,padding:"md",class:"admin-resource-view__body"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,(_,y)=>(e.openBlock(),e.createBlock(Ke,{key:y,node:_},null,8,["node"]))),128))]),_:1}))]))}}),Na={class:"admin-page admin-profile"},Va={class:"admin-page__hd"},Ea={class:"admin-page__title-wrap"},Ca={class:"admin-page__title"},xa={class:"admin-page__count"},$a={class:"admin-profile__layout"},Sa={class:"admin-profile__nav","aria-label":"Profile sections"},Ua=["onClick"],Fa=["data-icon"],Ta={class:"admin-profile__content"},Da={class:"admin-profile__hero"},Aa={class:"admin-profile__hero-text"},Ra={class:"admin-profile__hero-name"},La={class:"admin-profile__hero-meta"},Pa={class:"admin-profile__form"},Ma={class:"admin-profile__card-ft"},Ia={class:"admin-profile__card-hd"},za={key:0,class:"admin-profile__hint"},qa={key:1,class:"admin-profile__hint"},Wa={class:"admin-profile__card-ft"},Oa={class:"admin-profile__hint"},Xe=e.defineComponent({__name:"ProfilePage",props:{title:{default:"Profile"},subtitle:{default:"Личные данные, безопасность, токены"},section:{default:"general"}},emits:["update:section","avatar-replace","two-factor-disable","two-factor-regenerate","save"],setup(t,{emit:n}){const a=t,i=n,o=D(),l=te(),r=ne(),s=[{id:"general",label:"Основное",icon:"user"},{id:"security",label:"Безопасность",icon:"shield"},{id:"tokens",label:"API токены",icon:"key"},{id:"sessions",label:"Сессии",icon:"monitor"}],d=e.ref(a.section);function u(g){d.value=g,i("update:section",g)}const v=e.ref({name:o.user?.name??"",email:o.user?.email??"",locale:r.current,theme:l.current}),h=e.computed(()=>r.available.map(g=>({value:g,label:g.toUpperCase()}))),_=e.computed(()=>l.available.map(g=>({value:g,label:g==="dark"?"Тёмная":g==="light"?"Светлая":g})));function y(){i("save",{...v.value})}function f(){i("avatar-replace")}function m(){i("two-factor-disable")}function B(){i("two-factor-regenerate")}const b=e.computed(()=>!!o.user?.twoFactorEnabled);return(g,p)=>(e.openBlock(),e.createElementBlock("section",Na,[e.createElementVNode("header",Va,[e.createElementVNode("div",Ea,[e.createElementVNode("h1",Ca,e.toDisplayString(t.title),1),e.createElementVNode("div",xa,e.toDisplayString(t.subtitle),1)])]),e.createElementVNode("div",$a,[e.createElementVNode("nav",Sa,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(s,k=>e.createElementVNode("button",{key:k.id,type:"button",class:e.normalizeClass(["admin-profile__nav-item",{"admin-profile__nav-item--active":d.value===k.id}]),onClick:V=>u(k.id)},[e.createElementVNode("span",{class:"admin-profile__nav-icon","data-icon":k.icon},null,8,Fa),e.createElementVNode("span",null,e.toDisplayString(k.label),1)],10,Ua)),64))]),e.createElementVNode("div",Ta,[d.value==="general"?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:0,padding:"md"},{default:e.withCtx(()=>[p[7]||(p[7]=e.createElementVNode("header",{class:"admin-profile__card-hd"},[e.createElementVNode("h3",{class:"admin-profile__card-title"},"Профиль")],-1)),e.createElementVNode("div",Da,[e.createVNode(e.unref(c.UidAvatar),{src:e.unref(o).user?.avatar??void 0,name:e.unref(o).user?.name??"?",size:"lg"},null,8,["src","name"]),e.createElementVNode("div",Aa,[e.createElementVNode("div",Ra,e.toDisplayString(e.unref(o).user?.name??"—"),1),e.createElementVNode("div",La,e.toDisplayString(e.unref(o).user?.email??"—"),1)]),p[5]||(p[5]=e.createElementVNode("div",{style:{flex:"1"}},null,-1)),e.createVNode(e.unref(c.UidButton),{variant:"ghost",size:"sm",onClick:f},{default:e.withCtx(()=>[...p[4]||(p[4]=[e.createTextVNode(" Заменить ",-1)])]),_:1})]),e.createElementVNode("div",Pa,[e.createVNode(e.unref(c.UidInput),{modelValue:v.value.name,"onUpdate:modelValue":p[0]||(p[0]=k=>v.value.name=k),label:"Имя",name:"name"},null,8,["modelValue"]),e.createVNode(e.unref(c.UidInput),{modelValue:v.value.email,"onUpdate:modelValue":p[1]||(p[1]=k=>v.value.email=k),label:"Email",type:"email",name:"email"},null,8,["modelValue"]),e.createVNode(e.unref(c.UidSelect),{modelValue:v.value.locale,"onUpdate:modelValue":p[2]||(p[2]=k=>v.value.locale=k),options:h.value,label:"Язык"},null,8,["modelValue","options"]),e.createVNode(e.unref(c.UidSelect),{modelValue:v.value.theme,"onUpdate:modelValue":p[3]||(p[3]=k=>v.value.theme=k),options:_.value,label:"Тема"},null,8,["modelValue","options"])]),e.createElementVNode("footer",Ma,[e.createVNode(e.unref(c.UidButton),{variant:"primary",onClick:y},{default:e.withCtx(()=>[...p[6]||(p[6]=[e.createTextVNode("Сохранить",-1)])]),_:1})])]),_:1})):d.value==="security"?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:1,padding:"md"},{default:e.withCtx(()=>[e.createElementVNode("header",Ia,[p[8]||(p[8]=e.createElementVNode("h3",{class:"admin-profile__card-title"},"Двухфакторная аутентификация",-1)),e.createVNode(e.unref(c.UidBadge),{variant:b.value?"success":"default"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(b.value?"Включена":"Отключена"),1)]),_:1},8,["variant"])]),b.value?(e.openBlock(),e.createElementBlock("p",za," 2FA включена. У вас остались recovery-коды на случай потери устройства. ")):(e.openBlock(),e.createElementBlock("p",qa," Включите 2FA для дополнительной защиты аккаунта. ")),e.createElementVNode("footer",Wa,[b.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(e.unref(c.UidButton),{variant:"ghost",size:"sm",onClick:B},{default:e.withCtx(()=>[...p[9]||(p[9]=[e.createTextVNode(" Перегенерировать коды ",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{variant:"danger",size:"sm",onClick:m},{default:e.withCtx(()=>[...p[10]||(p[10]=[e.createTextVNode(" Отключить 2FA ",-1)])]),_:1})],64)):e.renderSlot(g.$slots,"enable-2fa",{key:1},()=>[e.createVNode(e.unref(c.UidButton),{variant:"primary",disabled:""},{default:e.withCtx(()=>[...p[11]||(p[11]=[e.createTextVNode(" Включить 2FA (host customize) ",-1)])]),_:1})])])]),_:3})):e.renderSlot(g.$slots,d.value,{key:2,section:d.value},()=>[e.createVNode(e.unref(c.UidCard),{padding:"md"},{default:e.withCtx(()=>[e.createElementVNode("p",Oa," Section «"+e.toDisplayString(d.value)+"» не реализована библиотекой — host-проект подключает её через slot "+e.toDisplayString(d.value)+". ",1)]),_:1})])])])]))}}),K=oe(),ja=K.register,Je=K.get,Ka=K.has,Ga=K.list,Ha=K.clear,Ye=K.registerBundle,Qe=e.defineComponent({__name:"UnknownWidget",props:{type:{}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{variant:"warning"},{title:e.withCtx(()=>[e.createTextVNode("Неизвестный widget-тип: "+e.toDisplayString(t.type),1)]),default:e.withCtx(()=>[a[0]||(a[0]=e.createTextVNode(" Зарегистрируйте через ",-1)),e.createElementVNode("code",null,"registerWidget('"+e.toDisplayString(t.type)+"', YourComponent)",1),a[1]||(a[1]=e.createTextVNode(". ",-1))]),_:1}))}}),Ze=e.defineComponent({__name:"WidgetRenderer",props:{node:{}},setup(t){const n=t,a=e.computed(()=>Je(n.node.type)),i=e.computed(()=>{const{type:o,span:l,...r}=n.node;return r});return(o,l)=>a.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value),e.normalizeProps(e.mergeProps({key:0},i.value)),null,16)):(e.openBlock(),e.createBlock(Qe,{key:1,type:t.node.type},null,8,["type"]))}}),Xa={class:"admin-page admin-dashboard"},Ja={class:"admin-page__hd"},Ya={class:"admin-page__title-wrap"},Qa={class:"admin-page__title"},Za={key:0,class:"admin-page__count"},eo={class:"admin-page__actions"},to={class:"admin-dashboard__grid"},et=e.defineComponent({__name:"DashboardPage",props:{slug:{default:void 0},widgets:{default:void 0},title:{default:void 0},subtitle:{default:void 0}},setup(t){const n=t,a=P(),i=e.computed(()=>!n.slug||!a.manifest?null:a.manifest.dashboards?.find(u=>u.slug===n.slug)??null),o=e.computed(()=>n.widgets?n.widgets:i.value?i.value.widgets??[]:[]),l=e.computed(()=>n.title??i.value?.label??"Dashboard"),r=e.computed(()=>n.subtitle??i.value?.description??null);function s(d){const u=typeof d.span=="number"?d.span:12;return Math.max(1,Math.min(12,u))}return(d,u)=>(e.openBlock(),e.createElementBlock("section",Xa,[e.createElementVNode("header",Ja,[e.createElementVNode("div",Ya,[e.createElementVNode("h1",Qa,e.toDisplayString(l.value),1),r.value?(e.openBlock(),e.createElementBlock("div",Za,e.toDisplayString(r.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",eo,[e.renderSlot(d.$slots,"actions")])]),e.createElementVNode("div",to,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(v,h)=>(e.openBlock(),e.createElementBlock("div",{key:h,class:"admin-dashboard__cell",style:e.normalizeStyle({gridColumn:`span ${s(v)} / span ${s(v)}`})},[e.createVNode(Ze,{node:v},null,8,["node"])],4))),128))])]))}}),tt=e.defineComponent({__name:"StatWidget",props:{title:{default:""},value:{default:0},prefix:{default:""},suffix:{default:""},trend:{default:void 0},precision:{default:0},tone:{default:"neutral"},loading:{type:Boolean,default:!1}},setup(t){const n=t,a={neutral:"primary",positive:"success",negative:"danger",warning:"warning",info:"info"},i=e.computed(()=>a[n.tone]);return(o,l)=>(e.openBlock(),e.createBlock(e.unref(c.UidStat),{title:t.title,value:t.value,prefix:t.prefix,suffix:t.suffix,trend:t.trend,precision:t.precision,tone:i.value,loading:t.loading},null,8,["title","value","prefix","suffix","trend","precision","tone","loading"]))}}),no={key:0,class:"admin-widget__hd"},ao={key:0,class:"admin-widget__title"},oo={key:1,class:"admin-widget__desc"},lo=["viewBox","height","aria-label"],ro=["x","y","width","height","fill","data-label","data-value"],nt=e.defineComponent({__name:"BarChartWidget",props:{title:{default:""},description:{default:""},data:{},accent:{default:"var(--uid-accent)"},height:{default:200}},setup(t){const n=t,a=e.computed(()=>Math.max(1,...n.data.map(o=>o.value))),i=e.computed(()=>{const l=100/Math.max(1,n.data.length);return n.data.map((r,s)=>({label:r.label,value:r.value,x:s*l+l*.1,width:l*.8,heightPct:r.value/a.value*100}))});return(o,l)=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{padding:"md",class:"admin-widget"},{default:e.withCtx(()=>[t.title||t.description?(e.openBlock(),e.createElementBlock("header",no,[t.title?(e.openBlock(),e.createElementBlock("h3",ao,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("p",oo,e.toDisplayString(t.description),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),(e.openBlock(),e.createElementBlock("svg",{class:"admin-widget-bar-chart",viewBox:`0 0 100 ${t.height}`,preserveAspectRatio:"none",height:t.height,width:"100%",role:"img","aria-label":t.title||"Bar chart"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,(r,s)=>(e.openBlock(),e.createElementBlock("rect",{key:s,x:r.x,y:t.height-r.heightPct/100*t.height,width:r.width,height:r.heightPct/100*t.height,fill:t.accent,rx:"1","data-label":r.label,"data-value":r.value},[e.createElementVNode("title",null,e.toDisplayString(r.label)+": "+e.toDisplayString(r.value),1)],8,ro))),128))],8,lo))]),_:1}))}}),io={key:0,class:"admin-widget__hd"},so={class:"admin-widget__title"},co={class:"admin-donut-widget__row"},uo=["aria-label"],mo=["d","fill"],fo={class:"admin-donut-widget__legend"},po={class:"admin-donut-widget__label"},vo={class:"admin-donut-widget__value"},at=e.defineComponent({__name:"DonutChartWidget",props:{title:{default:""},data:{}},setup(t){const n=t,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)"],i=e.computed(()=>n.data.reduce((l,r)=>l+r.value,0)||1),o=e.computed(()=>{let l=0;return n.data.map((r,s)=>{const d=l/i.value*2*Math.PI;l+=r.value;const u=l/i.value*2*Math.PI,v=50,h=60,_=60,y=h+v*Math.cos(d-Math.PI/2),f=_+v*Math.sin(d-Math.PI/2),m=h+v*Math.cos(u-Math.PI/2),B=_+v*Math.sin(u-Math.PI/2),b=u-d>Math.PI?1:0,g=n.data.length===1?`M ${h-v} ${_} a ${v} ${v} 0 1 0 ${v*2} 0 a ${v} ${v} 0 1 0 ${-v*2} 0`:`M ${h} ${_} L ${y} ${f} A ${v} ${v} 0 ${b} 1 ${m} ${B} Z`;return{...r,path:g,color:r.color??a[s%a.length],pct:(r.value/i.value*100).toFixed(1)}})});return(l,r)=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{padding:"md",class:"admin-widget admin-donut-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",io,[e.createElementVNode("h3",so,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",co,[(e.openBlock(),e.createElementBlock("svg",{viewBox:"0 0 120 120",class:"admin-donut-widget__svg",role:"img","aria-label":t.title},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(s,d)=>(e.openBlock(),e.createElementBlock("path",{key:d,d:s.path,fill:s.color},[e.createElementVNode("title",null,e.toDisplayString(s.label)+": "+e.toDisplayString(s.value)+" ("+e.toDisplayString(s.pct)+"%)",1)],8,mo))),128)),r[0]||(r[0]=e.createElementVNode("circle",{cx:"60",cy:"60",r:"30",fill:"var(--uid-surface-raised)"},null,-1))],8,uo)),e.createElementVNode("ul",fo,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(s,d)=>(e.openBlock(),e.createElementBlock("li",{key:d},[e.createElementVNode("span",{class:"admin-donut-widget__dot",style:e.normalizeStyle({background:s.color})},null,4),e.createElementVNode("span",po,e.toDisplayString(s.label),1),e.createElementVNode("span",vo,e.toDisplayString(s.pct)+"%",1)]))),128))])])]),_:1}))}}),go={key:0,class:"admin-widget__hd"},ko={class:"admin-widget__title"},ot=e.defineComponent({__name:"RecentTableWidget",props:{title:{default:""},columns:{},rows:{},emptyText:{default:"Нет данных"}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{padding:"md",class:"admin-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",go,[e.createElementVNode("h3",ko,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createVNode(e.unref(c.UidTable),{columns:t.columns,data:t.rows,"empty-text":t.emptyText},null,8,["columns","data","empty-text"])]),_:1}))}}),ho={key:0,class:"admin-widget__hd"},yo={class:"admin-widget__title"},lt=e.defineComponent({__name:"HeatmapWidget",props:{title:{default:""},data:{},levels:{default:5},color:{default:void 0},gap:{default:2}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{padding:"md",class:"admin-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",ho,[e.createElementVNode("h3",yo,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createVNode(e.unref(c.UidHeatmap),{data:t.data,levels:t.levels,color:t.color,gap:t.gap},null,8,["data","levels","color","gap"])]),_:1}))}}),_o={key:0,class:"admin-widget__hd"},Bo={class:"admin-widget__title"},bo={style:{display:"flex","justify-content":"center"}},rt=e.defineComponent({__name:"GaugeWidget",props:{title:{default:""},value:{default:0},min:{default:0},max:{default:100},size:{default:160},ranges:{default:()=>[]},tone:{default:"neutral"},color:{default:void 0},label:{default:""},suffix:{default:""},precision:{default:0}},setup(t){const n=t,a={neutral:"primary",positive:"success",warning:"warning",negative:"danger"},i=e.computed(()=>a[n.tone]);return(o,l)=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{padding:"md",class:"admin-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",_o,[e.createElementVNode("h3",Bo,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",bo,[e.createVNode(e.unref(c.UidGauge),{value:t.value,min:t.min,max:t.max,size:t.size,ranges:t.ranges,tone:i.value,color:t.color,label:t.label,suffix:t.suffix,precision:t.precision},null,8,["value","min","max","size","ranges","tone","color","label","suffix","precision"])])]),_:1}))}}),wo={key:0,class:"admin-widget__hd"},No={class:"admin-widget__title"},Vo={class:"admin-markdown-widget"},it=e.defineComponent({__name:"MarkdownWidget",props:{title:{default:""},content:{}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{padding:"md",class:"admin-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",wo,[e.createElementVNode("h3",No,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",Vo,e.toDisplayString(t.content),1)]),_:1}))}});function st(){Ye({stat:tt,"bar-chart":nt,"donut-chart":at,"recent-table":ot,heatmap:lt,gauge:rt,markdown:it})}function ct(t){return t.success===!0}function Eo(t){return t.success===!1}function dt(t){const n=St.create({baseURL:t.baseURL,withCredentials:!0,headers:{Accept:"application/json","X-Requested-With":"XMLHttpRequest"}});t.csrfToken&&(n.defaults.headers.common["X-CSRF-TOKEN"]=t.csrfToken),t.locale&&(n.defaults.headers.common["X-Admin-Locale"]=t.locale),n.interceptors.request.use(o=>{const l=Co("XSRF-TOKEN");return l&&o.headers.set("X-XSRF-TOKEN",decodeURIComponent(l)),o}),n.interceptors.response.use(o=>{const l=o.data;if(l&&typeof l=="object"&&"success"in l){if(ct(l))return o.data=l.payload,o;throw ie(o.status,l.payload)}return o},o=>{if(o.response){const l=o.response.status,r=o.response.data?.payload??{errorKey:"unknown",message:o.message},s=ie(l,r);return s instanceof ge&&t.onUnauthenticated?.(),Promise.reject(s)}return Promise.reject(new J(o.message))});const a=(o,l,r)=>n[o](l,r).then(s=>s.data),i=(o,l,r,s)=>n[o](l,r,s).then(d=>d.data);return{raw:n,get:(o,l)=>a("get",o,l),delete:(o,l)=>a("delete",o,l),post:(o,l,r)=>i("post",o,l,r),put:(o,l,r)=>i("put",o,l,r),patch:(o,l,r)=>i("patch",o,l,r),setLocale:o=>{n.defaults.headers.common["X-Admin-Locale"]=o}}}function Co(t){if(typeof document>"u")return null;const n=document.cookie.match(new RegExp("(^|; )"+xo(t)+"=([^;]*)"));return n?n[2]:null}function xo(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Z(t,n){const a=t.permissions?.[n];return typeof a=="string"&&a.length>0?[a]:[]}function $o(t,n){const a=t.permissions?.[n];return typeof a=="string"&&a.length>0?[a]:[]}function So(t){return Array.isArray(t.permission)?t.permission:typeof t.permission=="string"&&t.permission.length>0?[t.permission]:[]}function Uo(t,n){const a=t.slug,i=`/r/${a}`;return[{path:i,name:`admin.resource.${a}.index`,component:n.resourceIndex,meta:{requiresAuth:!0,kind:"resource",slug:a,title:t.label,permissions:Z(t,"view")},props:{slug:a}},{path:`${i}/create`,name:`admin.resource.${a}.create`,component:n.resourceCreate,meta:{requiresAuth:!0,kind:"resource",slug:a,title:`${t.label}: создать`,permissions:Z(t,"create")},props:{slug:a}},{path:`${i}/:id/edit`,name:`admin.resource.${a}.edit`,component:n.resourceEdit,meta:{requiresAuth:!0,kind:"resource",slug:a,title:`${t.label}: редактирование`,permissions:Z(t,"update")},props:o=>({slug:a,id:o.params.id})},{path:`${i}/:id`,name:`admin.resource.${a}.view`,component:n.resourceView,meta:{requiresAuth:!0,kind:"resource",slug:a,title:t.label,permissions:Z(t,"view")},props:o=>({slug:a,id:o.params.id})}]}function Fo(t,n){return{path:`/screens/${t.slug}`,name:`admin.screen.${t.slug}`,component:n.screen,meta:{requiresAuth:!0,kind:"screen",slug:t.slug,title:t.name,permissions:So(t)}}}function To(t,n){return{path:`/settings/${t.slug}`,name:`admin.settings.${t.slug}`,component:n.settings,meta:{requiresAuth:!0,kind:"settings",slug:t.slug,title:t.label,permissions:$o(t,"view")}}}function Do(t,n){if(typeof t.slug!="string"||t.slug.length===0)return null;const a=t.permission,i=Array.isArray(a)?a:typeof a=="string"&&a.length>0?[a]:[];return{path:`/dashboard/${t.slug}`,name:`admin.dashboard.${t.slug}`,component:n.dashboard,meta:{requiresAuth:!0,kind:"dashboard",slug:t.slug,title:t.label??"Dashboard",permissions:i}}}function ut(t,n){if(t===null)return[];const a=[];for(const i of t.resources)a.push(...Uo(i,n));for(const i of t.screens)a.push(Fo(i,n));for(const i of t.settings)a.push(To(i,n));for(const i of t.dashboards){const o=Do(i,n);o&&a.push(o)}return a}function mt(t={}){const n=t.loginRouteName??"admin.login",a=t.forbiddenRouteName??"admin.forbidden",i=t.redirectQueryKey??"redirect";return o=>{if(o.name===n)return!0;const l=D();if(o.meta?.requiresAuth===!0&&!l.isAuthenticated)return{name:n,query:{[i]:o.fullPath}};if(l.isChallengePending)return{name:n,query:{[i]:o.fullPath}};const s=o.meta?.permissions;return Array.isArray(s)&&s.length>0&&!l.hasAnyPermission(s)?{name:a}:!0}}function ft(t={}){const n=t.template,a=t.brand??"",i=t.fallback??"";return o=>{if(typeof document>"u")return;const l=o.meta?.title??i;let r;n?r=n.replace("{title}",l).replace("{brand}",a):l&&a?r=`${l} · ${a}`:r=l||a,document.title=r}}const Ao=["admin.resource.","admin.screen.","admin.settings.","admin.dashboard."];function Ro(t){return typeof t!="string"?!1:Ao.some(n=>t.startsWith(n))}function pt(t){const n=t.base??"/admin",a=t.history??U.createWebHistory(n),i=[{path:"/login",name:"admin.login",component:t.components.login,meta:{kind:"auth",title:"Вход"}},{path:"/",name:"admin.home",component:t.components.home,meta:{requiresAuth:!0,kind:"system",title:"Главная"}},{path:"/forbidden",name:"admin.forbidden",component:t.components.forbidden,meta:{requiresAuth:!0,kind:"system",title:"403 — доступ запрещён"}}];t.components.profile&&i.push({path:"/profile",name:"admin.profile",component:t.components.profile,meta:{requiresAuth:!0,kind:"system",title:"Профиль"}}),t.components.notifications&&i.push({path:"/notifications",name:"admin.notifications",component:t.components.notifications,meta:{requiresAuth:!0,kind:"system",title:"Уведомления"}});const o={path:"/:pathMatch(.*)*",name:"admin.notFound",component:t.components.notFound,meta:{kind:"system",title:"404"}},l=U.createRouter({history:a,routes:[...i,...t.extraRoutes??[],o]});return l.beforeEach(mt(t.authGuard)),l.afterEach(ft(t.titleGuard)),l.replaceManifestRoutes=r=>{const s=l.getRoutes();for(const u of s)Ro(u.name)&&l.removeRoute(u.name);l.hasRoute("admin.notFound")&&l.removeRoute("admin.notFound");const d=ut(r,t.components);for(const u of d)l.addRoute(u);l.addRoute(o)},l}const I=e.defineComponent({__name:"TextField",props:{name:{},label:{default:null},help:{default:null},required:{type:Boolean,default:!1},placeholder:{default:null},inputType:{default:"text"},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},autocomplete:{default:null}},setup(t){const n=t,a=A.useFormState(),i=e.computed(()=>a.getField(n.name)??""),o=e.computed(()=>a.errors[n.name]?.[0]);function l(r){a.setField(n.name,r)}return(r,s)=>(e.openBlock(),e.createBlock(e.unref(c.UidInput),{"model-value":i.value,type:t.inputType,label:t.label??void 0,hint:t.help??void 0,error:o.value,placeholder:t.placeholder??void 0,required:t.required,disabled:t.disabled,readonly:t.readonly,name:t.name,autocomplete:t.autocomplete??void 0,"onUpdate:modelValue":l},null,8,["model-value","type","label","hint","error","placeholder","required","disabled","readonly","name","autocomplete"]))}}),vt=e.defineComponent({__name:"TextAreaField",props:{name:{},label:{default:null},help:{default:null},required:{type:Boolean,default:!1},placeholder:{default:null},rows:{default:4},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1}},setup(t){const n=t,a=A.useFormState(),i=e.computed(()=>a.getField(n.name)??""),o=e.computed(()=>a.errors[n.name]?.[0]);function l(r){a.setField(n.name,r)}return(r,s)=>(e.openBlock(),e.createBlock(e.unref(c.UidFormField),{label:t.label??void 0,hint:t.help??void 0,error:o.value,required:t.required,disabled:t.disabled},{default:e.withCtx(()=>[e.createVNode(e.unref(c.UidTextarea),{"model-value":i.value,rows:t.rows,placeholder:t.placeholder??void 0,disabled:t.disabled,readonly:t.readonly,name:t.name,"onUpdate:modelValue":l},null,8,["model-value","rows","placeholder","disabled","readonly","name"])]),_:1},8,["label","hint","error","required","disabled"]))}}),gt=e.defineComponent({__name:"NumberField",props:{name:{},label:{default:null},help:{default:null},required:{type:Boolean,default:!1},placeholder:{default:null},min:{default:null},max:{default:null},step:{default:null},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1}},setup(t){const n=t,a=A.useFormState(),i=e.computed(()=>{const r=a.getField(n.name);return r==null||r===""?null:typeof r=="number"?r:Number(r)}),o=e.computed(()=>a.errors[n.name]?.[0]);function l(r){a.setField(n.name,r)}return(r,s)=>(e.openBlock(),e.createBlock(e.unref(c.UidFormField),{label:t.label??void 0,hint:t.help??void 0,error:o.value,required:t.required,disabled:t.disabled},{default:e.withCtx(()=>[e.createVNode(e.unref(c.UidNumberInput),{"model-value":i.value,min:t.min??void 0,max:t.max??void 0,step:t.step??void 0,placeholder:t.placeholder??void 0,disabled:t.disabled,readonly:t.readonly,name:t.name,"onUpdate:modelValue":l},null,8,["model-value","min","max","step","placeholder","disabled","readonly","name"])]),_:1},8,["label","hint","error","required","disabled"]))}}),kt=e.defineComponent({__name:"SelectField",props:{name:{},options:{},label:{default:null},help:{default:null},required:{type:Boolean,default:!1},placeholder:{default:null},disabled:{type:Boolean,default:!1},searchable:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},size:{default:"md"}},setup(t){const n=t,a=A.useFormState(),i=e.computed(()=>{const r=a.getField(n.name);return r==null||r===""?null:r}),o=e.computed(()=>a.errors[n.name]?.[0]);function l(r){a.setField(n.name,r)}return(r,s)=>(e.openBlock(),e.createBlock(e.unref(c.UidFormField),{label:t.label??void 0,hint:t.help??void 0,error:o.value,required:t.required,disabled:t.disabled},{default:e.withCtx(()=>[e.createVNode(e.unref(c.UidSelect),{"model-value":i.value,options:t.options,placeholder:t.placeholder??void 0,disabled:t.disabled,searchable:t.searchable,clearable:t.clearable,size:t.size,"onUpdate:modelValue":l},null,8,["model-value","options","placeholder","disabled","searchable","clearable","size"])]),_:1},8,["label","hint","error","required","disabled"]))}}),ue=e.defineComponent({__name:"CheckboxField",props:{name:{},label:{default:null},help:{default:null},required:{type:Boolean,default:!1},inlineLabel:{default:null},disabled:{type:Boolean,default:!1}},setup(t){const n=t,a=A.useFormState(),i=e.computed(()=>!!a.getField(n.name)),o=e.computed(()=>a.errors[n.name]?.[0]);function l(r){a.setField(n.name,r)}return(r,s)=>(e.openBlock(),e.createBlock(e.unref(c.UidFormField),{label:t.label??void 0,hint:t.help??void 0,error:o.value,required:t.required,disabled:t.disabled},{default:e.withCtx(()=>[e.createVNode(e.unref(c.UidCheckbox),{"model-value":i.value,disabled:t.disabled,name:t.name,"onUpdate:modelValue":l},{default:e.withCtx(()=>[t.inlineLabel?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(t.inlineLabel),1)],64)):e.createCommentVNode("",!0)]),_:1},8,["model-value","disabled","name"])]),_:1},8,["label","hint","error","required","disabled"]))}}),ee=e.defineComponent({__name:"DateField",props:{name:{},label:{default:null},help:{default:null},required:{type:Boolean,default:!1},inputType:{default:"date"},min:{default:null},max:{default:null},disabled:{type:Boolean,default:!1}},setup(t){const n=t,a=A.useFormState(),i=e.computed(()=>{const r=a.getField(n.name);return r==null||r===""?null:String(r)}),o=e.computed(()=>a.errors[n.name]?.[0]);function l(r){a.setField(n.name,r)}return(r,s)=>(e.openBlock(),e.createBlock(e.unref(c.UidFormField),{label:t.label??void 0,hint:t.help??void 0,error:o.value,required:t.required,disabled:t.disabled},{default:e.withCtx(()=>[e.createVNode(e.unref(c.UidDatePicker),{"model-value":i.value,min:t.min??void 0,max:t.max??void 0,disabled:t.disabled,name:t.name,"onUpdate:modelValue":l},null,8,["model-value","min","max","disabled","name"])]),_:1},8,["label","hint","error","required","disabled"]))}}),ht=e.defineComponent({__name:"RowsLayout",props:{items:{},gap:{default:"var(--uid-space-md)"}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidStack),{direction:"column",gap:t.gap,align:"stretch"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(i,o)=>(e.openBlock(),e.createBlock(O,{key:o,node:i},null,8,["node"]))),128))]),_:1},8,["gap"]))}}),yt=e.defineComponent({__name:"ColumnsLayout",props:{items:{},gap:{default:"var(--uid-space-md)"},cols:{default:12}},setup(t){const n=t,a=e.computed(()=>n.items.length===0?n.cols:Math.max(1,Math.floor(n.cols/n.items.length)));function i(o){const l=o.span;return typeof l=="number"&&l>0?Math.min(l,n.cols):a.value}return(o,l)=>(e.openBlock(),e.createBlock(e.unref(c.UidGrid),{cols:t.cols,gap:t.gap},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(r,s)=>(e.openBlock(),e.createElementBlock("div",{key:s,class:"admin-columns__item",style:e.normalizeStyle({gridColumn:`span ${i(r)} / span ${i(r)}`})},[e.createVNode(O,{node:r},null,8,["node"])],4))),128))]),_:1},8,["cols","gap"]))}}),Lo={key:0,class:"admin-section__header"},Po={key:0,class:"admin-section__title"},Mo={key:1,class:"admin-section__description"},Io={class:"admin-section__body"},me=e.defineComponent({__name:"SectionLayout",props:{items:{},title:{default:null},description:{default:null}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{padding:"md",class:"admin-section"},{default:e.withCtx(()=>[t.title||t.description?(e.openBlock(),e.createElementBlock("header",Lo,[t.title?(e.openBlock(),e.createElementBlock("h3",Po,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("p",Mo,e.toDisplayString(t.description),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Io,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(i,o)=>(e.openBlock(),e.createBlock(O,{key:o,node:i},null,8,["node"]))),128))])]),_:1}))}}),_t=e.defineComponent({__name:"TabsLayout",props:{items:{},active:{default:0}},emits:["update:active"],setup(t,{emit:n}){const a=t,i=n;function o(s,d){return s.key??d}const l=e.ref(a.active??o(a.items[0]??{},0));function r(s){l.value=s,i("update:active",s)}return(s,d)=>(e.openBlock(),e.createBlock(e.unref(c.UidTabs),{"model-value":l.value,"onUpdate:modelValue":r},{list:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(u,v)=>(e.openBlock(),e.createBlock(e.unref(c.UidTab),{key:o(u,v),value:o(u,v)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.label),1)]),_:2},1032,["value"]))),128))]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(u,v)=>(e.openBlock(),e.createBlock(e.unref(c.UidTabPanel),{key:`panel-${o(u,v)}`,value:o(u,v)},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.items,(h,_)=>(e.openBlock(),e.createBlock(O,{key:_,node:h},null,8,["node"]))),128))]),_:2},1032,["value"]))),128))]),_:1},8,["model-value"]))}});function Bt(){We({fields:{text:I,email:I,url:I,password:I,tel:I,search:I,textarea:vt,number:gt,select:kt,checkbox:ue,switcher:ue,date:ee,datetime:ee,time:ee},layouts:{rows:ht,columns:yt,section:me,block:me,tabs:_t}})}const bt=e.defineComponent({__name:"TextEntry",props:{name:{default:""},label:{default:""},value:{default:void 0},placeholder:{default:"—"},mono:{type:Boolean,default:!1}},setup(t){const n=t,a=Y(),i=e.computed(()=>{let o=n.value;return o===void 0&&a&&n.name&&(o=a[n.name]),o==null||o===""?n.placeholder:String(o)});return(o,l)=>(e.openBlock(),e.createElementBlock("span",{class:e.normalizeClass(["admin-infolist-text",t.mono?"admin-infolist-text--mono":""])},e.toDisplayString(i.value),3))}}),zo={key:1,class:"admin-infolist-text"},wt=e.defineComponent({__name:"BadgeEntry",props:{name:{default:""},label:{default:""},value:{default:void 0},map:{default:()=>({})},variant:{default:void 0}},setup(t){const n=t,a=Y(),i=e.computed(()=>{let l=n.value;return l===void 0&&a&&n.name&&(l=a[n.name]),l==null?"":String(l)}),o=e.computed(()=>n.variant?n.variant:n.map[i.value]??"default");return(l,r)=>i.value?(e.openBlock(),e.createBlock(e.unref(c.UidBadge),{key:0,variant:o.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value),1)]),_:1},8,["variant"])):(e.openBlock(),e.createElementBlock("span",zo,"—"))}}),qo=["data-icon"],Wo={key:0},Nt=e.defineComponent({__name:"IconEntry",props:{name:{default:""},label:{default:""},value:{type:[Boolean,null],default:void 0},trueIcon:{default:"check-circle-2"},falseIcon:{default:"circle"},trueLabel:{default:""},falseLabel:{default:""}},setup(t){const n=t,a=Y(),i=e.computed(()=>{let r=n.value;return r===void 0&&a&&n.name&&(r=a[n.name]),!!r}),o=e.computed(()=>i.value?n.trueLabel:n.falseLabel),l=e.computed(()=>i.value?n.trueIcon:n.falseIcon);return(r,s)=>(e.openBlock(),e.createElementBlock("span",{class:e.normalizeClass(["admin-infolist-icon",i.value?"admin-infolist-icon--on":"admin-infolist-icon--off"])},[e.createElementVNode("span",{class:"admin-infolist-icon__glyph","data-icon":l.value},null,8,qo),o.value?(e.openBlock(),e.createElementBlock("span",Wo,e.toDisplayString(o.value),1)):e.createCommentVNode("",!0)],2))}}),Oo={key:1,class:"admin-infolist-text"},fe=e.defineComponent({__name:"KeyValueEntry",props:{name:{default:""},label:{default:""},value:{default:void 0}},setup(t){const n=t,a=Y(),i=e.computed(()=>{let l=n.value;return l===void 0&&a&&n.name&&(l=a[n.name]),l==null?[]:typeof l!="object"?[]:Object.entries(l)});function o(l){return l==null?"—":typeof l=="object"?JSON.stringify(l):String(l)}return(l,r)=>i.value.length>0?(e.openBlock(),e.createBlock(e.unref(c.UidDescriptionList),{key:0,direction:"vertical",columns:1},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,([s,d])=>(e.openBlock(),e.createBlock(e.unref(c.UidDescriptionItem),{key:s,label:s},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o(d)),1)]),_:2},1032,["label"]))),128))]),_:1})):(e.openBlock(),e.createElementBlock("span",Oo,"—"))}});function Vt(){Oe({text:bt,badge:wt,icon:Nt,keyvalue:fe,"key-value":fe})}function jo(t,n={}){const a=n.pages??{},i=n.base??Ko(t.baseUrl)??"/admin",o=dt({baseURL:t.apiUrl,csrfToken:t.csrf});we(o);const l=e.createApp(Fe),r=L.createPinia();l.use(r),D().hydrate(t),ne().hydrate(t),te().hydrate(t),ae().hydrate(t),Bt(),st(),Vt();const s=pt({base:i,history:n.router?.history??U.createWebHistory(i),components:{login:a.login??Ie,home:a.home??Te,forbidden:a.forbidden??De,notFound:a.notFound??Ae,profile:a.profile??Xe,resourceIndex:a.resourceIndex??qe,resourceCreate:a.resourceCreate??ce,resourceEdit:a.resourceEdit??ce,resourceView:a.resourceView??He,dashboard:a.dashboard??et,settings:a.settings??Re,screen:a.screen??Le},extraRoutes:n.router?.extraRoutes,authGuard:n.router?.authGuard,titleGuard:n.router?.titleGuard});if(l.use(s),!n.skipManifestLoad){const d=P(),u=D(),v=()=>{d.load().then(h=>{s.replaceManifestRoutes(h)}).catch(h=>{typeof console<"u"&&console.error("[laravel-admin] manifest load failed:",h)})};u.isAuthenticated&&v(),e.watch(()=>u.user,(h,_)=>{h&&!_&&v()})}return n.onAppCreated?.(l),{app:l,router:s,client:o}}function Ko(t){if(!t)return null;try{return new URL(t).pathname||"/admin"}catch{return t.startsWith("/")?t:null}}async function Go(t={}){const n=Et();if(n)return n;if(t.client)try{const a=t.xhrUrl??"/system/bootstrap";return await t.client.get(a)}catch(a){if(a instanceof J)return null;throw a}return null}function Et(){return typeof window>"u"?null:window.__ADMIN_BOOTSTRAP__??null}function Ho(){return typeof document>"u"?null:document.querySelector('meta[name="csrf-token"]')?.getAttribute("content")??null}const Xo={class:"admin-notifs__hd"},Jo={class:"admin-notifs__title"},Yo={key:0,class:"admin-notifs__count"},Qo={class:"admin-notifs__list"},Zo={key:0,class:"admin-notifs__empty"},el={key:1,class:"admin-notifs__empty"},tl=["onClick"],nl=["data-kind"],al={class:"admin-notifs__body"},ol={class:"admin-notifs__row1"},ll={key:0,class:"admin-notifs__title-strong"},rl={key:1,class:"admin-notifs__title-soft"},il={class:"admin-notifs__time"},sl={key:0,class:"admin-notifs__text"},cl=["onClick"],dl=e.defineComponent({__name:"NotificationsDrawer",props:{open:{type:Boolean}},emits:["update:open","select-item"],setup(t,{emit:n}){const a=t,i=n,o=ae();function l(m){i("update:open",m)}e.watch(()=>a.open,async m=>{m&&await o.load(o.lastFilter??"all",1).catch(()=>{})},{immediate:!0});const r=e.computed(()=>o.lastFilter??"all");async function s(m){await o.load(m,1).catch(()=>{})}async function d(){await o.markAllAsRead().catch(()=>{})}async function u(m){i("select-item",m),m.read_at||await o.markAsRead(m.id).catch(()=>{})}async function v(m,B){B.stopPropagation(),await o.destroy(m.id).catch(()=>{})}function h(m){const B=m.data.level;return B==="success"||B==="warning"||B==="danger"?B:"info"}function _(m){return m.data.title??"—"}function y(m){return m.data.body??""}function f(m){if(!m)return"";const B=new Date(m),b=Math.max(0,Date.now()-B.getTime()),g=Math.floor(b/6e4);if(g<1)return"только что";if(g<60)return`${g} мин назад`;const p=Math.floor(g/60);if(p<24)return`${p} ч назад`;const k=Math.floor(p/24);return k<7?`${k} д назад`:B.toLocaleDateString("ru-RU")}return(m,B)=>(e.openBlock(),e.createBlock(e.unref(c.UidDrawer),{"model-value":t.open,side:"right",width:"400px",title:"Уведомления","onUpdate:modelValue":l},{header:e.withCtx(()=>[e.createElementVNode("div",Xo,[e.createElementVNode("h2",Jo,[B[0]||(B[0]=e.createTextVNode(" Уведомления ",-1)),e.unref(o).unreadCount>0?(e.openBlock(),e.createElementBlock("span",Yo," ("+e.toDisplayString(e.unref(o).unreadCount)+") ",1)):e.createCommentVNode("",!0)]),e.unref(o).unreadCount>0?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"ghost",size:"sm",onClick:d},{default:e.withCtx(()=>[...B[1]||(B[1]=[e.createTextVNode(" Прочитать все ",-1)])]),_:1})):e.createCommentVNode("",!0)])]),default:e.withCtx(()=>[e.createVNode(e.unref(c.UidTabs),{"model-value":r.value,"onUpdate:modelValue":s},{list:e.withCtx(()=>[e.createVNode(e.unref(c.UidTab),{value:"all"},{default:e.withCtx(()=>[...B[2]||(B[2]=[e.createTextVNode("Все",-1)])]),_:1}),e.createVNode(e.unref(c.UidTab),{value:"unread"},{default:e.withCtx(()=>[B[3]||(B[3]=e.createTextVNode(" Непрочитанные",-1)),e.unref(o).unreadCount>0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" ("+e.toDisplayString(e.unref(o).unreadCount)+") ",1)],64)):e.createCommentVNode("",!0)]),_:1}),e.createVNode(e.unref(c.UidTab),{value:"read"},{default:e.withCtx(()=>[...B[4]||(B[4]=[e.createTextVNode("Прочитанные",-1)])]),_:1})]),default:e.withCtx(()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(["all","unread","read"],b=>e.createVNode(e.unref(c.UidTabPanel),{key:b,value:b},{default:e.withCtx(()=>[e.createElementVNode("ul",Qo,[e.unref(o).loading?(e.openBlock(),e.createElementBlock("li",Zo," Загрузка… ")):e.unref(o).items.length===0?(e.openBlock(),e.createElementBlock("li",el," Нет уведомлений ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(o).items,g=>(e.openBlock(),e.createElementBlock("li",{key:g.id,class:e.normalizeClass(["admin-notifs__item",`admin-notifs__item--${h(g)}`,{"admin-notifs__item--unread":!g.read_at}]),onClick:p=>u(g)},[e.createElementVNode("span",{class:"admin-notifs__icon","data-kind":h(g)},null,8,nl),e.createElementVNode("div",al,[e.createElementVNode("div",ol,[g.read_at?(e.openBlock(),e.createElementBlock("span",rl,e.toDisplayString(_(g)),1)):(e.openBlock(),e.createElementBlock("strong",ll,e.toDisplayString(_(g)),1)),e.createElementVNode("span",il,e.toDisplayString(f(g.created_at)),1)]),y(g)?(e.openBlock(),e.createElementBlock("p",sl,e.toDisplayString(y(g)),1)):e.createCommentVNode("",!0)]),e.createElementVNode("button",{type:"button",class:"admin-notifs__close","aria-label":"Удалить",onClick:p=>v(g,p)}," × ",8,cl)],10,tl))),128))])]),_:1},8,["value"])),64))]),_:1},8,["model-value"])]),_:1},8,["model-value"]))}}),ul={class:"admin-page admin-import-wizard"},ml={class:"admin-page__hd"},fl={class:"admin-page__title-wrap"},pl={class:"admin-page__title"},vl={class:"admin-page__actions"},gl={key:0,class:"admin-import-wizard__empty"},kl={key:1,class:"admin-import-wizard__mapping"},hl={class:"admin-import-wizard__map-source"},yl={key:0,class:"admin-import-wizard__map-sample"},_l={class:"admin-import-wizard__card-hd"},Bl={key:2,class:"admin-import-wizard__empty"},bl={key:0,class:"admin-import-wizard__empty"},wl={class:"admin-import-wizard__kpi"},Nl={class:"admin-import-wizard__nav"},Vl=e.defineComponent({__name:"ImportWizardPage",props:{title:{default:"Импорт"},fieldOptions:{},headers:{default:()=>[]},preview:{default:()=>[]},previewColumns:{default:()=>[]},progress:{default:null},step:{default:void 0}},emits:["file-uploaded","mapping-submit","run-import","cancel"],setup(t,{emit:n}){const a=t,i=n,o=[{label:"Загрузка",description:"CSV / TSV / XLSX"},{label:"Сопоставление",description:"Колонки файла → поля"},{label:"Предпросмотр",description:"Проверка первых строк"},{label:"Импорт",description:"Запуск + сводка"}],l=e.ref(0),r=e.computed(()=>a.step??l.value);function s(p){a.step===void 0&&(p<0||p>=o.length||(l.value=p))}const d=e.ref([]);function u(p){d.value=p,p.length>0&&i("file-uploaded",p[0].file)}const v=e.ref({});function h(p,k){v.value[p]=k===null||k===""?null:String(k)}function _(){return a.headers.map(p=>({source:p.key,target:v.value[p.key]??null}))}function y(){i("mapping-submit",_()),s(2)}function f(){i("run-import"),s(3)}const m=e.computed(()=>r.value>0),B=e.computed(()=>{switch(r.value){case 0:return d.value.length>0;case 1:return Object.values(v.value).some(p=>p!==null);case 2:return!0;default:return!1}}),b=e.computed(()=>[{value:"",label:"Не импортировать"},...a.fieldOptions]);function g(){i("cancel")}return(p,k)=>(e.openBlock(),e.createElementBlock("section",ul,[e.createElementVNode("header",ml,[e.createElementVNode("div",fl,[e.createElementVNode("h1",pl,e.toDisplayString(t.title),1)]),e.createElementVNode("div",vl,[e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:g},{default:e.withCtx(()=>[...k[2]||(k[2]=[e.createTextVNode("Отмена",-1)])]),_:1})])]),e.createVNode(e.unref(c.UidStepper),{steps:o,current:r.value},null,8,["current"]),r.value===0?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:0,padding:"md",class:"admin-import-wizard__card"},{default:e.withCtx(()=>[k[3]||(k[3]=e.createElementVNode("header",{class:"admin-import-wizard__card-hd"},[e.createElementVNode("h3",null,"1. Загрузите файл"),e.createElementVNode("p",null,"CSV / TSV / XLSX, до 50 MB")],-1)),e.createVNode(e.unref(c.UidFileUpload),{"model-value":d.value,accept:".csv,.tsv,.xlsx","max-size":50*1024*1024,"max-files":1,"primary-text":"Перетащите файл сюда или","secondary-text":"нажмите чтобы выбрать","onUpdate:modelValue":u},null,8,["model-value"])]),_:1})):r.value===1?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:1,padding:"md",class:"admin-import-wizard__card"},{default:e.withCtx(()=>[k[5]||(k[5]=e.createElementVNode("header",{class:"admin-import-wizard__card-hd"},[e.createElementVNode("h3",null,"2. Сопоставьте колонки"),e.createElementVNode("p",null,"Выберите поле ресурса для каждой колонки файла")],-1)),t.headers.length===0?(e.openBlock(),e.createElementBlock("div",gl," Нет данных — host ещё не отдал headers. Загрузите файл сначала. ")):(e.openBlock(),e.createElementBlock("div",kl,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.headers,V=>(e.openBlock(),e.createElementBlock("div",{key:V.key,class:"admin-import-wizard__map-row"},[e.createElementVNode("div",hl,[e.createElementVNode("strong",null,e.toDisplayString(V.label),1),V.sample?(e.openBlock(),e.createElementBlock("span",yl," «"+e.toDisplayString(V.sample)+"» ",1)):e.createCommentVNode("",!0)]),k[4]||(k[4]=e.createElementVNode("span",{class:"admin-import-wizard__map-arrow"},"→",-1)),e.createVNode(e.unref(c.UidSelect),{"model-value":v.value[V.key]??"",options:b.value,placeholder:"Не импортировать","onUpdate:modelValue":S=>h(V.key,S)},null,8,["model-value","options","onUpdate:modelValue"])]))),128))]))]),_:1})):r.value===2?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:2,padding:"md",class:"admin-import-wizard__card"},{default:e.withCtx(()=>[e.createElementVNode("header",_l,[k[6]||(k[6]=e.createElementVNode("h3",null,"3. Предпросмотр",-1)),e.createElementVNode("p",null,"Первые "+e.toDisplayString(t.preview.length)+" строк перед импортом",1)]),t.preview.some(V=>V.__warning)?(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{key:0,variant:"warning",style:{"margin-bottom":"var(--uid-space-md)"}},{default:e.withCtx(()=>[...k[7]||(k[7]=[e.createTextVNode(" Часть строк имеет предупреждения — проверьте перед импортом. ",-1)])]),_:1})):e.createCommentVNode("",!0),t.previewColumns.length>0?(e.openBlock(),e.createBlock(e.unref(c.UidTable),{key:1,columns:t.previewColumns,data:t.preview},null,8,["columns","data"])):(e.openBlock(),e.createElementBlock("div",Bl," Host не передал previewColumns/preview. "))]),_:1})):(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:3,padding:"md",class:"admin-import-wizard__card"},{default:e.withCtx(()=>[k[8]||(k[8]=e.createElementVNode("header",{class:"admin-import-wizard__card-hd"},[e.createElementVNode("h3",null,"4. Импорт")],-1)),t.progress?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[t.progress.total>0?(e.openBlock(),e.createBlock(e.unref(c.UidProgress),{key:0,"model-value":t.progress.created+t.progress.updated+t.progress.errors,max:t.progress.total},null,8,["model-value","max"])):e.createCommentVNode("",!0),e.createElementVNode("div",wl,[e.createVNode(e.unref(c.UidStat),{title:"Создано",value:t.progress.created,tone:"success"},null,8,["value"]),e.createVNode(e.unref(c.UidStat),{title:"Обновлено",value:t.progress.updated,tone:"info"},null,8,["value"]),e.createVNode(e.unref(c.UidStat),{title:"Ошибки",value:t.progress.errors,tone:"danger"},null,8,["value"])])],64)):(e.openBlock(),e.createElementBlock("div",bl," Запускается импорт… "))]),_:1})),e.createElementVNode("footer",Nl,[m.value?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"ghost",onClick:k[0]||(k[0]=V=>s(r.value-1))},{default:e.withCtx(()=>[...k[9]||(k[9]=[e.createTextVNode(" Назад ",-1)])]),_:1})):e.createCommentVNode("",!0),k[13]||(k[13]=e.createElementVNode("span",{style:{flex:"1"}},null,-1)),r.value===0?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:1,variant:"primary",disabled:!B.value,onClick:k[1]||(k[1]=V=>s(1))},{default:e.withCtx(()=>[...k[10]||(k[10]=[e.createTextVNode(" Далее ",-1)])]),_:1},8,["disabled"])):r.value===1?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:2,variant:"primary",disabled:!B.value,onClick:y},{default:e.withCtx(()=>[...k[11]||(k[11]=[e.createTextVNode(" Подтвердить mapping ",-1)])]),_:1},8,["disabled"])):r.value===2?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:3,variant:"primary",onClick:f},{default:e.withCtx(()=>[...k[12]||(k[12]=[e.createTextVNode(" Запустить импорт ",-1)])]),_:1})):e.createCommentVNode("",!0)])]))}}),El={class:"admin-page admin-field-gallery"},Cl={class:"admin-gallery__group-title"},xl={class:"admin-gallery__grid"},$l={class:"admin-gallery__card-hd"},Sl={class:"admin-gallery__card-title"},Ul={class:"admin-gallery__card-type"},Fl={class:"admin-gallery__card-desc"},Tl={class:"admin-gallery__card-demo"},Dl=e.defineComponent({__name:"FieldGalleryPage",setup(t){const n=[{type:"text",group:"Текстовые",title:"Input",description:"Простой текстовый input. type=email/url/password/tel доступны через inputType.",node:{type:"text",name:"demo_text",label:"Заголовок статьи",placeholder:"Например: Введение в Laravel"},initial:{demo_text:"Hello World"}},{type:"textarea",group:"Текстовые",title:"Textarea",description:"Многострочный input с настраиваемым числом rows.",node:{type:"textarea",name:"demo_textarea",label:"Описание",rows:4},initial:{demo_textarea:"Multi-line text..."}},{type:"number",group:"Текстовые",title:"NumberInput",description:"Числовой input. Empty/NaN автоматически конвертируются в null.",node:{type:"number",name:"demo_number",label:"Цена",min:0,max:1e3},initial:{demo_number:42}},{type:"select",group:"Выбор",title:"Select",description:"Single-select с options. Поддерживает searchable + clearable.",node:{type:"select",name:"demo_select",label:"Категория",options:[{value:"frontend",label:"Frontend"},{value:"backend",label:"Backend"},{value:"devops",label:"DevOps"}]},initial:{demo_select:"backend"}},{type:"checkbox",group:"Выбор",title:"Checkbox",description:"Boolean toggle. inlineLabel рядом с боксом.",node:{type:"checkbox",name:"demo_checkbox",label:"Опубликовать",inlineLabel:"Сделать доступным всем"},initial:{demo_checkbox:!0}},{type:"date",group:"Дата/время",title:"DatePicker",description:"date / datetime-local / time через inputType.",node:{type:"date",name:"demo_date",label:"Дата публикации",inputType:"date"},initial:{demo_date:"2026-05-01"}}],a=n.reduce((o,l)=>(o[l.group]||(o[l.group]=[]),o[l.group].push(l),o),{}),i=e.reactive(n.reduce((o,l)=>Object.assign(o,l.initial),{}));return A.provideFormState(i),(o,l)=>(e.openBlock(),e.createElementBlock("section",El,[l[0]||(l[0]=e.createElementVNode("header",{class:"admin-page__hd"},[e.createElementVNode("div",{class:"admin-page__title-wrap"},[e.createElementVNode("h1",{class:"admin-page__title"},"Field Gallery"),e.createElementVNode("div",{class:"admin-page__count"}," Каталог встроенных field-компонентов library + примеры использования ")])],-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(a),(r,s)=>(e.openBlock(),e.createElementBlock("section",{key:s,class:"admin-gallery__group"},[e.createElementVNode("h2",Cl,e.toDisplayString(s),1),e.createElementVNode("div",xl,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r,d=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:d.type+d.title,padding:"md",class:"admin-gallery__card"},{default:e.withCtx(()=>[e.createElementVNode("header",$l,[e.createElementVNode("h3",Sl,e.toDisplayString(d.title),1),e.createElementVNode("code",Ul,"type: "+e.toDisplayString(d.type),1)]),e.createElementVNode("p",Fl,e.toDisplayString(d.description),1),e.createElementVNode("div",Tl,[e.createVNode(_e,{node:d.node},null,8,["node"])])]),_:2},1024))),128))])]))),128))]))}});exports.provideFormState=A.provideFormState;exports.tryUseFormState=A.tryUseFormState;exports.useFormState=A.useFormState;exports.AdminApp=Fe;exports.AdminShell=Ue;exports.AdminSidebar=Se;exports.AdminTopBar=xe;exports.ApiError=R;exports.BadgeEntry=wt;exports.BarChartWidget=nt;exports.CheckboxField=ue;exports.ColumnsLayout=yt;exports.DashboardPage=et;exports.DateField=ee;exports.DonutChartWidget=at;exports.FieldGalleryPage=Dl;exports.FieldRenderer=_e;exports.ForbiddenError=Ve;exports.ForbiddenPage=De;exports.GaugeWidget=rt;exports.HeatmapWidget=lt;exports.HomePage=Te;exports.IconEntry=Nt;exports.ImportWizardPage=Vl;exports.InfolistRenderer=Ke;exports.KeyValueEntry=fe;exports.LayoutRenderer=O;exports.LocaleSwitcher=ve;exports.LoginForm=Pe;exports.LoginPage=Ie;exports.MarkdownWidget=it;exports.NetworkError=J;exports.NotFoundError=Ee;exports.NotFoundPage=Ae;exports.NotificationBell=Ne;exports.NotificationsDrawer=dl;exports.NumberField=gt;exports.ProfilePage=Xe;exports.RecentTableWidget=ot;exports.ResourceFormPage=ce;exports.ResourceIndexPage=qe;exports.ResourceViewPage=He;exports.RowsLayout=ht;exports.SectionLayout=me;exports.SelectField=kt;exports.SettingsPage=Re;exports.StatWidget=tt;exports.TabsLayout=_t;exports.TextAreaField=vt;exports.TextEntry=bt;exports.TextField=I;exports.ThemeToggle=pe;exports.TwoFactorForm=Me;exports.UnauthenticatedError=ge;exports.UnknownEntry=je;exports.UnknownField=ye;exports.UnknownScreenPage=Le;exports.UnknownWidget=Qe;exports.UserMenu=Ce;exports.ValidationError=X;exports.WidgetRenderer=Ze;exports.buildRoutesFromManifest=ut;exports.clearAdminClient=Ut;exports.clearInfolistRegistry=ra;exports.clearRegistry=Xn;exports.clearWidgetRegistry=Ha;exports.createAdminApp=jo;exports.createAdminClient=dt;exports.createAdminRouter=pt;exports.createAuthGuard=mt;exports.createTitleGuard=ft;exports.getAdminClient=x;exports.getField=he;exports.getInfolistEntry=de;exports.getLayout=se;exports.getWidget=Je;exports.hasAdminClient=Ft;exports.hasField=On;exports.hasInfolistEntry=oa;exports.hasLayout=Gn;exports.hasWidget=Ka;exports.isError=Eo;exports.isSuccess=ct;exports.listFields=jn;exports.listInfolistEntries=la;exports.listLayouts=Hn;exports.listWidgets=Ga;exports.loadBootstrap=Go;exports.provideRecord=Ge;exports.readCsrfFromMeta=Ho;exports.readInlineBootstrap=Et;exports.registerBuiltinComponents=Bt;exports.registerBuiltinInfolistEntries=Vt;exports.registerBuiltinWidgets=st;exports.registerComponents=We;exports.registerField=Wn;exports.registerInfolistEntries=Oe;exports.registerInfolistEntry=aa;exports.registerLayout=Kn;exports.registerWidget=ja;exports.registerWidgets=Ye;exports.setAdminClient=we;exports.toApiError=ie;exports.tryUseRecord=Y;exports.useAuthStore=D;exports.useLocaleStore=ne;exports.useManifestStore=P;exports.useMenuStore=$e;exports.useNotificationsStore=ae;exports.useRecord=ka;exports.useResourceFormStore=ke;exports.useResourceIndexStore=ze;exports.useThemeStore=te;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),M=require("pinia"),U=require("vue-router"),c=require("@dskripchenko/ui"),St=require("axios"),R=require("./formState-GlJBphEn.cjs");let Q=null;function Ce(t){Q=t}function x(){if(Q===null)throw new Error("[admin] AdminClient is not registered. Call setAdminClient(...) before using stores.");return Q}function Ut(){Q=null}function Ft(){return Q!==null}const re=M.defineStore("admin-theme",()=>{const t=e.ref("light"),n=e.ref(["light","dark"]),a=e.computed(()=>t.value==="dark");function i(s){t.value=s.theme,n.value=s.availableThemes,r(s.theme)}function o(s){if(!n.value.includes(s))throw new Error(`Theme "${s}" is not available`);t.value=s,r(s)}async function l(s){if(!n.value.includes(s))throw new Error(`Theme "${s}" is not available`);const d=t.value;o(s);try{await x().post("/system/setTheme",{theme:s})}catch(u){throw o(d),u}}function r(s){typeof document<"u"&&document.documentElement&&document.documentElement.setAttribute("data-theme",s)}return{current:t,available:n,isDark:a,hydrate:i,applyLocal:o,setTheme:l}}),Tt=["aria-label","aria-pressed"],Dt=["data-icon"],he=e.defineComponent({__name:"ThemeToggle",setup(t){const n=re(),a=e.computed(()=>n.current==="dark"),i=e.computed(()=>a.value?"sun":"moon"),o=e.computed(()=>a.value?"Переключить на светлую тему":"Переключить на тёмную тему");async function l(){const r=a.value?"light":"dark";await n.setTheme(r)}return(r,s)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"admin-topbar__icon-btn","aria-label":o.value,"aria-pressed":a.value,onClick:l},[e.createElementVNode("span",{class:"admin-topbar__icon","data-icon":i.value},null,8,Dt)],8,Tt))}}),ie=M.defineStore("admin-locale",()=>{const t=e.ref("ru"),n=e.ref(["ru","en"]);function a(r){t.value=r.locale,n.value=r.availableLocales,l(r.locale)}function i(r){if(!n.value.includes(r))throw new Error(`Locale "${r}" is not available`);t.value=r,l(r)}async function o(r){if(!n.value.includes(r))throw new Error(`Locale "${r}" is not available`);const s=t.value;i(r);try{await x().post("/system/setLocale",{locale:r})}catch(d){throw i(s),d}}function l(r){typeof document<"u"&&document.documentElement&&document.documentElement.setAttribute("lang",r);try{x().setLocale(r)}catch{}}return{current:t,available:n,hydrate:a,applyLocal:i,setLocale:o}}),At={type:"button",class:"admin-topbar__icon-btn",style:{width:"auto",padding:"0 8px",gap:"4px","font-size":"12px"},"aria-label":"Сменить локаль"},ye=e.defineComponent({__name:"LocaleSwitcher",setup(t){const n=ie();async function a(i){i!==n.current&&await n.setLocale(i)}return(i,o)=>(e.openBlock(),e.createBlock(e.unref(c.UidMenu),null,{trigger:e.withCtx(()=>[e.createElementVNode("button",At,[o[0]||(o[0]=e.createElementVNode("span",{class:"admin-topbar__icon","data-icon":"globe"},null,-1)),e.createElementVNode("span",null,e.toDisplayString((e.unref(n).current??"").toUpperCase()),1)])]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(n).available,l=>(e.openBlock(),e.createBlock(e.unref(c.UidMenuItem),{key:l,onClick:r=>a(l)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.toUpperCase()),1)]),_:2},1032,["onClick"]))),128))]),_:1}))}}),se=M.defineStore("admin-notifications",()=>{const t=e.ref([]),n=e.ref(0),a=e.ref(!1),i=e.ref("all"),o=e.ref(null),l=e.computed(()=>n.value>0);function r(y){n.value=y.unread_notifications_count}async function s(y="all",_=1){a.value=!0;try{const m=await x().get(`/notifications/list?type=${y}&page=${_}`);t.value=m.data,n.value=m.meta.unread_count,o.value={page:m.meta.page,per_page:m.meta.per_page,total:m.meta.total,last_page:m.meta.last_page},i.value=y}finally{a.value=!1}}async function d(){const _=await x().get("/notifications/unread");n.value=_.count,i.value==="unread"&&(t.value=_.data)}async function u(y){await x().post("/notifications/markAsRead",{id:y});const f=t.value.find(m=>m.id===y);f&&f.read_at===null&&(f.read_at=new Date().toISOString(),n.value=Math.max(0,n.value-1))}async function v(){await x().post("/notifications/markAllAsRead");const _=new Date().toISOString();for(const f of t.value)f.read_at===null&&(f.read_at=_);n.value=0}async function h(y){await x().post("/notifications/destroy",{id:y});const f=t.value.findIndex(m=>m.id===y);if(f!==-1){const m=t.value[f].read_at===null;t.value.splice(f,1),m&&(n.value=Math.max(0,n.value-1))}}return{items:t,unreadCount:n,loading:a,meta:o,lastFilter:i,hasUnread:l,hydrate:r,load:s,loadUnread:d,markAsRead:u,markAllAsRead:v,destroy:h}}),Rt=["title"],xe=e.defineComponent({__name:"NotificationBell",setup(t){const n=se(),a=e.computed(()=>{const i=n.unreadCount;return i<=0?null:i>99?"99+":String(i)});return(i,o)=>(e.openBlock(),e.createBlock(e.unref(U.RouterLink),{to:"/notifications",class:"admin-topbar__icon-btn","aria-label":"Уведомления"},{default:e.withCtx(()=>[o[0]||(o[0]=e.createElementVNode("span",{class:"admin-topbar__icon","data-icon":"bell"},null,-1)),a.value!==null?(e.openBlock(),e.createElementBlock("span",{key:0,class:"admin-topbar__bell-badge",title:`Непрочитанных: ${e.unref(n).unreadCount}`},e.toDisplayString(a.value),9,Rt)):e.createCommentVNode("",!0)]),_:1}))}});class L extends Error{status;errorKey;payload;constructor(n,a){super(a.message??`API error ${n}`),this.name="ApiError",this.status=n,this.errorKey=a.errorKey??"unknown",this.payload=a}}class _e extends L{constructor(n){super(401,n),this.name="UnauthenticatedError"}}class $e extends L{constructor(n){super(403,n),this.name="ForbiddenError"}}class Se extends L{constructor(n){super(404,n),this.name="NotFoundError"}}class Z extends L{fields;constructor(n){super(422,n),this.name="ValidationError",this.fields=n.messages??{}}firstFieldMessage(){for(const n of Object.values(this.fields))if(n.length>0)return n[0];return null}}class ee extends Error{constructor(n="Network error"){super(n),this.name="NetworkError"}}function me(t,n){switch(t){case 401:return new _e(n);case 403:return new $e(n);case 404:return new Se(n);case 422:return new Z(n);default:return new L(t,n)}}const A=M.defineStore("admin-auth",()=>{const t=e.ref(null),n=e.ref([]),a=e.ref(null),i=e.computed(()=>t.value!==null),o=e.computed(()=>a.value!==null);function l(f){t.value=f.user,n.value=f.permissions}function r(f){return n.value.includes("*")||n.value.includes(f)?!0:n.value.some(m=>{if(!m.endsWith(".*"))return!1;const B=m.slice(0,-1);return f.startsWith(B)})}function s(f){return f.some(r)}function d(f){return f.every(r)}async function u(f){const m=x();try{const B=await m.post("/auth/login",f);return B?.user&&(t.value=B.user),Array.isArray(B?.permissions)&&(n.value=B.permissions),a.value=null,"authenticated"}catch(B){if(B instanceof L&&B.errorKey==="two_factor_required"){const b=B.payload.challenge_token;return a.value={challengeToken:typeof b=="string"?b:"",remember:f.remember??!1},"two_factor_required"}throw B}}async function v(f){if(a.value===null)throw new Error("No pending 2FA challenge");const B=await x().post("/auth/twoFactorChallenge",{challenge_token:a.value.challengeToken,code:f});t.value=B.user,a.value=null}async function h(f){if(a.value===null)throw new Error("No pending 2FA challenge");const B=await x().post("/auth/twoFactorRecovery",{challenge_token:a.value.challengeToken,recovery_code:f});return t.value=B.user,a.value=null,{remaining:B.recovery_codes_remaining}}function y(){a.value=null}async function _(){const f=x();try{await f.post("/auth/logout")}finally{t.value=null,n.value=[],a.value=null}}return{user:t,permissions:n,pendingChallenge:a,isAuthenticated:i,isChallengePending:o,hydrate:l,hasPermission:r,hasAnyPermission:s,hasAllPermissions:d,login:u,twoFactorChallenge:v,twoFactorRecovery:h,cancelChallenge:y,logout:_}}),Lt={type:"button",class:"admin-topbar__icon-btn admin-user-menu__trigger","aria-label":"Меню пользователя","aria-haspopup":"menu",style:{width:"auto",padding:"0 4px",gap:"8px"}},Ue=e.defineComponent({__name:"UserMenu",setup(t){const n=A(),a=U.useRouter();async function i(){try{await n.logout()}finally{await a.push({name:"admin.login"})}}function o(){a.push({name:"admin.profile"})}return(l,r)=>(e.openBlock(),e.createBlock(e.unref(c.UidMenu),null,{trigger:e.withCtx(()=>[e.createElementVNode("button",Lt,[e.createVNode(e.unref(c.UidAvatar),{src:e.unref(n).user?.avatar??void 0,name:e.unref(n).user?.name??"?",alt:e.unref(n).user?.name??"User",size:"sm"},null,8,["src","name","alt"])])]),default:e.withCtx(()=>[e.createVNode(e.unref(c.UidMenuItem),{onClick:o},{default:e.withCtx(()=>[...r[0]||(r[0]=[e.createTextVNode("Профиль",-1)])]),_:1}),e.createVNode(e.unref(c.UidMenuSeparator)),e.createVNode(e.unref(c.UidMenuItem),{variant:"danger",onClick:i},{default:e.withCtx(()=>[...r[1]||(r[1]=[e.createTextVNode("Выйти",-1)])]),_:1})]),_:1}))}}),Pt={class:"admin-topbar"},Mt={class:"admin-topbar__breadcrumbs"},It={key:0,class:"sep"},Fe=e.defineComponent({__name:"AdminTopBar",props:{breadcrumbs:{default:()=>[]},showCollapseToggle:{type:Boolean,default:!0}},emits:["toggle-sidebar"],setup(t,{emit:n}){const a=t,i=n,o=e.computed(()=>a.breadcrumbs.length-1);return(l,r)=>(e.openBlock(),e.createElementBlock("header",Pt,[t.showCollapseToggle?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"admin-topbar__icon-btn","aria-label":"Свернуть меню",onClick:r[0]||(r[0]=s=>i("toggle-sidebar"))},[...r[1]||(r[1]=[e.createElementVNode("span",{class:"admin-topbar__icon","data-icon":"panel-left"},null,-1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",Mt,[e.renderSlot(l.$slots,"breadcrumbs",{},()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.breadcrumbs,(s,d)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d},[d>0?(e.openBlock(),e.createElementBlock("span",It,"›")):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(s.to?"a":"span"),{href:typeof s.to=="string"?s.to:void 0,class:e.normalizeClass(d===o.value?"cur":"")},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.label),1)]),_:2},1032,["href","class"]))],64))),128))])]),r[3]||(r[3]=e.createElementVNode("div",{class:"admin-topbar__spacer"},null,-1)),e.renderSlot(l.$slots,"search",{},()=>[r[2]||(r[2]=e.createElementVNode("div",{class:"admin-topbar__search",role:"button",tabindex:"0"},[e.createElementVNode("span",{class:"admin-topbar__icon","data-icon":"search"}),e.createElementVNode("span",null,"Поиск везде…"),e.createElementVNode("kbd",null,"⌘K")],-1))]),e.renderSlot(l.$slots,"actions"),e.createVNode(xe),e.createVNode(he),e.createVNode(ye),e.createVNode(Ue)]))}}),Te=M.defineStore("admin-menu",()=>{const t=e.ref([]),n=e.ref(!1),a=e.ref(null),i=e.ref(!1),o=e.computed(()=>{const u=A(),v=h=>{if(Array.isArray(h.permissions)&&h.permissions.length>0&&!u.hasAnyPermission(h.permissions))return null;const y=(h.children??[]).map(v).filter(_=>_!==null);return{...h,children:y}};return t.value.map(v).filter(h=>h!==null)}),l=e.computed(()=>{const u=new Map;for(const h of o.value){const y=h.group??null;u.has(y)||u.set(y,[]),u.get(y).push(h)}const v=[];for(const[h,y]of u)y.sort((_,f)=>{const m=(_.order??0)-(f.order??0);return m!==0?m:_.label.localeCompare(f.label)}),v.push({group:h,items:y});return v});async function r(u=!1){if(i.value&&!u)return t.value;n.value=!0,a.value=null;try{const h=await x().get("/system/menu");return t.value=Array.isArray(h.items)?h.items:[],i.value=!0,t.value}catch(v){throw a.value=v instanceof Error?v:new Error(String(v)),v}finally{n.value=!1}}function s(u){t.value=u,i.value=!0,a.value=null}function d(){t.value=[],i.value=!1,a.value=null,n.value=!1}return{items:t,loading:n,error:a,isLoaded:i,visibleItems:o,groupedItems:l,load:r,setItems:s,reset:d}}),zt={class:"admin-sidebar-brand"},qt={class:"admin-sidebar-brand__mark"},Wt={key:0,class:"admin-sidebar-brand__name"},Ot={key:0,class:"admin-sidebar-tenant"},jt={class:"admin-sidebar-foot"},Kt={key:0,class:"admin-sidebar-foot__text"},Gt=["href"],De=e.defineComponent({__name:"AdminSidebar",props:{collapsed:{type:Boolean,default:!1},brandName:{default:"Laravel Admin"},brandMark:{default:"L"},tenant:{default:null},version:{default:null},docsUrl:{default:null}},setup(t){const n=Te(),a=U.useRoute(),i=e.computed(()=>n.groupedItems);function o(s){return!!(s.routeName&&a.name===s.routeName||s.url&&a.path===s.url)}function l(s){if(s)return()=>e.h("span",{class:"admin-sidebar__icon","data-icon":s})}function r(s){if(s.routeName)return{name:s.routeName};if(s.url)return s.url}return(s,d)=>(e.openBlock(),e.createBlock(e.unref(c.UidSidebar),{collapsed:t.collapsed},e.createSlots({header:e.withCtx(()=>[e.createElementVNode("div",zt,[e.createElementVNode("div",qt,e.toDisplayString(t.brandMark),1),t.collapsed?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Wt,e.toDisplayString(t.brandName),1))]),t.tenant&&!t.collapsed?(e.openBlock(),e.createElementBlock("div",Ot,[e.createElementVNode("span",null,e.toDisplayString(t.tenant.label),1),e.createElementVNode("b",null,e.toDisplayString(t.tenant.name),1)])):e.createCommentVNode("",!0)]),nav:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,(u,v)=>(e.openBlock(),e.createBlock(e.unref(c.UidSidebarGroup),{key:`grp-${v}`,title:u.group??void 0},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.items,h=>(e.openBlock(),e.createBlock(e.unref(c.UidSidebarItem),{key:h.key,to:r(h),active:o(h),badge:h.badge??void 0},e.createSlots({default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(h.label),1)]),_:2},[h.icon?{name:"icon",fn:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l(h.icon))))]),key:"0"}:void 0]),1032,["to","active","badge"]))),128))]),_:2},1032,["title"]))),128))]),_:2},[t.version||t.docsUrl?{name:"footer",fn:e.withCtx(()=>[e.createElementVNode("div",jt,[t.version?(e.openBlock(),e.createElementBlock("span",Kt,e.toDisplayString(t.version),1)):e.createCommentVNode("",!0),t.docsUrl?(e.openBlock(),e.createElementBlock("a",{key:1,href:t.docsUrl,class:"admin-sidebar-foot__text admin-sidebar-foot__link"}," Docs ",8,Gt)):e.createCommentVNode("",!0)])]),key:"0"}:void 0]),1032,["collapsed"]))}}),Ht={class:"admin-shell-root"},Xt={key:0,class:"admin-impersonation-banner",role:"status"},ue="data-admin-impersonating",Ae=e.defineComponent({__name:"AdminShell",props:{collapsed:{type:Boolean,default:!1},impersonation:{default:null}},emits:["update:collapsed","exit-impersonation"],setup(t,{emit:n}){const a=t,i=n;function o(r){i("update:collapsed",r)}function l(){i("exit-impersonation")}return e.watch(()=>a.impersonation,r=>{typeof document>"u"||(r!==null?document.documentElement.setAttribute(ue,"true"):document.documentElement.removeAttribute(ue))},{immediate:!0}),e.onBeforeUnmount(()=>{typeof document<"u"&&document.documentElement.removeAttribute(ue)}),(r,s)=>(e.openBlock(),e.createElementBlock("div",Ht,[t.impersonation?(e.openBlock(),e.createElementBlock("div",Xt,[e.createElementVNode("span",null,[s[1]||(s[1]=e.createTextVNode(" Вы вошли как ",-1)),e.createElementVNode("b",null,e.toDisplayString(t.impersonation.asName),1),s[2]||(s[2]=e.createTextVNode(" · режим имперсонации ",-1))]),e.createElementVNode("button",{type:"button",class:"admin-impersonation-banner__exit",onClick:l}," Выйти из режима ")])):e.createCommentVNode("",!0),e.createVNode(e.unref(c.UidSidebarLayout),{"model-value":t.collapsed,"onUpdate:modelValue":o},{sidebar:e.withCtx(()=>[e.renderSlot(r.$slots,"sidebar",{},()=>[e.createVNode(De,{collapsed:t.collapsed},null,8,["collapsed"])])]),header:e.withCtx(()=>[e.renderSlot(r.$slots,"topbar",{},()=>[e.createVNode(Fe,{onToggleSidebar:s[0]||(s[0]=d=>o(!t.collapsed))})])]),default:e.withCtx(()=>[e.renderSlot(r.$slots,"default")]),_:3},8,["model-value"])]))}}),Re=e.defineComponent({__name:"AdminApp",setup(t){const n=U.useRoute(),a=e.computed(()=>!(n.meta?.fullscreen===!0||n.meta?.kind==="auth"||n.name==="admin.notFound"));return(i,o)=>{const l=e.resolveComponent("router-view");return a.value?(e.openBlock(),e.createBlock(Ae,{key:0},{default:e.withCtx(()=>[e.createVNode(l)]),_:1})):(e.openBlock(),e.createBlock(l,{key:1}))}}}),I=M.defineStore("admin-manifest",()=>{const t=e.ref(null),n=e.ref(!1),a=e.ref(null),i=e.computed(()=>t.value!==null),o=e.computed(()=>t.value?.version??null),l=e.computed(()=>t.value?.resources??[]),r=e.computed(()=>t.value?.screens??[]),s=e.computed(()=>t.value?.settings??[]),d=e.computed(()=>t.value?.plugins??[]);function u(f){return l.value.find(m=>m.slug===f)??null}function v(f){return r.value.find(m=>m.slug===f)??null}function h(f){return s.value.find(m=>m.slug===f)??null}async function y(f=!1){if(t.value!==null&&!f)return t.value;n.value=!0,a.value=null;try{const B=await x().get("/system/manifest");return t.value=B,B}catch(m){throw a.value=m instanceof Error?m:new Error(String(m)),m}finally{n.value=!1}}function _(){t.value=null,a.value=null,n.value=!1}return{manifest:t,loading:n,error:a,isLoaded:i,version:o,resources:l,screens:r,settings:s,plugins:d,getResource:u,getScreen:v,getSettings:h,load:y,reset:_}}),Jt={class:"admin-home"},Yt={class:"admin-home__title"},Qt={key:0,class:"admin-home__resources"},Zt={class:"admin-home__grid"},en=["onClick"],tn={class:"admin-home__card-label"},nn={class:"admin-home__card-slug"},Le=e.defineComponent({__name:"HomePage",setup(t){const n=I(),a=A(),i=U.useRouter(),o=e.computed(()=>a.user?.name??""),l=e.computed(()=>n.manifest?.resources??[]);return(r,s)=>(e.openBlock(),e.createElementBlock("div",Jt,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-home__hero"},{default:e.withCtx(()=>[e.createElementVNode("h1",Yt,"Добро пожаловать"+e.toDisplayString(o.value?", "+o.value:""),1),s[0]||(s[0]=e.createElementVNode("p",{class:"admin-home__lead"}," Админ-панель готова. Воспользуйтесь сайдбаром или переходите к ресурсам ниже. ",-1))]),_:1}),l.value.length?(e.openBlock(),e.createElementBlock("section",Qt,[s[1]||(s[1]=e.createElementVNode("h2",{class:"admin-home__heading"},"Ресурсы",-1)),e.createElementVNode("ul",Zt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,d=>(e.openBlock(),e.createElementBlock("li",{key:d.slug},[e.createElementVNode("button",{type:"button",class:"admin-home__card",onClick:u=>e.unref(i).push({name:`admin.resource.${d.slug}.index`})},[e.createElementVNode("span",tn,e.toDisplayString(d.label),1),e.createElementVNode("span",nn,e.toDisplayString(d.slug),1)],8,en)]))),128))])])):e.createCommentVNode("",!0)]))}}),an={class:"admin-status-page"},Pe=e.defineComponent({__name:"ForbiddenPage",setup(t){const n=U.useRouter();return(a,i)=>(e.openBlock(),e.createElementBlock("div",an,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[i[2]||(i[2]=e.createElementVNode("h1",{class:"admin-status-page__code"},"403",-1)),i[3]||(i[3]=e.createElementVNode("p",{class:"admin-status-page__message"},"Доступ запрещён.",-1)),e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:i[0]||(i[0]=o=>e.unref(n).replace({name:"admin.home"}))},{default:e.withCtx(()=>[...i[1]||(i[1]=[e.createTextVNode(" На главную ",-1)])]),_:1})]),_:1})]))}}),on={class:"admin-status-page"},Me=e.defineComponent({__name:"NotFoundPage",setup(t){const n=U.useRouter();return(a,i)=>(e.openBlock(),e.createElementBlock("div",on,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[i[2]||(i[2]=e.createElementVNode("h1",{class:"admin-status-page__code"},"404",-1)),i[3]||(i[3]=e.createElementVNode("p",{class:"admin-status-page__message"},"Страница не найдена.",-1)),e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:i[0]||(i[0]=o=>e.unref(n).replace({name:"admin.home"}))},{default:e.withCtx(()=>[...i[1]||(i[1]=[e.createTextVNode(" На главную ",-1)])]),_:1})]),_:1})]))}}),ln={class:"admin-settings-page"},rn={class:"admin-settings-page__title"},sn={key:0,class:"admin-settings-page__hint"},cn={key:1,class:"admin-settings-page__debug"},Ie=e.defineComponent({__name:"SettingsPage",setup(t){const n=U.useRoute(),a=I(),i=e.computed(()=>String(n.params.slug??"")),o=e.computed(()=>a.manifest?.settings?.find(l=>l.slug===i.value)??null);return(l,r)=>(e.openBlock(),e.createElementBlock("div",ln,[e.createVNode(e.unref(c.UidCard),{padding:"lg"},{default:e.withCtx(()=>[e.createElementVNode("h1",rn,e.toDisplayString(o.value?.label??i.value),1),o.value?(e.openBlock(),e.createElementBlock("pre",cn,e.toDisplayString(JSON.stringify(o.value.fields,null,2)),1)):(e.openBlock(),e.createElementBlock("p",sn," Settings «"+e.toDisplayString(i.value)+"» не найдено в manifest'е. ",1))]),_:1})]))}}),dn={class:"admin-status-page"},un={class:"admin-status-page__title"},mn={class:"admin-status-page__hint"},ze=e.defineComponent({__name:"UnknownScreenPage",setup(t){const n=U.useRoute(),a=e.computed(()=>String(n.params.slug??"")),i=e.computed(()=>String(n.meta?.title??a.value));return(o,l)=>(e.openBlock(),e.createElementBlock("div",dn,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[e.createElementVNode("h1",un,e.toDisplayString(i.value),1),e.createElementVNode("p",mn,[e.createTextVNode(" Это заглушка для screen «"+e.toDisplayString(a.value)+"». Передайте свой компонент через ",1),l[0]||(l[0]=e.createElementVNode("code",null,"createAdminApp("+e.toDisplayString("{")+" pages: "+e.toDisplayString("{")+" screen: MyScreen "+e.toDisplayString("}")+" "+e.toDisplayString("}")+")",-1)),l[1]||(l[1]=e.createTextVNode(". ",-1))])]),_:1})]))}}),fn={class:"admin-auth-card__row"},pn=["href"],vn={key:1,style:{"text-align":"center","font-size":"var(--uid-font-size-xs)",color:"var(--uid-text-secondary)","padding-top":"4px"}},gn=["href"],qe=e.defineComponent({__name:"LoginForm",props:{forgotUrl:{default:null},ssoLinkLabel:{default:null},ssoUrl:{default:null}},emits:["success"],setup(t,{emit:n}){const a=n,i=A(),o=e.ref(""),l=e.ref(""),r=e.ref(!1),s=e.ref(!1),d=e.ref(null),u=e.ref({}),v=e.computed(()=>u.value.email?.[0]),h=e.computed(()=>u.value.password?.[0]);async function y(){if(!s.value){s.value=!0,d.value=null,u.value={};try{const _=await i.login({email:o.value,password:l.value,remember:r.value});a("success",_)}catch(_){_ instanceof Z?(u.value=_.fields,d.value=_.firstFieldMessage()):_ instanceof ee?d.value="Нет соединения с сервером":_ instanceof L?d.value=_.message||"Не удалось войти":d.value=_.message}finally{s.value=!1}}}return(_,f)=>(e.openBlock(),e.createElementBlock("form",{class:"admin-auth-card__bd",novalidate:"",onSubmit:e.withModifiers(y,["prevent"])},[d.value?(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{key:0,variant:"danger",class:"admin-auth-card__alert",role:"alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(c.UidInput),{modelValue:o.value,"onUpdate:modelValue":f[0]||(f[0]=m=>o.value=m),type:"email",label:"Email",placeholder:"you@company.com",autocomplete:"username",required:!0,disabled:s.value,error:v.value,name:"email"},null,8,["modelValue","disabled","error"]),e.createVNode(e.unref(c.UidInput),{modelValue:l.value,"onUpdate:modelValue":f[1]||(f[1]=m=>l.value=m),type:"password",label:"Пароль",autocomplete:"current-password",required:!0,disabled:s.value,error:h.value,name:"password"},null,8,["modelValue","disabled","error"]),e.createElementVNode("div",fn,[e.createVNode(e.unref(c.UidCheckbox),{modelValue:r.value,"onUpdate:modelValue":f[2]||(f[2]=m=>r.value=m),disabled:s.value},{default:e.withCtx(()=>[...f[3]||(f[3]=[e.createTextVNode(" Запомнить меня ",-1)])]),_:1},8,["modelValue","disabled"]),t.forgotUrl?(e.openBlock(),e.createElementBlock("a",{key:0,href:t.forgotUrl,class:"admin-auth-card__link"}," Забыли пароль? ",8,pn)):e.createCommentVNode("",!0)]),e.createVNode(e.unref(c.UidButton),{type:"submit",variant:"primary",size:"lg",loading:s.value,disabled:s.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value?"Вход…":"Войти"),1)]),_:1},8,["loading","disabled"]),t.ssoLinkLabel&&t.ssoUrl?(e.openBlock(),e.createElementBlock("div",vn,[f[4]||(f[4]=e.createTextVNode(" или войдите через ",-1)),e.createElementVNode("a",{href:t.ssoUrl,class:"admin-auth-card__link"},e.toDisplayString(t.ssoLinkLabel),9,gn)])):e.createCommentVNode("",!0)],32))}}),kn=["value","disabled","aria-label","onInput","onKeydown"],hn={class:"admin-auth-card__row"},We=e.defineComponent({__name:"TwoFactorForm",emits:["success","cancel"],setup(t,{emit:n}){const a=n,i=A(),o=e.ref("totp"),l=e.ref(["","","","","",""]),r=e.ref(""),s=e.ref([]),d=e.ref(!1),u=e.ref(null),v=e.ref(null),h=e.computed(()=>l.value.join("")),y=e.computed(()=>o.value==="totp"?h.value.length===6:r.value.trim().length>0);function _(k,V){V instanceof HTMLInputElement&&(s.value[k]=V)}function f(k,V){const S=V.target,C=S.value.replace(/\D/g,"").slice(-1);l.value[k]=C,S.value=C,C&&k<l.value.length-1&&e.nextTick(()=>s.value[k+1]?.focus()),h.value.length===l.value.length&&b()}function m(k,V){V.key==="Backspace"&&!l.value[k]&&k>0?e.nextTick(()=>s.value[k-1]?.focus()):V.key==="ArrowLeft"&&k>0?(s.value[k-1]?.focus(),V.preventDefault()):V.key==="ArrowRight"&&k<l.value.length-1&&(s.value[k+1]?.focus(),V.preventDefault())}function B(k){const S=(k.clipboardData?.getData("text")??"").replace(/\D/g,"").slice(0,l.value.length);if(S.length!==0){k.preventDefault();for(let C=0;C<l.value.length;C++)l.value[C]=S[C]??"";e.nextTick(()=>{s.value[Math.min(S.length,l.value.length-1)]?.focus(),S.length===l.value.length&&b()})}}async function b(){if(!(d.value||!y.value)){d.value=!0,u.value=null;try{if(o.value==="totp")await i.twoFactorChallenge(h.value);else{const k=await i.twoFactorRecovery(r.value.trim());v.value=k.remaining}a("success")}catch(k){k instanceof Z?u.value=k.firstFieldMessage()??"Неверный код":k instanceof ee?u.value="Нет соединения с сервером":k instanceof L?u.value=k.message||"Не удалось проверить код":u.value=k.message}finally{d.value=!1}}}function g(){i.cancelChallenge(),a("cancel")}function p(){o.value=o.value==="totp"?"recovery":"totp",u.value=null}return(k,V)=>(e.openBlock(),e.createElementBlock("form",{class:"admin-auth-card__bd",novalidate:"",onSubmit:e.withModifiers(b,["prevent"])},[u.value?(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{key:0,variant:"danger",class:"admin-auth-card__alert",role:"alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.value),1)]),_:1})):e.createCommentVNode("",!0),v.value!==null?(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{key:1,variant:"info",class:"admin-auth-card__alert",role:"status"},{default:e.withCtx(()=>[e.createTextVNode(" Использован recovery-код. Осталось: "+e.toDisplayString(v.value),1)]),_:1})):e.createCommentVNode("",!0),o.value==="totp"?(e.openBlock(),e.createElementBlock("div",{key:2,class:"admin-code-input",onPaste:B},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(S,C)=>(e.openBlock(),e.createElementBlock("input",{key:C,ref_for:!0,ref:w=>_(C,w),value:l.value[C],type:"text",inputmode:"numeric",autocomplete:"one-time-code",maxlength:"1",disabled:d.value,"aria-label":`Цифра ${C+1}`,onInput:w=>f(C,w),onKeydown:w=>m(C,w)},null,40,kn))),128))],32)):(e.openBlock(),e.createBlock(e.unref(c.UidInput),{key:3,modelValue:r.value,"onUpdate:modelValue":V[0]||(V[0]=S=>r.value=S),type:"text",label:"Recovery-код",autocomplete:"one-time-code",disabled:d.value,name:"recovery-code"},null,8,["modelValue","disabled"])),e.createVNode(e.unref(c.UidButton),{type:"submit",variant:"primary",size:"lg",loading:d.value,disabled:d.value||!y.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value?"Проверка…":"Подтвердить"),1)]),_:1},8,["loading","disabled"]),e.createElementVNode("div",hn,[e.createElementVNode("button",{type:"button",class:"admin-auth-card__link",onClick:p},[o.value==="totp"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode("Использовать recovery-код")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode("Вернуться к коду из приложения")],64))]),e.createElementVNode("button",{type:"button",class:"admin-auth-card__link",onClick:g}," Отмена ")])],32))}}),yn={class:"admin-auth-page"},_n={key:0,class:"admin-auth-page__corner"},Bn={class:"admin-auth-card__hd"},bn=["src","alt"],wn={key:1,"aria-hidden":"true"},Nn={key:2},Vn={class:"admin-auth-card__title"},En={class:"admin-auth-card__sub"},Oe=e.defineComponent({__name:"LoginPage",props:{brandName:{default:"Laravel Admin"},brandMark:{default:"L"},brandLogo:{default:null},homeRouteName:{default:"admin.home"},redirectQueryKey:{default:"redirect"},forgotUrl:{default:null},ssoLinkLabel:{default:null},ssoUrl:{default:null},showCornerActions:{type:Boolean,default:!0}},setup(t){const n=t,a=A(),i=U.useRouter(),o=U.useRoute();async function l(){const r=o.query[n.redirectQueryKey];if(typeof r=="string"&&r.length>0&&r.startsWith("/")){await i.push(r);return}await i.push({name:n.homeRouteName})}return e.watch(()=>a.isAuthenticated,r=>{r&&l()}),e.onMounted(()=>{a.isAuthenticated&&l()}),(r,s)=>(e.openBlock(),e.createElementBlock("div",yn,[t.showCornerActions?(e.openBlock(),e.createElementBlock("div",_n,[e.createVNode(he),e.createVNode(ye)])):e.createCommentVNode("",!0),e.createVNode(e.unref(c.UidCard),{class:e.normalizeClass(["admin-auth-card",e.unref(a).isChallengePending?"admin-auth-card--wide":""]),padding:"none"},{default:e.withCtx(()=>[e.createElementVNode("div",Bn,[e.createElementVNode("div",{class:e.normalizeClass(["admin-auth-card__logo",e.unref(a).isChallengePending?"admin-auth-card__logo--accent":""])},[t.brandLogo&&!e.unref(a).isChallengePending?(e.openBlock(),e.createElementBlock("img",{key:0,src:t.brandLogo,alt:t.brandName},null,8,bn)):e.unref(a).isChallengePending?(e.openBlock(),e.createElementBlock("span",wn,"🛡")):(e.openBlock(),e.createElementBlock("span",Nn,e.toDisplayString(t.brandMark),1))],2),e.createElementVNode("div",Vn,[e.unref(a).isChallengePending?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode("Двухфакторная проверка")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(t.brandName),1)],64))]),e.createElementVNode("div",En,[e.unref(a).isChallengePending?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Введите 6-значный код из приложения-аутентификатора ")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode("Войдите, чтобы продолжить работу")],64))])]),e.unref(a).isChallengePending?(e.openBlock(),e.createBlock(We,{key:0,onSuccess:s[0]||(s[0]=()=>{}),onCancel:s[1]||(s[1]=()=>{})})):(e.openBlock(),e.createBlock(qe,{key:1,"forgot-url":t.forgotUrl,"sso-link-label":t.ssoLinkLabel,"sso-url":t.ssoUrl,onSuccess:s[2]||(s[2]=()=>{})},null,8,["forgot-url","sso-link-label","sso-url"]))]),_:1},8,["class"])]))}}),Ee={page:1,per_page:20,total:0,last_page:1},je=M.defineStore("admin-resource-index",()=>{const t=e.ref(null),n=e.ref([]),a=e.ref({...Ee}),i=e.ref(!1),o=e.ref(null),l=e.ref(""),r=e.ref({}),s=e.ref(null),d=e.ref("asc"),u=e.ref(new Set),v=e.computed(()=>!i.value&&o.value===null&&n.value.length===0),h=e.computed(()=>u.value.size),y=e.computed(()=>u.value.size>0),_=e.computed(()=>o.value!==null),f=e.computed(()=>u.value.size===0||n.value.length===0?"none":n.value.every(E=>u.value.has(m(E)))?"all":"mixed");function m(N){return N.id??N.key??""}function B(N){t.value!==N&&(t.value=N,b())}function b(){n.value=[],a.value={...Ee},i.value=!1,o.value=null,l.value="",r.value={},s.value=null,d.value="asc",u.value=new Set}function g(N={}){const E={page:N.page??a.value.page,per_page:N.per_page??a.value.per_page},ne=N.search??l.value;ne&&(E.q=ne);const J=N.sort??s.value;J&&(E.order=[{column:J,direction:N.direction??d.value}]);const xt=N.filters??r.value,de={};for(const[$t,W]of Object.entries(xt))W==null||W===""||(de[$t]=Array.isArray(W)?W.join(","):W);return Object.keys(de).length>0&&(E.filters=de),E}async function p(N={}){if(!t.value)throw new Error("useResourceIndexStore.load() called before setSlug()");i.value=!0,o.value=null;try{const E=x(),ne=g(N),J=await E.post(`/${t.value}/search`,ne);n.value=J.data,a.value=J.meta}catch(E){throw o.value=E instanceof Error?E:new Error(String(E)),E}finally{i.value=!1}}async function k(N){l.value=N,a.value.page=1,await p()}async function V(N,E){E==null||E===""?delete r.value[N]:r.value[N]=E,a.value.page=1,await p()}async function S(){r.value={},a.value.page=1,await p()}async function C(N,E="asc"){s.value=N,d.value=E,await p()}async function w(N){s.value===N?d.value=d.value==="asc"?"desc":"asc":(s.value=N,d.value="asc"),await p()}async function $(N){a.value.page=N,await p()}function T(N){const E=new Set(u.value);E.has(N)?E.delete(N):E.add(N),u.value=E}function F(){if(f.value==="all"){u.value=new Set;return}const N=new Set(u.value);for(const E of n.value)N.add(m(E));u.value=N}function z(){u.value=new Set}function Ct(N){return u.value.has(N)}return{slug:t,items:n,meta:a,loading:i,error:o,search:l,filters:r,sortKey:s,sortDirection:d,selection:u,isEmpty:v,hasError:_,hasSelection:y,selectedCount:h,selectionState:f,setSlug:B,reset:b,load:p,setSearch:k,setFilter:V,clearFilters:S,setSort:C,toggleSort:w,setPage:$,toggleRow:T,toggleAllOnPage:F,clearSelection:z,isSelected:Ct,rowId:m}}),Cn={class:"admin-page admin-resource-index"},xn={class:"admin-page__hd"},$n={class:"admin-page__title-wrap"},Sn={class:"admin-page__title"},Un={key:0,class:"admin-page__count"},Fn={class:"admin-page__actions"},Tn={key:0,class:"admin-bulk-toolbar",role:"toolbar"},Dn={class:"admin-bulk-toolbar__count"},An={key:1,class:"admin-filter-bar"},Rn=["value"],Ln={key:2,class:"admin-resource-index__loading"},Pn={key:5,class:"admin-resource-index__table"},Mn={class:"admin-resource-index__select-header"},In={class:"admin-resource-index__select-overlay"},zn=["onClick"],qn={key:6,class:"admin-resource-index__footer"},Ke=e.defineComponent({__name:"ResourceIndexPage",props:{slug:{},title:{default:null},subtitle:{default:null},createLabel:{default:"Создать"},createRouteName:{default:null}},emits:["bulk-action","row-click"],setup(t,{emit:n}){const a=t,i=n,o=je(),l=I(),r=e.computed(()=>l.getResource(a.slug)),s=e.computed(()=>a.title??r.value?.label??a.slug),d=e.computed(()=>(r.value?.columns??[]).map(g=>{const p=g;return{key:String(p.key??p.name??""),label:String(p.label??p.name??""),sortable:!!p.sortable,align:p.align??"left",width:typeof p.width=="string"?p.width:void 0}}).filter(g=>g.key)),u=e.computed(()=>{const b=o.meta.total;return b===0?"":`${o.items.length} из ${b}`});e.onMounted(async()=>{o.setSlug(a.slug),l.manifest===null&&await l.load().catch(()=>{}),await o.load().catch(()=>{})}),e.watch(()=>a.slug,async(b,g)=>{b!==g&&(o.setSlug(b),await o.load().catch(()=>{}))});async function v(b){await o.toggleSort(b)}async function h(b){await o.setPage(b)}function y(){o.toggleAllOnPage()}function _(b){o.toggleRow(b)}function f(b){i("row-click",b)}function m(b){i("bulk-action",b,[...o.selection])}async function B(){await o.load().catch(()=>{})}return(b,g)=>(e.openBlock(),e.createElementBlock("section",Cn,[e.createElementVNode("header",xn,[e.createElementVNode("div",$n,[e.createElementVNode("h1",Sn,e.toDisplayString(s.value),1),t.subtitle||u.value?(e.openBlock(),e.createElementBlock("div",Un,[t.subtitle?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(t.subtitle),1)],64)):e.createCommentVNode("",!0),t.subtitle&&u.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" · ")],64)):e.createCommentVNode("",!0),u.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(u.value),1)],64)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Fn,[e.renderSlot(b.$slots,"actions"),t.createRouteName?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"primary",onClick:g[0]||(g[0]=p=>b.$router.push({name:t.createRouteName}))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.createLabel),1)]),_:1})):e.createCommentVNode("",!0)])]),e.unref(o).hasSelection?(e.openBlock(),e.createElementBlock("div",Tn,[e.createElementVNode("span",Dn,[g[8]||(g[8]=e.createTextVNode(" Выбрано ",-1)),e.createElementVNode("b",null,e.toDisplayString(e.unref(o).selectedCount),1)]),g[14]||(g[14]=e.createElementVNode("span",{class:"admin-bulk-toolbar__divider"},null,-1)),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:g[1]||(g[1]=p=>m("publish"))},{default:e.withCtx(()=>[...g[9]||(g[9]=[e.createTextVNode("Опубликовать",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:g[2]||(g[2]=p=>m("archive"))},{default:e.withCtx(()=>[...g[10]||(g[10]=[e.createTextVNode("Архивировать",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:g[3]||(g[3]=p=>m("export"))},{default:e.withCtx(()=>[...g[11]||(g[11]=[e.createTextVNode("Экспорт",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"danger",onClick:g[4]||(g[4]=p=>m("delete"))},{default:e.withCtx(()=>[...g[12]||(g[12]=[e.createTextVNode("Удалить",-1)])]),_:1}),g[15]||(g[15]=e.createElementVNode("span",{class:"admin-bulk-toolbar__spacer"},null,-1)),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:e.unref(o).clearSelection},{default:e.withCtx(()=>[...g[13]||(g[13]=[e.createTextVNode(" Снять выделение ",-1)])]),_:1},8,["onClick"])])):(e.openBlock(),e.createElementBlock("div",An,[e.createElementVNode("input",{value:e.unref(o).search,type:"search",placeholder:"Поиск…",class:"admin-filter-bar__search",onKeydown:g[5]||(g[5]=e.withKeys(p=>e.unref(o).setSearch(p.target.value),["enter"]))},null,40,Rn),e.renderSlot(b.$slots,"filters",{filters:e.unref(o).filters,setFilter:e.unref(o).setFilter}),g[17]||(g[17]=e.createElementVNode("span",{class:"admin-filter-bar__spacer"},null,-1)),Object.keys(e.unref(o).filters).length>0?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,size:"sm",variant:"ghost",onClick:e.unref(o).clearFilters},{default:e.withCtx(()=>[...g[16]||(g[16]=[e.createTextVNode(" Сброс ",-1)])]),_:1},8,["onClick"])):e.createCommentVNode("",!0)])),e.unref(o).loading?(e.openBlock(),e.createElementBlock("div",Ln,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(8,p=>e.createVNode(e.unref(c.UidSkeleton),{key:p,height:"40px"})),64))])):e.unref(o).hasError?(e.openBlock(),e.createBlock(e.unref(c.UidErrorState),{key:3,title:"Не удалось загрузить данные",description:e.unref(o).error?.message??"Попробуйте обновить страницу.",class:"admin-resource-index__state"},{actions:e.withCtx(()=>[e.createVNode(e.unref(c.UidButton),{variant:"primary",onClick:B},{default:e.withCtx(()=>[...g[18]||(g[18]=[e.createTextVNode("Обновить",-1)])]),_:1})]),_:1},8,["description"])):e.unref(o).isEmpty?(e.openBlock(),e.createBlock(e.unref(c.UidEmptyState),{key:4,title:"Пока пусто",description:"Создайте первую запись или измените фильтры.",class:"admin-resource-index__state"},{actions:e.withCtx(()=>[t.createRouteName?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"primary",onClick:g[6]||(g[6]=p=>b.$router.push({name:t.createRouteName}))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.createLabel),1)]),_:1})):e.createCommentVNode("",!0)]),_:1})):(e.openBlock(),e.createElementBlock("div",Pn,[e.createElementVNode("div",Mn,[e.createVNode(e.unref(c.UidCheckbox),{"model-value":e.unref(o).selectionState==="all",indeterminate:e.unref(o).selectionState==="mixed","aria-label":"Выделить всё","onUpdate:modelValue":y},null,8,["model-value","indeterminate"])]),e.createVNode(e.unref(c.UidTable),{columns:d.value,data:e.unref(o).items,"sort-key":e.unref(o).sortKey??"","sort-direction":e.unref(o).sortDirection,"onUpdate:sortKey":v},e.createSlots({_:2},[e.renderList(d.value,p=>({name:`cell-${p.key}`,fn:e.withCtx(k=>[e.renderSlot(b.$slots,`cell-${p.key}`,{row:k},()=>[e.createTextVNode(e.toDisplayString(k?.[p.key]),1)])])}))]),1032,["columns","data","sort-key","sort-direction"]),e.createElementVNode("div",In,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(o).items,p=>(e.openBlock(),e.createElementBlock("div",{key:String(e.unref(o).rowId(p)),class:e.normalizeClass(["admin-resource-index__row",{"admin-resource-index__row--selected":e.unref(o).isSelected(e.unref(o).rowId(p))}]),onClick:k=>f(p)},[e.createVNode(e.unref(c.UidCheckbox),{"model-value":e.unref(o).isSelected(e.unref(o).rowId(p)),"aria-label":`Строка ${e.unref(o).rowId(p)}`,"onUpdate:modelValue":k=>_(e.unref(o).rowId(p)),onClick:g[7]||(g[7]=e.withModifiers(()=>{},["stop"]))},null,8,["model-value","aria-label","onUpdate:modelValue"])],10,zn))),128))])])),!e.unref(o).loading&&!e.unref(o).hasError&&!e.unref(o).isEmpty?(e.openBlock(),e.createElementBlock("footer",qn,[e.createVNode(e.unref(c.UidPagination),{"model-value":e.unref(o).meta.page,total:e.unref(o).meta.total,"per-page":e.unref(o).meta.per_page,"onUpdate:modelValue":h},null,8,["model-value","total","per-page"])])):e.createCommentVNode("",!0)]))}}),Be=M.defineStore("admin-resource-form",()=>{const t=e.ref(null),n=e.ref("create"),a=e.ref(null),i=e.ref({}),o=e.ref({}),l=e.ref({}),r=e.ref(!1),s=e.ref(!1),d=e.ref(!1),u=e.ref(null),v=e.computed(()=>n.value==="create"),h=e.computed(()=>n.value==="edit"),y=e.computed(()=>n.value==="view"),_=e.computed(()=>u.value!==null),f=e.computed(()=>{const w=i.value,$=o.value,T=new Set([...Object.keys(w),...Object.keys($)]);for(const F of T)if(!Object.is(w[F],$[F]))if(typeof w[F]=="object"||typeof $[F]=="object"){if(JSON.stringify(w[F])!==JSON.stringify($[F]))return!0}else return!0;return!1});function m(w,$){for(const T of Object.keys(w))delete w[T];Object.assign(w,$)}function B(){m(i.value,{}),m(o.value,{}),l.value={},r.value=!1,s.value=!1,d.value=!1,u.value=null,a.value=null}function b(w,$={}){t.value=w,n.value="create",a.value=null,m(i.value,$),m(o.value,$),l.value={},u.value=null}async function g(w,$,T="edit"){t.value=w,n.value=T,a.value=$,r.value=!0,u.value=null,l.value={};try{const z=await x().get(`/${w}/read`,{params:{id:$}});m(i.value,z.data),m(o.value,z.data)}catch(F){throw u.value=F instanceof Error?F:new Error(String(F)),F}finally{r.value=!1}}function p(w,$){if(i.value[w]=$,l.value[w]){const T={...l.value};delete T[w],l.value=T}}function k(w){l.value={...w}}function V(){l.value={}}async function S(){if(!t.value)throw new Error("useResourceFormStore.save() before slug set");if(s.value)throw new Error("Already saving");s.value=!0,u.value=null,l.value={};try{const w=x(),$=n.value==="create"?`/${t.value}/create`:`/${t.value}/update`,T=n.value==="create"?i.value:{id:a.value,...i.value},z=(await w.post($,T)).id;return a.value=z,m(o.value,{...i.value}),n.value="edit",z}catch(w){throw w instanceof Z?l.value={...w.fields}:(w instanceof L||w instanceof Error)&&(u.value=w),w}finally{s.value=!1}}async function C(){if(!t.value||a.value===null)throw new Error("Nothing to delete");if(d.value)throw new Error("Already deleting");d.value=!0,u.value=null;try{await x().post(`/${t.value}/delete`,{id:a.value})}catch(w){throw w instanceof Error&&(u.value=w),w}finally{d.value=!1}}return{slug:t,mode:n,recordId:a,state:i,initial:o,errors:l,loading:r,saving:s,deleting:d,error:u,isCreate:v,isEdit:h,isView:y,isDirty:f,hasError:_,reset:B,prepareCreate:b,load:g,setField:p,setErrors:k,clearErrors:V,save:S,destroy:C}});function ce(){const t=new Map;return{register(n,a){t.set(n,a)},get(n){return t.get(n)??null},has(n){return t.has(n)},list(){return[...t.keys()]},clear(){t.clear()},registerBundle(n){for(const[a,i]of Object.entries(n))t.set(a,i)}}}const j=ce(),K=ce(),Wn=j.register,be=j.get,On=j.has,jn=j.list,Kn=K.register,fe=K.get,Gn=K.has,Hn=K.list;function Xn(){j.clear(),K.clear()}function Ge(t){t.fields&&j.registerBundle(t.fields),t.layouts&&K.registerBundle(t.layouts)}const we=e.defineComponent({__name:"UnknownField",props:{type:{},name:{}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{variant:"warning"},{title:e.withCtx(()=>[e.createTextVNode("Неизвестный тип поля: "+e.toDisplayString(t.type),1)]),default:e.withCtx(()=>[t.name?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("code",null,e.toDisplayString(t.name),1),a[0]||(a[0]=e.createTextVNode(" — зарегистрируйте field-компонент через ",-1)),e.createElementVNode("code",null,"registerField('"+e.toDisplayString(t.type)+"', YourComponent)",1),a[1]||(a[1]=e.createTextVNode(". ",-1))],64)):e.createCommentVNode("",!0)]),_:1}))}}),Ne=e.defineComponent({__name:"FieldRenderer",props:{node:{}},setup(t){const n=t,a=e.computed(()=>be(n.node.type)),i=e.computed(()=>{const{type:o,...l}=n.node;return l});return(o,l)=>a.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value),e.normalizeProps(e.mergeProps({key:0},i.value)),null,16)):(e.openBlock(),e.createBlock(we,{key:1,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}),G=e.defineComponent({__name:"LayoutRenderer",props:{node:{}},setup(t){const n=t,a=e.computed(()=>{if(n.node.kind==="field")return{kind:"field"};if(n.node.kind==="layout"){const r=fe(n.node.type);return r?{kind:"layout",component:r}:{kind:"unknown"}}const l=fe(n.node.type);return l?{kind:"layout",component:l}:be(n.node.type)?{kind:"field"}:{kind:"unknown"}}),i=e.computed(()=>{const{type:l,kind:r,...s}=n.node;return s}),o=e.computed(()=>n.node);return(l,r)=>a.value.kind==="layout"&&a.value.component?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value.component),e.normalizeProps(e.mergeProps({key:0},i.value)),null,16)):a.value.kind==="field"?(e.openBlock(),e.createBlock(Ne,{key:1,node:o.value},null,8,["node"])):(e.openBlock(),e.createBlock(we,{key:2,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}),Jn={class:"admin-page admin-resource-form"},Yn={class:"admin-page__hd"},Qn={class:"admin-page__title-wrap"},Zn={class:"admin-page__title"},ea={class:"admin-page__actions"},ta={key:1,class:"admin-resource-form__loading"},na={key:3,class:"admin-resource-form__savebar"},pe=e.defineComponent({__name:"ResourceFormPage",props:{slug:{},id:{default:null},indexRouteName:{default:"admin.home"}},setup(t){const n=t,a=Be(),i=I(),o=U.useRouter(),l=R.provideFormState(a.state,a.errors);e.watch(()=>a.errors,f=>{l.setErrors({...f})});const r=e.computed(()=>i.getResource(n.slug)),s=e.computed(()=>r.value?.fields??[]),d=e.computed(()=>a.isCreate?`Создать: ${r.value?.label??n.slug}`:`${r.value?.label??n.slug}: запись #${n.id}`),u=e.computed(()=>{const f=a.state.status;return typeof f=="string"?f:null}),v=e.computed(()=>{switch(u.value){case"published":return"success";case"review":case"draft":return"warning";case"archived":return"danger";default:return"default"}});e.onMounted(async()=>{i.manifest===null&&await i.load().catch(()=>{}),n.id!==null&&n.id!==void 0?await a.load(n.slug,n.id,"edit").catch(()=>{}):a.prepareCreate(n.slug)}),e.watch(()=>[n.slug,n.id],async([f,m])=>{m!=null?await a.load(f,m,"edit").catch(()=>{}):a.prepareCreate(f)});async function h(){try{const f=await a.save();a.isCreate&&o.push({name:`admin.resource.${n.slug}.edit`,params:{id:f}}).catch(()=>{})}catch{}}async function y(){confirm("Удалить запись?")&&(await a.destroy().catch(()=>{}),a.hasError||o.push({name:n.indexRouteName}).catch(()=>{}))}function _(){a.isDirty&&!confirm("Несохранённые изменения будут потеряны. Продолжить?")||o.push({name:n.indexRouteName}).catch(()=>{})}return(f,m)=>(e.openBlock(),e.createElementBlock("section",Jn,[e.createElementVNode("header",Yn,[e.createElementVNode("div",Qn,[e.createElementVNode("a",{class:"admin-resource-form__back",onClick:_},"← Назад"),e.createElementVNode("h1",Zn,e.toDisplayString(d.value),1),u.value?(e.openBlock(),e.createBlock(e.unref(c.UidBadge),{key:0,variant:v.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.value),1)]),_:1},8,["variant"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ea,[e.createVNode(e.unref(c.UidButton),{variant:"ghost",disabled:e.unref(a).saving||e.unref(a).deleting,onClick:_},{default:e.withCtx(()=>[...m[0]||(m[0]=[e.createTextVNode(" Отмена ",-1)])]),_:1},8,["disabled"]),e.unref(a).isEdit?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"danger",disabled:e.unref(a).saving||e.unref(a).deleting,loading:e.unref(a).deleting,onClick:y},{default:e.withCtx(()=>[...m[1]||(m[1]=[e.createTextVNode(" Удалить ",-1)])]),_:1},8,["disabled","loading"])):e.createCommentVNode("",!0),e.createVNode(e.unref(c.UidButton),{variant:"primary",disabled:e.unref(a).saving||e.unref(a).loading,loading:e.unref(a).saving,onClick:h},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(a).isCreate?"Создать":"Сохранить"),1)]),_:1},8,["disabled","loading"])])]),e.unref(a).hasError?(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{key:0,variant:"danger",class:"admin-resource-form__alert",role:"alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(a).error?.message??"Не удалось сохранить запись"),1)]),_:1})):e.createCommentVNode("",!0),e.unref(a).loading?(e.openBlock(),e.createElementBlock("div",ta,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(6,B=>e.createVNode(e.unref(c.UidSkeleton),{key:B,height:"40px"})),64))])):(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:2,padding:"md",class:"admin-resource-form__body"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,(B,b)=>(e.openBlock(),e.createBlock(G,{key:b,node:B},null,8,["node"]))),128))]),_:1})),e.unref(a).isDirty&&!e.unref(a).loading?(e.openBlock(),e.createElementBlock("div",na,[m[4]||(m[4]=e.createElementVNode("span",{class:"admin-resource-form__savebar-hint"}," Есть несохранённые изменения ",-1)),e.createVNode(e.unref(c.UidButton),{variant:"ghost",size:"sm",onClick:_},{default:e.withCtx(()=>[...m[2]||(m[2]=[e.createTextVNode("Отмена",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{variant:"primary",size:"sm",loading:e.unref(a).saving,disabled:e.unref(a).saving,onClick:h},{default:e.withCtx(()=>[...m[3]||(m[3]=[e.createTextVNode(" Сохранить ",-1)])]),_:1},8,["loading","disabled"])])):e.createCommentVNode("",!0)]))}}),H=ce(),aa=H.register,ve=H.get,oa=H.has,la=H.list,ra=H.clear,He=H.registerBundle,Xe=e.defineComponent({__name:"UnknownEntry",props:{type:{},name:{}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{variant:"warning"},{title:e.withCtx(()=>[e.createTextVNode("Неизвестный тип infolist-entry: "+e.toDisplayString(t.type),1)]),default:e.withCtx(()=>[a[0]||(a[0]=e.createTextVNode(" Зарегистрируйте через ",-1)),e.createElementVNode("code",null,"registerInfolistEntry('"+e.toDisplayString(t.type)+"', YourComponent)",1),a[1]||(a[1]=e.createTextVNode(". ",-1))]),_:1}))}}),ia={key:1,class:"admin-infolist-rows"},sa={key:2,class:"admin-infolist-cols"},ca={key:3,class:"admin-infolist-section"},da={key:0,class:"admin-infolist-section__hd"},ua={key:0,class:"admin-infolist-section__title"},ma={key:1,class:"admin-infolist-section__description"},fa={class:"admin-infolist-section__body"},pa={key:4,class:"admin-infolist-tabs"},va={class:"admin-infolist-tabs__list",role:"tablist"},ga={class:"admin-infolist-tabs__panel"},Je=e.defineComponent({__name:"InfolistRenderer",props:{node:{}},setup(t){const n=t,a=new Set(["rows","columns","section","block","tabs"]),i=e.computed(()=>{if(n.node.kind==="entry"){const h=ve(n.node.type);return h?{kind:"entry",component:h}:{kind:"unknown"}}if(n.node.kind==="layout")return a.has(n.node.type)?{kind:"layout",layoutType:n.node.type}:{kind:"unknown"};if(a.has(n.node.type))return{kind:"layout",layoutType:n.node.type};const v=ve(n.node.type);return v?{kind:"entry",component:v}:{kind:"unknown"}}),o=e.computed(()=>{const{type:v,kind:h,items:y,..._}=n.node;return _}),l=e.computed(()=>n.node.items??[]),r=e.computed(()=>n.node.title??null),s=e.computed(()=>n.node.description??null),d=e.computed(()=>{const v=n.node.active;return typeof v=="number"?v:0}),u=e.computed(()=>n.node.items??[]);return(v,h)=>{const y=e.resolveComponent("InfolistRenderer",!0);return i.value.kind==="entry"?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i.value.component),e.normalizeProps(e.mergeProps({key:0},o.value)),null,16)):i.value.kind==="layout"&&i.value.layoutType==="rows"?(e.openBlock(),e.createElementBlock("div",ia,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(_,f)=>(e.openBlock(),e.createBlock(y,{key:f,node:_},null,8,["node"]))),128))])):i.value.kind==="layout"&&i.value.layoutType==="columns"?(e.openBlock(),e.createElementBlock("div",sa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(_,f)=>(e.openBlock(),e.createElementBlock("div",{key:f,class:"admin-infolist-cols__item",style:e.normalizeStyle({gridColumn:`span ${typeof _.span=="number"?_.span:Math.max(1,Math.floor(12/l.value.length))}`})},[e.createVNode(y,{node:_},null,8,["node"])],4))),128))])):i.value.kind==="layout"&&(i.value.layoutType==="section"||i.value.layoutType==="block")?(e.openBlock(),e.createElementBlock("section",ca,[r.value||s.value?(e.openBlock(),e.createElementBlock("header",da,[r.value?(e.openBlock(),e.createElementBlock("h3",ua,e.toDisplayString(r.value),1)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("p",ma,e.toDisplayString(s.value),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",fa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(_,f)=>(e.openBlock(),e.createBlock(y,{key:f,node:_},null,8,["node"]))),128))])])):i.value.kind==="layout"&&i.value.layoutType==="tabs"?(e.openBlock(),e.createElementBlock("div",pa,[e.createElementVNode("ul",va,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(_,f)=>(e.openBlock(),e.createElementBlock("li",{key:_.key??f,class:e.normalizeClass(["admin-infolist-tabs__tab",{"admin-infolist-tabs__tab--active":f===d.value}])},e.toDisplayString(_.label),3))),128))]),e.createElementVNode("div",ga,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value[d.value]?.items??[],(_,f)=>(e.openBlock(),e.createBlock(y,{key:f,node:_},null,8,["node"]))),128))])])):(e.openBlock(),e.createBlock(Xe,{key:5,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}}),Ve=Symbol("admin.infolist-record");function Ye(t){e.provide(Ve,t)}function ka(){const t=e.inject(Ve);if(!t)throw new Error("useRecord() called outside of provideRecord() scope");return t}function te(){return e.inject(Ve,null)}const ha={class:"admin-page admin-resource-view"},ya={class:"admin-page__hd"},_a={class:"admin-page__title-wrap"},Ba={class:"admin-page__title"},ba={class:"admin-page__actions"},wa={key:1,class:"admin-resource-view__loading"},Qe=e.defineComponent({__name:"ResourceViewPage",props:{slug:{},id:{},editRouteName:{default:void 0},indexRouteName:{default:"admin.home"}},setup(t){const n=t,a=Be(),i=I(),o=U.useRouter();Ye(a.state);const l=e.computed(()=>i.getResource(n.slug)),r=e.computed(()=>l.value?.fields??[]),s=e.computed(()=>`${l.value?.label??n.slug}: запись #${n.id}`);e.onMounted(async()=>{i.manifest===null&&await i.load().catch(()=>{}),await a.load(n.slug,n.id,"view").catch(()=>{})}),e.watch(()=>[n.slug,n.id],async([v,h])=>{await a.load(v,h,"view").catch(()=>{})});function d(){if(!n.editRouteName){o.push(`/r/${n.slug}/${n.id}/edit`).catch(()=>{});return}o.push({name:n.editRouteName,params:{id:n.id}}).catch(()=>{})}async function u(){confirm("Удалить запись?")&&(await a.destroy().catch(()=>{}),a.hasError||o.push({name:n.indexRouteName}).catch(()=>{}))}return(v,h)=>(e.openBlock(),e.createElementBlock("section",ha,[e.createElementVNode("header",ya,[e.createElementVNode("div",_a,[e.createElementVNode("h1",Ba,e.toDisplayString(s.value),1)]),e.createElementVNode("div",ba,[e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:d},{default:e.withCtx(()=>[...h[0]||(h[0]=[e.createTextVNode("Редактировать",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{variant:"danger",loading:e.unref(a).deleting,disabled:e.unref(a).deleting,onClick:u},{default:e.withCtx(()=>[...h[1]||(h[1]=[e.createTextVNode(" Удалить ",-1)])]),_:1},8,["loading","disabled"])])]),e.unref(a).hasError?(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{key:0,variant:"danger",class:"admin-resource-view__alert",role:"alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(a).error?.message??"Не удалось загрузить запись"),1)]),_:1})):e.createCommentVNode("",!0),e.unref(a).loading?(e.openBlock(),e.createElementBlock("div",wa,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(8,y=>e.createVNode(e.unref(c.UidSkeleton),{key:y,height:"24px"})),64))])):(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:2,padding:"md",class:"admin-resource-view__body"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,(y,_)=>(e.openBlock(),e.createBlock(Je,{key:_,node:y},null,8,["node"]))),128))]),_:1}))]))}}),Na={class:"admin-page admin-profile"},Va={class:"admin-page__hd"},Ea={class:"admin-page__title-wrap"},Ca={class:"admin-page__title"},xa={class:"admin-page__count"},$a={class:"admin-profile__layout"},Sa={class:"admin-profile__nav","aria-label":"Profile sections"},Ua=["onClick"],Fa=["data-icon"],Ta={class:"admin-profile__content"},Da={class:"admin-profile__hero"},Aa={class:"admin-profile__hero-text"},Ra={class:"admin-profile__hero-name"},La={class:"admin-profile__hero-meta"},Pa={class:"admin-profile__form"},Ma={class:"admin-profile__card-ft"},Ia={class:"admin-profile__card-hd"},za={key:0,class:"admin-profile__hint"},qa={key:1,class:"admin-profile__hint"},Wa={class:"admin-profile__card-ft"},Oa={class:"admin-profile__hint"},Ze=e.defineComponent({__name:"ProfilePage",props:{title:{default:"Profile"},subtitle:{default:"Личные данные, безопасность, токены"},section:{default:"general"}},emits:["update:section","avatar-replace","two-factor-disable","two-factor-regenerate","save"],setup(t,{emit:n}){const a=t,i=n,o=A(),l=re(),r=ie(),s=[{id:"general",label:"Основное",icon:"user"},{id:"security",label:"Безопасность",icon:"shield"},{id:"tokens",label:"API токены",icon:"key"},{id:"sessions",label:"Сессии",icon:"monitor"}],d=e.ref(a.section);function u(g){d.value=g,i("update:section",g)}const v=e.ref({name:o.user?.name??"",email:o.user?.email??"",locale:r.current,theme:l.current}),h=e.computed(()=>r.available.map(g=>({value:g,label:g.toUpperCase()}))),y=e.computed(()=>l.available.map(g=>({value:g,label:g==="dark"?"Тёмная":g==="light"?"Светлая":g})));function _(){i("save",{...v.value})}function f(){i("avatar-replace")}function m(){i("two-factor-disable")}function B(){i("two-factor-regenerate")}const b=e.computed(()=>!!o.user?.twoFactorEnabled);return(g,p)=>(e.openBlock(),e.createElementBlock("section",Na,[e.createElementVNode("header",Va,[e.createElementVNode("div",Ea,[e.createElementVNode("h1",Ca,e.toDisplayString(t.title),1),e.createElementVNode("div",xa,e.toDisplayString(t.subtitle),1)])]),e.createElementVNode("div",$a,[e.createElementVNode("nav",Sa,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(s,k=>e.createElementVNode("button",{key:k.id,type:"button",class:e.normalizeClass(["admin-profile__nav-item",{"admin-profile__nav-item--active":d.value===k.id}]),onClick:V=>u(k.id)},[e.createElementVNode("span",{class:"admin-profile__nav-icon","data-icon":k.icon},null,8,Fa),e.createElementVNode("span",null,e.toDisplayString(k.label),1)],10,Ua)),64))]),e.createElementVNode("div",Ta,[d.value==="general"?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:0,padding:"md"},{default:e.withCtx(()=>[p[7]||(p[7]=e.createElementVNode("header",{class:"admin-profile__card-hd"},[e.createElementVNode("h3",{class:"admin-profile__card-title"},"Профиль")],-1)),e.createElementVNode("div",Da,[e.createVNode(e.unref(c.UidAvatar),{src:e.unref(o).user?.avatar??void 0,name:e.unref(o).user?.name??"?",size:"lg"},null,8,["src","name"]),e.createElementVNode("div",Aa,[e.createElementVNode("div",Ra,e.toDisplayString(e.unref(o).user?.name??"—"),1),e.createElementVNode("div",La,e.toDisplayString(e.unref(o).user?.email??"—"),1)]),p[5]||(p[5]=e.createElementVNode("div",{style:{flex:"1"}},null,-1)),e.createVNode(e.unref(c.UidButton),{variant:"ghost",size:"sm",onClick:f},{default:e.withCtx(()=>[...p[4]||(p[4]=[e.createTextVNode(" Заменить ",-1)])]),_:1})]),e.createElementVNode("div",Pa,[e.createVNode(e.unref(c.UidInput),{modelValue:v.value.name,"onUpdate:modelValue":p[0]||(p[0]=k=>v.value.name=k),label:"Имя",name:"name"},null,8,["modelValue"]),e.createVNode(e.unref(c.UidInput),{modelValue:v.value.email,"onUpdate:modelValue":p[1]||(p[1]=k=>v.value.email=k),label:"Email",type:"email",name:"email"},null,8,["modelValue"]),e.createVNode(e.unref(c.UidSelect),{modelValue:v.value.locale,"onUpdate:modelValue":p[2]||(p[2]=k=>v.value.locale=k),options:h.value,label:"Язык"},null,8,["modelValue","options"]),e.createVNode(e.unref(c.UidSelect),{modelValue:v.value.theme,"onUpdate:modelValue":p[3]||(p[3]=k=>v.value.theme=k),options:y.value,label:"Тема"},null,8,["modelValue","options"])]),e.createElementVNode("footer",Ma,[e.createVNode(e.unref(c.UidButton),{variant:"primary",onClick:_},{default:e.withCtx(()=>[...p[6]||(p[6]=[e.createTextVNode("Сохранить",-1)])]),_:1})])]),_:1})):d.value==="security"?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:1,padding:"md"},{default:e.withCtx(()=>[e.createElementVNode("header",Ia,[p[8]||(p[8]=e.createElementVNode("h3",{class:"admin-profile__card-title"},"Двухфакторная аутентификация",-1)),e.createVNode(e.unref(c.UidBadge),{variant:b.value?"success":"default"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(b.value?"Включена":"Отключена"),1)]),_:1},8,["variant"])]),b.value?(e.openBlock(),e.createElementBlock("p",za," 2FA включена. У вас остались recovery-коды на случай потери устройства. ")):(e.openBlock(),e.createElementBlock("p",qa," Включите 2FA для дополнительной защиты аккаунта. ")),e.createElementVNode("footer",Wa,[b.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(e.unref(c.UidButton),{variant:"ghost",size:"sm",onClick:B},{default:e.withCtx(()=>[...p[9]||(p[9]=[e.createTextVNode(" Перегенерировать коды ",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{variant:"danger",size:"sm",onClick:m},{default:e.withCtx(()=>[...p[10]||(p[10]=[e.createTextVNode(" Отключить 2FA ",-1)])]),_:1})],64)):e.renderSlot(g.$slots,"enable-2fa",{key:1},()=>[e.createVNode(e.unref(c.UidButton),{variant:"primary",disabled:""},{default:e.withCtx(()=>[...p[11]||(p[11]=[e.createTextVNode(" Включить 2FA (host customize) ",-1)])]),_:1})])])]),_:3})):e.renderSlot(g.$slots,d.value,{key:2,section:d.value},()=>[e.createVNode(e.unref(c.UidCard),{padding:"md"},{default:e.withCtx(()=>[e.createElementVNode("p",Oa," Section «"+e.toDisplayString(d.value)+"» не реализована библиотекой — host-проект подключает её через slot "+e.toDisplayString(d.value)+". ",1)]),_:1})])])])]))}}),X=ce(),ja=X.register,et=X.get,Ka=X.has,Ga=X.list,Ha=X.clear,tt=X.registerBundle,nt=e.defineComponent({__name:"UnknownWidget",props:{type:{}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{variant:"warning"},{title:e.withCtx(()=>[e.createTextVNode("Неизвестный widget-тип: "+e.toDisplayString(t.type),1)]),default:e.withCtx(()=>[a[0]||(a[0]=e.createTextVNode(" Зарегистрируйте через ",-1)),e.createElementVNode("code",null,"registerWidget('"+e.toDisplayString(t.type)+"', YourComponent)",1),a[1]||(a[1]=e.createTextVNode(". ",-1))]),_:1}))}}),at=e.defineComponent({__name:"WidgetRenderer",props:{node:{}},setup(t){const n=t,a=e.computed(()=>et(n.node.type)),i=e.computed(()=>{const{type:o,span:l,...r}=n.node;return r});return(o,l)=>a.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value),e.normalizeProps(e.mergeProps({key:0},i.value)),null,16)):(e.openBlock(),e.createBlock(nt,{key:1,type:t.node.type},null,8,["type"]))}}),Xa={class:"admin-page admin-dashboard"},Ja={class:"admin-page__hd"},Ya={class:"admin-page__title-wrap"},Qa={class:"admin-page__title"},Za={key:0,class:"admin-page__count"},eo={class:"admin-page__actions"},to={class:"admin-dashboard__grid"},ot=e.defineComponent({__name:"DashboardPage",props:{slug:{default:void 0},widgets:{default:void 0},title:{default:void 0},subtitle:{default:void 0}},setup(t){const n=t,a=I(),i=e.computed(()=>!n.slug||!a.manifest?null:a.manifest.dashboards?.find(u=>u.slug===n.slug)??null),o=e.computed(()=>n.widgets?n.widgets:i.value?i.value.widgets??[]:[]),l=e.computed(()=>n.title??i.value?.label??"Dashboard"),r=e.computed(()=>n.subtitle??i.value?.description??null);function s(d){const u=typeof d.span=="number"?d.span:12;return Math.max(1,Math.min(12,u))}return(d,u)=>(e.openBlock(),e.createElementBlock("section",Xa,[e.createElementVNode("header",Ja,[e.createElementVNode("div",Ya,[e.createElementVNode("h1",Qa,e.toDisplayString(l.value),1),r.value?(e.openBlock(),e.createElementBlock("div",Za,e.toDisplayString(r.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",eo,[e.renderSlot(d.$slots,"actions")])]),e.createElementVNode("div",to,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(v,h)=>(e.openBlock(),e.createElementBlock("div",{key:h,class:"admin-dashboard__cell",style:e.normalizeStyle({gridColumn:`span ${s(v)} / span ${s(v)}`})},[e.createVNode(at,{node:v},null,8,["node"])],4))),128))])]))}}),lt=e.defineComponent({__name:"StatWidget",props:{title:{default:""},value:{default:0},prefix:{default:""},suffix:{default:""},trend:{default:void 0},precision:{default:0},tone:{default:"neutral"},loading:{type:Boolean,default:!1}},setup(t){const n=t,a={neutral:"primary",positive:"success",negative:"danger",warning:"warning",info:"info"},i=e.computed(()=>a[n.tone]);return(o,l)=>(e.openBlock(),e.createBlock(e.unref(c.UidStat),{title:t.title,value:t.value,prefix:t.prefix,suffix:t.suffix,trend:t.trend,precision:t.precision,tone:i.value,loading:t.loading},null,8,["title","value","prefix","suffix","trend","precision","tone","loading"]))}}),no={key:0,class:"admin-widget__hd"},ao={key:0,class:"admin-widget__title"},oo={key:1,class:"admin-widget__desc"},lo=["viewBox","height","aria-label"],ro=["x","y","width","height","fill","data-label","data-value"],rt=e.defineComponent({__name:"BarChartWidget",props:{title:{default:""},description:{default:""},data:{},accent:{default:"var(--uid-accent)"},height:{default:200}},setup(t){const n=t,a=e.computed(()=>Math.max(1,...n.data.map(o=>o.value))),i=e.computed(()=>{const l=100/Math.max(1,n.data.length);return n.data.map((r,s)=>({label:r.label,value:r.value,x:s*l+l*.1,width:l*.8,heightPct:r.value/a.value*100}))});return(o,l)=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{padding:"md",class:"admin-widget"},{default:e.withCtx(()=>[t.title||t.description?(e.openBlock(),e.createElementBlock("header",no,[t.title?(e.openBlock(),e.createElementBlock("h3",ao,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("p",oo,e.toDisplayString(t.description),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),(e.openBlock(),e.createElementBlock("svg",{class:"admin-widget-bar-chart",viewBox:`0 0 100 ${t.height}`,preserveAspectRatio:"none",height:t.height,width:"100%",role:"img","aria-label":t.title||"Bar chart"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,(r,s)=>(e.openBlock(),e.createElementBlock("rect",{key:s,x:r.x,y:t.height-r.heightPct/100*t.height,width:r.width,height:r.heightPct/100*t.height,fill:t.accent,rx:"1","data-label":r.label,"data-value":r.value},[e.createElementVNode("title",null,e.toDisplayString(r.label)+": "+e.toDisplayString(r.value),1)],8,ro))),128))],8,lo))]),_:1}))}}),io={key:0,class:"admin-widget__hd"},so={class:"admin-widget__title"},co={class:"admin-donut-widget__row"},uo=["aria-label"],mo=["d","fill"],fo={class:"admin-donut-widget__legend"},po={class:"admin-donut-widget__label"},vo={class:"admin-donut-widget__value"},it=e.defineComponent({__name:"DonutChartWidget",props:{title:{default:""},data:{}},setup(t){const n=t,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)"],i=e.computed(()=>n.data.reduce((l,r)=>l+r.value,0)||1),o=e.computed(()=>{let l=0;return n.data.map((r,s)=>{const d=l/i.value*2*Math.PI;l+=r.value;const u=l/i.value*2*Math.PI,v=50,h=60,y=60,_=h+v*Math.cos(d-Math.PI/2),f=y+v*Math.sin(d-Math.PI/2),m=h+v*Math.cos(u-Math.PI/2),B=y+v*Math.sin(u-Math.PI/2),b=u-d>Math.PI?1:0,g=n.data.length===1?`M ${h-v} ${y} a ${v} ${v} 0 1 0 ${v*2} 0 a ${v} ${v} 0 1 0 ${-v*2} 0`:`M ${h} ${y} L ${_} ${f} A ${v} ${v} 0 ${b} 1 ${m} ${B} Z`;return{...r,path:g,color:r.color??a[s%a.length],pct:(r.value/i.value*100).toFixed(1)}})});return(l,r)=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{padding:"md",class:"admin-widget admin-donut-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",io,[e.createElementVNode("h3",so,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",co,[(e.openBlock(),e.createElementBlock("svg",{viewBox:"0 0 120 120",class:"admin-donut-widget__svg",role:"img","aria-label":t.title},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(s,d)=>(e.openBlock(),e.createElementBlock("path",{key:d,d:s.path,fill:s.color},[e.createElementVNode("title",null,e.toDisplayString(s.label)+": "+e.toDisplayString(s.value)+" ("+e.toDisplayString(s.pct)+"%)",1)],8,mo))),128)),r[0]||(r[0]=e.createElementVNode("circle",{cx:"60",cy:"60",r:"30",fill:"var(--uid-surface-raised)"},null,-1))],8,uo)),e.createElementVNode("ul",fo,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(s,d)=>(e.openBlock(),e.createElementBlock("li",{key:d},[e.createElementVNode("span",{class:"admin-donut-widget__dot",style:e.normalizeStyle({background:s.color})},null,4),e.createElementVNode("span",po,e.toDisplayString(s.label),1),e.createElementVNode("span",vo,e.toDisplayString(s.pct)+"%",1)]))),128))])])]),_:1}))}}),go={key:0,class:"admin-widget__hd"},ko={class:"admin-widget__title"},st=e.defineComponent({__name:"RecentTableWidget",props:{title:{default:""},columns:{},rows:{},emptyText:{default:"Нет данных"}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{padding:"md",class:"admin-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",go,[e.createElementVNode("h3",ko,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createVNode(e.unref(c.UidTable),{columns:t.columns,data:t.rows,"empty-text":t.emptyText},null,8,["columns","data","empty-text"])]),_:1}))}}),ho={key:0,class:"admin-widget__hd"},yo={class:"admin-widget__title"},ct=e.defineComponent({__name:"HeatmapWidget",props:{title:{default:""},data:{},levels:{default:5},color:{default:void 0},gap:{default:2}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{padding:"md",class:"admin-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",ho,[e.createElementVNode("h3",yo,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createVNode(e.unref(c.UidHeatmap),{data:t.data,levels:t.levels,color:t.color,gap:t.gap},null,8,["data","levels","color","gap"])]),_:1}))}}),_o={key:0,class:"admin-widget__hd"},Bo={class:"admin-widget__title"},bo={style:{display:"flex","justify-content":"center"}},dt=e.defineComponent({__name:"GaugeWidget",props:{title:{default:""},value:{default:0},min:{default:0},max:{default:100},size:{default:160},ranges:{default:()=>[]},tone:{default:"neutral"},color:{default:void 0},label:{default:""},suffix:{default:""},precision:{default:0}},setup(t){const n=t,a={neutral:"primary",positive:"success",warning:"warning",negative:"danger"},i=e.computed(()=>a[n.tone]);return(o,l)=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{padding:"md",class:"admin-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",_o,[e.createElementVNode("h3",Bo,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",bo,[e.createVNode(e.unref(c.UidGauge),{value:t.value,min:t.min,max:t.max,size:t.size,ranges:t.ranges,tone:i.value,color:t.color,label:t.label,suffix:t.suffix,precision:t.precision},null,8,["value","min","max","size","ranges","tone","color","label","suffix","precision"])])]),_:1}))}}),wo={key:0,class:"admin-widget__hd"},No={class:"admin-widget__title"},Vo={class:"admin-markdown-widget"},ut=e.defineComponent({__name:"MarkdownWidget",props:{title:{default:""},content:{}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{padding:"md",class:"admin-widget"},{default:e.withCtx(()=>[t.title?(e.openBlock(),e.createElementBlock("header",wo,[e.createElementVNode("h3",No,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",Vo,e.toDisplayString(t.content),1)]),_:1}))}});function mt(){tt({stat:lt,"bar-chart":rt,"donut-chart":it,"recent-table":st,heatmap:ct,gauge:dt,markdown:ut})}function ft(t){return t.success===!0}function Eo(t){return t.success===!1}function pt(t){const n=St.create({baseURL:t.baseURL,withCredentials:!0,headers:{Accept:"application/json","X-Requested-With":"XMLHttpRequest"}});t.csrfToken&&(n.defaults.headers.common["X-CSRF-TOKEN"]=t.csrfToken),t.locale&&(n.defaults.headers.common["X-Admin-Locale"]=t.locale),n.interceptors.request.use(o=>{const l=Co("XSRF-TOKEN");return l&&o.headers.set("X-XSRF-TOKEN",decodeURIComponent(l)),o}),n.interceptors.response.use(o=>{const l=o.data;if(l&&typeof l=="object"&&"success"in l){if(ft(l))return o.data=l.payload,o;throw me(o.status,l.payload)}return o},o=>{if(o.response){const l=o.response.status,r=o.response.data?.payload??{errorKey:"unknown",message:o.message},s=me(l,r);return s instanceof _e&&t.onUnauthenticated?.(),Promise.reject(s)}return Promise.reject(new ee(o.message))});const a=(o,l,r)=>n[o](l,r).then(s=>s.data),i=(o,l,r,s)=>n[o](l,r,s).then(d=>d.data);return{raw:n,get:(o,l)=>a("get",o,l),delete:(o,l)=>a("delete",o,l),post:(o,l,r)=>i("post",o,l,r),put:(o,l,r)=>i("put",o,l,r),patch:(o,l,r)=>i("patch",o,l,r),setLocale:o=>{n.defaults.headers.common["X-Admin-Locale"]=o}}}function Co(t){if(typeof document>"u")return null;const n=document.cookie.match(new RegExp("(^|; )"+xo(t)+"=([^;]*)"));return n?n[2]:null}function xo(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ae(t,n){const a=t.permissions?.[n];return typeof a=="string"&&a.length>0?[a]:[]}function $o(t,n){const a=t.permissions?.[n];return typeof a=="string"&&a.length>0?[a]:[]}function So(t){return Array.isArray(t.permission)?t.permission:typeof t.permission=="string"&&t.permission.length>0?[t.permission]:[]}function Uo(t,n){const a=t.slug,i=`/r/${a}`;return[{path:i,name:`admin.resource.${a}.index`,component:n.resourceIndex,meta:{requiresAuth:!0,kind:"resource",slug:a,title:t.label,permissions:ae(t,"view")},props:{slug:a}},{path:`${i}/create`,name:`admin.resource.${a}.create`,component:n.resourceCreate,meta:{requiresAuth:!0,kind:"resource",slug:a,title:`${t.label}: создать`,permissions:ae(t,"create")},props:{slug:a}},{path:`${i}/:id/edit`,name:`admin.resource.${a}.edit`,component:n.resourceEdit,meta:{requiresAuth:!0,kind:"resource",slug:a,title:`${t.label}: редактирование`,permissions:ae(t,"update")},props:o=>({slug:a,id:o.params.id})},{path:`${i}/:id`,name:`admin.resource.${a}.view`,component:n.resourceView,meta:{requiresAuth:!0,kind:"resource",slug:a,title:t.label,permissions:ae(t,"view")},props:o=>({slug:a,id:o.params.id})}]}function Fo(t,n){return{path:`/screens/${t.slug}`,name:`admin.screen.${t.slug}`,component:n.screen,meta:{requiresAuth:!0,kind:"screen",slug:t.slug,title:t.name,permissions:So(t)}}}function To(t,n){return{path:`/settings/${t.slug}`,name:`admin.settings.${t.slug}`,component:n.settings,meta:{requiresAuth:!0,kind:"settings",slug:t.slug,title:t.label,permissions:$o(t,"view")}}}function Do(t,n){if(typeof t.slug!="string"||t.slug.length===0)return null;const a=t.permission,i=Array.isArray(a)?a:typeof a=="string"&&a.length>0?[a]:[];return{path:`/dashboard/${t.slug}`,name:`admin.dashboard.${t.slug}`,component:n.dashboard,meta:{requiresAuth:!0,kind:"dashboard",slug:t.slug,title:t.label??"Dashboard",permissions:i}}}function vt(t,n){if(t===null)return[];const a=[];for(const i of t.resources)a.push(...Uo(i,n));for(const i of t.screens)a.push(Fo(i,n));for(const i of t.settings)a.push(To(i,n));for(const i of t.dashboards){const o=Do(i,n);o&&a.push(o)}return a}function gt(t={}){const n=t.loginRouteName??"admin.login",a=t.forbiddenRouteName??"admin.forbidden",i=t.redirectQueryKey??"redirect";return o=>{if(o.name===n)return!0;const l=A();if(o.meta?.requiresAuth===!0&&!l.isAuthenticated)return{name:n,query:{[i]:o.fullPath}};if(l.isChallengePending)return{name:n,query:{[i]:o.fullPath}};const s=o.meta?.permissions;return Array.isArray(s)&&s.length>0&&!l.hasAnyPermission(s)?{name:a}:!0}}function kt(t={}){const n=t.template,a=t.brand??"",i=t.fallback??"";return o=>{if(typeof document>"u")return;const l=o.meta?.title??i;let r;n?r=n.replace("{title}",l).replace("{brand}",a):l&&a?r=`${l} · ${a}`:r=l||a,document.title=r}}const Ao=["admin.resource.","admin.screen.","admin.settings.","admin.dashboard."];function Ro(t){return typeof t!="string"?!1:Ao.some(n=>t.startsWith(n))}function ht(t){const n=t.base??"/admin",a=t.history??U.createWebHistory(n),i=[{path:"/login",name:"admin.login",component:t.components.login,meta:{kind:"auth",title:"Вход"}},{path:"/",name:"admin.home",component:t.components.home,meta:{requiresAuth:!0,kind:"system",title:"Главная"}},{path:"/forbidden",name:"admin.forbidden",component:t.components.forbidden,meta:{requiresAuth:!0,kind:"system",title:"403 — доступ запрещён"}}];t.components.profile&&i.push({path:"/profile",name:"admin.profile",component:t.components.profile,meta:{requiresAuth:!0,kind:"system",title:"Профиль"}}),t.components.notifications&&i.push({path:"/notifications",name:"admin.notifications",component:t.components.notifications,meta:{requiresAuth:!0,kind:"system",title:"Уведомления"}});const o={path:"/:pathMatch(.*)*",name:"admin.notFound",component:t.components.notFound,meta:{kind:"system",title:"404"}},l=U.createRouter({history:a,routes:[...i,...t.extraRoutes??[],o]});return l.beforeEach(gt(t.authGuard)),l.afterEach(kt(t.titleGuard)),l.replaceManifestRoutes=r=>{const s=l.getRoutes();for(const u of s)Ro(u.name)&&l.removeRoute(u.name);l.hasRoute("admin.notFound")&&l.removeRoute("admin.notFound");const d=vt(r,t.components);for(const u of d)l.addRoute(u);l.addRoute(o)},l}const D=e.defineComponent({__name:"TextField",props:{name:{},label:{default:null},help:{default:null},required:{type:Boolean,default:!1},placeholder:{default:null},inputType:{default:"text"},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},autocomplete:{default:null}},setup(t){const n=t,a=R.useFormState(),i=e.computed(()=>a.getField(n.name)??""),o=e.computed(()=>a.errors[n.name]?.[0]);function l(r){a.setField(n.name,r)}return(r,s)=>(e.openBlock(),e.createBlock(e.unref(c.UidInput),{"model-value":i.value,type:t.inputType,label:t.label??void 0,hint:t.help??void 0,error:o.value,placeholder:t.placeholder??void 0,required:t.required,disabled:t.disabled,readonly:t.readonly,name:t.name,autocomplete:t.autocomplete??void 0,"onUpdate:modelValue":l},null,8,["model-value","type","label","hint","error","placeholder","required","disabled","readonly","name","autocomplete"]))}}),Y=e.defineComponent({__name:"TextAreaField",props:{name:{},label:{default:null},help:{default:null},required:{type:Boolean,default:!1},placeholder:{default:null},rows:{default:4},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1}},setup(t){const n=t,a=R.useFormState(),i=e.computed(()=>a.getField(n.name)??""),o=e.computed(()=>a.errors[n.name]?.[0]);function l(r){a.setField(n.name,r)}return(r,s)=>(e.openBlock(),e.createBlock(e.unref(c.UidFormField),{label:t.label??void 0,hint:t.help??void 0,error:o.value,required:t.required,disabled:t.disabled},{default:e.withCtx(()=>[e.createVNode(e.unref(c.UidTextarea),{"model-value":i.value,rows:t.rows,placeholder:t.placeholder??void 0,disabled:t.disabled,readonly:t.readonly,name:t.name,"onUpdate:modelValue":l},null,8,["model-value","rows","placeholder","disabled","readonly","name"])]),_:1},8,["label","hint","error","required","disabled"]))}}),oe=e.defineComponent({__name:"NumberField",props:{name:{},label:{default:null},help:{default:null},required:{type:Boolean,default:!1},placeholder:{default:null},min:{default:null},max:{default:null},step:{default:null},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1}},setup(t){const n=t,a=R.useFormState(),i=e.computed(()=>{const r=a.getField(n.name);return r==null||r===""?null:typeof r=="number"?r:Number(r)}),o=e.computed(()=>a.errors[n.name]?.[0]);function l(r){a.setField(n.name,r)}return(r,s)=>(e.openBlock(),e.createBlock(e.unref(c.UidFormField),{label:t.label??void 0,hint:t.help??void 0,error:o.value,required:t.required,disabled:t.disabled},{default:e.withCtx(()=>[e.createVNode(e.unref(c.UidNumberInput),{"model-value":i.value,min:t.min??void 0,max:t.max??void 0,step:t.step??void 0,placeholder:t.placeholder??void 0,disabled:t.disabled,readonly:t.readonly,name:t.name,"onUpdate:modelValue":l},null,8,["model-value","min","max","step","placeholder","disabled","readonly","name"])]),_:1},8,["label","hint","error","required","disabled"]))}}),P=e.defineComponent({__name:"SelectField",props:{name:{},options:{},label:{default:null},help:{default:null},required:{type:Boolean,default:!1},placeholder:{default:null},disabled:{type:Boolean,default:!1},searchable:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},size:{default:"md"}},setup(t){const n=t,a=R.useFormState(),i=e.computed(()=>{const r=a.getField(n.name);return r==null||r===""?null:r}),o=e.computed(()=>a.errors[n.name]?.[0]);function l(r){a.setField(n.name,r)}return(r,s)=>(e.openBlock(),e.createBlock(e.unref(c.UidFormField),{label:t.label??void 0,hint:t.help??void 0,error:o.value,required:t.required,disabled:t.disabled},{default:e.withCtx(()=>[e.createVNode(e.unref(c.UidSelect),{"model-value":i.value,options:t.options,placeholder:t.placeholder??void 0,disabled:t.disabled,searchable:t.searchable,clearable:t.clearable,size:t.size,"onUpdate:modelValue":l},null,8,["model-value","options","placeholder","disabled","searchable","clearable","size"])]),_:1},8,["label","hint","error","required","disabled"]))}}),le=e.defineComponent({__name:"CheckboxField",props:{name:{},label:{default:null},help:{default:null},required:{type:Boolean,default:!1},inlineLabel:{default:null},disabled:{type:Boolean,default:!1}},setup(t){const n=t,a=R.useFormState(),i=e.computed(()=>!!a.getField(n.name)),o=e.computed(()=>a.errors[n.name]?.[0]);function l(r){a.setField(n.name,r)}return(r,s)=>(e.openBlock(),e.createBlock(e.unref(c.UidFormField),{label:t.label??void 0,hint:t.help??void 0,error:o.value,required:t.required,disabled:t.disabled},{default:e.withCtx(()=>[e.createVNode(e.unref(c.UidCheckbox),{"model-value":i.value,disabled:t.disabled,name:t.name,"onUpdate:modelValue":l},{default:e.withCtx(()=>[t.inlineLabel?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(t.inlineLabel),1)],64)):e.createCommentVNode("",!0)]),_:1},8,["model-value","disabled","name"])]),_:1},8,["label","hint","error","required","disabled"]))}}),q=e.defineComponent({__name:"DateField",props:{name:{},label:{default:null},help:{default:null},required:{type:Boolean,default:!1},inputType:{default:"date"},min:{default:null},max:{default:null},disabled:{type:Boolean,default:!1}},setup(t){const n=t,a=R.useFormState(),i=e.computed(()=>{const r=a.getField(n.name);return r==null||r===""?null:String(r)}),o=e.computed(()=>a.errors[n.name]?.[0]);function l(r){a.setField(n.name,r)}return(r,s)=>(e.openBlock(),e.createBlock(e.unref(c.UidFormField),{label:t.label??void 0,hint:t.help??void 0,error:o.value,required:t.required,disabled:t.disabled},{default:e.withCtx(()=>[e.createVNode(e.unref(c.UidDatePicker),{"model-value":i.value,min:t.min??void 0,max:t.max??void 0,disabled:t.disabled,name:t.name,"onUpdate:modelValue":l},null,8,["model-value","min","max","disabled","name"])]),_:1},8,["label","hint","error","required","disabled"]))}}),ge=e.defineComponent({__name:"RowsLayout",props:{items:{},gap:{default:"var(--uid-space-md)"}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidStack),{direction:"column",gap:t.gap,align:"stretch"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(i,o)=>(e.openBlock(),e.createBlock(G,{key:o,node:i},null,8,["node"]))),128))]),_:1},8,["gap"]))}}),yt=e.defineComponent({__name:"ColumnsLayout",props:{items:{},gap:{default:"var(--uid-space-md)"},cols:{default:12}},setup(t){const n=t,a=e.computed(()=>n.items.length===0?n.cols:Math.max(1,Math.floor(n.cols/n.items.length)));function i(o){const l=o.span;return typeof l=="number"&&l>0?Math.min(l,n.cols):a.value}return(o,l)=>(e.openBlock(),e.createBlock(e.unref(c.UidGrid),{cols:t.cols,gap:t.gap},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(r,s)=>(e.openBlock(),e.createElementBlock("div",{key:s,class:"admin-columns__item",style:e.normalizeStyle({gridColumn:`span ${i(r)} / span ${i(r)}`})},[e.createVNode(G,{node:r},null,8,["node"])],4))),128))]),_:1},8,["cols","gap"]))}}),Lo={key:0,class:"admin-section__header"},Po={key:0,class:"admin-section__title"},Mo={key:1,class:"admin-section__description"},Io={class:"admin-section__body"},O=e.defineComponent({__name:"SectionLayout",props:{items:{},title:{default:null},description:{default:null}},setup(t){return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{padding:"md",class:"admin-section"},{default:e.withCtx(()=>[t.title||t.description?(e.openBlock(),e.createElementBlock("header",Lo,[t.title?(e.openBlock(),e.createElementBlock("h3",Po,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("p",Mo,e.toDisplayString(t.description),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Io,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(i,o)=>(e.openBlock(),e.createBlock(G,{key:o,node:i},null,8,["node"]))),128))])]),_:1}))}}),_t=e.defineComponent({__name:"TabsLayout",props:{items:{},active:{default:0}},emits:["update:active"],setup(t,{emit:n}){const a=t,i=n;function o(s,d){return s.key??d}const l=e.ref(a.active??o(a.items[0]??{},0));function r(s){l.value=s,i("update:active",s)}return(s,d)=>(e.openBlock(),e.createBlock(e.unref(c.UidTabs),{"model-value":l.value,"onUpdate:modelValue":r},{list:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(u,v)=>(e.openBlock(),e.createBlock(e.unref(c.UidTab),{key:o(u,v),value:o(u,v)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.label),1)]),_:2},1032,["value"]))),128))]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(u,v)=>(e.openBlock(),e.createBlock(e.unref(c.UidTabPanel),{key:`panel-${o(u,v)}`,value:o(u,v)},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.items,(h,y)=>(e.openBlock(),e.createBlock(G,{key:y,node:h},null,8,["node"]))),128))]),_:2},1032,["value"]))),128))]),_:1},8,["model-value"]))}});function Bt(){Ge({fields:{input:D,text:D,email:D,url:D,password:D,tel:D,search:D,slug:D,hidden:D,label:D,textarea:Y,wysiwyg:Y,markdown:Y,code:Y,number:oe,slider:oe,rating:oe,select:P,combobox:P,radio:P,tags:P,"morph-switcher":P,relation:P,cascader:P,"tree-select":P,checkbox:le,switcher:le,boolean:le,date:q,datetime:q,datepicker:q,"date-range":q,time:q,"time-picker":q,"color-picker":D},layouts:{rows:ge,columns:yt,section:O,block:O,tabs:_t,accordion:O,group:ge,step:O,wizard:O}})}const bt=e.defineComponent({__name:"TextEntry",props:{name:{default:""},label:{default:""},value:{default:void 0},placeholder:{default:"—"},mono:{type:Boolean,default:!1}},setup(t){const n=t,a=te(),i=e.computed(()=>{let o=n.value;return o===void 0&&a&&n.name&&(o=a[n.name]),o==null||o===""?n.placeholder:String(o)});return(o,l)=>(e.openBlock(),e.createElementBlock("span",{class:e.normalizeClass(["admin-infolist-text",t.mono?"admin-infolist-text--mono":""])},e.toDisplayString(i.value),3))}}),zo={key:1,class:"admin-infolist-text"},wt=e.defineComponent({__name:"BadgeEntry",props:{name:{default:""},label:{default:""},value:{default:void 0},map:{default:()=>({})},variant:{default:void 0}},setup(t){const n=t,a=te(),i=e.computed(()=>{let l=n.value;return l===void 0&&a&&n.name&&(l=a[n.name]),l==null?"":String(l)}),o=e.computed(()=>n.variant?n.variant:n.map[i.value]??"default");return(l,r)=>i.value?(e.openBlock(),e.createBlock(e.unref(c.UidBadge),{key:0,variant:o.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value),1)]),_:1},8,["variant"])):(e.openBlock(),e.createElementBlock("span",zo,"—"))}}),qo=["data-icon"],Wo={key:0},Nt=e.defineComponent({__name:"IconEntry",props:{name:{default:""},label:{default:""},value:{type:[Boolean,null],default:void 0},trueIcon:{default:"check-circle-2"},falseIcon:{default:"circle"},trueLabel:{default:""},falseLabel:{default:""}},setup(t){const n=t,a=te(),i=e.computed(()=>{let r=n.value;return r===void 0&&a&&n.name&&(r=a[n.name]),!!r}),o=e.computed(()=>i.value?n.trueLabel:n.falseLabel),l=e.computed(()=>i.value?n.trueIcon:n.falseIcon);return(r,s)=>(e.openBlock(),e.createElementBlock("span",{class:e.normalizeClass(["admin-infolist-icon",i.value?"admin-infolist-icon--on":"admin-infolist-icon--off"])},[e.createElementVNode("span",{class:"admin-infolist-icon__glyph","data-icon":l.value},null,8,qo),o.value?(e.openBlock(),e.createElementBlock("span",Wo,e.toDisplayString(o.value),1)):e.createCommentVNode("",!0)],2))}}),Oo={key:1,class:"admin-infolist-text"},ke=e.defineComponent({__name:"KeyValueEntry",props:{name:{default:""},label:{default:""},value:{default:void 0}},setup(t){const n=t,a=te(),i=e.computed(()=>{let l=n.value;return l===void 0&&a&&n.name&&(l=a[n.name]),l==null?[]:typeof l!="object"?[]:Object.entries(l)});function o(l){return l==null?"—":typeof l=="object"?JSON.stringify(l):String(l)}return(l,r)=>i.value.length>0?(e.openBlock(),e.createBlock(e.unref(c.UidDescriptionList),{key:0,direction:"vertical",columns:1},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,([s,d])=>(e.openBlock(),e.createBlock(e.unref(c.UidDescriptionItem),{key:s,label:s},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o(d)),1)]),_:2},1032,["label"]))),128))]),_:1})):(e.openBlock(),e.createElementBlock("span",Oo,"—"))}});function Vt(){He({text:bt,badge:wt,icon:Nt,keyvalue:ke,"key-value":ke})}function jo(t,n={}){const a=n.pages??{},i=n.base??Ko(t.baseUrl)??"/admin",o=pt({baseURL:t.apiUrl,csrfToken:t.csrf});Ce(o);const l=e.createApp(Re),r=M.createPinia();l.use(r),A().hydrate(t),ie().hydrate(t),re().hydrate(t),se().hydrate(t),Bt(),mt(),Vt();const s=ht({base:i,history:n.router?.history??U.createWebHistory(i),components:{login:a.login??Oe,home:a.home??Le,forbidden:a.forbidden??Pe,notFound:a.notFound??Me,profile:a.profile??Ze,resourceIndex:a.resourceIndex??Ke,resourceCreate:a.resourceCreate??pe,resourceEdit:a.resourceEdit??pe,resourceView:a.resourceView??Qe,dashboard:a.dashboard??ot,settings:a.settings??Ie,screen:a.screen??ze},extraRoutes:n.router?.extraRoutes,authGuard:n.router?.authGuard,titleGuard:n.router?.titleGuard});if(l.use(s),!n.skipManifestLoad){const d=I(),u=A(),v=()=>{d.load().then(h=>{s.replaceManifestRoutes(h);const y=s.currentRoute.value;y.name==="admin.notFound"&&y.fullPath!=="/"&&s.replace(y.fullPath)}).catch(h=>{typeof console<"u"&&console.error("[laravel-admin] manifest load failed:",h)})};u.isAuthenticated&&v(),e.watch(()=>u.user,(h,y)=>{h&&!y&&v()})}return n.onAppCreated?.(l),{app:l,router:s,client:o}}function Ko(t){if(!t)return null;try{return new URL(t).pathname||"/admin"}catch{return t.startsWith("/")?t:null}}async function Go(t={}){const n=Et();if(n)return n;if(t.client)try{const a=t.xhrUrl??"/system/bootstrap";return await t.client.get(a)}catch(a){if(a instanceof ee)return null;throw a}return null}function Et(){return typeof window>"u"?null:window.__ADMIN_BOOTSTRAP__??null}function Ho(){return typeof document>"u"?null:document.querySelector('meta[name="csrf-token"]')?.getAttribute("content")??null}const Xo={class:"admin-notifs__hd"},Jo={class:"admin-notifs__title"},Yo={key:0,class:"admin-notifs__count"},Qo={class:"admin-notifs__list"},Zo={key:0,class:"admin-notifs__empty"},el={key:1,class:"admin-notifs__empty"},tl=["onClick"],nl=["data-kind"],al={class:"admin-notifs__body"},ol={class:"admin-notifs__row1"},ll={key:0,class:"admin-notifs__title-strong"},rl={key:1,class:"admin-notifs__title-soft"},il={class:"admin-notifs__time"},sl={key:0,class:"admin-notifs__text"},cl=["onClick"],dl=e.defineComponent({__name:"NotificationsDrawer",props:{open:{type:Boolean}},emits:["update:open","select-item"],setup(t,{emit:n}){const a=t,i=n,o=se();function l(m){i("update:open",m)}e.watch(()=>a.open,async m=>{m&&await o.load(o.lastFilter??"all",1).catch(()=>{})},{immediate:!0});const r=e.computed(()=>o.lastFilter??"all");async function s(m){await o.load(m,1).catch(()=>{})}async function d(){await o.markAllAsRead().catch(()=>{})}async function u(m){i("select-item",m),m.read_at||await o.markAsRead(m.id).catch(()=>{})}async function v(m,B){B.stopPropagation(),await o.destroy(m.id).catch(()=>{})}function h(m){const B=m.data.level;return B==="success"||B==="warning"||B==="danger"?B:"info"}function y(m){return m.data.title??"—"}function _(m){return m.data.body??""}function f(m){if(!m)return"";const B=new Date(m),b=Math.max(0,Date.now()-B.getTime()),g=Math.floor(b/6e4);if(g<1)return"только что";if(g<60)return`${g} мин назад`;const p=Math.floor(g/60);if(p<24)return`${p} ч назад`;const k=Math.floor(p/24);return k<7?`${k} д назад`:B.toLocaleDateString("ru-RU")}return(m,B)=>(e.openBlock(),e.createBlock(e.unref(c.UidDrawer),{"model-value":t.open,side:"right",width:"400px",title:"Уведомления","onUpdate:modelValue":l},{header:e.withCtx(()=>[e.createElementVNode("div",Xo,[e.createElementVNode("h2",Jo,[B[0]||(B[0]=e.createTextVNode(" Уведомления ",-1)),e.unref(o).unreadCount>0?(e.openBlock(),e.createElementBlock("span",Yo," ("+e.toDisplayString(e.unref(o).unreadCount)+") ",1)):e.createCommentVNode("",!0)]),e.unref(o).unreadCount>0?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"ghost",size:"sm",onClick:d},{default:e.withCtx(()=>[...B[1]||(B[1]=[e.createTextVNode(" Прочитать все ",-1)])]),_:1})):e.createCommentVNode("",!0)])]),default:e.withCtx(()=>[e.createVNode(e.unref(c.UidTabs),{"model-value":r.value,"onUpdate:modelValue":s},{list:e.withCtx(()=>[e.createVNode(e.unref(c.UidTab),{value:"all"},{default:e.withCtx(()=>[...B[2]||(B[2]=[e.createTextVNode("Все",-1)])]),_:1}),e.createVNode(e.unref(c.UidTab),{value:"unread"},{default:e.withCtx(()=>[B[3]||(B[3]=e.createTextVNode(" Непрочитанные",-1)),e.unref(o).unreadCount>0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" ("+e.toDisplayString(e.unref(o).unreadCount)+") ",1)],64)):e.createCommentVNode("",!0)]),_:1}),e.createVNode(e.unref(c.UidTab),{value:"read"},{default:e.withCtx(()=>[...B[4]||(B[4]=[e.createTextVNode("Прочитанные",-1)])]),_:1})]),default:e.withCtx(()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(["all","unread","read"],b=>e.createVNode(e.unref(c.UidTabPanel),{key:b,value:b},{default:e.withCtx(()=>[e.createElementVNode("ul",Qo,[e.unref(o).loading?(e.openBlock(),e.createElementBlock("li",Zo," Загрузка… ")):e.unref(o).items.length===0?(e.openBlock(),e.createElementBlock("li",el," Нет уведомлений ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(o).items,g=>(e.openBlock(),e.createElementBlock("li",{key:g.id,class:e.normalizeClass(["admin-notifs__item",`admin-notifs__item--${h(g)}`,{"admin-notifs__item--unread":!g.read_at}]),onClick:p=>u(g)},[e.createElementVNode("span",{class:"admin-notifs__icon","data-kind":h(g)},null,8,nl),e.createElementVNode("div",al,[e.createElementVNode("div",ol,[g.read_at?(e.openBlock(),e.createElementBlock("span",rl,e.toDisplayString(y(g)),1)):(e.openBlock(),e.createElementBlock("strong",ll,e.toDisplayString(y(g)),1)),e.createElementVNode("span",il,e.toDisplayString(f(g.created_at)),1)]),_(g)?(e.openBlock(),e.createElementBlock("p",sl,e.toDisplayString(_(g)),1)):e.createCommentVNode("",!0)]),e.createElementVNode("button",{type:"button",class:"admin-notifs__close","aria-label":"Удалить",onClick:p=>v(g,p)}," × ",8,cl)],10,tl))),128))])]),_:1},8,["value"])),64))]),_:1},8,["model-value"])]),_:1},8,["model-value"]))}}),ul={class:"admin-page admin-import-wizard"},ml={class:"admin-page__hd"},fl={class:"admin-page__title-wrap"},pl={class:"admin-page__title"},vl={class:"admin-page__actions"},gl={key:0,class:"admin-import-wizard__empty"},kl={key:1,class:"admin-import-wizard__mapping"},hl={class:"admin-import-wizard__map-source"},yl={key:0,class:"admin-import-wizard__map-sample"},_l={class:"admin-import-wizard__card-hd"},Bl={key:2,class:"admin-import-wizard__empty"},bl={key:0,class:"admin-import-wizard__empty"},wl={class:"admin-import-wizard__kpi"},Nl={class:"admin-import-wizard__nav"},Vl=e.defineComponent({__name:"ImportWizardPage",props:{title:{default:"Импорт"},fieldOptions:{},headers:{default:()=>[]},preview:{default:()=>[]},previewColumns:{default:()=>[]},progress:{default:null},step:{default:void 0}},emits:["file-uploaded","mapping-submit","run-import","cancel"],setup(t,{emit:n}){const a=t,i=n,o=[{label:"Загрузка",description:"CSV / TSV / XLSX"},{label:"Сопоставление",description:"Колонки файла → поля"},{label:"Предпросмотр",description:"Проверка первых строк"},{label:"Импорт",description:"Запуск + сводка"}],l=e.ref(0),r=e.computed(()=>a.step??l.value);function s(p){a.step===void 0&&(p<0||p>=o.length||(l.value=p))}const d=e.ref([]);function u(p){d.value=p,p.length>0&&i("file-uploaded",p[0].file)}const v=e.ref({});function h(p,k){v.value[p]=k===null||k===""?null:String(k)}function y(){return a.headers.map(p=>({source:p.key,target:v.value[p.key]??null}))}function _(){i("mapping-submit",y()),s(2)}function f(){i("run-import"),s(3)}const m=e.computed(()=>r.value>0),B=e.computed(()=>{switch(r.value){case 0:return d.value.length>0;case 1:return Object.values(v.value).some(p=>p!==null);case 2:return!0;default:return!1}}),b=e.computed(()=>[{value:"",label:"Не импортировать"},...a.fieldOptions]);function g(){i("cancel")}return(p,k)=>(e.openBlock(),e.createElementBlock("section",ul,[e.createElementVNode("header",ml,[e.createElementVNode("div",fl,[e.createElementVNode("h1",pl,e.toDisplayString(t.title),1)]),e.createElementVNode("div",vl,[e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:g},{default:e.withCtx(()=>[...k[2]||(k[2]=[e.createTextVNode("Отмена",-1)])]),_:1})])]),e.createVNode(e.unref(c.UidStepper),{steps:o,current:r.value},null,8,["current"]),r.value===0?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:0,padding:"md",class:"admin-import-wizard__card"},{default:e.withCtx(()=>[k[3]||(k[3]=e.createElementVNode("header",{class:"admin-import-wizard__card-hd"},[e.createElementVNode("h3",null,"1. Загрузите файл"),e.createElementVNode("p",null,"CSV / TSV / XLSX, до 50 MB")],-1)),e.createVNode(e.unref(c.UidFileUpload),{"model-value":d.value,accept:".csv,.tsv,.xlsx","max-size":50*1024*1024,"max-files":1,"primary-text":"Перетащите файл сюда или","secondary-text":"нажмите чтобы выбрать","onUpdate:modelValue":u},null,8,["model-value"])]),_:1})):r.value===1?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:1,padding:"md",class:"admin-import-wizard__card"},{default:e.withCtx(()=>[k[5]||(k[5]=e.createElementVNode("header",{class:"admin-import-wizard__card-hd"},[e.createElementVNode("h3",null,"2. Сопоставьте колонки"),e.createElementVNode("p",null,"Выберите поле ресурса для каждой колонки файла")],-1)),t.headers.length===0?(e.openBlock(),e.createElementBlock("div",gl," Нет данных — host ещё не отдал headers. Загрузите файл сначала. ")):(e.openBlock(),e.createElementBlock("div",kl,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.headers,V=>(e.openBlock(),e.createElementBlock("div",{key:V.key,class:"admin-import-wizard__map-row"},[e.createElementVNode("div",hl,[e.createElementVNode("strong",null,e.toDisplayString(V.label),1),V.sample?(e.openBlock(),e.createElementBlock("span",yl," «"+e.toDisplayString(V.sample)+"» ",1)):e.createCommentVNode("",!0)]),k[4]||(k[4]=e.createElementVNode("span",{class:"admin-import-wizard__map-arrow"},"→",-1)),e.createVNode(e.unref(c.UidSelect),{"model-value":v.value[V.key]??"",options:b.value,placeholder:"Не импортировать","onUpdate:modelValue":S=>h(V.key,S)},null,8,["model-value","options","onUpdate:modelValue"])]))),128))]))]),_:1})):r.value===2?(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:2,padding:"md",class:"admin-import-wizard__card"},{default:e.withCtx(()=>[e.createElementVNode("header",_l,[k[6]||(k[6]=e.createElementVNode("h3",null,"3. Предпросмотр",-1)),e.createElementVNode("p",null,"Первые "+e.toDisplayString(t.preview.length)+" строк перед импортом",1)]),t.preview.some(V=>V.__warning)?(e.openBlock(),e.createBlock(e.unref(c.UidAlert),{key:0,variant:"warning",style:{"margin-bottom":"var(--uid-space-md)"}},{default:e.withCtx(()=>[...k[7]||(k[7]=[e.createTextVNode(" Часть строк имеет предупреждения — проверьте перед импортом. ",-1)])]),_:1})):e.createCommentVNode("",!0),t.previewColumns.length>0?(e.openBlock(),e.createBlock(e.unref(c.UidTable),{key:1,columns:t.previewColumns,data:t.preview},null,8,["columns","data"])):(e.openBlock(),e.createElementBlock("div",Bl," Host не передал previewColumns/preview. "))]),_:1})):(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:3,padding:"md",class:"admin-import-wizard__card"},{default:e.withCtx(()=>[k[8]||(k[8]=e.createElementVNode("header",{class:"admin-import-wizard__card-hd"},[e.createElementVNode("h3",null,"4. Импорт")],-1)),t.progress?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[t.progress.total>0?(e.openBlock(),e.createBlock(e.unref(c.UidProgress),{key:0,"model-value":t.progress.created+t.progress.updated+t.progress.errors,max:t.progress.total},null,8,["model-value","max"])):e.createCommentVNode("",!0),e.createElementVNode("div",wl,[e.createVNode(e.unref(c.UidStat),{title:"Создано",value:t.progress.created,tone:"success"},null,8,["value"]),e.createVNode(e.unref(c.UidStat),{title:"Обновлено",value:t.progress.updated,tone:"info"},null,8,["value"]),e.createVNode(e.unref(c.UidStat),{title:"Ошибки",value:t.progress.errors,tone:"danger"},null,8,["value"])])],64)):(e.openBlock(),e.createElementBlock("div",bl," Запускается импорт… "))]),_:1})),e.createElementVNode("footer",Nl,[m.value?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"ghost",onClick:k[0]||(k[0]=V=>s(r.value-1))},{default:e.withCtx(()=>[...k[9]||(k[9]=[e.createTextVNode(" Назад ",-1)])]),_:1})):e.createCommentVNode("",!0),k[13]||(k[13]=e.createElementVNode("span",{style:{flex:"1"}},null,-1)),r.value===0?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:1,variant:"primary",disabled:!B.value,onClick:k[1]||(k[1]=V=>s(1))},{default:e.withCtx(()=>[...k[10]||(k[10]=[e.createTextVNode(" Далее ",-1)])]),_:1},8,["disabled"])):r.value===1?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:2,variant:"primary",disabled:!B.value,onClick:_},{default:e.withCtx(()=>[...k[11]||(k[11]=[e.createTextVNode(" Подтвердить mapping ",-1)])]),_:1},8,["disabled"])):r.value===2?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:3,variant:"primary",onClick:f},{default:e.withCtx(()=>[...k[12]||(k[12]=[e.createTextVNode(" Запустить импорт ",-1)])]),_:1})):e.createCommentVNode("",!0)])]))}}),El={class:"admin-page admin-field-gallery"},Cl={class:"admin-gallery__group-title"},xl={class:"admin-gallery__grid"},$l={class:"admin-gallery__card-hd"},Sl={class:"admin-gallery__card-title"},Ul={class:"admin-gallery__card-type"},Fl={class:"admin-gallery__card-desc"},Tl={class:"admin-gallery__card-demo"},Dl=e.defineComponent({__name:"FieldGalleryPage",setup(t){const n=[{type:"text",group:"Текстовые",title:"Input",description:"Простой текстовый input. type=email/url/password/tel доступны через inputType.",node:{type:"text",name:"demo_text",label:"Заголовок статьи",placeholder:"Например: Введение в Laravel"},initial:{demo_text:"Hello World"}},{type:"textarea",group:"Текстовые",title:"Textarea",description:"Многострочный input с настраиваемым числом rows.",node:{type:"textarea",name:"demo_textarea",label:"Описание",rows:4},initial:{demo_textarea:"Multi-line text..."}},{type:"number",group:"Текстовые",title:"NumberInput",description:"Числовой input. Empty/NaN автоматически конвертируются в null.",node:{type:"number",name:"demo_number",label:"Цена",min:0,max:1e3},initial:{demo_number:42}},{type:"select",group:"Выбор",title:"Select",description:"Single-select с options. Поддерживает searchable + clearable.",node:{type:"select",name:"demo_select",label:"Категория",options:[{value:"frontend",label:"Frontend"},{value:"backend",label:"Backend"},{value:"devops",label:"DevOps"}]},initial:{demo_select:"backend"}},{type:"checkbox",group:"Выбор",title:"Checkbox",description:"Boolean toggle. inlineLabel рядом с боксом.",node:{type:"checkbox",name:"demo_checkbox",label:"Опубликовать",inlineLabel:"Сделать доступным всем"},initial:{demo_checkbox:!0}},{type:"date",group:"Дата/время",title:"DatePicker",description:"date / datetime-local / time через inputType.",node:{type:"date",name:"demo_date",label:"Дата публикации",inputType:"date"},initial:{demo_date:"2026-05-01"}}],a=n.reduce((o,l)=>(o[l.group]||(o[l.group]=[]),o[l.group].push(l),o),{}),i=e.reactive(n.reduce((o,l)=>Object.assign(o,l.initial),{}));return R.provideFormState(i),(o,l)=>(e.openBlock(),e.createElementBlock("section",El,[l[0]||(l[0]=e.createElementVNode("header",{class:"admin-page__hd"},[e.createElementVNode("div",{class:"admin-page__title-wrap"},[e.createElementVNode("h1",{class:"admin-page__title"},"Field Gallery"),e.createElementVNode("div",{class:"admin-page__count"}," Каталог встроенных field-компонентов library + примеры использования ")])],-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(a),(r,s)=>(e.openBlock(),e.createElementBlock("section",{key:s,class:"admin-gallery__group"},[e.createElementVNode("h2",Cl,e.toDisplayString(s),1),e.createElementVNode("div",xl,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r,d=>(e.openBlock(),e.createBlock(e.unref(c.UidCard),{key:d.type+d.title,padding:"md",class:"admin-gallery__card"},{default:e.withCtx(()=>[e.createElementVNode("header",$l,[e.createElementVNode("h3",Sl,e.toDisplayString(d.title),1),e.createElementVNode("code",Ul,"type: "+e.toDisplayString(d.type),1)]),e.createElementVNode("p",Fl,e.toDisplayString(d.description),1),e.createElementVNode("div",Tl,[e.createVNode(Ne,{node:d.node},null,8,["node"])])]),_:2},1024))),128))])]))),128))]))}});exports.provideFormState=R.provideFormState;exports.tryUseFormState=R.tryUseFormState;exports.useFormState=R.useFormState;exports.AdminApp=Re;exports.AdminShell=Ae;exports.AdminSidebar=De;exports.AdminTopBar=Fe;exports.ApiError=L;exports.BadgeEntry=wt;exports.BarChartWidget=rt;exports.CheckboxField=le;exports.ColumnsLayout=yt;exports.DashboardPage=ot;exports.DateField=q;exports.DonutChartWidget=it;exports.FieldGalleryPage=Dl;exports.FieldRenderer=Ne;exports.ForbiddenError=$e;exports.ForbiddenPage=Pe;exports.GaugeWidget=dt;exports.HeatmapWidget=ct;exports.HomePage=Le;exports.IconEntry=Nt;exports.ImportWizardPage=Vl;exports.InfolistRenderer=Je;exports.KeyValueEntry=ke;exports.LayoutRenderer=G;exports.LocaleSwitcher=ye;exports.LoginForm=qe;exports.LoginPage=Oe;exports.MarkdownWidget=ut;exports.NetworkError=ee;exports.NotFoundError=Se;exports.NotFoundPage=Me;exports.NotificationBell=xe;exports.NotificationsDrawer=dl;exports.NumberField=oe;exports.ProfilePage=Ze;exports.RecentTableWidget=st;exports.ResourceFormPage=pe;exports.ResourceIndexPage=Ke;exports.ResourceViewPage=Qe;exports.RowsLayout=ge;exports.SectionLayout=O;exports.SelectField=P;exports.SettingsPage=Ie;exports.StatWidget=lt;exports.TabsLayout=_t;exports.TextAreaField=Y;exports.TextEntry=bt;exports.TextField=D;exports.ThemeToggle=he;exports.TwoFactorForm=We;exports.UnauthenticatedError=_e;exports.UnknownEntry=Xe;exports.UnknownField=we;exports.UnknownScreenPage=ze;exports.UnknownWidget=nt;exports.UserMenu=Ue;exports.ValidationError=Z;exports.WidgetRenderer=at;exports.buildRoutesFromManifest=vt;exports.clearAdminClient=Ut;exports.clearInfolistRegistry=ra;exports.clearRegistry=Xn;exports.clearWidgetRegistry=Ha;exports.createAdminApp=jo;exports.createAdminClient=pt;exports.createAdminRouter=ht;exports.createAuthGuard=gt;exports.createTitleGuard=kt;exports.getAdminClient=x;exports.getField=be;exports.getInfolistEntry=ve;exports.getLayout=fe;exports.getWidget=et;exports.hasAdminClient=Ft;exports.hasField=On;exports.hasInfolistEntry=oa;exports.hasLayout=Gn;exports.hasWidget=Ka;exports.isError=Eo;exports.isSuccess=ft;exports.listFields=jn;exports.listInfolistEntries=la;exports.listLayouts=Hn;exports.listWidgets=Ga;exports.loadBootstrap=Go;exports.provideRecord=Ye;exports.readCsrfFromMeta=Ho;exports.readInlineBootstrap=Et;exports.registerBuiltinComponents=Bt;exports.registerBuiltinInfolistEntries=Vt;exports.registerBuiltinWidgets=mt;exports.registerComponents=Ge;exports.registerField=Wn;exports.registerInfolistEntries=He;exports.registerInfolistEntry=aa;exports.registerLayout=Kn;exports.registerWidget=ja;exports.registerWidgets=tt;exports.setAdminClient=Ce;exports.toApiError=me;exports.tryUseRecord=te;exports.useAuthStore=A;exports.useLocaleStore=ie;exports.useManifestStore=I;exports.useMenuStore=Te;exports.useNotificationsStore=se;exports.useRecord=ka;exports.useResourceFormStore=Be;exports.useResourceIndexStore=je;exports.useThemeStore=re;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|