@dskripchenko/laravel-admin 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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"),$t=require("axios"),D=require("./formState-GlJBphEn.cjs");let H=null;function be(t){H=t}function x(){if(H===null)throw new Error("[admin] AdminClient is not registered. Call setAdminClient(...) before using stores.");return H}function St(){H=null}function Ut(){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}}),Ft=["aria-label","aria-pressed"],Tt=["data-icon"],fe=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,Tt)],8,Ft))}}),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}}),Dt={type:"button",class:"admin-topbar__icon-btn",style:{width:"auto",padding:"0 8px",gap:"4px","font-size":"12px"},"aria-label":"Сменить локаль"},pe=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",Dt,[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 g(){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:g,destroy:h}}),At=["title"],we=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,At)):e.createCommentVNode("",!0)]),_:1}))}});class A 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 ve extends A{constructor(n){super(401,n),this.name="UnauthenticatedError"}}class Ne extends A{constructor(n){super(403,n),this.name="ForbiddenError"}}class Ve extends A{constructor(n){super(404,n),this.name="NotFoundError"}}class X extends A{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 re(t,n){switch(t){case 401:return new ve(n);case 403:return new Ne(n);case 404:return new Ve(n);case 422:return new X(n);default:return new A(t,n)}}const R=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 A&&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 g(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:g,twoFactorRecovery:h,cancelChallenge:_,logout:y}}),Rt={type:"button",class:"admin-topbar__icon-btn admin-user-menu__trigger","aria-label":"Меню пользователя","aria-haspopup":"menu",style:{width:"auto",padding:"0 4px",gap:"8px"}},Ee=e.defineComponent({__name:"UserMenu",setup(t){const n=R(),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",Rt,[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}))}}),Lt={class:"admin-topbar"},Pt={class:"admin-topbar__breadcrumbs"},Mt={key:0,class:"sep"},Ce=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",Lt,[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",Pt,[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",Mt,"›")):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(we),e.createVNode(fe),e.createVNode(pe),e.createVNode(Ee)]))}}),xe=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=R(),g=h=>{if(Array.isArray(h.permissions)&&h.permissions.length>0&&!u.hasAnyPermission(h.permissions))return null;const _=(h.children??[]).map(g).filter(y=>y!==null);return{...h,children:_}};return t.value.map(g).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 g=[];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)}),g.push({group:h,items:_});return g});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(g){throw a.value=g instanceof Error?g:new Error(String(g)),g}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}}),It={class:"admin-sidebar-brand"},zt={class:"admin-sidebar-brand__mark"},qt={key:0,class:"admin-sidebar-brand__name"},Wt={key:0,class:"admin-sidebar-tenant"},Ot={class:"admin-sidebar-foot"},jt={key:0,class:"admin-sidebar-foot__text"},Kt=["href"],$e=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=xe(),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",It,[e.createElementVNode("div",zt,e.toDisplayString(t.brandMark),1),t.collapsed?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",qt,e.toDisplayString(t.brandName),1))]),t.tenant&&!t.collapsed?(e.openBlock(),e.createElementBlock("div",Wt,[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,g)=>(e.openBlock(),e.createBlock(e.unref(c.UidSidebarGroup),{key:`grp-${g}`,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",Ot,[t.version?(e.openBlock(),e.createElementBlock("span",jt,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,Kt)):e.createCommentVNode("",!0)])]),key:"0"}:void 0]),1032,["collapsed"]))}}),Gt={class:"admin-shell-root"},Ht={key:0,class:"admin-impersonation-banner",role:"status"},le="data-admin-impersonating",Se=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(le,"true"):document.documentElement.removeAttribute(le))},{immediate:!0}),e.onBeforeUnmount(()=>{typeof document<"u"&&document.documentElement.removeAttribute(le)}),(r,s)=>(e.openBlock(),e.createElementBlock("div",Gt,[t.impersonation?(e.openBlock(),e.createElementBlock("div",Ht,[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($e,{collapsed:t.collapsed},null,8,["collapsed"])])]),header:e.withCtx(()=>[e.renderSlot(r.$slots,"topbar",{},()=>[e.createVNode(Ce,{onToggleSidebar:s[0]||(s[0]=d=>o(!t.collapsed))})])]),default:e.withCtx(()=>[e.renderSlot(r.$slots,"default")]),_:3},8,["model-value"])]))}}),Ue=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(Se,{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 g(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:g,getSettings:h,load:_,reset:y}}),Xt={class:"admin-home"},Jt={class:"admin-home__title"},Yt={key:0,class:"admin-home__resources"},Qt={class:"admin-home__grid"},Zt=["onClick"],en={class:"admin-home__card-label"},tn={class:"admin-home__card-slug"},Fe=e.defineComponent({__name:"HomePage",setup(t){const n=P(),a=R(),i=U.useRouter(),o=e.computed(()=>a.user?.name??""),l=e.computed(()=>n.manifest?.resources??[]);return(r,s)=>(e.openBlock(),e.createElementBlock("div",Xt,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-home__hero"},{default:e.withCtx(()=>[e.createElementVNode("h1",Jt,"Добро пожаловать"+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",Yt,[s[1]||(s[1]=e.createElementVNode("h2",{class:"admin-home__heading"},"Ресурсы",-1)),e.createElementVNode("ul",Qt,[(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",en,e.toDisplayString(d.label),1),e.createElementVNode("span",tn,e.toDisplayString(d.slug),1)],8,Zt)]))),128))])])):e.createCommentVNode("",!0)]))}}),nn={class:"admin-status-page"},Te=e.defineComponent({__name:"ForbiddenPage",setup(t){const n=U.useRouter();return(a,i)=>(e.openBlock(),e.createElementBlock("div",nn,[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})]))}}),an={class:"admin-status-page"},De=e.defineComponent({__name:"NotFoundPage",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"},"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})]))}}),on={class:"admin-settings-page"},ln={class:"admin-settings-page__title"},rn={key:0,class:"admin-settings-page__hint"},sn={key:1,class:"admin-settings-page__debug"},Ae=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",on,[e.createVNode(e.unref(c.UidCard),{padding:"lg"},{default:e.withCtx(()=>[e.createElementVNode("h1",ln,e.toDisplayString(o.value?.label??i.value),1),o.value?(e.openBlock(),e.createElementBlock("pre",sn,e.toDisplayString(JSON.stringify(o.value.fields,null,2)),1)):(e.openBlock(),e.createElementBlock("p",rn," Settings «"+e.toDisplayString(i.value)+"» не найдено в manifest'е. ",1))]),_:1})]))}}),cn={class:"admin-status-page"},dn={class:"admin-status-page__title"},un={class:"admin-status-page__hint"},Re=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",cn,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[e.createElementVNode("h1",dn,e.toDisplayString(i.value),1),e.createElementVNode("p",un,[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})]))}}),mn={class:"admin-auth-card__row"},fn=["href"],pn={key:1,style:{"text-align":"center","font-size":"var(--uid-font-size-xs)",color:"var(--uid-text-secondary)","padding-top":"4px"}},vn=["href"],Le=e.defineComponent({__name:"LoginForm",props:{forgotUrl:{default:null},ssoLinkLabel:{default:null},ssoUrl:{default:null}},emits:["success"],setup(t,{emit:n}){const a=n,i=R(),o=e.ref(""),l=e.ref(""),r=e.ref(!1),s=e.ref(!1),d=e.ref(null),u=e.ref({}),g=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 A?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:g.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",mn,[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,fn)):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",pn,[f[4]||(f[4]=e.createTextVNode(" или войдите через ",-1)),e.createElementVNode("a",{href:t.ssoUrl,class:"admin-auth-card__link"},e.toDisplayString(t.ssoLinkLabel),9,vn)])):e.createCommentVNode("",!0)],32))}}),gn=["value","disabled","aria-label","onInput","onKeydown"],kn={class:"admin-auth-card__row"},Pe=e.defineComponent({__name:"TwoFactorForm",emits:["success","cancel"],setup(t,{emit:n}){const a=n,i=R(),o=e.ref("totp"),l=e.ref(["","","","","",""]),r=e.ref(""),s=e.ref([]),d=e.ref(!1),u=e.ref(null),g=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());g.value=k.remaining}a("success")}catch(k){k instanceof X?u.value=k.firstFieldMessage()??"Неверный код":k instanceof J?u.value="Нет соединения с сервером":k instanceof A?u.value=k.message||"Не удалось проверить код":u.value=k.message}finally{d.value=!1}}}function v(){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),g.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(g.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,gn))),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",kn,[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:v}," Отмена ")])],32))}}),hn={class:"admin-auth-page"},yn={key:0,class:"admin-auth-page__corner"},_n={class:"admin-auth-card__hd"},Bn=["src","alt"],bn={key:1,"aria-hidden":"true"},wn={key:2},Nn={class:"admin-auth-card__title"},Vn={class:"admin-auth-card__sub"},Me=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=R(),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",hn,[t.showCornerActions?(e.openBlock(),e.createElementBlock("div",yn,[e.createVNode(fe),e.createVNode(pe)])):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",_n,[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",bn,"🛡")):(e.openBlock(),e.createElementBlock("span",wn,e.toDisplayString(t.brandMark),1))],2),e.createElementVNode("div",Nn,[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",Vn,[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(Pe,{key:0,onSuccess:s[0]||(s[0]=()=>{}),onCancel:s[1]||(s[1]=()=>{})})):(e.openBlock(),e.createBlock(Le,{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},Ie=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),g=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 v(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.search=Q);const G=N.sort??s.value;G&&(E.sort=G,E.direction=N.direction??d.value);const Ct=N.filters??r.value;for(const[xt,z]of Object.entries(Ct))z==null||z===""||(E[`filter[${xt}]`]=Array.isArray(z)?z.join(","):String(z));return 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=v(N),G=await E.get(`/resources/${t.value}/list`,{params: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 Et(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:g,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:Et,rowId:m}}),En={class:"admin-page admin-resource-index"},Cn={class:"admin-page__hd"},xn={class:"admin-page__title-wrap"},$n={class:"admin-page__title"},Sn={key:0,class:"admin-page__count"},Un={class:"admin-page__actions"},Fn={key:0,class:"admin-bulk-toolbar",role:"toolbar"},Tn={class:"admin-bulk-toolbar__count"},Dn={key:1,class:"admin-filter-bar"},An=["value"],Rn={key:2,class:"admin-resource-index__loading"},Ln={key:5,class:"admin-resource-index__table"},Pn={class:"admin-resource-index__select-header"},Mn={class:"admin-resource-index__select-overlay"},In=["onClick"],zn={key:6,class:"admin-resource-index__footer"},ze=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=Ie(),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(v=>{const p=v;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(v=>v.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,v)=>{b!==v&&(o.setSlug(b),await o.load().catch(()=>{}))});async function g(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,v)=>(e.openBlock(),e.createElementBlock("section",En,[e.createElementVNode("header",Cn,[e.createElementVNode("div",xn,[e.createElementVNode("h1",$n,e.toDisplayString(s.value),1),t.subtitle||u.value?(e.openBlock(),e.createElementBlock("div",Sn,[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",Un,[e.renderSlot(b.$slots,"actions"),t.createRouteName?(e.openBlock(),e.createBlock(e.unref(c.UidButton),{key:0,variant:"primary",onClick:v[0]||(v[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",Fn,[e.createElementVNode("span",Tn,[v[8]||(v[8]=e.createTextVNode(" Выбрано ",-1)),e.createElementVNode("b",null,e.toDisplayString(e.unref(o).selectedCount),1)]),v[14]||(v[14]=e.createElementVNode("span",{class:"admin-bulk-toolbar__divider"},null,-1)),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:v[1]||(v[1]=p=>m("publish"))},{default:e.withCtx(()=>[...v[9]||(v[9]=[e.createTextVNode("Опубликовать",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:v[2]||(v[2]=p=>m("archive"))},{default:e.withCtx(()=>[...v[10]||(v[10]=[e.createTextVNode("Архивировать",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"ghost",onClick:v[3]||(v[3]=p=>m("export"))},{default:e.withCtx(()=>[...v[11]||(v[11]=[e.createTextVNode("Экспорт",-1)])]),_:1}),e.createVNode(e.unref(c.UidButton),{size:"sm",variant:"danger",onClick:v[4]||(v[4]=p=>m("delete"))},{default:e.withCtx(()=>[...v[12]||(v[12]=[e.createTextVNode("Удалить",-1)])]),_:1}),v[15]||(v[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(()=>[...v[13]||(v[13]=[e.createTextVNode(" Снять выделение ",-1)])]),_:1},8,["onClick"])])):(e.openBlock(),e.createElementBlock("div",Dn,[e.createElementVNode("input",{value:e.unref(o).search,type:"search",placeholder:"Поиск…",class:"admin-filter-bar__search",onKeydown:v[5]||(v[5]=e.withKeys(p=>e.unref(o).setSearch(p.target.value),["enter"]))},null,40,An),e.renderSlot(b.$slots,"filters",{filters:e.unref(o).filters,setFilter:e.unref(o).setFilter}),v[17]||(v[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(()=>[...v[16]||(v[16]=[e.createTextVNode(" Сброс ",-1)])]),_:1},8,["onClick"])):e.createCommentVNode("",!0)])),e.unref(o).loading?(e.openBlock(),e.createElementBlock("div",Rn,[(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(()=>[...v[18]||(v[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:v[6]||(v[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",Ln,[e.createElementVNode("div",Pn,[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":g},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",Mn,[(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:v[7]||(v[7]=e.withModifiers(()=>{},["stop"]))},null,8,["model-value","aria-label","onUpdate:modelValue"])],10,In))),128))])])),!e.unref(o).loading&&!e.unref(o).hasError&&!e.unref(o).isEmpty?(e.openBlock(),e.createElementBlock("footer",zn,[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)]))}}),ge=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),g=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 v(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(`/resources/${w}/read`,{params:{"filter[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"?`/resources/${t.value}/create`:`/resources/${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 A||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(`/resources/${t.value}/destroy`,{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:g,isEdit:h,isView:_,isDirty:f,hasError:y,reset:B,prepareCreate:b,load:v,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(),qn=q.register,ke=q.get,Wn=q.has,On=q.list,jn=W.register,ie=W.get,Kn=W.has,Gn=W.list;function Hn(){q.clear(),W.clear()}function qe(t){t.fields&&q.registerBundle(t.fields),t.layouts&&W.registerBundle(t.layouts)}const he=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}))}}),ye=e.defineComponent({__name:"FieldRenderer",props:{node:{}},setup(t){const n=t,a=e.computed(()=>ke(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(he,{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=ie(n.node.type);return r?{kind:"layout",component:r}:{kind:"unknown"}}const l=ie(n.node.type);return l?{kind:"layout",component:l}:ke(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(ye,{key:1,node:o.value},null,8,["node"])):(e.openBlock(),e.createBlock(he,{key:2,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}),Xn={class:"admin-page admin-resource-form"},Jn={class:"admin-page__hd"},Yn={class:"admin-page__title-wrap"},Qn={class:"admin-page__title"},Zn={class:"admin-page__actions"},ea={key:1,class:"admin-resource-form__loading"},ta={key:3,class:"admin-resource-form__savebar"},se=e.defineComponent({__name:"ResourceFormPage",props:{slug:{},id:{default:null},indexRouteName:{default:"admin.home"}},setup(t){const n=t,a=ge(),i=P(),o=U.useRouter(),l=D.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}),g=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",Xn,[e.createElementVNode("header",Jn,[e.createElementVNode("div",Yn,[e.createElementVNode("a",{class:"admin-resource-form__back",onClick:y},"← Назад"),e.createElementVNode("h1",Qn,e.toDisplayString(d.value),1),u.value?(e.openBlock(),e.createBlock(e.unref(c.UidBadge),{key:0,variant:g.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.value),1)]),_:1},8,["variant"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Zn,[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",ea,[(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",ta,[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(),na=j.register,ce=j.get,aa=j.has,oa=j.list,la=j.clear,We=j.registerBundle,Oe=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}))}}),ra={key:1,class:"admin-infolist-rows"},ia={key:2,class:"admin-infolist-cols"},sa={key:3,class:"admin-infolist-section"},ca={key:0,class:"admin-infolist-section__hd"},da={key:0,class:"admin-infolist-section__title"},ua={key:1,class:"admin-infolist-section__description"},ma={class:"admin-infolist-section__body"},fa={key:4,class:"admin-infolist-tabs"},pa={class:"admin-infolist-tabs__list",role:"tablist"},va={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=ce(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 g=ce(n.node.type);return g?{kind:"entry",component:g}:{kind:"unknown"}}),o=e.computed(()=>{const{type:g,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 g=n.node.active;return typeof g=="number"?g:0}),u=e.computed(()=>n.node.items??[]);return(g,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",ra,[(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",ia,[(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",sa,[r.value||s.value?(e.openBlock(),e.createElementBlock("header",ca,[r.value?(e.openBlock(),e.createElementBlock("h3",da,e.toDisplayString(r.value),1)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("p",ua,e.toDisplayString(s.value),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",ma,[(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",fa,[e.createElementVNode("ul",pa,[(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",va,[(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(Oe,{key:5,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}}),_e=Symbol("admin.infolist-record");function Ke(t){e.provide(_e,t)}function ga(){const t=e.inject(_e);if(!t)throw new Error("useRecord() called outside of provideRecord() scope");return t}function Y(){return e.inject(_e,null)}const ka={class:"admin-page admin-resource-view"},ha={class:"admin-page__hd"},ya={class:"admin-page__title-wrap"},_a={class:"admin-page__title"},Ba={class:"admin-page__actions"},ba={key:1,class:"admin-resource-view__loading"},Ge=e.defineComponent({__name:"ResourceViewPage",props:{slug:{},id:{},editRouteName:{default:void 0},indexRouteName:{default:"admin.home"}},setup(t){const n=t,a=ge(),i=P(),o=U.useRouter();Ke(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([g,h])=>{await a.load(g,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(g,h)=>(e.openBlock(),e.createElementBlock("section",ka,[e.createElementVNode("header",ha,[e.createElementVNode("div",ya,[e.createElementVNode("h1",_a,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",ba,[(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(je,{key:y,node:_},null,8,["node"]))),128))]),_:1}))]))}}),wa={class:"admin-page admin-profile"},Na={class:"admin-page__hd"},Va={class:"admin-page__title-wrap"},Ea={class:"admin-page__title"},Ca={class:"admin-page__count"},xa={class:"admin-profile__layout"},$a={class:"admin-profile__nav","aria-label":"Profile sections"},Sa=["onClick"],Ua=["data-icon"],Fa={class:"admin-profile__content"},Ta={class:"admin-profile__hero"},Da={class:"admin-profile__hero-text"},Aa={class:"admin-profile__hero-name"},Ra={class:"admin-profile__hero-meta"},La={class:"admin-profile__form"},Pa={class:"admin-profile__card-ft"},Ma={class:"admin-profile__card-hd"},Ia={key:0,class:"admin-profile__hint"},za={key:1,class:"admin-profile__hint"},qa={class:"admin-profile__card-ft"},Wa={class:"admin-profile__hint"},He=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=R(),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(v){d.value=v,i("update:section",v)}const g=e.ref({name:o.user?.name??"",email:o.user?.email??"",locale:r.current,theme:l.current}),h=e.computed(()=>r.available.map(v=>({value:v,label:v.toUpperCase()}))),_=e.computed(()=>l.available.map(v=>({value:v,label:v==="dark"?"Тёмная":v==="light"?"Светлая":v})));function y(){i("save",{...g.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(v,p)=>(e.openBlock(),e.createElementBlock("section",wa,[e.createElementVNode("header",Na,[e.createElementVNode("div",Va,[e.createElementVNode("h1",Ea,e.toDisplayString(t.title),1),e.createElementVNode("div",Ca,e.toDisplayString(t.subtitle),1)])]),e.createElementVNode("div",xa,[e.createElementVNode("nav",$a,[(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,Ua),e.createElementVNode("span",null,e.toDisplayString(k.label),1)],10,Sa)),64))]),e.createElementVNode("div",Fa,[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",Ta,[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",Da,[e.createElementVNode("div",Aa,e.toDisplayString(e.unref(o).user?.name??"—"),1),e.createElementVNode("div",Ra,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",La,[e.createVNode(e.unref(c.UidInput),{modelValue:g.value.name,"onUpdate:modelValue":p[0]||(p[0]=k=>g.value.name=k),label:"Имя",name:"name"},null,8,["modelValue"]),e.createVNode(e.unref(c.UidInput),{modelValue:g.value.email,"onUpdate:modelValue":p[1]||(p[1]=k=>g.value.email=k),label:"Email",type:"email",name:"email"},null,8,["modelValue"]),e.createVNode(e.unref(c.UidSelect),{modelValue:g.value.locale,"onUpdate:modelValue":p[2]||(p[2]=k=>g.value.locale=k),options:h.value,label:"Язык"},null,8,["modelValue","options"]),e.createVNode(e.unref(c.UidSelect),{modelValue:g.value.theme,"onUpdate:modelValue":p[3]||(p[3]=k=>g.value.theme=k),options:_.value,label:"Тема"},null,8,["modelValue","options"])]),e.createElementVNode("footer",Pa,[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",Ma,[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",Ia," 2FA включена. У вас остались recovery-коды на случай потери устройства. ")):(e.openBlock(),e.createElementBlock("p",za," Включите 2FA для дополнительной защиты аккаунта. ")),e.createElementVNode("footer",qa,[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(v.$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(v.$slots,d.value,{key:2,section:d.value},()=>[e.createVNode(e.unref(c.UidCard),{padding:"md"},{default:e.withCtx(()=>[e.createElementVNode("p",Wa," Section «"+e.toDisplayString(d.value)+"» не реализована библиотекой — host-проект подключает её через slot "+e.toDisplayString(d.value)+". ",1)]),_:1})])])])]))}}),K=oe(),Oa=K.register,Xe=K.get,ja=K.has,Ka=K.list,Ga=K.clear,Je=K.registerBundle,Ye=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}))}}),Qe=e.defineComponent({__name:"WidgetRenderer",props:{node:{}},setup(t){const n=t,a=e.computed(()=>Xe(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(Ye,{key:1,type:t.node.type},null,8,["type"]))}}),Ha={class:"admin-page admin-dashboard"},Xa={class:"admin-page__hd"},Ja={class:"admin-page__title-wrap"},Ya={class:"admin-page__title"},Qa={key:0,class:"admin-page__count"},Za={class:"admin-page__actions"},eo={class:"admin-dashboard__grid"},Ze=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",Ha,[e.createElementVNode("header",Xa,[e.createElementVNode("div",Ja,[e.createElementVNode("h1",Ya,e.toDisplayString(l.value),1),r.value?(e.openBlock(),e.createElementBlock("div",Qa,e.toDisplayString(r.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Za,[e.renderSlot(d.$slots,"actions")])]),e.createElementVNode("div",eo,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(g,h)=>(e.openBlock(),e.createElementBlock("div",{key:h,class:"admin-dashboard__cell",style:e.normalizeStyle({gridColumn:`span ${s(g)} / span ${s(g)}`})},[e.createVNode(Qe,{node:g},null,8,["node"])],4))),128))])]))}}),et=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"]))}}),to={key:0,class:"admin-widget__hd"},no={key:0,class:"admin-widget__title"},ao={key:1,class:"admin-widget__desc"},oo=["viewBox","height","aria-label"],lo=["x","y","width","height","fill","data-label","data-value"],tt=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",to,[t.title?(e.openBlock(),e.createElementBlock("h3",no,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("p",ao,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,lo))),128))],8,oo))]),_:1}))}}),ro={key:0,class:"admin-widget__hd"},io={class:"admin-widget__title"},so={class:"admin-donut-widget__row"},co=["aria-label"],uo=["d","fill"],mo={class:"admin-donut-widget__legend"},fo={class:"admin-donut-widget__label"},po={class:"admin-donut-widget__value"},nt=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,g=50,h=60,_=60,y=h+g*Math.cos(d-Math.PI/2),f=_+g*Math.sin(d-Math.PI/2),m=h+g*Math.cos(u-Math.PI/2),B=_+g*Math.sin(u-Math.PI/2),b=u-d>Math.PI?1:0,v=n.data.length===1?`M ${h-g} ${_} a ${g} ${g} 0 1 0 ${g*2} 0 a ${g} ${g} 0 1 0 ${-g*2} 0`:`M ${h} ${_} L ${y} ${f} A ${g} ${g} 0 ${b} 1 ${m} ${B} Z`;return{...r,path:v,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",ro,[e.createElementVNode("h3",io,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",so,[(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,uo))),128)),r[0]||(r[0]=e.createElementVNode("circle",{cx:"60",cy:"60",r:"30",fill:"var(--uid-surface-raised)"},null,-1))],8,co)),e.createElementVNode("ul",mo,[(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",fo,e.toDisplayString(s.label),1),e.createElementVNode("span",po,e.toDisplayString(s.pct)+"%",1)]))),128))])])]),_:1}))}}),vo={key:0,class:"admin-widget__hd"},go={class:"admin-widget__title"},at=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",vo,[e.createElementVNode("h3",go,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}))}}),ko={key:0,class:"admin-widget__hd"},ho={class:"admin-widget__title"},ot=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",ko,[e.createElementVNode("h3",ho,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}))}}),yo={key:0,class:"admin-widget__hd"},_o={class:"admin-widget__title"},Bo={style:{display:"flex","justify-content":"center"}},lt=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",yo,[e.createElementVNode("h3",_o,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}))}}),bo={key:0,class:"admin-widget__hd"},wo={class:"admin-widget__title"},No={class:"admin-markdown-widget"},rt=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",bo,[e.createElementVNode("h3",wo,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",No,e.toDisplayString(t.content),1)]),_:1}))}});function it(){Je({stat:et,"bar-chart":tt,"donut-chart":nt,"recent-table":at,heatmap:ot,gauge:lt,markdown:rt})}function st(t){return t.success===!0}function Vo(t){return t.success===!1}function ct(t){const n=$t.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=Eo("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(st(l))return o.data=l.payload,o;throw re(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=re(l,r);return s instanceof ve&&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 Eo(t){if(typeof document>"u")return null;const n=document.cookie.match(new RegExp("(^|; )"+Co(t)+"=([^;]*)"));return n?n[2]:null}function Co(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Z(t,n){const a=t.permissions?.[n];return typeof a=="string"&&a.length>0?[a]:[]}function xo(t,n){const a=t.permissions?.[n];return typeof a=="string"&&a.length>0?[a]:[]}function $o(t){return Array.isArray(t.permission)?t.permission:typeof t.permission=="string"&&t.permission.length>0?[t.permission]:[]}function So(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")}},{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")}},{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:!0},{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:!0}]}function Uo(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:$o(t)}}}function Fo(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:xo(t,"view")}}}function To(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 dt(t,n){if(t===null)return[];const a=[];for(const i of t.resources)a.push(...So(i,n));for(const i of t.screens)a.push(Uo(i,n));for(const i of t.settings)a.push(Fo(i,n));for(const i of t.dashboards){const o=To(i,n);o&&a.push(o)}return a}function ut(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=R();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 mt(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 Do=["admin.resource.","admin.screen.","admin.settings.","admin.dashboard."];function Ao(t){return typeof t!="string"?!1:Do.some(n=>t.startsWith(n))}function ft(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(ut(t.authGuard)),l.afterEach(mt(t.titleGuard)),l.replaceManifestRoutes=r=>{const s=l.getRoutes();for(const u of s)Ao(u.name)&&l.removeRoute(u.name);l.hasRoute("admin.notFound")&&l.removeRoute("admin.notFound");const d=dt(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=D.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"]))}}),pt=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=D.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"]))}}),vt=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=D.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"]))}}),gt=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=D.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"]))}}),de=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=D.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=D.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"]))}}),kt=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"]))}}),ht=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"]))}}),Ro={key:0,class:"admin-section__header"},Lo={key:0,class:"admin-section__title"},Po={key:1,class:"admin-section__description"},Mo={class:"admin-section__body"},ue=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",Ro,[t.title?(e.openBlock(),e.createElementBlock("h3",Lo,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("p",Po,e.toDisplayString(t.description),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Mo,[(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}))}}),yt=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,g)=>(e.openBlock(),e.createBlock(e.unref(c.UidTab),{key:o(u,g),value:o(u,g)},{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,g)=>(e.openBlock(),e.createBlock(e.unref(c.UidTabPanel),{key:`panel-${o(u,g)}`,value:o(u,g)},{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 _t(){qe({fields:{text:I,email:I,url:I,password:I,tel:I,search:I,textarea:pt,number:vt,select:gt,checkbox:de,switcher:de,date:ee,datetime:ee,time:ee},layouts:{rows:kt,columns:ht,section:ue,block:ue,tabs:yt}})}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))}}),Io={key:1,class:"admin-infolist-text"},bt=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",Io,"—"))}}),zo=["data-icon"],qo={key:0},wt=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,zo),o.value?(e.openBlock(),e.createElementBlock("span",qo,e.toDisplayString(o.value),1)):e.createCommentVNode("",!0)],2))}}),Wo={key:1,class:"admin-infolist-text"},me=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",Wo,"—"))}});function Nt(){We({text:Bt,badge:bt,icon:wt,keyvalue:me,"key-value":me})}function Oo(t,n={}){const a=n.pages??{},i=n.base??jo(t.baseUrl)??"/admin",o=ct({baseURL:t.apiUrl,csrfToken:t.csrf});be(o);const l=e.createApp(Ue),r=L.createPinia();l.use(r),R().hydrate(t),ne().hydrate(t),te().hydrate(t),ae().hydrate(t),_t(),it(),Nt();const s=ft({base:i,history:n.router?.history??U.createWebHistory(i),components:{login:a.login??Me,home:a.home??Fe,forbidden:a.forbidden??Te,notFound:a.notFound??De,profile:a.profile??He,resourceIndex:a.resourceIndex??ze,resourceCreate:a.resourceCreate??se,resourceEdit:a.resourceEdit??se,resourceView:a.resourceView??Ge,dashboard:a.dashboard??Ze,settings:a.settings??Ae,screen:a.screen??Re},extraRoutes:n.router?.extraRoutes,authGuard:n.router?.authGuard,titleGuard:n.router?.titleGuard});return l.use(s),n.skipManifestLoad||P().load().then(u=>{s.replaceManifestRoutes(u)}).catch(u=>{typeof console<"u"&&console.error("[laravel-admin] manifest load failed:",u)}),n.onAppCreated?.(l),{app:l,router:s,client:o}}function jo(t){if(!t)return null;try{return new URL(t).pathname||"/admin"}catch{return t.startsWith("/")?t:null}}async function Ko(t={}){const n=Vt();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 Vt(){return typeof window>"u"?null:window.__ADMIN_BOOTSTRAP__??null}function Go(){return typeof document>"u"?null:document.querySelector('meta[name="csrf-token"]')?.getAttribute("content")??null}const Ho={class:"admin-notifs__hd"},Xo={class:"admin-notifs__title"},Jo={key:0,class:"admin-notifs__count"},Yo={class:"admin-notifs__list"},Qo={key:0,class:"admin-notifs__empty"},Zo={key:1,class:"admin-notifs__empty"},el=["onClick"],tl=["data-kind"],nl={class:"admin-notifs__body"},al={class:"admin-notifs__row1"},ol={key:0,class:"admin-notifs__title-strong"},ll={key:1,class:"admin-notifs__title-soft"},rl={class:"admin-notifs__time"},il={key:0,class:"admin-notifs__text"},sl=["onClick"],cl=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 g(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()),v=Math.floor(b/6e4);if(v<1)return"только что";if(v<60)return`${v} мин назад`;const p=Math.floor(v/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",Ho,[e.createElementVNode("h2",Xo,[B[0]||(B[0]=e.createTextVNode(" Уведомления ",-1)),e.unref(o).unreadCount>0?(e.openBlock(),e.createElementBlock("span",Jo," ("+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",Yo,[e.unref(o).loading?(e.openBlock(),e.createElementBlock("li",Qo," Загрузка… ")):e.unref(o).items.length===0?(e.openBlock(),e.createElementBlock("li",Zo," Нет уведомлений ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(o).items,v=>(e.openBlock(),e.createElementBlock("li",{key:v.id,class:e.normalizeClass(["admin-notifs__item",`admin-notifs__item--${h(v)}`,{"admin-notifs__item--unread":!v.read_at}]),onClick:p=>u(v)},[e.createElementVNode("span",{class:"admin-notifs__icon","data-kind":h(v)},null,8,tl),e.createElementVNode("div",nl,[e.createElementVNode("div",al,[v.read_at?(e.openBlock(),e.createElementBlock("span",ll,e.toDisplayString(_(v)),1)):(e.openBlock(),e.createElementBlock("strong",ol,e.toDisplayString(_(v)),1)),e.createElementVNode("span",rl,e.toDisplayString(f(v.created_at)),1)]),y(v)?(e.openBlock(),e.createElementBlock("p",il,e.toDisplayString(y(v)),1)):e.createCommentVNode("",!0)]),e.createElementVNode("button",{type:"button",class:"admin-notifs__close","aria-label":"Удалить",onClick:p=>g(v,p)}," × ",8,sl)],10,el))),128))])]),_:1},8,["value"])),64))]),_:1},8,["model-value"])]),_:1},8,["model-value"]))}}),dl={class:"admin-page admin-import-wizard"},ul={class:"admin-page__hd"},ml={class:"admin-page__title-wrap"},fl={class:"admin-page__title"},pl={class:"admin-page__actions"},vl={key:0,class:"admin-import-wizard__empty"},gl={key:1,class:"admin-import-wizard__mapping"},kl={class:"admin-import-wizard__map-source"},hl={key:0,class:"admin-import-wizard__map-sample"},yl={class:"admin-import-wizard__card-hd"},_l={key:2,class:"admin-import-wizard__empty"},Bl={key:0,class:"admin-import-wizard__empty"},bl={class:"admin-import-wizard__kpi"},wl={class:"admin-import-wizard__nav"},Nl=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 g=e.ref({});function h(p,k){g.value[p]=k===null||k===""?null:String(k)}function _(){return a.headers.map(p=>({source:p.key,target:g.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(g.value).some(p=>p!==null);case 2:return!0;default:return!1}}),b=e.computed(()=>[{value:"",label:"Не импортировать"},...a.fieldOptions]);function v(){i("cancel")}return(p,k)=>(e.openBlock(),e.createElementBlock("section",dl,[e.createElementVNode("header",ul,[e.createElementVNode("div",ml,[e.createElementVNode("h1",fl,e.toDisplayString(t.title),1)]),e.createElementVNode("div",pl,[e.createVNode(e.unref(c.UidButton),{variant:"ghost",onClick:v},{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",vl," Нет данных — host ещё не отдал headers. Загрузите файл сначала. ")):(e.openBlock(),e.createElementBlock("div",gl,[(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",kl,[e.createElementVNode("strong",null,e.toDisplayString(V.label),1),V.sample?(e.openBlock(),e.createElementBlock("span",hl," «"+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":g.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",yl,[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",_l," 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",bl,[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",wl,[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)])]))}}),Vl={class:"admin-page admin-field-gallery"},El={class:"admin-gallery__group-title"},Cl={class:"admin-gallery__grid"},xl={class:"admin-gallery__card-hd"},$l={class:"admin-gallery__card-title"},Sl={class:"admin-gallery__card-type"},Ul={class:"admin-gallery__card-desc"},Fl={class:"admin-gallery__card-demo"},Tl=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 D.provideFormState(i),(o,l)=>(e.openBlock(),e.createElementBlock("section",Vl,[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",El,e.toDisplayString(s),1),e.createElementVNode("div",Cl,[(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",xl,[e.createElementVNode("h3",$l,e.toDisplayString(d.title),1),e.createElementVNode("code",Sl,"type: "+e.toDisplayString(d.type),1)]),e.createElementVNode("p",Ul,e.toDisplayString(d.description),1),e.createElementVNode("div",Fl,[e.createVNode(ye,{node:d.node},null,8,["node"])])]),_:2},1024))),128))])]))),128))]))}});exports.provideFormState=D.provideFormState;exports.tryUseFormState=D.tryUseFormState;exports.useFormState=D.useFormState;exports.AdminApp=Ue;exports.AdminShell=Se;exports.AdminSidebar=$e;exports.AdminTopBar=Ce;exports.ApiError=A;exports.BadgeEntry=bt;exports.BarChartWidget=tt;exports.CheckboxField=de;exports.ColumnsLayout=ht;exports.DashboardPage=Ze;exports.DateField=ee;exports.DonutChartWidget=nt;exports.FieldGalleryPage=Tl;exports.FieldRenderer=ye;exports.ForbiddenError=Ne;exports.ForbiddenPage=Te;exports.GaugeWidget=lt;exports.HeatmapWidget=ot;exports.HomePage=Fe;exports.IconEntry=wt;exports.ImportWizardPage=Nl;exports.InfolistRenderer=je;exports.KeyValueEntry=me;exports.LayoutRenderer=O;exports.LocaleSwitcher=pe;exports.LoginForm=Le;exports.LoginPage=Me;exports.MarkdownWidget=rt;exports.NetworkError=J;exports.NotFoundError=Ve;exports.NotFoundPage=De;exports.NotificationBell=we;exports.NotificationsDrawer=cl;exports.NumberField=vt;exports.ProfilePage=He;exports.RecentTableWidget=at;exports.ResourceFormPage=se;exports.ResourceIndexPage=ze;exports.ResourceViewPage=Ge;exports.RowsLayout=kt;exports.SectionLayout=ue;exports.SelectField=gt;exports.SettingsPage=Ae;exports.StatWidget=et;exports.TabsLayout=yt;exports.TextAreaField=pt;exports.TextEntry=Bt;exports.TextField=I;exports.ThemeToggle=fe;exports.TwoFactorForm=Pe;exports.UnauthenticatedError=ve;exports.UnknownEntry=Oe;exports.UnknownField=he;exports.UnknownScreenPage=Re;exports.UnknownWidget=Ye;exports.UserMenu=Ee;exports.ValidationError=X;exports.WidgetRenderer=Qe;exports.buildRoutesFromManifest=dt;exports.clearAdminClient=St;exports.clearInfolistRegistry=la;exports.clearRegistry=Hn;exports.clearWidgetRegistry=Ga;exports.createAdminApp=Oo;exports.createAdminClient=ct;exports.createAdminRouter=ft;exports.createAuthGuard=ut;exports.createTitleGuard=mt;exports.getAdminClient=x;exports.getField=ke;exports.getInfolistEntry=ce;exports.getLayout=ie;exports.getWidget=Xe;exports.hasAdminClient=Ut;exports.hasField=Wn;exports.hasInfolistEntry=aa;exports.hasLayout=Kn;exports.hasWidget=ja;exports.isError=Vo;exports.isSuccess=st;exports.listFields=On;exports.listInfolistEntries=oa;exports.listLayouts=Gn;exports.listWidgets=Ka;exports.loadBootstrap=Ko;exports.provideRecord=Ke;exports.readCsrfFromMeta=Go;exports.readInlineBootstrap=Vt;exports.registerBuiltinComponents=_t;exports.registerBuiltinInfolistEntries=Nt;exports.registerBuiltinWidgets=it;exports.registerComponents=qe;exports.registerField=qn;exports.registerInfolistEntries=We;exports.registerInfolistEntry=na;exports.registerLayout=jn;exports.registerWidget=Oa;exports.registerWidgets=Je;exports.setAdminClient=be;exports.toApiError=re;exports.tryUseRecord=Y;exports.useAuthStore=R;exports.useLocaleStore=ne;exports.useManifestStore=P;exports.useMenuStore=xe;exports.useNotificationsStore=ae;exports.useRecord=ga;exports.useResourceFormStore=ge;exports.useResourceIndexStore=Ie;exports.useThemeStore=te;
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"),$t=require("axios"),A=require("./formState-GlJBphEn.cjs");let H=null;function be(t){H=t}function x(){if(H===null)throw new Error("[admin] AdminClient is not registered. Call setAdminClient(...) before using stores.");return H}function St(){H=null}function Ut(){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}}),Ft=["aria-label","aria-pressed"],Tt=["data-icon"],fe=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,Tt)],8,Ft))}}),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}}),Dt={type:"button",class:"admin-topbar__icon-btn",style:{width:"auto",padding:"0 8px",gap:"4px","font-size":"12px"},"aria-label":"Сменить локаль"},pe=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",Dt,[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}}),At=["title"],we=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,At)):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 ve extends R{constructor(n){super(401,n),this.name="UnauthenticatedError"}}class Ne extends R{constructor(n){super(403,n),this.name="ForbiddenError"}}class Ve 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 re(t,n){switch(t){case 401:return new ve(n);case 403:return new Ne(n);case 404:return new Ve(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}}),Rt={type:"button",class:"admin-topbar__icon-btn admin-user-menu__trigger","aria-label":"Меню пользователя","aria-haspopup":"menu",style:{width:"auto",padding:"0 4px",gap:"8px"}},Ee=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",Rt,[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}))}}),Lt={class:"admin-topbar"},Pt={class:"admin-topbar__breadcrumbs"},Mt={key:0,class:"sep"},Ce=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",Lt,[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",Pt,[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",Mt,"›")):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(we),e.createVNode(fe),e.createVNode(pe),e.createVNode(Ee)]))}}),xe=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}}),It={class:"admin-sidebar-brand"},zt={class:"admin-sidebar-brand__mark"},qt={key:0,class:"admin-sidebar-brand__name"},Wt={key:0,class:"admin-sidebar-tenant"},Ot={class:"admin-sidebar-foot"},jt={key:0,class:"admin-sidebar-foot__text"},Kt=["href"],$e=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=xe(),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",It,[e.createElementVNode("div",zt,e.toDisplayString(t.brandMark),1),t.collapsed?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",qt,e.toDisplayString(t.brandName),1))]),t.tenant&&!t.collapsed?(e.openBlock(),e.createElementBlock("div",Wt,[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",Ot,[t.version?(e.openBlock(),e.createElementBlock("span",jt,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,Kt)):e.createCommentVNode("",!0)])]),key:"0"}:void 0]),1032,["collapsed"]))}}),Gt={class:"admin-shell-root"},Ht={key:0,class:"admin-impersonation-banner",role:"status"},le="data-admin-impersonating",Se=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(le,"true"):document.documentElement.removeAttribute(le))},{immediate:!0}),e.onBeforeUnmount(()=>{typeof document<"u"&&document.documentElement.removeAttribute(le)}),(r,s)=>(e.openBlock(),e.createElementBlock("div",Gt,[t.impersonation?(e.openBlock(),e.createElementBlock("div",Ht,[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($e,{collapsed:t.collapsed},null,8,["collapsed"])])]),header:e.withCtx(()=>[e.renderSlot(r.$slots,"topbar",{},()=>[e.createVNode(Ce,{onToggleSidebar:s[0]||(s[0]=d=>o(!t.collapsed))})])]),default:e.withCtx(()=>[e.renderSlot(r.$slots,"default")]),_:3},8,["model-value"])]))}}),Ue=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(Se,{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}}),Xt={class:"admin-home"},Jt={class:"admin-home__title"},Yt={key:0,class:"admin-home__resources"},Qt={class:"admin-home__grid"},Zt=["onClick"],en={class:"admin-home__card-label"},tn={class:"admin-home__card-slug"},Fe=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",Xt,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-home__hero"},{default:e.withCtx(()=>[e.createElementVNode("h1",Jt,"Добро пожаловать"+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",Yt,[s[1]||(s[1]=e.createElementVNode("h2",{class:"admin-home__heading"},"Ресурсы",-1)),e.createElementVNode("ul",Qt,[(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",en,e.toDisplayString(d.label),1),e.createElementVNode("span",tn,e.toDisplayString(d.slug),1)],8,Zt)]))),128))])])):e.createCommentVNode("",!0)]))}}),nn={class:"admin-status-page"},Te=e.defineComponent({__name:"ForbiddenPage",setup(t){const n=U.useRouter();return(a,i)=>(e.openBlock(),e.createElementBlock("div",nn,[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})]))}}),an={class:"admin-status-page"},De=e.defineComponent({__name:"NotFoundPage",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"},"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})]))}}),on={class:"admin-settings-page"},ln={class:"admin-settings-page__title"},rn={key:0,class:"admin-settings-page__hint"},sn={key:1,class:"admin-settings-page__debug"},Ae=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",on,[e.createVNode(e.unref(c.UidCard),{padding:"lg"},{default:e.withCtx(()=>[e.createElementVNode("h1",ln,e.toDisplayString(o.value?.label??i.value),1),o.value?(e.openBlock(),e.createElementBlock("pre",sn,e.toDisplayString(JSON.stringify(o.value.fields,null,2)),1)):(e.openBlock(),e.createElementBlock("p",rn," Settings «"+e.toDisplayString(i.value)+"» не найдено в manifest'е. ",1))]),_:1})]))}}),cn={class:"admin-status-page"},dn={class:"admin-status-page__title"},un={class:"admin-status-page__hint"},Re=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",cn,[e.createVNode(e.unref(c.UidCard),{padding:"lg",class:"admin-status-page__card"},{default:e.withCtx(()=>[e.createElementVNode("h1",dn,e.toDisplayString(i.value),1),e.createElementVNode("p",un,[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})]))}}),mn={class:"admin-auth-card__row"},fn=["href"],pn={key:1,style:{"text-align":"center","font-size":"var(--uid-font-size-xs)",color:"var(--uid-text-secondary)","padding-top":"4px"}},vn=["href"],Le=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",mn,[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,fn)):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",pn,[f[4]||(f[4]=e.createTextVNode(" или войдите через ",-1)),e.createElementVNode("a",{href:t.ssoUrl,class:"admin-auth-card__link"},e.toDisplayString(t.ssoLinkLabel),9,vn)])):e.createCommentVNode("",!0)],32))}}),gn=["value","disabled","aria-label","onInput","onKeydown"],kn={class:"admin-auth-card__row"},Pe=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,gn))),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",kn,[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))}}),hn={class:"admin-auth-page"},yn={key:0,class:"admin-auth-page__corner"},_n={class:"admin-auth-card__hd"},Bn=["src","alt"],bn={key:1,"aria-hidden":"true"},wn={key:2},Nn={class:"admin-auth-card__title"},Vn={class:"admin-auth-card__sub"},Me=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",hn,[t.showCornerActions?(e.openBlock(),e.createElementBlock("div",yn,[e.createVNode(fe),e.createVNode(pe)])):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",_n,[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",bn,"🛡")):(e.openBlock(),e.createElementBlock("span",wn,e.toDisplayString(t.brandMark),1))],2),e.createElementVNode("div",Nn,[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",Vn,[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(Pe,{key:0,onSuccess:s[0]||(s[0]=()=>{}),onCancel:s[1]||(s[1]=()=>{})})):(e.openBlock(),e.createBlock(Le,{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},Ie=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.search=Q);const G=N.sort??s.value;G&&(E.sort=G,E.direction=N.direction??d.value);const Ct=N.filters??r.value;for(const[xt,z]of Object.entries(Ct))z==null||z===""||(E[`filter[${xt}]`]=Array.isArray(z)?z.join(","):String(z));return 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.get(`/resources/${t.value}/list`,{params: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 Et(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:Et,rowId:m}}),En={class:"admin-page admin-resource-index"},Cn={class:"admin-page__hd"},xn={class:"admin-page__title-wrap"},$n={class:"admin-page__title"},Sn={key:0,class:"admin-page__count"},Un={class:"admin-page__actions"},Fn={key:0,class:"admin-bulk-toolbar",role:"toolbar"},Tn={class:"admin-bulk-toolbar__count"},Dn={key:1,class:"admin-filter-bar"},An=["value"],Rn={key:2,class:"admin-resource-index__loading"},Ln={key:5,class:"admin-resource-index__table"},Pn={class:"admin-resource-index__select-header"},Mn={class:"admin-resource-index__select-overlay"},In=["onClick"],zn={key:6,class:"admin-resource-index__footer"},ze=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=Ie(),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",En,[e.createElementVNode("header",Cn,[e.createElementVNode("div",xn,[e.createElementVNode("h1",$n,e.toDisplayString(s.value),1),t.subtitle||u.value?(e.openBlock(),e.createElementBlock("div",Sn,[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",Un,[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",Fn,[e.createElementVNode("span",Tn,[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",Dn,[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,An),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",Rn,[(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",Ln,[e.createElementVNode("div",Pn,[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",Mn,[(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,In))),128))])])),!e.unref(o).loading&&!e.unref(o).hasError&&!e.unref(o).isEmpty?(e.openBlock(),e.createElementBlock("footer",zn,[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)]))}}),ge=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(`/resources/${w}/read`,{params:{"filter[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"?`/resources/${t.value}/create`:`/resources/${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(`/resources/${t.value}/destroy`,{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(),qn=q.register,ke=q.get,Wn=q.has,On=q.list,jn=W.register,ie=W.get,Kn=W.has,Gn=W.list;function Hn(){q.clear(),W.clear()}function qe(t){t.fields&&q.registerBundle(t.fields),t.layouts&&W.registerBundle(t.layouts)}const he=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}))}}),ye=e.defineComponent({__name:"FieldRenderer",props:{node:{}},setup(t){const n=t,a=e.computed(()=>ke(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(he,{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=ie(n.node.type);return r?{kind:"layout",component:r}:{kind:"unknown"}}const l=ie(n.node.type);return l?{kind:"layout",component:l}:ke(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(ye,{key:1,node:o.value},null,8,["node"])):(e.openBlock(),e.createBlock(he,{key:2,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}),Xn={class:"admin-page admin-resource-form"},Jn={class:"admin-page__hd"},Yn={class:"admin-page__title-wrap"},Qn={class:"admin-page__title"},Zn={class:"admin-page__actions"},ea={key:1,class:"admin-resource-form__loading"},ta={key:3,class:"admin-resource-form__savebar"},se=e.defineComponent({__name:"ResourceFormPage",props:{slug:{},id:{default:null},indexRouteName:{default:"admin.home"}},setup(t){const n=t,a=ge(),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",Xn,[e.createElementVNode("header",Jn,[e.createElementVNode("div",Yn,[e.createElementVNode("a",{class:"admin-resource-form__back",onClick:y},"← Назад"),e.createElementVNode("h1",Qn,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",Zn,[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",ea,[(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",ta,[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(),na=j.register,ce=j.get,aa=j.has,oa=j.list,la=j.clear,We=j.registerBundle,Oe=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}))}}),ra={key:1,class:"admin-infolist-rows"},ia={key:2,class:"admin-infolist-cols"},sa={key:3,class:"admin-infolist-section"},ca={key:0,class:"admin-infolist-section__hd"},da={key:0,class:"admin-infolist-section__title"},ua={key:1,class:"admin-infolist-section__description"},ma={class:"admin-infolist-section__body"},fa={key:4,class:"admin-infolist-tabs"},pa={class:"admin-infolist-tabs__list",role:"tablist"},va={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=ce(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=ce(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",ra,[(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",ia,[(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",sa,[r.value||s.value?(e.openBlock(),e.createElementBlock("header",ca,[r.value?(e.openBlock(),e.createElementBlock("h3",da,e.toDisplayString(r.value),1)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("p",ua,e.toDisplayString(s.value),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",ma,[(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",fa,[e.createElementVNode("ul",pa,[(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",va,[(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(Oe,{key:5,type:t.node.type,name:t.node.name},null,8,["type","name"]))}}}),_e=Symbol("admin.infolist-record");function Ke(t){e.provide(_e,t)}function ga(){const t=e.inject(_e);if(!t)throw new Error("useRecord() called outside of provideRecord() scope");return t}function Y(){return e.inject(_e,null)}const ka={class:"admin-page admin-resource-view"},ha={class:"admin-page__hd"},ya={class:"admin-page__title-wrap"},_a={class:"admin-page__title"},Ba={class:"admin-page__actions"},ba={key:1,class:"admin-resource-view__loading"},Ge=e.defineComponent({__name:"ResourceViewPage",props:{slug:{},id:{},editRouteName:{default:void 0},indexRouteName:{default:"admin.home"}},setup(t){const n=t,a=ge(),i=P(),o=U.useRouter();Ke(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",ka,[e.createElementVNode("header",ha,[e.createElementVNode("div",ya,[e.createElementVNode("h1",_a,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",ba,[(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(je,{key:y,node:_},null,8,["node"]))),128))]),_:1}))]))}}),wa={class:"admin-page admin-profile"},Na={class:"admin-page__hd"},Va={class:"admin-page__title-wrap"},Ea={class:"admin-page__title"},Ca={class:"admin-page__count"},xa={class:"admin-profile__layout"},$a={class:"admin-profile__nav","aria-label":"Profile sections"},Sa=["onClick"],Ua=["data-icon"],Fa={class:"admin-profile__content"},Ta={class:"admin-profile__hero"},Da={class:"admin-profile__hero-text"},Aa={class:"admin-profile__hero-name"},Ra={class:"admin-profile__hero-meta"},La={class:"admin-profile__form"},Pa={class:"admin-profile__card-ft"},Ma={class:"admin-profile__card-hd"},Ia={key:0,class:"admin-profile__hint"},za={key:1,class:"admin-profile__hint"},qa={class:"admin-profile__card-ft"},Wa={class:"admin-profile__hint"},He=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",wa,[e.createElementVNode("header",Na,[e.createElementVNode("div",Va,[e.createElementVNode("h1",Ea,e.toDisplayString(t.title),1),e.createElementVNode("div",Ca,e.toDisplayString(t.subtitle),1)])]),e.createElementVNode("div",xa,[e.createElementVNode("nav",$a,[(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,Ua),e.createElementVNode("span",null,e.toDisplayString(k.label),1)],10,Sa)),64))]),e.createElementVNode("div",Fa,[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",Ta,[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",Da,[e.createElementVNode("div",Aa,e.toDisplayString(e.unref(o).user?.name??"—"),1),e.createElementVNode("div",Ra,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",La,[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",Pa,[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",Ma,[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",Ia," 2FA включена. У вас остались recovery-коды на случай потери устройства. ")):(e.openBlock(),e.createElementBlock("p",za," Включите 2FA для дополнительной защиты аккаунта. ")),e.createElementVNode("footer",qa,[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",Wa," Section «"+e.toDisplayString(d.value)+"» не реализована библиотекой — host-проект подключает её через slot "+e.toDisplayString(d.value)+". ",1)]),_:1})])])])]))}}),K=oe(),Oa=K.register,Xe=K.get,ja=K.has,Ka=K.list,Ga=K.clear,Je=K.registerBundle,Ye=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}))}}),Qe=e.defineComponent({__name:"WidgetRenderer",props:{node:{}},setup(t){const n=t,a=e.computed(()=>Xe(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(Ye,{key:1,type:t.node.type},null,8,["type"]))}}),Ha={class:"admin-page admin-dashboard"},Xa={class:"admin-page__hd"},Ja={class:"admin-page__title-wrap"},Ya={class:"admin-page__title"},Qa={key:0,class:"admin-page__count"},Za={class:"admin-page__actions"},eo={class:"admin-dashboard__grid"},Ze=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",Ha,[e.createElementVNode("header",Xa,[e.createElementVNode("div",Ja,[e.createElementVNode("h1",Ya,e.toDisplayString(l.value),1),r.value?(e.openBlock(),e.createElementBlock("div",Qa,e.toDisplayString(r.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Za,[e.renderSlot(d.$slots,"actions")])]),e.createElementVNode("div",eo,[(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(Qe,{node:v},null,8,["node"])],4))),128))])]))}}),et=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"]))}}),to={key:0,class:"admin-widget__hd"},no={key:0,class:"admin-widget__title"},ao={key:1,class:"admin-widget__desc"},oo=["viewBox","height","aria-label"],lo=["x","y","width","height","fill","data-label","data-value"],tt=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",to,[t.title?(e.openBlock(),e.createElementBlock("h3",no,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("p",ao,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,lo))),128))],8,oo))]),_:1}))}}),ro={key:0,class:"admin-widget__hd"},io={class:"admin-widget__title"},so={class:"admin-donut-widget__row"},co=["aria-label"],uo=["d","fill"],mo={class:"admin-donut-widget__legend"},fo={class:"admin-donut-widget__label"},po={class:"admin-donut-widget__value"},nt=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",ro,[e.createElementVNode("h3",io,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",so,[(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,uo))),128)),r[0]||(r[0]=e.createElementVNode("circle",{cx:"60",cy:"60",r:"30",fill:"var(--uid-surface-raised)"},null,-1))],8,co)),e.createElementVNode("ul",mo,[(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",fo,e.toDisplayString(s.label),1),e.createElementVNode("span",po,e.toDisplayString(s.pct)+"%",1)]))),128))])])]),_:1}))}}),vo={key:0,class:"admin-widget__hd"},go={class:"admin-widget__title"},at=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",vo,[e.createElementVNode("h3",go,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}))}}),ko={key:0,class:"admin-widget__hd"},ho={class:"admin-widget__title"},ot=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",ko,[e.createElementVNode("h3",ho,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}))}}),yo={key:0,class:"admin-widget__hd"},_o={class:"admin-widget__title"},Bo={style:{display:"flex","justify-content":"center"}},lt=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",yo,[e.createElementVNode("h3",_o,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}))}}),bo={key:0,class:"admin-widget__hd"},wo={class:"admin-widget__title"},No={class:"admin-markdown-widget"},rt=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",bo,[e.createElementVNode("h3",wo,e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",No,e.toDisplayString(t.content),1)]),_:1}))}});function it(){Je({stat:et,"bar-chart":tt,"donut-chart":nt,"recent-table":at,heatmap:ot,gauge:lt,markdown:rt})}function st(t){return t.success===!0}function Vo(t){return t.success===!1}function ct(t){const n=$t.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=Eo("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(st(l))return o.data=l.payload,o;throw re(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=re(l,r);return s instanceof ve&&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 Eo(t){if(typeof document>"u")return null;const n=document.cookie.match(new RegExp("(^|; )"+Co(t)+"=([^;]*)"));return n?n[2]:null}function Co(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Z(t,n){const a=t.permissions?.[n];return typeof a=="string"&&a.length>0?[a]:[]}function xo(t,n){const a=t.permissions?.[n];return typeof a=="string"&&a.length>0?[a]:[]}function $o(t){return Array.isArray(t.permission)?t.permission:typeof t.permission=="string"&&t.permission.length>0?[t.permission]:[]}function So(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")}},{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")}},{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:!0},{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:!0}]}function Uo(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:$o(t)}}}function Fo(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:xo(t,"view")}}}function To(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 dt(t,n){if(t===null)return[];const a=[];for(const i of t.resources)a.push(...So(i,n));for(const i of t.screens)a.push(Uo(i,n));for(const i of t.settings)a.push(Fo(i,n));for(const i of t.dashboards){const o=To(i,n);o&&a.push(o)}return a}function ut(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 mt(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 Do=["admin.resource.","admin.screen.","admin.settings.","admin.dashboard."];function Ao(t){return typeof t!="string"?!1:Do.some(n=>t.startsWith(n))}function ft(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(ut(t.authGuard)),l.afterEach(mt(t.titleGuard)),l.replaceManifestRoutes=r=>{const s=l.getRoutes();for(const u of s)Ao(u.name)&&l.removeRoute(u.name);l.hasRoute("admin.notFound")&&l.removeRoute("admin.notFound");const d=dt(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"]))}}),pt=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"]))}}),vt=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"]))}}),gt=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"]))}}),de=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"]))}}),kt=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"]))}}),ht=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"]))}}),Ro={key:0,class:"admin-section__header"},Lo={key:0,class:"admin-section__title"},Po={key:1,class:"admin-section__description"},Mo={class:"admin-section__body"},ue=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",Ro,[t.title?(e.openBlock(),e.createElementBlock("h3",Lo,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("p",Po,e.toDisplayString(t.description),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Mo,[(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}))}}),yt=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 _t(){qe({fields:{text:I,email:I,url:I,password:I,tel:I,search:I,textarea:pt,number:vt,select:gt,checkbox:de,switcher:de,date:ee,datetime:ee,time:ee},layouts:{rows:kt,columns:ht,section:ue,block:ue,tabs:yt}})}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))}}),Io={key:1,class:"admin-infolist-text"},bt=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",Io,"—"))}}),zo=["data-icon"],qo={key:0},wt=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,zo),o.value?(e.openBlock(),e.createElementBlock("span",qo,e.toDisplayString(o.value),1)):e.createCommentVNode("",!0)],2))}}),Wo={key:1,class:"admin-infolist-text"},me=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",Wo,"—"))}});function Nt(){We({text:Bt,badge:bt,icon:wt,keyvalue:me,"key-value":me})}function Oo(t,n={}){const a=n.pages??{},i=n.base??jo(t.baseUrl)??"/admin",o=ct({baseURL:t.apiUrl,csrfToken:t.csrf});be(o);const l=e.createApp(Ue),r=L.createPinia();l.use(r),D().hydrate(t),ne().hydrate(t),te().hydrate(t),ae().hydrate(t),_t(),it(),Nt();const s=ft({base:i,history:n.router?.history??U.createWebHistory(i),components:{login:a.login??Me,home:a.home??Fe,forbidden:a.forbidden??Te,notFound:a.notFound??De,profile:a.profile??He,resourceIndex:a.resourceIndex??ze,resourceCreate:a.resourceCreate??se,resourceEdit:a.resourceEdit??se,resourceView:a.resourceView??Ge,dashboard:a.dashboard??Ze,settings:a.settings??Ae,screen:a.screen??Re},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 jo(t){if(!t)return null;try{return new URL(t).pathname||"/admin"}catch{return t.startsWith("/")?t:null}}async function Ko(t={}){const n=Vt();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 Vt(){return typeof window>"u"?null:window.__ADMIN_BOOTSTRAP__??null}function Go(){return typeof document>"u"?null:document.querySelector('meta[name="csrf-token"]')?.getAttribute("content")??null}const Ho={class:"admin-notifs__hd"},Xo={class:"admin-notifs__title"},Jo={key:0,class:"admin-notifs__count"},Yo={class:"admin-notifs__list"},Qo={key:0,class:"admin-notifs__empty"},Zo={key:1,class:"admin-notifs__empty"},el=["onClick"],tl=["data-kind"],nl={class:"admin-notifs__body"},al={class:"admin-notifs__row1"},ol={key:0,class:"admin-notifs__title-strong"},ll={key:1,class:"admin-notifs__title-soft"},rl={class:"admin-notifs__time"},il={key:0,class:"admin-notifs__text"},sl=["onClick"],cl=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",Ho,[e.createElementVNode("h2",Xo,[B[0]||(B[0]=e.createTextVNode(" Уведомления ",-1)),e.unref(o).unreadCount>0?(e.openBlock(),e.createElementBlock("span",Jo," ("+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",Yo,[e.unref(o).loading?(e.openBlock(),e.createElementBlock("li",Qo," Загрузка… ")):e.unref(o).items.length===0?(e.openBlock(),e.createElementBlock("li",Zo," Нет уведомлений ")):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,tl),e.createElementVNode("div",nl,[e.createElementVNode("div",al,[g.read_at?(e.openBlock(),e.createElementBlock("span",ll,e.toDisplayString(_(g)),1)):(e.openBlock(),e.createElementBlock("strong",ol,e.toDisplayString(_(g)),1)),e.createElementVNode("span",rl,e.toDisplayString(f(g.created_at)),1)]),y(g)?(e.openBlock(),e.createElementBlock("p",il,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,sl)],10,el))),128))])]),_:1},8,["value"])),64))]),_:1},8,["model-value"])]),_:1},8,["model-value"]))}}),dl={class:"admin-page admin-import-wizard"},ul={class:"admin-page__hd"},ml={class:"admin-page__title-wrap"},fl={class:"admin-page__title"},pl={class:"admin-page__actions"},vl={key:0,class:"admin-import-wizard__empty"},gl={key:1,class:"admin-import-wizard__mapping"},kl={class:"admin-import-wizard__map-source"},hl={key:0,class:"admin-import-wizard__map-sample"},yl={class:"admin-import-wizard__card-hd"},_l={key:2,class:"admin-import-wizard__empty"},Bl={key:0,class:"admin-import-wizard__empty"},bl={class:"admin-import-wizard__kpi"},wl={class:"admin-import-wizard__nav"},Nl=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",dl,[e.createElementVNode("header",ul,[e.createElementVNode("div",ml,[e.createElementVNode("h1",fl,e.toDisplayString(t.title),1)]),e.createElementVNode("div",pl,[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",vl," Нет данных — host ещё не отдал headers. Загрузите файл сначала. ")):(e.openBlock(),e.createElementBlock("div",gl,[(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",kl,[e.createElementVNode("strong",null,e.toDisplayString(V.label),1),V.sample?(e.openBlock(),e.createElementBlock("span",hl," «"+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",yl,[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",_l," 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",bl,[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",wl,[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)])]))}}),Vl={class:"admin-page admin-field-gallery"},El={class:"admin-gallery__group-title"},Cl={class:"admin-gallery__grid"},xl={class:"admin-gallery__card-hd"},$l={class:"admin-gallery__card-title"},Sl={class:"admin-gallery__card-type"},Ul={class:"admin-gallery__card-desc"},Fl={class:"admin-gallery__card-demo"},Tl=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",Vl,[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",El,e.toDisplayString(s),1),e.createElementVNode("div",Cl,[(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",xl,[e.createElementVNode("h3",$l,e.toDisplayString(d.title),1),e.createElementVNode("code",Sl,"type: "+e.toDisplayString(d.type),1)]),e.createElementVNode("p",Ul,e.toDisplayString(d.description),1),e.createElementVNode("div",Fl,[e.createVNode(ye,{node:d.node},null,8,["node"])])]),_:2},1024))),128))])]))),128))]))}});exports.provideFormState=A.provideFormState;exports.tryUseFormState=A.tryUseFormState;exports.useFormState=A.useFormState;exports.AdminApp=Ue;exports.AdminShell=Se;exports.AdminSidebar=$e;exports.AdminTopBar=Ce;exports.ApiError=R;exports.BadgeEntry=bt;exports.BarChartWidget=tt;exports.CheckboxField=de;exports.ColumnsLayout=ht;exports.DashboardPage=Ze;exports.DateField=ee;exports.DonutChartWidget=nt;exports.FieldGalleryPage=Tl;exports.FieldRenderer=ye;exports.ForbiddenError=Ne;exports.ForbiddenPage=Te;exports.GaugeWidget=lt;exports.HeatmapWidget=ot;exports.HomePage=Fe;exports.IconEntry=wt;exports.ImportWizardPage=Nl;exports.InfolistRenderer=je;exports.KeyValueEntry=me;exports.LayoutRenderer=O;exports.LocaleSwitcher=pe;exports.LoginForm=Le;exports.LoginPage=Me;exports.MarkdownWidget=rt;exports.NetworkError=J;exports.NotFoundError=Ve;exports.NotFoundPage=De;exports.NotificationBell=we;exports.NotificationsDrawer=cl;exports.NumberField=vt;exports.ProfilePage=He;exports.RecentTableWidget=at;exports.ResourceFormPage=se;exports.ResourceIndexPage=ze;exports.ResourceViewPage=Ge;exports.RowsLayout=kt;exports.SectionLayout=ue;exports.SelectField=gt;exports.SettingsPage=Ae;exports.StatWidget=et;exports.TabsLayout=yt;exports.TextAreaField=pt;exports.TextEntry=Bt;exports.TextField=I;exports.ThemeToggle=fe;exports.TwoFactorForm=Pe;exports.UnauthenticatedError=ve;exports.UnknownEntry=Oe;exports.UnknownField=he;exports.UnknownScreenPage=Re;exports.UnknownWidget=Ye;exports.UserMenu=Ee;exports.ValidationError=X;exports.WidgetRenderer=Qe;exports.buildRoutesFromManifest=dt;exports.clearAdminClient=St;exports.clearInfolistRegistry=la;exports.clearRegistry=Hn;exports.clearWidgetRegistry=Ga;exports.createAdminApp=Oo;exports.createAdminClient=ct;exports.createAdminRouter=ft;exports.createAuthGuard=ut;exports.createTitleGuard=mt;exports.getAdminClient=x;exports.getField=ke;exports.getInfolistEntry=ce;exports.getLayout=ie;exports.getWidget=Xe;exports.hasAdminClient=Ut;exports.hasField=Wn;exports.hasInfolistEntry=aa;exports.hasLayout=Kn;exports.hasWidget=ja;exports.isError=Vo;exports.isSuccess=st;exports.listFields=On;exports.listInfolistEntries=oa;exports.listLayouts=Gn;exports.listWidgets=Ka;exports.loadBootstrap=Ko;exports.provideRecord=Ke;exports.readCsrfFromMeta=Go;exports.readInlineBootstrap=Vt;exports.registerBuiltinComponents=_t;exports.registerBuiltinInfolistEntries=Nt;exports.registerBuiltinWidgets=it;exports.registerComponents=qe;exports.registerField=qn;exports.registerInfolistEntries=We;exports.registerInfolistEntry=na;exports.registerLayout=jn;exports.registerWidget=Oa;exports.registerWidgets=Je;exports.setAdminClient=be;exports.toApiError=re;exports.tryUseRecord=Y;exports.useAuthStore=D;exports.useLocaleStore=ne;exports.useManifestStore=P;exports.useMenuStore=xe;exports.useNotificationsStore=ae;exports.useRecord=ga;exports.useResourceFormStore=ge;exports.useResourceIndexStore=Ie;exports.useThemeStore=te;
2
2
  //# sourceMappingURL=index.cjs.map